UNPKG

@sentry/browser

Version:
119 lines (115 loc) 5.01 kB
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); const browser = require('@sentry/core/browser'); const OPERA10_PRIORITY = 10; const OPERA11_PRIORITY = 20; const CHROME_PRIORITY = 30; const WINJS_PRIORITY = 40; const GECKO_PRIORITY = 50; function createFrame(filename, func, lineno, colno) { const frame = { filename, function: func === "<anonymous>" ? browser.UNKNOWN_FUNCTION : func, in_app: true // All browser frames are considered in_app }; if (lineno !== void 0) { frame.lineno = lineno; } if (colno !== void 0) { frame.colno = colno; } return frame; } const chromeRegexNoFnName = /^\s*at (\S+?)(?::(\d+))(?::(\d+))\s*$/i; const chromeRegex = /^\s*at (?:(.+?\)(?: \[.+\])?|.*?) ?\((?:address at )?)?(?:async )?((?:<anonymous>|[-a-z]+:|.*bundle|\/)?.*?)(?::(\d+))?(?::(\d+))?\)?\s*$/i; const chromeEvalRegex = /\((\S*)(?::(\d+))(?::(\d+))\)/; const chromeDataUriRegex = /at (.+?) ?\(data:(.+?),/; const chromeStackParserFn = (line) => { const dataUriMatch = line.match(chromeDataUriRegex); if (dataUriMatch) { return { filename: `<data:${dataUriMatch[2]}>`, function: dataUriMatch[1] }; } const noFnParts = chromeRegexNoFnName.exec(line); if (noFnParts) { const [, filename, line2, col] = noFnParts; return createFrame(filename, browser.UNKNOWN_FUNCTION, +line2, +col); } const parts = chromeRegex.exec(line); if (parts) { const isEval = parts[2]?.indexOf("eval") === 0; if (isEval) { const subMatch = chromeEvalRegex.exec(parts[2]); if (subMatch) { parts[2] = subMatch[1]; parts[3] = subMatch[2]; parts[4] = subMatch[3]; } } const [func, filename] = extractSafariExtensionDetails(parts[1] || browser.UNKNOWN_FUNCTION, parts[2]); return createFrame(filename, func, parts[3] ? +parts[3] : void 0, parts[4] ? +parts[4] : void 0); } return; }; const chromeStackLineParser = [CHROME_PRIORITY, chromeStackParserFn]; const geckoREgex = /^\s*(.*?)(?:\((.*?)\))?(?:^|@)?((?:[-a-z]+)?:\/.*?|\[native code\]|[^@]*(?:bundle|\d+\.js)|\/[\w\-. /=]+)(?::(\d+))?(?::(\d+))?\s*$/i; const geckoEvalRegex = /(\S+) line (\d+)(?: > eval line \d+)* > eval/i; const gecko = (line) => { const parts = geckoREgex.exec(line); if (parts) { const isEval = parts[3] && parts[3].indexOf(" > eval") > -1; if (isEval) { const subMatch = geckoEvalRegex.exec(parts[3]); if (subMatch) { parts[1] = parts[1] || "eval"; parts[3] = subMatch[1]; parts[4] = subMatch[2]; parts[5] = ""; } } let filename = parts[3]; let func = parts[1] || browser.UNKNOWN_FUNCTION; [func, filename] = extractSafariExtensionDetails(func, filename); return createFrame(filename, func, parts[4] ? +parts[4] : void 0, parts[5] ? +parts[5] : void 0); } return; }; const geckoStackLineParser = [GECKO_PRIORITY, gecko]; const winjsRegex = /^\s*at (?:((?:\[object object\])?.+) )?\(?((?:[-a-z]+):.*?):(\d+)(?::(\d+))?\)?\s*$/i; const winjs = (line) => { const parts = winjsRegex.exec(line); return parts ? createFrame(parts[2], parts[1] || browser.UNKNOWN_FUNCTION, +parts[3], parts[4] ? +parts[4] : void 0) : void 0; }; const winjsStackLineParser = [WINJS_PRIORITY, winjs]; const opera10Regex = / line (\d+).*script (?:in )?(\S+)(?:: in function (\S+))?$/i; const opera10 = (line) => { const parts = opera10Regex.exec(line); return parts ? createFrame(parts[2], parts[3] || browser.UNKNOWN_FUNCTION, +parts[1]) : void 0; }; const opera10StackLineParser = [OPERA10_PRIORITY, opera10]; const opera11Regex = / line (\d+), column (\d+)\s*(?:in (?:<anonymous function: ([^>]+)>|([^)]+))\(.*\))? in (.*):\s*$/i; const opera11 = (line) => { const parts = opera11Regex.exec(line); return parts ? createFrame(parts[5], parts[3] || parts[4] || browser.UNKNOWN_FUNCTION, +parts[1], +parts[2]) : void 0; }; const opera11StackLineParser = [OPERA11_PRIORITY, opera11]; const defaultStackLineParsers = [chromeStackLineParser, geckoStackLineParser]; const defaultStackParser = browser.createStackParser(...defaultStackLineParsers); const extractSafariExtensionDetails = (func, filename) => { const isSafariExtension = func.indexOf("safari-extension") !== -1; const isSafariWebExtension = func.indexOf("safari-web-extension") !== -1; return isSafariExtension || isSafariWebExtension ? [ func.indexOf("@") !== -1 ? func.split("@")[0] : browser.UNKNOWN_FUNCTION, isSafariExtension ? `safari-extension:${filename}` : `safari-web-extension:${filename}` ] : [func, filename]; }; exports.chromeStackLineParser = chromeStackLineParser; exports.defaultStackLineParsers = defaultStackLineParsers; exports.defaultStackParser = defaultStackParser; exports.geckoStackLineParser = geckoStackLineParser; exports.opera10StackLineParser = opera10StackLineParser; exports.opera11StackLineParser = opera11StackLineParser; exports.winjsStackLineParser = winjsStackLineParser; //# sourceMappingURL=stack-parsers.js.map