I am running Apollo lambda server for GraphQL. I want to intercept the GraphQL query/mutation from the POST request body and parse it so I can find out which query/mutation the
graphql-tag
is built upon the core graphql
library (and thus installs it along) - if you just want to get the type of operation and the name of it you can do so, by using graphql
directly and analyze the full AST of the parsed GraphQL operation:
const { parse } = require('graphql');
const query = `
{
qQueryEndpoint {
id
}
}
`;
const mutation = `
mutation {
saveSomething {
id
}
}
`;
const firstOperationDefinition = (ast) => ast.definitions[0];
const firstFieldValueNameFromOperation = (operationDefinition) => operationDefinition.selectionSet.selections[0].name.value;
const parsedQuery = parse(query);
const parsedMutation = parse(mutation);
console.log('operation', firstOperationDefinition(parsedQuery).operation);
console.log('firstFieldName', firstFieldValueNameFromOperation(firstOperationDefinition(parsedQuery)));
console.log('operation', firstOperationDefinition(parsedMutation).operation);
console.log('firstFieldName', firstFieldValueNameFromOperation(firstOperationDefinition(parsedMutation)));
That way you do not need to depend on graphql-tag
and you can use, the real GraphQL AST (and thus easily adapt to further requirements) - because graphql-tag
does not provide the full AST.
See the AST for the query in AST Explorer.