Abstract Syntax Tree (AST)

Hot Chocolate seems to focus solely around ObjectType, InputType et al. These types work as an interface to configure the GraphQL schema. This schema is used to parse and validate incoming requests. Under the hood, every query, mutation or subscription request is parsed into a so-called abstract syntax tree. Each node of this tree denotes a part of the incoming GraphQL query.

query Users {
address {
FieldNode (userName)
FieldNode (address)
FieldNode (street)
FieldNode (nr)

Syntax Node

Every node in a syntax tree implements ISyntaxNode.

💡 The ToString method of a syntax node prints the corresponding GraphQL syntax.

This interface defines the NodeKind of the node.

Node Kinds:

NameDescription (Spec Link)ContextExample
NameAll names. e.g. Field, Argument ... Bothfoo
NamedTypeDenotes a reference to a typeBothFoo
ListTypeDefinition of a listBoth[Foo]
NonNullTypeDefinition of type that cannot be nullBothFoo!
ArgumentRepresentation of an argument. Has a Name and a ValueBothfoo: "bar"
DirectiveDenotes a directive Query@foo
DocumentDescribes a complete file or request a GraphQL service operates on.Query (out)
OperationDefinitionDescribes a graphql operation like query mutation or subscriptionQuery (out)query Foo {}
VariableDefinitionThe variables defined by an operationQuery (out)(\$foo: String)
VariableA variableQuery (out)\$foo
SelectionSetspecifies a selection of Field, FragmentSpread or InlineFragmentQuery (out){foo bar}
FieldDescribes a field as a part of a selection setQuery (out)foo
FragmentSpreadDenotes a spread of a FragemntDefinitionQuery (out)...f1
InlineFragmentDenotes an inline fragmentQuery (out)... on Foo { bar}
FragmentDefinitionDefines the definition of a fragmentQuery (out)fragment f1 on Foo {}
IntValueDenotes a int valueQuery (in)1
StringValue Denotes a string valueQuery (in)"bar"
BooleanValueDenotes a boolean value Query (in)true
NullValueDenotes a null value Query (in)null
EnumValueDenotes a enum value Query (in)FOO
FloatValueDenotes a Float valueQuery (in)0.2
ListValueDenotes a List valueQuery (in)["string"]
ObjectValueDenotes a ObjectValue value Query (in){foo: "bar" }
ObjectFieldDenotes a field of am input object typeQuery (in)foo: "bar"
SchemaDefinitionDefinition of a schemaSchemaschmea {}
OperationTypeDefinitionThis defines one of the root operations Query, Mutation or Subscription on the schema-definitonSchemaquery:FooQuery
ScalarTypeDefinitionDefinition of a scalar Schemascalar JSON
ObjectTypeDefinitionDefinition of an object typeSchematype Foo{}
FieldDefinitionDefinition of a fieldSchemabar:String
InputValueDefinitionDefinition of a input value of an argumentSchemax: Float
InterfaceTypeDefinitionDefinition of an interfaceSchemainterface NamedEntity {}
UnionTypeDefinitionDefinition of an unionSchemaunion Ex = Foo | Bar
EnumTypeDefinitionDefinition of an enumSchemaenum Foo {BAR}
EnumValueDefinitionDefinition of an enum valueSchemaBAR
InputObjectTypeDefinitionDefinition of an input type definitionSchemainput FooInput {}
SchemaExtensionDefinition of a schema extensionSchemaextend schema {}
ScalarTypeExtensionDefinition of a scalar extensionSchemaextend scalar Foo @bar
ObjectTypeExtensionDefinition of an object type extensionSchemaextend type Foo { name}
InterfaceTypeExtensionDefinition of an interface type extensionSchemaextend interface NamedEntity {}
UnionTypeExtensionDefinition of an union type extensionSchemaextend union Ex = Foo{}
EnumTypeExtensionDefinition of an enum type extensionSchemaextend enum foo{}
InputObjectTypeExtensionDefinition of an input typesSchemainput foo {}
DirectiveDefinitionDefinition of a directiveSchemadirective @foo on