Going from the (query ...) and (mutation ...) syntax to strings and then to a document AST using graphql-tag seems unnecessary. We could go straight to a document AST by ourselves and develop a library to create/traverse/modify with these GraphQL documents. This could be useful in other places too (like in GraphQL servers written in ClojureScript).