@sentry/browser 6.17.6 → 6.17.9

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.
Files changed (45) hide show
  1. package/build/bundle.es6.js +270 -429
  2. package/build/bundle.es6.js.map +1 -1
  3. package/build/bundle.es6.min.js +2 -2
  4. package/build/bundle.es6.min.js.map +1 -1
  5. package/build/bundle.js +315 -444
  6. package/build/bundle.js.map +1 -1
  7. package/build/bundle.min.js +2 -2
  8. package/build/bundle.min.js.map +1 -1
  9. package/dist/eventbuilder.d.ts.map +1 -1
  10. package/dist/eventbuilder.js +4 -11
  11. package/dist/eventbuilder.js.map +1 -1
  12. package/dist/integrations/linkederrors.d.ts.map +1 -1
  13. package/dist/integrations/linkederrors.js +1 -3
  14. package/dist/integrations/linkederrors.js.map +1 -1
  15. package/dist/parsers.d.ts +7 -7
  16. package/dist/parsers.d.ts.map +1 -1
  17. package/dist/parsers.js +52 -40
  18. package/dist/parsers.js.map +1 -1
  19. package/dist/stack-parsers.d.ts +7 -0
  20. package/dist/stack-parsers.d.ts.map +1 -0
  21. package/dist/stack-parsers.js +117 -0
  22. package/dist/stack-parsers.js.map +1 -0
  23. package/esm/eventbuilder.d.ts.map +1 -1
  24. package/esm/eventbuilder.js +5 -12
  25. package/esm/eventbuilder.js.map +1 -1
  26. package/esm/integrations/linkederrors.d.ts.map +1 -1
  27. package/esm/integrations/linkederrors.js +2 -4
  28. package/esm/integrations/linkederrors.js.map +1 -1
  29. package/esm/parsers.d.ts +7 -7
  30. package/esm/parsers.d.ts.map +1 -1
  31. package/esm/parsers.js +50 -38
  32. package/esm/parsers.js.map +1 -1
  33. package/esm/stack-parsers.d.ts +7 -0
  34. package/esm/stack-parsers.d.ts.map +1 -0
  35. package/esm/stack-parsers.js +116 -0
  36. package/esm/stack-parsers.js.map +1 -0
  37. package/package.json +4 -10
  38. package/dist/tracekit.d.ts +0 -38
  39. package/dist/tracekit.d.ts.map +0 -1
  40. package/dist/tracekit.js +0 -259
  41. package/dist/tracekit.js.map +0 -1
  42. package/esm/tracekit.d.ts +0 -38
  43. package/esm/tracekit.d.ts.map +0 -1
  44. package/esm/tracekit.js +0 -257
  45. package/esm/tracekit.js.map +0 -1
