@sentry/browser 6.17.7 → 6.17.8-beta.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/dist/parsers.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import { Event, Exception, StackFrame } from '@sentry/types';
2
- import { StackFrame as TraceKitStackFrame, StackTrace as TraceKitStackTrace } from './tracekit';
2
+ import { StackTrace as TraceKitStackTrace } from './tracekit';
3
3
  /**
4
4
  * This function creates an exception from an TraceKitStackTrace
5
5
  * @param stacktrace TraceKitStackTrace that will be converted to an exception
@@ -17,5 +17,5 @@ export declare function eventFromStacktrace(stacktrace: TraceKitStackTrace): Eve
17
17
  /**
18
18
  * @hidden
19
19
  */
20
- export declare function prepareFramesForEvent(stack: TraceKitStackFrame[]): StackFrame[];
20
+ export declare function prepareFramesForEvent(stack: StackFrame[]): StackFrame[];
21
21
  //# sourceMappingURL=parsers.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"parsers.d.ts","sourceRoot":"","sources":["../src/parsers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAG7D,OAAO,EAAqB,UAAU,IAAI,kBAAkB,EAAE,UAAU,IAAI,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAInH;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,UAAU,EAAE,kBAAkB,GAAG,SAAS,CAiBjF;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAClC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAClC,kBAAkB,CAAC,EAAE,KAAK,EAC1B,SAAS,CAAC,EAAE,OAAO,GAClB,KAAK,CA0BP;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,UAAU,EAAE,kBAAkB,GAAG,KAAK,CAQzE;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,kBAAkB,EAAE,GAAG,UAAU,EAAE,CAiC/E"}
