To get started with this project, you likely already have a list of files that you want to parse, something like the following groups.
files/Authors.graphql
query GetAuthors {
authors {
... AuthorFragment
books {
... BookFragment
}
}
}
fragment AuthorFragment on Author {
id
name
email
}
files/Books.graphql
query GetBooks {
books {
... BookFragment
}
}
fragment BookFragment on Book {
id
name
date
publisher
}
files/Bookstore.graphql
query GetBooksFromBookstore {
topSellers {
... BookFragment
authors {
... AuthorFragment
}
}
}
We can then use the graphql-query-parser
to extract the executable queries as follows.
import { GraphQLQueryParser } from 'graphql-query-parser';
async function findQueries(directory) {
return await GraphQLQueryParser.parse(directory);
}
(async function() {
const results = await findQueries('files/');
results.forEach((result, idx) => {
console.log("\nQuery %s: \n%s", idx, result);
});
});
We would see the following results:
Query 0:
query GetAuthors {
authors {
... AuthorFragment
books {
... BookFragment
}
}
}
fragment AuthorFragment on Author {
id
name
email
}
fragment BookFragment on Book {
id
name
date
publisher
}
Query 1:
query GetBooks {
books {
... BookFragment
}
}
fragment BookFragment on Book {
id
name
date
publisher
}
Query 2:
query GetBooksFromBookstore {
topSellers {
... BookFragment
authors {
... AuthorFragment
}
}
}
fragment BookFragment on Book {
id
name
date
publisher
}
fragment AuthorFragment on Author {
id
name
email
}