async-graphql-parser 1.17.3

GraphQL query parser for async-graphql
Documentation
WHITESPACE = _{ " " | "," | "\t" | "\u{feff}" | NEWLINE }
COMMENT = _{ "#" ~ (!"\n" ~ ANY)* }

// value
int    = @{ "-"? ~ ("0" | (ASCII_NONZERO_DIGIT ~ ASCII_DIGIT*)) }
float  = @{ "-"? ~ int ~ "." ~ ASCII_DIGIT+ ~ exp? }
exp    = @{ ("E" | "e") ~ ("+" | "-")? ~ ASCII_DIGIT+ }

singleline_string = @{ "\"" ~ singleline_inner ~ "\"" }
singleline_inner  = @{ (!("\"" | "\\") ~ ANY)* ~ (escape ~ singleline_inner)? }
multiline_inner   = @{ (!("\"\"\"" | "\\") ~ ANY)* ~ (escape ~ multiline_inner)? }
multiline_string  = @{ "\"\"\"" ~ multiline_inner ~ "\"\"\"" }
string            = @{ multiline_string | singleline_string }
escape  = @{ "\\" ~ ("\"" | "\\" | "/" | "b" | "f" | "n" | "r" | "t" | unicode) }
unicode = @{ "u" ~ ASCII_HEX_DIGIT{4} }

boolean = { "true" | "false" }
null = { "null" }
name = @{ (ASCII_ALPHA | "_") ~ (ASCII_ALPHA | ASCII_DIGIT | "_")* }
variable = { "$" ~ name }

array = { "[" ~ value* ~ "]" }

pair = { name ~ ":" ~ value }
object = { "{" ~ pair* ~ "}" }

value = { object | array | variable | float | int | string | null | boolean | name }

// type
list_type = { "[" ~ type_ ~ "]" }
nonnull_type = { (list_type | name) ~ "!" }
type_ = { nonnull_type | list_type | name }

// query
arguments = { "(" ~ pair* ~ ")" }
directive = { "@" ~ name ~ arguments? }
directives = { directive* }
alias = { name ~ ":" }
field = { alias? ~ name ~ arguments? ~ directives? ~ selection_set? }
fragment_spread = { "..." ~ name ~ directives? }
type_condition = { "on" ~ name }
inline_fragment = { "..." ~ type_condition? ~ directives? ~ selection_set }
selection = { field | inline_fragment | fragment_spread }
selection_set = { "{" ~ selection+ ~ "}" }
operation_type = { "query" | "mutation" | "subscription" }
default_value = { "=" ~ value }
variable_definition = { variable ~ ":" ~ type_ ~ default_value? }
variable_definitions = { "(" ~ variable_definition* ~ ")" }
named_operation_definition = { operation_type ~ name? ~ variable_definitions? ~ directives? ~ selection_set }
fragment_definition = { "fragment" ~ name ~ type_condition ~ directives? ~ selection_set }
document = { SOI ~ (named_operation_definition | selection_set | fragment_definition)+ ~ EOI}