From 9d64d56b2d8b94067405dfb8123a19d515b9e14d Mon Sep 17 00:00:00 2001 From: Tim Fish Date: Mon, 23 Sep 2024 13:00:43 +0200 Subject: [PATCH 1/2] feat(core): Use `globalThis` for code injection --- .../sentry-esbuild-debugid-injection-file.js | 9 +------- packages/bundler-plugin-core/src/index.ts | 2 +- packages/bundler-plugin-core/src/utils.ts | 22 ++----------------- .../bundler-plugin-core/test/index.test.ts | 2 +- .../bundler-plugin-core/test/utils.test.ts | 18 ++------------- 5 files changed, 7 insertions(+), 46 deletions(-) diff --git a/packages/bundler-plugin-core/sentry-esbuild-debugid-injection-file.js b/packages/bundler-plugin-core/sentry-esbuild-debugid-injection-file.js index 6135fac3..3834f6a9 100644 --- a/packages/bundler-plugin-core/sentry-esbuild-debugid-injection-file.js +++ b/packages/bundler-plugin-core/sentry-esbuild-debugid-injection-file.js @@ -1,12 +1,5 @@ try { - var globalObject = - "undefined" != typeof window - ? window - : "undefined" != typeof global - ? global - : "undefined" != typeof self - ? self - : {}; + var globalObject = globalThis; var stack = new globalObject.Error().stack; diff --git a/packages/bundler-plugin-core/src/index.ts b/packages/bundler-plugin-core/src/index.ts index e03e7bee..8b879fd2 100644 --- a/packages/bundler-plugin-core/src/index.ts +++ b/packages/bundler-plugin-core/src/index.ts @@ -700,7 +700,7 @@ export function createComponentNameAnnotateHooks() { } export function getDebugIdSnippet(debugId: string): string { - return `;!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="${debugId}",e._sentryDebugIdIdentifier="sentry-dbid-${debugId}")}catch(e){}}();`; + return `;!function(){try{var e=globalThis,n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="${debugId}",e._sentryDebugIdIdentifier="sentry-dbid-${debugId}")}catch(e){}}();`; } export { stringToUUID, replaceBooleanFlagsInCode } from "./utils"; diff --git a/packages/bundler-plugin-core/src/utils.ts b/packages/bundler-plugin-core/src/utils.ts index 67bef553..33f2ea15 100644 --- a/packages/bundler-plugin-core/src/utils.ts +++ b/packages/bundler-plugin-core/src/utils.ts @@ -309,17 +309,8 @@ export function generateGlobalInjectorCode({ release: string; injectBuildInformation: boolean; }) { - // The code below is mostly ternary operators because it saves bundle size. - // The checks are to support as many environments as possible. (Node.js, Browser, webworkers, etc.) let code = ` - var _global = - typeof window !== 'undefined' ? - window : - typeof global !== 'undefined' ? - global : - typeof self !== 'undefined' ? - self : - {}; + var _global = globalThis; _global.SENTRY_RELEASE={id:${JSON.stringify(release)}};`; @@ -335,18 +326,9 @@ export function generateGlobalInjectorCode({ // eslint-disable-next-line @typescript-eslint/no-explicit-any export function generateModuleMetadataInjectorCode(metadata: any) { - // The code below is mostly ternary operators because it saves bundle size. - // The checks are to support as many environments as possible. (Node.js, Browser, webworkers, etc.) // We are merging the metadata objects in case modules are bundled twice with the plugin return `{ - var _sentryModuleMetadataGlobal = - typeof window !== "undefined" - ? window - : typeof global !== "undefined" - ? global - : typeof self !== "undefined" - ? self - : {}; + var _sentryModuleMetadataGlobal = globalThis; _sentryModuleMetadataGlobal._sentryModuleMetadata = _sentryModuleMetadataGlobal._sentryModuleMetadata || {}; diff --git a/packages/bundler-plugin-core/test/index.test.ts b/packages/bundler-plugin-core/test/index.test.ts index 51d0fd57..3e01774b 100644 --- a/packages/bundler-plugin-core/test/index.test.ts +++ b/packages/bundler-plugin-core/test/index.test.ts @@ -4,7 +4,7 @@ describe("getDebugIdSnippet", () => { it("returns the debugId injection snippet for a passed debugId", () => { const snippet = getDebugIdSnippet("1234"); expect(snippet).toMatchInlineSnapshot( - `";!function(){try{var e=\\"undefined\\"!=typeof window?window:\\"undefined\\"!=typeof global?global:\\"undefined\\"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]=\\"1234\\",e._sentryDebugIdIdentifier=\\"sentry-dbid-1234\\")}catch(e){}}();"` + `";!function(){try{var e=globalThis,n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]=\\"1234\\",e._sentryDebugIdIdentifier=\\"sentry-dbid-1234\\")}catch(e){}}();"` ); }); }); diff --git a/packages/bundler-plugin-core/test/utils.test.ts b/packages/bundler-plugin-core/test/utils.test.ts index aaa9875c..a7b6f26f 100644 --- a/packages/bundler-plugin-core/test/utils.test.ts +++ b/packages/bundler-plugin-core/test/utils.test.ts @@ -221,14 +221,7 @@ describe("generateModuleMetadataInjectorCode", () => { const generatedCode = generateModuleMetadataInjectorCode({}); expect(generatedCode).toMatchInlineSnapshot(` "{ - var _sentryModuleMetadataGlobal = - typeof window !== \\"undefined\\" - ? window - : typeof global !== \\"undefined\\" - ? global - : typeof self !== \\"undefined\\" - ? self - : {}; + var _sentryModuleMetadataGlobal = globalThis; _sentryModuleMetadataGlobal._sentryModuleMetadata = _sentryModuleMetadataGlobal._sentryModuleMetadata || {}; @@ -254,14 +247,7 @@ describe("generateModuleMetadataInjectorCode", () => { }); expect(generatedCode).toMatchInlineSnapshot(` "{ - var _sentryModuleMetadataGlobal = - typeof window !== \\"undefined\\" - ? window - : typeof global !== \\"undefined\\" - ? global - : typeof self !== \\"undefined\\" - ? self - : {}; + var _sentryModuleMetadataGlobal = globalThis; _sentryModuleMetadataGlobal._sentryModuleMetadata = _sentryModuleMetadataGlobal._sentryModuleMetadata || {}; From d50cd0eca36e642ef3bfdd7ca775c4c466a801a7 Mon Sep 17 00:00:00 2001 From: Luca Forstner Date: Wed, 15 Jan 2025 09:02:37 +0100 Subject: [PATCH 2/2] merge conflicts and stuff --- .../sentry-esbuild-debugid-injection-file.js | 4 ++-- packages/bundler-plugin-core/src/index.ts | 2 +- packages/bundler-plugin-core/src/utils.ts | 7 +++---- packages/bundler-plugin-core/test/index.test.ts | 2 +- packages/bundler-plugin-core/test/utils.test.ts | 4 ++-- 5 files changed, 9 insertions(+), 10 deletions(-) diff --git a/packages/bundler-plugin-core/sentry-esbuild-debugid-injection-file.js b/packages/bundler-plugin-core/sentry-esbuild-debugid-injection-file.js index 3834f6a9..34e03b96 100644 --- a/packages/bundler-plugin-core/sentry-esbuild-debugid-injection-file.js +++ b/packages/bundler-plugin-core/sentry-esbuild-debugid-injection-file.js @@ -1,7 +1,7 @@ try { - var globalObject = globalThis; + let globalObject = globalThis; - var stack = new globalObject.Error().stack; + let stack = new globalObject.Error().stack; if (stack) { globalObject._sentryDebugIds = globalObject._sentryDebugIds || {}; diff --git a/packages/bundler-plugin-core/src/index.ts b/packages/bundler-plugin-core/src/index.ts index 9036f14d..7be558b4 100644 --- a/packages/bundler-plugin-core/src/index.ts +++ b/packages/bundler-plugin-core/src/index.ts @@ -695,7 +695,7 @@ export function createComponentNameAnnotateHooks(ignoredComponents?: string[]) { } export function getDebugIdSnippet(debugId: string): string { - return `;!function(){try{var e=globalThis,n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="${debugId}",e._sentryDebugIdIdentifier="sentry-dbid-${debugId}")}catch(e){}}();`; + return `;{try{let e=globalThis,n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="${debugId}",e._sentryDebugIdIdentifier="sentry-dbid-${debugId}")}catch(e){}};`; } export { stringToUUID, replaceBooleanFlagsInCode } from "./utils"; diff --git a/packages/bundler-plugin-core/src/utils.ts b/packages/bundler-plugin-core/src/utils.ts index 6b7b0606..0c3ecd7d 100644 --- a/packages/bundler-plugin-core/src/utils.ts +++ b/packages/bundler-plugin-core/src/utils.ts @@ -312,9 +312,8 @@ export function generateGlobalInjectorCode({ release: string; injectBuildInformation: boolean; }) { - let code = ` - var _global = globalThis; - + let code = `{ + let _global = globalThis; _global.SENTRY_RELEASE={id:${JSON.stringify(release)}};`; if (injectBuildInformation) { @@ -333,7 +332,7 @@ export function generateGlobalInjectorCode({ export function generateModuleMetadataInjectorCode(metadata: any) { // We are merging the metadata objects in case modules are bundled twice with the plugin return `{ - var _sentryModuleMetadataGlobal = globalThis; + let _sentryModuleMetadataGlobal = globalThis; _sentryModuleMetadataGlobal._sentryModuleMetadata = _sentryModuleMetadataGlobal._sentryModuleMetadata || {}; diff --git a/packages/bundler-plugin-core/test/index.test.ts b/packages/bundler-plugin-core/test/index.test.ts index 3e01774b..f5dcb751 100644 --- a/packages/bundler-plugin-core/test/index.test.ts +++ b/packages/bundler-plugin-core/test/index.test.ts @@ -4,7 +4,7 @@ describe("getDebugIdSnippet", () => { it("returns the debugId injection snippet for a passed debugId", () => { const snippet = getDebugIdSnippet("1234"); expect(snippet).toMatchInlineSnapshot( - `";!function(){try{var e=globalThis,n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]=\\"1234\\",e._sentryDebugIdIdentifier=\\"sentry-dbid-1234\\")}catch(e){}}();"` + `";{try{let e=globalThis,n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]=\\"1234\\",e._sentryDebugIdIdentifier=\\"sentry-dbid-1234\\")}catch(e){}};"` ); }); }); diff --git a/packages/bundler-plugin-core/test/utils.test.ts b/packages/bundler-plugin-core/test/utils.test.ts index 6447f4d8..ca70d0c7 100644 --- a/packages/bundler-plugin-core/test/utils.test.ts +++ b/packages/bundler-plugin-core/test/utils.test.ts @@ -221,7 +221,7 @@ describe("generateModuleMetadataInjectorCode", () => { const generatedCode = generateModuleMetadataInjectorCode({}); expect(generatedCode).toMatchInlineSnapshot(` "{ - var _sentryModuleMetadataGlobal = globalThis; + let _sentryModuleMetadataGlobal = globalThis; _sentryModuleMetadataGlobal._sentryModuleMetadata = _sentryModuleMetadataGlobal._sentryModuleMetadata || {}; @@ -247,7 +247,7 @@ describe("generateModuleMetadataInjectorCode", () => { }); expect(generatedCode).toMatchInlineSnapshot(` "{ - var _sentryModuleMetadataGlobal = globalThis; + let _sentryModuleMetadataGlobal = globalThis; _sentryModuleMetadataGlobal._sentryModuleMetadata = _sentryModuleMetadataGlobal._sentryModuleMetadata || {};