Skip to content

Commit 91beac3

Browse files
author
Luca Forstner
committed
Clean u
1 parent 5feacb2 commit 91beac3

File tree

4 files changed

+64
-85
lines changed

4 files changed

+64
-85
lines changed

packages/browser/src/integrations/linkederrors.ts

Lines changed: 20 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
1-
import { addGlobalEventProcessor, getCurrentHub } from '@sentry/core';
2-
import type { Event, EventHint, ExtendedError, Integration, StackParser } from '@sentry/types';
3-
import { aggreagateExceptionsFromError, isInstanceOf } from '@sentry/utils';
1+
import type { Event, EventHint, EventProcessor, Hub, Integration } from '@sentry/types';
2+
import { applyAggregateErrorsToEvent } from '@sentry/utils';
43

54
import { exceptionFromError } from '../eventbuilder';
65

@@ -45,41 +44,26 @@ export class LinkedErrors implements Integration {
4544
/**
4645
* @inheritDoc
4746
*/
48-
public setupOnce(): void {
49-
const client = getCurrentHub().getClient();
50-
if (!client) {
51-
return;
52-
}
47+
public setupOnce(addGlobalEventProcessor: (callback: EventProcessor) => void, getCurrentHub: () => Hub): void {
5348
addGlobalEventProcessor((event: Event, hint?: EventHint) => {
54-
const self = getCurrentHub().getIntegration(LinkedErrors);
55-
return self ? _handler(client.getOptions().stackParser, self._key, self._limit, event, hint) : event;
56-
});
57-
}
58-
}
49+
const hub = getCurrentHub();
50+
const client = hub.getClient();
51+
const self = hub.getIntegration(LinkedErrors);
5952

60-
/**
61-
* @inheritDoc
62-
*/
63-
export function _handler(
64-
parser: StackParser,
65-
key: string,
66-
limit: number,
67-
event: Event,
68-
hint?: EventHint,
69-
): Event | null {
70-
if (!event.exception || !event.exception.values || !hint || !isInstanceOf(hint.originalException, Error)) {
71-
return event;
72-
}
53+
if (!client || !self) {
54+
return event;
55+
}
7356

74-
const linkedErrors = aggreagateExceptionsFromError(
75-
exceptionFromError,
76-
parser,
77-
limit,
78-
hint.originalException as ExtendedError,
79-
key,
80-
);
57+
applyAggregateErrorsToEvent(
58+
exceptionFromError,
59+
client.getOptions().stackParser,
60+
self._key,
61+
self._limit,
62+
event,
63+
hint,
64+
);
8165

82-
event.exception.values = [...linkedErrors, ...event.exception.values];
83-
84-
return event;
66+
return event;
67+
});
68+
}
8569
}
Lines changed: 17 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
1-
import { addGlobalEventProcessor, getCurrentHub } from '@sentry/core';
2-
import type { Event, EventHint, Exception, ExtendedError, Integration, StackParser } from '@sentry/types';
3-
import { isInstanceOf } from '@sentry/utils';
1+
import type { Event, EventHint, EventProcessor, Hub, Integration } from '@sentry/types';
2+
import { applyAggregateErrorsToEvent } from '@sentry/utils';
43

