UNPKG

6.32 kBSource Map (JSON)View Raw
1{"version":3,"file":"rewriteframes.js","sources":["../../../src/rewriteframes.ts"],"sourcesContent":["import type { Event, EventProcessor, Hub, Integration, StackFrame, Stacktrace } from '@sentry/types';\nimport { basename, relative } from '@sentry/utils';\n\ntype StackFrameIteratee = (frame: StackFrame) => StackFrame;\n\n/** Rewrite event frames paths */\nexport class RewriteFrames implements Integration {\n /**\n * @inheritDoc\n */\n public static id: string = 'RewriteFrames';\n\n /**\n * @inheritDoc\n */\n public name: string = RewriteFrames.id;\n\n /**\n * @inheritDoc\n */\n private readonly _root?: string;\n\n /**\n * @inheritDoc\n */\n private readonly _prefix: string = 'app:///';\n\n /**\n * @inheritDoc\n */\n public constructor(options: { root?: string; prefix?: string; iteratee?: StackFrameIteratee } = {}) {\n if (options.root) {\n this._root = options.root;\n }\n if (options.prefix) {\n this._prefix = options.prefix;\n }\n if (options.iteratee) {\n this._iteratee = options.iteratee;\n }\n }\n\n /**\n * @inheritDoc\n */\n public setupOnce(addGlobalEventProcessor: (callback: EventProcessor) => void, getCurrentHub: () => Hub): void {\n addGlobalEventProcessor(event => {\n const self = getCurrentHub().getIntegration(RewriteFrames);\n if (self) {\n return self.process(event);\n }\n return event;\n });\n }\n\n /** JSDoc */\n public process(originalEvent: Event): Event {\n let processedEvent = originalEvent;\n\n if (originalEvent.exception && Array.isArray(originalEvent.exception.values)) {\n processedEvent = this._processExceptionsEvent(processedEvent);\n }\n\n return processedEvent;\n }\n\n /**\n * @inheritDoc\n */\n private readonly _iteratee: StackFrameIteratee = (frame: StackFrame) => {\n if (!frame.filename) {\n return frame;\n }\n // Check if the frame filename begins with `/` or a Windows-style prefix such as `C:\\`\n const isWindowsFrame = /^[A-Z]:\\\\/.test(frame.filename);\n const startsWithSlash = /^\\//.test(frame.filename);\n if (isWindowsFrame || startsWithSlash) {\n const filename = isWindowsFrame\n ? frame.filename\n .replace(/^[A-Z]:/, '') // remove Windows-style prefix\n .replace(/\\\\/g, '/') // replace all `\\\\` instances with `/`\n : frame.filename;\n const base = this._root ? relative(this._root, filename) : basename(filename);\n frame.filename = `${this._prefix}${base}`;\n }\n return frame;\n };\n\n /** JSDoc */\n private _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: this._processStacktrace(value.stacktrace) }),\n })),\n },\n };\n } catch (_oO) {\n return event;\n }\n }\n\n /** JSDoc */\n private _processStacktrace(stacktrace?: Stacktrace): Stacktrace {\n return {\n ...stacktrace,\n frames: stacktrace && stacktrace.frames && stacktrace.frames.map(f => this._iteratee(f)),\n };\n }\n}\n"],"names":[],"mappings":"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"}
\No newline at end of file