1
+ {"version":3,"file":"parsers.d.ts","sourceRoot":"","sources":["../src/parsers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAG7D,OAAO,EAAqB,UAAU,IAAI,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAIjF;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,UAAU,EAAE,kBAAkB,GAAG,SAAS,CAiBjF;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAClC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAClC,kBAAkB,CAAC,EAAE,KAAK,EAC1B,SAAS,CAAC,EAAE,OAAO,GAClB,KAAK,CA0BP;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,UAAU,EAAE,kBAAkB,GAAG,KAAK,CAQzE;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,UAAU,EAAE,CA+BvE"}
package/dist/parsers.js CHANGED
@@ -65,12 +65,12 @@ exports.eventFromStacktrace = eventFromStacktrace;
65
65
  * @hidden
66
66
  */
67
67
  function prepareFramesForEvent(stack) {
68
- if (!stack || !stack.length) {
68
+ if (!stack.length) {
69
69
  return [];
70
70
  }
71
71
  var localStack = stack;
72
- var firstFrameFunction = localStack[0].func || '';
73
- var lastFrameFunction = localStack[localStack.length - 1].func || '';
72
+ var firstFrameFunction = localStack[0].function || '';
73
+ var lastFrameFunction = localStack[localStack.length - 1].function || '';
74
74
  // If stack starts with one of our API calls, remove it (starts, meaning it's the top of the stack - aka last call)
75
75
  if (firstFrameFunction.indexOf('captureMessage') !== -1 || firstFrameFunction.indexOf('captureException') !== -1) {
76
76
  localStack = localStack.slice(1);
@@ -83,11 +83,11 @@ function prepareFramesForEvent(stack) {
83
83
  return localStack
84
84
  .slice(0, STACKTRACE_LIMIT)
85
85
  .map(function (frame) { return ({
86
- colno: frame.column === null ? undefined : frame.column,
87
- filename: frame.url || localStack[0].url,
88
- function: frame.func || '?',
86
+ filename: frame.filename || localStack[0].filename,
87
+ function: frame.function || '?',
88
+ lineno: frame.lineno,
89
+ colno: frame.colno,
89
90
  in_app: true,
90
- lineno: frame.line === null ? undefined : frame.line,
91
91
  }); })
92
92
  .reverse();
93
93
  }
@@ -1 +1 @@
1
- {"version":3,"file":"parsers.js","sourceRoot":"","sources":["../src/parsers.ts"],"names":[],"mappings":"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","sourcesContent":["import { Event, Exception, StackFrame } from '@sentry/types';\nimport { extractExceptionKeysForMessage, isEvent, normalizeToSize } from '@sentry/utils';\n\nimport { computeStackTrace, StackFrame as TraceKitStackFrame, StackTrace as TraceKitStackTrace } from './tracekit';\n\nconst STACKTRACE_LIMIT = 50;\n\n/**\n * This function creates an exception from an TraceKitStackTrace\n * @param stacktrace TraceKitStackTrace that will be converted to an exception\n * @hidden\n */\nexport function exceptionFromStacktrace(stacktrace: TraceKitStackTrace): Exception {\n const frames = prepareFramesForEvent(stacktrace.stack);\n\n const exception: Exception = {\n type: stacktrace.name,\n value: stacktrace.message,\n };\n\n if (frames && frames.length) {\n exception.stacktrace = { frames };\n }\n\n if (exception.type === undefined && exception.value === '') {\n exception.value = 'Unrecoverable error caught';\n }\n\n return exception;\n}\n\n/**\n * @hidden\n */\nexport function eventFromPlainObject(\n exception: Record<string, unknown>,\n syntheticException?: Error,\n rejection?: boolean,\n): Event {\n const event: Event = {\n exception: {\n values: [\n {\n type: isEvent(exception) ? exception.constructor.name : rejection ? 'UnhandledRejection' : 'Error',\n value: `Non-Error ${\n rejection ? 'promise rejection' : 'exception'\n } captured with keys: ${extractExceptionKeysForMessage(exception)}`,\n },\n ],\n },\n extra: {\n __serialized__: normalizeToSize(exception),\n },\n };\n\n if (syntheticException) {\n const stacktrace = computeStackTrace(syntheticException);\n const frames = prepareFramesForEvent(stacktrace.stack);\n event.stacktrace = {\n frames,\n };\n }\n\n return event;\n}\n\n/**\n * @hidden\n */\nexport function eventFromStacktrace(stacktrace: TraceKitStackTrace): Event {\n const exception = exceptionFromStacktrace(stacktrace);\n\n return {\n exception: {\n values: [exception],\n },\n };\n}\n\n/**\n * @hidden\n */\nexport function prepareFramesForEvent(stack: TraceKitStackFrame[]): StackFrame[] {\n if (!stack || !stack.length) {\n return [];\n }\n\n let localStack = stack;\n\n const firstFrameFunction = localStack[0].func || '';\n const lastFrameFunction = localStack[localStack.length - 1].func || '';\n\n // If stack starts with one of our API calls, remove it (starts, meaning it's the top of the stack - aka last call)\n if (firstFrameFunction.indexOf('captureMessage') !== -1 || firstFrameFunction.indexOf('captureException') !== -1) {\n localStack = localStack.slice(1);\n }\n\n // If stack ends with one of our internal API calls, remove it (ends, meaning it's the bottom of the stack - aka top-most call)\n if (lastFrameFunction.indexOf('sentryWrapped') !== -1) {\n localStack = localStack.slice(0, -1);\n }\n\n // The frame where the crash happened, should be the last entry in the array\n return localStack\n .slice(0, STACKTRACE_LIMIT)\n .map(\n (frame: TraceKitStackFrame): StackFrame => ({\n colno: frame.column === null ? undefined : frame.column,\n filename: frame.url || localStack[0].url,\n function: frame.func || '?',\n in_app: true,\n lineno: frame.line === null ? undefined : frame.line,\n }),\n )\n .reverse();\n}\n"]}
1
+ {"version":3,"file":"parsers.js","sourceRoot":"","sources":["../src/parsers.ts"],"names":[],"mappings":"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","sourcesContent":["import { Event, Exception, StackFrame } from '@sentry/types';\nimport { extractExceptionKeysForMessage, isEvent, normalizeToSize } from '@sentry/utils';\n\nimport { computeStackTrace, StackTrace as TraceKitStackTrace } from './tracekit';\n\nconst STACKTRACE_LIMIT = 50;\n\n/**\n * This function creates an exception from an TraceKitStackTrace\n * @param stacktrace TraceKitStackTrace that will be converted to an exception\n * @hidden\n */\nexport function exceptionFromStacktrace(stacktrace: TraceKitStackTrace): Exception {\n const frames = prepareFramesForEvent(stacktrace.stack);\n\n const exception: Exception = {\n type: stacktrace.name,\n value: stacktrace.message,\n };\n\n if (frames && frames.length) {\n exception.stacktrace = { frames };\n }\n\n if (exception.type === undefined && exception.value === '') {\n exception.value = 'Unrecoverable error caught';\n }\n\n return exception;\n}\n\n/**\n * @hidden\n */\nexport function eventFromPlainObject(\n exception: Record<string, unknown>,\n syntheticException?: Error,\n rejection?: boolean,\n): Event {\n const event: Event = {\n exception: {\n values: [\n {\n type: isEvent(exception) ? exception.constructor.name : rejection ? 'UnhandledRejection' : 'Error',\n value: `Non-Error ${\n rejection ? 'promise rejection' : 'exception'\n } captured with keys: ${extractExceptionKeysForMessage(exception)}`,\n },\n ],\n },\n extra: {\n __serialized__: normalizeToSize(exception),\n },\n };\n\n if (syntheticException) {\n const stacktrace = computeStackTrace(syntheticException);\n const frames = prepareFramesForEvent(stacktrace.stack);\n event.stacktrace = {\n frames,\n };\n }\n\n return event;\n}\n\n/**\n * @hidden\n */\nexport function eventFromStacktrace(stacktrace: TraceKitStackTrace): Event {\n const exception = exceptionFromStacktrace(stacktrace);\n\n return {\n exception: {\n values: [exception],\n },\n };\n}\n\n/**\n * @hidden\n */\nexport function prepareFramesForEvent(stack: StackFrame[]): StackFrame[] {\n if (!stack.length) {\n return [];\n }\n\n let localStack = stack;\n\n const firstFrameFunction = localStack[0].function || '';\n const lastFrameFunction = localStack[localStack.length - 1].function || '';\n\n // If stack starts with one of our API calls, remove it (starts, meaning it's the top of the stack - aka last call)\n if (firstFrameFunction.indexOf('captureMessage') !== -1 || firstFrameFunction.indexOf('captureException') !== -1) {\n localStack = localStack.slice(1);\n }\n\n // If stack ends with one of our internal API calls, remove it (ends, meaning it's the bottom of the stack - aka top-most call)\n if (lastFrameFunction.indexOf('sentryWrapped') !== -1) {\n localStack = localStack.slice(0, -1);\n }\n\n // The frame where the crash happened, should be the last entry in the array\n return localStack\n .slice(0, STACKTRACE_LIMIT)\n .map(frame => ({\n filename: frame.filename || localStack[0].filename,\n function: frame.function || '?',\n lineno: frame.lineno,\n colno: frame.colno,\n in_app: true,\n }))\n .reverse();\n}\n"]}
@@ -1,23 +1,8 @@
1
+ import { StackFrame } from '@sentry/types';
1
2
  /**
2
3
  * This was originally forked from https://github.com/occ/TraceKit, but has since been
3
4
  * largely modified and is now maintained as part of Sentry JS SDK.
4
5
  */
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
- line: number | null;
19
- column: number | null;
20
- }
21
6
  /**
22
7
  * An object representing a JavaScript stack trace.
23
8
  * {Object} StackTrace
@@ -28,10 +13,11 @@ export interface StackFrame {
28
13
  export interface StackTrace {
29
14
  name: string;
30
15
  message: string;
31
- mechanism?: string;
32
16
  stack: StackFrame[];
33
- failed?: boolean;
34
17
  }
35
18
  /** JSDoc */
36
- export declare function computeStackTrace(ex: any): StackTrace;
19
+ export declare function computeStackTrace(ex: Error & {
20
+ framesToPop?: number;
21
+ stacktrace?: string;
22
+ }): StackTrace;
37
23
  //# sourceMappingURL=tracekit.d.ts.map
@@ -1 +1 @@
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,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"}
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/dist/tracekit.js CHANGED
@@ -1,7 +1,3 @@
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
1
  Object.defineProperty(exports, "__esModule", { value: true });
6
2
  var tslib_1 = require("tslib");
7
3
  // global reference to slice
@@ -17,10 +13,11 @@ var geckoEval = /(\S+) line (\d+)(?: > eval line \d+)* > eval/i;
17
13
  var chromeEval = /\((\S*)(?::(\d+))(?::(\d+))\)/;
18
14
  // Based on our own mapping pattern - https://github.com/getsentry/sentry/blob/9f08305e09866c8bd6d0c24f5b0aabdd7dd6c59c/src/sentry/lang/javascript/errormapping.py#L83-L108
19
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;
20
18
  /** JSDoc */
21
- // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/explicit-module-boundary-types
22
19
  function computeStackTrace(ex) {
23
- var stack = null;
20
+ var frames = [];
24
21
  var popSize = 0;
25
22
  if (ex) {
26
23
  if (typeof ex.framesToPop === 'number') {
@@ -31,43 +28,31 @@ function computeStackTrace(ex) {
31
28
  }
32
29
  }
33
30
  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
- }
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);
41
36
  }
42
37
  catch (e) {
43
38
  // no-empty
44
39
  }
45
- try {
46
- stack = computeStackTraceFromStackProp(ex);
47
- if (stack) {
48
- return popFrames(stack, popSize);
49
- }
50
- }
51
- catch (e) {
52
- // no-empty
40
+ if (frames.length && popSize > 0) {
41
+ frames = frames.slice(popSize);
53
42
  }
54
43
  return {
55
44
  message: extractMessage(ex),
56
45
  name: ex && ex.name,
57
- stack: [],
58
- failed: true,
46
+ stack: frames,
59
47
  };
60
48
  }
61
49
  exports.computeStackTrace = computeStackTrace;
62
50
  /** JSDoc */
63
- // eslint-disable-next-line @typescript-eslint/no-explicit-any, complexity
64
- function computeStackTraceFromStackProp(ex) {
51
+ // eslint-disable-next-line complexity
52
+ function parseFrames(stackString) {
65
53
  var e_1, _a, _b;
66
- if (!ex || !ex.stack) {
67
- return null;
68
- }
69
- var stack = [];
70
- var lines = ex.stack.split('\n');
54
+ var frames = [];
55
+ var lines = stackString.split('\n');
71
56
  var isEval;
72
57
  var submatch;
73
58
  var parts;
@@ -75,7 +60,22 @@ function computeStackTraceFromStackProp(ex) {
75
60
  try {
76
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()) {
77
62
  var line = lines_1_1.value;
78
- if ((parts = chrome.exec(line))) {
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
79
  isEval = parts[2] && parts[2].indexOf('eval') === 0; // start of line
80
80
  if (isEval && (submatch = chromeEval.exec(parts[2]))) {
81
81
  // throw out eval line/column and use top-most line/column number
@@ -85,20 +85,20 @@ function computeStackTraceFromStackProp(ex) {
85
85
  }
86
86
  // Kamil: One more hack won't hurt us right? Understanding and adding more rules on top of these regexps right now
87
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], url = _c[1];
88
+ var _c = tslib_1.__read(extractSafariExtensionDetails(parts[1] || UNKNOWN_FUNCTION, parts[2]), 2), func = _c[0], filename = _c[1];
89
89
  element = {
90
- url: url,
91
- func: func,
92
- line: parts[3] ? +parts[3] : null,
93
- column: parts[4] ? +parts[4] : null,
90
+ filename: filename,
91
+ function: func,
92
+ lineno: parts[3] ? +parts[3] : undefined,
93
+ colno: parts[4] ? +parts[4] : undefined,
94
94
  };
95
95
  }
96
96
  else if ((parts = winjs.exec(line))) {
97
97
  element = {
98
- url: parts[2],
99
- func: parts[1] || UNKNOWN_FUNCTION,
100
- line: +parts[3],
101
- column: parts[4] ? +parts[4] : null,
98
+ filename: parts[2],
99
+ function: parts[1] || UNKNOWN_FUNCTION,
100
+ lineno: +parts[3],
101
+ colno: parts[4] ? +parts[4] : undefined,
102
102
  };
103
103
  }
104
104
  else if ((parts = gecko.exec(line))) {
@@ -110,20 +110,20 @@ function computeStackTraceFromStackProp(ex) {
110
110
  parts[4] = submatch[2];
111
111
  parts[5] = ''; // no column when eval
112
112
  }
113
- var url = parts[3];
113
+ var filename = parts[3];
114
114
  var func = parts[1] || UNKNOWN_FUNCTION;
115
- _b = tslib_1.__read(extractSafariExtensionDetails(func, url), 2), func = _b[0], url = _b[1];
115
+ _b = tslib_1.__read(extractSafariExtensionDetails(func, filename), 2), func = _b[0], filename = _b[1];
116
116
  element = {
117
- url: url,
118
- func: func,
119
- line: parts[4] ? +parts[4] : null,
120
- column: parts[5] ? +parts[5] : null,
117
+ filename: filename,
118
+ function: func,
119
+ lineno: parts[4] ? +parts[4] : undefined,
120
+ colno: parts[5] ? +parts[5] : undefined,
121
121
  };
122
122
  }
123
123
  else {
124
124
  continue;
125
125
  }
126
- stack.push(element);
126
+ frames.push(element);
127
127
  }
128
128
  }
129
129
  catch (e_1_1) { e_1 = { error: e_1_1 }; }
@@ -133,63 +133,7 @@ function computeStackTraceFromStackProp(ex) {
133
133
  }
134
134
  finally { if (e_1) throw e_1.error; }
135
135
  }
136
- if (!stack.length) {
137
- return null;
138
- }
139
- return {
140
- message: extractMessage(ex),
141
- name: ex.name,
142
- stack: stack,
143
- };
144
- }
145
- /** JSDoc */
146
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
147
- function computeStackTraceFromStacktraceProp(ex) {
148
- if (!ex || !ex.stacktrace) {
149
- return null;
150
- }
151
- // Access and store the stacktrace property before doing ANYTHING
152
- // else to it because Opera is not very good at providing it
153
- // reliably in other circumstances.
154
- var stacktrace = ex.stacktrace;
155
- var opera10Regex = / line (\d+).*script (?:in )?(\S+)(?:: in function (\S+))?$/i;
156
- var opera11Regex = / line (\d+), column (\d+)\s*(?:in (?:<anonymous function: ([^>]+)>|([^)]+))\(.*\))? in (.*):\s*$/i;
157
- var lines = stacktrace.split('\n');
158
- var stack = [];
159
- var parts;
160
- for (var line = 0; line < lines.length; line += 2) {
161
- var element = null;
162
- if ((parts = opera10Regex.exec(lines[line]))) {
163
- element = {
164
- url: parts[2],
165
- func: parts[3],
166
- line: +parts[1],
167
- column: null,
168
- };
169
- }
170
- else if ((parts = opera11Regex.exec(lines[line]))) {
171
- element = {
172
- url: parts[5],
173
- func: parts[3] || parts[4],
174
- line: +parts[1],
175
- column: +parts[2],
176
- };
177
- }
178
- if (element) {
179
- if (!element.func && element.line) {
180
- element.func = UNKNOWN_FUNCTION;
181
- }
182
- stack.push(element);
183
- }
184
- }
185
- if (!stack.length) {
186
- return null;
187
- }
188
- return {
189
- message: extractMessage(ex),
190
- name: ex.name,
191
- stack: stack,
192
- };
136
+ return frames;
193
137
  }
194
138
  /**
195
139
  * Safari web extensions, starting version unknown, can produce "frames-only" stacktraces.
@@ -211,25 +155,16 @@ function computeStackTraceFromStacktraceProp(ex) {
211
155
  * Unfortunatelly "just" changing RegExp is too complicated now and making it pass all tests
212
156
  * and fix this case seems like an impossible, or at least way too time-consuming task.
213
157
  */
214
- var extractSafariExtensionDetails = function (func, url) {
158
+ var extractSafariExtensionDetails = function (func, filename) {
215
159
  var isSafariExtension = func.indexOf('safari-extension') !== -1;
216
160
  var isSafariWebExtension = func.indexOf('safari-web-extension') !== -1;
217
161
  return isSafariExtension || isSafariWebExtension
218
162
  ? [
219
163
  func.indexOf('@') !== -1 ? func.split('@')[0] : UNKNOWN_FUNCTION,
220
- isSafariExtension ? "safari-extension:" + url : "safari-web-extension:" + url,
164
+ isSafariExtension ? "safari-extension:" + filename : "safari-web-extension:" + filename,
221
165
  ]
222
- : [func, url];
166
+ : [func, filename];
223
167
  };
224
- /** Remove N number of frames from the stack */
225
- function popFrames(stacktrace, popSize) {
226
- try {
227
- return tslib_1.__assign(tslib_1.__assign({}, stacktrace), { stack: stacktrace.stack.slice(popSize) });
228
- }
229
- catch (e) {
230
- return stacktrace;
231
- }
232
- }
233
168
  /**
234
169
  * There are cases where stacktrace.message is an Event object
235
170
  * https://github.com/getsentry/sentry-javascript/issues/1949
@@ -1 +1 @@
1
- {"version":3,"file":"tracekit.js","sourceRoot":"","sources":["../src/tracekit.ts"],"names":[],"mappings":"AAAA;;;GAGG;;;AAoCH,4BAA4B;AAC5B,IAAM,gBAAgB,GAAG,GAAG,CAAC;AAE7B,8DAA8D;AAC9D,IAAM,MAAM,GACV,4KAA4K,CAAC;AAC/K,8HAA8H;AAC9H,qGAAqG;AACrG,8EAA8E;AAC9E,IAAM,KAAK,GACT,iMAAiM,CAAC;AACpM,IAAM,KAAK,GACT,+GAA+G,CAAC;AAClH,IAAM,SAAS,GAAG,+CAA+C,CAAC;AAClE,IAAM,UAAU,GAAG,+BAA+B,CAAC;AACnD,2KAA2K;AAC3K,IAAM,mBAAmB,GAAG,6BAA6B,CAAC;AAE1D,YAAY;AACZ,iHAAiH;AACjH,SAAgB,iBAAiB,CAAC,EAAO;IACvC,IAAI,KAAK,GAAG,IAAI,CAAC;IACjB,IAAI,OAAO,GAAG,CAAC,CAAC;IAEhB,IAAI,EAAE,EAAE;QACN,IAAI,OAAO,EAAE,CAAC,WAAW,KAAK,QAAQ,EAAE;YACtC,OAAO,GAAG,EAAE,CAAC,WAAW,CAAC;SAC1B;aAAM,IAAI,mBAAmB,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE;YAC/C,OAAO,GAAG,CAAC,CAAC;SACb;KACF;IAED,IAAI;QACF,uDAAuD;QACvD,yDAAyD;QACzD,mBAAmB;QACnB,KAAK,GAAG,mCAAmC,CAAC,EAAE,CAAC,CAAC;QAChD,IAAI,KAAK,EAAE;YACT,OAAO,SAAS,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;SAClC;KACF;IAAC,OAAO,CAAC,EAAE;QACV,WAAW;KACZ;IAED,IAAI;QACF,KAAK,GAAG,8BAA8B,CAAC,EAAE,CAAC,CAAC;QAC3C,IAAI,KAAK,EAAE;YACT,OAAO,SAAS,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;SAClC;KACF;IAAC,OAAO,CAAC,EAAE;QACV,WAAW;KACZ;IAED,OAAO;QACL,OAAO,EAAE,cAAc,CAAC,EAAE,CAAC;QAC3B,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC,IAAI;QACnB,KAAK,EAAE,EAAE;QACT,MAAM,EAAE,IAAI;KACb,CAAC;AACJ,CAAC;AAvCD,8CAuCC;AAED,YAAY;AACZ,0EAA0E;AAC1E,SAAS,8BAA8B,CAAC,EAAO;;IAC7C,IAAI,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE;QACpB,OAAO,IAAI,CAAC;KACb;IAED,IAAM,KAAK,GAAG,EAAE,CAAC;IACjB,IAAM,KAAK,GAAG,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACnC,IAAI,MAAM,CAAC;IACX,IAAI,QAAQ,CAAC;IACb,IAAI,KAAK,CAAC;IACV,IAAI,OAAO,CAAC;;QAEZ,KAAmB,IAAA,UAAA,iBAAA,KAAK,CAAA,4BAAA,+CAAE;YAArB,IAAM,IAAI,kBAAA;YACb,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE;gBAC/B,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,gBAAgB;gBACrE,IAAI,MAAM,IAAI,CAAC,QAAQ,GAAG,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE;oBACpD,iEAAiE;oBACjE,KAAK,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM;oBAC9B,KAAK,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO;oBAC/B,KAAK,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS;iBAClC;gBAED,kHAAkH;gBAClH,oFAAoF;gBAC9E,IAAA,6FAAmF,EAAlF,YAAI,EAAE,WAA4E,CAAC;gBAE1F,OAAO,GAAG;oBACR,GAAG,KAAA;oBACH,IAAI,MAAA;oBACJ,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI;oBACjC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI;iBACpC,CAAC;aACH;iBAAM,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE;gBACrC,OAAO,GAAG;oBACR,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC;oBACb,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,IAAI,gBAAgB;oBAClC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;oBACf,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI;iBACpC,CAAC;aACH;iBAAM,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE;gBACrC,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;gBACtD,IAAI,MAAM,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE;oBACnD,0DAA0D;oBAC1D,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC;oBAC9B,KAAK,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;oBACvB,KAAK,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;oBACvB,KAAK,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,sBAAsB;iBACtC;gBAED,IAAI,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;gBACnB,IAAI,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,gBAAgB,CAAC;gBACxC,gEAAsD,EAArD,YAAI,EAAE,WAAG,CAA6C;gBAEvD,OAAO,GAAG;oBACR,GAAG,KAAA;oBACH,IAAI,MAAA;oBACJ,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI;oBACjC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI;iBACpC,CAAC;aACH;iBAAM;gBACL,SAAS;aACV;YAED,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;SACrB;;;;;;;;;IAED,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;QACjB,OAAO,IAAI,CAAC;KACb;IAED,OAAO;QACL,OAAO,EAAE,cAAc,CAAC,EAAE,CAAC;QAC3B,IAAI,EAAE,EAAE,CAAC,IAAI;QACb,KAAK,OAAA;KACN,CAAC;AACJ,CAAC;AAED,YAAY;AACZ,8DAA8D;AAC9D,SAAS,mCAAmC,CAAC,EAAO;IAClD,IAAI,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,UAAU,EAAE;QACzB,OAAO,IAAI,CAAC;KACb;IACD,iEAAiE;IACjE,4DAA4D;IAC5D,mCAAmC;IACnC,IAAM,UAAU,GAAG,EAAE,CAAC,UAAU,CAAC;IACjC,IAAM,YAAY,GAAG,6DAA6D,CAAC;IACnF,IAAM,YAAY,GAChB,mGAAmG,CAAC;IACtG,IAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACrC,IAAM,KAAK,GAAG,EAAE,CAAC;IACjB,IAAI,KAAK,CAAC;IAEV,KAAK,IAAI,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,KAAK,CAAC,MAAM,EAAE,IAAI,IAAI,CAAC,EAAE;QACjD,IAAI,OAAO,GAAG,IAAI,CAAC;QACnB,IAAI,CAAC,KAAK,GAAG,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE;YAC5C,OAAO,GAAG;gBACR,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC;gBACb,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;gBACd,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;gBACf,MAAM,EAAE,IAAI;aACb,CAAC;SACH;aAAM,IAAI,CAAC,KAAK,GAAG,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE;YACnD,OAAO,GAAG;gBACR,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC;gBACb,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC;gBAC1B,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;gBACf,MAAM,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;aAClB,CAAC;SACH;QAED,IAAI,OAAO,EAAE;YACX,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,IAAI,EAAE;gBACjC,OAAO,CAAC,IAAI,GAAG,gBAAgB,CAAC;aACjC;YACD,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;SACrB;KACF;IAED,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;QACjB,OAAO,IAAI,CAAC;KACb;IAED,OAAO;QACL,OAAO,EAAE,cAAc,CAAC,EAAE,CAAC;QAC3B,IAAI,EAAE,EAAE,CAAC,IAAI;QACb,KAAK,OAAA;KACN,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,IAAM,6BAA6B,GAAG,UAAC,IAAY,EAAE,GAAW;IAC9D,IAAM,iBAAiB,GAAG,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC,CAAC;IAClE,IAAM,oBAAoB,GAAG,IAAI,CAAC,OAAO,CAAC,sBAAsB,CAAC,KAAK,CAAC,CAAC,CAAC;IAEzE,OAAO,iBAAiB,IAAI,oBAAoB;QAC9C,CAAC,CAAC;YACE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,gBAAgB;YAChE,iBAAiB,CAAC,CAAC,CAAC,sBAAoB,GAAK,CAAC,CAAC,CAAC,0BAAwB,GAAK;SAC9E;QACH,CAAC,CAAC,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;AAClB,CAAC,CAAC;AAEF,+CAA+C;AAC/C,SAAS,SAAS,CAAC,UAAsB,EAAE,OAAe;IACxD,IAAI;QACF,6CACK,UAAU,KACb,KAAK,EAAE,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,IACtC;KACH;IAAC,OAAO,CAAC,EAAE;QACV,OAAO,UAAU,CAAC;KACnB;AACH,CAAC;AAED;;;;GAIG;AACH,8DAA8D;AAC9D,SAAS,cAAc,CAAC,EAAO;IAC7B,IAAM,OAAO,GAAG,EAAE,IAAI,EAAE,CAAC,OAAO,CAAC;IACjC,IAAI,CAAC,OAAO,EAAE;QACZ,OAAO,kBAAkB,CAAC;KAC3B;IACD,IAAI,OAAO,CAAC,KAAK,IAAI,OAAO,OAAO,CAAC,KAAK,CAAC,OAAO,KAAK,QAAQ,EAAE;QAC9D,OAAO,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC;KAC9B;IACD,OAAO,OAAO,CAAC;AACjB,CAAC","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 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 (?:(.*?) ?\\((?: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;\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 (const line of lines) {\n 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, url] = extractSafariExtensionDetails(parts[1] || UNKNOWN_FUNCTION, parts[2]);\n\n element = {\n url,\n func,\n line: parts[3] ? +parts[3] : null,\n column: parts[4] ? +parts[4] : null,\n };\n } else if ((parts = winjs.exec(line))) {\n element = {\n url: parts[2],\n func: parts[1] || UNKNOWN_FUNCTION,\n line: +parts[3],\n column: parts[4] ? +parts[4] : null,\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 url = parts[3];\n let func = parts[1] || UNKNOWN_FUNCTION;\n [func, url] = extractSafariExtensionDetails(func, url);\n\n element = {\n url,\n func,\n line: parts[4] ? +parts[4] : null,\n column: parts[5] ? +parts[5] : null,\n };\n } else {\n continue;\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 line: +parts[1],\n column: null,\n };\n } else if ((parts = opera11Regex.exec(lines[line]))) {\n element = {\n url: parts[5],\n func: parts[3] || parts[4],\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"]}
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/parsers.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import { Event, Exception, StackFrame } from '@sentry/types';
2
- import { StackFrame as TraceKitStackFrame, StackTrace as TraceKitStackTrace } from './tracekit';
2
+ import { StackTrace as TraceKitStackTrace } from './tracekit';
3
3
  /**
4
4
  * This function creates an exception from an TraceKitStackTrace
5
5
  * @param stacktrace TraceKitStackTrace that will be converted to an exception
@@ -17,5 +17,5 @@ export declare function eventFromStacktrace(stacktrace: TraceKitStackTrace): Eve
17
17
  /**
18
18
  * @hidden
19
19
  */
20
- export declare function prepareFramesForEvent(stack: TraceKitStackFrame[]): StackFrame[];
20
+ export declare function prepareFramesForEvent(stack: StackFrame[]): StackFrame[];
21
21
  //# sourceMappingURL=parsers.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"parsers.d.ts","sourceRoot":"","sources":["../src/parsers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAG7D,OAAO,EAAqB,UAAU,IAAI,kBAAkB,EAAE,UAAU,IAAI,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAInH;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,UAAU,EAAE,kBAAkB,GAAG,SAAS,CAiBjF;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAClC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAClC,kBAAkB,CAAC,EAAE,KAAK,EAC1B,SAAS,CAAC,EAAE,OAAO,GAClB,KAAK,CA0BP;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,UAAU,EAAE,kBAAkB,GAAG,KAAK,CAQzE;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,kBAAkB,EAAE,GAAG,UAAU,EAAE,CAiC/E"}
1
+ {"version":3,"file":"parsers.d.ts","sourceRoot":"","sources":["../src/parsers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAG7D,OAAO,EAAqB,UAAU,IAAI,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAIjF;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,UAAU,EAAE,kBAAkB,GAAG,SAAS,CAiBjF;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAClC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAClC,kBAAkB,CAAC,EAAE,KAAK,EAC1B,SAAS,CAAC,EAAE,OAAO,GAClB,KAAK,CA0BP;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,UAAU,EAAE,kBAAkB,GAAG,KAAK,CAQzE;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,UAAU,EAAE,CA+BvE"}
package/esm/parsers.js CHANGED
@@ -61,12 +61,12 @@ export function eventFromStacktrace(stacktrace) {
61
61
  * @hidden
62
62
  */
63
63
  export function prepareFramesForEvent(stack) {
64
- if (!stack || !stack.length) {
64
+ if (!stack.length) {
65
65
  return [];
66
66
  }
67
67
  var localStack = stack;
68
- var firstFrameFunction = localStack[0].func || '';
69
- var lastFrameFunction = localStack[localStack.length - 1].func || '';
68
+ var firstFrameFunction = localStack[0].function || '';
69
+ var lastFrameFunction = localStack[localStack.length - 1].function || '';
70
70
  // If stack starts with one of our API calls, remove it (starts, meaning it's the top of the stack - aka last call)
71
71
  if (firstFrameFunction.indexOf('captureMessage') !== -1 || firstFrameFunction.indexOf('captureException') !== -1) {
72
72
  localStack = localStack.slice(1);
@@ -79,11 +79,11 @@ export function prepareFramesForEvent(stack) {
79
79
  return localStack
80
80
  .slice(0, STACKTRACE_LIMIT)
81
81
  .map(function (frame) { return ({
82
- colno: frame.column === null ? undefined : frame.column,
83
- filename: frame.url || localStack[0].url,
84
- function: frame.func || '?',
82
+ filename: frame.filename || localStack[0].filename,
83
+ function: frame.function || '?',
84
+ lineno: frame.lineno,
85
+ colno: frame.colno,
85
86
  in_app: true,
86
- lineno: frame.line === null ? undefined : frame.line,
87
87
  }); })
88
88
  .reverse();
89
89
  }
@@ -1 +1 @@
1
- {"version":3,"file":"parsers.js","sourceRoot":"","sources":["../src/parsers.ts"],"names":[],"mappings":"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","sourcesContent":["import { Event, Exception, StackFrame } from '@sentry/types';\nimport { extractExceptionKeysForMessage, isEvent, normalizeToSize } from '@sentry/utils';\n\nimport { computeStackTrace, StackFrame as TraceKitStackFrame, StackTrace as TraceKitStackTrace } from './tracekit';\n\nconst STACKTRACE_LIMIT = 50;\n\n/**\n * This function creates an exception from an TraceKitStackTrace\n * @param stacktrace TraceKitStackTrace that will be converted to an exception\n * @hidden\n */\nexport function exceptionFromStacktrace(stacktrace: TraceKitStackTrace): Exception {\n const frames = prepareFramesForEvent(stacktrace.stack);\n\n const exception: Exception = {\n type: stacktrace.name,\n value: stacktrace.message,\n };\n\n if (frames && frames.length) {\n exception.stacktrace = { frames };\n }\n\n if (exception.type === undefined && exception.value === '') {\n exception.value = 'Unrecoverable error caught';\n }\n\n return exception;\n}\n\n/**\n * @hidden\n */\nexport function eventFromPlainObject(\n exception: Record<string, unknown>,\n syntheticException?: Error,\n rejection?: boolean,\n): Event {\n const event: Event = {\n exception: {\n values: [\n {\n type: isEvent(exception) ? exception.constructor.name : rejection ? 'UnhandledRejection' : 'Error',\n value: `Non-Error ${\n rejection ? 'promise rejection' : 'exception'\n } captured with keys: ${extractExceptionKeysForMessage(exception)}`,\n },\n ],\n },\n extra: {\n __serialized__: normalizeToSize(exception),\n },\n };\n\n if (syntheticException) {\n const stacktrace = computeStackTrace(syntheticException);\n const frames = prepareFramesForEvent(stacktrace.stack);\n event.stacktrace = {\n frames,\n };\n }\n\n return event;\n}\n\n/**\n * @hidden\n */\nexport function eventFromStacktrace(stacktrace: TraceKitStackTrace): Event {\n const exception = exceptionFromStacktrace(stacktrace);\n\n return {\n exception: {\n values: [exception],\n },\n };\n}\n\n/**\n * @hidden\n */\nexport function prepareFramesForEvent(stack: TraceKitStackFrame[]): StackFrame[] {\n if (!stack || !stack.length) {\n return [];\n }\n\n let localStack = stack;\n\n const firstFrameFunction = localStack[0].func || '';\n const lastFrameFunction = localStack[localStack.length - 1].func || '';\n\n // If stack starts with one of our API calls, remove it (starts, meaning it's the top of the stack - aka last call)\n if (firstFrameFunction.indexOf('captureMessage') !== -1 || firstFrameFunction.indexOf('captureException') !== -1) {\n localStack = localStack.slice(1);\n }\n\n // If stack ends with one of our internal API calls, remove it (ends, meaning it's the bottom of the stack - aka top-most call)\n if (lastFrameFunction.indexOf('sentryWrapped') !== -1) {\n localStack = localStack.slice(0, -1);\n }\n\n // The frame where the crash happened, should be the last entry in the array\n return localStack\n .slice(0, STACKTRACE_LIMIT)\n .map(\n (frame: TraceKitStackFrame): StackFrame => ({\n colno: frame.column === null ? undefined : frame.column,\n filename: frame.url || localStack[0].url,\n function: frame.func || '?',\n in_app: true,\n lineno: frame.line === null ? undefined : frame.line,\n }),\n )\n .reverse();\n}\n"]}
1
+ {"version":3,"file":"parsers.js","sourceRoot":"","sources":["../src/parsers.ts"],"names":[],"mappings":"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","sourcesContent":["import { Event, Exception, StackFrame } from '@sentry/types';\nimport { extractExceptionKeysForMessage, isEvent, normalizeToSize } from '@sentry/utils';\n\nimport { computeStackTrace, StackTrace as TraceKitStackTrace } from './tracekit';\n\nconst STACKTRACE_LIMIT = 50;\n\n/**\n * This function creates an exception from an TraceKitStackTrace\n * @param stacktrace TraceKitStackTrace that will be converted to an exception\n * @hidden\n */\nexport function exceptionFromStacktrace(stacktrace: TraceKitStackTrace): Exception {\n const frames = prepareFramesForEvent(stacktrace.stack);\n\n const exception: Exception = {\n type: stacktrace.name,\n value: stacktrace.message,\n };\n\n if (frames && frames.length) {\n exception.stacktrace = { frames };\n }\n\n if (exception.type === undefined && exception.value === '') {\n exception.value = 'Unrecoverable error caught';\n }\n\n return exception;\n}\n\n/**\n * @hidden\n */\nexport function eventFromPlainObject(\n exception: Record<string, unknown>,\n syntheticException?: Error,\n rejection?: boolean,\n): Event {\n const event: Event = {\n exception: {\n values: [\n {\n type: isEvent(exception) ? exception.constructor.name : rejection ? 'UnhandledRejection' : 'Error',\n value: `Non-Error ${\n rejection ? 'promise rejection' : 'exception'\n } captured with keys: ${extractExceptionKeysForMessage(exception)}`,\n },\n ],\n },\n extra: {\n __serialized__: normalizeToSize(exception),\n },\n };\n\n if (syntheticException) {\n const stacktrace = computeStackTrace(syntheticException);\n const frames = prepareFramesForEvent(stacktrace.stack);\n event.stacktrace = {\n frames,\n };\n }\n\n return event;\n}\n\n/**\n * @hidden\n */\nexport function eventFromStacktrace(stacktrace: TraceKitStackTrace): Event {\n const exception = exceptionFromStacktrace(stacktrace);\n\n return {\n exception: {\n values: [exception],\n },\n };\n}\n\n/**\n * @hidden\n */\nexport function prepareFramesForEvent(stack: StackFrame[]): StackFrame[] {\n if (!stack.length) {\n return [];\n }\n\n let localStack = stack;\n\n const firstFrameFunction = localStack[0].function || '';\n const lastFrameFunction = localStack[localStack.length - 1].function || '';\n\n // If stack starts with one of our API calls, remove it (starts, meaning it's the top of the stack - aka last call)\n if (firstFrameFunction.indexOf('captureMessage') !== -1 || firstFrameFunction.indexOf('captureException') !== -1) {\n localStack = localStack.slice(1);\n }\n\n // If stack ends with one of our internal API calls, remove it (ends, meaning it's the bottom of the stack - aka top-most call)\n if (lastFrameFunction.indexOf('sentryWrapped') !== -1) {\n localStack = localStack.slice(0, -1);\n }\n\n // The frame where the crash happened, should be the last entry in the array\n return localStack\n .slice(0, STACKTRACE_LIMIT)\n .map(frame => ({\n filename: frame.filename || localStack[0].filename,\n function: frame.function || '?',\n lineno: frame.lineno,\n colno: frame.colno,\n in_app: true,\n }))\n .reverse();\n}\n"]}
package/esm/tracekit.d.ts CHANGED
@@ -1,23 +1,8 @@
1
+ import { StackFrame } from '@sentry/types';
1
2
  /**
2
3
  * This was originally forked from https://github.com/occ/TraceKit, but has since been
3
4
  * largely modified and is now maintained as part of Sentry JS SDK.
4
5
  */
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
- line: number | null;
19
- column: number | null;
20
- }
21
6
  /**
22
7
  * An object representing a JavaScript stack trace.
23
8
  * {Object} StackTrace
@@ -28,10 +13,11 @@ export interface StackFrame {
28
13
  export interface StackTrace {
29
14
  name: string;
30
15
  message: string;
31
- mechanism?: string;
32
16
  stack: StackFrame[];
33
- failed?: boolean;
34
17
  }
35
18
  /** JSDoc */
36
- export declare function computeStackTrace(ex: any): StackTrace;
19
+ export declare function computeStackTrace(ex: Error & {
20
+ framesToPop?: number;
21
+ stacktrace?: string;
22
+ }): StackTrace;
37
23
  //# sourceMappingURL=tracekit.d.ts.map
@@ -1 +1 @@
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,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"}
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"}