{"version":3,"file":"metadata.js","sources":["../../src/metadata.ts"],"sourcesContent":["import type { Event } from './types-hoist/event';\nimport type { StackParser } from './types-hoist/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":";;AAIA;AACA;AACA,MAAM,mBAAA,GAAsB,IAAI,GAAG,EAAe;AAClD;AACA,MAAM,YAAA,GAAe,IAAI,GAAG,EAAU;;AAEtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS,wBAAwB,CAAC,MAAM,EAAoC;AACnF,EAAE,IAAI,CAAC,UAAU,CAAC,qBAAqB,EAAE;AACzC,IAAI,OAAO,EAAE;AACb,EAAE;;AAEF;AACA,EAAE,MAAM,WAAW,GAAwB,EAAE;;AAE7C,EAAE,KAAK,MAAM,KAAA,IAAS,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,qBAAqB,CAAC,EAAE;AACrE,IAAI,MAAM,WAAW,UAAU,CAAC,qBAAqB,CAAC,KAAK,CAAC;AAC5D,IAAI,MAAM,MAAA,GAAS,MAAM,CAAC,KAAK,CAAC;;AAEhC,IAAI,KAAK,MAAM,KAAA,IAAS,MAAM,CAAC,OAAO,EAAE,EAAE;AAC1C,MAAM,IAAI,KAAK,CAAC,QAAQ,EAAE;AAC1B,QAAQ,WAAW,CAAC,KAAK,CAAC,QAAQ,CAAA,GAAI,QAAQ;AAC9C,QAAQ;AACR,MAAM;AACN,IAAI;AACJ,EAAE;;AAEF,EAAE,OAAO,WAAW;AACpB;;AAEA,SAAS,6BAA6B,CAAC,MAAM,EAAqB;AAClE,EAAE,IAAI,CAAC,UAAU,CAAC,qBAAqB,EAAE;AACzC,IAAI;AACJ,EAAE;;AAEF,EAAE,KAAK,MAAM,KAAA,IAAS,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,qBAAqB,CAAC,EAAE;AACrE,IAAI,MAAM,WAAW,UAAU,CAAC,qBAAqB,CAAC,KAAK,CAAC;;AAE5D,IAAI,IAAI,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;AACjC,MAAM;AACN,IAAI;;AAEJ;AACA,IAAI,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC;;AAE3B,IAAI,MAAM,MAAA,GAAS,MAAM,CAAC,KAAK,CAAC;;AAEhC;AACA,IAAI,KAAK,MAAM,KAAA,IAAS,MAAM,CAAC,OAAO,EAAE,EAAE;AAC1C,MAAM,IAAI,KAAK,CAAC,QAAQ,EAAE;AAC1B;AACA,QAAQ,mBAAmB,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,EAAE,QAAQ,CAAC;AACzD,QAAQ;AACR,MAAM;AACN,IAAI;AACJ,EAAE;AACF;;AAEA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS,iBAAiB,CAAC,MAAM,EAAe,QAAQ,EAA2B;AAC1F,EAAE,6BAA6B,CAAC,MAAM,CAAC;AACvC,EAAE,OAAO,mBAAmB,CAAC,GAAG,CAAC,QAAQ,CAAC;AAC1C;;AAEA;AACA;AACA;AACA;AACA;AACO,SAAS,wBAAwB,CAAC,MAAM,EAAe,KAAK,EAAe;AAClF,EAAE,KAAK,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,SAAA,IAAa;AAChD,IAAI,SAAS,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,CAAC,KAAA,IAAS;AACnD,MAAM,IAAI,CAAC,KAAK,CAAC,YAAY,KAAK,CAAC,eAAe,EAAE;AACpD,QAAQ;AACR,MAAM;;AAEN,MAAM,MAAM,QAAA,GAAW,iBAAiB,CAAC,MAAM,EAAE,KAAK,CAAC,QAAQ,CAAC;;AAEhE,MAAM,IAAI,QAAQ,EAAE;AACpB,QAAQ,KAAK,CAAC,eAAA,GAAkB,QAAQ;AACxC,MAAM;AACN,IAAI,CAAC,CAAC;AACN,EAAE,CAAC,CAAC;AACJ;;AAEA;AACA;AACA;AACO,SAAS,4BAA4B,CAAC,KAAK,EAAe;AACjE,EAAE,KAAK,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,SAAA,IAAa;AAChD,IAAI,SAAS,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,CAAC,KAAA,IAAS;AACnD,MAAM,OAAO,KAAK,CAAC,eAAe;AAClC,IAAI,CAAC,CAAC;AACN,EAAE,CAAC,CAAC;AACJ;;;;"}