GraphQL-Parser
9.0.0
See the version list below for details.
dotnet add package GraphQL-Parser --version 9.0.0
NuGet\Install-Package GraphQL-Parser -Version 9.0.0
<PackageReference Include="GraphQL-Parser" Version="9.0.0" />
paket add GraphQL-Parser --version 9.0.0
#r "nuget: GraphQL-Parser, 9.0.0"
// Install GraphQL-Parser as a Cake Addin #addin nuget:?package=GraphQL-Parser&version=9.0.0 // Install GraphQL-Parser as a Cake Tool #tool nuget:?package=GraphQL-Parser&version=9.0.0
GraphQL.NET Parser
This library contains a lexer and parser as well as the complete GraphQL AST model that allows you to work with GraphQL documents compatible with the October 2021 spec.
The parser from this library is used by the GraphQL.NET project and was verified by many test data sets.
Preview versions of this package are available on GitHub Packages.
1. Lexer
Generates token based on input text. Lexer takes advantage of ReadOnlyMemory<char>
and in most cases
does not allocate memory on the managed heap at all.
Usage
var token = Lexer.Lex("\"str\"");
Lex method always returns the first token it finds. In this case case the result would look like following.
2. Parser
Parses provided GraphQL expression into AST (abstract syntax tree). Parser also takes advantage of
ReadOnlyMemory<char>
but still allocates memory for AST.
Usage
var ast1 = Parser.Parse(@"
{
field
}");
var ast2 = Parser.Parse(@"
{
field
}", new ParserOptions { Ignore = IgnoreOptions.Comments });
By default ParserOptions.Ignore
is IgnoreOptions.None
. If you want
to ignore all comments use IgnoreOptions.Comments
. If you don't need
information about tokens locations in the source document, then use flag
IgnoreOptions.Locations
. Or just use IgnoreOptions.All
and this
will maximize the saving of memory allocated in the managed heap for AST.
You can parse not only entire GraphQLDocument
but also concrete AST
nodes. Use generic overload.
string text1 = "enum Color { RED }"
var ast1 = Parser.Parse<GraphQLEnumTypeDefinition>(text1);
string text2 = "{ a: 1, b: \"abc\", c: RED, d: $id }";
var ast2 = Parser.Parse<GraphQLValue>(text2); // returns GraphQLObjectValue
3. ASTVisitor
ASTVisitor
provides API to traverse AST of the parsed GraphQL document.
Default implementation traverses all AST nodes of the provided one. You can
inherit from it and override desired methods to implement your own AST
processing algorithm.
For printing SDL from AST, you can use SDLPrinter
. This is a highly
optimized visitor for asynchronous non-blocking SDL output into provided
TextWriter
. In the majority of cases it does not allocate memory in
the managed heap at all.
You can also find a StructurePrinter
visitor that prints AST into the
provided TextWriter
as a hierarchy of node types. It can be useful
when debugging for better understanding the AST structure.
Consider GraphQL document
query a { name age }
After StructurePrinter
processing the output text will be
Document
OperationDefinition
Name [a]
SelectionSet
Field
Name [name]
Field
Name [age]
Usage
public static async Task Print(string text)
{
using var document = Parser.Parse(text);
var writer = new StringWriter();
var printer = new SDLPrinter()
await printer.PrintAsync(document, writer);
var rendered = writer.ToString();
Console.WriteLine(rendered);
}
Contributors
This project exists thanks to all the people who contribute. <a href="https://github.com/graphql-dotnet/parser/graphs/contributors"><img src="https://contributors-img.web.app/image?repo=graphql-dotnet/parser" /></a>
PRs are welcome! Looking for something to work on? The list of open issues is a great place to start. You can help the project by simply responding to some of the asked questions.
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net5.0 was computed. net5.0-windows was computed. net6.0 is compatible. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 was computed. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. |
.NET Core | netcoreapp2.0 was computed. netcoreapp2.1 was computed. netcoreapp2.2 was computed. netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
.NET Standard | netstandard2.0 is compatible. netstandard2.1 is compatible. |
.NET Framework | net461 was computed. net462 was computed. net463 was computed. net47 was computed. net471 was computed. net472 was computed. net48 was computed. net481 was computed. |
MonoAndroid | monoandroid was computed. |
MonoMac | monomac was computed. |
MonoTouch | monotouch was computed. |
Tizen | tizen40 was computed. tizen60 was computed. |
Xamarin.iOS | xamarinios was computed. |
Xamarin.Mac | xamarinmac was computed. |
Xamarin.TVOS | xamarintvos was computed. |
Xamarin.WatchOS | xamarinwatchos was computed. |
-
.NETStandard 2.0
- System.Memory (>= 4.5.5)
- System.Threading.Tasks.Extensions (>= 4.5.4)
-
.NETStandard 2.1
- No dependencies.
-
net6.0
- No dependencies.
NuGet packages (20)
Showing the top 5 NuGet packages that depend on GraphQL-Parser:
Package | Downloads |
---|---|
GraphQL
GraphQL for .NET |
|
HQ
This package contains the full-stack build for HQ.io. |
|
CoreSharp.GraphQL
GraphQL CQRS integration and extension |
|
SER.Graphql.Reflection.NetCore
This is a complement to graphql-dotnet (https://github.com/graphql-dotnet/graphql-dotnet) to avoid boilerplate |
|
Friflo.Json.Fliox.Hub.GraphQL
GraphQL API for a JSON Fliox Hub |
GitHub repositories (6)
Showing the top 5 popular GitHub repositories that depend on GraphQL-Parser:
Repository | Stars |
---|---|
graphql-dotnet/graphql-dotnet
GraphQL for .NET
|
|
byme8/ZeroQL
C# GraphQL client with Linq-like syntax
|
|
graphql-dotnet/examples
Examples for GraphQL.NET
|
|
friflo/Friflo.Json.Fliox
C# ECS + ORM
|
|
nightroman/FarNet
Far Manager framework for .NET modules and scripts in PowerShell, F#, JavaScript.
|
Version | Downloads | Last updated |
---|---|---|
9.5.0 | 174,143 | 8/20/2024 |
9.4.0 | 2,322 | 8/18/2024 |
9.3.1 | 165,848 | 12/11/2023 |
9.3.0 | 52,811 | 10/16/2023 |
9.2.1 | 4,265 | 10/12/2023 |
9.2.0 | 797,284 | 7/26/2023 |
9.1.0 | 40,831 | 4/21/2023 |
9.0.2 | 972 | 4/21/2023 |
9.0.1 | 765 | 4/20/2023 |
9.0.0 | 762 | 4/20/2023 |
8.4.2 | 1,028,172 | 12/11/2023 |
8.4.1 | 2,552 | 10/12/2023 |
8.4.0 | 610,883 | 7/26/2023 |
8.3.0 | 6,454,858 | 4/21/2023 |
8.2.0 | 2,685 | 4/15/2023 |
8.1.0 | 1,997,131 | 8/15/2022 |
8.0.0 | 3,441,727 | 3/30/2022 |
7.2.0 | 5,259,863 | 7/7/2021 |
7.1.0 | 1,288,742 | 4/7/2021 |
7.0.0 | 1,286,413 | 3/9/2021 |
6.0.0 | 45,663 | 1/4/2021 |
5.3.3 | 3,772,612 | 10/10/2020 |
5.3.2 | 1,559 | 10/8/2020 |
5.3.1 | 1,597 | 10/8/2020 |
5.3.0 | 1,029,454 | 8/18/2020 |
5.2.0 | 5,118 | 8/8/2020 |
5.1.2 | 191,305 | 5/5/2020 |
5.1.0 | 263,438 | 2/19/2020 |
4.1.2 | 297,419 | 10/25/2019 |
4.1.1 | 346,458 | 7/3/2019 |
4.1.0 | 50,798 | 6/7/2019 |
4.0.0 | 102,385 | 5/6/2019 |
3.1.0-preview-39 | 1,099 | 3/21/2019 |
3.0.0 | 8,965,842 | 9/8/2017 |
2.0.0 | 364,611 | 10/14/2016 |
1.0.0 | 20,120 | 8/7/2016 |