package/dist/tracekit.js DELETED
@@ -1,259 +0,0 @@
1
- /**
2
- * This was originally forked from https://github.com/occ/TraceKit, but has since been
3
- * largely modified and is now maintained as part of Sentry JS SDK.
4
- */
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- var tslib_1 = require("tslib");
7
- // global reference to slice
8
- var UNKNOWN_FUNCTION = '?';
9
- // Chromium based browsers: Chrome, Brave, new Opera, new Edge
10
- var chrome = /^\s*at (?:(.*?) ?\()?((?:file|https?|blob|chrome-extension|address|native|eval|webpack|<anonymous>|[-a-z]+:|.*bundle|\/).*?)(?::(\d+))?(?::(\d+))?\)?\s*$/i;
11
- // gecko regex: `(?:bundle|\d+\.js)`: `bundle` is for react native, `\d+\.js` also but specifically for ram bundles because it
12
- // generates filenames without a prefix like `file://` the filenames in the stacktrace are just 42.js
13
- // We need this specific case for now because we want no other regex to match.
14
- var gecko = /^\s*(.*?)(?:\((.*?)\))?(?:^|@)?((?:file|https?|blob|chrome|webpack|resource|moz-extension|capacitor).*?:\/.*?|\[native code\]|[^@]*(?:bundle|\d+\.js)|\/[\w\-. /=]+)(?::(\d+))?(?::(\d+))?\s*$/i;
15
- var winjs = /^\s*at (?:((?:\[object object\])?.+) )?\(?((?:file|ms-appx|https?|webpack|blob):.*?):(\d+)(?::(\d+))?\)?\s*$/i;
16
- var geckoEval = /(\S+) line (\d+)(?: > eval line \d+)* > eval/i;
17
- var chromeEval = /\((\S*)(?::(\d+))(?::(\d+))\)/;
18
- // Based on our own mapping pattern - https://github.com/getsentry/sentry/blob/9f08305e09866c8bd6d0c24f5b0aabdd7dd6c59c/src/sentry/lang/javascript/errormapping.py#L83-L108
19
- var reactMinifiedRegexp = /Minified React error #\d+;/i;
20
- /** JSDoc */
21
- // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/explicit-module-boundary-types
22
- function computeStackTrace(ex) {
23
- var stack = null;
24
- var popSize = 0;
25
- if (ex) {
26
- if (typeof ex.framesToPop === 'number') {
27
- popSize = ex.framesToPop;
28
- }
29
- else if (reactMinifiedRegexp.test(ex.message)) {
30
- popSize = 1;
31
- }
32
- }
33
- try {
34
- // This must be tried first because Opera 10 *destroys*
35
- // its stacktrace property if you try to access the stack
36
- // property first!!
37
- stack = computeStackTraceFromStacktraceProp(ex);
38
- if (stack) {
39
- return popFrames(stack, popSize);
40
- }
41
- }
42
- catch (e) {
43
- // no-empty
44
- }
45
- try {
46
- stack = computeStackTraceFromStackProp(ex);
47
- if (stack) {
48
- return popFrames(stack, popSize);
49
- }
50
- }
51
- catch (e) {
52
- // no-empty
53
- }
54
- return {
55
- message: extractMessage(ex),
56
- name: ex && ex.name,
57
- stack: [],
58
- failed: true,
59
- };
60
- }
61
- exports.computeStackTrace = computeStackTrace;
62
- /** JSDoc */
63
- // eslint-disable-next-line @typescript-eslint/no-explicit-any, complexity
64
- function computeStackTraceFromStackProp(ex) {
65
- var _a, _b;
66
- if (!ex || !ex.stack) {
67
- return null;
68
- }
69
- var stack = [];
70
- var lines = ex.stack.split('\n');
71
- var isEval;
72
- var submatch;
73
- var parts;
74
- var element;
75
- for (var i = 0; i < lines.length; ++i) {
76
- if ((parts = chrome.exec(lines[i]))) {
77
- var isNative = parts[2] && parts[2].indexOf('native') === 0; // start of line
78
- isEval = parts[2] && parts[2].indexOf('eval') === 0; // start of line
79
- if (isEval && (submatch = chromeEval.exec(parts[2]))) {
80
- // throw out eval line/column and use top-most line/column number
81
- parts[2] = submatch[1]; // url
82
- parts[3] = submatch[2]; // line
83
- parts[4] = submatch[3]; // column
84
- }
85
- // Arpad: Working with the regexp above is super painful. it is quite a hack, but just stripping the `address at `
86
- // prefix here seems like the quickest solution for now.
87
- var url = parts[2] && parts[2].indexOf('address at ') === 0 ? parts[2].substr('address at '.length) : parts[2];
88
- // Kamil: One more hack won't hurt us right? Understanding and adding more rules on top of these regexps right now
89
- // would be way too time consuming. (TODO: Rewrite whole RegExp to be more readable)
90
- var func = parts[1] || UNKNOWN_FUNCTION;
91
- _a = tslib_1.__read(extractSafariExtensionDetails(func, url), 2), func = _a[0], url = _a[1];
92
- element = {
93
- url: url,
94
- func: func,
95
- args: isNative ? [parts[2]] : [],
96
- line: parts[3] ? +parts[3] : null,
97
- column: parts[4] ? +parts[4] : null,
98
- };
99
- }
100
- else if ((parts = winjs.exec(lines[i]))) {
101
- element = {
102
- url: parts[2],
103
- func: parts[1] || UNKNOWN_FUNCTION,
104
- args: [],
105
- line: +parts[3],
106
- column: parts[4] ? +parts[4] : null,
107
- };
108
- }
109
- else if ((parts = gecko.exec(lines[i]))) {
110
- isEval = parts[3] && parts[3].indexOf(' > eval') > -1;
111
- if (isEval && (submatch = geckoEval.exec(parts[3]))) {
112
- // throw out eval line/column and use top-most line number
113
- parts[1] = parts[1] || "eval";
114
- parts[3] = submatch[1];
115
- parts[4] = submatch[2];
116
- parts[5] = ''; // no column when eval
117
- }
118
- else if (i === 0 && !parts[5] && ex.columnNumber !== void 0) {
119
- // FireFox uses this awesome columnNumber property for its top frame
120
- // Also note, Firefox's column number is 0-based and everything else expects 1-based,
121
- // so adding 1
122
- // NOTE: this hack doesn't work if top-most frame is eval
123
- stack[0].column = ex.columnNumber + 1;
124
- }
125
- var url = parts[3];
126
- var func = parts[1] || UNKNOWN_FUNCTION;
127
- _b = tslib_1.__read(extractSafariExtensionDetails(func, url), 2), func = _b[0], url = _b[1];
128
- element = {
129
- url: url,
130
- func: func,
131
- args: parts[2] ? parts[2].split(',') : [],
132
- line: parts[4] ? +parts[4] : null,
133
- column: parts[5] ? +parts[5] : null,
134
- };
135
- }
136
- else {
137
- continue;
138
- }
139
- if (!element.func && element.line) {
140
- element.func = UNKNOWN_FUNCTION;
141
- }
142
- stack.push(element);
143
- }
144
- if (!stack.length) {
145
- return null;
146
- }
147
- return {
148
- message: extractMessage(ex),
149
- name: ex.name,
150
- stack: stack,
151
- };
152
- }
153
- /** JSDoc */
154
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
155
- function computeStackTraceFromStacktraceProp(ex) {
156
- if (!ex || !ex.stacktrace) {
157
- return null;
158
- }
159
- // Access and store the stacktrace property before doing ANYTHING
160
- // else to it because Opera is not very good at providing it
161
- // reliably in other circumstances.
162
- var stacktrace = ex.stacktrace;
163
- var opera10Regex = / line (\d+).*script (?:in )?(\S+)(?:: in function (\S+))?$/i;
164
- var opera11Regex = / line (\d+), column (\d+)\s*(?:in (?:<anonymous function: ([^>]+)>|([^)]+))\((.*)\))? in (.*):\s*$/i;
165
- var lines = stacktrace.split('\n');
166
- var stack = [];
167
- var parts;
168
- for (var line = 0; line < lines.length; line += 2) {
169
- var element = null;
170
- if ((parts = opera10Regex.exec(lines[line]))) {
171
- element = {
172
- url: parts[2],
173
- func: parts[3],
174
- args: [],
175
- line: +parts[1],
176
- column: null,
177
- };
178
- }
179
- else if ((parts = opera11Regex.exec(lines[line]))) {
180
- element = {
181
- url: parts[6],
182
- func: parts[3] || parts[4],
183
- args: parts[5] ? parts[5].split(',') : [],
184
- line: +parts[1],
185
- column: +parts[2],
186
- };
187
- }
188
- if (element) {
189
- if (!element.func && element.line) {
190
- element.func = UNKNOWN_FUNCTION;
191
- }
192
- stack.push(element);
193
- }
194
- }
195
- if (!stack.length) {
196
- return null;
197
- }
198
- return {
199
- message: extractMessage(ex),
200
- name: ex.name,
201
- stack: stack,
202
- };
203
- }
204
- /**
205
- * Safari web extensions, starting version unknown, can produce "frames-only" stacktraces.
206
- * What it means, is that instead of format like:
207
- *
208
- * Error: wat
209
- * at function@url:row:col
210
- * at function@url:row:col
211
- * at function@url:row:col
212
- *
213
- * it produces something like:
214
- *
215
- * function@url:row:col
216
- * function@url:row:col
217
- * function@url:row:col
218
- *
219
- * Because of that, it won't be captured by `chrome` RegExp and will fall into `Gecko` branch.
220
- * This function is extracted so that we can use it in both places without duplicating the logic.
221
- * Unfortunatelly "just" changing RegExp is too complicated now and making it pass all tests
222
- * and fix this case seems like an impossible, or at least way too time-consuming task.
223
- */
224
- var extractSafariExtensionDetails = function (func, url) {
225
- var isSafariExtension = func.indexOf('safari-extension') !== -1;
226
- var isSafariWebExtension = func.indexOf('safari-web-extension') !== -1;
227
- return isSafariExtension || isSafariWebExtension
228
- ? [
229
- func.indexOf('@') !== -1 ? func.split('@')[0] : UNKNOWN_FUNCTION,
230
- isSafariExtension ? "safari-extension:" + url : "safari-web-extension:" + url,
231
- ]
232
- : [func, url];
233
- };
234
- /** Remove N number of frames from the stack */
235
- function popFrames(stacktrace, popSize) {
236
- try {
237
- return tslib_1.__assign(tslib_1.__assign({}, stacktrace), { stack: stacktrace.stack.slice(popSize) });
238
- }
239
- catch (e) {
240
- return stacktrace;
241
- }
242
- }
243
- /**
244
- * There are cases where stacktrace.message is an Event object
245
- * https://github.com/getsentry/sentry-javascript/issues/1949
246
- * In this specific case we try to extract stacktrace.message.error.message
247
- */
248
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
249
- function extractMessage(ex) {
250
- var message = ex && ex.message;
251
- if (!message) {
252
- return 'No error message';
253
- }
254
- if (message.error && typeof message.error.message === 'string') {
255
- return message.error.message;
256
- }
257
- return message;
258
- }
259
- //# sourceMappingURL=tracekit.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"tracekit.js","sourceRoot":"","sources":["../src/tracekit.ts"],"names":[],"mappings":"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","sourcesContent":["/**\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 single stack frame.\n * {Object} StackFrame\n * {string} url The JavaScript or HTML file URL.\n * {string} func The function name, or empty for anonymous functions (if guessing did not work).\n * {string[]?} args The arguments passed to the function, if known.\n * {number=} line The line number, if known.\n * {number=} column The column number, if known.\n * {string[]} context An array of source code lines; the middle element corresponds to the correct line#.\n */\nexport interface StackFrame {\n url: string;\n func: string;\n args: string[];\n line: number | null;\n column: number | null;\n}\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 mechanism?: string;\n stack: StackFrame[];\n failed?: boolean;\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 (?:(.*?) ?\\()?((?: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;\n\n/** JSDoc */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/explicit-module-boundary-types\nexport function computeStackTrace(ex: any): StackTrace {\n let stack = null;\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 // This must be tried first because Opera 10 *destroys*\n // its stacktrace property if you try to access the stack\n // property first!!\n stack = computeStackTraceFromStacktraceProp(ex);\n if (stack) {\n return popFrames(stack, popSize);\n }\n } catch (e) {\n // no-empty\n }\n\n try {\n stack = computeStackTraceFromStackProp(ex);\n if (stack) {\n return popFrames(stack, popSize);\n }\n } catch (e) {\n // no-empty\n }\n\n return {\n message: extractMessage(ex),\n name: ex && ex.name,\n stack: [],\n failed: true,\n };\n}\n\n/** JSDoc */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any, complexity\nfunction computeStackTraceFromStackProp(ex: any): StackTrace | null {\n if (!ex || !ex.stack) {\n return null;\n }\n\n const stack = [];\n const lines = ex.stack.split('\\n');\n let isEval;\n let submatch;\n let parts;\n let element;\n\n for (let i = 0; i < lines.length; ++i) {\n if ((parts = chrome.exec(lines[i]))) {\n const isNative = parts[2] && parts[2].indexOf('native') === 0; // start of 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 // Arpad: Working with the regexp above is super painful. it is quite a hack, but just stripping the `address at `\n // prefix here seems like the quickest solution for now.\n let url = parts[2] && parts[2].indexOf('address at ') === 0 ? parts[2].substr('address at '.length) : parts[2];\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 let func = parts[1] || UNKNOWN_FUNCTION;\n [func, url] = extractSafariExtensionDetails(func, url);\n\n element = {\n url,\n func,\n args: isNative ? [parts[2]] : [],\n line: parts[3] ? +parts[3] : null,\n column: parts[4] ? +parts[4] : null,\n };\n } else if ((parts = winjs.exec(lines[i]))) {\n element = {\n url: parts[2],\n func: parts[1] || UNKNOWN_FUNCTION,\n args: [],\n line: +parts[3],\n column: parts[4] ? +parts[4] : null,\n };\n } else if ((parts = gecko.exec(lines[i]))) {\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 } else if (i === 0 && !parts[5] && ex.columnNumber !== void 0) {\n // FireFox uses this awesome columnNumber property for its top frame\n // Also note, Firefox's column number is 0-based and everything else expects 1-based,\n // so adding 1\n // NOTE: this hack doesn't work if top-most frame is eval\n stack[0].column = (ex.columnNumber as number) + 1;\n }\n\n let url = parts[3];\n let func = parts[1] || UNKNOWN_FUNCTION;\n [func, url] = extractSafariExtensionDetails(func, url);\n\n element = {\n url,\n func,\n args: parts[2] ? parts[2].split(',') : [],\n line: parts[4] ? +parts[4] : null,\n column: parts[5] ? +parts[5] : null,\n };\n } else {\n continue;\n }\n\n if (!element.func && element.line) {\n element.func = UNKNOWN_FUNCTION;\n }\n\n stack.push(element);\n }\n\n if (!stack.length) {\n return null;\n }\n\n return {\n message: extractMessage(ex),\n name: ex.name,\n stack,\n };\n}\n\n/** JSDoc */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction computeStackTraceFromStacktraceProp(ex: any): StackTrace | null {\n if (!ex || !ex.stacktrace) {\n return null;\n }\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;\n const opera10Regex = / line (\\d+).*script (?:in )?(\\S+)(?:: in function (\\S+))?$/i;\n const opera11Regex =\n / line (\\d+), column (\\d+)\\s*(?:in (?:<anonymous function: ([^>]+)>|([^)]+))\\((.*)\\))? in (.*):\\s*$/i;\n const lines = stacktrace.split('\\n');\n const stack = [];\n let parts;\n\n for (let line = 0; line < lines.length; line += 2) {\n let element = null;\n if ((parts = opera10Regex.exec(lines[line]))) {\n element = {\n url: parts[2],\n func: parts[3],\n args: [],\n line: +parts[1],\n column: null,\n };\n } else if ((parts = opera11Regex.exec(lines[line]))) {\n element = {\n url: parts[6],\n func: parts[3] || parts[4],\n args: parts[5] ? parts[5].split(',') : [],\n line: +parts[1],\n column: +parts[2],\n };\n }\n\n if (element) {\n if (!element.func && element.line) {\n element.func = UNKNOWN_FUNCTION;\n }\n stack.push(element);\n }\n }\n\n if (!stack.length) {\n return null;\n }\n\n return {\n message: extractMessage(ex),\n name: ex.name,\n stack,\n };\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, url: 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:${url}` : `safari-web-extension:${url}`,\n ]\n : [func, url];\n};\n\n/** Remove N number of frames from the stack */\nfunction popFrames(stacktrace: StackTrace, popSize: number): StackTrace {\n try {\n return {\n ...stacktrace,\n stack: stacktrace.stack.slice(popSize),\n };\n } catch (e) {\n return stacktrace;\n }\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,38 +0,0 @@
1
- /**
2
- * This was originally forked from https://github.com/occ/TraceKit, but has since been
3
- * largely modified and is now maintained as part of Sentry JS SDK.
4
- */
5
- /**
6
- * An object representing a single stack frame.
7
- * {Object} StackFrame
8
- * {string} url The JavaScript or HTML file URL.
9
- * {string} func The function name, or empty for anonymous functions (if guessing did not work).
10
- * {string[]?} args The arguments passed to the function, if known.
11
- * {number=} line The line number, if known.
12
- * {number=} column The column number, if known.
13
- * {string[]} context An array of source code lines; the middle element corresponds to the correct line#.
14
- */
15
- export interface StackFrame {
16
- url: string;
17
- func: string;
18
- args: string[];
19
- line: number | null;
20
- column: number | null;
21
- }
22
- /**
23
- * An object representing a JavaScript stack trace.
24
- * {Object} StackTrace
25
- * {string} name The name of the thrown exception.
26
- * {string} message The exception error message.
27
- * {TraceKit.StackFrame[]} stack An array of stack frames.
28
- */
29
- export interface StackTrace {
30
- name: string;
31
- message: string;
32
- mechanism?: string;
33
- stack: StackFrame[];
34
- failed?: boolean;
35
- }
36
- /** JSDoc */
37
- export declare function computeStackTrace(ex: any): StackTrace;
38
- //# sourceMappingURL=tracekit.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"tracekit.d.ts","sourceRoot":"","sources":["../src/tracekit.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH;;;;;;;;;GASG;AACH,MAAM,WAAW,UAAU;IACzB,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;CACvB;AAED;;;;;;GAMG;AACH,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,UAAU,EAAE,CAAC;IACpB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAoBD,YAAY;AAEZ,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,GAAG,GAAG,UAAU,CAuCrD"}
package/esm/tracekit.js DELETED
@@ -1,257 +0,0 @@
1
- /**
2
- * This was originally forked from https://github.com/occ/TraceKit, but has since been
3
- * largely modified and is now maintained as part of Sentry JS SDK.
4
- */
5
- import { __assign, __read } from "tslib";
6
- // global reference to slice
7
- var UNKNOWN_FUNCTION = '?';
8
- // Chromium based browsers: Chrome, Brave, new Opera, new Edge
9
- var chrome = /^\s*at (?:(.*?) ?\()?((?:file|https?|blob|chrome-extension|address|native|eval|webpack|<anonymous>|[-a-z]+:|.*bundle|\/).*?)(?::(\d+))?(?::(\d+))?\)?\s*$/i;
10
- // gecko regex: `(?:bundle|\d+\.js)`: `bundle` is for react native, `\d+\.js` also but specifically for ram bundles because it
11
- // generates filenames without a prefix like `file://` the filenames in the stacktrace are just 42.js
12
- // We need this specific case for now because we want no other regex to match.
13
- var gecko = /^\s*(.*?)(?:\((.*?)\))?(?:^|@)?((?:file|https?|blob|chrome|webpack|resource|moz-extension|capacitor).*?:\/.*?|\[native code\]|[^@]*(?:bundle|\d+\.js)|\/[\w\-. /=]+)(?::(\d+))?(?::(\d+))?\s*$/i;
14
- var winjs = /^\s*at (?:((?:\[object object\])?.+) )?\(?((?:file|ms-appx|https?|webpack|blob):.*?):(\d+)(?::(\d+))?\)?\s*$/i;
15
- var geckoEval = /(\S+) line (\d+)(?: > eval line \d+)* > eval/i;
16
- var chromeEval = /\((\S*)(?::(\d+))(?::(\d+))\)/;
17
- // Based on our own mapping pattern - https://github.com/getsentry/sentry/blob/9f08305e09866c8bd6d0c24f5b0aabdd7dd6c59c/src/sentry/lang/javascript/errormapping.py#L83-L108
18
- var reactMinifiedRegexp = /Minified React error #\d+;/i;
19
- /** JSDoc */
20
- // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/explicit-module-boundary-types
21
- export function computeStackTrace(ex) {
22
- var stack = null;
23
- var popSize = 0;
24
- if (ex) {
25
- if (typeof ex.framesToPop === 'number') {
26
- popSize = ex.framesToPop;
27
- }
28
- else if (reactMinifiedRegexp.test(ex.message)) {
29
- popSize = 1;
30
- }
31
- }
32
- try {
33
- // This must be tried first because Opera 10 *destroys*
34
- // its stacktrace property if you try to access the stack
35
- // property first!!
36
- stack = computeStackTraceFromStacktraceProp(ex);
37
- if (stack) {
38
- return popFrames(stack, popSize);
39
- }
40
- }
41
- catch (e) {
42
- // no-empty
43
- }
44
- try {
45
- stack = computeStackTraceFromStackProp(ex);
46
- if (stack) {
47
- return popFrames(stack, popSize);
48
- }
49
- }
50
- catch (e) {
51
- // no-empty
52
- }
53
- return {
54
- message: extractMessage(ex),
55
- name: ex && ex.name,
56
- stack: [],
57
- failed: true,
58
- };
59
- }
60
- /** JSDoc */
61
- // eslint-disable-next-line @typescript-eslint/no-explicit-any, complexity
62
- function computeStackTraceFromStackProp(ex) {
63
- var _a, _b;
64
- if (!ex || !ex.stack) {
65
- return null;
66
- }
67
- var stack = [];
68
- var lines = ex.stack.split('\n');
69
- var isEval;
70
- var submatch;
71
- var parts;
72
- var element;
73
- for (var i = 0; i < lines.length; ++i) {
74
- if ((parts = chrome.exec(lines[i]))) {
75
- var isNative = parts[2] && parts[2].indexOf('native') === 0; // start of line
76
- isEval = parts[2] && parts[2].indexOf('eval') === 0; // start of line
77
- if (isEval && (submatch = chromeEval.exec(parts[2]))) {
78
- // throw out eval line/column and use top-most line/column number
79
- parts[2] = submatch[1]; // url
80
- parts[3] = submatch[2]; // line
81
- parts[4] = submatch[3]; // column
82
- }
83
- // Arpad: Working with the regexp above is super painful. it is quite a hack, but just stripping the `address at `
84
- // prefix here seems like the quickest solution for now.
85
- var url = parts[2] && parts[2].indexOf('address at ') === 0 ? parts[2].substr('address at '.length) : parts[2];
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 func = parts[1] || UNKNOWN_FUNCTION;
89
- _a = __read(extractSafariExtensionDetails(func, url), 2), func = _a[0], url = _a[1];
90
- element = {
91
- url: url,
92
- func: func,
93
- args: isNative ? [parts[2]] : [],
94
- line: parts[3] ? +parts[3] : null,
95
- column: parts[4] ? +parts[4] : null,
96
- };
97
- }
98
- else if ((parts = winjs.exec(lines[i]))) {
99
- element = {
100
- url: parts[2],
101
- func: parts[1] || UNKNOWN_FUNCTION,
102
- args: [],
103
- line: +parts[3],
104
- column: parts[4] ? +parts[4] : null,
105
- };
106
- }
107
- else if ((parts = gecko.exec(lines[i]))) {
108
- isEval = parts[3] && parts[3].indexOf(' > eval') > -1;
109
- if (isEval && (submatch = geckoEval.exec(parts[3]))) {
110
- // throw out eval line/column and use top-most line number
111
- parts[1] = parts[1] || "eval";
112
- parts[3] = submatch[1];
113
- parts[4] = submatch[2];
114
- parts[5] = ''; // no column when eval
115
- }
116
- else if (i === 0 && !parts[5] && ex.columnNumber !== void 0) {
117
- // FireFox uses this awesome columnNumber property for its top frame
118
- // Also note, Firefox's column number is 0-based and everything else expects 1-based,
119
- // so adding 1
120
- // NOTE: this hack doesn't work if top-most frame is eval
121
- stack[0].column = ex.columnNumber + 1;
122
- }
123
- var url = parts[3];
124
- var func = parts[1] || UNKNOWN_FUNCTION;
125
- _b = __read(extractSafariExtensionDetails(func, url), 2), func = _b[0], url = _b[1];
126
- element = {
127
- url: url,
128
- func: func,
129
- args: parts[2] ? parts[2].split(',') : [],
130
- line: parts[4] ? +parts[4] : null,
131
- column: parts[5] ? +parts[5] : null,
132
- };
133
- }
134
- else {
135
- continue;
136
- }
137
- if (!element.func && element.line) {
138
- element.func = UNKNOWN_FUNCTION;
139
- }
140
- stack.push(element);
141
- }
142
- if (!stack.length) {
143
- return null;
144
- }
145
- return {
146
- message: extractMessage(ex),
147
- name: ex.name,
148
- stack: stack,
149
- };
150
- }
151
- /** JSDoc */
152
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
153
- function computeStackTraceFromStacktraceProp(ex) {
154
- if (!ex || !ex.stacktrace) {
155
- return null;
156
- }
157
- // Access and store the stacktrace property before doing ANYTHING
158
- // else to it because Opera is not very good at providing it
159
- // reliably in other circumstances.
160
- var stacktrace = ex.stacktrace;
161
- var opera10Regex = / line (\d+).*script (?:in )?(\S+)(?:: in function (\S+))?$/i;
162
- var opera11Regex = / line (\d+), column (\d+)\s*(?:in (?:<anonymous function: ([^>]+)>|([^)]+))\((.*)\))? in (.*):\s*$/i;
163
- var lines = stacktrace.split('\n');
164
- var stack = [];
165
- var parts;
166
- for (var line = 0; line < lines.length; line += 2) {
167
- var element = null;
168
- if ((parts = opera10Regex.exec(lines[line]))) {
169
- element = {
170
- url: parts[2],
171
- func: parts[3],
172
- args: [],
173
- line: +parts[1],
174
- column: null,
175
- };
176
- }
177
- else if ((parts = opera11Regex.exec(lines[line]))) {
178
- element = {
179
- url: parts[6],
180
- func: parts[3] || parts[4],
181
- args: parts[5] ? parts[5].split(',') : [],
182
- line: +parts[1],
183
- column: +parts[2],
184
- };
185
- }
186
- if (element) {
187
- if (!element.func && element.line) {
188
- element.func = UNKNOWN_FUNCTION;
189
- }
190
- stack.push(element);
191
- }
192
- }
193
- if (!stack.length) {
194
- return null;
195
- }
196
- return {
197
- message: extractMessage(ex),
198
- name: ex.name,
199
- stack: stack,
200
- };
201
- }
202
- /**
203
- * Safari web extensions, starting version unknown, can produce "frames-only" stacktraces.
204
- * What it means, is that instead of format like:
205
- *
206
- * Error: wat
207
- * at function@url:row:col
208
- * at function@url:row:col
209
- * at function@url:row:col
210
- *
211
- * it produces something like:
212
- *
213
- * function@url:row:col
214
- * function@url:row:col
215
- * function@url:row:col
216
- *
217
- * Because of that, it won't be captured by `chrome` RegExp and will fall into `Gecko` branch.
218
- * This function is extracted so that we can use it in both places without duplicating the logic.
219
- * Unfortunatelly "just" changing RegExp is too complicated now and making it pass all tests
220
- * and fix this case seems like an impossible, or at least way too time-consuming task.
221
- */
222
- var extractSafariExtensionDetails = function (func, url) {
223
- var isSafariExtension = func.indexOf('safari-extension') !== -1;
224
- var isSafariWebExtension = func.indexOf('safari-web-extension') !== -1;
225
- return isSafariExtension || isSafariWebExtension
226
- ? [
227
- func.indexOf('@') !== -1 ? func.split('@')[0] : UNKNOWN_FUNCTION,
228
- isSafariExtension ? "safari-extension:" + url : "safari-web-extension:" + url,
229
- ]
230
- : [func, url];
231
- };
232
- /** Remove N number of frames from the stack */
233
- function popFrames(stacktrace, popSize) {
234
- try {
235
- return __assign(__assign({}, stacktrace), { stack: stacktrace.stack.slice(popSize) });
236
- }
237
- catch (e) {
238
- return stacktrace;
239
- }
240
- }
241
- /**
242
- * There are cases where stacktrace.message is an Event object
243
- * https://github.com/getsentry/sentry-javascript/issues/1949
244
- * In this specific case we try to extract stacktrace.message.error.message
245
- */
246
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
247
- function extractMessage(ex) {
248
- var message = ex && ex.message;
249
- if (!message) {
250
- return 'No error message';
251
- }
252
- if (message.error && typeof message.error.message === 'string') {
253
- return message.error.message;
254
- }
255
- return message;
256
- }
257
- //# sourceMappingURL=tracekit.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"tracekit.js","sourceRoot":"","sources":["../src/tracekit.ts"],"names":[],"mappings":"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","sourcesContent":["/**\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 single stack frame.\n * {Object} StackFrame\n * {string} url The JavaScript or HTML file URL.\n * {string} func The function name, or empty for anonymous functions (if guessing did not work).\n * {string[]?} args The arguments passed to the function, if known.\n * {number=} line The line number, if known.\n * {number=} column The column number, if known.\n * {string[]} context An array of source code lines; the middle element corresponds to the correct line#.\n */\nexport interface StackFrame {\n url: string;\n func: string;\n args: string[];\n line: number | null;\n column: number | null;\n}\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 mechanism?: string;\n stack: StackFrame[];\n failed?: boolean;\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 (?:(.*?) ?\\()?((?: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;\n\n/** JSDoc */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/explicit-module-boundary-types\nexport function computeStackTrace(ex: any): StackTrace {\n let stack = null;\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 // This must be tried first because Opera 10 *destroys*\n // its stacktrace property if you try to access the stack\n // property first!!\n stack = computeStackTraceFromStacktraceProp(ex);\n if (stack) {\n return popFrames(stack, popSize);\n }\n } catch (e) {\n // no-empty\n }\n\n try {\n stack = computeStackTraceFromStackProp(ex);\n if (stack) {\n return popFrames(stack, popSize);\n }\n } catch (e) {\n // no-empty\n }\n\n return {\n message: extractMessage(ex),\n name: ex && ex.name,\n stack: [],\n failed: true,\n };\n}\n\n/** JSDoc */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any, complexity\nfunction computeStackTraceFromStackProp(ex: any): StackTrace | null {\n if (!ex || !ex.stack) {\n return null;\n }\n\n const stack = [];\n const lines = ex.stack.split('\\n');\n let isEval;\n let submatch;\n let parts;\n let element;\n\n for (let i = 0; i < lines.length; ++i) {\n if ((parts = chrome.exec(lines[i]))) {\n const isNative = parts[2] && parts[2].indexOf('native') === 0; // start of 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 // Arpad: Working with the regexp above is super painful. it is quite a hack, but just stripping the `address at `\n // prefix here seems like the quickest solution for now.\n let url = parts[2] && parts[2].indexOf('address at ') === 0 ? parts[2].substr('address at '.length) : parts[2];\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 let func = parts[1] || UNKNOWN_FUNCTION;\n [func, url] = extractSafariExtensionDetails(func, url);\n\n element = {\n url,\n func,\n args: isNative ? [parts[2]] : [],\n line: parts[3] ? +parts[3] : null,\n column: parts[4] ? +parts[4] : null,\n };\n } else if ((parts = winjs.exec(lines[i]))) {\n element = {\n url: parts[2],\n func: parts[1] || UNKNOWN_FUNCTION,\n args: [],\n line: +parts[3],\n column: parts[4] ? +parts[4] : null,\n };\n } else if ((parts = gecko.exec(lines[i]))) {\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 } else if (i === 0 && !parts[5] && ex.columnNumber !== void 0) {\n // FireFox uses this awesome columnNumber property for its top frame\n // Also note, Firefox's column number is 0-based and everything else expects 1-based,\n // so adding 1\n // NOTE: this hack doesn't work if top-most frame is eval\n stack[0].column = (ex.columnNumber as number) + 1;\n }\n\n let url = parts[3];\n let func = parts[1] || UNKNOWN_FUNCTION;\n [func, url] = extractSafariExtensionDetails(func, url);\n\n element = {\n url,\n func,\n args: parts[2] ? parts[2].split(',') : [],\n line: parts[4] ? +parts[4] : null,\n column: parts[5] ? +parts[5] : null,\n };\n } else {\n continue;\n }\n\n if (!element.func && element.line) {\n element.func = UNKNOWN_FUNCTION;\n }\n\n stack.push(element);\n }\n\n if (!stack.length) {\n return null;\n }\n\n return {\n message: extractMessage(ex),\n name: ex.name,\n stack,\n };\n}\n\n/** JSDoc */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction computeStackTraceFromStacktraceProp(ex: any): StackTrace | null {\n if (!ex || !ex.stacktrace) {\n return null;\n }\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;\n const opera10Regex = / line (\\d+).*script (?:in )?(\\S+)(?:: in function (\\S+))?$/i;\n const opera11Regex =\n / line (\\d+), column (\\d+)\\s*(?:in (?:<anonymous function: ([^>]+)>|([^)]+))\\((.*)\\))? in (.*):\\s*$/i;\n const lines = stacktrace.split('\\n');\n const stack = [];\n let parts;\n\n for (let line = 0; line < lines.length; line += 2) {\n let element = null;\n if ((parts = opera10Regex.exec(lines[line]))) {\n element = {\n url: parts[2],\n func: parts[3],\n args: [],\n line: +parts[1],\n column: null,\n };\n } else if ((parts = opera11Regex.exec(lines[line]))) {\n element = {\n url: parts[6],\n func: parts[3] || parts[4],\n args: parts[5] ? parts[5].split(',') : [],\n line: +parts[1],\n column: +parts[2],\n };\n }\n\n if (element) {\n if (!element.func && element.line) {\n element.func = UNKNOWN_FUNCTION;\n }\n stack.push(element);\n }\n }\n\n if (!stack.length) {\n return null;\n }\n\n return {\n message: extractMessage(ex),\n name: ex.name,\n stack,\n };\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, url: 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:${url}` : `safari-web-extension:${url}`,\n ]\n : [func, url];\n};\n\n/** Remove N number of frames from the stack */\nfunction popFrames(stacktrace: StackTrace, popSize: number): StackTrace {\n try {\n return {\n ...stacktrace,\n stack: stacktrace.stack.slice(popSize),\n };\n } catch (e) {\n return stacktrace;\n }\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"]}