From 9b008b9008162b7d448ec76137817cb0cefcaa1e Mon Sep 17 00:00:00 2001 From: gilish <40733156+gilisho@users.noreply.github.com> Date: Thu, 26 Sep 2024 22:33:40 +0300 Subject: [PATCH 1/4] feat(browser): Add moduleMetadataIntegration lazy loading support --- dev-packages/browser-integration-tests/utils/generatePlugin.ts | 1 + packages/browser/rollup.bundle.config.mjs | 1 + packages/browser/src/integrations-bundle/index.modulemetadata.ts | 1 + packages/browser/src/utils/lazyLoadIntegration.ts | 1 + 4 files changed, 4 insertions(+) create mode 100644 packages/browser/src/integrations-bundle/index.modulemetadata.ts diff --git a/dev-packages/browser-integration-tests/utils/generatePlugin.ts b/dev-packages/browser-integration-tests/utils/generatePlugin.ts index acc583506df4..26a086bf2a77 100644 --- a/dev-packages/browser-integration-tests/utils/generatePlugin.ts +++ b/dev-packages/browser-integration-tests/utils/generatePlugin.ts @@ -37,6 +37,7 @@ const IMPORTED_INTEGRATION_CDN_BUNDLE_PATHS: Record = { reportingObserverIntegration: 'reportingobserver', sessionTimingIntegration: 'sessiontiming', feedbackIntegration: 'feedback', + moduleMetadataIntegration: 'modulemetadata', }; const BUNDLE_PATHS: Record> = { diff --git a/packages/browser/rollup.bundle.config.mjs b/packages/browser/rollup.bundle.config.mjs index 6a3c6342842b..66fd7830fec7 100644 --- a/packages/browser/rollup.bundle.config.mjs +++ b/packages/browser/rollup.bundle.config.mjs @@ -12,6 +12,7 @@ const reexportedPluggableIntegrationFiles = [ 'rewriteframes', 'sessiontiming', 'feedback', + 'modulemetadata' ]; browserPluggableIntegrationFiles.forEach(integrationName => { diff --git a/packages/browser/src/integrations-bundle/index.modulemetadata.ts b/packages/browser/src/integrations-bundle/index.modulemetadata.ts new file mode 100644 index 000000000000..c4f4a2b9cf75 --- /dev/null +++ b/packages/browser/src/integrations-bundle/index.modulemetadata.ts @@ -0,0 +1 @@ +export { moduleMetadataIntegration } from '@sentry/core'; diff --git a/packages/browser/src/utils/lazyLoadIntegration.ts b/packages/browser/src/utils/lazyLoadIntegration.ts index 82260ae9724f..5b78f646c577 100644 --- a/packages/browser/src/utils/lazyLoadIntegration.ts +++ b/packages/browser/src/utils/lazyLoadIntegration.ts @@ -21,6 +21,7 @@ const LazyLoadableIntegrations = { rewriteFramesIntegration: 'rewriteframes', sessionTimingIntegration: 'sessiontiming', browserProfilingIntegration: 'browserprofiling', + moduleMetadataIntegration: 'modulemetadata', } as const; const WindowWithMaybeIntegration = WINDOW as { From 59a7f00b49e7415a12148b8b37dd7d7c267deb6f Mon Sep 17 00:00:00 2001 From: gilish <40733156+gilisho@users.noreply.github.com> Date: Fri, 27 Sep 2024 21:34:12 +0300 Subject: [PATCH 2/4] Fix file formatting --- packages/browser/rollup.bundle.config.mjs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/browser/rollup.bundle.config.mjs b/packages/browser/rollup.bundle.config.mjs index 66fd7830fec7..f65c27aad6e9 100644 --- a/packages/browser/rollup.bundle.config.mjs +++ b/packages/browser/rollup.bundle.config.mjs @@ -12,7 +12,7 @@ const reexportedPluggableIntegrationFiles = [ 'rewriteframes', 'sessiontiming', 'feedback', - 'modulemetadata' + 'modulemetadata', ]; browserPluggableIntegrationFiles.forEach(integrationName => { From 7fd314c5b2199db7493fe2c557fe58be30e4f021 Mon Sep 17 00:00:00 2001 From: gilish <40733156+gilisho@users.noreply.github.com> Date: Thu, 3 Oct 2024 13:36:00 +0300 Subject: [PATCH 3/4] Add test to make sure moduleMetadataIntegration can be lazy loaded --- .../moduleMetadataIntegration/init.js | 10 ++++++ .../moduleMetadataIntegration/subject.js | 7 ++++ .../moduleMetadataIntegration/test.ts | 33 +++++++++++++++++++ 3 files changed, 50 insertions(+) create mode 100644 dev-packages/browser-integration-tests/suites/integrations/lazyLoad/moduleMetadataIntegration/init.js create mode 100644 dev-packages/browser-integration-tests/suites/integrations/lazyLoad/moduleMetadataIntegration/subject.js create mode 100644 dev-packages/browser-integration-tests/suites/integrations/lazyLoad/moduleMetadataIntegration/test.ts diff --git a/dev-packages/browser-integration-tests/suites/integrations/lazyLoad/moduleMetadataIntegration/init.js b/dev-packages/browser-integration-tests/suites/integrations/lazyLoad/moduleMetadataIntegration/init.js new file mode 100644 index 000000000000..d0ff6bbb92c9 --- /dev/null +++ b/dev-packages/browser-integration-tests/suites/integrations/lazyLoad/moduleMetadataIntegration/init.js @@ -0,0 +1,10 @@ +import * as Sentry from '@sentry/browser'; + +Sentry.init({ + dsn: 'https://public@dsn.ingest.sentry.io/1337', + integrations: [], +}); + +window.Sentry = { + ...Sentry, +}; diff --git a/dev-packages/browser-integration-tests/suites/integrations/lazyLoad/moduleMetadataIntegration/subject.js b/dev-packages/browser-integration-tests/suites/integrations/lazyLoad/moduleMetadataIntegration/subject.js new file mode 100644 index 000000000000..312b4cf91f10 --- /dev/null +++ b/dev-packages/browser-integration-tests/suites/integrations/lazyLoad/moduleMetadataIntegration/subject.js @@ -0,0 +1,7 @@ +window._testLazyLoadIntegration = async function run() { + const integration = await window.Sentry.lazyLoadIntegration('moduleMetadataIntegration'); + + window.Sentry.getClient()?.addIntegration(integration()); + + window._integrationLoaded = true; +}; diff --git a/dev-packages/browser-integration-tests/suites/integrations/lazyLoad/moduleMetadataIntegration/test.ts b/dev-packages/browser-integration-tests/suites/integrations/lazyLoad/moduleMetadataIntegration/test.ts new file mode 100644 index 000000000000..ac8465736743 --- /dev/null +++ b/dev-packages/browser-integration-tests/suites/integrations/lazyLoad/moduleMetadataIntegration/test.ts @@ -0,0 +1,33 @@ +import { expect } from '@playwright/test'; +import { SDK_VERSION } from '@sentry/browser'; + +import { sentryTest } from '../../../../utils/fixtures'; + +sentryTest('it allows to lazy load the moduleMetadata integration', async ({ getLocalTestUrl, page }) => { + const url = await getLocalTestUrl({ testDir: __dirname }); + + await page.route(`https://browser.sentry-cdn.com/${SDK_VERSION}/modulemetadata.min.js`, route => { + return route.fulfill({ + status: 200, + contentType: 'application/javascript;', + body: "window.Sentry.moduleMetadataIntegration = () => ({ name: 'ModuleMetadata' })", + }); + }); + + await page.goto(url); + + const hasIntegration = await page.evaluate('!!window.Sentry.getClient()?.getIntegrationByName("ModuleMetadata")'); + expect(hasIntegration).toBe(false); + + const scriptTagsBefore = await page.evaluate('document.querySelectorAll("script").length'); + + await page.evaluate('window._testLazyLoadIntegration()'); + await page.waitForFunction('window._integrationLoaded'); + + const scriptTagsAfter = await page.evaluate('document.querySelectorAll("script").length'); + + const hasIntegration2 = await page.evaluate('!!window.Sentry.getClient()?.getIntegrationByName("ModuleMetadata")'); + expect(hasIntegration2).toBe(true); + + expect(scriptTagsAfter).toBe(scriptTagsBefore + 1); +}); From 16f43c9359273efaac1918b909756feb83744853 Mon Sep 17 00:00:00 2001 From: Gili Shohat <40733156+gilisho@users.noreply.github.com> Date: Mon, 7 Oct 2024 18:41:58 +0300 Subject: [PATCH 4/4] Update dev-packages/browser-integration-tests/suites/integrations/lazyLoad/moduleMetadataIntegration/init.js Co-authored-by: Francesco Novy --- .../integrations/lazyLoad/moduleMetadataIntegration/init.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/dev-packages/browser-integration-tests/suites/integrations/lazyLoad/moduleMetadataIntegration/init.js b/dev-packages/browser-integration-tests/suites/integrations/lazyLoad/moduleMetadataIntegration/init.js index d0ff6bbb92c9..5991109fce66 100644 --- a/dev-packages/browser-integration-tests/suites/integrations/lazyLoad/moduleMetadataIntegration/init.js +++ b/dev-packages/browser-integration-tests/suites/integrations/lazyLoad/moduleMetadataIntegration/init.js @@ -7,4 +7,6 @@ Sentry.init({ window.Sentry = { ...Sentry, + // Ensure this is _not_ set + moduleMetadataIntegration: undefined, };