diff --git a/src/error/GraphQLError.js b/src/error/GraphQLError.js index d3068adacbf..7c5e74e73dd 100644 --- a/src/error/GraphQLError.js +++ b/src/error/GraphQLError.js @@ -102,11 +102,12 @@ export class GraphQLError extends Error { this.path = path ?? undefined; - this.extensions = extensions ?? {}; - const originalExtensions = originalError?.extensions; - if (isObjectLike(originalExtensions)) { + + if (extensions == null && isObjectLike(originalExtensions)) { this.extensions = { ...originalExtensions }; + } else { + this.extensions = extensions ?? {}; } // By being enumerable, JSON.stringify will include bellow properties in the resulting output. diff --git a/src/error/__tests__/GraphQLError-test.js b/src/error/__tests__/GraphQLError-test.js index 44fb505e123..d97a778a948 100644 --- a/src/error/__tests__/GraphQLError-test.js +++ b/src/error/__tests__/GraphQLError-test.js @@ -164,6 +164,70 @@ describe('GraphQLError', () => { } `); }); + + it('uses the provided extensions when original extensions are undefined', () => { + const original = new Error('original'); + console.log('Creating error 1'); + const graphqlError = new GraphQLError( + 'msg', + null, + null, + null, + null, + original, + { + someKey: 'someValue', + }, + ); + console.log('Creating error 2'); + + const e = new GraphQLError( + graphqlError.message, + null, + null, + null, + null, + graphqlError, + { correlationId: '123-echo-tango-delta' }, + ); + + expect(JSON.stringify(e.extensions, null, 2) + '\n').to.equal(dedent` + { + "correlationId": "123-echo-tango-delta" + } + `); + }); + + it('uses the provided extensions when original extensions are empty object', () => { + const original = new Error('original'); + const graphqlError = new GraphQLError( + 'msg', + null, + null, + null, + null, + original, + {}, + ); + expect(graphqlError.extensions).to.eql({}); + + const e = new GraphQLError( + graphqlError.message, + null, + null, + null, + null, + graphqlError, + { correlationId: '123-echo-tango-delta' }, + ); + expect(e.originalError.extensions).to.eql({}); + + expect(JSON.stringify(e.extensions, null, 2) + '\n').to.equal(dedent` + { + "correlationId": "123-echo-tango-delta" + } + `); + }); }); describe('printError', () => {