{"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<string, any>();\n/** Set of stack strings that have already been parsed. */\nconst parsedStacks = new Set<string>();\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<string, any> {\n  if (!GLOBAL_OBJ._sentryModuleMetadata) {\n    return {};\n  }\n\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  const filenameMap: Record<string, any> = {};\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":"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"}