package.build.npm.esm.stack-parsers.js.map Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of browser Show documentation
Show all versions of browser Show documentation
Official Sentry SDK for browsers
{"version":3,"file":"stack-parsers.js","sources":["../../../src/stack-parsers.ts"],"sourcesContent":["// This was originally forked from https://github.com/csnover/TraceKit, and was largely\n// re - written as part of raven - js.\n//\n// This code was later copied to the JavaScript mono - repo and further modified and\n// refactored over the years.\n\n// Copyright (c) 2013 Onur Can Cakmak [email protected] and all TraceKit contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy of this\n// software and associated documentation files(the 'Software'), to deal in the Software\n// without restriction, including without limitation the rights to use, copy, modify,\n// merge, publish, distribute, sublicense, and / or sell copies of the Software, and to\n// permit persons to whom the Software is furnished to do so, subject to the following\n// conditions:\n//\n// The above copyright notice and this permission notice shall be included in all copies\n// or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,\n// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\n// PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT\n// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF\n// CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE\n// OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nimport type { StackFrame, StackLineParser, StackLineParserFn } from '@sentry/types';\nimport { UNKNOWN_FUNCTION, createStackParser } from '@sentry/utils';\n\nconst OPERA10_PRIORITY = 10;\nconst OPERA11_PRIORITY = 20;\nconst CHROME_PRIORITY = 30;\nconst WINJS_PRIORITY = 40;\nconst GECKO_PRIORITY = 50;\n\nfunction createFrame(filename: string, func: string, lineno?: number, colno?: number): StackFrame {\n const frame: StackFrame = {\n filename,\n function: func === '' ? UNKNOWN_FUNCTION : func,\n in_app: true, // All browser frames are considered in_app\n };\n\n if (lineno !== undefined) {\n frame.lineno = lineno;\n }\n\n if (colno !== undefined) {\n frame.colno = colno;\n }\n\n return frame;\n}\n\n// This regex matches frames that have no function name (ie. are at the top level of a module).\n// For example \"at http://localhost:5000//script.js:1:126\"\n// Frames _with_ function names usually look as follows: \"at commitLayoutEffects (react-dom.development.js:23426:1)\"\nconst chromeRegexNoFnName = /^\\s*at (\\S+?)(?::(\\d+))(?::(\\d+))\\s*$/i;\n\n// This regex matches all the frames that have a function name.\nconst chromeRegex =\n /^\\s*at (?:(.+?\\)(?: \\[.+\\])?|.*?) ?\\((?:address at )?)?(?:async )?((?:|[-a-z]+:|.*bundle|\\/)?.*?)(?::(\\d+))?(?::(\\d+))?\\)?\\s*$/i;\n\nconst chromeEvalRegex = /\\((\\S*)(?::(\\d+))(?::(\\d+))\\)/;\n\n// Chromium based browsers: Chrome, Brave, new Opera, new Edge\n// We cannot call this variable `chrome` because it can conflict with global `chrome` variable in certain environments\n// See: https://github.com/getsentry/sentry-javascript/issues/6880\nconst chromeStackParserFn: StackLineParserFn = line => {\n // If the stack line has no function name, we need to parse it differently\n const noFnParts = chromeRegexNoFnName.exec(line) as null | [string, string, string, string];\n\n if (noFnParts) {\n const [, filename, line, col] = noFnParts;\n return createFrame(filename, UNKNOWN_FUNCTION, +line, +col);\n }\n\n const parts = chromeRegex.exec(line) as null | [string, string, string, string, string];\n\n if (parts) {\n const isEval = parts[2] && parts[2].indexOf('eval') === 0; // start of line\n\n if (isEval) {\n const subMatch = chromeEvalRegex.exec(parts[2]) as null | [string, string, string, string];\n\n if (subMatch) {\n // throw out eval line/column and use top-most line/column number\n parts[2] = subMatch[1]; // url\n parts[3] = subMatch[2]; // line\n parts[4] = subMatch[3]; // column\n }\n }\n\n // Kamil: One more hack won't hurt us right? Understanding and adding more rules on top of these regexps right now\n // would be way too time consuming. (TODO: Rewrite whole RegExp to be more readable)\n const [func, filename] = extractSafariExtensionDetails(parts[1] || UNKNOWN_FUNCTION, parts[2]);\n\n return createFrame(filename, func, parts[3] ? +parts[3] : undefined, parts[4] ? +parts[4] : undefined);\n }\n\n return;\n};\n\nexport const chromeStackLineParser: StackLineParser = [CHROME_PRIORITY, chromeStackParserFn];\n\n// gecko regex: `(?:bundle|\\d+\\.js)`: `bundle` is for react native, `\\d+\\.js` also but specifically for ram bundles because it\n// generates filenames without a prefix like `file://` the filenames in the stacktrace are just 42.js\n// We need this specific case for now because we want no other regex to match.\nconst geckoREgex =\n /^\\s*(.*?)(?:\\((.*?)\\))?(?:^|@)?((?:[-a-z]+)?:\\/.*?|\\[native code\\]|[^@]*(?:bundle|\\d+\\.js)|\\/[\\w\\-. /=]+)(?::(\\d+))?(?::(\\d+))?\\s*$/i;\nconst geckoEvalRegex = /(\\S+) line (\\d+)(?: > eval line \\d+)* > eval/i;\n\nconst gecko: StackLineParserFn = line => {\n const parts = geckoREgex.exec(line) as null | [string, string, string, string, string, string];\n\n if (parts) {\n const isEval = parts[3] && parts[3].indexOf(' > eval') > -1;\n if (isEval) {\n const subMatch = geckoEvalRegex.exec(parts[3]) as null | [string, string, string];\n\n if (subMatch) {\n // throw out eval line/column and use top-most line number\n parts[1] = parts[1] || 'eval';\n parts[3] = subMatch[1];\n parts[4] = subMatch[2];\n parts[5] = ''; // no column when eval\n }\n }\n\n let filename = parts[3];\n let func = parts[1] || UNKNOWN_FUNCTION;\n [func, filename] = extractSafariExtensionDetails(func, filename);\n\n return createFrame(filename, func, parts[4] ? +parts[4] : undefined, parts[5] ? +parts[5] : undefined);\n }\n\n return;\n};\n\nexport const geckoStackLineParser: StackLineParser = [GECKO_PRIORITY, gecko];\n\nconst winjsRegex = /^\\s*at (?:((?:\\[object object\\])?.+) )?\\(?((?:[-a-z]+):.*?):(\\d+)(?::(\\d+))?\\)?\\s*$/i;\n\nconst winjs: StackLineParserFn = line => {\n const parts = winjsRegex.exec(line) as null | [string, string, string, string, string];\n\n return parts\n ? createFrame(parts[2], parts[1] || UNKNOWN_FUNCTION, +parts[3], parts[4] ? +parts[4] : undefined)\n : undefined;\n};\n\nexport const winjsStackLineParser: StackLineParser = [WINJS_PRIORITY, winjs];\n\nconst opera10Regex = / line (\\d+).*script (?:in )?(\\S+)(?:: in function (\\S+))?$/i;\n\nconst opera10: StackLineParserFn = line => {\n const parts = opera10Regex.exec(line) as null | [string, string, string, string];\n return parts ? createFrame(parts[2], parts[3] || UNKNOWN_FUNCTION, +parts[1]) : undefined;\n};\n\nexport const opera10StackLineParser: StackLineParser = [OPERA10_PRIORITY, opera10];\n\nconst opera11Regex =\n / line (\\d+), column (\\d+)\\s*(?:in (?:]+)>|([^)]+))\\(.*\\))? in (.*):\\s*$/i;\n\nconst opera11: StackLineParserFn = line => {\n const parts = opera11Regex.exec(line) as null | [string, string, string, string, string, string];\n return parts ? createFrame(parts[5], parts[3] || parts[4] || UNKNOWN_FUNCTION, +parts[1], +parts[2]) : undefined;\n};\n\nexport const opera11StackLineParser: StackLineParser = [OPERA11_PRIORITY, opera11];\n\nexport const defaultStackLineParsers = [chromeStackLineParser, geckoStackLineParser];\n\nexport const defaultStackParser = createStackParser(...defaultStackLineParsers);\n\n/**\n * Safari web extensions, starting version unknown, can produce \"frames-only\" stacktraces.\n * What it means, is that instead of format like:\n *\n * Error: wat\n * at function@url:row:col\n * at function@url:row:col\n * at function@url:row:col\n *\n * it produces something like:\n *\n * function@url:row:col\n * function@url:row:col\n * function@url:row:col\n *\n * Because of that, it won't be captured by `chrome` RegExp and will fall into `Gecko` branch.\n * This function is extracted so that we can use it in both places without duplicating the logic.\n * Unfortunately \"just\" changing RegExp is too complicated now and making it pass all tests\n * and fix this case seems like an impossible, or at least way too time-consuming task.\n */\nconst extractSafariExtensionDetails = (func: string, filename: string): [string, string] => {\n const isSafariExtension = func.indexOf('safari-extension') !== -1;\n const isSafariWebExtension = func.indexOf('safari-web-extension') !== -1;\n\n return isSafariExtension || isSafariWebExtension\n ? [\n func.indexOf('@') !== -1 ? (func.split('@')[0] as string) : UNKNOWN_FUNCTION,\n isSafariExtension ? `safari-extension:${filename}` : `safari-web-extension:${filename}`,\n ]\n : [func, filename];\n};\n"],"names":[],"mappings":"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"}