From 43e1f84c8f2104acc75962a1585040092bf95fd6 Mon Sep 17 00:00:00 2001 From: Luca Forstner Date: Wed, 7 Sep 2022 10:50:22 +0000 Subject: [PATCH 1/2] fix(node): Use `normalizeDepth` option when creating an event from a plain object --- packages/browser/src/eventbuilder.ts | 7 +- .../browser/test/unit/eventbuilder.test.ts | 64 +++++++++++++++++++ 2 files changed, 70 insertions(+), 1 deletion(-) create mode 100644 packages/browser/test/unit/eventbuilder.test.ts diff --git a/packages/browser/src/eventbuilder.ts b/packages/browser/src/eventbuilder.ts index 2324fcd8b296..d089a5b670e0 100644 --- a/packages/browser/src/eventbuilder.ts +++ b/packages/browser/src/eventbuilder.ts @@ -1,3 +1,4 @@ +import { getCurrentHub } from '@sentry/core'; import { Event, EventHint, Exception, Severity, SeverityLevel, StackFrame, StackParser } from '@sentry/types'; import { addExceptionMechanism, @@ -45,6 +46,10 @@ export function eventFromPlainObject( syntheticException?: Error, isUnhandledRejection?: boolean, ): Event { + const hub = getCurrentHub(); + const client = hub.getClient(); + const normalizeDepth = client && client.getOptions().normalizeDepth; + const event: Event = { exception: { values: [ @@ -57,7 +62,7 @@ export function eventFromPlainObject( ], }, extra: { - __serialized__: normalizeToSize(exception), + __serialized__: normalizeToSize(exception, normalizeDepth), }, }; diff --git a/packages/browser/test/unit/eventbuilder.test.ts b/packages/browser/test/unit/eventbuilder.test.ts new file mode 100644 index 000000000000..f75a264e9ea3 --- /dev/null +++ b/packages/browser/test/unit/eventbuilder.test.ts @@ -0,0 +1,64 @@ +import { Client } from '@sentry/types'; + +import { defaultStackParser } from '../../src'; +import { eventFromPlainObject } from '../../src/eventbuilder'; + +jest.mock('@sentry/hub', () => { + const original = jest.requireActual('@sentry/hub'); + return { + ...original, + getCurrentHub(): { + getClient(): Client; + } { + return { + getClient(): any { + return { + getOptions(): any { + return { normalizeDepth: 6 }; + }, + }; + }, + }; + }, + }; +}); + +afterEach(() => { + jest.resetAllMocks(); +}); + +describe('eventFromPlainObject', () => { + it('should use normalizeDepth from init options', () => { + const deepObject = { + a: { + b: { + c: { + d: { + e: { + f: { + g: 'foo', + }, + }, + }, + }, + }, + }, + }; + + const event = eventFromPlainObject(defaultStackParser, deepObject); + + expect(event?.extra?.__serialized__).toEqual({ + a: { + b: { + c: { + d: { + e: { + f: '[Object]', + }, + }, + }, + }, + }, + }); + }); +}); From 4a5d55191df66ab9199c55220dfa7230000f57e9 Mon Sep 17 00:00:00 2001 From: Luca Forstner Date: Wed, 7 Sep 2022 10:52:28 +0000 Subject: [PATCH 2/2] mock core instead of hub --- packages/browser/test/unit/eventbuilder.test.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/browser/test/unit/eventbuilder.test.ts b/packages/browser/test/unit/eventbuilder.test.ts index f75a264e9ea3..62a70a4b2740 100644 --- a/packages/browser/test/unit/eventbuilder.test.ts +++ b/packages/browser/test/unit/eventbuilder.test.ts @@ -3,8 +3,8 @@ import { Client } from '@sentry/types'; import { defaultStackParser } from '../../src'; import { eventFromPlainObject } from '../../src/eventbuilder'; -jest.mock('@sentry/hub', () => { - const original = jest.requireActual('@sentry/hub'); +jest.mock('@sentry/core', () => { + const original = jest.requireActual('@sentry/core'); return { ...original, getCurrentHub(): {