From 9f584bda526d7a82baacaf6d776376e48aa1a250 Mon Sep 17 00:00:00 2001 From: Abhijeet Prasad Date: Mon, 23 Jan 2023 13:49:01 +0000 Subject: [PATCH 1/4] build(utils): Add build constant for cdn vs. npm bundles --- packages/utils/src/env.ts | 11 ++++++++++- rollup/bundleHelpers.js | 8 +++++--- rollup/npmHelpers.js | 3 +++ rollup/plugins/bundlePlugins.js | 8 ++++++++ 4 files changed, 26 insertions(+), 4 deletions(-) diff --git a/packages/utils/src/env.ts b/packages/utils/src/env.ts index 101be14e6e2c..d89e40774711 100644 --- a/packages/utils/src/env.ts +++ b/packages/utils/src/env.ts @@ -7,7 +7,7 @@ * * Attention: * This file should not be used to define constants/flags that are intended to be used for tree-shaking conducted by - * users. These fags should live in their respective packages, as we identified user tooling (specifically webpack) + * users. These flags should live in their respective packages, as we identified user tooling (specifically webpack) * having issues tree-shaking these constants across package boundaries. * An example for this is the __SENTRY_DEBUG__ constant. It is declared in each package individually because we want * users to be able to shake away expressions that it guards. @@ -15,6 +15,8 @@ declare const __SENTRY_BROWSER_BUNDLE__: boolean | undefined; +declare const __SENTRY_CDN_BUNDLE__: boolean | undefined; + /** * Figures out if we're building a browser bundle. * @@ -23,3 +25,10 @@ declare const __SENTRY_BROWSER_BUNDLE__: boolean | undefined; export function isBrowserBundle(): boolean { return typeof __SENTRY_BROWSER_BUNDLE__ !== 'undefined' && !!__SENTRY_BROWSER_BUNDLE__; } + +/** + * Figures out if we're a CDN or npm bundle. + */ +export function isCDNBundle(): 'cdn' | 'npm' { + return typeof __SENTRY_CDN_BUNDLE__ !== 'undefined' && !!__SENTRY_CDN_BUNDLE__ ? 'npm' : 'cdn'; +} diff --git a/rollup/bundleHelpers.js b/rollup/bundleHelpers.js index 5e1772b99ea1..e40053db21cd 100644 --- a/rollup/bundleHelpers.js +++ b/rollup/bundleHelpers.js @@ -17,6 +17,7 @@ import { makeTerserPlugin, makeTSPlugin, makeExcludeReplayPlugin, + makeIsCDNBundlePlugin, } from './plugins/index.js'; import { mergePlugins } from './utils'; @@ -141,6 +142,7 @@ export function makeBundleConfigVariants(baseConfig, options = {}) { const includeDebuggingPlugin = makeIsDebugBuildPlugin(true); const stripDebuggingPlugin = makeIsDebugBuildPlugin(false); const terserPlugin = makeTerserPlugin(); + const isCDNBundlePlugin = makeIsCDNBundlePlugin(true); // The additional options to use for each variant we're going to create. const variantSpecificConfigMap = { @@ -148,21 +150,21 @@ export function makeBundleConfigVariants(baseConfig, options = {}) { output: { entryFileNames: chunkInfo => `${baseConfig.output.entryFileNames(chunkInfo)}.js`, }, - plugins: [includeDebuggingPlugin], + plugins: [includeDebuggingPlugin, isCDNBundlePlugin], }, '.min.js': { output: { entryFileNames: chunkInfo => `${baseConfig.output.entryFileNames(chunkInfo)}.min.js`, }, - plugins: [stripDebuggingPlugin, terserPlugin], + plugins: [stripDebuggingPlugin, terserPlugin, isCDNBundlePlugin], }, '.debug.min.js': { output: { entryFileNames: chunkInfo => `${baseConfig.output.entryFileNames(chunkInfo)}.debug.min.js`, }, - plugins: [includeDebuggingPlugin, terserPlugin], + plugins: [includeDebuggingPlugin, terserPlugin, isCDNBundlePlugin], }, }; diff --git a/rollup/npmHelpers.js b/rollup/npmHelpers.js index 0b79fb6edc03..45ff331c5a5f 100644 --- a/rollup/npmHelpers.js +++ b/rollup/npmHelpers.js @@ -13,6 +13,7 @@ import { makeCleanupPlugin, makeSucrasePlugin, makeDebugBuildStatementReplacePlugin, + makeIsCDNBundlePlugin, } from './plugins/index.js'; import { mergePlugins } from './utils'; @@ -31,6 +32,7 @@ export function makeBaseNPMConfig(options = {}) { const debugBuildStatementReplacePlugin = makeDebugBuildStatementReplacePlugin(); const cleanupPlugin = makeCleanupPlugin(); const extractPolyfillsPlugin = makeExtractPolyfillsPlugin(); + const isNPMBundlePlugin = makeIsCDNBundlePlugin(false); const defaultBaseConfig = { input: entrypoints, @@ -87,6 +89,7 @@ export function makeBaseNPMConfig(options = {}) { debugBuildStatementReplacePlugin, cleanupPlugin, extractPolyfillsPlugin, + isNPMBundlePlugin, ], // don't include imported modules from outside the package in the final output diff --git a/rollup/plugins/bundlePlugins.js b/rollup/plugins/bundlePlugins.js index d6521e53a614..154a91769b73 100644 --- a/rollup/plugins/bundlePlugins.js +++ b/rollup/plugins/bundlePlugins.js @@ -63,6 +63,14 @@ export function makeIsDebugBuildPlugin(includeDebugging) { }); } +export function makeIsCDNBundlePlugin(isCDNBundle) { + return replace({ + values: { + __SENTRY_CDN_BUNDLE__: isCDNBundle, + }, + }); +} + /** * Create a plugin to set the value of the `__SENTRY_BROWSER_BUNDLE__` magic string. * From e18ec720a0752f50af07ae964537fc15d1d34ce8 Mon Sep 17 00:00:00 2001 From: Abhijeet Prasad Date: Mon, 30 Jan 2023 13:17:41 +0100 Subject: [PATCH 2/4] Use new approach for setting source --- packages/utils/src/env.ts | 10 ++++++---- rollup/bundleHelpers.js | 10 +++++----- rollup/npmHelpers.js | 6 +++--- rollup/plugins/bundlePlugins.js | 4 ++-- 4 files changed, 16 insertions(+), 14 deletions(-) diff --git a/packages/utils/src/env.ts b/packages/utils/src/env.ts index d89e40774711..5fb91b9ca780 100644 --- a/packages/utils/src/env.ts +++ b/packages/utils/src/env.ts @@ -15,7 +15,9 @@ declare const __SENTRY_BROWSER_BUNDLE__: boolean | undefined; -declare const __SENTRY_CDN_BUNDLE__: boolean | undefined; +type SdkSource = 'npm' | 'cdn' | 'loader'; + +declare const __SENTRY_SDK_SOURCE__: SdkSource | undefined; /** * Figures out if we're building a browser bundle. @@ -27,8 +29,8 @@ export function isBrowserBundle(): boolean { } /** - * Figures out if we're a CDN or npm bundle. + * Get source of SDK. */ -export function isCDNBundle(): 'cdn' | 'npm' { - return typeof __SENTRY_CDN_BUNDLE__ !== 'undefined' && !!__SENTRY_CDN_BUNDLE__ ? 'npm' : 'cdn'; +export function getSDKSource(): SdkSource { + return typeof __SENTRY_SDK_SOURCE__ !== 'undefined' ? __SENTRY_SDK_SOURCE__ : 'npm'; } diff --git a/rollup/bundleHelpers.js b/rollup/bundleHelpers.js index e40053db21cd..43a5f26563d9 100644 --- a/rollup/bundleHelpers.js +++ b/rollup/bundleHelpers.js @@ -17,7 +17,7 @@ import { makeTerserPlugin, makeTSPlugin, makeExcludeReplayPlugin, - makeIsCDNBundlePlugin, + makeSetSDKSourcePlugin, } from './plugins/index.js'; import { mergePlugins } from './utils'; @@ -142,7 +142,7 @@ export function makeBundleConfigVariants(baseConfig, options = {}) { const includeDebuggingPlugin = makeIsDebugBuildPlugin(true); const stripDebuggingPlugin = makeIsDebugBuildPlugin(false); const terserPlugin = makeTerserPlugin(); - const isCDNBundlePlugin = makeIsCDNBundlePlugin(true); + const setSdkSourcePlugin = makeSetSDKSourcePlugin('cdn'); // The additional options to use for each variant we're going to create. const variantSpecificConfigMap = { @@ -150,21 +150,21 @@ export function makeBundleConfigVariants(baseConfig, options = {}) { output: { entryFileNames: chunkInfo => `${baseConfig.output.entryFileNames(chunkInfo)}.js`, }, - plugins: [includeDebuggingPlugin, isCDNBundlePlugin], + plugins: [includeDebuggingPlugin, setSdkSourcePlugin], }, '.min.js': { output: { entryFileNames: chunkInfo => `${baseConfig.output.entryFileNames(chunkInfo)}.min.js`, }, - plugins: [stripDebuggingPlugin, terserPlugin, isCDNBundlePlugin], + plugins: [stripDebuggingPlugin, setSdkSourcePlugin, terserPlugin], }, '.debug.min.js': { output: { entryFileNames: chunkInfo => `${baseConfig.output.entryFileNames(chunkInfo)}.debug.min.js`, }, - plugins: [includeDebuggingPlugin, terserPlugin, isCDNBundlePlugin], + plugins: [includeDebuggingPlugin, setSdkSourcePlugin, terserPlugin], }, }; diff --git a/rollup/npmHelpers.js b/rollup/npmHelpers.js index 45ff331c5a5f..be6a900b2115 100644 --- a/rollup/npmHelpers.js +++ b/rollup/npmHelpers.js @@ -13,7 +13,7 @@ import { makeCleanupPlugin, makeSucrasePlugin, makeDebugBuildStatementReplacePlugin, - makeIsCDNBundlePlugin, + makeSetSDKSourcePlugin, } from './plugins/index.js'; import { mergePlugins } from './utils'; @@ -32,7 +32,7 @@ export function makeBaseNPMConfig(options = {}) { const debugBuildStatementReplacePlugin = makeDebugBuildStatementReplacePlugin(); const cleanupPlugin = makeCleanupPlugin(); const extractPolyfillsPlugin = makeExtractPolyfillsPlugin(); - const isNPMBundlePlugin = makeIsCDNBundlePlugin(false); + const setSdkSourcePlugin = makeSetSDKSourcePlugin('npm'); const defaultBaseConfig = { input: entrypoints, @@ -85,11 +85,11 @@ export function makeBaseNPMConfig(options = {}) { plugins: [ nodeResolvePlugin, + setSdkSourcePlugin, sucrasePlugin, debugBuildStatementReplacePlugin, cleanupPlugin, extractPolyfillsPlugin, - isNPMBundlePlugin, ], // don't include imported modules from outside the package in the final output diff --git a/rollup/plugins/bundlePlugins.js b/rollup/plugins/bundlePlugins.js index 154a91769b73..7adfbcfccc80 100644 --- a/rollup/plugins/bundlePlugins.js +++ b/rollup/plugins/bundlePlugins.js @@ -63,10 +63,10 @@ export function makeIsDebugBuildPlugin(includeDebugging) { }); } -export function makeIsCDNBundlePlugin(isCDNBundle) { +export function makeSetSDKSourcePlugin(sdkSource) { return replace({ values: { - __SENTRY_CDN_BUNDLE__: isCDNBundle, + __SENTRY_SDK_SOURCE__: sdkSource, }, }); } From 7fd4a09855cec94855f89c7915a47c0af3d6d19a Mon Sep 17 00:00:00 2001 From: Abhijeet Prasad Date: Mon, 30 Jan 2023 13:27:10 +0100 Subject: [PATCH 3/4] use perventAssignment true --- rollup/plugins/bundlePlugins.js | 1 + 1 file changed, 1 insertion(+) diff --git a/rollup/plugins/bundlePlugins.js b/rollup/plugins/bundlePlugins.js index 7adfbcfccc80..85110f0548c7 100644 --- a/rollup/plugins/bundlePlugins.js +++ b/rollup/plugins/bundlePlugins.js @@ -65,6 +65,7 @@ export function makeIsDebugBuildPlugin(includeDebugging) { export function makeSetSDKSourcePlugin(sdkSource) { return replace({ + preventAssignment: true, values: { __SENTRY_SDK_SOURCE__: sdkSource, }, From 9535ea5fe95e5889fc93098a1cfd94d59f125a5e Mon Sep 17 00:00:00 2001 From: Abhijeet Prasad Date: Tue, 31 Jan 2023 11:13:05 +0100 Subject: [PATCH 4/4] make sure stringified value is used --- packages/utils/src/env.ts | 5 ++--- rollup/plugins/bundlePlugins.js | 4 ++-- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/packages/utils/src/env.ts b/packages/utils/src/env.ts index 5fb91b9ca780..8d622f8836cd 100644 --- a/packages/utils/src/env.ts +++ b/packages/utils/src/env.ts @@ -17,8 +17,6 @@ declare const __SENTRY_BROWSER_BUNDLE__: boolean | undefined; type SdkSource = 'npm' | 'cdn' | 'loader'; -declare const __SENTRY_SDK_SOURCE__: SdkSource | undefined; - /** * Figures out if we're building a browser bundle. * @@ -32,5 +30,6 @@ export function isBrowserBundle(): boolean { * Get source of SDK. */ export function getSDKSource(): SdkSource { - return typeof __SENTRY_SDK_SOURCE__ !== 'undefined' ? __SENTRY_SDK_SOURCE__ : 'npm'; + // @ts-ignore __SENTRY_SDK_SOURCE__ is injected by rollup during build process + return __SENTRY_SDK_SOURCE__; } diff --git a/rollup/plugins/bundlePlugins.js b/rollup/plugins/bundlePlugins.js index 85110f0548c7..5e483dfddc46 100644 --- a/rollup/plugins/bundlePlugins.js +++ b/rollup/plugins/bundlePlugins.js @@ -65,9 +65,9 @@ export function makeIsDebugBuildPlugin(includeDebugging) { export function makeSetSDKSourcePlugin(sdkSource) { return replace({ - preventAssignment: true, + preventAssignment: false, values: { - __SENTRY_SDK_SOURCE__: sdkSource, + __SENTRY_SDK_SOURCE__: JSON.stringify(sdkSource), }, }); }