{"version":3,"file":"rewriteframes.js","sources":["../../../src/rewriteframes.ts"],"sourcesContent":["import { convertIntegrationFnToClass, defineIntegration } from '@sentry/core';\nimport type { Event, Integration, IntegrationClass, IntegrationFn, StackFrame, Stacktrace } from '@sentry/types';\nimport { basename, relative } from '@sentry/utils';\n\ntype StackFrameIteratee = (frame: StackFrame) => StackFrame;\n\nconst INTEGRATION_NAME = 'RewriteFrames';\n\ninterface RewriteFramesOptions {\n  root?: string;\n  prefix?: string;\n  iteratee?: StackFrameIteratee;\n}\n\nconst _rewriteFramesIntegration = ((options: RewriteFramesOptions = {}) => {\n  const root = options.root;\n  const prefix = options.prefix || 'app:///';\n\n  const iteratee: StackFrameIteratee =\n    options.iteratee ||\n    ((frame: StackFrame) => {\n      if (!frame.filename) {\n        return frame;\n      }\n      // Determine if this is a Windows frame by checking for a Windows-style prefix such as `C:\\`\n      const isWindowsFrame =\n        /^[a-zA-Z]:\\\\/.test(frame.filename) ||\n        // or the presence of a backslash without a forward slash (which are not allowed on Windows)\n        (frame.filename.includes('\\\\') && !frame.filename.includes('/'));\n      // Check if the frame filename begins with `/`\n      const startsWithSlash = /^\\//.test(frame.filename);\n      if (isWindowsFrame || startsWithSlash) {\n        const filename = isWindowsFrame\n          ? frame.filename\n              .replace(/^[a-zA-Z]:/, '') // remove Windows-style prefix\n              .replace(/\\\\/g, '/') // replace all `\\\\` instances with `/`\n          : frame.filename;\n        const base = root ? relative(root, filename) : basename(filename);\n        frame.filename = `${prefix}${base}`;\n      }\n      return frame;\n    });\n\n  /** Process an exception event. */\n  function _processExceptionsEvent(event: Event): Event {\n    try {\n      return {\n        ...event,\n        exception: {\n          ...event.exception,\n          // The check for this is performed inside `process` call itself, safe to skip here\n          // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n          values: event.exception!.values!.map(value => ({\n            ...value,\n            ...(value.stacktrace && { stacktrace: _processStacktrace(value.stacktrace) }),\n          })),\n        },\n      };\n    } catch (_oO) {\n      return event;\n    }\n  }\n\n  /** Process a stack trace. */\n  function _processStacktrace(stacktrace?: Stacktrace): Stacktrace {\n    return {\n      ...stacktrace,\n      frames: stacktrace && stacktrace.frames && stacktrace.frames.map(f => iteratee(f)),\n    };\n  }\n\n  return {\n    name: INTEGRATION_NAME,\n    // TODO v8: Remove this\n    setupOnce() {}, // eslint-disable-line @typescript-eslint/no-empty-function\n    processEvent(originalEvent) {\n      let processedEvent = originalEvent;\n\n      if (originalEvent.exception && Array.isArray(originalEvent.exception.values)) {\n        processedEvent = _processExceptionsEvent(processedEvent);\n      }\n\n      return processedEvent;\n    },\n  };\n}) satisfies IntegrationFn;\n\nexport const rewriteFramesIntegration = defineIntegration(_rewriteFramesIntegration);\n\n/**\n * Rewrite event frames paths.\n * @deprecated Use `rewriteFramesIntegration()` instead.\n */\n// eslint-disable-next-line deprecation/deprecation\nexport const RewriteFrames = convertIntegrationFnToClass(\n  INTEGRATION_NAME,\n  rewriteFramesIntegration,\n) as IntegrationClass<Integration & { processEvent: (event: Event) => Event }> & {\n  new (options?: { root?: string; prefix?: string; iteratee?: StackFrameIteratee }): Integration;\n};\n"],"names":["relative","basename","defineIntegration","convertIntegrationFnToClass"],"mappings":"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"}