Skip to content

Commit 76644bf

Browse files
committed
Revert "ref: Deprecate top-level stacktrace (#2214)"
This reverts commit 36d206c.
1 parent e8fd745 commit 76644bf

File tree

12 files changed

+59
-214
lines changed

12 files changed

+59
-214
lines changed

CHANGELOG.md

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,7 @@
22

33
## 5.6.3
44

5-
- [browser] fix: Don't capture our own XHR events that somehow bubbled-up to global handler (#2221)
6-
- [core] ref: Soft-deprecate top-level stacktrace event attribute (#2214)
5+
- [browser] fix: Don't capture our own XHR events that somehow bubbled-up to global handler
76

87
## 5.6.2
98

packages/browser/src/backend.ts

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -151,13 +151,9 @@ export class BrowserBackend extends BaseBackend<BrowserOptions> {
151151
if (this._options.attachStacktrace && hint && hint.syntheticException) {
152152
const stacktrace = _computeStackTrace(hint.syntheticException);
153153
const frames = prepareFramesForEvent(stacktrace.stack);
154-
event.threads = [
155-
{
156-
stacktrace: {
157-
frames,
158-
},
159-
},
160-
];
154+
event.stacktrace = {
155+
frames,
156+
};
161157
}
162158

163159
return SyncPromise.resolve(event);

packages/browser/src/parsers.ts

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -45,13 +45,9 @@ export function eventFromPlainObject(exception: {}, syntheticException: Error |
4545
if (syntheticException) {
4646
const stacktrace = _computeStackTrace(syntheticException);
4747
const frames = prepareFramesForEvent(stacktrace.stack);
48-
event.threads = [
49-
{
50-
stacktrace: {
51-
frames,
52-
},
53-
},
54-
];
48+
event.stacktrace = {
49+
frames,
50+
};
5551
}
5652

5753
return event;

packages/core/src/integrations/inboundfilters.ts

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -161,7 +161,6 @@ export class InboundFilters implements Integration {
161161
/** JSDoc */
162162
private _getEventFilterUrl(event: Event): string | null {
163163
try {
164-
// tslint:disable-next-line:deprecation
165164
if (event.stacktrace) {
166165
// tslint:disable:no-unsafe-any
167166
const frames = (event as any).stacktrace.frames;
@@ -172,11 +171,6 @@ export class InboundFilters implements Integration {
172171
const frames = (event as any).exception.values[0].stacktrace.frames;
173172
return frames[frames.length - 1].filename;
174173
}
175-
if (event.threads) {
176-
// tslint:disable:no-unsafe-any
177-
const frames = (event as any).threads[0].stacktrace.frames;
178-
return frames[frames.length - 1].filename;
179-
}
180174
return null;
181175
} catch (oO) {
182176
logger.error(`Cannot extract url for event ${getEventDescription(event)}`);

packages/integrations/src/dedupe.ts

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
import { Event, EventProcessor, Exception, Hub, Integration, StackFrame } from '@sentry/types';
22

3-
import { getFramesFromEvent } from './helpers';
4-
53
/** Deduplication filter */
64
export class Dedupe implements Integration {
75
/**
@@ -88,10 +86,27 @@ export class Dedupe implements Integration {
8886
return true;
8987
}
9088

89+
/** JSDoc */
90+
private _getFramesFromEvent(event: Event): StackFrame[] | undefined {
91+
const exception = event.exception;
92+
93+
if (exception) {
94+
try {
95+
// @ts-ignore
96+
return exception.values[0].stacktrace.frames;
97+
} catch (_oO) {
98+
return undefined;
99+
}
100+
} else if (event.stacktrace) {
101+
return event.stacktrace.frames;
102+
}
103+
return undefined;
104+
}
105+
91106
/** JSDoc */
92107
private _isSameStacktrace(currentEvent: Event, previousEvent: Event): boolean {
93-
let currentFrames = getFramesFromEvent(currentEvent);
94-
let previousFrames = getFramesFromEvent(previousEvent);
108+
let currentFrames = this._getFramesFromEvent(currentEvent);
109+
let previousFrames = this._getFramesFromEvent(previousEvent);
95110

96111
// If no event has a fingerprint, they are assumed to be the same
97112
if (!currentFrames && !previousFrames) {

packages/integrations/src/helpers.ts

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

packages/integrations/src/rewriteframes.ts

Lines changed: 23 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
import { Event, EventProcessor, Hub, Integration, StackFrame } from '@sentry/types';
22
import { basename, relative } from '@sentry/utils';
33

4-
import { getFramesFromEvent } from './helpers';
5-
64
type StackFrameIteratee = (frame: StackFrame) => StackFrame;
75

86
/** Rewrite event frames paths */
@@ -60,11 +58,30 @@ export class RewriteFrames implements Integration {
6058

6159
/** JSDoc */
6260
public process(event: Event): Event {
63-
const frames = getFramesFromEvent(event) || [];
64-
for (const i in frames) {
65-
// tslint:disable-next-line
66-
frames[i] = this._iteratee(frames[i]);
61+
const frames = this._getFramesFromEvent(event);
62+
if (frames) {
63+
for (const i in frames) {
64+
// tslint:disable-next-line
65+
frames[i] = this._iteratee(frames[i]);
66+
}
6767
}
6868
return event;
6969
}
70+
71+
/** JSDoc */
72+
private _getFramesFromEvent(event: Event): StackFrame[] | undefined {
73+
const exception = event.exception;
74+
75+
if (exception) {
76+
try {
77+
// tslint:disable-next-line:no-unsafe-any
78+
return (exception as any).values[0].stacktrace.frames;
79+
} catch (_oO) {
80+
return undefined;
81+
}
82+
} else if (event.stacktrace) {
83+
return event.stacktrace.frames;
84+
}
85+
return undefined;
86+
}
7087
}

packages/integrations/src/transaction.ts

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
import { Event, EventProcessor, Hub, Integration, StackFrame } from '@sentry/types';
22

3-
import { getFramesFromEvent } from './helpers';
4-
53
/** Add node transaction to the event */
64
export class Transaction implements Integration {
75
/**
@@ -30,7 +28,7 @@ export class Transaction implements Integration {
3028
* @inheritDoc
3129
*/
3230
public process(event: Event): Event {
33-
const frames = getFramesFromEvent(event) || [];
31+
const frames = this._getFramesFromEvent(event);
3432

3533
// use for loop so we don't have to reverse whole frames array
3634
for (let i = frames.length - 1; i >= 0; i--) {
@@ -45,6 +43,12 @@ export class Transaction implements Integration {
4543
return event;
4644
}
4745

46+
/** JSDoc */
47+
private _getFramesFromEvent(event: Event): StackFrame[] {
48+
const exception = event.exception && event.exception.values && event.exception.values[0];
49+
return (exception && exception.stacktrace && exception.stacktrace.frames) || [];
50+
}
51+
4852
/** JSDoc */
4953
private _getTransaction(frame: StackFrame): string {
5054
return frame.module || frame.function ? `${frame.module || '?'}/${frame.function || '?'}` : '<unknown>';

packages/integrations/test/helpers.test.ts

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

packages/integrations/test/rewriteframes.test.ts

Lines changed: 0 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,10 @@
1-
// tslint:disable:deprecation
2-
31
import { Event, StackFrame } from '@sentry/types';
42

53
import { RewriteFrames } from '../src/rewriteframes';
64

75
let rewriteFrames: RewriteFrames;
86
let messageEvent: Event;
97
let exceptionEvent: Event;
10-
let threadEvent: Event;
118

129
describe('RewriteFrames', () => {
1310
beforeEach(() => {
@@ -41,22 +38,6 @@ describe('RewriteFrames', () => {
4138
],
4239
},
4340
};
44-
threadEvent = {
45-
threads: [
46-
{
47-
stacktrace: {
48-
frames: [
49-
{
50-
filename: '/www/src/app/file1.js',
51-
},
52-
{
53-
filename: '/www/src/app/file2.js',
54-
},
55-
],
56-
},
57-
},
58-
],
59-
};
6041
});
6142

6243
describe('default iteratee appends basename to `app:///` if frame starts with `/`', () => {
@@ -75,12 +56,6 @@ describe('RewriteFrames', () => {
7556
expect(event.exception!.values![0].stacktrace!.frames![0].filename).toEqual('app:///file1.js');
7657
expect(event.exception!.values![0].stacktrace!.frames![1].filename).toEqual('app:///file2.js');
7758
});
78-
79-
it('transforms threadEvent frames', () => {
80-
const event = rewriteFrames.process(threadEvent);
81-
expect(event.threads![0].stacktrace!.frames![0].filename).toEqual('app:///file1.js');
82-
expect(event.threads![0].stacktrace!.frames![1].filename).toEqual('app:///file2.js');
83-
});
8459
});
8560

8661
describe('can use custom root to perform `relative` on filepaths', () => {
@@ -101,12 +76,6 @@ describe('RewriteFrames', () => {
10176
expect(event.exception!.values![0].stacktrace!.frames![0].filename).toEqual('app:///src/app/file1.js');
10277
expect(event.exception!.values![0].stacktrace!.frames![1].filename).toEqual('app:///src/app/file2.js');
10378
});
104-
105-
it('transforms threadEvent frames', async () => {
106-
const event = rewriteFrames.process(threadEvent);
107-
expect(event.threads![0].stacktrace!.frames![0].filename).toEqual('app:///src/app/file1.js');
108-
expect(event.threads![0].stacktrace!.frames![1].filename).toEqual('app:///src/app/file2.js');
109-
});
11079
});
11180

11281
describe('can use custom iteratee', () => {
@@ -134,13 +103,5 @@ describe('RewriteFrames', () => {
134103
expect(event.exception!.values![0].stacktrace!.frames![1].filename).toEqual('/www/src/app/file2.js');
135104
expect(event.exception!.values![0].stacktrace!.frames![1].function).toEqual('whoops');
136105
});
137-
138-
it('transforms threadEvent frames', async () => {
139-
const event = rewriteFrames.process(threadEvent);
140-
expect(event.threads![0].stacktrace!.frames![0].filename).toEqual('/www/src/app/file1.js');
141-
expect(event.threads![0].stacktrace!.frames![0].function).toEqual('whoops');
142-
expect(event.threads![0].stacktrace!.frames![1].filename).toEqual('/www/src/app/file2.js');
143-
expect(event.threads![0].stacktrace!.frames![1].function).toEqual('whoops');
144-
});
145106
});
146107
});

packages/node/src/backend.ts

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -130,13 +130,9 @@ export class NodeBackend extends BaseBackend<NodeOptions> {
130130
if (this._options.attachStacktrace && hint && hint.syntheticException) {
131131
const stack = hint.syntheticException ? extractStackFromError(hint.syntheticException) : [];
132132
parseStack(stack, this._options).then(frames => {
133-
event.threads = [
134-
{
135-
stacktrace: {
136-
frames: prepareFramesForEvent(frames),
137-
},
138-
},
139-
];
133+
event.stacktrace = {
134+
frames: prepareFramesForEvent(frames),
135+
};
140136
resolve(event);
141137
});
142138
} else {

0 commit comments

Comments
 (0)