Skip to content

Commit 188122b

Browse files
GraphQLError: Fixed originalError.extensions overriding extensions argument to constructor (#3343)
Co-authored-by: Ivan Goncharov <[email protected]>
1 parent 7dc29fd commit 188122b

File tree

2 files changed

+64
-3
lines changed

2 files changed

+64
-3
lines changed

src/error/GraphQLError.js

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -102,11 +102,12 @@ export class GraphQLError extends Error {
102102

103103
this.path = path ?? undefined;
104104

105-
this.extensions = extensions ?? {};
106-
107105
const originalExtensions = originalError?.extensions;
108-
if (isObjectLike(originalExtensions)) {
106+
107+
if (extensions == null && isObjectLike(originalExtensions)) {
109108
this.extensions = { ...originalExtensions };
109+
} else {
110+
this.extensions = extensions ?? {};
110111
}
111112

112113
// By being enumerable, JSON.stringify will include bellow properties in the resulting output.

src/error/__tests__/GraphQLError-test.js

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,66 @@ describe('GraphQLError', () => {
122122
});
123123
});
124124

125+
it('defaults to original error extension only if extensions argument is not passed', () => {
126+
class ErrorWithExtensions extends Error {
127+
extensions: mixed;
128+
129+
constructor(message: string) {
130+
super(message);
131+
this.extensions = { original: 'extensions' };
132+
}
133+
}
134+
135+
const original = new ErrorWithExtensions('original');
136+
const inheritedExtensions = new GraphQLError(
137+
'InheritedExtensions',
138+
undefined,
139+
undefined,
140+
undefined,
141+
undefined,
142+
original,
143+
undefined,
144+
);
145+
146+
expect(inheritedExtensions).to.deep.include({
147+
message: 'InheritedExtensions',
148+
originalError: original,
149+
extensions: { original: 'extensions' },
150+
});
151+
152+
const ownExtensions = new GraphQLError(
153+
'OwnExtensions',
154+
undefined,
155+
undefined,
156+
undefined,
157+
undefined,
158+
original,
159+
{ own: 'extensions' },
160+
);
161+
162+
expect(ownExtensions).to.deep.include({
163+
message: 'OwnExtensions',
164+
originalError: original,
165+
extensions: { own: 'extensions' },
166+
});
167+
168+
const ownEmptyExtensions = new GraphQLError(
169+
'OwnEmptyExtensions',
170+
undefined,
171+
undefined,
172+
undefined,
173+
undefined,
174+
original,
175+
{},
176+
);
177+
178+
expect(ownEmptyExtensions).to.deep.include({
179+
message: 'OwnEmptyExtensions',
180+
originalError: original,
181+
extensions: {},
182+
});
183+
});
184+
125185
it('serializes to include all standard fields', () => {
126186
const eShort = new GraphQLError('msg');
127187
expect(JSON.stringify(eShort, null, 2) + '\n').to.equal(dedent`

0 commit comments

Comments
 (0)