From b1ce2c3567fc34f351fe20cc73d098bfdd474ebc Mon Sep 17 00:00:00 2001 From: Ivan Goncharov Date: Wed, 13 Oct 2021 11:50:54 +0300 Subject: [PATCH] GraphQLError: keep extensions always present (#3313) --- src/error/GraphQLError.ts | 6 +++--- src/error/__tests__/GraphQLError-test.ts | 8 ++++++-- tsconfig.json | 1 + 3 files changed, 10 insertions(+), 5 deletions(-) diff --git a/src/error/GraphQLError.ts b/src/error/GraphQLError.ts index 80bb9fcba3..59b74e1648 100644 --- a/src/error/GraphQLError.ts +++ b/src/error/GraphQLError.ts @@ -61,7 +61,7 @@ export class GraphQLError extends Error { /** * Extension fields to add to the formatted error. */ - readonly extensions: { [key: string]: unknown } | undefined; + readonly extensions: { [key: string]: unknown }; constructor( message: string, @@ -124,7 +124,7 @@ export class GraphQLError extends Error { ? originalError?.extensions : undefined; // TODO: merge `extensions` and `originalExtensions` - this.extensions = extensions ?? originalExtensions; + this.extensions = extensions ?? originalExtensions ?? Object.create(null); // Include (non-enumerable) stack trace. if (originalError?.stack) { @@ -183,7 +183,7 @@ export class GraphQLError extends Error { formattedError.path = this.path; } - if (this.extensions != null) { + if (this.extensions != null && Object.keys(this.extensions).length > 0) { formattedError.extensions = this.extensions; } diff --git a/src/error/__tests__/GraphQLError-test.ts b/src/error/__tests__/GraphQLError-test.ts index ca5679710e..dc7a887f5b 100644 --- a/src/error/__tests__/GraphQLError-test.ts +++ b/src/error/__tests__/GraphQLError-test.ts @@ -28,10 +28,14 @@ describe('GraphQLError', () => { expect(new GraphQLError('str')).to.be.instanceof(GraphQLError); }); - it('has a name, message, and stack trace', () => { + it('has a name, message, extensions, and stack trace', () => { const e = new GraphQLError('msg'); - expect(e).to.include({ name: 'GraphQLError', message: 'msg' }); + expect(e).to.deep.include({ + name: 'GraphQLError', + message: 'msg', + extensions: {}, + }); expect(e.stack).to.be.a('string'); }); diff --git a/tsconfig.json b/tsconfig.json index 7f3fef7346..8dfb0f4794 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -8,6 +8,7 @@ "useUnknownInCatchVariables": false, "noEmit": true, "isolatedModules": true, + "importsNotUsedAsValues": "error", "forceConsistentCasingInFileNames": true } }