Skip to content

Commit

Permalink
GraphQLError: restore order of enumerable fields (#3335)
Browse files Browse the repository at this point in the history
  • Loading branch information
IvanGoncharov authored Oct 26, 2021
1 parent f49cf34 commit 6281c06
Show file tree
Hide file tree
Showing 2 changed files with 40 additions and 21 deletions.
3 changes: 2 additions & 1 deletion src/error/GraphQLError.js
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,6 @@ export class GraphQLError extends Error {
super(message);

this.name = 'GraphQLError';
this.path = path ?? undefined;
this.originalError = originalError ?? undefined;

// Compute list of blame nodes.
Expand All @@ -101,6 +100,8 @@ export class GraphQLError extends Error {
? positions.map((pos) => getLocation(source, pos))
: nodeLocations?.map((loc) => getLocation(loc.source, loc.start));

this.path = path ?? undefined;

this.extensions = extensions ?? {};

const originalExtensions = originalError?.extensions;
Expand Down
58 changes: 38 additions & 20 deletions src/error/__tests__/GraphQLError-test.js
Original file line number Diff line number Diff line change
Expand Up @@ -122,29 +122,47 @@ describe('GraphQLError', () => {
});
});

it('serializes to include message', () => {
const e = new GraphQLError('msg');
expect(JSON.stringify(e)).to.equal('{"message":"msg"}');
});
it('serializes to include all standard fields', () => {
const eShort = new GraphQLError('msg');
expect(JSON.stringify(eShort, null, 2) + '\n').to.equal(dedent`
{
"message": "msg"
}
`);

it('serializes to include message and locations', () => {
const e = new GraphQLError('msg', fieldNode);
expect(JSON.stringify(e)).to.equal(
'{"message":"msg","locations":[{"line":2,"column":3}]}',
const path = ['path', 2, 'field'];
const extensions = { foo: 'bar' };
const eFull = new GraphQLError(
'msg',
fieldNode,
undefined,
undefined,
path,
undefined,
extensions,
);
});

it('serializes to include path', () => {
const e = new GraphQLError('msg', null, null, null, [
'path',
3,
'to',
'field',
]);
expect(e).to.have.deep.property('path', ['path', 3, 'to', 'field']);
expect(JSON.stringify(e)).to.equal(
'{"message":"msg","path":["path",3,"to","field"]}',
);
// We should try to keep order of fields stable
// Changing it wouldn't be breaking change but will fail some tests in other libraries.
expect(JSON.stringify(eFull, null, 2) + '\n').to.equal(dedent`
{
"message": "msg",
"locations": [
{
"line": 2,
"column": 3
}
],
"path": [
"path",
2,
"field"
],
"extensions": {
"foo": "bar"
}
}
`);
});
});

Expand Down

0 comments on commit 6281c06

Please sign in to comment.