The Hot Chocolate parser is a port from the graphql-js
reference implementation. We are constantly updating the lexer and parser to keep up with new spec features in order to keep it the fastest and most feature complete GraphQL parser in .NET.
Getting Started
If you want to build GraphQL tooling for .NET or your own type system and query-engine feel free to built on top of the Hot Chocolate parser.
In order to use the parser, install the following package:
dotnet add package HotChocolate.Language
In order to parse a GraphQL schema or query use it like the following:
Parser parser = new Parser();DocumentNode document = parser.Parse("{ x { y } }");
We have created some visitor classes in order to make it easy to traverse the parsed syntax nodes.
Important Base Classes
Here are some important base classes:
SyntaxVisitor
The SyntaxVisitor
provides the basic visitation methods without any functionality to traverse the tree.
SyntaxWalkerBase
The SyntaxWalkerBase
built upon the SyntaxVisitor
and adds basic functionality like VisitMany
for traversing syntax nodes.
SchemaSyntaxWalker
The SchemaSyntaxWalker
built upon the SyntaxWalkerBase
and adds functionality to automatically traverse type system syntax nodes. This syntax walker ignores query syntax nodes.
In order to visit a specific type definition syntax node override the related visitation node and add your code. If you want the syntax walker to keep traversing after your code has been executed invoke the original method implementation of the visitation-method after or before your code.
protected override void VisitDirectiveDefinition( DirectiveDefinitionNode node, YourContextType context){ _visited.Add(nameof(VisitDirectiveDefinition)); base.VisitDirectiveDefinition(node);}
SchemaSerializer
The SchemaSerializer
is built upon the SchemaSyntaxWalker
and serializes specific type definition syntax nodes to a GraphQL SDL. So, it is basically doing the reverse of the parser. With this you are able to modify a syntax graph and than serializing it back to a GraphQL string.
QuerySyntaxWalker
The QuerySyntaxWalker
built upon the SyntaxWalkerBase
and adds functionality to automatically traverse query syntax nodes. This syntax walker ignores type system syntax nodes.
QuerySerializer
The QuerySerializer
is built upon the QuerySyntaxWalker
and serializes query syntax nodes to a GraphQL query string. With this you are able to modify a syntax graph and than serialize it back to a GraphQL string.
We are also providing a set of rewriter base classes that basically represent a visitor that produces a new graph by visiting the various nodes.
What's Coming Next
We have started work on our high-performance parser that will boost stitching performance as well as normal execution of queries.