![JAR search and dependency download from the Maven repository](/logo.png)
package.build.cjs.integrations.rewriteframes.js.map Maven / Gradle / Ivy
{"version":3,"file":"rewriteframes.js","sources":["../../../src/integrations/rewriteframes.ts"],"sourcesContent":["import type { Event, StackFrame, Stacktrace } from '@sentry/types';\nimport { GLOBAL_OBJ, basename, relative } from '@sentry/utils';\nimport { defineIntegration } from '../integration';\n\ntype StackFrameIteratee = (frame: StackFrame) => StackFrame;\n\nconst INTEGRATION_NAME = 'RewriteFrames';\n\ninterface RewriteFramesOptions {\n /**\n * Root path (the beginning of the path) that will be stripped from the frames' filename.\n *\n * This option has slightly different behaviour in the browser and on servers:\n * - In the browser, the value you provide in `root` will be stripped from the beginning stack frames' paths (if the path started with the value).\n * - On the server, the root value will only replace the beginning of stack frame filepaths, when the path is absolute. If no `root` value is provided and the path is absolute, the frame will be reduced to only the filename and the provided `prefix` option.\n *\n * Browser example:\n * - Original frame: `'http://example.com/my/path/static/asset.js'`\n * - `root: 'http://example.com/my/path'`\n * - `assetPrefix: 'app://'`\n * - Resulting frame: `'app:///static/asset.js'`\n *\n * Server example:\n * - Original frame: `'/User/local/my/path/static/asset.js'`\n * - `root: '/User/local/my/path'`\n * - `assetPrefix: 'app://'`\n * - Resulting frame: `'app:///static/asset.js'`\n */\n root?: string;\n\n /**\n * A custom prefix that stack frames will be prepended with.\n *\n * Default: `'app://'`\n *\n * This option has slightly different behaviour in the browser and on servers:\n * - In the browser, the value you provide in `prefix` will prefix the resulting filename when the value you provided in `root` was applied. Effectively replacing whatever `root` matched in the beginning of the frame with `prefix`.\n * - On the server, the prefix is applied to all stackframes with absolute paths. On Windows, the drive identifier (e.g. \"C://\") is replaced with the prefix.\n */\n prefix?: string;\n\n /**\n * Defines an iterator that is used to iterate through all of the stack frames for modification before being sent to Sentry.\n * Setting this option will effectively disable both the `root` and the `prefix` options.\n */\n iteratee?: StackFrameIteratee;\n}\n\n/**\n * Rewrite event frames paths.\n */\nexport const rewriteFramesIntegration = defineIntegration((options: RewriteFramesOptions = {}) => {\n const root = options.root;\n const prefix = options.prefix || 'app:///';\n\n const isBrowser = 'window' in GLOBAL_OBJ && GLOBAL_OBJ.window !== undefined;\n\n const iteratee: StackFrameIteratee = options.iteratee || generateIteratee({ isBrowser, root, prefix });\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 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});\n\n/**\n * Exported only for tests.\n */\nexport function generateIteratee({\n isBrowser,\n root,\n prefix,\n}: {\n isBrowser: boolean;\n root?: string;\n prefix: string;\n}): StackFrameIteratee {\n return (frame: StackFrame) => {\n if (!frame.filename) {\n return frame;\n }\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\n // Check if the frame filename begins with `/`\n const startsWithSlash = /^\\//.test(frame.filename);\n\n if (isBrowser) {\n if (root) {\n const oldFilename = frame.filename;\n if (oldFilename.indexOf(root) === 0) {\n frame.filename = oldFilename.replace(root, prefix);\n }\n }\n } else {\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 }\n\n return frame;\n };\n}\n"],"names":["defineIntegration","GLOBAL_OBJ","relative","basename"],"mappings":"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"}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy