Skip to content

Commit f49cf34

Browse files
GraphQLError: keep extensions always present (#3334)
1 parent d8ca570 commit f49cf34

File tree

4 files changed

+13
-8
lines changed

4 files changed

+13
-8
lines changed

src/error/GraphQLError.d.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ export class GraphQLError extends Error {
3131
positions?: Maybe<ReadonlyArray<number>>,
3232
path?: Maybe<ReadonlyArray<string | number>>,
3333
originalError?: Maybe<Error>,
34-
extensions?: Maybe<{ [key: string]: GraphQLErrorExtensions }>,
34+
extensions?: Maybe<GraphQLErrorExtensions>,
3535
);
3636

3737
/**
@@ -81,7 +81,7 @@ export class GraphQLError extends Error {
8181
/**
8282
* Extension fields to add to the formatted error.
8383
*/
84-
readonly extensions: { [key: string]: any } | undefined;
84+
readonly extensions: { [key: string]: any };
8585
}
8686

8787
/**

src/error/GraphQLError.js

+4-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-
+extensions: { [key: string]: mixed, ... } | void;
64+
+extensions: { [key: string]: mixed, ... };
6565

6666
constructor(
6767
message: string,
@@ -101,7 +101,7 @@ export class GraphQLError extends Error {
101101
? positions.map((pos) => getLocation(source, pos))
102102
: nodeLocations?.map((loc) => getLocation(loc.source, loc.start));
103103

104-
this.extensions = extensions ?? undefined;
104+
this.extensions = extensions ?? {};
105105

106106
const originalExtensions = originalError?.extensions;
107107
if (isObjectLike(originalExtensions)) {
@@ -119,7 +119,8 @@ export class GraphQLError extends Error {
119119
enumerable: this.path != null,
120120
},
121121
extensions: {
122-
enumerable: this.extensions != null,
122+
enumerable:
123+
this.extensions != null && Object.keys(this.extensions).length > 0,
123124
},
124125
name: { enumerable: false },
125126
nodes: { enumerable: false },

src/error/__tests__/GraphQLError-test.js

+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

src/error/formatError.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ export function formatError(error: GraphQLError): GraphQLFormattedError {
1515
const path = error.path;
1616
const extensions = error.extensions;
1717

18-
return extensions
18+
return extensions && Object.keys(extensions).length > 0
1919
? { message, locations, path, extensions }
2020
: { message, locations, path };
2121
}

0 commit comments

Comments
 (0)