diff --git a/packages/browser-utils/src/metrics/web-vitals/lib/initUnique.ts b/packages/browser-utils/src/metrics/web-vitals/lib/initUnique.ts index 1eda48705b08..ef3e721dc09e 100644 --- a/packages/browser-utils/src/metrics/web-vitals/lib/initUnique.ts +++ b/packages/browser-utils/src/metrics/web-vitals/lib/initUnique.ts @@ -22,8 +22,16 @@ const instanceMap: WeakMap = new WeakMap(); * identity object was previously used. */ export function initUnique(identityObj: object, ClassObj: new () => T): T { - if (!instanceMap.get(identityObj)) { - instanceMap.set(identityObj, new ClassObj()); + try { + if (!instanceMap.get(identityObj)) { + instanceMap.set(identityObj, new ClassObj()); + } + return instanceMap.get(identityObj)! as T; + } catch (e) { + // --- START Sentry-custom code (try/catch wrapping) --- + // Fix for cases where identityObj is not a valid key for WeakMap (sometimes a problem in Safari) + // Just return a new instance without caching it in instanceMap + return new ClassObj(); } - return instanceMap.get(identityObj)! as T; + // --- END Sentry-custom code --- }