Skip to content

Commit 8b2862e

Browse files
committed
ref: Unify message to exception.value translation
1 parent e0d8295 commit 8b2862e

File tree

6 files changed

+111
-123
lines changed

6 files changed

+111
-123
lines changed

packages/browser/src/backend.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ export class BrowserBackend extends BaseBackend<BrowserOptions> {
5858
*/
5959
public eventFromException(exception: any, hint?: EventHint): SyncPromise<Event> {
6060
const syntheticException = (hint && hint.syntheticException) || undefined;
61-
const event = eventFromUnknownInput(exception, syntheticException, 'error');
61+
const event = eventFromUnknownInput(exception, syntheticException);
6262
addExceptionMechanism(event, {
6363
handled: true,
6464
type: 'generic',

packages/browser/src/eventbuilder.ts

+3-14
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { Event, Severity } from '@sentry/types';
1+
import { Event } from '@sentry/types';
22
import {
33
addExceptionMechanism,
44
addExceptionTypeValue,
@@ -14,11 +14,7 @@ import { eventFromPlainObject, eventFromStacktrace, prepareFramesForEvent } from
1414
import { computeStackTrace } from './tracekit';
1515

1616
/** JSDoc */
17-
export function eventFromUnknownInput(
18-
exception: unknown,
19-
syntheticException?: Error,
20-
type?: 'error' | 'promise',
21-
): Event {
17+
export function eventFromUnknownInput(exception: unknown, syntheticException?: Error, rejection?: boolean): Event {
2218
let event: Event;
2319

2420
if (isErrorEvent(exception as ErrorEvent) && (exception as ErrorEvent).error) {
@@ -51,16 +47,10 @@ export function eventFromUnknownInput(
5147
// This will allow us to group events based on top-level keys
5248
// which is much better than creating new group when any key/value change
5349
const objectException = exception as {};
54-
event = eventFromPlainObject(objectException, syntheticException, type);
55-
addExceptionTypeValue(
56-
event,
57-
isEvent(exception) ? exception.constructor.name : 'Custom Object',
58-
type === 'promise' ? 'UnhandledRejection' : 'Error',
59-
);
50+
event = eventFromPlainObject(objectException, syntheticException, rejection);
6051
addExceptionMechanism(event, {
6152
synthetic: true,
6253
});
63-
event.level = Severity.Error;
6454
return event;
6555
}
6656

@@ -71,7 +61,6 @@ export function eventFromUnknownInput(
7161
// it's not an Error
7262
// So bail out and capture it as a simple message:
7363
event = eventFromString(exception as string, syntheticException);
74-
7564
addExceptionTypeValue(event, `${exception}`, undefined);
7665
addExceptionMechanism(event, {
7766
synthetic: true,

packages/browser/src/integrations/globalhandlers.ts

+13-17
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,12 @@ import { getCurrentHub } from '@sentry/core';
22
import { Event, Integration, Severity } from '@sentry/types';
33
import {
44
addExceptionMechanism,
5-
addExceptionTypeValue,
65
getGlobalObject,
76
getLocationHref,
87
isErrorEvent,
98
isPrimitive,
109
isString,
1110
logger,
12-
truncate,
1311
} from '@sentry/utils';
1412

1513
import { eventFromUnknownInput } from '../eventbuilder';
@@ -98,13 +96,8 @@ export class GlobalHandlers implements Integration {
9896

9997
const event = isPrimitive(error)
10098
? self._eventFromIncompleteOnError(msg, url, line, column)
101-
: self._enhanceEventWithInitialFrame(eventFromUnknownInput(error, undefined, 'error'), url, line, column);
99+
: self._enhanceEventWithInitialFrame(eventFromUnknownInput(error, undefined), url, line, column);
102100

103-
const client = getCurrentHub().getClient();
104-
const maxValueLength = (client && client.getOptions().maxValueLength) || 250;
105-
const fallbackValue = truncate(`${error || msg}`, maxValueLength) || '';
106-
107-
addExceptionTypeValue(event, fallbackValue, 'Error');
108101
addExceptionMechanism(event, {
109102
handled: false,
110103
type: 'onerror',
@@ -153,13 +146,10 @@ export class GlobalHandlers implements Integration {
153146

154147
const event = isPrimitive(error)
155148
? self._eventFromIncompleteRejection(error)
156-
: eventFromUnknownInput(error, undefined, 'promise');
149+
: eventFromUnknownInput(error, undefined, true);
157150

158-
const client = getCurrentHub().getClient();
159-
const maxValueLength = (client && client.getOptions().maxValueLength) || 250;
160-
const fallbackValue = truncate(`${error}`, maxValueLength) || '';
151+
event.level = Severity.Error;
161152

162-
addExceptionTypeValue(event, fallbackValue, 'UnhandledRejection');
163153
addExceptionMechanism(event, {
164154
handled: false,
165155
type: 'onunhandledrejection',
@@ -183,7 +173,7 @@ export class GlobalHandlers implements Integration {
183173
* This function creates a stack from an old, error-less onerror handler.
184174
*/
185175
private _eventFromIncompleteOnError(msg: any, url: any, line: any, column: any): Event {
186-
const ERROR_TYPES_RE = /^(?:[Uu]ncaught (?:exception: )?)?(?:((?:Eval|Internal|Range|Reference|Syntax|Type|URI|)Error): )?(.*)$/;
176+
const ERROR_TYPES_RE = /^(?:[Uu]ncaught (?:exception: )?)?(?:((?:Eval|Internal|Range|Reference|Syntax|Type|URI|)Error): )?(.*)$/i;
187177

188178
// If 'message' is ErrorEvent, get real message from inside
189179
let message = isErrorEvent(msg) ? msg.message : msg;
@@ -201,8 +191,8 @@ export class GlobalHandlers implements Integration {
201191
exception: {
202192
values: [
203193
{
194+
type: name || 'Error',
204195
value: message,
205-
...(name && { type: name }),
206196
},
207197
],
208198
},
@@ -216,8 +206,14 @@ export class GlobalHandlers implements Integration {
216206
*/
217207
private _eventFromIncompleteRejection(error: any): Event {
218208
return {
219-
level: Severity.Error,
220-
message: `Non-Error promise rejection captured with value: ${error}`,
209+
exception: {
210+
values: [
211+
{
212+
type: 'UnhandledRejection',
213+
value: `Non-Error promise rejection captured with value: ${error}`,
214+
},
215+
],
216+
},
221217
};
222218
}
223219

packages/browser/src/parsers.ts

+12-5
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { Event, Exception, StackFrame } from '@sentry/types';
2-
import { extractExceptionKeysForMessage, normalizeToSize } from '@sentry/utils';
2+
import { extractExceptionKeysForMessage, isEvent, normalizeToSize } from '@sentry/utils';
33

44
import { computeStackTrace, StackFrame as TraceKitStackFrame, StackTrace as TraceKitStackTrace } from './tracekit';
55

@@ -33,14 +33,21 @@ export function exceptionFromStacktrace(stacktrace: TraceKitStackTrace): Excepti
3333
/**
3434
* @hidden
3535
*/
36-
export function eventFromPlainObject(exception: {}, syntheticException?: Error, type?: 'error' | 'promise'): Event {
36+
export function eventFromPlainObject(exception: {}, syntheticException?: Error, rejection?: boolean): Event {
3737
const event: Event = {
38+
exception: {
39+
values: [
40+
{
41+
type: isEvent(exception) ? exception.constructor.name : rejection ? 'UnhandledRejection' : 'Error',
42+
value: `Non-Error ${
43+
rejection ? 'promise rejection' : 'exception'
44+
} captured with keys: ${extractExceptionKeysForMessage(exception)}`,
45+
},
46+
],
47+
},
3848
extra: {
3949
__serialized__: normalizeToSize(exception),
4050
},
41-
message: `Non-Error ${
42-
type === 'promise' ? 'promise rejection' : 'exception'
43-
} captured with keys: ${extractExceptionKeysForMessage(exception)}`,
4451
};
4552

4653
if (syntheticException) {

packages/browser/test/integration/browsers.js

+82-82
Original file line numberDiff line numberDiff line change
@@ -1,86 +1,86 @@
11
module.exports = {
2-
bs_chrome: {
3-
base: "BrowserStack",
4-
browser: "Chrome",
5-
browser_version: "latest",
6-
os: "Windows",
7-
os_version: "10",
8-
},
9-
bs_firefox: {
10-
base: "BrowserStack",
11-
browser: "Firefox",
12-
browser_version: "latest",
13-
os: "Windows",
14-
os_version: "10",
15-
},
16-
bs_safari: {
17-
base: "BrowserStack",
18-
browser: "Safari",
19-
browser_version: "latest",
20-
os: "OS X",
21-
os_version: "Mojave",
22-
},
23-
bs_edge: {
24-
base: "BrowserStack",
25-
browser: "Edge",
26-
browser_version: "latest",
27-
os: "Windows",
28-
os_version: "10",
29-
},
30-
bs_ie11: {
31-
base: "BrowserStack",
32-
browser: "IE",
33-
browser_version: "11.0",
34-
os: "Windows",
35-
os_version: "10",
36-
},
37-
bs_ie10: {
38-
base: "BrowserStack",
39-
browser: "IE",
40-
browser_version: "10.0",
41-
os: "Windows",
42-
os_version: "8",
43-
},
44-
bs_ios_12: {
45-
base: "BrowserStack",
46-
browser: "Mobile Safari",
47-
device: "iPhone 8",
48-
os: "ios",
49-
os_version: "12.1",
50-
real_mobile: true,
51-
},
52-
bs_ios_11: {
53-
base: "BrowserStack",
54-
browser: "Mobile Safari",
55-
device: "iPhone 6",
56-
os: "ios",
57-
os_version: "11.4",
58-
real_mobile: true,
59-
},
60-
bs_android_9: {
61-
base: "BrowserStack",
62-
browser: "Android",
63-
device: "Samsung Galaxy S9 Plus",
64-
os: "android",
65-
os_version: "9.0",
66-
real_mobile: true,
67-
},
68-
bs_android_8: {
69-
base: "BrowserStack",
70-
browser: "Android",
71-
device: "Samsung Galaxy S9",
72-
os: "android",
73-
os_version: "8.0",
74-
real_mobile: true,
75-
},
76-
bs_android_7: {
77-
base: "BrowserStack",
78-
browser: "Android",
79-
device: "Samsung Galaxy S8",
80-
os: "android",
81-
os_version: "7.0",
82-
real_mobile: true,
83-
},
2+
// bs_chrome: {
3+
// base: "BrowserStack",
4+
// browser: "Chrome",
5+
// browser_version: "latest",
6+
// os: "Windows",
7+
// os_version: "10",
8+
// },
9+
// bs_firefox: {
10+
// base: "BrowserStack",
11+
// browser: "Firefox",
12+
// browser_version: "latest",
13+
// os: "Windows",
14+
// os_version: "10",
15+
// },
16+
// bs_safari: {
17+
// base: "BrowserStack",
18+
// browser: "Safari",
19+
// browser_version: "latest",
20+
// os: "OS X",
21+
// os_version: "Mojave",
22+
// },
23+
// bs_edge: {
24+
// base: "BrowserStack",
25+
// browser: "Edge",
26+
// browser_version: "latest",
27+
// os: "Windows",
28+
// os_version: "10",
29+
// },
30+
// bs_ie11: {
31+
// base: "BrowserStack",
32+
// browser: "IE",
33+
// browser_version: "11.0",
34+
// os: "Windows",
35+
// os_version: "10",
36+
// },
37+
// bs_ie10: {
38+
// base: "BrowserStack",
39+
// browser: "IE",
40+
// browser_version: "10.0",
41+
// os: "Windows",
42+
// os_version: "8",
43+
// },
44+
// bs_ios_12: {
45+
// base: "BrowserStack",
46+
// browser: "Mobile Safari",
47+
// device: "iPhone 8",
48+
// os: "ios",
49+
// os_version: "12.1",
50+
// real_mobile: true,
51+
// },
52+
// bs_ios_11: {
53+
// base: "BrowserStack",
54+
// browser: "Mobile Safari",
55+
// device: "iPhone 6",
56+
// os: "ios",
57+
// os_version: "11.4",
58+
// real_mobile: true,
59+
// },
60+
// bs_android_9: {
61+
// base: "BrowserStack",
62+
// browser: "Android",
63+
// device: "Samsung Galaxy S9 Plus",
64+
// os: "android",
65+
// os_version: "9.0",
66+
// real_mobile: true,
67+
// },
68+
// bs_android_8: {
69+
// base: "BrowserStack",
70+
// browser: "Android",
71+
// device: "Samsung Galaxy S9",
72+
// os: "android",
73+
// os_version: "8.0",
74+
// real_mobile: true,
75+
// },
76+
// bs_android_7: {
77+
// base: "BrowserStack",
78+
// browser: "Android",
79+
// device: "Samsung Galaxy S8",
80+
// os: "android",
81+
// os_version: "7.0",
82+
// real_mobile: true,
83+
// },
8484
bs_android_6: {
8585
base: "BrowserStack",
8686
browser: "Android",

packages/browser/test/integration/suites/onerror.js

-4
Original file line numberDiff line numberDiff line change
@@ -70,10 +70,6 @@ describe("window.onerror", function() {
7070
} else {
7171
assert.equal(
7272
summary.events[0].exception.values[0].value,
73-
"Custom Object"
74-
);
75-
assert.equal(
76-
summary.events[0].message,
7773
"Non-Error exception captured with keys: error, somekey"
7874
);
7975
}

0 commit comments

Comments
 (0)