Skip to content

Commit 7f8f946

Browse files
authored
feat: clone event processors (#1433)
* release: 4.0.0-beta.7 * fix: Set scope listerns to [] * release: 4.0.0-beta.8 * feat: Clone event processors
1 parent e0c91f1 commit 7f8f946

File tree

15 files changed

+391
-249
lines changed

15 files changed

+391
-249
lines changed

lerna.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"lerna": "2.11.0",
3-
"version": "4.0.0-beta.6",
3+
"version": "4.0.0-beta.8",
44
"packages": "packages/*",
55
"ignore": "raven-*",
66
"npmClient": "yarn",

packages/browser/package.json

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@sentry/browser",
3-
"version": "4.0.0-beta.6",
3+
"version": "4.0.0-beta.8",
44
"description": "Offical Sentry SDK for browsers",
55
"repository": "git://github.com/getsentry/raven-js.git",
66
"homepage": "https://github.com/getsentry/raven-js/tree/master/packages/browser",
@@ -15,11 +15,11 @@
1515
"access": "public"
1616
},
1717
"dependencies": {
18-
"@sentry/core": "4.0.0-beta.6",
19-
"@sentry/hub": "4.0.0-beta.6",
20-
"@sentry/minimal": "4.0.0-beta.6",
21-
"@sentry/types": "4.0.0-beta.6",
22-
"@sentry/utils": "4.0.0-beta.6"
18+
"@sentry/core": "4.0.0-beta.8",
19+
"@sentry/hub": "4.0.0-beta.8",
20+
"@sentry/minimal": "4.0.0-beta.8",
21+
"@sentry/types": "4.0.0-beta.8",
22+
"@sentry/utils": "4.0.0-beta.8"
2323
},
2424
"devDependencies": {
2525
"chai": "^4.1.2",

packages/browser/src/client.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ export class BrowserClient extends BaseClient<BrowserBackend, BrowserOptions> {
2525
public getSdkInfo(): SdkInfo {
2626
return {
2727
name: 'sentry-browser',
28-
version: '4.0.0-beta.6',
28+
version: '4.0.0-beta.8',
2929
};
3030
}
3131

packages/core/package.json

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@sentry/core",
3-
"version": "4.0.0-beta.6",
3+
"version": "4.0.0-beta.8",
44
"description": "Base implementation for all Sentry JavaScript SDKs",
55
"repository": "git://github.com/getsentry/raven-js.git",
66
"homepage": "https://github.com/getsentry/raven-js/tree/master/packages/core",
@@ -15,10 +15,10 @@
1515
"access": "public"
1616
},
1717
"dependencies": {
18-
"@sentry/hub": "4.0.0-beta.6",
19-
"@sentry/minimal": "4.0.0-beta.6",
20-
"@sentry/types": "4.0.0-beta.6",
21-
"@sentry/utils": "4.0.0-beta.6"
18+
"@sentry/hub": "4.0.0-beta.8",
19+
"@sentry/minimal": "4.0.0-beta.8",
20+
"@sentry/types": "4.0.0-beta.8",
21+
"@sentry/utils": "4.0.0-beta.8"
2222
},
2323
"devDependencies": {
2424
"jest": "^22.4.3",

packages/hub/package.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@sentry/hub",
3-
"version": "4.0.0-beta.6",
3+
"version": "4.0.0-beta.8",
44
"description": "Sentry hub which handles global state managment.",
55
"repository": "git://github.com/getsentry/raven-js.git",
66
"homepage": "https://github.com/getsentry/raven-js/tree/master/packages/hub",
@@ -15,8 +15,8 @@
1515
"access": "public"
1616
},
1717
"dependencies": {
18-
"@sentry/types": "4.0.0-beta.6",
19-
"@sentry/utils": "4.0.0-beta.6"
18+
"@sentry/types": "4.0.0-beta.8",
19+
"@sentry/utils": "4.0.0-beta.8"
2020
},
2121
"devDependencies": {
2222
"jest": "^22.4.3",

packages/hub/src/hub.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -145,11 +145,16 @@ export class Hub {
145145
}
146146
}
147147

148-
/** Returns the client of the currently active scope. */
148+
/** Returns the client of the top stack. */
149149
public getClient(): any | undefined {
150150
return this.getStackTop().client;
151151
}
152152

153+
/** Returns the scope of the top stack. */
154+
public getScope(): Scope | undefined {
155+
return this.getStackTop().scope;
156+
}
157+
153158
/** Returns the scope stack for domains or the process. */
154159
public getStack(): Layer[] {
155160
return this.stack;

packages/hub/src/scope.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,12 @@ export class Scope {
112112
*/
113113
public static clone(scope?: Scope): Scope {
114114
const newScope = new Scope();
115-
Object.assign(newScope, scope);
115+
Object.assign(newScope, scope, {
116+
scopeListeners: [],
117+
});
118+
if (scope) {
119+
newScope.eventProcessors = [...scope.eventProcessors];
120+
}
116121
return newScope;
117122
}
118123

packages/hub/test/lib/hub.test.ts

Lines changed: 39 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ const scope = new Scope();
88
describe('Hub', () => {
99
afterEach(() => {
1010
jest.resetAllMocks();
11+
jest.useRealTimers();
1112
});
1213

1314
test('push process into stack', () => {
@@ -49,6 +50,7 @@ describe('Hub', () => {
4950
});
5051

5152
test('invoke client async catch error in case', done => {
53+
const orig = global.console;
5254
// @ts-ignore
5355
global.console = { error: jest.fn() };
5456
const hub = new Hub({
@@ -59,6 +61,7 @@ describe('Hub', () => {
5961
setTimeout(() => {
6062
// tslint:disable-next-line
6163
expect(console.error).toHaveBeenCalled();
64+
global.console = orig;
6265
done();
6366
});
6467
});
@@ -248,32 +251,61 @@ describe('Hub', () => {
248251
await localScope.applyToEvent(event);
249252
});
250253

251-
test.only('addEventProcessor async', async done => {
252-
expect.assertions(2);
254+
test('addEventProcessor async', async () => {
255+
expect.assertions(6);
253256
const event: SentryEvent = {
254257
extra: { b: 3 },
255258
};
256259
const localScope = new Scope();
257260
localScope.setExtra('a', 'b');
258261
const hub = new Hub({ a: 'b' }, localScope);
262+
const callCounter = jest.fn();
259263
hub.addEventProcessor(async (processedEvent: SentryEvent) => {
264+
callCounter(1);
260265
expect(processedEvent.extra).toEqual({ a: 'b', b: 3 });
261266
return processedEvent;
262267
});
263268
hub.addEventProcessor(
264269
async (processedEvent: SentryEvent) =>
265270
new Promise<SentryEvent>(resolve => {
266-
setImmediate(() => {
271+
callCounter(2);
272+
setTimeout(() => {
273+
callCounter(3);
267274
processedEvent.dist = '1';
268275
resolve(processedEvent);
269-
});
276+
}, 1);
270277
}),
271278
);
272279
hub.addEventProcessor(async (processedEvent: SentryEvent) => {
273-
expect(processedEvent.dist).toEqual('1');
274-
done();
280+
callCounter(4);
275281
return processedEvent;
276282
});
277-
await localScope.applyToEvent(event);
283+
const final = await localScope.applyToEvent(event);
284+
expect(callCounter.mock.calls[0][0]).toBe(1);
285+
expect(callCounter.mock.calls[1][0]).toBe(2);
286+
expect(callCounter.mock.calls[2][0]).toBe(3);
287+
expect(callCounter.mock.calls[3][0]).toBe(4);
288+
expect(final.dist).toEqual('1');
289+
});
290+
291+
test('pushScope inherit processors', async () => {
292+
const event: SentryEvent = {
293+
extra: { b: 3 },
294+
};
295+
const localScope = new Scope();
296+
localScope.setExtra('a', 'b');
297+
const hub = new Hub({ a: 'b' }, localScope);
298+
const callCounter = jest.fn();
299+
hub.addEventProcessor(async (processedEvent: SentryEvent) => {
300+
callCounter(1);
301+
processedEvent.dist = '1';
302+
return processedEvent;
303+
});
304+
hub.pushScope();
305+
const pushedScope = hub.getStackTop().scope;
306+
if (pushedScope) {
307+
const final = await pushedScope.applyToEvent(event);
308+
expect(final.dist).toEqual('1');
309+
}
278310
});
279311
});

packages/minimal/package.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@sentry/minimal",
3-
"version": "4.0.0-beta.6",
3+
"version": "4.0.0-beta.8",
44
"description": "Sentry minimal library that can be used in other packages",
55
"repository": "git://github.com/getsentry/raven-js.git",
66
"homepage": "https://github.com/getsentry/raven-js/tree/master/packages/types",
@@ -15,8 +15,8 @@
1515
"access": "public"
1616
},
1717
"dependencies": {
18-
"@sentry/hub": "4.0.0-beta.6",
19-
"@sentry/types": "4.0.0-beta.6"
18+
"@sentry/hub": "4.0.0-beta.8",
19+
"@sentry/types": "4.0.0-beta.8"
2020
},
2121
"devDependencies": {
2222
"jest": "^22.4.3",

packages/node/package.json

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@sentry/node",
3-
"version": "4.0.0-beta.6",
3+
"version": "4.0.0-beta.8",
44
"description": "Offical Sentry SDK for Node.js",
55
"repository": "git://github.com/getsentry/raven-js.git",
66
"homepage": "https://github.com/getsentry/raven-js/tree/master/packages/node",
@@ -15,11 +15,11 @@
1515
"access": "public"
1616
},
1717
"dependencies": {
18-
"@sentry/core": "4.0.0-beta.6",
19-
"@sentry/hub": "4.0.0-beta.6",
20-
"@sentry/minimal": "4.0.0-beta.6",
21-
"@sentry/types": "4.0.0-beta.6",
22-
"@sentry/utils": "4.0.0-beta.6",
18+
"@sentry/core": "4.0.0-beta.8",
19+
"@sentry/hub": "4.0.0-beta.8",
20+
"@sentry/minimal": "4.0.0-beta.8",
21+
"@sentry/types": "4.0.0-beta.8",
22+
"@sentry/utils": "4.0.0-beta.8",
2323
"@types/cookie": "0.3.1",
2424
"@types/md5": "2.1.32",
2525
"@types/stack-trace": "0.0.29",

0 commit comments

Comments
 (0)