From 5c55efa53fde14a838ba994865e065b9134dd570 Mon Sep 17 00:00:00 2001 From: Francesco Novy Date: Mon, 23 Oct 2023 11:18:02 +0200 Subject: [PATCH] feat(loader): Allow to configure 'window.sentryOnLoad' --- scripts/build-js-loader.ts | 2 +- .../templates/sentry/js-sdk-loader.js.tmpl | 8 ++++++++ .../templates/sentry/js-sdk-loader.min.js.tmpl | 2 +- src/sentry/templates/sentry/js-sdk-loader.ts | 16 +++++++++++++++- 4 files changed, 25 insertions(+), 3 deletions(-) diff --git a/scripts/build-js-loader.ts b/scripts/build-js-loader.ts index 45dcd1e57edd86..f14167153eecb9 100644 --- a/scripts/build-js-loader.ts +++ b/scripts/build-js-loader.ts @@ -42,7 +42,7 @@ async function run() { const {code: minifiedBase} = await minify(base, { ecma: 5, mangle: { - reserved: ['onLoad', 'forceLoad'], + reserved: ['onLoad', 'forceLoad', 'sentryOnLoad'], }, format: { ecma: 5, diff --git a/src/sentry/templates/sentry/js-sdk-loader.js.tmpl b/src/sentry/templates/sentry/js-sdk-loader.js.tmpl index 97b2f09dbe7298..e9ae8485044884 100644 --- a/src/sentry/templates/sentry/js-sdk-loader.js.tmpl +++ b/src/sentry/templates/sentry/js-sdk-loader.js.tmpl @@ -132,12 +132,20 @@ } function setupSDK(SDK) { try { + // If defined, we call window.sentryOnLoad first + if (typeof _window.sentryOnLoad === 'function') { + _window.sentryOnLoad(); + // Cleanup to allow garbage collection + _window.sentryOnLoad = undefined; + } // We have to make sure to call all callbacks first for (var i = 0; i < onLoadCallbacks.length; i++) { if (typeof onLoadCallbacks[i] === 'function') { onLoadCallbacks[i](); } } + // Cleanup to allow garbage collection + onLoadCallbacks.splice(0); // First call all inits from the queue for (var i = 0; i < queue.length; i++) { var item = queue[i]; diff --git a/src/sentry/templates/sentry/js-sdk-loader.min.js.tmpl b/src/sentry/templates/sentry/js-sdk-loader.min.js.tmpl index 7f7315d52d698b..ff6ee7800df0e2 100644 --- a/src/sentry/templates/sentry/js-sdk-loader.min.js.tmpl +++ b/src/sentry/templates/sentry/js-sdk-loader.min.js.tmpl @@ -1 +1 @@ -{% load sentry_helpers %}!function(n,e,r,t,i,o,a,c,u){for(var s=u,f=0;f-1){s&&"no"===document.scripts[f].getAttribute("data-lazy")&&(s=!1);break}var p=[];function l(n){return"e"in n}function d(n){return"p"in n}function _(n){return"f"in n}var v=[];function h(n){s&&(l(n)||d(n)||_(n)&&n.f.indexOf("capture")>-1||_(n)&&n.f.indexOf("showReportDialog")>-1)&&O(),v.push(n)}function y(){h({e:[].slice.call(arguments)})}function E(n){h({p:"reason"in n?n.reason:"detail"in n&&"reason"in n.detail?n.detail.reason:n})}function m(){try{n.SENTRY_SDK_SOURCE="loader";var e=n[i],o=e.init;e.init=function(i){n.removeEventListener(r,y),n.removeEventListener(t,E);var a=c;for(var u in i)Object.prototype.hasOwnProperty.call(i,u)&&(a[u]=i[u]);!function(n,e){var r=n.integrations||[];if(!Array.isArray(r))return;var t=r.map((function(n){return n.name}));n.tracesSampleRate&&-1===t.indexOf("BrowserTracing")&&r.push(new e.BrowserTracing);(n.replaysSessionSampleRate||n.replaysOnErrorSampleRate)&&-1===t.indexOf("Replay")&&r.push(new e.Replay);n.integrations=r}(a,e),o(a)},setTimeout((function(){return function(e){try{for(var r=0;r-1){u&&"no"===document.scripts[f].getAttribute("data-lazy")&&(u=!1);break}var p=[];function d(n){return"e"in n}function l(n){return"p"in n}function _(n){return"f"in n}var v=[];function y(n){u&&(d(n)||l(n)||_(n)&&n.f.indexOf("capture")>-1||_(n)&&n.f.indexOf("showReportDialog")>-1)&&L(),v.push(n)}function h(){y({e:[].slice.call(arguments)})}function E(n){y({p:"reason"in n?n.reason:"detail"in n&&"reason"in n.detail?n.detail.reason:n})}function O(){try{n.SENTRY_SDK_SOURCE="loader";var e=n[i],o=e.init;e.init=function(i){n.removeEventListener(t,h),n.removeEventListener(r,E);var a=c;for(var s in i)Object.prototype.hasOwnProperty.call(i,s)&&(a[s]=i[s]);!function(n,e){var t=n.integrations||[];if(!Array.isArray(t))return;var r=t.map((function(n){return n.name}));n.tracesSampleRate&&-1===r.indexOf("BrowserTracing")&&t.push(new e.BrowserTracing);(n.replaysSessionSampleRate||n.replaysOnErrorSampleRate)&&-1===r.indexOf("Replay")&&t.push(new e.Replay);n.integrations=t}(a,e),o(a)},setTimeout((function(){return function(e){try{"function"==typeof n.sentryOnLoad&&(n.sentryOnLoad(),n.sentryOnLoad=void 0);for(var t=0;t void; + }, document, 'error' as const, 'unhandledrejection' as const,