Skip to content

Commit aaf8d83

Browse files
committed
Try polyfilling nodejs util
1 parent 26c0891 commit aaf8d83

File tree

2 files changed

+23
-4
lines changed

2 files changed

+23
-4
lines changed

packages/vercel-edge/package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,14 +40,14 @@
4040
},
4141
"dependencies": {
4242
"@opentelemetry/api": "^1.9.0",
43-
"@opentelemetry/core": "^2.0.0",
4443
"@opentelemetry/resources": "^2.0.0",
45-
"@opentelemetry/semantic-conventions": "^1.34.0",
4644
"@sentry/core": "9.38.0"
4745
},
4846
"devDependencies": {
4947
"@edge-runtime/types": "3.0.1",
48+
"@opentelemetry/core": "^2.0.0",
5049
"@opentelemetry/sdk-trace-base": "^2.0.0",
50+
"@opentelemetry/semantic-conventions": "^1.34.0",
5151
"@sentry/opentelemetry": "9.38.0"
5252
},
5353
"scripts": {

packages/vercel-edge/rollup.npm.config.mjs

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import { makeBaseNPMConfig, makeNPMConfigVariants, plugins } from '@sentry-inter
44
export default makeNPMConfigVariants(
55
makeBaseNPMConfig({
66
entrypoints: ['src/index.ts'],
7-
bundledBuiltins: ['perf_hooks'],
7+
bundledBuiltins: ['perf_hooks', 'util'],
88
packageSpecificConfig: {
99
context: 'globalThis',
1010
output: {
@@ -21,9 +21,10 @@ export default makeNPMConfigVariants(
2121
}),
2222
{
2323
// This plugin is needed because otel imports `performance` from `perf_hooks` and also uses it via the `performance` global.
24+
// It also imports `inspect` and `promisify` from node's `util` which are not available in the edge runtime so we need to define a polyfill.
2425
// Both of these APIs are not available in the edge runtime so we need to define a polyfill.
2526
// Vercel does something similar in the `@vercel/otel` package: https://github.com/vercel/otel/blob/087601ae585cb116bb2b46c211d014520de76c71/packages/otel/build.ts#L62
26-
name: 'perf-hooks-performance-polyfill',
27+
name: 'edge-runtime-polyfills',
2728
banner: `
2829
{
2930
if (globalThis.performance === undefined) {
@@ -37,6 +38,8 @@ export default makeNPMConfigVariants(
3738
resolveId: source => {
3839
if (source === 'perf_hooks') {
3940
return '\0perf_hooks_sentry_shim';
41+
} else if (source === 'util') {
42+
return '\0util_sentry_shim';
4043
} else {
4144
return null;
4245
}
@@ -49,6 +52,22 @@ export default makeNPMConfigVariants(
4952
now: () => Date.now()
5053
}
5154
`;
55+
} else if (id === '\0util_sentry_shim') {
56+
return `
57+
export const inspect = (object) =>
58+
JSON.stringify(object, null, 2);
59+
60+
export const promisify = (fn) => {
61+
return (...args) => {
62+
return new Promise((resolve, reject) => {
63+
fn(...args, (err, result) => {
64+
if (err) reject(err);
65+
else resolve(result);
66+
});
67+
});
68+
};
69+
};
70+
`;
5271
} else {
5372
return null;
5473
}

0 commit comments

Comments
 (0)