Skip to content

Commit ec60b2f

Browse files
authored
feat: Parse safari-extension and safari-web-extension errors (#3374)
1 parent 438ed91 commit ec60b2f

File tree

2 files changed

+71
-4
lines changed

2 files changed

+71
-4
lines changed

packages/browser/src/tracekit.ts

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -120,11 +120,24 @@ function computeStackTraceFromStackProp(ex: any): StackTrace | null {
120120
parts[3] = submatch[2]; // line
121121
parts[4] = submatch[3]; // column
122122
}
123+
124+
// Arpad: Working with the regexp above is super painful. it is quite a hack, but just stripping the `address at `
125+
// prefix here seems like the quickest solution for now.
126+
let url = parts[2] && parts[2].indexOf('address at ') === 0 ? parts[2].substr('address at '.length) : parts[2];
127+
128+
// Kamil: One more hack won't hurt us right? Understanding and adding more rules on top of these regexps right now
129+
// would be way too time consuming. (TODO: Rewrite whole RegExp to be more readable)
130+
let func = parts[1] || UNKNOWN_FUNCTION;
131+
const isSafariExtension = func.indexOf('safari-extension') !== -1;
132+
const isSafariWebExtension = func.indexOf('safari-web-extension') !== -1;
133+
if (isSafariExtension || isSafariWebExtension) {
134+
func = func.indexOf('@') !== -1 ? func.split('@')[0] : UNKNOWN_FUNCTION;
135+
url = isSafariExtension ? `safari-extension:${url}` : `safari-web-extension:${url}`;
136+
}
137+
123138
element = {
124-
// working with the regexp above is super painful. it is quite a hack, but just stripping the `address at `
125-
// prefix here seems like the quickest solution for now.
126-
url: parts[2] && parts[2].indexOf('address at ') === 0 ? parts[2].substr('address at '.length) : parts[2],
127-
func: parts[1] || UNKNOWN_FUNCTION,
139+
url,
140+
func,
128141
args: isNative ? [parts[2]] : [],
129142
line: parts[3] ? +parts[3] : null,
130143
column: parts[4] ? +parts[4] : null,

packages/browser/test/unit/tracekit/custom.test.ts

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,60 @@ describe('Tracekit - Custom Tests', () => {
2424
]);
2525
});
2626

27+
it('should parse exceptions for safari-extension', () => {
28+
const SAFARI_EXTENSION_EXCEPTION = {
29+
message: 'wat',
30+
name: 'Error',
31+
stack: `Error: wat
32+
at ClipperError@safari-extension:(//3284871F-A480-4FFC-8BC4-3F362C752446/2665fee0/commons.js:223036:10)
33+
at safari-extension:(//3284871F-A480-4FFC-8BC4-3F362C752446/2665fee0/topee-content.js:3313:26)`,
34+
};
35+
const stacktrace = computeStackTrace(SAFARI_EXTENSION_EXCEPTION);
36+
expect(stacktrace.stack).deep.equal([
37+
{
38+
url: 'safari-extension://3284871F-A480-4FFC-8BC4-3F362C752446/2665fee0/commons.js',
39+
func: 'ClipperError',
40+
args: [],
41+
line: 223036,
42+
column: 10,
43+
},
44+
{
45+
url: 'safari-extension://3284871F-A480-4FFC-8BC4-3F362C752446/2665fee0/topee-content.js',
46+
func: '?',
47+
args: [],
48+
line: 3313,
49+
column: 26,
50+
},
51+
]);
52+
});
53+
54+
it('should parse exceptions for safari-web-extension', () => {
55+
const SAFARI_WEB_EXTENSION_EXCEPTION = {
56+
message: 'wat',
57+
name: 'Error',
58+
stack: `Error: wat
59+
at ClipperError@safari-web-extension:(//3284871F-A480-4FFC-8BC4-3F362C752446/2665fee0/commons.js:223036:10)
60+
at safari-web-extension:(//3284871F-A480-4FFC-8BC4-3F362C752446/2665fee0/topee-content.js:3313:26)`,
61+
};
62+
const stacktrace = computeStackTrace(SAFARI_WEB_EXTENSION_EXCEPTION);
63+
expect(stacktrace.stack).deep.equal([
64+
{
65+
url: 'safari-web-extension://3284871F-A480-4FFC-8BC4-3F362C752446/2665fee0/commons.js',
66+
func: 'ClipperError',
67+
args: [],
68+
line: 223036,
69+
column: 10,
70+
},
71+
{
72+
url: 'safari-web-extension://3284871F-A480-4FFC-8BC4-3F362C752446/2665fee0/topee-content.js',
73+
func: '?',
74+
args: [],
75+
line: 3313,
76+
column: 26,
77+
},
78+
]);
79+
});
80+
2781
it('should parse exceptions for react-native-v8', () => {
2882
const REACT_NATIVE_V8_EXCEPTION = {
2983
message: 'Manually triggered crash to test Sentry reporting',

0 commit comments

Comments
 (0)