54
import { exceptionFromError } from '../eventbuilder';
65
import { ContextLines } from './contextlines';
@@ -41,15 +40,25 @@ export class LinkedErrors implements Integration {
4140
/**
4241
* @inheritDoc
4342
*/
44-
public setupOnce(): void {
45-
addGlobalEventProcessor(async (event: Event, hint: EventHint) => {
43+
public setupOnce(addGlobalEventProcessor: (callback: EventProcessor) => void, getCurrentHub: () => Hub): void {
44+
addGlobalEventProcessor(async (event: Event, hint?: EventHint) => {
4645
const hub = getCurrentHub();
47-
const self = hub.getIntegration(LinkedErrors);
4846
const client = hub.getClient();
49-
if (client && self && self._handler && typeof self._handler === 'function') {
50-
self._handler(client.getOptions().stackParser, event, hint);
47+
const self = hub.getIntegration(LinkedErrors);
48+
49+
if (!client || !self) {
50+
return event;
5151
}
5252

53+
applyAggregateErrorsToEvent(
54+
exceptionFromError,
55+
client.getOptions().stackParser,
56+
self._key,
57+
self._limit,
58+
event,
59+
hint,
60+
);
61+
5362
// If the ContextLines integration is enabled, we add source code context to linked errors
5463
// because we can't guarantee the order that integrations are run.
5564
const contextLines = getCurrentHub().getIntegration(ContextLines);
@@ -60,35 +69,4 @@ export class LinkedErrors implements Integration {
6069
return event;
6170
});
6271
}
63-
64-
/**
65-
* @inheritDoc
66-
*/
67-
private _handler(stackParser: StackParser, event: Event, hint: EventHint): Event {
68-
if (!event.exception || !event.exception.values || !hint || !isInstanceOf(hint.originalException, Error)) {
69-
return event;
70-
}
71-
72-
const linkedErrors = this._walkErrorTree(stackParser, hint.originalException as ExtendedError, this._key);
73-
event.exception.values = [...linkedErrors, ...event.exception.values];
74-
return event;
75-
}
76-
77-
/**
78-
* @inheritDoc
79-
*/
80-
private _walkErrorTree(
81-
stackParser: StackParser,
82-
error: ExtendedError,
83-
key: string,
84-
stack: Exception[] = [],
85-
): Exception[] {
86-
if (!isInstanceOf(error[key], Error) || stack.length + 1 >= this._limit) {
87-
return stack;
88-
}
89-
90-
const exception = exceptionFromError(stackParser, error[key]);
91-
92-
return this._walkErrorTree(stackParser, error[key], key, [exception, ...stack]);
93-
}
9472
}

packages/node/test/integrations/linkederrors.test.ts

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -6,17 +6,9 @@ import { LinkedErrors } from '../../src/integrations/linkederrors';
66
import { defaultStackParser as stackParser } from '../../src/sdk';
77
import { getDefaultNodeClientOptions } from '../helper/node-client-options';
88

9-
let linkedErrors: any;
10-
119
describe('LinkedErrors', () => {
12-
beforeEach(() => {
13-
linkedErrors = new LinkedErrors();
14-
});
15-
1610
describe('handler', () => {
1711
it('should bail out if event doesnt contain exception', async () => {
18-
expect.assertions(2);
19-
const spy = jest.spyOn(linkedErrors, '_walkErrorTree');
2012
const event = {
2113
message: 'foo',
2214
};

packages/utils/src/aggregate-errors.ts

Lines changed: 27 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,36 @@
1-
import type { Exception, ExtendedError, StackParser } from '@sentry/types';
1+
import type { Event, EventHint, Exception, ExtendedError, StackParser } from '@sentry/types';
22

33
import { isInstanceOf } from './is';
44

55
/**
66
* TODO
77
*/
8-
export function aggreagateExceptionsFromError(
8+
export function applyAggregateErrorsToEvent(
9+
exceptionFromErrorImplementation: (stackParser: StackParser, ex: Error) => Exception,
10+
parser: StackParser,
11+
key: string,
12+
limit: number,
13+
event: Event,
14+
hint?: EventHint,
15+
): Event | null {
16+
if (!event.exception || !event.exception.values || !hint || !isInstanceOf(hint.originalException, Error)) {
17+
return event;
18+
}
19+
20+
const linkedErrors = aggreagateExceptionsFromError(
21+
exceptionFromErrorImplementation,
22+
parser,
23+
limit,
24+
hint.originalException as ExtendedError,
25+
key,
26+
);
27+
28+
event.exception.values = [...linkedErrors, ...event.exception.values];
29+
30+
return event;
31+
}
32+
33+
function aggreagateExceptionsFromError(
934
exceptionFromErrorImplementation: (stackParser: StackParser, ex: Error) => Exception,
1035
parser: StackParser,
1136
limit: number,

0 commit comments

Comments
 (0)