Compiles GraphQL tagged template strings using graphql-tag.
Compiling GraphQL queries at the build time:
- reduces the script initialization time; and
- removes the
graphql-tag
dependency
Removing the graphql-tag
dependecy from the bundle saves approx. 50 KB.
- Searches for imports of
graphql-tag
and removes them. - Searches for tagged template literals with
gql
identifier and compiles them usinggraphql-tag
.
Input:
import gql from 'graphql-tag';
const foo = gql`query {bar}`;
Output:
const foo = {
"definitions": [
{
"directives": [
],
"kind": "OperationDefinition",
"operation": "query",
"selectionSet": {
"kind": "SelectionSet",
"selections": [
{
"alias": null,
"arguments": [
],
"directives": [
],
"kind": "Field",
"name": {
"kind": "Name",
"value": "bar"
},
"selectionSet": null
}
]
},
"variableDefinitions": [
]
}
],
"kind": "Document",
"loc": {
"end": 11,
"start": 0
}
};
Using GraphQL fragments requires to:
- Define a fragment using
graphql-tag
. - Append the referenced fragment as a variable to the end of the GraphQL query.
Example:
import gql from 'graphql-tag';
const bar = gql`
fragment barFragment on Foo {
field1
field2
}
`;
const foo = gql`
query foo {
foo {
...barFragment
}
}
${bar}
`;
importName
- The name of the module import to process (default = "graphql-tag")onlyMatchImportSuffix
- Matches the end of the import instead of the entire name. Useful for relative imports, e.g../utils/graphql
(default = false)strip
- Strips insignificant characters such as whitespace from a GraphQL string literal and returns that instead of the AST object, e.g.query foo{foo{bar baz}}
(default = false)