From 5c8e96572fffe917efaa485b567cf728fe4b9b94 Mon Sep 17 00:00:00 2001 From: Lucas Date: Mon, 22 Aug 2022 11:44:58 -0300 Subject: [PATCH 1/8] ignore empty StackTrace --- CHANGELOG.md | 1 + packages/integrations/src/rewriteframes.ts | 10 +++++----- .../integrations/test/rewriteframes.test.ts | 18 ++++++++++++++++++ 3 files changed, 24 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index da0e95f0abcf..e888d3639d69 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,7 @@ This release adds an environment check in `@sentry/nextjs` for Vercel deployments (using the `VERCEL_ENV` env variable), and only enables `SentryWebpackPlugin` if the environment is `production`. To override this, [setting `disableClientWebpackPlugin` or `disableServerWebpackPlugin` to `false`](https://docs.sentry.io/platforms/javascript/guides/nextjs/manual-setup/#disable-sentrywebpackplugin) now takes precedence over other checks, rather than being a no-op. Note: Overriding this is not recommended! It can increase build time and clog Release Health data in Sentry with inaccurate noise. +- fix(integration): exception.values.0.stacktrace.frames: Missing value for required attribute (?) - fix(nextjs): Don't run webpack plugin on non-prod Vercel deployments (#5603) ## 7.11.1 diff --git a/packages/integrations/src/rewriteframes.ts b/packages/integrations/src/rewriteframes.ts index 7b1129e45032..327c09a9bd95 100644 --- a/packages/integrations/src/rewriteframes.ts +++ b/packages/integrations/src/rewriteframes.ts @@ -97,7 +97,7 @@ export class RewriteFrames implements Integration { // eslint-disable-next-line @typescript-eslint/no-non-null-assertion values: event.exception!.values!.map(value => ({ ...value, - stacktrace: this._processStacktrace(value.stacktrace), + stacktrace: value.stacktrace ? this._processStacktrace(value.stacktrace) : undefined, // Avoid creating an empty stacktrace if undefined. })), }, }; @@ -108,9 +108,9 @@ export class RewriteFrames implements Integration { /** JSDoc */ private _processStacktrace(stacktrace?: Stacktrace): Stacktrace { - return { - ...stacktrace, - frames: stacktrace && stacktrace.frames && stacktrace.frames.map(f => this._iteratee(f)), - }; + return { + ...stacktrace, + frames: stacktrace && stacktrace.frames && stacktrace.frames.map(f => this._iteratee(f)), + }; } } diff --git a/packages/integrations/test/rewriteframes.test.ts b/packages/integrations/test/rewriteframes.test.ts index bbe0a157e44a..bd84f38ca921 100644 --- a/packages/integrations/test/rewriteframes.test.ts +++ b/packages/integrations/test/rewriteframes.test.ts @@ -4,6 +4,7 @@ import { RewriteFrames } from '../src/rewriteframes'; let rewriteFrames: RewriteFrames; let exceptionEvent: Event; +let exceptionWithoutStackTrace: Event; let windowsExceptionEvent: Event; let multipleStacktracesEvent: Event; @@ -31,6 +32,14 @@ describe('RewriteFrames', () => { ], }, }; + exceptionWithoutStackTrace = { + exception: { + values: [ + { + }, + ], + } + }; multipleStacktracesEvent = { exception: { values: [ @@ -64,6 +73,15 @@ describe('RewriteFrames', () => { expect(event.exception!.values![0].stacktrace!.frames![0].filename).toEqual('app:///file1.js'); expect(event.exception!.values![0].stacktrace!.frames![1].filename).toEqual('app:///file2.js'); }); + + + it('ignore exception without StackTrace', () => { + //@ts-ignore Validates that the Stacktrace doesnt exist before validating the test. + expect(exceptionWithoutStackTrace.exception?.values[0].stacktrace).toEqual(undefined); + const event = rewriteFrames.process(exceptionWithoutStackTrace); + expect(event.exception!.values![0].stacktrace).toEqual(undefined); + }); + }); describe('default iteratee prepends custom prefix to basename if frame starts with `/`', () => { From 3a11954f304e19be9949371e0d1075f5f25ab963 Mon Sep 17 00:00:00 2001 From: Lucas Date: Mon, 22 Aug 2022 11:50:59 -0300 Subject: [PATCH 2/8] update git number --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index e888d3639d69..e353ad6a70b2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,7 +6,7 @@ This release adds an environment check in `@sentry/nextjs` for Vercel deployments (using the `VERCEL_ENV` env variable), and only enables `SentryWebpackPlugin` if the environment is `production`. To override this, [setting `disableClientWebpackPlugin` or `disableServerWebpackPlugin` to `false`](https://docs.sentry.io/platforms/javascript/guides/nextjs/manual-setup/#disable-sentrywebpackplugin) now takes precedence over other checks, rather than being a no-op. Note: Overriding this is not recommended! It can increase build time and clog Release Health data in Sentry with inaccurate noise. -- fix(integration): exception.values.0.stacktrace.frames: Missing value for required attribute (?) +- fix(integration): exception.values.0.stacktrace.frames: Missing value for required attribute (#5625) - fix(nextjs): Don't run webpack plugin on non-prod Vercel deployments (#5603) ## 7.11.1 From c9e725b3eab1281332c245da5061a2c459d36a30 Mon Sep 17 00:00:00 2001 From: Lucas Date: Mon, 22 Aug 2022 11:54:07 -0300 Subject: [PATCH 3/8] review nits --- packages/integrations/src/rewriteframes.ts | 12 ++++++------ packages/integrations/test/rewriteframes.test.ts | 2 +- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/packages/integrations/src/rewriteframes.ts b/packages/integrations/src/rewriteframes.ts index 327c09a9bd95..11517f5e4d08 100644 --- a/packages/integrations/src/rewriteframes.ts +++ b/packages/integrations/src/rewriteframes.ts @@ -77,8 +77,8 @@ export class RewriteFrames implements Integration { if (isWindowsFrame || startsWithSlash) { const filename = isWindowsFrame ? frame.filename - .replace(/^[A-Z]:/, '') // remove Windows-style prefix - .replace(/\\/g, '/') // replace all `\\` instances with `/` + .replace(/^[A-Z]:/, '') // remove Windows-style prefix + .replace(/\\/g, '/') // replace all `\\` instances with `/` : frame.filename; const base = this._root ? relative(this._root, filename) : basename(filename); frame.filename = `${this._prefix}${base}`; @@ -108,9 +108,9 @@ export class RewriteFrames implements Integration { /** JSDoc */ private _processStacktrace(stacktrace?: Stacktrace): Stacktrace { - return { - ...stacktrace, - frames: stacktrace && stacktrace.frames && stacktrace.frames.map(f => this._iteratee(f)), - }; + return { + ...stacktrace, + frames: stacktrace && stacktrace.frames && stacktrace.frames.map(f => this._iteratee(f)), + }; } } diff --git a/packages/integrations/test/rewriteframes.test.ts b/packages/integrations/test/rewriteframes.test.ts index bd84f38ca921..415c86041db3 100644 --- a/packages/integrations/test/rewriteframes.test.ts +++ b/packages/integrations/test/rewriteframes.test.ts @@ -76,7 +76,7 @@ describe('RewriteFrames', () => { it('ignore exception without StackTrace', () => { - //@ts-ignore Validates that the Stacktrace doesnt exist before validating the test. + //@ts-ignore Validates that the Stacktrace does not exist before validating the test. expect(exceptionWithoutStackTrace.exception?.values[0].stacktrace).toEqual(undefined); const event = rewriteFrames.process(exceptionWithoutStackTrace); expect(event.exception!.values![0].stacktrace).toEqual(undefined); From 790b3464f519113d6c6b920b41c465ce31a8c311 Mon Sep 17 00:00:00 2001 From: Lucas Date: Mon, 22 Aug 2022 11:56:25 -0300 Subject: [PATCH 4/8] review nits --- packages/integrations/test/rewriteframes.test.ts | 2 -- 1 file changed, 2 deletions(-) diff --git a/packages/integrations/test/rewriteframes.test.ts b/packages/integrations/test/rewriteframes.test.ts index 415c86041db3..3e9c24a42a7e 100644 --- a/packages/integrations/test/rewriteframes.test.ts +++ b/packages/integrations/test/rewriteframes.test.ts @@ -74,14 +74,12 @@ describe('RewriteFrames', () => { expect(event.exception!.values![0].stacktrace!.frames![1].filename).toEqual('app:///file2.js'); }); - it('ignore exception without StackTrace', () => { //@ts-ignore Validates that the Stacktrace does not exist before validating the test. expect(exceptionWithoutStackTrace.exception?.values[0].stacktrace).toEqual(undefined); const event = rewriteFrames.process(exceptionWithoutStackTrace); expect(event.exception!.values![0].stacktrace).toEqual(undefined); }); - }); describe('default iteratee prepends custom prefix to basename if frame starts with `/`', () => { From d6d147c13a182f44a8dfa25a65ad772fec11d68e Mon Sep 17 00:00:00 2001 From: Lucas Date: Wed, 24 Aug 2022 11:03:23 -0300 Subject: [PATCH 5/8] fix prettier --- packages/integrations/src/rewriteframes.ts | 4 ++-- packages/integrations/test/rewriteframes.test.ts | 9 +++------ 2 files changed, 5 insertions(+), 8 deletions(-) diff --git a/packages/integrations/src/rewriteframes.ts b/packages/integrations/src/rewriteframes.ts index 11517f5e4d08..8db816dcc3c2 100644 --- a/packages/integrations/src/rewriteframes.ts +++ b/packages/integrations/src/rewriteframes.ts @@ -77,8 +77,8 @@ export class RewriteFrames implements Integration { if (isWindowsFrame || startsWithSlash) { const filename = isWindowsFrame ? frame.filename - .replace(/^[A-Z]:/, '') // remove Windows-style prefix - .replace(/\\/g, '/') // replace all `\\` instances with `/` + .replace(/^[A-Z]:/, '') // remove Windows-style prefix + .replace(/\\/g, '/') // replace all `\\` instances with `/` : frame.filename; const base = this._root ? relative(this._root, filename) : basename(filename); frame.filename = `${this._prefix}${base}`; diff --git a/packages/integrations/test/rewriteframes.test.ts b/packages/integrations/test/rewriteframes.test.ts index 3e9c24a42a7e..78aeec7949d4 100644 --- a/packages/integrations/test/rewriteframes.test.ts +++ b/packages/integrations/test/rewriteframes.test.ts @@ -34,11 +34,8 @@ describe('RewriteFrames', () => { }; exceptionWithoutStackTrace = { exception: { - values: [ - { - }, - ], - } + values: [{}], + }, }; multipleStacktracesEvent = { exception: { @@ -75,7 +72,7 @@ describe('RewriteFrames', () => { }); it('ignore exception without StackTrace', () => { - //@ts-ignore Validates that the Stacktrace does not exist before validating the test. + // @ts-ignore Validates that the Stacktrace does not exist before validating the test. expect(exceptionWithoutStackTrace.exception?.values[0].stacktrace).toEqual(undefined); const event = rewriteFrames.process(exceptionWithoutStackTrace); expect(event.exception!.values![0].stacktrace).toEqual(undefined); From ce73e966b362398477150ef5c4e2f5345102ca66 Mon Sep 17 00:00:00 2001 From: LucasZF Date: Tue, 30 Aug 2022 21:02:34 +0900 Subject: [PATCH 6/8] Update packages/integrations/src/rewriteframes.ts Co-authored-by: Abhijeet Prasad --- packages/integrations/src/rewriteframes.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/integrations/src/rewriteframes.ts b/packages/integrations/src/rewriteframes.ts index 8db816dcc3c2..1e419399d73f 100644 --- a/packages/integrations/src/rewriteframes.ts +++ b/packages/integrations/src/rewriteframes.ts @@ -97,7 +97,7 @@ export class RewriteFrames implements Integration { // eslint-disable-next-line @typescript-eslint/no-non-null-assertion values: event.exception!.values!.map(value => ({ ...value, - stacktrace: value.stacktrace ? this._processStacktrace(value.stacktrace) : undefined, // Avoid creating an empty stacktrace if undefined. + ...(value.stacktrace && { stacktrace: this._processStacktrace(value.stacktrace) }), })), }, }; From ae1e0031e6384c429052acfa7b66ffac42650341 Mon Sep 17 00:00:00 2001 From: Lucas Date: Tue, 30 Aug 2022 09:58:02 -0300 Subject: [PATCH 7/8] fix lint --- packages/integrations/src/rewriteframes.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/integrations/src/rewriteframes.ts b/packages/integrations/src/rewriteframes.ts index 1e419399d73f..b5b830eb557e 100644 --- a/packages/integrations/src/rewriteframes.ts +++ b/packages/integrations/src/rewriteframes.ts @@ -97,7 +97,7 @@ export class RewriteFrames implements Integration { // eslint-disable-next-line @typescript-eslint/no-non-null-assertion values: event.exception!.values!.map(value => ({ ...value, - ...(value.stacktrace && { stacktrace: this._processStacktrace(value.stacktrace) }), + ...(value.stacktrace && { stacktrace: this._processStacktrace(value.stacktrace) }), })), }, }; From 2b757768ff35fff6755babf9a6b6f5e82f63a4df Mon Sep 17 00:00:00 2001 From: Abhijeet Prasad Date: Tue, 30 Aug 2022 11:39:39 -0400 Subject: [PATCH 8/8] Update CHANGELOG.md --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index e353ad6a70b2..b0c2152420fb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,7 +6,7 @@ This release adds an environment check in `@sentry/nextjs` for Vercel deployments (using the `VERCEL_ENV` env variable), and only enables `SentryWebpackPlugin` if the environment is `production`. To override this, [setting `disableClientWebpackPlugin` or `disableServerWebpackPlugin` to `false`](https://docs.sentry.io/platforms/javascript/guides/nextjs/manual-setup/#disable-sentrywebpackplugin) now takes precedence over other checks, rather than being a no-op. Note: Overriding this is not recommended! It can increase build time and clog Release Health data in Sentry with inaccurate noise. -- fix(integration): exception.values.0.stacktrace.frames: Missing value for required attribute (#5625) +- fix(integrations): Don't add empty stack trace in `RewriteFrames` (#5625) - fix(nextjs): Don't run webpack plugin on non-prod Vercel deployments (#5603) ## 7.11.1