123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140 |
- 'use strict';
- Object.defineProperty(exports, '__esModule', { value: true });
- var UNKNOWN_FUNCTION = '<unknown>';
- /**
- * This parses the different stack traces and puts them into one format
- * This borrows heavily from TraceKit (https://github.com/csnover/TraceKit)
- */
- function parse(stackString) {
- var lines = stackString.split('\n');
- return lines.reduce(function (stack, line) {
- var parseResult = parseChrome(line) || parseWinjs(line) || parseGecko(line) || parseNode(line) || parseJSC(line);
- if (parseResult) {
- stack.push(parseResult);
- }
- return stack;
- }, []);
- }
- var chromeRe = /^\s*at (.*?) ?\(((?:file|https?|blob|chrome-extension|native|eval|webpack|<anonymous>|\/|[a-z]:\\|\\\\).*?)(?::(\d+))?(?::(\d+))?\)?\s*$/i;
- var chromeEvalRe = /\((\S*)(?::(\d+))(?::(\d+))\)/;
- function parseChrome(line) {
- var parts = chromeRe.exec(line);
- if (!parts) {
- return null;
- }
- var isNative = parts[2] && parts[2].indexOf('native') === 0; // start of line
- var isEval = parts[2] && parts[2].indexOf('eval') === 0; // start of line
- var submatch = chromeEvalRe.exec(parts[2]);
- if (isEval && submatch != null) {
- // throw out eval line/column and use top-most line/column number
- parts[2] = submatch[1]; // url
- parts[3] = submatch[2]; // line
- parts[4] = submatch[3]; // column
- }
- return {
- file: !isNative ? parts[2] : null,
- methodName: parts[1] || UNKNOWN_FUNCTION,
- arguments: isNative ? [parts[2]] : [],
- lineNumber: parts[3] ? +parts[3] : null,
- column: parts[4] ? +parts[4] : null
- };
- }
- var winjsRe = /^\s*at (?:((?:\[object object\])?.+) )?\(?((?:file|ms-appx|https?|webpack|blob):.*?):(\d+)(?::(\d+))?\)?\s*$/i;
- function parseWinjs(line) {
- var parts = winjsRe.exec(line);
- if (!parts) {
- return null;
- }
- return {
- file: parts[2],
- methodName: parts[1] || UNKNOWN_FUNCTION,
- arguments: [],
- lineNumber: +parts[3],
- column: parts[4] ? +parts[4] : null
- };
- }
- var geckoRe = /^\s*(.*?)(?:\((.*?)\))?(?:^|@)((?:file|https?|blob|chrome|webpack|resource|\[native).*?|[^@]*bundle)(?::(\d+))?(?::(\d+))?\s*$/i;
- var geckoEvalRe = /(\S+) line (\d+)(?: > eval line \d+)* > eval/i;
- function parseGecko(line) {
- var parts = geckoRe.exec(line);
- if (!parts) {
- return null;
- }
- var isEval = parts[3] && parts[3].indexOf(' > eval') > -1;
- var submatch = geckoEvalRe.exec(parts[3]);
- if (isEval && submatch != null) {
- // throw out eval line/column and use top-most line number
- parts[3] = submatch[1];
- parts[4] = submatch[2];
- parts[5] = null; // no column when eval
- }
- return {
- file: parts[3],
- methodName: parts[1] || UNKNOWN_FUNCTION,
- arguments: parts[2] ? parts[2].split(',') : [],
- lineNumber: parts[4] ? +parts[4] : null,
- column: parts[5] ? +parts[5] : null
- };
- }
- var javaScriptCoreRe = /^\s*(?:([^@]*)(?:\((.*?)\))?@)?(\S.*?):(\d+)(?::(\d+))?\s*$/i;
- function parseJSC(line) {
- var parts = javaScriptCoreRe.exec(line);
- if (!parts) {
- return null;
- }
- return {
- file: parts[3],
- methodName: parts[1] || UNKNOWN_FUNCTION,
- arguments: [],
- lineNumber: +parts[4],
- column: parts[5] ? +parts[5] : null
- };
- }
- var nodeRe = /^\s*at (?:((?:\[object object\])?[^\\/]+(?: \[as \S+\])?) )?\(?(.*?):(\d+)(?::(\d+))?\)?\s*$/i;
- function parseNode(line) {
- var parts = nodeRe.exec(line);
- if (!parts) {
- return null;
- }
- return {
- file: parts[2],
- methodName: parts[1] || UNKNOWN_FUNCTION,
- arguments: [],
- lineNumber: +parts[3],
- column: parts[4] ? +parts[4] : null
- };
- }
- exports.parse = parse;
|