Skip to content

Commit d857f8c

Browse files
committed
fix(core): Always instantiate global Error class for module metadata
1 parent 8003736 commit d857f8c

File tree

4 files changed

+69
-3
lines changed

4 files changed

+69
-3
lines changed

packages/bundler-plugin-core/sentry-esbuild-debugid-injection-file.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ try {
88
? self
99
: {};
1010

11-
var stack = new Error().stack;
11+
var stack = new globalObject.Error().stack;
1212

1313
if (stack) {
1414
globalObject._sentryDebugIds = globalObject._sentryDebugIds || {};

packages/bundler-plugin-core/src/utils.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -351,10 +351,10 @@ export function generateModuleMetadataInjectorCode(metadata: any) {
351351
_sentryModuleMetadataGlobal._sentryModuleMetadata =
352352
_sentryModuleMetadataGlobal._sentryModuleMetadata || {};
353353
354-
_sentryModuleMetadataGlobal._sentryModuleMetadata[new Error().stack] =
354+
_sentryModuleMetadataGlobal._sentryModuleMetadata[new _sentryModuleMetadataGlobal.Error().stack] =
355355
Object.assign(
356356
{},
357-
_sentryModuleMetadataGlobal._sentryModuleMetadata[new Error().stack],
357+
_sentryModuleMetadataGlobal._sentryModuleMetadata[new _sentryModuleMetadataGlobal.Error().stack],
358358
${JSON.stringify(metadata)}
359359
);
360360
}`;

packages/bundler-plugin-core/test/utils.test.ts

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import {
2+
generateModuleMetadataInjectorCode,
23
getDependencies,
34
getPackageJson,
45
parseMajorVersion,
@@ -214,3 +215,64 @@ if (false && true) {
214215
});
215216
});
216217
});
218+
219+
describe("generateModuleMetadataInjectorCode", () => {
220+
it("generates code with empty metadata object", () => {
221+
const generatedCode = generateModuleMetadataInjectorCode({});
222+
expect(generatedCode).toMatchInlineSnapshot(`
223+
"{
224+
var _sentryModuleMetadataGlobal =
225+
typeof window !== \\"undefined\\"
226+
? window
227+
: typeof global !== \\"undefined\\"
228+
? global
229+
: typeof self !== \\"undefined\\"
230+
? self
231+
: {};
232+
233+
_sentryModuleMetadataGlobal._sentryModuleMetadata =
234+
_sentryModuleMetadataGlobal._sentryModuleMetadata || {};
235+
236+
_sentryModuleMetadataGlobal._sentryModuleMetadata[new _sentryModuleMetadataGlobal.Error().stack] =
237+
Object.assign(
238+
{},
239+
_sentryModuleMetadataGlobal._sentryModuleMetadata[new _sentryModuleMetadataGlobal.Error().stack],
240+
{}
241+
);
242+
}"
243+
`);
244+
});
245+
246+
it("generates code with metadata object", () => {
247+
const generatedCode = generateModuleMetadataInjectorCode({
248+
"file1.js": {
249+
foo: "bar",
250+
},
251+
"file2.js": {
252+
bar: "baz",
253+
},
254+
});
255+
expect(generatedCode).toMatchInlineSnapshot(`
256+
"{
257+
var _sentryModuleMetadataGlobal =
258+
typeof window !== \\"undefined\\"
259+
? window
260+
: typeof global !== \\"undefined\\"
261+
? global
262+
: typeof self !== \\"undefined\\"
263+
? self
264+
: {};
265+
266+
_sentryModuleMetadataGlobal._sentryModuleMetadata =
267+
_sentryModuleMetadataGlobal._sentryModuleMetadata || {};
268+
269+
_sentryModuleMetadataGlobal._sentryModuleMetadata[new _sentryModuleMetadataGlobal.Error().stack] =
270+
Object.assign(
271+
{},
272+
_sentryModuleMetadataGlobal._sentryModuleMetadata[new _sentryModuleMetadataGlobal.Error().stack],
273+
{\\"file1.js\\":{\\"foo\\":\\"bar\\"},\\"file2.js\\":{\\"bar\\":\\"baz\\"}}
274+
);
275+
}"
276+
`);
277+
});
278+
});

packages/integration-tests/fixtures/metadata-injection/metadata-injection.test.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,10 @@ function checkBundle(bundlePath: string): void {
1313
expect(Object.values(map)).toHaveLength(1);
1414
// The value should be the expected metadata
1515
expect(Object.values(map)).toEqual([{ team: "frontend" }]);
16+
17+
// The key is the stack trace of the error thrown in the file
18+
expect(Object.keys(map)[0]).toContain("Error");
19+
expect(Object.keys(map)[0]).toContain("bundle.js");
1620
}
1721

1822
describe("metadata injection", () => {

0 commit comments

Comments
 (0)