Skip to content

Latest commit

 

History

History
86 lines (74 loc) · 12.3 KB

File metadata and controls

86 lines (74 loc) · 12.3 KB
title
Language

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 {
  userName
  address {
    street
    nr
  }
}
graph TD;
    OperationDefinitionNode   -->  s1["SelectionSetNode"]
    s1["SelectionSetNode"]  --> id5["FieldNode (userName)"]
    s1["SelectionSetNode"]  --> id1["FieldNode (address)"]
    id1["FieldNode (address)"] -->  s2["SelectionSetNode"]
    s2["SelectionSetNode"]  -->   id3["FieldNode (street)"]
    s2["SelectionSetNode"]  -->   id4["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:

Name Description (Spec Link) Context Example
Name All names. e.g. Field, Argument ... Both foo
NamedType Denotes a reference to a type Both Foo
ListType Definition of a list Both [Foo]
NonNullType Definition of type that cannot be null Both Foo!
Argument Representation of an argument. Has a Name and a Value Both foo: "bar"
Directive Denotes a directive Query @foo
Document Describes a complete file or request a GraphQL service operates on. Query (out)
OperationDefinition Describes a graphql operation like query mutation or subscription Query (out) query Foo {}
VariableDefinition The variables defined by an operation Query (out) ($foo: String)
Variable A variable Query (out) $foo
SelectionSet specifies a selection of Field, FragmentSpread or InlineFragment Query (out) {foo bar}
Field Describes a field as a part of a selection set Query (out) foo
FragmentSpread Denotes a spread of a FragmentDefinition Query (out) ...f1
InlineFragment Denotes an inline fragment Query (out) ... on Foo { bar}
FragmentDefinition Defines the definition of a fragment Query (out) fragment f1 on Foo {}
IntValue Denotes a int value Query (in) 1
StringValue Denotes a string value Query (in) "bar"
BooleanValue Denotes a boolean value Query (in) true
NullValue Denotes a null value Query (in) null
EnumValue Denotes a enum value Query (in) FOO
FloatValue Denotes a Float value Query (in) 0.2
ListValue Denotes a List value Query (in) ["string"]
ObjectValue Denotes a ObjectValue value Query (in) {foo: "bar" }
ObjectField Denotes a field of am input object type Query (in) foo: "bar"
SchemaDefinition Definition of a schema Schema schema {}
OperationTypeDefinition This defines one of the root operations Query, Mutation or Subscription on the schema-definition Schema query:FooQuery
ScalarTypeDefinition Definition of a scalar Schema scalar JSON
ObjectTypeDefinition Definition of an object type Schema type Foo{}
FieldDefinition Definition of a field Schema bar:String
InputValueDefinition Definition of a input value of an argument Schema x: Float
InterfaceTypeDefinition Definition of an interface Schema interface NamedEntity {}
UnionTypeDefinition Definition of an union Schema union Ex = Foo | Bar
EnumTypeDefinition Definition of an enum Schema enum Foo {BAR}
EnumValueDefinition Definition of an enum value Schema BAR
InputObjectTypeDefinition Definition of an input type definition Schema input FooInput {}
SchemaExtension Definition of a schema extension Schema extend schema {}
ScalarTypeExtension Definition of a scalar extension Schema extend scalar Foo @bar
ObjectTypeExtension Definition of an object type extension Schema extend type Foo { name}
InterfaceTypeExtension Definition of an interface type extension Schema extend interface NamedEntity {}
UnionTypeExtension Definition of an union type extension Schema extend union Ex = Foo{}
EnumTypeExtension Definition of an enum type extension Schema extend enum foo{}
InputObjectTypeExtension Definition of an input types Schema input foo {}
DirectiveDefinition Definition of a directive Schema directive @foo on