Skip to content

Commit c6cff48

Browse files
committed
Add ast toString returning query string
1 parent 5f9dc17 commit c6cff48

File tree

2 files changed

+20
-0
lines changed

2 files changed

+20
-0
lines changed

src/index.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
var parser = require('graphql/language/parser');
2+
var printer = require('graphql/language/printer');
23

34
var parse = parser.parse;
5+
var print = printer.print;
46

57
// Strip insignificant whitespace
68
// Note that this could do a lot more, such as reorder fields etc.
@@ -135,6 +137,7 @@ function parseDocument(doc) {
135137
// existing fragments of the same name
136138
parsed = processFragments(parsed);
137139
parsed = stripLoc(parsed, false);
140+
parsed.toString = function() { return print(this); };
138141
docCache[cacheKey] = parsed;
139142

140143
return parsed;

test/graphql.js

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ const gqlRequire = require('../src');
22
const gqlDefault = require('../src').default;
33
const loader = require('../loader');
44
const assert = require('chai').assert;
5+
const print = require('graphql/language/printer').print;
56

67
[gqlRequire, gqlDefault].forEach((gql, i) => {
78
describe(`gql ${i}`, () => {
@@ -438,6 +439,22 @@ const assert = require('chai').assert;
438439
});
439440
});
440441

442+
it('returned ast toString returns query string', () => {
443+
const query = `{ user(id: 5) { firstName lastName } }`;
444+
const doc = gql(query);
445+
446+
assert.equal(doc.toString(), print(doc));
447+
});
448+
449+
it('returned ast toString returns updated query string after ast mutation', () => {
450+
const query = `{ user(id: 5) { firstName lastName } }`;
451+
const doc = gql(query);
452+
453+
assert.equal(doc.toString().includes('user'), true);
454+
doc.definitions[0].selectionSet.selections[0].name.value = 'employee';
455+
assert.equal(doc.toString().includes('employee'), true);
456+
});
457+
441458
// How to make this work?
442459
// it.only('can reference a fragment passed as a document via shorthand', () => {
443460
// const ast = gql`

0 commit comments

Comments
 (0)