{"version":3,"file":"metadata.js","sources":["../../src/metadata.ts"],"sourcesContent":["import type { Event } from './types/event';\nimport type { StackParser } from './types/stacktrace';\nimport { GLOBAL_OBJ } from './utils/worldwide';\n\n/** Keys are source filename/url, values are metadata objects. */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst filenameMetadataMap = new Map();\n/** Set of stack strings that have already been parsed. */\nconst parsedStacks = new Set();\n\n/**\n * Builds a map of filenames to module metadata from the global _sentryModuleMetadata object.\n * This is useful for forwarding metadata from web workers to the main thread.\n *\n * @param parser - Stack parser to use for extracting filenames from stack traces\n * @returns A map of filename to metadata object\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function getFilenameToMetadataMap(parser: StackParser): Record {\n if (!GLOBAL_OBJ._sentryModuleMetadata) {\n return {};\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const filenameMap: Record = {};\n\n for (const stack of Object.keys(GLOBAL_OBJ._sentryModuleMetadata)) {\n const metadata = GLOBAL_OBJ._sentryModuleMetadata[stack];\n const frames = parser(stack);\n\n for (const frame of frames.reverse()) {\n if (frame.filename) {\n filenameMap[frame.filename] = metadata;\n break;\n }\n }\n }\n\n return filenameMap;\n}\n\nfunction ensureMetadataStacksAreParsed(parser: StackParser): void {\n if (!GLOBAL_OBJ._sentryModuleMetadata) {\n return;\n }\n\n for (const stack of Object.keys(GLOBAL_OBJ._sentryModuleMetadata)) {\n const metadata = GLOBAL_OBJ._sentryModuleMetadata[stack];\n\n if (parsedStacks.has(stack)) {\n continue;\n }\n\n // Ensure this stack doesn't get parsed again\n parsedStacks.add(stack);\n\n const frames = parser(stack);\n\n // Go through the frames starting from the top of the stack and find the first one with a filename\n for (const frame of frames.reverse()) {\n if (frame.filename) {\n // Save the metadata for this filename\n filenameMetadataMap.set(frame.filename, metadata);\n break;\n }\n }\n }\n}\n\n/**\n * Retrieve metadata for a specific JavaScript file URL.\n *\n * Metadata is injected by the Sentry bundler plugins using the `_experiments.moduleMetadata` config option.\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function getMetadataForUrl(parser: StackParser, filename: string): any | undefined {\n ensureMetadataStacksAreParsed(parser);\n return filenameMetadataMap.get(filename);\n}\n\n/**\n * Adds metadata to stack frames.\n *\n * Metadata is injected by the Sentry bundler plugins using the `_experiments.moduleMetadata` config option.\n */\nexport function addMetadataToStackFrames(parser: StackParser, event: Event): void {\n event.exception?.values?.forEach(exception => {\n exception.stacktrace?.frames?.forEach(frame => {\n if (!frame.filename || frame.module_metadata) {\n return;\n }\n\n const metadata = getMetadataForUrl(parser, frame.filename);\n\n if (metadata) {\n frame.module_metadata = metadata;\n }\n });\n });\n}\n\n/**\n * Strips metadata from stack frames.\n */\nexport function stripMetadataFromStackFrames(event: Event): void {\n event.exception?.values?.forEach(exception => {\n exception.stacktrace?.frames?.forEach(frame => {\n delete frame.module_metadata;\n });\n });\n}\n"],"names":[],"mappings":";;AAMA,MAAM,mBAAA,uBAA0B,GAAA,EAAiB;AAEjD,MAAM,YAAA,uBAAmB,GAAA,EAAY;AAU9B,SAAS,yBAAyB,MAAA,EAA0C;AACjF,EAAA,IAAI,CAAC,WAAW,qBAAA,EAAuB;AACrC,IAAA,OAAO,EAAC;AAAA,EACV;AAGA,EAAA,MAAM,cAAmC,EAAC;AAE1C,EAAA,KAAA,MAAW,KAAA,IAAS,MAAA,CAAO,IAAA,CAAK,UAAA,CAAW,qBAAqB,CAAA,EAAG;AACjE,IAAA,MAAM,QAAA,GAAW,UAAA,CAAW,qBAAA,CAAsB,KAAK,CAAA;AACvD,IAAA,MAAM,MAAA,GAAS,OAAO,KAAK,CAAA;AAE3B,IAAA,KAAA,MAAW,KAAA,IAAS,MAAA,CAAO,OAAA,EAAQ,EAAG;AACpC,MAAA,IAAI,MAAM,QAAA,EAAU;AAClB,QAAA,WAAA,CAAY,KAAA,CAAM,QAAQ,CAAA,GAAI,QAAA;AAC9B,QAAA;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,EAAA,OAAO,WAAA;AACT;AAEA,SAAS,8BAA8B,MAAA,EAA2B;AAChE,EAAA,IAAI,CAAC,WAAW,qBAAA,EAAuB;AACrC,IAAA;AAAA,EACF;AAEA,EAAA,KAAA,MAAW,KAAA,IAAS,MAAA,CAAO,IAAA,CAAK,UAAA,CAAW,qBAAqB,CAAA,EAAG;AACjE,IAAA,MAAM,QAAA,GAAW,UAAA,CAAW,qBAAA,CAAsB,KAAK,CAAA;AAEvD,IAAA,IAAI,YAAA,CAAa,GAAA,CAAI,KAAK,CAAA,EAAG;AAC3B,MAAA;AAAA,IACF;AAGA,IAAA,YAAA,CAAa,IAAI,KAAK,CAAA;AAEtB,IAAA,MAAM,MAAA,GAAS,OAAO,KAAK,CAAA;AAG3B,IAAA,KAAA,MAAW,KAAA,IAAS,MAAA,CAAO,OAAA,EAAQ,EAAG;AACpC,MAAA,IAAI,MAAM,QAAA,EAAU;AAElB,QAAA,mBAAA,CAAoB,GAAA,CAAI,KAAA,CAAM,QAAA,EAAU,QAAQ,CAAA;AAChD,QAAA;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;AAQO,SAAS,iBAAA,CAAkB,QAAqB,QAAA,EAAmC;AACxF,EAAA,6BAAA,CAA8B,MAAM,CAAA;AACpC,EAAA,OAAO,mBAAA,CAAoB,IAAI,QAAQ,CAAA;AACzC;AAOO,SAAS,wBAAA,CAAyB,QAAqB,KAAA,EAAoB;AAChF,EAAA,KAAA,CAAM,SAAA,EAAW,MAAA,EAAQ,OAAA,CAAQ,CAAA,SAAA,KAAa;AAC5C,IAAA,SAAA,CAAU,UAAA,EAAY,MAAA,EAAQ,OAAA,CAAQ,CAAA,KAAA,KAAS;AAC7C,MAAA,IAAI,CAAC,KAAA,CAAM,QAAA,IAAY,KAAA,CAAM,eAAA,EAAiB;AAC5C,QAAA;AAAA,MACF;AAEA,MAAA,MAAM,QAAA,GAAW,iBAAA,CAAkB,MAAA,EAAQ,KAAA,CAAM,QAAQ,CAAA;AAEzD,MAAA,IAAI,QAAA,EAAU;AACZ,QAAA,KAAA,CAAM,eAAA,GAAkB,QAAA;AAAA,MAC1B;AAAA,IACF,CAAC,CAAA;AAAA,EACH,CAAC,CAAA;AACH;AAKO,SAAS,6BAA6B,KAAA,EAAoB;AAC/D,EAAA,KAAA,CAAM,SAAA,EAAW,MAAA,EAAQ,OAAA,CAAQ,CAAA,SAAA,KAAa;AAC5C,IAAA,SAAA,CAAU,UAAA,EAAY,MAAA,EAAQ,OAAA,CAAQ,CAAA,KAAA,KAAS;AAC7C,MAAA,OAAO,KAAA,CAAM,eAAA;AAAA,IACf,CAAC,CAAA;AAAA,EACH,CAAC,CAAA;AACH;;;;"}