Skip to content

Commit b1ce2c3

Browse files
GraphQLError: keep extensions always present (graphql#3313)
1 parent 82900fa commit b1ce2c3

File tree

3 files changed

+10
-5
lines changed

3 files changed

+10
-5
lines changed

src/error/GraphQLError.ts

+3-3
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ export class GraphQLError extends Error {
6161
/**
6262
* Extension fields to add to the formatted error.
6363
*/
64-
readonly extensions: { [key: string]: unknown } | undefined;
64+
readonly extensions: { [key: string]: unknown };
6565

6666
constructor(
6767
message: string,
@@ -124,7 +124,7 @@ export class GraphQLError extends Error {
124124
? originalError?.extensions
125125
: undefined;
126126
// TODO: merge `extensions` and `originalExtensions`
127-
this.extensions = extensions ?? originalExtensions;
127+
this.extensions = extensions ?? originalExtensions ?? Object.create(null);
128128

129129
// Include (non-enumerable) stack trace.
130130
if (originalError?.stack) {
@@ -183,7 +183,7 @@ export class GraphQLError extends Error {
183183
formattedError.path = this.path;
184184
}
185185

186-
if (this.extensions != null) {
186+
if (this.extensions != null && Object.keys(this.extensions).length > 0) {
187187
formattedError.extensions = this.extensions;
188188
}
189189

src/error/__tests__/GraphQLError-test.ts

+6-2
Original file line numberDiff line numberDiff line change
@@ -28,10 +28,14 @@ describe('GraphQLError', () => {
2828
expect(new GraphQLError('str')).to.be.instanceof(GraphQLError);
2929
});
3030

31-
it('has a name, message, and stack trace', () => {
31+
it('has a name, message, extensions, and stack trace', () => {
3232
const e = new GraphQLError('msg');
3333

34-
expect(e).to.include({ name: 'GraphQLError', message: 'msg' });
34+
expect(e).to.deep.include({
35+
name: 'GraphQLError',
36+
message: 'msg',
37+
extensions: {},
38+
});
3539
expect(e.stack).to.be.a('string');
3640
});
3741

tsconfig.json

+1
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
"useUnknownInCatchVariables": false,
99
"noEmit": true,
1010
"isolatedModules": true,
11+
"importsNotUsedAsValues": "error",
1112
"forceConsistentCasingInFileNames": true
1213
}
1314
}

0 commit comments

Comments
 (0)