Skip to content

Commit 3cd6e79

Browse files
committed
feat: Move mechanism to exception
1 parent 9d5d937 commit 3cd6e79

File tree

11 files changed

+78
-320
lines changed

11 files changed

+78
-320
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ since we removed some methods from the public API and removed some classes from
3737
- **breaking** [all] ref: Expose `module` in `package.json` as entry point for esm builds.
3838
- [hub] feat: Introduce `setExtra`, `setTags`, `clearBreadcrumbs` additionally some `set` on the Scope now accept no
3939
argument which makes it possible to unset the value.
40+
- [browser/node] feat: Add `synthetic` to `mechanism` in exception.
4041

4142
## 4.6.4
4243

packages/browser/src/backend.ts

Lines changed: 15 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
11
import { BaseBackend } from '@sentry/core';
22
import { Event, EventHint, Options, Severity, Transport } from '@sentry/types';
33
import { isDOMError, isDOMException, isError, isErrorEvent, isPlainObject } from '@sentry/utils/is';
4+
import { addExceptionTypeValue } from '@sentry/utils/misc';
45
import { supportsBeacon, supportsFetch } from '@sentry/utils/supports';
56
import { SyncPromise } from '@sentry/utils/syncpromise';
6-
import { addExceptionTypeValue, eventFromPlainObject, eventFromStacktrace, prepareFramesForEvent } from './parsers';
7+
import { eventFromPlainObject, eventFromStacktrace, prepareFramesForEvent } from './parsers';
78
import { computeStackTrace } from './tracekit';
89
import { BeaconTransport, FetchTransport, XHRTransport } from './transports';
910

@@ -88,8 +89,12 @@ export class BrowserBackend extends BaseBackend<BrowserOptions> {
8889
// which is much better than creating new group when any key/value change
8990
const objectException = exception as {};
9091
event = eventFromPlainObject(objectException, hint.syntheticException);
91-
addExceptionTypeValue(event, 'Custom Object');
92-
return SyncPromise.resolve(this.buildEvent(event, hint, true));
92+
addExceptionTypeValue(event, 'Custom Object', undefined, {
93+
handled: true,
94+
synthetic: true,
95+
type: 'generic',
96+
});
97+
return SyncPromise.resolve(this.buildEvent(event, hint));
9398
}
9499

95100
// If none of previous checks were valid, then it means that
@@ -100,26 +105,22 @@ export class BrowserBackend extends BaseBackend<BrowserOptions> {
100105
// So bail out and capture it as a simple message:
101106
const stringException = exception as string;
102107
return this.eventFromMessage(stringException, undefined, hint).then(messageEvent => {
103-
addExceptionTypeValue(messageEvent, `${stringException}`);
104-
return SyncPromise.resolve(this.buildEvent(messageEvent, hint, true));
108+
addExceptionTypeValue(messageEvent, `${stringException}`, undefined, {
109+
handled: true,
110+
synthetic: true,
111+
type: 'generic',
112+
});
113+
return SyncPromise.resolve(this.buildEvent(messageEvent, hint));
105114
});
106115
}
107116

108117
/**
109118
* This is an internal helper function that creates an event.
110119
*/
111-
private buildEvent(event: Event, hint?: EventHint, isSynthetic?: boolean): Event {
120+
private buildEvent(event: Event, hint?: EventHint): Event {
112121
return {
113122
...event,
114123
event_id: hint && hint.event_id,
115-
exception: {
116-
...event.exception,
117-
mechanism: {
118-
handled: true,
119-
synthetic: isSynthetic,
120-
type: 'generic',
121-
},
122-
},
123124
};
124125
}
125126

packages/browser/src/integrations/globalhandlers.ts

Lines changed: 7 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
11
import { getCurrentHub } from '@sentry/core';
22
import { Event, Integration } from '@sentry/types';
33
import { logger } from '@sentry/utils/logger';
4+
import { addExceptionTypeValue } from '@sentry/utils/misc';
45
import { normalize } from '@sentry/utils/object';
56
import { truncate } from '@sentry/utils/string';
6-
import { addExceptionTypeValue, eventFromStacktrace } from '../parsers';
7+
import { eventFromStacktrace } from '../parsers';
78
import {
89
installGlobalHandler,
910
installGlobalUnhandledRejectionHandler,
@@ -104,14 +105,6 @@ export class GlobalHandlers implements Integration {
104105

105106
const newEvent: Event = {
106107
...event,
107-
exception: {
108-
...event.exception,
109-
mechanism: {
110-
data,
111-
handled: false,
112-
type: stacktrace.mechanism,
113-
},
114-
},
115108
};
116109

117110
const client = getCurrentHub().getClient();
@@ -123,7 +116,11 @@ export class GlobalHandlers implements Integration {
123116
const fallbackType = stacktrace.mechanism === 'onunhandledrejection' ? 'UnhandledRejection' : 'Error';
124117

125118
// This makes sure we have type/value in every exception
126-
addExceptionTypeValue(newEvent, fallbackValue, fallbackType);
119+
addExceptionTypeValue(newEvent, fallbackValue, fallbackType, {
120+
data,
121+
handled: false,
122+
type: stacktrace.mechanism,
123+
});
127124

128125
return newEvent;
129126
}

packages/browser/src/integrations/helpers.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,10 @@ export function wrap(
9292

9393
if (options.mechanism) {
9494
processedEvent.exception = processedEvent.exception || {};
95-
processedEvent.exception.mechanism = options.mechanism;
95+
processedEvent.exception.values = processedEvent.exception.values || [];
96+
processedEvent.exception.values[0] = processedEvent.exception.values[0] || {};
97+
processedEvent.exception.values[0].mechanism =
98+
processedEvent.exception.values[0].mechanism || options.mechanism;
9699
}
97100

98101
processedEvent.extra = {

packages/browser/src/md5.ts

Lines changed: 0 additions & 268 deletions
This file was deleted.

0 commit comments

Comments
 (0)