@sentry/browser 6.17.8-beta.0 → 6.18.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/bundle.es6.js +266 -340
- package/build/bundle.es6.js.map +1 -1
- package/build/bundle.es6.min.js +2 -2
- package/build/bundle.es6.min.js.map +1 -1
- package/build/bundle.js +298 -356
- package/build/bundle.js.map +1 -1
- package/build/bundle.min.js +2 -2
- package/build/bundle.min.js.map +1 -1
- package/dist/eventbuilder.d.ts.map +1 -1
- package/dist/eventbuilder.js +7 -13
- package/dist/eventbuilder.js.map +1 -1
- package/dist/integrations/linkederrors.d.ts.map +1 -1
- package/dist/integrations/linkederrors.js +1 -3
- package/dist/integrations/linkederrors.js.map +1 -1
- package/dist/parsers.d.ts +7 -7
- package/dist/parsers.d.ts.map +1 -1
- package/dist/parsers.js +55 -42
- package/dist/parsers.js.map +1 -1
- package/dist/stack-parsers.d.ts +7 -0
- package/dist/stack-parsers.d.ts.map +1 -0
- package/dist/stack-parsers.js +117 -0
- package/dist/stack-parsers.js.map +1 -0
- package/esm/eventbuilder.d.ts.map +1 -1
- package/esm/eventbuilder.js +8 -14
- package/esm/eventbuilder.js.map +1 -1
- package/esm/integrations/linkederrors.d.ts.map +1 -1
- package/esm/integrations/linkederrors.js +2 -4
- package/esm/integrations/linkederrors.js.map +1 -1
- package/esm/parsers.d.ts +7 -7
- package/esm/parsers.d.ts.map +1 -1
- package/esm/parsers.js +53 -40
- package/esm/parsers.js.map +1 -1
- package/esm/stack-parsers.d.ts +7 -0
- package/esm/stack-parsers.d.ts.map +1 -0
- package/esm/stack-parsers.js +116 -0
- package/esm/stack-parsers.js.map +1 -0
- package/package.json +4 -7
- package/dist/tracekit.d.ts +0 -23
- package/dist/tracekit.d.ts.map +0 -1
- package/dist/tracekit.js +0 -184
- package/dist/tracekit.js.map +0 -1
- package/esm/tracekit.d.ts +0 -23
- package/esm/tracekit.d.ts.map +0 -1
- package/esm/tracekit.js +0 -182
- package/esm/tracekit.js.map +0 -1
package/dist/tracekit.js
DELETED
|
@@ -1,184 +0,0 @@
|
|
|
1
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
2
|
-
var tslib_1 = require("tslib");
|
|
3
|
-
// global reference to slice
|
|
4
|
-
var UNKNOWN_FUNCTION = '?';
|
|
5
|
-
// Chromium based browsers: Chrome, Brave, new Opera, new Edge
|
|
6
|
-
var chrome = /^\s*at (?:(.*?) ?\((?:address at )?)?((?:file|https?|blob|chrome-extension|address|native|eval|webpack|<anonymous>|[-a-z]+:|.*bundle|\/).*?)(?::(\d+))?(?::(\d+))?\)?\s*$/i;
|
|
7
|
-
// gecko regex: `(?:bundle|\d+\.js)`: `bundle` is for react native, `\d+\.js` also but specifically for ram bundles because it
|
|
8
|
-
// generates filenames without a prefix like `file://` the filenames in the stacktrace are just 42.js
|
|
9
|
-
// We need this specific case for now because we want no other regex to match.
|
|
10
|
-
var gecko = /^\s*(.*?)(?:\((.*?)\))?(?:^|@)?((?:file|https?|blob|chrome|webpack|resource|moz-extension|capacitor).*?:\/.*?|\[native code\]|[^@]*(?:bundle|\d+\.js)|\/[\w\-. /=]+)(?::(\d+))?(?::(\d+))?\s*$/i;
|
|
11
|
-
var winjs = /^\s*at (?:((?:\[object object\])?.+) )?\(?((?:file|ms-appx|https?|webpack|blob):.*?):(\d+)(?::(\d+))?\)?\s*$/i;
|
|
12
|
-
var geckoEval = /(\S+) line (\d+)(?: > eval line \d+)* > eval/i;
|
|
13
|
-
var chromeEval = /\((\S*)(?::(\d+))(?::(\d+))\)/;
|
|
14
|
-
// Based on our own mapping pattern - https://github.com/getsentry/sentry/blob/9f08305e09866c8bd6d0c24f5b0aabdd7dd6c59c/src/sentry/lang/javascript/errormapping.py#L83-L108
|
|
15
|
-
var reactMinifiedRegexp = /Minified React error #\d+;/i;
|
|
16
|
-
var opera10Regex = / line (\d+).*script (?:in )?(\S+)(?:: in function (\S+))?$/i;
|
|
17
|
-
var opera11Regex = / line (\d+), column (\d+)\s*(?:in (?:<anonymous function: ([^>]+)>|([^)]+))\(.*\))? in (.*):\s*$/i;
|
|
18
|
-
/** JSDoc */
|
|
19
|
-
function computeStackTrace(ex) {
|
|
20
|
-
var frames = [];
|
|
21
|
-
var popSize = 0;
|
|
22
|
-
if (ex) {
|
|
23
|
-
if (typeof ex.framesToPop === 'number') {
|
|
24
|
-
popSize = ex.framesToPop;
|
|
25
|
-
}
|
|
26
|
-
else if (reactMinifiedRegexp.test(ex.message)) {
|
|
27
|
-
popSize = 1;
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
try {
|
|
31
|
-
// Access and store the stacktrace property before doing ANYTHING
|
|
32
|
-
// else to it because Opera is not very good at providing it
|
|
33
|
-
// reliably in other circumstances.
|
|
34
|
-
var stacktrace = ex.stacktrace || ex.stack || '';
|
|
35
|
-
frames = parseFrames(stacktrace);
|
|
36
|
-
}
|
|
37
|
-
catch (e) {
|
|
38
|
-
// no-empty
|
|
39
|
-
}
|
|
40
|
-
if (frames.length && popSize > 0) {
|
|
41
|
-
frames = frames.slice(popSize);
|
|
42
|
-
}
|
|
43
|
-
return {
|
|
44
|
-
message: extractMessage(ex),
|
|
45
|
-
name: ex && ex.name,
|
|
46
|
-
stack: frames,
|
|
47
|
-
};
|
|
48
|
-
}
|
|
49
|
-
exports.computeStackTrace = computeStackTrace;
|
|
50
|
-
/** JSDoc */
|
|
51
|
-
// eslint-disable-next-line complexity
|
|
52
|
-
function parseFrames(stackString) {
|
|
53
|
-
var e_1, _a, _b;
|
|
54
|
-
var frames = [];
|
|
55
|
-
var lines = stackString.split('\n');
|
|
56
|
-
var isEval;
|
|
57
|
-
var submatch;
|
|
58
|
-
var parts;
|
|
59
|
-
var element;
|
|
60
|
-
try {
|
|
61
|
-
for (var lines_1 = tslib_1.__values(lines), lines_1_1 = lines_1.next(); !lines_1_1.done; lines_1_1 = lines_1.next()) {
|
|
62
|
-
var line = lines_1_1.value;
|
|
63
|
-
if ((parts = opera10Regex.exec(line))) {
|
|
64
|
-
element = {
|
|
65
|
-
filename: parts[2],
|
|
66
|
-
function: parts[3] || UNKNOWN_FUNCTION,
|
|
67
|
-
lineno: +parts[1],
|
|
68
|
-
};
|
|
69
|
-
}
|
|
70
|
-
else if ((parts = opera11Regex.exec(line))) {
|
|
71
|
-
element = {
|
|
72
|
-
filename: parts[5],
|
|
73
|
-
function: parts[3] || parts[4] || UNKNOWN_FUNCTION,
|
|
74
|
-
lineno: +parts[1],
|
|
75
|
-
colno: +parts[2],
|
|
76
|
-
};
|
|
77
|
-
}
|
|
78
|
-
else if ((parts = chrome.exec(line))) {
|
|
79
|
-
isEval = parts[2] && parts[2].indexOf('eval') === 0; // start of line
|
|
80
|
-
if (isEval && (submatch = chromeEval.exec(parts[2]))) {
|
|
81
|
-
// throw out eval line/column and use top-most line/column number
|
|
82
|
-
parts[2] = submatch[1]; // url
|
|
83
|
-
parts[3] = submatch[2]; // line
|
|
84
|
-
parts[4] = submatch[3]; // column
|
|
85
|
-
}
|
|
86
|
-
// Kamil: One more hack won't hurt us right? Understanding and adding more rules on top of these regexps right now
|
|
87
|
-
// would be way too time consuming. (TODO: Rewrite whole RegExp to be more readable)
|
|
88
|
-
var _c = tslib_1.__read(extractSafariExtensionDetails(parts[1] || UNKNOWN_FUNCTION, parts[2]), 2), func = _c[0], filename = _c[1];
|
|
89
|
-
element = {
|
|
90
|
-
filename: filename,
|
|
91
|
-
function: func,
|
|
92
|
-
lineno: parts[3] ? +parts[3] : undefined,
|
|
93
|
-
colno: parts[4] ? +parts[4] : undefined,
|
|
94
|
-
};
|
|
95
|
-
}
|
|
96
|
-
else if ((parts = winjs.exec(line))) {
|
|
97
|
-
element = {
|
|
98
|
-
filename: parts[2],
|
|
99
|
-
function: parts[1] || UNKNOWN_FUNCTION,
|
|
100
|
-
lineno: +parts[3],
|
|
101
|
-
colno: parts[4] ? +parts[4] : undefined,
|
|
102
|
-
};
|
|
103
|
-
}
|
|
104
|
-
else if ((parts = gecko.exec(line))) {
|
|
105
|
-
isEval = parts[3] && parts[3].indexOf(' > eval') > -1;
|
|
106
|
-
if (isEval && (submatch = geckoEval.exec(parts[3]))) {
|
|
107
|
-
// throw out eval line/column and use top-most line number
|
|
108
|
-
parts[1] = parts[1] || "eval";
|
|
109
|
-
parts[3] = submatch[1];
|
|
110
|
-
parts[4] = submatch[2];
|
|
111
|
-
parts[5] = ''; // no column when eval
|
|
112
|
-
}
|
|
113
|
-
var filename = parts[3];
|
|
114
|
-
var func = parts[1] || UNKNOWN_FUNCTION;
|
|
115
|
-
_b = tslib_1.__read(extractSafariExtensionDetails(func, filename), 2), func = _b[0], filename = _b[1];
|
|
116
|
-
element = {
|
|
117
|
-
filename: filename,
|
|
118
|
-
function: func,
|
|
119
|
-
lineno: parts[4] ? +parts[4] : undefined,
|
|
120
|
-
colno: parts[5] ? +parts[5] : undefined,
|
|
121
|
-
};
|
|
122
|
-
}
|
|
123
|
-
else {
|
|
124
|
-
continue;
|
|
125
|
-
}
|
|
126
|
-
frames.push(element);
|
|
127
|
-
}
|
|
128
|
-
}
|
|
129
|
-
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
130
|
-
finally {
|
|
131
|
-
try {
|
|
132
|
-
if (lines_1_1 && !lines_1_1.done && (_a = lines_1.return)) _a.call(lines_1);
|
|
133
|
-
}
|
|
134
|
-
finally { if (e_1) throw e_1.error; }
|
|
135
|
-
}
|
|
136
|
-
return frames;
|
|
137
|
-
}
|
|
138
|
-
/**
|
|
139
|
-
* Safari web extensions, starting version unknown, can produce "frames-only" stacktraces.
|
|
140
|
-
* What it means, is that instead of format like:
|
|
141
|
-
*
|
|
142
|
-
* Error: wat
|
|
143
|
-
* at function@url:row:col
|
|
144
|
-
* at function@url:row:col
|
|
145
|
-
* at function@url:row:col
|
|
146
|
-
*
|
|
147
|
-
* it produces something like:
|
|
148
|
-
*
|
|
149
|
-
* function@url:row:col
|
|
150
|
-
* function@url:row:col
|
|
151
|
-
* function@url:row:col
|
|
152
|
-
*
|
|
153
|
-
* Because of that, it won't be captured by `chrome` RegExp and will fall into `Gecko` branch.
|
|
154
|
-
* This function is extracted so that we can use it in both places without duplicating the logic.
|
|
155
|
-
* Unfortunatelly "just" changing RegExp is too complicated now and making it pass all tests
|
|
156
|
-
* and fix this case seems like an impossible, or at least way too time-consuming task.
|
|
157
|
-
*/
|
|
158
|
-
var extractSafariExtensionDetails = function (func, filename) {
|
|
159
|
-
var isSafariExtension = func.indexOf('safari-extension') !== -1;
|
|
160
|
-
var isSafariWebExtension = func.indexOf('safari-web-extension') !== -1;
|
|
161
|
-
return isSafariExtension || isSafariWebExtension
|
|
162
|
-
? [
|
|
163
|
-
func.indexOf('@') !== -1 ? func.split('@')[0] : UNKNOWN_FUNCTION,
|
|
164
|
-
isSafariExtension ? "safari-extension:" + filename : "safari-web-extension:" + filename,
|
|
165
|
-
]
|
|
166
|
-
: [func, filename];
|
|
167
|
-
};
|
|
168
|
-
/**
|
|
169
|
-
* There are cases where stacktrace.message is an Event object
|
|
170
|
-
* https://github.com/getsentry/sentry-javascript/issues/1949
|
|
171
|
-
* In this specific case we try to extract stacktrace.message.error.message
|
|
172
|
-
*/
|
|
173
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
174
|
-
function extractMessage(ex) {
|
|
175
|
-
var message = ex && ex.message;
|
|
176
|
-
if (!message) {
|
|
177
|
-
return 'No error message';
|
|
178
|
-
}
|
|
179
|
-
if (message.error && typeof message.error.message === 'string') {
|
|
180
|
-
return message.error.message;
|
|
181
|
-
}
|
|
182
|
-
return message;
|
|
183
|
-
}
|
|
184
|
-
//# sourceMappingURL=tracekit.js.map
|
package/dist/tracekit.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"tracekit.js","sourceRoot":"","sources":["../src/tracekit.ts"],"names":[],"mappings":"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","sourcesContent":["import { StackFrame } from '@sentry/types';\n\n/**\n * This was originally forked from https://github.com/occ/TraceKit, but has since been\n * largely modified and is now maintained as part of Sentry JS SDK.\n */\n\n/* eslint-disable @typescript-eslint/no-unsafe-member-access, max-lines */\n\n/**\n * An object representing a JavaScript stack trace.\n * {Object} StackTrace\n * {string} name The name of the thrown exception.\n * {string} message The exception error message.\n * {TraceKit.StackFrame[]} stack An array of stack frames.\n */\nexport interface StackTrace {\n name: string;\n message: string;\n stack: StackFrame[];\n}\n\n// global reference to slice\nconst UNKNOWN_FUNCTION = '?';\n\n// Chromium based browsers: Chrome, Brave, new Opera, new Edge\nconst chrome =\n /^\\s*at (?:(.*?) ?\\((?:address at )?)?((?:file|https?|blob|chrome-extension|address|native|eval|webpack|<anonymous>|[-a-z]+:|.*bundle|\\/).*?)(?::(\\d+))?(?::(\\d+))?\\)?\\s*$/i;\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 gecko =\n /^\\s*(.*?)(?:\\((.*?)\\))?(?:^|@)?((?:file|https?|blob|chrome|webpack|resource|moz-extension|capacitor).*?:\\/.*?|\\[native code\\]|[^@]*(?:bundle|\\d+\\.js)|\\/[\\w\\-. /=]+)(?::(\\d+))?(?::(\\d+))?\\s*$/i;\nconst winjs =\n /^\\s*at (?:((?:\\[object object\\])?.+) )?\\(?((?:file|ms-appx|https?|webpack|blob):.*?):(\\d+)(?::(\\d+))?\\)?\\s*$/i;\nconst geckoEval = /(\\S+) line (\\d+)(?: > eval line \\d+)* > eval/i;\nconst chromeEval = /\\((\\S*)(?::(\\d+))(?::(\\d+))\\)/;\n// Based on our own mapping pattern - https://github.com/getsentry/sentry/blob/9f08305e09866c8bd6d0c24f5b0aabdd7dd6c59c/src/sentry/lang/javascript/errormapping.py#L83-L108\nconst reactMinifiedRegexp = /Minified React error #\\d+;/i;\nconst opera10Regex = / line (\\d+).*script (?:in )?(\\S+)(?:: in function (\\S+))?$/i;\nconst opera11Regex =\n / line (\\d+), column (\\d+)\\s*(?:in (?:<anonymous function: ([^>]+)>|([^)]+))\\(.*\\))? in (.*):\\s*$/i;\n\n/** JSDoc */\nexport function computeStackTrace(ex: Error & { framesToPop?: number; stacktrace?: string }): StackTrace {\n let frames: StackFrame[] = [];\n let popSize = 0;\n\n if (ex) {\n if (typeof ex.framesToPop === 'number') {\n popSize = ex.framesToPop;\n } else if (reactMinifiedRegexp.test(ex.message)) {\n popSize = 1;\n }\n }\n\n try {\n // Access and store the stacktrace property before doing ANYTHING\n // else to it because Opera is not very good at providing it\n // reliably in other circumstances.\n const stacktrace = ex.stacktrace || ex.stack || '';\n\n frames = parseFrames(stacktrace);\n } catch (e) {\n // no-empty\n }\n\n if (frames.length && popSize > 0) {\n frames = frames.slice(popSize);\n }\n\n return {\n message: extractMessage(ex),\n name: ex && ex.name,\n stack: frames,\n };\n}\n\n/** JSDoc */\n// eslint-disable-next-line complexity\nfunction parseFrames(stackString: string): StackFrame[] {\n const frames: StackFrame[] = [];\n const lines = stackString.split('\\n');\n let isEval;\n let submatch;\n let parts;\n let element: StackFrame | undefined;\n\n for (const line of lines) {\n if ((parts = opera10Regex.exec(line))) {\n element = {\n filename: parts[2],\n function: parts[3] || UNKNOWN_FUNCTION,\n lineno: +parts[1],\n };\n } else if ((parts = opera11Regex.exec(line))) {\n element = {\n filename: parts[5],\n function: parts[3] || parts[4] || UNKNOWN_FUNCTION,\n lineno: +parts[1],\n colno: +parts[2],\n };\n } else if ((parts = chrome.exec(line))) {\n isEval = parts[2] && parts[2].indexOf('eval') === 0; // start of line\n if (isEval && (submatch = chromeEval.exec(parts[2]))) {\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 // 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 element = {\n filename,\n function: func,\n lineno: parts[3] ? +parts[3] : undefined,\n colno: parts[4] ? +parts[4] : undefined,\n };\n } else if ((parts = winjs.exec(line))) {\n element = {\n filename: parts[2],\n function: parts[1] || UNKNOWN_FUNCTION,\n lineno: +parts[3],\n colno: parts[4] ? +parts[4] : undefined,\n };\n } else if ((parts = gecko.exec(line))) {\n isEval = parts[3] && parts[3].indexOf(' > eval') > -1;\n if (isEval && (submatch = geckoEval.exec(parts[3]))) {\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 let filename = parts[3];\n let func = parts[1] || UNKNOWN_FUNCTION;\n [func, filename] = extractSafariExtensionDetails(func, filename);\n\n element = {\n filename,\n function: func,\n lineno: parts[4] ? +parts[4] : undefined,\n colno: parts[5] ? +parts[5] : undefined,\n };\n } else {\n continue;\n }\n\n frames.push(element);\n }\n\n return frames;\n}\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 * Unfortunatelly \"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] : UNKNOWN_FUNCTION,\n isSafariExtension ? `safari-extension:${filename}` : `safari-web-extension:${filename}`,\n ]\n : [func, filename];\n};\n\n/**\n * There are cases where stacktrace.message is an Event object\n * https://github.com/getsentry/sentry-javascript/issues/1949\n * In this specific case we try to extract stacktrace.message.error.message\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction extractMessage(ex: any): string {\n const message = ex && ex.message;\n if (!message) {\n return 'No error message';\n }\n if (message.error && typeof message.error.message === 'string') {\n return message.error.message;\n }\n return message;\n}\n"]}
|
package/esm/tracekit.d.ts
DELETED
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
import { StackFrame } from '@sentry/types';
|
|
2
|
-
/**
|
|
3
|
-
* This was originally forked from https://github.com/occ/TraceKit, but has since been
|
|
4
|
-
* largely modified and is now maintained as part of Sentry JS SDK.
|
|
5
|
-
*/
|
|
6
|
-
/**
|
|
7
|
-
* An object representing a JavaScript stack trace.
|
|
8
|
-
* {Object} StackTrace
|
|
9
|
-
* {string} name The name of the thrown exception.
|
|
10
|
-
* {string} message The exception error message.
|
|
11
|
-
* {TraceKit.StackFrame[]} stack An array of stack frames.
|
|
12
|
-
*/
|
|
13
|
-
export interface StackTrace {
|
|
14
|
-
name: string;
|
|
15
|
-
message: string;
|
|
16
|
-
stack: StackFrame[];
|
|
17
|
-
}
|
|
18
|
-
/** JSDoc */
|
|
19
|
-
export declare function computeStackTrace(ex: Error & {
|
|
20
|
-
framesToPop?: number;
|
|
21
|
-
stacktrace?: string;
|
|
22
|
-
}): StackTrace;
|
|
23
|
-
//# sourceMappingURL=tracekit.d.ts.map
|
package/esm/tracekit.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"tracekit.d.ts","sourceRoot":"","sources":["../src/tracekit.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAE3C;;;GAGG;AAIH;;;;;;GAMG;AACH,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,UAAU,EAAE,CAAC;CACrB;AAuBD,YAAY;AACZ,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,KAAK,GAAG;IAAE,WAAW,CAAC,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,UAAU,CAgCvG"}
|
package/esm/tracekit.js
DELETED
|
@@ -1,182 +0,0 @@
|
|
|
1
|
-
import { __read, __values } from "tslib";
|
|
2
|
-
// global reference to slice
|
|
3
|
-
var UNKNOWN_FUNCTION = '?';
|
|
4
|
-
// Chromium based browsers: Chrome, Brave, new Opera, new Edge
|
|
5
|
-
var chrome = /^\s*at (?:(.*?) ?\((?:address at )?)?((?:file|https?|blob|chrome-extension|address|native|eval|webpack|<anonymous>|[-a-z]+:|.*bundle|\/).*?)(?::(\d+))?(?::(\d+))?\)?\s*$/i;
|
|
6
|
-
// gecko regex: `(?:bundle|\d+\.js)`: `bundle` is for react native, `\d+\.js` also but specifically for ram bundles because it
|
|
7
|
-
// generates filenames without a prefix like `file://` the filenames in the stacktrace are just 42.js
|
|
8
|
-
// We need this specific case for now because we want no other regex to match.
|
|
9
|
-
var gecko = /^\s*(.*?)(?:\((.*?)\))?(?:^|@)?((?:file|https?|blob|chrome|webpack|resource|moz-extension|capacitor).*?:\/.*?|\[native code\]|[^@]*(?:bundle|\d+\.js)|\/[\w\-. /=]+)(?::(\d+))?(?::(\d+))?\s*$/i;
|
|
10
|
-
var winjs = /^\s*at (?:((?:\[object object\])?.+) )?\(?((?:file|ms-appx|https?|webpack|blob):.*?):(\d+)(?::(\d+))?\)?\s*$/i;
|
|
11
|
-
var geckoEval = /(\S+) line (\d+)(?: > eval line \d+)* > eval/i;
|
|
12
|
-
var chromeEval = /\((\S*)(?::(\d+))(?::(\d+))\)/;
|
|
13
|
-
// Based on our own mapping pattern - https://github.com/getsentry/sentry/blob/9f08305e09866c8bd6d0c24f5b0aabdd7dd6c59c/src/sentry/lang/javascript/errormapping.py#L83-L108
|
|
14
|
-
var reactMinifiedRegexp = /Minified React error #\d+;/i;
|
|
15
|
-
var opera10Regex = / line (\d+).*script (?:in )?(\S+)(?:: in function (\S+))?$/i;
|
|
16
|
-
var opera11Regex = / line (\d+), column (\d+)\s*(?:in (?:<anonymous function: ([^>]+)>|([^)]+))\(.*\))? in (.*):\s*$/i;
|
|
17
|
-
/** JSDoc */
|
|
18
|
-
export function computeStackTrace(ex) {
|
|
19
|
-
var frames = [];
|
|
20
|
-
var popSize = 0;
|
|
21
|
-
if (ex) {
|
|
22
|
-
if (typeof ex.framesToPop === 'number') {
|
|
23
|
-
popSize = ex.framesToPop;
|
|
24
|
-
}
|
|
25
|
-
else if (reactMinifiedRegexp.test(ex.message)) {
|
|
26
|
-
popSize = 1;
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
try {
|
|
30
|
-
// Access and store the stacktrace property before doing ANYTHING
|
|
31
|
-
// else to it because Opera is not very good at providing it
|
|
32
|
-
// reliably in other circumstances.
|
|
33
|
-
var stacktrace = ex.stacktrace || ex.stack || '';
|
|
34
|
-
frames = parseFrames(stacktrace);
|
|
35
|
-
}
|
|
36
|
-
catch (e) {
|
|
37
|
-
// no-empty
|
|
38
|
-
}
|
|
39
|
-
if (frames.length && popSize > 0) {
|
|
40
|
-
frames = frames.slice(popSize);
|
|
41
|
-
}
|
|
42
|
-
return {
|
|
43
|
-
message: extractMessage(ex),
|
|
44
|
-
name: ex && ex.name,
|
|
45
|
-
stack: frames,
|
|
46
|
-
};
|
|
47
|
-
}
|
|
48
|
-
/** JSDoc */
|
|
49
|
-
// eslint-disable-next-line complexity
|
|
50
|
-
function parseFrames(stackString) {
|
|
51
|
-
var e_1, _a, _b;
|
|
52
|
-
var frames = [];
|
|
53
|
-
var lines = stackString.split('\n');
|
|
54
|
-
var isEval;
|
|
55
|
-
var submatch;
|
|
56
|
-
var parts;
|
|
57
|
-
var element;
|
|
58
|
-
try {
|
|
59
|
-
for (var lines_1 = __values(lines), lines_1_1 = lines_1.next(); !lines_1_1.done; lines_1_1 = lines_1.next()) {
|
|
60
|
-
var line = lines_1_1.value;
|
|
61
|
-
if ((parts = opera10Regex.exec(line))) {
|
|
62
|
-
element = {
|
|
63
|
-
filename: parts[2],
|
|
64
|
-
function: parts[3] || UNKNOWN_FUNCTION,
|
|
65
|
-
lineno: +parts[1],
|
|
66
|
-
};
|
|
67
|
-
}
|
|
68
|
-
else if ((parts = opera11Regex.exec(line))) {
|
|
69
|
-
element = {
|
|
70
|
-
filename: parts[5],
|
|
71
|
-
function: parts[3] || parts[4] || UNKNOWN_FUNCTION,
|
|
72
|
-
lineno: +parts[1],
|
|
73
|
-
colno: +parts[2],
|
|
74
|
-
};
|
|
75
|
-
}
|
|
76
|
-
else if ((parts = chrome.exec(line))) {
|
|
77
|
-
isEval = parts[2] && parts[2].indexOf('eval') === 0; // start of line
|
|
78
|
-
if (isEval && (submatch = chromeEval.exec(parts[2]))) {
|
|
79
|
-
// throw out eval line/column and use top-most line/column number
|
|
80
|
-
parts[2] = submatch[1]; // url
|
|
81
|
-
parts[3] = submatch[2]; // line
|
|
82
|
-
parts[4] = submatch[3]; // column
|
|
83
|
-
}
|
|
84
|
-
// Kamil: One more hack won't hurt us right? Understanding and adding more rules on top of these regexps right now
|
|
85
|
-
// would be way too time consuming. (TODO: Rewrite whole RegExp to be more readable)
|
|
86
|
-
var _c = __read(extractSafariExtensionDetails(parts[1] || UNKNOWN_FUNCTION, parts[2]), 2), func = _c[0], filename = _c[1];
|
|
87
|
-
element = {
|
|
88
|
-
filename: filename,
|
|
89
|
-
function: func,
|
|
90
|
-
lineno: parts[3] ? +parts[3] : undefined,
|
|
91
|
-
colno: parts[4] ? +parts[4] : undefined,
|
|
92
|
-
};
|
|
93
|
-
}
|
|
94
|
-
else if ((parts = winjs.exec(line))) {
|
|
95
|
-
element = {
|
|
96
|
-
filename: parts[2],
|
|
97
|
-
function: parts[1] || UNKNOWN_FUNCTION,
|
|
98
|
-
lineno: +parts[3],
|
|
99
|
-
colno: parts[4] ? +parts[4] : undefined,
|
|
100
|
-
};
|
|
101
|
-
}
|
|
102
|
-
else if ((parts = gecko.exec(line))) {
|
|
103
|
-
isEval = parts[3] && parts[3].indexOf(' > eval') > -1;
|
|
104
|
-
if (isEval && (submatch = geckoEval.exec(parts[3]))) {
|
|
105
|
-
// throw out eval line/column and use top-most line number
|
|
106
|
-
parts[1] = parts[1] || "eval";
|
|
107
|
-
parts[3] = submatch[1];
|
|
108
|
-
parts[4] = submatch[2];
|
|
109
|
-
parts[5] = ''; // no column when eval
|
|
110
|
-
}
|
|
111
|
-
var filename = parts[3];
|
|
112
|
-
var func = parts[1] || UNKNOWN_FUNCTION;
|
|
113
|
-
_b = __read(extractSafariExtensionDetails(func, filename), 2), func = _b[0], filename = _b[1];
|
|
114
|
-
element = {
|
|
115
|
-
filename: filename,
|
|
116
|
-
function: func,
|
|
117
|
-
lineno: parts[4] ? +parts[4] : undefined,
|
|
118
|
-
colno: parts[5] ? +parts[5] : undefined,
|
|
119
|
-
};
|
|
120
|
-
}
|
|
121
|
-
else {
|
|
122
|
-
continue;
|
|
123
|
-
}
|
|
124
|
-
frames.push(element);
|
|
125
|
-
}
|
|
126
|
-
}
|
|
127
|
-
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
128
|
-
finally {
|
|
129
|
-
try {
|
|
130
|
-
if (lines_1_1 && !lines_1_1.done && (_a = lines_1.return)) _a.call(lines_1);
|
|
131
|
-
}
|
|
132
|
-
finally { if (e_1) throw e_1.error; }
|
|
133
|
-
}
|
|
134
|
-
return frames;
|
|
135
|
-
}
|
|
136
|
-
/**
|
|
137
|
-
* Safari web extensions, starting version unknown, can produce "frames-only" stacktraces.
|
|
138
|
-
* What it means, is that instead of format like:
|
|
139
|
-
*
|
|
140
|
-
* Error: wat
|
|
141
|
-
* at function@url:row:col
|
|
142
|
-
* at function@url:row:col
|
|
143
|
-
* at function@url:row:col
|
|
144
|
-
*
|
|
145
|
-
* it produces something like:
|
|
146
|
-
*
|
|
147
|
-
* function@url:row:col
|
|
148
|
-
* function@url:row:col
|
|
149
|
-
* function@url:row:col
|
|
150
|
-
*
|
|
151
|
-
* Because of that, it won't be captured by `chrome` RegExp and will fall into `Gecko` branch.
|
|
152
|
-
* This function is extracted so that we can use it in both places without duplicating the logic.
|
|
153
|
-
* Unfortunatelly "just" changing RegExp is too complicated now and making it pass all tests
|
|
154
|
-
* and fix this case seems like an impossible, or at least way too time-consuming task.
|
|
155
|
-
*/
|
|
156
|
-
var extractSafariExtensionDetails = function (func, filename) {
|
|
157
|
-
var isSafariExtension = func.indexOf('safari-extension') !== -1;
|
|
158
|
-
var isSafariWebExtension = func.indexOf('safari-web-extension') !== -1;
|
|
159
|
-
return isSafariExtension || isSafariWebExtension
|
|
160
|
-
? [
|
|
161
|
-
func.indexOf('@') !== -1 ? func.split('@')[0] : UNKNOWN_FUNCTION,
|
|
162
|
-
isSafariExtension ? "safari-extension:" + filename : "safari-web-extension:" + filename,
|
|
163
|
-
]
|
|
164
|
-
: [func, filename];
|
|
165
|
-
};
|
|
166
|
-
/**
|
|
167
|
-
* There are cases where stacktrace.message is an Event object
|
|
168
|
-
* https://github.com/getsentry/sentry-javascript/issues/1949
|
|
169
|
-
* In this specific case we try to extract stacktrace.message.error.message
|
|
170
|
-
*/
|
|
171
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
172
|
-
function extractMessage(ex) {
|
|
173
|
-
var message = ex && ex.message;
|
|
174
|
-
if (!message) {
|
|
175
|
-
return 'No error message';
|
|
176
|
-
}
|
|
177
|
-
if (message.error && typeof message.error.message === 'string') {
|
|
178
|
-
return message.error.message;
|
|
179
|
-
}
|
|
180
|
-
return message;
|
|
181
|
-
}
|
|
182
|
-
//# sourceMappingURL=tracekit.js.map
|
package/esm/tracekit.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"tracekit.js","sourceRoot":"","sources":["../src/tracekit.ts"],"names":[],"mappings":"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","sourcesContent":["import { StackFrame } from '@sentry/types';\n\n/**\n * This was originally forked from https://github.com/occ/TraceKit, but has since been\n * largely modified and is now maintained as part of Sentry JS SDK.\n */\n\n/* eslint-disable @typescript-eslint/no-unsafe-member-access, max-lines */\n\n/**\n * An object representing a JavaScript stack trace.\n * {Object} StackTrace\n * {string} name The name of the thrown exception.\n * {string} message The exception error message.\n * {TraceKit.StackFrame[]} stack An array of stack frames.\n */\nexport interface StackTrace {\n name: string;\n message: string;\n stack: StackFrame[];\n}\n\n// global reference to slice\nconst UNKNOWN_FUNCTION = '?';\n\n// Chromium based browsers: Chrome, Brave, new Opera, new Edge\nconst chrome =\n /^\\s*at (?:(.*?) ?\\((?:address at )?)?((?:file|https?|blob|chrome-extension|address|native|eval|webpack|<anonymous>|[-a-z]+:|.*bundle|\\/).*?)(?::(\\d+))?(?::(\\d+))?\\)?\\s*$/i;\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 gecko =\n /^\\s*(.*?)(?:\\((.*?)\\))?(?:^|@)?((?:file|https?|blob|chrome|webpack|resource|moz-extension|capacitor).*?:\\/.*?|\\[native code\\]|[^@]*(?:bundle|\\d+\\.js)|\\/[\\w\\-. /=]+)(?::(\\d+))?(?::(\\d+))?\\s*$/i;\nconst winjs =\n /^\\s*at (?:((?:\\[object object\\])?.+) )?\\(?((?:file|ms-appx|https?|webpack|blob):.*?):(\\d+)(?::(\\d+))?\\)?\\s*$/i;\nconst geckoEval = /(\\S+) line (\\d+)(?: > eval line \\d+)* > eval/i;\nconst chromeEval = /\\((\\S*)(?::(\\d+))(?::(\\d+))\\)/;\n// Based on our own mapping pattern - https://github.com/getsentry/sentry/blob/9f08305e09866c8bd6d0c24f5b0aabdd7dd6c59c/src/sentry/lang/javascript/errormapping.py#L83-L108\nconst reactMinifiedRegexp = /Minified React error #\\d+;/i;\nconst opera10Regex = / line (\\d+).*script (?:in )?(\\S+)(?:: in function (\\S+))?$/i;\nconst opera11Regex =\n / line (\\d+), column (\\d+)\\s*(?:in (?:<anonymous function: ([^>]+)>|([^)]+))\\(.*\\))? in (.*):\\s*$/i;\n\n/** JSDoc */\nexport function computeStackTrace(ex: Error & { framesToPop?: number; stacktrace?: string }): StackTrace {\n let frames: StackFrame[] = [];\n let popSize = 0;\n\n if (ex) {\n if (typeof ex.framesToPop === 'number') {\n popSize = ex.framesToPop;\n } else if (reactMinifiedRegexp.test(ex.message)) {\n popSize = 1;\n }\n }\n\n try {\n // Access and store the stacktrace property before doing ANYTHING\n // else to it because Opera is not very good at providing it\n // reliably in other circumstances.\n const stacktrace = ex.stacktrace || ex.stack || '';\n\n frames = parseFrames(stacktrace);\n } catch (e) {\n // no-empty\n }\n\n if (frames.length && popSize > 0) {\n frames = frames.slice(popSize);\n }\n\n return {\n message: extractMessage(ex),\n name: ex && ex.name,\n stack: frames,\n };\n}\n\n/** JSDoc */\n// eslint-disable-next-line complexity\nfunction parseFrames(stackString: string): StackFrame[] {\n const frames: StackFrame[] = [];\n const lines = stackString.split('\\n');\n let isEval;\n let submatch;\n let parts;\n let element: StackFrame | undefined;\n\n for (const line of lines) {\n if ((parts = opera10Regex.exec(line))) {\n element = {\n filename: parts[2],\n function: parts[3] || UNKNOWN_FUNCTION,\n lineno: +parts[1],\n };\n } else if ((parts = opera11Regex.exec(line))) {\n element = {\n filename: parts[5],\n function: parts[3] || parts[4] || UNKNOWN_FUNCTION,\n lineno: +parts[1],\n colno: +parts[2],\n };\n } else if ((parts = chrome.exec(line))) {\n isEval = parts[2] && parts[2].indexOf('eval') === 0; // start of line\n if (isEval && (submatch = chromeEval.exec(parts[2]))) {\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 // 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 element = {\n filename,\n function: func,\n lineno: parts[3] ? +parts[3] : undefined,\n colno: parts[4] ? +parts[4] : undefined,\n };\n } else if ((parts = winjs.exec(line))) {\n element = {\n filename: parts[2],\n function: parts[1] || UNKNOWN_FUNCTION,\n lineno: +parts[3],\n colno: parts[4] ? +parts[4] : undefined,\n };\n } else if ((parts = gecko.exec(line))) {\n isEval = parts[3] && parts[3].indexOf(' > eval') > -1;\n if (isEval && (submatch = geckoEval.exec(parts[3]))) {\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 let filename = parts[3];\n let func = parts[1] || UNKNOWN_FUNCTION;\n [func, filename] = extractSafariExtensionDetails(func, filename);\n\n element = {\n filename,\n function: func,\n lineno: parts[4] ? +parts[4] : undefined,\n colno: parts[5] ? +parts[5] : undefined,\n };\n } else {\n continue;\n }\n\n frames.push(element);\n }\n\n return frames;\n}\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 * Unfortunatelly \"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] : UNKNOWN_FUNCTION,\n isSafariExtension ? `safari-extension:${filename}` : `safari-web-extension:${filename}`,\n ]\n : [func, filename];\n};\n\n/**\n * There are cases where stacktrace.message is an Event object\n * https://github.com/getsentry/sentry-javascript/issues/1949\n * In this specific case we try to extract stacktrace.message.error.message\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction extractMessage(ex: any): string {\n const message = ex && ex.message;\n if (!message) {\n return 'No error message';\n }\n if (message.error && typeof message.error.message === 'string') {\n return message.error.message;\n }\n return message;\n}\n"]}
|