Skip to content

Commit 069244f

Browse files
committed
Use common parser
1 parent a7d61df commit 069244f

File tree

8 files changed

+374
-510
lines changed

8 files changed

+374
-510
lines changed

packages/node/src/backend.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { BaseBackend } from '@sentry/core';
22
import { Event, EventHint, Severity, Transport, TransportOptions } from '@sentry/types';
3-
import { makeDsn } from '@sentry/utils';
3+
import { makeDsn, resolvedSyncPromise } from '@sentry/utils';
44

55
import { eventFromException, eventFromMessage } from './eventbuilder';
66
import { HTTPSTransport, HTTPTransport } from './transports';
@@ -16,14 +16,14 @@ export class NodeBackend extends BaseBackend<NodeOptions> {
1616
*/
1717
// eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/explicit-module-boundary-types
1818
public eventFromException(exception: any, hint?: EventHint): PromiseLike<Event> {
19-
return eventFromException(exception, hint);
19+
return resolvedSyncPromise(eventFromException(exception, hint));
2020
}
2121

2222
/**
2323
* @inheritDoc
2424
*/
2525
public eventFromMessage(message: string, level: Severity = Severity.Info, hint?: EventHint): PromiseLike<Event> {
26-
return eventFromMessage(this._options, message, level, hint);
26+
return resolvedSyncPromise(eventFromMessage(this._options, message, level, hint));
2727
}
2828

2929
/**

packages/node/src/eventbuilder.ts

Lines changed: 42 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,40 @@
11
import { getCurrentHub } from '@sentry/hub';
2-
import { Event, EventHint, Mechanism, Options, Severity } from '@sentry/types';
2+
import { Event, EventHint, Exception, Mechanism, Options, Severity, StackFrame } from '@sentry/types';
33
import {
44
addExceptionMechanism,
55
addExceptionTypeValue,
6+
createStackParser,
67
extractExceptionKeysForMessage,
78
isError,
89
isPlainObject,
910
normalizeToSize,
10-
SyncPromise,
1111
} from '@sentry/utils';
1212

13-
import { extractStackFromError, parseError, parseStack, prepareFramesForEvent } from './parsers';
13+
import { node } from './stack-parser';
14+
15+
/**
16+
* Extracts stack frames from the error.stack string
17+
*/
18+
export function extractStackFromError(error: Error): StackFrame[] {
19+
return createStackParser(node)(error.stack || '');
20+
}
21+
22+
/**
23+
* Extracts stack frames from the error and builds a Sentry Exception
24+
*/
25+
export function exceptionFromError(error: Error): Exception {
26+
return {
27+
type: error.name || error.constructor.name,
28+
value: error.message,
29+
stacktrace: { frames: extractStackFromError(error) },
30+
};
31+
}
1432

1533
/**
1634
* Builds and Event from a Exception
1735
* @hidden
1836
*/
19-
export function eventFromException(exception: unknown, hint?: EventHint): PromiseLike<Event> {
37+
export function eventFromException(exception: unknown, hint?: EventHint): Event {
2038
// eslint-disable-next-line @typescript-eslint/no-explicit-any
2139
let ex: any = exception;
2240
const providedMechanism: Mechanism | undefined =
@@ -47,19 +65,19 @@ export function eventFromException(exception: unknown, hint?: EventHint): Promis
4765
mechanism.synthetic = true;
4866
}
4967

50-
return new SyncPromise<Event>((resolve, reject) =>
51-
parseError(ex as Error)
52-
.then(event => {
53-
addExceptionTypeValue(event, undefined, undefined);
54-
addExceptionMechanism(event, mechanism);
68+
const event = {
69+
exception: {
70+
values: [exceptionFromError(ex as Error)],
71+
},
72+
};
73+
74+
addExceptionTypeValue(event, undefined, undefined);
75+
addExceptionMechanism(event, mechanism);
5576

56-
resolve({
57-
...event,
58-
event_id: hint && hint.event_id,
59-
});
60-
})
61-
.then(null, reject),
62-
);
77+
return {
78+
...event,
79+
event_id: hint && hint.event_id,
80+
};
6381
}
6482

6583
/**
@@ -71,23 +89,18 @@ export function eventFromMessage(
7189
message: string,
7290
level: Severity = Severity.Info,
7391
hint?: EventHint,
74-
): PromiseLike<Event> {
92+
): Event {
7593
const event: Event = {
7694
event_id: hint && hint.event_id,
7795
level,
7896
message,
7997
};
8098

81-
return new SyncPromise<Event>(resolve => {
82-
if (options.attachStacktrace && hint && hint.syntheticException) {
83-
const stack = hint.syntheticException ? extractStackFromError(hint.syntheticException) : [];
84-
const frames = parseStack(stack);
85-
event.stacktrace = {
86-
frames: prepareFramesForEvent(frames),
87-
};
88-
resolve(event);
89-
} else {
90-
resolve(event);
91-
}
92-
});
99+
if (options.attachStacktrace && hint && hint.syntheticException) {
100+
event.stacktrace = {
101+
frames: hint.syntheticException ? extractStackFromError(hint.syntheticException) : [],
102+
};
103+
}
104+
105+
return event;
93106
}

packages/node/src/integrations/linkederrors.ts

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import { addGlobalEventProcessor, getCurrentHub } from '@sentry/core';
22
import { Event, EventHint, Exception, ExtendedError, Integration } from '@sentry/types';
33
import { isInstanceOf, resolvedSyncPromise, SyncPromise } from '@sentry/utils';
44

5-
import { getExceptionFromError } from '../parsers';
5+
import { exceptionFromError } from '../eventbuilder';
66

77
const DEFAULT_KEY = 'cause';
88
const DEFAULT_LIMIT = 5;
@@ -80,15 +80,12 @@ export class LinkedErrors implements Integration {
8080
if (!isInstanceOf(error[key], Error) || stack.length + 1 >= this._limit) {
8181
return resolvedSyncPromise(stack);
8282
}
83+
84+
const exception = exceptionFromError(error[key]);
85+
8386
return new SyncPromise<Exception[]>((resolve, reject) => {
84-
void getExceptionFromError(error[key])
85-
.then((exception: Exception) => {
86-
void this._walkErrorTree(error[key], key, [exception, ...stack])
87-
.then(resolve)
88-
.then(null, () => {
89-
reject();
90-
});
91-
})
87+
void this._walkErrorTree(error[key], key, [exception, ...stack])
88+
.then(resolve)
9289
.then(null, () => {
9390
reject();
9491
});

packages/node/src/parsers.ts

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

0 commit comments

Comments
 (0)