diff --git a/dev-packages/browser-integration-tests/loader-suites/loader/onLoad/keepSentryGlobal/init.js b/dev-packages/browser-integration-tests/loader-suites/loader/onLoad/keepSentryGlobal/init.js new file mode 100644 index 000000000000..ae9f3bca884b --- /dev/null +++ b/dev-packages/browser-integration-tests/loader-suites/loader/onLoad/keepSentryGlobal/init.js @@ -0,0 +1,5 @@ +window.sentryOnLoad = function () { + Sentry.init({}); + + window.__sentryLoaded = true; +} diff --git a/dev-packages/browser-integration-tests/loader-suites/loader/onLoad/keepSentryGlobal/subject.js b/dev-packages/browser-integration-tests/loader-suites/loader/onLoad/keepSentryGlobal/subject.js new file mode 100644 index 000000000000..4f05dfef870b --- /dev/null +++ b/dev-packages/browser-integration-tests/loader-suites/loader/onLoad/keepSentryGlobal/subject.js @@ -0,0 +1,3 @@ +Sentry.forceLoad(); + +Sentry.captureException('Test exception'); diff --git a/dev-packages/browser-integration-tests/loader-suites/loader/onLoad/keepSentryGlobal/template.html b/dev-packages/browser-integration-tests/loader-suites/loader/onLoad/keepSentryGlobal/template.html new file mode 100644 index 000000000000..0d9a99ec4f94 --- /dev/null +++ b/dev-packages/browser-integration-tests/loader-suites/loader/onLoad/keepSentryGlobal/template.html @@ -0,0 +1,10 @@ + + + + + + + + diff --git a/dev-packages/browser-integration-tests/loader-suites/loader/onLoad/keepSentryGlobal/test.ts b/dev-packages/browser-integration-tests/loader-suites/loader/onLoad/keepSentryGlobal/test.ts new file mode 100644 index 000000000000..e4a2bf12e829 --- /dev/null +++ b/dev-packages/browser-integration-tests/loader-suites/loader/onLoad/keepSentryGlobal/test.ts @@ -0,0 +1,24 @@ +import { expect } from '@playwright/test'; + +import { sentryTest } from '../../../../utils/fixtures'; +import { envelopeRequestParser, waitForErrorRequestOnUrl } from '../../../../utils/helpers'; + +sentryTest('keeps data on window.Sentry intact', async ({ getLocalTestUrl, page }) => { + await page.route('https://dsn.ingest.sentry.io/**/*', route => { + return route.fulfill({ + status: 200, + contentType: 'application/json', + body: JSON.stringify({ id: 'test-id' }), + }); + }); + + const url = await getLocalTestUrl({ testDir: __dirname }); + const req = await waitForErrorRequestOnUrl(page, url); + + const eventData = envelopeRequestParser(req); + + expect(eventData.message).toBe('Test exception'); + + const customThingy = await page.evaluate('window.Sentry._customThingOnSentry'); + expect(customThingy).toBe('customThingOnSentry'); +}); diff --git a/dev-packages/rollup-utils/bundleHelpers.mjs b/dev-packages/rollup-utils/bundleHelpers.mjs index 66bded3b62de..9a07db039559 100644 --- a/dev-packages/rollup-utils/bundleHelpers.mjs +++ b/dev-packages/rollup-utils/bundleHelpers.mjs @@ -54,6 +54,9 @@ export function makeBaseBundleConfig(options) { // Add polyfills for ES6 array/string methods at the end of the bundle return isEs5 ? getEs5Polyfills() : ''; }, + intro: () => { + return 'exports = window.Sentry || {};'; + }, }, context: 'window', plugins: [rrwebBuildPlugin, markAsBrowserBuildPlugin],