| 1 |  |  | <?php | 
            
                                                                                                            
                            
            
                                    
            
            
                | 2 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 3 |  |  | declare(strict_types=1); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 4 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 5 |  |  | namespace GraphQL\Language; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 6 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 7 |  |  | use GraphQL\Error\SyntaxError; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 8 |  |  | use GraphQL\Language\AST\ArgumentNode; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 9 |  |  | use GraphQL\Language\AST\BooleanValueNode; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 10 |  |  | use GraphQL\Language\AST\DefinitionNode; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 11 |  |  | use GraphQL\Language\AST\DirectiveDefinitionNode; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 12 |  |  | use GraphQL\Language\AST\DirectiveNode; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 13 |  |  | use GraphQL\Language\AST\DocumentNode; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 14 |  |  | use GraphQL\Language\AST\EnumTypeDefinitionNode; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 15 |  |  | use GraphQL\Language\AST\EnumTypeExtensionNode; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 16 |  |  | use GraphQL\Language\AST\EnumValueDefinitionNode; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 17 |  |  | use GraphQL\Language\AST\EnumValueNode; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 18 |  |  | use GraphQL\Language\AST\ExecutableDefinitionNode; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 19 |  |  | use GraphQL\Language\AST\FieldDefinitionNode; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 20 |  |  | use GraphQL\Language\AST\FieldNode; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 21 |  |  | use GraphQL\Language\AST\FloatValueNode; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 22 |  |  | use GraphQL\Language\AST\FragmentDefinitionNode; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 23 |  |  | use GraphQL\Language\AST\FragmentSpreadNode; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 24 |  |  | use GraphQL\Language\AST\InlineFragmentNode; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 25 |  |  | use GraphQL\Language\AST\InputObjectTypeDefinitionNode; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 26 |  |  | use GraphQL\Language\AST\InputObjectTypeExtensionNode; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 27 |  |  | use GraphQL\Language\AST\InputValueDefinitionNode; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 28 |  |  | use GraphQL\Language\AST\InterfaceTypeDefinitionNode; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 29 |  |  | use GraphQL\Language\AST\InterfaceTypeExtensionNode; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 30 |  |  | use GraphQL\Language\AST\IntValueNode; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 31 |  |  | use GraphQL\Language\AST\ListTypeNode; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 32 |  |  | use GraphQL\Language\AST\ListValueNode; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 33 |  |  | use GraphQL\Language\AST\Location; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 34 |  |  | use GraphQL\Language\AST\NamedTypeNode; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 35 |  |  | use GraphQL\Language\AST\NameNode; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 36 |  |  | use GraphQL\Language\AST\Node; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 37 |  |  | use GraphQL\Language\AST\NodeList; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 38 |  |  | use GraphQL\Language\AST\NonNullTypeNode; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 39 |  |  | use GraphQL\Language\AST\NullValueNode; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 40 |  |  | use GraphQL\Language\AST\ObjectFieldNode; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 41 |  |  | use GraphQL\Language\AST\ObjectTypeDefinitionNode; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 42 |  |  | use GraphQL\Language\AST\ObjectTypeExtensionNode; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 43 |  |  | use GraphQL\Language\AST\ObjectValueNode; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 44 |  |  | use GraphQL\Language\AST\OperationDefinitionNode; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 45 |  |  | use GraphQL\Language\AST\OperationTypeDefinitionNode; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 46 |  |  | use GraphQL\Language\AST\ScalarTypeDefinitionNode; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 47 |  |  | use GraphQL\Language\AST\ScalarTypeExtensionNode; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 48 |  |  | use GraphQL\Language\AST\SchemaDefinitionNode; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 49 |  |  | use GraphQL\Language\AST\SchemaTypeExtensionNode; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 50 |  |  | use GraphQL\Language\AST\SelectionNode; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 51 |  |  | use GraphQL\Language\AST\SelectionSetNode; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 52 |  |  | use GraphQL\Language\AST\StringValueNode; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 53 |  |  | use GraphQL\Language\AST\TypeExtensionNode; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 54 |  |  | use GraphQL\Language\AST\TypeNode; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 55 |  |  | use GraphQL\Language\AST\TypeSystemDefinitionNode; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 56 |  |  | use GraphQL\Language\AST\UnionTypeDefinitionNode; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 57 |  |  | use GraphQL\Language\AST\UnionTypeExtensionNode; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 58 |  |  | use GraphQL\Language\AST\ValueNode; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 59 |  |  | use GraphQL\Language\AST\VariableDefinitionNode; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 60 |  |  | use GraphQL\Language\AST\VariableNode; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 61 |  |  | use function count; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 62 |  |  | use function sprintf; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 63 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 64 |  |  | /** | 
            
                                                                                                            
                            
            
                                    
            
            
                | 65 |  |  |  * Parses string containing GraphQL query or [type definition](type-system/type-language.md) to Abstract Syntax Tree. | 
            
                                                                                                            
                            
            
                                    
            
            
                | 66 |  |  |  * | 
            
                                                                                                            
                            
            
                                    
            
            
                | 67 |  |  |  * @method static NameNode name(Source|string $source, bool[] $options = []) | 
            
                                                                                                            
                            
            
                                    
            
            
                | 68 |  |  |  * @method static DocumentNode document(Source|string $source, bool[] $options = []) | 
            
                                                                                                            
                            
            
                                    
            
            
                | 69 |  |  |  * @method static ExecutableDefinitionNode|TypeSystemDefinitionNode definition(Source|string $source, bool[] $options = []) | 
            
                                                                                                            
                            
            
                                    
            
            
                | 70 |  |  |  * @method static ExecutableDefinitionNode executableDefinition(Source|string $source, bool[] $options = []) | 
            
                                                                                                            
                            
            
                                    
            
            
                | 71 |  |  |  * @method static OperationDefinitionNode operationDefinition(Source|string $source, bool[] $options = []) | 
            
                                                                                                            
                            
            
                                    
            
            
                | 72 |  |  |  * @method static string operationType(Source|string $source, bool[] $options = []) | 
            
                                                                                                            
                            
            
                                    
            
            
                | 73 |  |  |  * @method static NodeList<VariableDefinitionNode> variableDefinitions(Source|string $source, bool[] $options = []) | 
            
                                                                                                            
                            
            
                                    
            
            
                | 74 |  |  |  * @method static VariableDefinitionNode variableDefinition(Source|string $source, bool[] $options = []) | 
            
                                                                                                            
                            
            
                                    
            
            
                | 75 |  |  |  * @method static VariableNode variable(Source|string $source, bool[] $options = []) | 
            
                                                                                                            
                            
            
                                    
            
            
                | 76 |  |  |  * @method static SelectionSetNode selectionSet(Source|string $source, bool[] $options = []) | 
            
                                                                                                            
                            
            
                                    
            
            
                | 77 |  |  |  * @method static mixed selection(Source|string $source, bool[] $options = []) | 
            
                                                                                                            
                            
            
                                    
            
            
                | 78 |  |  |  * @method static FieldNode field(Source|string $source, bool[] $options = []) | 
            
                                                                                                            
                            
            
                                    
            
            
                | 79 |  |  |  * @method static NodeList<ArgumentNode> arguments(Source|string $source, bool[] $options = []) | 
            
                                                                                                            
                            
            
                                    
            
            
                | 80 |  |  |  * @method static ArgumentNode argument(Source|string $source, bool[] $options = []) | 
            
                                                                                                            
                            
            
                                    
            
            
                | 81 |  |  |  * @method static ArgumentNode constArgument(Source|string $source, bool[] $options = []) | 
            
                                                                                                            
                            
            
                                    
            
            
                | 82 |  |  |  * @method static FragmentSpreadNode|InlineFragmentNode fragment(Source|string $source, bool[] $options = []) | 
            
                                                                                                            
                            
            
                                    
            
            
                | 83 |  |  |  * @method static FragmentDefinitionNode fragmentDefinition(Source|string $source, bool[] $options = []) | 
            
                                                                                                            
                            
            
                                    
            
            
                | 84 |  |  |  * @method static NameNode fragmentName(Source|string $source, bool[] $options = []) | 
            
                                                                                                            
                            
            
                                    
            
            
                | 85 |  |  |  * @method static BooleanValueNode|EnumValueNode|FloatValueNode|IntValueNode|ListValueNode|NullValueNode|ObjectValueNode|StringValueNode|VariableNode valueLiteral(Source|string $source, bool[] $options = []) | 
            
                                                                                                            
                            
            
                                    
            
            
                | 86 |  |  |  * @method static StringValueNode stringLiteral(Source|string $source, bool[] $options = []) | 
            
                                                                                                            
                            
            
                                    
            
            
                | 87 |  |  |  * @method static BooleanValueNode|EnumValueNode|FloatValueNode|IntValueNode|StringValueNode|VariableNode constValue(Source|string $source, bool[] $options = []) | 
            
                                                                                                            
                            
            
                                    
            
            
                | 88 |  |  |  * @method static BooleanValueNode|EnumValueNode|FloatValueNode|IntValueNode|ListValueNode|ObjectValueNode|StringValueNode|VariableNode variableValue(Source|string $source, bool[] $options = []) | 
            
                                                                                                            
                            
            
                                    
            
            
                | 89 |  |  |  * @method static ListValueNode array(Source|string $source, bool[] $options = []) | 
            
                                                                                                            
                            
            
                                    
            
            
                | 90 |  |  |  * @method static ObjectValueNode object(Source|string $source, bool[] $options = []) | 
            
                                                                                                            
                            
            
                                    
            
            
                | 91 |  |  |  * @method static ObjectFieldNode objectField(Source|string $source, bool[] $options = []) | 
            
                                                                                                            
                            
            
                                    
            
            
                | 92 |  |  |  * @method static NodeList<DirectiveNode> directives(Source|string $source, bool[] $options = []) | 
            
                                                                                                            
                            
            
                                    
            
            
                | 93 |  |  |  * @method static DirectiveNode directive(Source|string $source, bool[] $options = []) | 
            
                                                                                                            
                            
            
                                    
            
            
                | 94 |  |  |  * @method static ListTypeNode|NameNode|NonNullTypeNode typeReference(Source|string $source, bool[] $options = []) | 
            
                                                                                                            
                            
            
                                    
            
            
                | 95 |  |  |  * @method static NamedTypeNode namedType(Source|string $source, bool[] $options = []) | 
            
                                                                                                            
                            
            
                                    
            
            
                | 96 |  |  |  * @method static TypeSystemDefinitionNode typeSystemDefinition(Source|string $source, bool[] $options = []) | 
            
                                                                                                            
                            
            
                                    
            
            
                | 97 |  |  |  * @method static StringValueNode|null description(Source|string $source, bool[] $options = []) | 
            
                                                                                                            
                            
            
                                    
            
            
                | 98 |  |  |  * @method static SchemaDefinitionNode schemaDefinition(Source|string $source, bool[] $options = []) | 
            
                                                                                                            
                            
            
                                    
            
            
                | 99 |  |  |  * @method static OperationTypeDefinitionNode operationTypeDefinition(Source|string $source, bool[] $options = []) | 
            
                                                                                                            
                            
            
                                    
            
            
                | 100 |  |  |  * @method static ScalarTypeDefinitionNode scalarTypeDefinition(Source|string $source, bool[] $options = []) | 
            
                                                                                                            
                            
            
                                    
            
            
                | 101 |  |  |  * @method static ObjectTypeDefinitionNode objectTypeDefinition(Source|string $source, bool[] $options = []) | 
            
                                                                                                            
                            
            
                                    
            
            
                | 102 |  |  |  * @method static NamedTypeNode[] implementsInterfaces(Source|string $source, bool[] $options = []) | 
            
                                                                                                            
                            
            
                                    
            
            
                | 103 |  |  |  * @method static FieldDefinitionNode[] fieldsDefinition(Source|string $source, bool[] $options = []) | 
            
                                                                                                            
                            
            
                                    
            
            
                | 104 |  |  |  * @method static FieldDefinitionNode fieldDefinition(Source|string $source, bool[] $options = []) | 
            
                                                                                                            
                            
            
                                    
            
            
                | 105 |  |  |  * @method static InputValueDefinitionNode[] argumentsDefinition(Source|string $source, bool[] $options = []) | 
            
                                                                                                            
                            
            
                                    
            
            
                | 106 |  |  |  * @method static InputValueDefinitionNode inputValueDefinition(Source|string $source, bool[] $options = []) | 
            
                                                                                                            
                            
            
                                    
            
            
                | 107 |  |  |  * @method static InterfaceTypeDefinitionNode interfaceTypeDefinition(Source|string $source, bool[] $options = []) | 
            
                                                                                                            
                            
            
                                    
            
            
                | 108 |  |  |  * @method static UnionTypeDefinitionNode unionTypeDefinition(Source|string $source, bool[] $options = []) | 
            
                                                                                                            
                            
            
                                    
            
            
                | 109 |  |  |  * @method static NamedTypeNode[] unionMemberTypes(Source|string $source, bool[] $options = []) | 
            
                                                                                                            
                            
            
                                    
            
            
                | 110 |  |  |  * @method static EnumTypeDefinitionNode enumTypeDefinition(Source|string $source, bool[] $options = []) | 
            
                                                                                                            
                            
            
                                    
            
            
                | 111 |  |  |  * @method static EnumValueDefinitionNode[] enumValuesDefinition(Source|string $source, bool[] $options = []) | 
            
                                                                                                            
                            
            
                                    
            
            
                | 112 |  |  |  * @method static EnumValueDefinitionNode enumValueDefinition(Source|string $source, bool[] $options = []) | 
            
                                                                                                            
                            
            
                                    
            
            
                | 113 |  |  |  * @method static InputObjectTypeDefinitionNode inputObjectTypeDefinition(Source|string $source, bool[] $options = []) | 
            
                                                                                                            
                            
            
                                    
            
            
                | 114 |  |  |  * @method static InputValueDefinitionNode[] inputFieldsDefinition(Source|string $source, bool[] $options = []) | 
            
                                                                                                            
                            
            
                                    
            
            
                | 115 |  |  |  * @method static TypeExtensionNode typeExtension(Source|string $source, bool[] $options = []) | 
            
                                                                                                            
                            
            
                                    
            
            
                | 116 |  |  |  * @method static SchemaTypeExtensionNode schemaTypeExtension(Source|string $source, bool[] $options = []) | 
            
                                                                                                            
                            
            
                                    
            
            
                | 117 |  |  |  * @method static ScalarTypeExtensionNode scalarTypeExtension(Source|string $source, bool[] $options = []) | 
            
                                                                                                            
                            
            
                                    
            
            
                | 118 |  |  |  * @method static ObjectTypeExtensionNode objectTypeExtension(Source|string $source, bool[] $options = []) | 
            
                                                                                                            
                            
            
                                    
            
            
                | 119 |  |  |  * @method static InterfaceTypeExtensionNode interfaceTypeExtension(Source|string $source, bool[] $options = []) | 
            
                                                                                                            
                            
            
                                    
            
            
                | 120 |  |  |  * @method static UnionTypeExtensionNode unionTypeExtension(Source|string $source, bool[] $options = []) | 
            
                                                                                                            
                            
            
                                    
            
            
                | 121 |  |  |  * @method static EnumTypeExtensionNode enumTypeExtension(Source|string $source, bool[] $options = []) | 
            
                                                                                                            
                            
            
                                    
            
            
                | 122 |  |  |  * @method static InputObjectTypeExtensionNode inputObjectTypeExtension(Source|string $source, bool[] $options = []) | 
            
                                                                                                            
                            
            
                                    
            
            
                | 123 |  |  |  * @method static DirectiveDefinitionNode directiveDefinition(Source|string $source, bool[] $options = []) | 
            
                                                                                                            
                            
            
                                    
            
            
                | 124 |  |  |  * @method static DirectiveLocation[] directiveLocations(Source|string $source, bool[] $options = []) | 
            
                                                                                                            
                            
            
                                    
            
            
                | 125 |  |  |  * @method static DirectiveLocation directiveLocation(Source|string $source, bool[] $options = []) | 
            
                                                                                                            
                            
            
                                    
            
            
                | 126 |  |  |  */ | 
            
                                                                                                            
                            
            
                                    
            
            
                | 127 |  |  | class Parser | 
            
                                                                                                            
                            
            
                                    
            
            
                | 128 |  |  | { | 
            
                                                                                                            
                            
            
                                    
            
            
                | 129 |  |  |     /** | 
            
                                                                                                            
                            
            
                                    
            
            
                | 130 |  |  |      * Given a GraphQL source, parses it into a `GraphQL\Language\AST\DocumentNode`. | 
            
                                                                                                            
                            
            
                                    
            
            
                | 131 |  |  |      * Throws `GraphQL\Error\SyntaxError` if a syntax error is encountered. | 
            
                                                                                                            
                            
            
                                    
            
            
                | 132 |  |  |      * | 
            
                                                                                                            
                            
            
                                    
            
            
                | 133 |  |  |      * Available options: | 
            
                                                                                                            
                            
            
                                    
            
            
                | 134 |  |  |      * | 
            
                                                                                                            
                            
            
                                    
            
            
                | 135 |  |  |      * noLocation: boolean, | 
            
                                                                                                            
                            
            
                                    
            
            
                | 136 |  |  |      *   (By default, the parser creates AST nodes that know the location | 
            
                                                                                                            
                            
            
                                    
            
            
                | 137 |  |  |      *   in the source that they correspond to. This configuration flag | 
            
                                                                                                            
                            
            
                                    
            
            
                | 138 |  |  |      *   disables that behavior for performance or testing.) | 
            
                                                                                                            
                            
            
                                    
            
            
                | 139 |  |  |      * | 
            
                                                                                                            
                            
            
                                    
            
            
                | 140 |  |  |      * allowLegacySDLEmptyFields: boolean | 
            
                                                                                                            
                            
            
                                    
            
            
                | 141 |  |  |      *   If enabled, the parser will parse empty fields sets in the Schema | 
            
                                                                                                            
                            
            
                                    
            
            
                | 142 |  |  |      *   Definition Language. Otherwise, the parser will follow the current | 
            
                                                                                                            
                            
            
                                    
            
            
                | 143 |  |  |      *   specification. | 
            
                                                                                                            
                            
            
                                    
            
            
                | 144 |  |  |      * | 
            
                                                                                                            
                            
            
                                    
            
            
                | 145 |  |  |      *   This option is provided to ease adoption of the final SDL specification | 
            
                                                                                                            
                            
            
                                    
            
            
                | 146 |  |  |      *   and will be removed in a future major release. | 
            
                                                                                                            
                            
            
                                    
            
            
                | 147 |  |  |      * | 
            
                                                                                                            
                            
            
                                    
            
            
                | 148 |  |  |      * allowLegacySDLImplementsInterfaces: boolean | 
            
                                                                                                            
                            
            
                                    
            
            
                | 149 |  |  |      *   If enabled, the parser will parse implemented interfaces with no `&` | 
            
                                                                                                            
                            
            
                                    
            
            
                | 150 |  |  |      *   character between each interface. Otherwise, the parser will follow the | 
            
                                                                                                            
                            
            
                                    
            
            
                | 151 |  |  |      *   current specification. | 
            
                                                                                                            
                            
            
                                    
            
            
                | 152 |  |  |      * | 
            
                                                                                                            
                            
            
                                    
            
            
                | 153 |  |  |      *   This option is provided to ease adoption of the final SDL specification | 
            
                                                                                                            
                            
            
                                    
            
            
                | 154 |  |  |      *   and will be removed in a future major release. | 
            
                                                                                                            
                            
            
                                    
            
            
                | 155 |  |  |      * | 
            
                                                                                                            
                            
            
                                    
            
            
                | 156 |  |  |      * experimentalFragmentVariables: boolean, | 
            
                                                                                                            
                            
            
                                    
            
            
                | 157 |  |  |      *   (If enabled, the parser will understand and parse variable definitions | 
            
                                                                                                            
                            
            
                                    
            
            
                | 158 |  |  |      *   contained in a fragment definition. They'll be represented in the | 
            
                                                                                                            
                            
            
                                    
            
            
                | 159 |  |  |      *   `variableDefinitions` field of the FragmentDefinitionNode. | 
            
                                                                                                            
                            
            
                                    
            
            
                | 160 |  |  |      * | 
            
                                                                                                            
                            
            
                                    
            
            
                | 161 |  |  |      *   The syntax is identical to normal, query-defined variables. For example: | 
            
                                                                                                            
                            
            
                                    
            
            
                | 162 |  |  |      * | 
            
                                                                                                            
                            
            
                                    
            
            
                | 163 |  |  |      *     fragment A($var: Boolean = false) on T  { | 
            
                                                                                                            
                            
            
                                    
            
            
                | 164 |  |  |      *       ... | 
            
                                                                                                            
                            
            
                                    
            
            
                | 165 |  |  |      *     } | 
            
                                                                                                            
                            
            
                                    
            
            
                | 166 |  |  |      * | 
            
                                                                                                            
                            
            
                                    
            
            
                | 167 |  |  |      *   Note: this feature is experimental and may change or be removed in the | 
            
                                                                                                            
                            
            
                                    
            
            
                | 168 |  |  |      *   future.) | 
            
                                                                                                            
                            
            
                                    
            
            
                | 169 |  |  |      * | 
            
                                                                                                            
                            
            
                                    
            
            
                | 170 |  |  |      * @param Source|string $source | 
            
                                                                                                            
                            
            
                                    
            
            
                | 171 |  |  |      * @param bool[]        $options | 
            
                                                                                                            
                            
            
                                    
            
            
                | 172 |  |  |      * | 
            
                                                                                                            
                            
            
                                    
            
            
                | 173 |  |  |      * @return DocumentNode | 
            
                                                                                                            
                            
            
                                    
            
            
                | 174 |  |  |      * | 
            
                                                                                                            
                            
            
                                    
            
            
                | 175 |  |  |      * @throws SyntaxError | 
            
                                                                                                            
                            
            
                                    
            
            
                | 176 |  |  |      * | 
            
                                                                                                            
                            
            
                                    
            
            
                | 177 |  |  |      * @api | 
            
                                                                                                            
                            
            
                                    
            
            
                | 178 |  |  |      */ | 
            
                                                                                                            
                            
            
                                    
            
            
                | 179 | 968 |  |     public static function parse($source, array $options = []) | 
            
                                                                                                            
                            
            
                                    
            
            
                | 180 |  |  |     { | 
            
                                                                                                            
                            
            
                                    
            
            
                | 181 | 968 |  |         $parser = new self($source, $options); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 182 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 183 | 965 |  |         return $parser->parseDocument(); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 184 |  |  |     } | 
            
                                                                                                            
                            
            
                                    
            
            
                | 185 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 186 |  |  |     /** | 
            
                                                                                                            
                            
            
                                    
            
            
                | 187 |  |  |      * Given a string containing a GraphQL value (ex. `[42]`), parse the AST for | 
            
                                                                                                            
                            
            
                                    
            
            
                | 188 |  |  |      * that value. | 
            
                                                                                                            
                            
            
                                    
            
            
                | 189 |  |  |      * Throws `GraphQL\Error\SyntaxError` if a syntax error is encountered. | 
            
                                                                                                            
                            
            
                                    
            
            
                | 190 |  |  |      * | 
            
                                                                                                            
                            
            
                                    
            
            
                | 191 |  |  |      * This is useful within tools that operate upon GraphQL Values directly and | 
            
                                                                                                            
                            
            
                                    
            
            
                | 192 |  |  |      * in isolation of complete GraphQL documents. | 
            
                                                                                                            
                            
            
                                    
            
            
                | 193 |  |  |      * | 
            
                                                                                                            
                            
            
                                    
            
            
                | 194 |  |  |      * Consider providing the results to the utility function: `GraphQL\Utils\AST::valueFromAST()`. | 
            
                                                                                                            
                            
            
                                    
            
            
                | 195 |  |  |      * | 
            
                                                                                                            
                            
            
                                    
            
            
                | 196 |  |  |      * @param Source|string $source | 
            
                                                                                                            
                            
            
                                    
            
            
                | 197 |  |  |      * @param bool[]        $options | 
            
                                                                                                            
                            
            
                                    
            
            
                | 198 |  |  |      * | 
            
                                                                                                            
                            
            
                                    
            
            
                | 199 |  |  |      * @return BooleanValueNode|EnumValueNode|FloatValueNode|IntValueNode|ListValueNode|ObjectValueNode|StringValueNode|VariableNode | 
            
                                                                                                            
                            
            
                                    
            
            
                | 200 |  |  |      * | 
            
                                                                                                            
                            
            
                                    
            
            
                | 201 |  |  |      * @api | 
            
                                                                                                            
                            
            
                                    
            
            
                | 202 |  |  |      */ | 
            
                                                                                                            
                            
            
                                    
            
            
                | 203 | 21 |  |     public static function parseValue($source, array $options = []) | 
            
                                                                                                            
                            
            
                                    
            
            
                | 204 |  |  |     { | 
            
                                                                                                            
                            
            
                                    
            
            
                | 205 | 21 |  |         $parser = new Parser($source, $options); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 206 | 21 |  |         $parser->expect(Token::SOF); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 207 | 21 |  |         $value = $parser->parseValueLiteral(false); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 208 | 21 |  |         $parser->expect(Token::EOF); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 209 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 210 | 21 |  |         return $value; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 211 |  |  |     } | 
            
                                                                                                            
                            
            
                                    
            
            
                | 212 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 213 |  |  |     /** | 
            
                                                                                                            
                            
            
                                    
            
            
                | 214 |  |  |      * Given a string containing a GraphQL Type (ex. `[Int!]`), parse the AST for | 
            
                                                                                                            
                            
            
                                    
            
            
                | 215 |  |  |      * that type. | 
            
                                                                                                            
                            
            
                                    
            
            
                | 216 |  |  |      * Throws `GraphQL\Error\SyntaxError` if a syntax error is encountered. | 
            
                                                                                                            
                            
            
                                    
            
            
                | 217 |  |  |      * | 
            
                                                                                                            
                            
            
                                    
            
            
                | 218 |  |  |      * This is useful within tools that operate upon GraphQL Types directly and | 
            
                                                                                                            
                            
            
                                    
            
            
                | 219 |  |  |      * in isolation of complete GraphQL documents. | 
            
                                                                                                            
                            
            
                                    
            
            
                | 220 |  |  |      * | 
            
                                                                                                            
                            
            
                                    
            
            
                | 221 |  |  |      * Consider providing the results to the utility function: `GraphQL\Utils\AST::typeFromAST()`. | 
            
                                                                                                            
                            
            
                                    
            
            
                | 222 |  |  |      * | 
            
                                                                                                            
                            
            
                                    
            
            
                | 223 |  |  |      * @param Source|string $source | 
            
                                                                                                            
                            
            
                                    
            
            
                | 224 |  |  |      * @param bool[]        $options | 
            
                                                                                                            
                            
            
                                    
            
            
                | 225 |  |  |      * | 
            
                                                                                                            
                            
            
                                    
            
            
                | 226 |  |  |      * @return ListTypeNode|NameNode|NonNullTypeNode | 
            
                                                                                                            
                            
            
                                    
            
            
                | 227 |  |  |      * | 
            
                                                                                                            
                            
            
                                    
            
            
                | 228 |  |  |      * @api | 
            
                                                                                                            
                            
            
                                    
            
            
                | 229 |  |  |      */ | 
            
                                                                                                            
                            
            
                                    
            
            
                | 230 | 5 |  |     public static function parseType($source, array $options = []) | 
            
                                                                                                            
                            
            
                                    
            
            
                | 231 |  |  |     { | 
            
                                                                                                            
                            
            
                                    
            
            
                | 232 | 5 |  |         $parser = new Parser($source, $options); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 233 | 5 |  |         $parser->expect(Token::SOF); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 234 | 5 |  |         $type = $parser->parseTypeReference(); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 235 | 5 |  |         $parser->expect(Token::EOF); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 236 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 237 | 5 |  |         return $type; | 
                            
                    |  |  |  | 
                                                                                        
                                                                                     | 
            
                                                                                                            
                            
            
                                    
            
            
                | 238 |  |  |     } | 
            
                                                                                                            
                            
            
                                    
            
            
                | 239 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 240 |  |  |     /** | 
            
                                                                                                            
                            
            
                                    
            
            
                | 241 |  |  |      * Parse partial source by delegating calls to the internal parseX methods. | 
            
                                                                                                            
                            
            
                                    
            
            
                | 242 |  |  |      * | 
            
                                                                                                            
                            
            
                                    
            
            
                | 243 |  |  |      * @param bool[] $arguments | 
            
                                                                                                            
                            
            
                                    
            
            
                | 244 |  |  |      * | 
            
                                                                                                            
                            
            
                                    
            
            
                | 245 |  |  |      * @throws SyntaxError | 
            
                                                                                                            
                            
            
                                    
            
            
                | 246 |  |  |      */ | 
            
                                                                                                            
                            
            
                                    
            
            
                | 247 | 1 |  |     public static function __callStatic(string $name, array $arguments) : Node | 
            
                                                                                                            
                            
            
                                    
            
            
                | 248 |  |  |     { | 
            
                                                                                                            
                            
            
                                    
            
            
                | 249 | 1 |  |         $parser = new Parser(...$arguments); | 
                            
                    |  |  |  | 
                                                                                        
                                                                                     | 
            
                                                                                                            
                            
            
                                    
            
            
                | 250 | 1 |  |         $parser->expect(Token::SOF); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 251 | 1 |  |         $type = $parser->{'parse' . $name}(); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 252 | 1 |  |         $parser->expect(Token::EOF); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 253 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 254 | 1 |  |         return $type; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 255 |  |  |     } | 
            
                                                                                                            
                            
            
                                    
            
            
                | 256 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 257 |  |  |     /** @var Lexer */ | 
            
                                                                                                            
                            
            
                                    
            
            
                | 258 |  |  |     private $lexer; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 259 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 260 |  |  |     /** | 
            
                                                                                                            
                            
            
                                    
            
            
                | 261 |  |  |      * @param Source|string $source | 
            
                                                                                                            
                            
            
                                    
            
            
                | 262 |  |  |      * @param bool[]        $options | 
            
                                                                                                            
                            
            
                                    
            
            
                | 263 |  |  |      */ | 
            
                                                                                                            
                            
            
                                    
            
            
                | 264 | 995 |  |     public function __construct($source, array $options = []) | 
            
                                                                                                            
                            
            
                                    
            
            
                | 265 |  |  |     { | 
            
                                                                                                            
                            
            
                                    
            
            
                | 266 | 995 |  |         $sourceObj   = $source instanceof Source ? $source : new Source($source); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 267 | 992 |  |         $this->lexer = new Lexer($sourceObj, $options); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 268 | 992 |  |     } | 
            
                                                                                                            
                            
            
                                    
            
            
                | 269 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 270 |  |  |     /** | 
            
                                                                                                            
                            
            
                                    
            
            
                | 271 |  |  |      * Returns a location object, used to identify the place in | 
            
                                                                                                            
                            
            
                                    
            
            
                | 272 |  |  |      * the source that created a given parsed object. | 
            
                                                                                                            
                            
            
                                    
            
            
                | 273 |  |  |      */ | 
            
                                                                                                            
                            
            
                                    
            
            
                | 274 | 984 |  |     private function loc(Token $startToken) : ?Location | 
            
                                                                                                            
                            
            
                                    
            
            
                | 275 |  |  |     { | 
            
                                                                                                            
                            
            
                                    
            
            
                | 276 | 984 |  |         if (empty($this->lexer->options['noLocation'])) { | 
            
                                                                                                            
                            
            
                                    
            
            
                | 277 | 966 |  |             return new Location($startToken, $this->lexer->lastToken, $this->lexer->source); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 278 |  |  |         } | 
            
                                                                                                            
                            
            
                                    
            
            
                | 279 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 280 | 18 |  |         return null; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 281 |  |  |     } | 
            
                                                                                                            
                            
            
                                    
            
            
                | 282 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 283 |  |  |     /** | 
            
                                                                                                            
                            
            
                                    
            
            
                | 284 |  |  |      * Determines if the next token is of a given kind | 
            
                                                                                                            
                            
            
                                    
            
            
                | 285 |  |  |      */ | 
            
                                                                                                            
                            
            
                                    
            
            
                | 286 | 966 |  |     private function peek(string $kind) : bool | 
            
                                                                                                            
                            
            
                                    
            
            
                | 287 |  |  |     { | 
            
                                                                                                            
                            
            
                                    
            
            
                | 288 | 966 |  |         return $this->lexer->token->kind === $kind; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 289 |  |  |     } | 
            
                                                                                                            
                            
            
                                    
            
            
                | 290 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 291 |  |  |     /** | 
            
                                                                                                            
                            
            
                                    
            
            
                | 292 |  |  |      * If the next token is of the given kind, return true after advancing | 
            
                                                                                                            
                            
            
                                    
            
            
                | 293 |  |  |      * the parser. Otherwise, do not change the parser state and return false. | 
            
                                                                                                            
                            
            
                                    
            
            
                | 294 |  |  |      */ | 
            
                                                                                                            
                            
            
                                    
            
            
                | 295 | 971 |  |     private function skip(string $kind) : bool | 
            
                                                                                                            
                            
            
                                    
            
            
                | 296 |  |  |     { | 
            
                                                                                                            
                            
            
                                    
            
            
                | 297 | 971 |  |         $match = $this->lexer->token->kind === $kind; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 298 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 299 | 971 |  |         if ($match) { | 
            
                                                                                                            
                            
            
                                    
            
            
                | 300 | 967 |  |             $this->lexer->advance(); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 301 |  |  |         } | 
            
                                                                                                            
                            
            
                                    
            
            
                | 302 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 303 | 971 |  |         return $match; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 304 |  |  |     } | 
            
                                                                                                            
                            
            
                                    
            
            
                | 305 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 306 |  |  |     /** | 
            
                                                                                                            
                            
            
                                    
            
            
                | 307 |  |  |      * If the next token is of the given kind, return that token after advancing | 
            
                                                                                                            
                            
            
                                    
            
            
                | 308 |  |  |      * the parser. Otherwise, do not change the parser state and return false. | 
            
                                                                                                            
                            
            
                                    
            
            
                | 309 |  |  |      * | 
            
                                                                                                            
                            
            
                                    
            
            
                | 310 |  |  |      * @throws SyntaxError | 
            
                                                                                                            
                            
            
                                    
            
            
                | 311 |  |  |      */ | 
            
                                                                                                            
                            
            
                                    
            
            
                | 312 | 992 |  |     private function expect(string $kind) : Token | 
            
                                                                                                            
                            
            
                                    
            
            
                | 313 |  |  |     { | 
            
                                                                                                            
                            
            
                                    
            
            
                | 314 | 992 |  |         $token = $this->lexer->token; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 315 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 316 | 992 |  |         if ($token->kind === $kind) { | 
            
                                                                                                            
                            
            
                                    
            
            
                | 317 | 992 |  |             $this->lexer->advance(); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 318 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 319 | 992 |  |             return $token; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 320 |  |  |         } | 
            
                                                                                                            
                            
            
                                    
            
            
                | 321 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 322 | 12 |  |         throw new SyntaxError( | 
            
                                                                                                            
                            
            
                                    
            
            
                | 323 | 12 |  |             $this->lexer->source, | 
            
                                                                                                            
                            
            
                                    
            
            
                | 324 | 12 |  |             $token->start, | 
            
                                                                                                            
                            
            
                                    
            
            
                | 325 | 12 |  |             sprintf('Expected %s, found %s', $kind, $token->getDescription()) | 
            
                                                                                                            
                            
            
                                    
            
            
                | 326 |  |  |         ); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 327 |  |  |     } | 
            
                                                                                                            
                            
            
                                    
            
            
                | 328 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 329 |  |  |     /** | 
            
                                                                                                            
                            
            
                                    
            
            
                | 330 |  |  |      * If the next token is a keyword with the given value, return that token after | 
            
                                                                                                            
                            
            
                                    
            
            
                | 331 |  |  |      * advancing the parser. Otherwise, do not change the parser state and return | 
            
                                                                                                            
                            
            
                                    
            
            
                | 332 |  |  |      * false. | 
            
                                                                                                            
                            
            
                                    
            
            
                | 333 |  |  |      * | 
            
                                                                                                            
                            
            
                                    
            
            
                | 334 |  |  |      * @throws SyntaxError | 
            
                                                                                                            
                            
            
                                    
            
            
                | 335 |  |  |      */ | 
            
                                                                                                            
                            
            
                                    
            
            
                | 336 | 463 |  |     private function expectKeyword(string $value) : Token | 
            
                                                                                                            
                            
            
                                    
            
            
                | 337 |  |  |     { | 
            
                                                                                                            
                            
            
                                    
            
            
                | 338 | 463 |  |         $token = $this->lexer->token; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 339 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 340 | 463 |  |         if ($token->kind === Token::NAME && $token->value === $value) { | 
            
                                                                                                            
                            
            
                                    
            
            
                | 341 | 463 |  |             $this->lexer->advance(); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 342 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 343 | 463 |  |             return $token; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 344 |  |  |         } | 
            
                                                                                                            
                            
            
                                    
            
            
                | 345 | 2 |  |         throw new SyntaxError( | 
            
                                                                                                            
                            
            
                                    
            
            
                | 346 | 2 |  |             $this->lexer->source, | 
            
                                                                                                            
                            
            
                                    
            
            
                | 347 | 2 |  |             $token->start, | 
            
                                                                                                            
                            
            
                                    
            
            
                | 348 | 2 |  |             'Expected "' . $value . '", found ' . $token->getDescription() | 
            
                                                                                                            
                            
            
                                    
            
            
                | 349 |  |  |         ); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 350 |  |  |     } | 
            
                                                                                                            
                            
            
                                    
            
            
                | 351 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 352 | 9 |  |     private function unexpected(?Token $atToken = null) : SyntaxError | 
            
                                                                                                            
                            
            
                                    
            
            
                | 353 |  |  |     { | 
            
                                                                                                            
                            
            
                                    
            
            
                | 354 | 9 |  |         $token = $atToken ?: $this->lexer->token; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 355 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 356 | 9 |  |         return new SyntaxError($this->lexer->source, $token->start, 'Unexpected ' . $token->getDescription()); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 357 |  |  |     } | 
            
                                                                                                            
                            
            
                                    
            
            
                | 358 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 359 |  |  |     /** | 
            
                                                                                                            
                            
            
                                    
            
            
                | 360 |  |  |      * Returns a possibly empty list of parse nodes, determined by | 
            
                                                                                                            
                            
            
                                    
            
            
                | 361 |  |  |      * the parseFn. This list begins with a lex token of openKind | 
            
                                                                                                            
                            
            
                                    
            
            
                | 362 |  |  |      * and ends with a lex token of closeKind. Advances the parser | 
            
                                                                                                            
                            
            
                                    
            
            
                | 363 |  |  |      * to the next lex token after the closing token. | 
            
                                                                                                            
                            
            
                                    
            
            
                | 364 |  |  |      * | 
            
                                                                                                            
                            
            
                                    
            
            
                | 365 |  |  |      * @throws SyntaxError | 
            
                                                                                                            
                            
            
                                    
            
            
                | 366 |  |  |      */ | 
            
                                                                                                            
                            
            
                                    
            
            
                | 367 | 34 |  |     private function any(string $openKind, callable $parseFn, string $closeKind) : NodeList | 
            
                                                                                                            
                            
            
                                    
            
            
                | 368 |  |  |     { | 
            
                                                                                                            
                            
            
                                    
            
            
                | 369 | 34 |  |         $this->expect($openKind); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 370 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 371 | 34 |  |         $nodes = []; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 372 | 34 |  |         while (! $this->skip($closeKind)) { | 
            
                                                                                                            
                            
            
                                    
            
            
                | 373 | 32 |  |             $nodes[] = $parseFn($this); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 374 |  |  |         } | 
            
                                                                                                            
                            
            
                                    
            
            
                | 375 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 376 | 33 |  |         return new NodeList($nodes); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 377 |  |  |     } | 
            
                                                                                                            
                            
            
                                    
            
            
                | 378 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 379 |  |  |     /** | 
            
                                                                                                            
                            
            
                                    
            
            
                | 380 |  |  |      * Returns a non-empty list of parse nodes, determined by | 
            
                                                                                                            
                            
            
                                    
            
            
                | 381 |  |  |      * the parseFn. This list begins with a lex token of openKind | 
            
                                                                                                            
                            
            
                                    
            
            
                | 382 |  |  |      * and ends with a lex token of closeKind. Advances the parser | 
            
                                                                                                            
                            
            
                                    
            
            
                | 383 |  |  |      * to the next lex token after the closing token. | 
            
                                                                                                            
                            
            
                                    
            
            
                | 384 |  |  |      * | 
            
                                                                                                            
                            
            
                                    
            
            
                | 385 |  |  |      * @throws SyntaxError | 
            
                                                                                                            
                            
            
                                    
            
            
                | 386 |  |  |      */ | 
            
                                                                                                            
                            
            
                                    
            
            
                | 387 | 966 |  |     private function many(string $openKind, callable $parseFn, string $closeKind) : NodeList | 
            
                                                                                                            
                            
            
                                    
            
            
                | 388 |  |  |     { | 
            
                                                                                                            
                            
            
                                    
            
            
                | 389 | 966 |  |         $this->expect($openKind); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 390 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 391 | 966 |  |         $nodes = [$parseFn($this)]; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 392 | 947 |  |         while (! $this->skip($closeKind)) { | 
            
                                                                                                            
                            
            
                                    
            
            
                | 393 | 541 |  |             $nodes[] = $parseFn($this); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 394 |  |  |         } | 
            
                                                                                                            
                            
            
                                    
            
            
                | 395 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 396 | 945 |  |         return new NodeList($nodes); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 397 |  |  |     } | 
            
                                                                                                            
                            
            
                                    
            
            
                | 398 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 399 |  |  |     /** | 
            
                                                                                                            
                            
            
                                    
            
            
                | 400 |  |  |      * Converts a name lex token into a name parse node. | 
            
                                                                                                            
                            
            
                                    
            
            
                | 401 |  |  |      * | 
            
                                                                                                            
                            
            
                                    
            
            
                | 402 |  |  |      * @throws SyntaxError | 
            
                                                                                                            
                            
            
                                    
            
            
                | 403 |  |  |      */ | 
            
                                                                                                            
                            
            
                                    
            
            
                | 404 | 972 |  |     private function parseName() : NameNode | 
            
                                                                                                            
                            
            
                                    
            
            
                | 405 |  |  |     { | 
            
                                                                                                            
                            
            
                                    
            
            
                | 406 | 972 |  |         $token = $this->expect(Token::NAME); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 407 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 408 | 970 |  |         return new NameNode([ | 
            
                                                                                                            
                            
            
                                    
            
            
                | 409 | 970 |  |             'value' => $token->value, | 
            
                                                                                                            
                            
            
                                    
            
            
                | 410 | 970 |  |             'loc'   => $this->loc($token), | 
            
                                                                                                            
                            
            
                                    
            
            
                | 411 |  |  |         ]); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 412 |  |  |     } | 
            
                                                                                                            
                            
            
                                    
            
            
                | 413 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 414 |  |  |     /** | 
            
                                                                                                            
                            
            
                                    
            
            
                | 415 |  |  |      * Implements the parsing rules in the Document section. | 
            
                                                                                                            
                            
            
                                    
            
            
                | 416 |  |  |      * | 
            
                                                                                                            
                            
            
                                    
            
            
                | 417 |  |  |      * @throws SyntaxError | 
            
                                                                                                            
                                                                
            
                                    
            
            
                | 418 |  |  |      */ | 
            
                                                                        
                            
            
                                    
            
            
                | 419 | 965 |  |     private function parseDocument() : DocumentNode | 
            
                                                                        
                            
            
                                    
            
            
                | 420 |  |  |     { | 
            
                                                                        
                            
            
                                    
            
            
                | 421 | 965 |  |         $start = $this->lexer->token; | 
            
                                                                        
                            
            
                                    
            
            
                | 422 |  |  |  | 
            
                                                                        
                            
            
                                    
            
            
                | 423 | 965 |  |         return new DocumentNode([ | 
            
                                                                        
                            
            
                                    
            
            
                | 424 | 965 |  |             'definitions' => $this->many( | 
            
                                                                        
                            
            
                                    
            
            
                | 425 | 965 |  |                 Token::SOF, | 
            
                                                                        
                            
            
                                    
            
            
                | 426 |  |  |                 function () { | 
            
                                                                        
                            
            
                                    
            
            
                | 427 | 965 |  |                     return $this->parseDefinition(); | 
            
                                                                        
                            
            
                                    
            
            
                | 428 | 965 |  |                 }, | 
            
                                                                        
                            
            
                                    
            
            
                | 429 | 965 |  |                 Token::EOF | 
            
                                                                        
                            
            
                                    
            
            
                | 430 |  |  |             ), | 
            
                                                                        
                            
            
                                    
            
            
                | 431 | 943 |  |             'loc'         => $this->loc($start), | 
            
                                                                                                            
                            
            
                                    
            
            
                | 432 |  |  |         ]); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 433 |  |  |     } | 
            
                                                                                                            
                            
            
                                    
            
            
                | 434 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 435 |  |  |     /** | 
            
                                                                                                            
                            
            
                                    
            
            
                | 436 |  |  |      * @return ExecutableDefinitionNode|TypeSystemDefinitionNode | 
            
                                                                                                            
                            
            
                                    
            
            
                | 437 |  |  |      * | 
            
                                                                                                            
                            
            
                                    
            
            
                | 438 |  |  |      * @throws SyntaxError | 
            
                                                                                                            
                            
            
                                    
            
            
                | 439 |  |  |      */ | 
            
                                                                                                            
                            
            
                                    
            
            
                | 440 | 965 |  |     private function parseDefinition() : DefinitionNode | 
            
                                                                                                            
                            
            
                                    
            
            
                | 441 |  |  |     { | 
            
                                                                                                            
                            
            
                                    
            
            
                | 442 | 965 |  |         if ($this->peek(Token::NAME)) { | 
            
                                                                                                            
                            
            
                                    
            
            
                | 443 | 674 |  |             switch ($this->lexer->token->value) { | 
            
                                                                                                            
                            
            
                                    
            
            
                | 444 | 674 |  |                 case 'query': | 
            
                                                                                                            
                            
            
                                    
            
            
                | 445 | 477 |  |                 case 'mutation': | 
            
                                                                                                            
                            
            
                                    
            
            
                | 446 | 466 |  |                 case 'subscription': | 
            
                                                                                                            
                            
            
                                    
            
            
                | 447 | 461 |  |                 case 'fragment': | 
            
                                                                                                            
                            
            
                                    
            
            
                | 448 | 431 |  |                     return $this->parseExecutableDefinition(); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 449 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 450 |  |  |                 // Note: The schema definition language is an experimental addition. | 
            
                                                                                                            
                            
            
                                    
            
            
                | 451 | 253 |  |                 case 'schema': | 
            
                                                                                                            
                            
            
                                    
            
            
                | 452 | 251 |  |                 case 'scalar': | 
            
                                                                                                            
                            
            
                                    
            
            
                | 453 | 250 |  |                 case 'type': | 
            
                                                                                                            
                            
            
                                    
            
            
                | 454 | 174 |  |                 case 'interface': | 
            
                                                                                                            
                            
            
                                    
            
            
                | 455 | 150 |  |                 case 'union': | 
            
                                                                                                            
                            
            
                                    
            
            
                | 456 | 134 |  |                 case 'enum': | 
            
                                                                                                            
                            
            
                                    
            
            
                | 457 | 124 |  |                 case 'input': | 
            
                                                                                                            
                            
            
                                    
            
            
                | 458 | 105 |  |                 case 'extend': | 
            
                                                                                                            
                            
            
                                    
            
            
                | 459 | 91 |  |                 case 'directive': | 
            
                                                                                                            
                            
            
                                    
            
            
                | 460 |  |  |                     // Note: The schema definition language is an experimental addition. | 
            
                                                                                                            
                            
            
                                    
            
            
                | 461 | 253 |  |                     return $this->parseTypeSystemDefinition(); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 462 |  |  |             } | 
            
                                                                                                            
                            
            
                                    
            
            
                | 463 | 339 |  |         } elseif ($this->peek(Token::BRACE_L)) { | 
            
                                                                                                            
                            
            
                                    
            
            
                | 464 | 331 |  |             return $this->parseExecutableDefinition(); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 465 | 8 |  |         } elseif ($this->peekDescription()) { | 
            
                                                                                                            
                            
            
                                    
            
            
                | 466 |  |  |             // Note: The schema definition language is an experimental addition. | 
            
                                                                                                            
                            
            
                                    
            
            
                | 467 | 7 |  |             return $this->parseTypeSystemDefinition(); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 468 |  |  |         } | 
            
                                                                                                            
                            
            
                                    
            
            
                | 469 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 470 | 3 |  |         throw $this->unexpected(); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 471 |  |  |     } | 
            
                                                                                                            
                            
            
                                    
            
            
                | 472 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 473 |  |  |     /** | 
            
                                                                                                            
                            
            
                                    
            
            
                | 474 |  |  |      * @throws SyntaxError | 
            
                                                                                                            
                            
            
                                    
            
            
                | 475 |  |  |      */ | 
            
                                                                                                            
                            
            
                                    
            
            
                | 476 | 728 |  |     private function parseExecutableDefinition() : ExecutableDefinitionNode | 
            
                                                                                                            
                            
            
                                    
            
            
                | 477 |  |  |     { | 
            
                                                                                                            
                            
            
                                    
            
            
                | 478 | 728 |  |         if ($this->peek(Token::NAME)) { | 
            
                                                                                                            
                            
            
                                    
            
            
                | 479 | 431 |  |             switch ($this->lexer->token->value) { | 
            
                                                                                                            
                            
            
                                    
            
            
                | 480 | 431 |  |                 case 'query': | 
            
                                                                                                            
                            
            
                                    
            
            
                | 481 | 228 |  |                 case 'mutation': | 
            
                                                                                                            
                            
            
                                    
            
            
                | 482 | 215 |  |                 case 'subscription': | 
            
                                                                                                            
                            
            
                                    
            
            
                | 483 | 288 |  |                     return $this->parseOperationDefinition(); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 484 | 210 |  |                 case 'fragment': | 
            
                                                                                                            
                            
            
                                    
            
            
                | 485 | 210 |  |                     return $this->parseFragmentDefinition(); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 486 |  |  |             } | 
            
                                                                                                            
                            
            
                                    
            
            
                | 487 | 331 |  |         } elseif ($this->peek(Token::BRACE_L)) { | 
            
                                                                                                            
                            
            
                                    
            
            
                | 488 | 331 |  |             return $this->parseOperationDefinition(); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 489 |  |  |         } | 
            
                                                                                                            
                            
            
                                    
            
            
                | 490 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 491 |  |  |         throw $this->unexpected(); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 492 |  |  |     } | 
            
                                                                                                            
                            
            
                                    
            
            
                | 493 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 494 |  |  |     // Implements the parsing rules in the Operations section. | 
            
                                                                                                            
                            
            
                                    
            
            
                | 495 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 496 |  |  |     /** | 
            
                                                                                                            
                            
            
                                    
            
            
                | 497 |  |  |      * @throws SyntaxError | 
            
                                                                                                            
                            
            
                                    
            
            
                | 498 |  |  |      */ | 
            
                                                                                                            
                            
            
                                    
            
            
                | 499 | 607 |  |     private function parseOperationDefinition() : OperationDefinitionNode | 
            
                                                                                                            
                            
            
                                    
            
            
                | 500 |  |  |     { | 
            
                                                                                                            
                            
            
                                    
            
            
                | 501 | 607 |  |         $start = $this->lexer->token; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 502 | 607 |  |         if ($this->peek(Token::BRACE_L)) { | 
            
                                                                                                            
                            
            
                                    
            
            
                | 503 | 331 |  |             return new OperationDefinitionNode([ | 
            
                                                                                                            
                            
            
                                    
            
            
                | 504 | 331 |  |                 'operation'           => 'query', | 
            
                                                                                                            
                            
            
                                    
            
            
                | 505 |  |  |                 'name'                => null, | 
            
                                                                                                            
                            
            
                                    
            
            
                | 506 | 331 |  |                 'variableDefinitions' => new NodeList([]), | 
            
                                                                                                            
                            
            
                                    
            
            
                | 507 | 331 |  |                 'directives'          => new NodeList([]), | 
            
                                                                                                            
                            
            
                                    
            
            
                | 508 | 331 |  |                 'selectionSet'        => $this->parseSelectionSet(), | 
            
                                                                                                            
                            
            
                                    
            
            
                | 509 | 327 |  |                 'loc'                 => $this->loc($start), | 
            
                                                                                                            
                            
            
                                    
            
            
                | 510 |  |  |             ]); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 511 |  |  |         } | 
            
                                                                                                            
                            
            
                                    
            
            
                | 512 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 513 | 288 |  |         $operation = $this->parseOperationType(); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 514 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 515 | 288 |  |         $name = null; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 516 | 288 |  |         if ($this->peek(Token::NAME)) { | 
            
                                                                                                            
                            
            
                                    
            
            
                | 517 | 263 |  |             $name = $this->parseName(); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 518 |  |  |         } | 
            
                                                                                                            
                            
            
                                    
            
            
                | 519 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 520 | 288 |  |         return new OperationDefinitionNode([ | 
            
                                                                                                            
                            
            
                                    
            
            
                | 521 | 288 |  |             'operation'           => $operation, | 
            
                                                                                                            
                            
            
                                    
            
            
                | 522 | 288 |  |             'name'                => $name, | 
            
                                                                                                            
                            
            
                                    
            
            
                | 523 | 288 |  |             'variableDefinitions' => $this->parseVariableDefinitions(), | 
            
                                                                                                            
                            
            
                                    
            
            
                | 524 | 287 |  |             'directives'          => $this->parseDirectives(false), | 
            
                                                                                                            
                            
            
                                    
            
            
                | 525 | 287 |  |             'selectionSet'        => $this->parseSelectionSet(), | 
            
                                                                                                            
                            
            
                                    
            
            
                | 526 | 286 |  |             'loc'                 => $this->loc($start), | 
            
                                                                                                            
                            
            
                                    
            
            
                | 527 |  |  |         ]); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 528 |  |  |     } | 
            
                                                                                                            
                            
            
                                    
            
            
                | 529 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 530 |  |  |     /** | 
            
                                                                                                            
                            
            
                                    
            
            
                | 531 |  |  |      * @throws SyntaxError | 
            
                                                                                                            
                            
            
                                    
            
            
                | 532 |  |  |      */ | 
            
                                                                                                            
                            
            
                                    
            
            
                | 533 | 337 |  |     private function parseOperationType() : string | 
            
                                                                                                            
                            
            
                                    
            
            
                | 534 |  |  |     { | 
            
                                                                                                            
                            
            
                                    
            
            
                | 535 | 337 |  |         $operationToken = $this->expect(Token::NAME); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 536 | 337 |  |         switch ($operationToken->value) { | 
            
                                                                                                            
                            
            
                                    
            
            
                | 537 | 337 |  |             case 'query': | 
            
                                                                                                            
                            
            
                                    
            
            
                | 538 | 319 |  |                 return 'query'; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 539 | 51 |  |             case 'mutation': | 
            
                                                                                                            
                            
            
                                    
            
            
                | 540 | 43 |  |                 return 'mutation'; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 541 | 24 |  |             case 'subscription': | 
            
                                                                                                            
                            
            
                                    
            
            
                | 542 | 24 |  |                 return 'subscription'; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 543 |  |  |         } | 
            
                                                                                                            
                            
            
                                    
            
            
                | 544 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 545 |  |  |         throw $this->unexpected($operationToken); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 546 |  |  |     } | 
            
                                                                                                            
                            
            
                                    
            
            
                | 547 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 548 | 292 |  |     private function parseVariableDefinitions() : NodeList | 
            
                                                                                                            
                            
            
                                    
            
            
                | 549 |  |  |     { | 
            
                                                                                                            
                            
            
                                    
            
            
                | 550 | 292 |  |         return $this->peek(Token::PAREN_L) | 
            
                                                                                                            
                            
            
                                    
            
            
                | 551 | 134 |  |             ? $this->many( | 
            
                                                                                                            
                            
            
                                    
            
            
                | 552 | 134 |  |                 Token::PAREN_L, | 
            
                                                                                                            
                            
            
                                    
            
            
                | 553 |  |  |                 function () { | 
            
                                                                                                            
                            
            
                                    
            
            
                | 554 | 134 |  |                     return $this->parseVariableDefinition(); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 555 | 134 |  |                 }, | 
            
                                                                                                            
                            
            
                                    
            
            
                | 556 | 134 |  |                 Token::PAREN_R | 
            
                                                                                                            
                            
            
                                    
            
            
                | 557 |  |  |             ) | 
            
                                                                                                            
                            
            
                                    
            
            
                | 558 | 291 |  |             : new NodeList([]); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 559 |  |  |     } | 
            
                                                                                                            
                            
            
                                    
            
            
                | 560 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 561 |  |  |     /** | 
            
                                                                                                            
                            
            
                                    
            
            
                | 562 |  |  |      * @throws SyntaxError | 
            
                                                                                                            
                            
            
                                    
            
            
                | 563 |  |  |      */ | 
            
                                                                                                            
                            
            
                                    
            
            
                | 564 | 134 |  |     private function parseVariableDefinition() : VariableDefinitionNode | 
            
                                                                                                            
                            
            
                                    
            
            
                | 565 |  |  |     { | 
            
                                                                                                            
                            
            
                                    
            
            
                | 566 | 134 |  |         $start = $this->lexer->token; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 567 | 134 |  |         $var   = $this->parseVariable(); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 568 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 569 | 134 |  |         $this->expect(Token::COLON); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 570 | 134 |  |         $type = $this->parseTypeReference(); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 571 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 572 | 134 |  |         return new VariableDefinitionNode([ | 
            
                                                                                                            
                            
            
                                    
            
            
                | 573 | 134 |  |             'variable'     => $var, | 
            
                                                                                                            
                            
            
                                    
            
            
                | 574 | 134 |  |             'type'         => $type, | 
            
                                                                                                            
                            
            
                                    
            
            
                | 575 |  |  |             'defaultValue' => | 
            
                                                                                                            
                            
            
                                    
            
            
                | 576 | 134 |  |                 ($this->skip(Token::EQUALS) ? $this->parseValueLiteral(true) : null), | 
            
                                                                                                            
                            
            
                                    
            
            
                | 577 | 133 |  |             'directives'   => $this->parseDirectives(true), | 
            
                                                                                                            
                            
            
                                    
            
            
                | 578 | 133 |  |             'loc'          => $this->loc($start), | 
            
                                                                                                            
                            
            
                                    
            
            
                | 579 |  |  |         ]); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 580 |  |  |     } | 
            
                                                                                                            
                            
            
                                    
            
            
                | 581 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 582 |  |  |     /** | 
            
                                                                                                            
                            
            
                                    
            
            
                | 583 |  |  |      * @throws SyntaxError | 
            
                                                                                                            
                            
            
                                    
            
            
                | 584 |  |  |      */ | 
            
                                                                                                            
                            
            
                                    
            
            
                | 585 | 143 |  |     private function parseVariable() : VariableNode | 
            
                                                                                                            
                            
            
                                    
            
            
                | 586 |  |  |     { | 
            
                                                                                                            
                            
            
                                    
            
            
                | 587 | 143 |  |         $start = $this->lexer->token; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 588 | 143 |  |         $this->expect(Token::DOLLAR); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 589 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 590 | 143 |  |         return new VariableNode([ | 
            
                                                                                                            
                            
            
                                    
            
            
                | 591 | 143 |  |             'name' => $this->parseName(), | 
            
                                                                                                            
                            
            
                                    
            
            
                | 592 | 143 |  |             'loc'  => $this->loc($start), | 
            
                                                                                                            
                            
            
                                    
            
            
                | 593 |  |  |         ]); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 594 |  |  |     } | 
            
                                                                                                            
                            
            
                                    
            
            
                | 595 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 596 | 726 |  |     private function parseSelectionSet() : SelectionSetNode | 
            
                                                                                                            
                            
            
                                    
            
            
                | 597 |  |  |     { | 
            
                                                                                                            
                            
            
                                    
            
            
                | 598 | 726 |  |         $start = $this->lexer->token; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 599 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 600 | 726 |  |         return new SelectionSetNode( | 
            
                                                                                                            
                            
            
                                    
            
            
                | 601 |  |  |             [ | 
            
                                                                                                            
                            
            
                                    
            
            
                | 602 | 726 |  |                 'selections' => $this->many( | 
            
                                                                                                            
                            
            
                                    
            
            
                | 603 | 726 |  |                     Token::BRACE_L, | 
            
                                                                                                            
                            
            
                                    
            
            
                | 604 |  |  |                     function () { | 
            
                                                                                                            
                            
            
                                    
            
            
                | 605 | 725 |  |                         return $this->parseSelection(); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 606 | 726 |  |                     }, | 
            
                                                                                                            
                            
            
                                    
            
            
                | 607 | 726 |  |                     Token::BRACE_R | 
            
                                                                                                            
                            
            
                                    
            
            
                | 608 |  |  |                 ), | 
            
                                                                                                            
                            
            
                                    
            
            
                | 609 | 720 |  |                 'loc'        => $this->loc($start), | 
            
                                                                                                            
                            
            
                                    
            
            
                | 610 |  |  |             ] | 
            
                                                                                                            
                            
            
                                    
            
            
                | 611 |  |  |         ); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 612 |  |  |     } | 
            
                                                                                                            
                            
            
                                    
            
            
                | 613 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 614 |  |  |     /** | 
            
                                                                                                            
                            
            
                                    
            
            
                | 615 |  |  |      *  Selection : | 
            
                                                                                                            
                            
            
                                    
            
            
                | 616 |  |  |      *   - Field | 
            
                                                                                                            
                            
            
                                    
            
            
                | 617 |  |  |      *   - FragmentSpread | 
            
                                                                                                            
                            
            
                                    
            
            
                | 618 |  |  |      *   - InlineFragment | 
            
                                                                                                            
                            
            
                                    
            
            
                | 619 |  |  |      */ | 
            
                                                                                                            
                            
            
                                    
            
            
                | 620 | 725 |  |     private function parseSelection() : SelectionNode | 
            
                                                                                                            
                            
            
                                    
            
            
                | 621 |  |  |     { | 
            
                                                                                                            
                            
            
                                    
            
            
                | 622 | 725 |  |         return $this->peek(Token::SPREAD) | 
            
                                                                                                            
                            
            
                                    
            
            
                | 623 | 197 |  |             ? $this->parseFragment() | 
            
                                                                                                            
                            
            
                                    
            
            
                | 624 | 724 |  |             : $this->parseField(); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 625 |  |  |     } | 
            
                                                                                                            
                            
            
                                    
            
            
                | 626 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 627 |  |  |     /** | 
            
                                                                                                            
                            
            
                                    
            
            
                | 628 |  |  |      * @throws SyntaxError | 
            
                                                                                                            
                            
            
                                    
            
            
                | 629 |  |  |      */ | 
            
                                                                                                            
                            
            
                                    
            
            
                | 630 | 713 |  |     private function parseField() : FieldNode | 
            
                                                                                                            
                            
            
                                    
            
            
                | 631 |  |  |     { | 
            
                                                                                                            
                            
            
                                    
            
            
                | 632 | 713 |  |         $start       = $this->lexer->token; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 633 | 713 |  |         $nameOrAlias = $this->parseName(); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 634 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 635 | 711 |  |         if ($this->skip(Token::COLON)) { | 
            
                                                                                                            
                            
            
                                    
            
            
                | 636 | 63 |  |             $alias = $nameOrAlias; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 637 | 63 |  |             $name  = $this->parseName(); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 638 |  |  |         } else { | 
            
                                                                                                            
                            
            
                                    
            
            
                | 639 | 691 |  |             $alias = null; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 640 | 691 |  |             $name  = $nameOrAlias; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 641 |  |  |         } | 
            
                                                                                                            
                            
            
                                    
            
            
                | 642 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 643 | 710 |  |         return new FieldNode([ | 
            
                                                                                                            
                            
            
                                    
            
            
                | 644 | 710 |  |             'alias'        => $alias, | 
            
                                                                                                            
                            
            
                                    
            
            
                | 645 | 710 |  |             'name'         => $name, | 
            
                                                                                                            
                            
            
                                    
            
            
                | 646 | 710 |  |             'arguments'    => $this->parseArguments(false), | 
            
                                                                                                            
                            
            
                                    
            
            
                | 647 | 710 |  |             'directives'   => $this->parseDirectives(false), | 
            
                                                                                                            
                            
            
                                    
            
            
                | 648 | 710 |  |             'selectionSet' => $this->peek(Token::BRACE_L) ? $this->parseSelectionSet() : null, | 
            
                                                                                                            
                            
            
                                    
            
            
                | 649 | 710 |  |             'loc'          => $this->loc($start), | 
            
                                                                                                            
                            
            
                                    
            
            
                | 650 |  |  |         ]); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 651 |  |  |     } | 
            
                                                                                                            
                            
            
                                    
            
            
                | 652 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 653 |  |  |     /** | 
            
                                                                                                            
                            
            
                                    
            
            
                | 654 |  |  |      * @throws SyntaxError | 
            
                                                                                                            
                            
            
                                    
            
            
                | 655 |  |  |      */ | 
            
                                                                                                            
                            
            
                                    
            
            
                | 656 | 742 |  |     private function parseArguments(bool $isConst) : NodeList | 
            
                                                                                                            
                            
            
                                    
            
            
                | 657 |  |  |     { | 
            
                                                                                                            
                            
            
                                    
            
            
                | 658 | 742 |  |         $parseFn = $isConst | 
            
                                                                                                            
                            
            
                                    
            
            
                | 659 |  |  |             ? function () { | 
            
                                                                                                            
                            
            
                                    
            
            
                | 660 | 7 |  |                 return $this->parseConstArgument(); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 661 | 36 |  |             } | 
            
                                                                                                            
                            
            
                                    
            
            
                | 662 |  |  |             : function () { | 
            
                                                                                                            
                            
            
                                    
            
            
                | 663 | 333 |  |                 return $this->parseArgument(); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 664 | 742 |  |             }; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 665 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 666 | 742 |  |         return $this->peek(Token::PAREN_L) | 
            
                                                                                                            
                            
            
                                    
            
            
                | 667 | 340 |  |             ? $this->many(Token::PAREN_L, $parseFn, Token::PAREN_R) | 
            
                                                                                                            
                            
            
                                    
            
            
                | 668 | 742 |  |             : new NodeList([]); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 669 |  |  |     } | 
            
                                                                                                            
                            
            
                                    
            
            
                | 670 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 671 |  |  |     /** | 
            
                                                                                                            
                            
            
                                    
            
            
                | 672 |  |  |      * @throws SyntaxError | 
            
                                                                                                            
                            
            
                                    
            
            
                | 673 |  |  |      */ | 
            
                                                                                                            
                            
            
                                    
            
            
                | 674 | 333 |  |     private function parseArgument() : ArgumentNode | 
            
                                                                                                            
                            
            
                                    
            
            
                | 675 |  |  |     { | 
            
                                                                                                            
                            
            
                                    
            
            
                | 676 | 333 |  |         $start = $this->lexer->token; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 677 | 333 |  |         $name  = $this->parseName(); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 678 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 679 | 333 |  |         $this->expect(Token::COLON); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 680 | 333 |  |         $value = $this->parseValueLiteral(false); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 681 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 682 | 333 |  |         return new ArgumentNode([ | 
            
                                                                                                            
                            
            
                                    
            
            
                | 683 | 333 |  |             'name'  => $name, | 
            
                                                                                                            
                            
            
                                    
            
            
                | 684 | 333 |  |             'value' => $value, | 
            
                                                                                                            
                            
            
                                    
            
            
                | 685 | 333 |  |             'loc'   => $this->loc($start), | 
            
                                                                                                            
                            
            
                                    
            
            
                | 686 |  |  |         ]); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 687 |  |  |     } | 
            
                                                                                                            
                            
            
                                    
            
            
                | 688 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 689 |  |  |     /** | 
            
                                                                                                            
                            
            
                                    
            
            
                | 690 |  |  |      * @throws SyntaxError | 
            
                                                                                                            
                            
            
                                    
            
            
                | 691 |  |  |      */ | 
            
                                                                                                            
                            
            
                                    
            
            
                | 692 | 7 |  |     private function parseConstArgument() : ArgumentNode | 
            
                                                                                                            
                            
            
                                    
            
            
                | 693 |  |  |     { | 
            
                                                                                                            
                            
            
                                    
            
            
                | 694 | 7 |  |         $start = $this->lexer->token; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 695 | 7 |  |         $name  = $this->parseName(); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 696 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 697 | 7 |  |         $this->expect(Token::COLON); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 698 | 7 |  |         $value = $this->parseConstValue(); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 699 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 700 | 7 |  |         return new ArgumentNode([ | 
            
                                                                                                            
                            
            
                                    
            
            
                | 701 | 7 |  |             'name'  => $name, | 
            
                                                                                                            
                            
            
                                    
            
            
                | 702 | 7 |  |             'value' => $value, | 
            
                                                                                                            
                            
            
                                    
            
            
                | 703 | 7 |  |             'loc'   => $this->loc($start), | 
            
                                                                                                            
                            
            
                                    
            
            
                | 704 |  |  |         ]); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 705 |  |  |     } | 
            
                                                                                                            
                            
            
                                    
            
            
                | 706 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 707 |  |  |     // Implements the parsing rules in the Fragments section. | 
            
                                                                                                            
                            
            
                                    
            
            
                | 708 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 709 |  |  |     /** | 
            
                                                                                                            
                            
            
                                    
            
            
                | 710 |  |  |      * @return FragmentSpreadNode|InlineFragmentNode | 
            
                                                                                                            
                            
            
                                    
            
            
                | 711 |  |  |      * | 
            
                                                                                                            
                            
            
                                    
            
            
                | 712 |  |  |      * @throws SyntaxError | 
            
                                                                                                            
                            
            
                                    
            
            
                | 713 |  |  |      */ | 
            
                                                                                                            
                            
            
                                    
            
            
                | 714 | 197 |  |     private function parseFragment() : SelectionNode | 
            
                                                                                                            
                            
            
                                    
            
            
                | 715 |  |  |     { | 
            
                                                                                                            
                            
            
                                    
            
            
                | 716 | 197 |  |         $start = $this->lexer->token; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 717 | 197 |  |         $this->expect(Token::SPREAD); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 718 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 719 | 197 |  |         if ($this->peek(Token::NAME) && $this->lexer->token->value !== 'on') { | 
            
                                                                                                            
                            
            
                                    
            
            
                | 720 | 129 |  |             return new FragmentSpreadNode([ | 
            
                                                                                                            
                            
            
                                    
            
            
                | 721 | 129 |  |                 'name'       => $this->parseFragmentName(), | 
            
                                                                                                            
                            
            
                                    
            
            
                | 722 | 129 |  |                 'directives' => $this->parseDirectives(false), | 
            
                                                                                                            
                            
            
                                    
            
            
                | 723 | 129 |  |                 'loc'        => $this->loc($start), | 
            
                                                                                                            
                            
            
                                    
            
            
                | 724 |  |  |             ]); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 725 |  |  |         } | 
            
                                                                                                            
                            
            
                                    
            
            
                | 726 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 727 | 94 |  |         $typeCondition = null; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 728 | 94 |  |         if ($this->lexer->token->value === 'on') { | 
            
                                                                                                            
                            
            
                                    
            
            
                | 729 | 90 |  |             $this->lexer->advance(); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 730 | 90 |  |             $typeCondition = $this->parseNamedType(); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 731 |  |  |         } | 
            
                                                                                                            
                            
            
                                    
            
            
                | 732 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 733 | 93 |  |         return new InlineFragmentNode([ | 
            
                                                                                                            
                            
            
                                    
            
            
                | 734 | 93 |  |             'typeCondition' => $typeCondition, | 
            
                                                                                                            
                            
            
                                    
            
            
                | 735 | 93 |  |             'directives'    => $this->parseDirectives(false), | 
            
                                                                                                            
                            
            
                                    
            
            
                | 736 | 93 |  |             'selectionSet'  => $this->parseSelectionSet(), | 
            
                                                                                                            
                            
            
                                    
            
            
                | 737 | 93 |  |             'loc'           => $this->loc($start), | 
            
                                                                                                            
                            
            
                                    
            
            
                | 738 |  |  |         ]); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 739 |  |  |     } | 
            
                                                                                                            
                            
            
                                    
            
            
                | 740 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 741 |  |  |     /** | 
            
                                                                                                            
                            
            
                                    
            
            
                | 742 |  |  |      * @throws SyntaxError | 
            
                                                                                                            
                            
            
                                    
            
            
                | 743 |  |  |      */ | 
            
                                                                                                            
                            
            
                                    
            
            
                | 744 | 210 |  |     private function parseFragmentDefinition() : FragmentDefinitionNode | 
            
                                                                                                            
                            
            
                                    
            
            
                | 745 |  |  |     { | 
            
                                                                                                            
                            
            
                                    
            
            
                | 746 | 210 |  |         $start = $this->lexer->token; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 747 | 210 |  |         $this->expectKeyword('fragment'); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 748 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 749 | 210 |  |         $name = $this->parseFragmentName(); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 750 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 751 |  |  |         // Experimental support for defining variables within fragments changes | 
            
                                                                                                            
                            
            
                                    
            
            
                | 752 |  |  |         // the grammar of FragmentDefinition: | 
            
                                                                                                            
                            
            
                                    
            
            
                | 753 |  |  |         //   - fragment FragmentName VariableDefinitions? on TypeCondition Directives? SelectionSet | 
            
                                                                                                            
                            
            
                                    
            
            
                | 754 | 209 |  |         $variableDefinitions = null; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 755 | 209 |  |         if (isset($this->lexer->options['experimentalFragmentVariables'])) { | 
            
                                                                                                            
                            
            
                                    
            
            
                | 756 | 4 |  |             $variableDefinitions = $this->parseVariableDefinitions(); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 757 |  |  |         } | 
            
                                                                                                            
                            
            
                                    
            
            
                | 758 | 209 |  |         $this->expectKeyword('on'); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 759 | 208 |  |         $typeCondition = $this->parseNamedType(); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 760 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 761 | 208 |  |         return new FragmentDefinitionNode([ | 
            
                                                                                                            
                            
            
                                    
            
            
                | 762 | 208 |  |             'name'                => $name, | 
            
                                                                                                            
                            
            
                                    
            
            
                | 763 | 208 |  |             'variableDefinitions' => $variableDefinitions, | 
            
                                                                                                            
                            
            
                                    
            
            
                | 764 | 208 |  |             'typeCondition'       => $typeCondition, | 
            
                                                                                                            
                            
            
                                    
            
            
                | 765 | 208 |  |             'directives'          => $this->parseDirectives(false), | 
            
                                                                                                            
                            
            
                                    
            
            
                | 766 | 208 |  |             'selectionSet'        => $this->parseSelectionSet(), | 
            
                                                                                                            
                            
            
                                    
            
            
                | 767 | 207 |  |             'loc'                 => $this->loc($start), | 
            
                                                                                                            
                            
            
                                    
            
            
                | 768 |  |  |         ]); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 769 |  |  |     } | 
            
                                                                                                            
                            
            
                                    
            
            
                | 770 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 771 |  |  |     /** | 
            
                                                                                                            
                            
            
                                    
            
            
                | 772 |  |  |      * @throws SyntaxError | 
            
                                                                                                            
                            
            
                                    
            
            
                | 773 |  |  |      */ | 
            
                                                                                                            
                            
            
                                    
            
            
                | 774 | 212 |  |     private function parseFragmentName() : NameNode | 
            
                                                                                                            
                            
            
                                    
            
            
                | 775 |  |  |     { | 
            
                                                                                                            
                            
            
                                    
            
            
                | 776 | 212 |  |         if ($this->lexer->token->value === 'on') { | 
            
                                                                                                            
                            
            
                                    
            
            
                | 777 | 1 |  |             throw $this->unexpected(); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 778 |  |  |         } | 
            
                                                                                                            
                            
            
                                    
            
            
                | 779 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 780 | 211 |  |         return $this->parseName(); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 781 |  |  |     } | 
            
                                                                                                            
                            
            
                                    
            
            
                | 782 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 783 |  |  |     // Implements the parsing rules in the Values section. | 
            
                                                                                                            
                            
            
                                    
            
            
                | 784 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 785 |  |  |     /** | 
            
                                                                                                            
                            
            
                                    
            
            
                | 786 |  |  |      * Value[Const] : | 
            
                                                                                                            
                            
            
                                    
            
            
                | 787 |  |  |      *   - [~Const] Variable | 
            
                                                                                                            
                            
            
                                    
            
            
                | 788 |  |  |      *   - IntValue | 
            
                                                                                                            
                            
            
                                    
            
            
                | 789 |  |  |      *   - FloatValue | 
            
                                                                                                            
                            
            
                                    
            
            
                | 790 |  |  |      *   - StringValue | 
            
                                                                                                            
                            
            
                                    
            
            
                | 791 |  |  |      *   - BooleanValue | 
            
                                                                                                            
                            
            
                                    
            
            
                | 792 |  |  |      *   - NullValue | 
            
                                                                                                            
                            
            
                                    
            
            
                | 793 |  |  |      *   - EnumValue | 
            
                                                                                                            
                            
            
                                    
            
            
                | 794 |  |  |      *   - ListValue[?Const] | 
            
                                                                                                            
                            
            
                                    
            
            
                | 795 |  |  |      *   - ObjectValue[?Const] | 
            
                                                                                                            
                            
            
                                    
            
            
                | 796 |  |  |      * | 
            
                                                                                                            
                            
            
                                    
            
            
                | 797 |  |  |      * BooleanValue : one of `true` `false` | 
            
                                                                                                            
                            
            
                                    
            
            
                | 798 |  |  |      * | 
            
                                                                                                            
                            
            
                                    
            
            
                | 799 |  |  |      * NullValue : `null` | 
            
                                                                                                            
                            
            
                                    
            
            
                | 800 |  |  |      * | 
            
                                                                                                            
                            
            
                                    
            
            
                | 801 |  |  |      * EnumValue : Name but not `true`, `false` or `null` | 
            
                                                                                                            
                            
            
                                    
            
            
                | 802 |  |  |      * | 
            
                                                                                                            
                            
            
                                    
            
            
                | 803 |  |  |      * @return BooleanValueNode|EnumValueNode|FloatValueNode|IntValueNode|StringValueNode|VariableNode|ListValueNode|ObjectValueNode|NullValueNode | 
            
                                                                                                            
                            
            
                                    
            
            
                | 804 |  |  |      * | 
            
                                                                                                            
                            
            
                                    
            
            
                | 805 |  |  |      * @throws SyntaxError | 
            
                                                                                                            
                            
            
                                    
            
            
                | 806 |  |  |      */ | 
            
                                                                                                            
                            
            
                                    
            
            
                | 807 | 380 |  |     private function parseValueLiteral(bool $isConst) : ValueNode | 
            
                                                                                                            
                            
            
                                    
            
            
                | 808 |  |  |     { | 
            
                                                                                                            
                            
            
                                    
            
            
                | 809 | 380 |  |         $token = $this->lexer->token; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 810 | 380 |  |         switch ($token->kind) { | 
            
                                                                                                            
                            
            
                                    
            
            
                | 811 | 380 |  |             case Token::BRACKET_L: | 
            
                                                                                                            
                            
            
                                    
            
            
                | 812 | 34 |  |                 return $this->parseArray($isConst); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 813 | 379 |  |             case Token::BRACE_L: | 
            
                                                                                                            
                            
            
                                    
            
            
                | 814 | 42 |  |                 return $this->parseObject($isConst); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 815 | 379 |  |             case Token::INT: | 
            
                                                                                                            
                            
            
                                    
            
            
                | 816 | 94 |  |                 $this->lexer->advance(); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 817 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 818 | 94 |  |                 return new IntValueNode([ | 
            
                                                                                                            
                            
            
                                    
            
            
                | 819 | 94 |  |                     'value' => $token->value, | 
            
                                                                                                            
                            
            
                                    
            
            
                | 820 | 94 |  |                     'loc'   => $this->loc($token), | 
            
                                                                                                            
                            
            
                                    
            
            
                | 821 |  |  |                 ]); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 822 | 323 |  |             case Token::FLOAT: | 
            
                                                                                                            
                            
            
                                    
            
            
                | 823 | 14 |  |                 $this->lexer->advance(); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 824 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 825 | 14 |  |                 return new FloatValueNode([ | 
            
                                                                                                            
                            
            
                                    
            
            
                | 826 | 14 |  |                     'value' => $token->value, | 
            
                                                                                                            
                            
            
                                    
            
            
                | 827 | 14 |  |                     'loc'   => $this->loc($token), | 
            
                                                                                                            
                            
            
                                    
            
            
                | 828 |  |  |                 ]); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 829 | 315 |  |             case Token::STRING: | 
            
                                                                                                            
                            
            
                                    
            
            
                | 830 | 241 |  |             case Token::BLOCK_STRING: | 
            
                                                                                                            
                            
            
                                    
            
            
                | 831 | 115 |  |                 return $this->parseStringLiteral(); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 832 | 237 |  |             case Token::NAME: | 
            
                                                                                                            
                            
            
                                    
            
            
                | 833 | 132 |  |                 if ($token->value === 'true' || $token->value === 'false') { | 
            
                                                                                                            
                            
            
                                    
            
            
                | 834 | 86 |  |                     $this->lexer->advance(); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 835 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 836 | 86 |  |                     return new BooleanValueNode([ | 
            
                                                                                                            
                            
            
                                    
            
            
                | 837 | 86 |  |                         'value' => $token->value === 'true', | 
            
                                                                                                            
                            
            
                                    
            
            
                | 838 | 86 |  |                         'loc'   => $this->loc($token), | 
            
                                                                                                            
                            
            
                                    
            
            
                | 839 |  |  |                     ]); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 840 |  |  |                 } | 
            
                                                                                                            
                            
            
                                    
            
            
                | 841 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 842 | 69 |  |                 if ($token->value === 'null') { | 
            
                                                                                                            
                            
            
                                    
            
            
                | 843 | 32 |  |                     $this->lexer->advance(); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 844 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 845 | 32 |  |                     return new NullValueNode([ | 
            
                                                                                                            
                            
            
                                    
            
            
                | 846 | 32 |  |                         'loc' => $this->loc($token), | 
            
                                                                                                            
                            
            
                                    
            
            
                | 847 |  |  |                     ]); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 848 |  |  |                 } else { | 
            
                                                                                                            
                            
            
                                    
            
            
                | 849 | 47 |  |                     $this->lexer->advance(); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 850 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 851 | 47 |  |                     return new EnumValueNode([ | 
            
                                                                                                            
                            
            
                                    
            
            
                | 852 | 47 |  |                         'value' => $token->value, | 
            
                                                                                                            
                            
            
                                    
            
            
                | 853 | 47 |  |                         'loc'   => $this->loc($token), | 
            
                                                                                                            
                            
            
                                    
            
            
                | 854 |  |  |                     ]); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 855 |  |  |                 } | 
            
                                                                                                            
                            
            
                                    
            
            
                | 856 |  |  |                 break; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 857 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 858 | 124 |  |             case Token::DOLLAR: | 
            
                                                                                                            
                            
            
                                    
            
            
                | 859 | 124 |  |                 if (! $isConst) { | 
            
                                                                                                            
                            
            
                                    
            
            
                | 860 | 123 |  |                     return $this->parseVariable(); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 861 |  |  |                 } | 
            
                                                                                                            
                            
            
                                    
            
            
                | 862 | 1 |  |                 break; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 863 |  |  |         } | 
            
                                                                                                            
                            
            
                                    
            
            
                | 864 | 1 |  |         throw $this->unexpected(); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 865 |  |  |     } | 
            
                                                                                                            
                            
            
                                    
            
            
                | 866 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 867 | 124 |  |     private function parseStringLiteral() : StringValueNode | 
            
                                                                                                            
                            
            
                                    
            
            
                | 868 |  |  |     { | 
            
                                                                                                            
                            
            
                                    
            
            
                | 869 | 124 |  |         $token = $this->lexer->token; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 870 | 124 |  |         $this->lexer->advance(); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 871 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 872 | 124 |  |         return new StringValueNode([ | 
            
                                                                                                            
                            
            
                                    
            
            
                | 873 | 124 |  |             'value' => $token->value, | 
            
                                                                                                            
                            
            
                                    
            
            
                | 874 | 124 |  |             'block' => $token->kind === Token::BLOCK_STRING, | 
            
                                                                                                            
                            
            
                                    
            
            
                | 875 | 124 |  |             'loc'   => $this->loc($token), | 
            
                                                                                                            
                            
            
                                    
            
            
                | 876 |  |  |         ]); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 877 |  |  |     } | 
            
                                                                                                            
                            
            
                                    
            
            
                | 878 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 879 |  |  |     /** | 
            
                                                                                                            
                            
            
                                    
            
            
                | 880 |  |  |      * @return BooleanValueNode|EnumValueNode|FloatValueNode|IntValueNode|StringValueNode|VariableNode | 
            
                                                                                                            
                            
            
                                    
            
            
                | 881 |  |  |      * | 
            
                                                                                                            
                            
            
                                    
            
            
                | 882 |  |  |      * @throws SyntaxError | 
            
                                                                                                            
                            
            
                                    
            
            
                | 883 |  |  |      */ | 
            
                                                                                                            
                            
            
                                    
            
            
                | 884 | 19 |  |     private function parseConstValue() : ValueNode | 
            
                                                                                                            
                            
            
                                    
            
            
                | 885 |  |  |     { | 
            
                                                                                                            
                            
            
                                    
            
            
                | 886 | 19 |  |         return $this->parseValueLiteral(true); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 887 |  |  |     } | 
            
                                                                                                            
                            
            
                                    
            
            
                | 888 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 889 |  |  |     /** | 
            
                                                                                                            
                            
            
                                    
            
            
                | 890 |  |  |      * @return BooleanValueNode|EnumValueNode|FloatValueNode|IntValueNode|ListValueNode|ObjectValueNode|StringValueNode|VariableNode | 
            
                                                                                                            
                            
            
                                    
            
            
                | 891 |  |  |      */ | 
            
                                                                                                            
                            
            
                                    
            
            
                | 892 | 27 |  |     private function parseVariableValue() : ValueNode | 
            
                                                                                                            
                            
            
                                    
            
            
                | 893 |  |  |     { | 
            
                                                                                                            
                            
            
                                    
            
            
                | 894 | 27 |  |         return $this->parseValueLiteral(false); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 895 |  |  |     } | 
            
                                                                                                            
                            
            
                                    
            
            
                | 896 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 897 | 34 |  |     private function parseArray(bool $isConst) : ListValueNode | 
            
                                                                                                            
                            
            
                                    
            
            
                | 898 |  |  |     { | 
            
                                                                                                            
                            
            
                                    
            
            
                | 899 | 34 |  |         $start   = $this->lexer->token; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 900 |  |  |         $parseFn = $isConst ? function () { | 
            
                                                                                                            
                            
            
                                    
            
            
                | 901 | 5 |  |             return $this->parseConstValue(); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 902 |  |  |         } : function () { | 
            
                                                                                                            
                            
            
                                    
            
            
                | 903 | 27 |  |             return $this->parseVariableValue(); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 904 | 34 |  |         }; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 905 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 906 | 34 |  |         return new ListValueNode( | 
            
                                                                                                            
                            
            
                                    
            
            
                | 907 |  |  |             [ | 
            
                                                                                                            
                            
            
                                    
            
            
                | 908 | 34 |  |                 'values' => $this->any(Token::BRACKET_L, $parseFn, Token::BRACKET_R), | 
            
                                                                                                            
                            
            
                                    
            
            
                | 909 | 33 |  |                 'loc'    => $this->loc($start), | 
            
                                                                                                            
                            
            
                                    
            
            
                | 910 |  |  |             ] | 
            
                                                                                                            
                            
            
                                    
            
            
                | 911 |  |  |         ); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 912 |  |  |     } | 
            
                                                                                                            
                            
            
                                    
            
            
                | 913 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 914 | 42 |  |     private function parseObject(bool $isConst) : ObjectValueNode | 
            
                                                                                                            
                            
            
                                    
            
            
                | 915 |  |  |     { | 
            
                                                                                                            
                            
            
                                    
            
            
                | 916 | 42 |  |         $start = $this->lexer->token; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 917 | 42 |  |         $this->expect(Token::BRACE_L); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 918 | 42 |  |         $fields = []; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 919 | 42 |  |         while (! $this->skip(Token::BRACE_R)) { | 
            
                                                                                                            
                            
            
                                    
            
            
                | 920 | 42 |  |             $fields[] = $this->parseObjectField($isConst); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 921 |  |  |         } | 
            
                                                                                                            
                            
            
                                    
            
            
                | 922 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 923 | 41 |  |         return new ObjectValueNode([ | 
            
                                                                                                            
                            
            
                                    
            
            
                | 924 | 41 |  |             'fields' => new NodeList($fields), | 
            
                                                                                                            
                            
            
                                    
            
            
                | 925 | 41 |  |             'loc'    => $this->loc($start), | 
            
                                                                                                            
                            
            
                                    
            
            
                | 926 |  |  |         ]); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 927 |  |  |     } | 
            
                                                                                                            
                            
            
                                    
            
            
                | 928 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 929 | 42 |  |     private function parseObjectField(bool $isConst) : ObjectFieldNode | 
            
                                                                                                            
                            
            
                                    
            
            
                | 930 |  |  |     { | 
            
                                                                                                            
                            
            
                                    
            
            
                | 931 | 42 |  |         $start = $this->lexer->token; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 932 | 42 |  |         $name  = $this->parseName(); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 933 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 934 | 42 |  |         $this->expect(Token::COLON); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 935 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 936 | 42 |  |         return new ObjectFieldNode([ | 
            
                                                                                                            
                            
            
                                    
            
            
                | 937 | 42 |  |             'name'  => $name, | 
            
                                                                                                            
                            
            
                                    
            
            
                | 938 | 42 |  |             'value' => $this->parseValueLiteral($isConst), | 
            
                                                                                                            
                            
            
                                    
            
            
                | 939 | 41 |  |             'loc'   => $this->loc($start), | 
            
                                                                                                            
                            
            
                                    
            
            
                | 940 |  |  |         ]); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 941 |  |  |     } | 
            
                                                                                                            
                            
            
                                    
            
            
                | 942 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 943 |  |  |     // Implements the parsing rules in the Directives section. | 
            
                                                                                                            
                            
            
                                    
            
            
                | 944 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 945 |  |  |     /** | 
            
                                                                                                            
                            
            
                                    
            
            
                | 946 |  |  |      * @throws SyntaxError | 
            
                                                                                                            
                            
            
                                    
            
            
                | 947 |  |  |      */ | 
            
                                                                                                            
                            
            
                                    
            
            
                | 948 | 956 |  |     private function parseDirectives(bool $isConst) : NodeList | 
            
                                                                                                            
                            
            
                                    
            
            
                | 949 |  |  |     { | 
            
                                                                                                            
                            
            
                                    
            
            
                | 950 | 956 |  |         $directives = []; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 951 | 956 |  |         while ($this->peek(Token::AT)) { | 
            
                                                                                                            
                            
            
                                    
            
            
                | 952 | 95 |  |             $directives[] = $this->parseDirective($isConst); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 953 |  |  |         } | 
            
                                                                                                            
                            
            
                                    
            
            
                | 954 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 955 | 956 |  |         return new NodeList($directives); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 956 |  |  |     } | 
            
                                                                                                            
                            
            
                                    
            
            
                | 957 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 958 |  |  |     /** | 
            
                                                                                                            
                            
            
                                    
            
            
                | 959 |  |  |      * @throws SyntaxError | 
            
                                                                                                            
                            
            
                                    
            
            
                | 960 |  |  |      */ | 
            
                                                                                                            
                            
            
                                    
            
            
                | 961 | 95 |  |     private function parseDirective(bool $isConst) : DirectiveNode | 
            
                                                                                                            
                            
            
                                    
            
            
                | 962 |  |  |     { | 
            
                                                                                                            
                            
            
                                    
            
            
                | 963 | 95 |  |         $start = $this->lexer->token; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 964 | 95 |  |         $this->expect(Token::AT); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 965 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 966 | 95 |  |         return new DirectiveNode([ | 
            
                                                                                                            
                            
            
                                    
            
            
                | 967 | 95 |  |             'name'      => $this->parseName(), | 
            
                                                                                                            
                            
            
                                    
            
            
                | 968 | 95 |  |             'arguments' => $this->parseArguments($isConst), | 
            
                                                                                                            
                            
            
                                    
            
            
                | 969 | 95 |  |             'loc'       => $this->loc($start), | 
            
                                                                                                            
                            
            
                                    
            
            
                | 970 |  |  |         ]); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 971 |  |  |     } | 
            
                                                                                                            
                            
            
                                    
            
            
                | 972 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 973 |  |  |     // Implements the parsing rules in the Types section. | 
            
                                                                                                            
                            
            
                                    
            
            
                | 974 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 975 |  |  |     /** | 
            
                                                                                                            
                            
            
                                    
            
            
                | 976 |  |  |      * Handles the Type: TypeName, ListType, and NonNullType parsing rules. | 
            
                                                                                                            
                            
            
                                    
            
            
                | 977 |  |  |      * | 
            
                                                                                                            
                            
            
                                    
            
            
                | 978 |  |  |      * @return ListTypeNode|NameNode|NonNullTypeNode | 
            
                                                                                                            
                            
            
                                    
            
            
                | 979 |  |  |      * | 
            
                                                                                                            
                            
            
                                    
            
            
                | 980 |  |  |      * @throws SyntaxError | 
            
                                                                                                            
                            
            
                                    
            
            
                | 981 |  |  |      */ | 
            
                                                                                                            
                            
            
                                    
            
            
                | 982 | 361 |  |     private function parseTypeReference() : TypeNode | 
            
                                                                                                            
                            
            
                                    
            
            
                | 983 |  |  |     { | 
            
                                                                                                            
                            
            
                                    
            
            
                | 984 | 361 |  |         $start = $this->lexer->token; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 985 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 986 | 361 |  |         if ($this->skip(Token::BRACKET_L)) { | 
            
                                                                                                            
                            
            
                                    
            
            
                | 987 | 91 |  |             $type = $this->parseTypeReference(); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 988 | 91 |  |             $this->expect(Token::BRACKET_R); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 989 | 91 |  |             $type = new ListTypeNode([ | 
            
                                                                                                            
                            
            
                                    
            
            
                | 990 | 91 |  |                 'type' => $type, | 
            
                                                                                                            
                            
            
                                    
            
            
                | 991 | 91 |  |                 'loc'  => $this->loc($start), | 
            
                                                                                                            
                            
            
                                    
            
            
                | 992 |  |  |             ]); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 993 |  |  |         } else { | 
            
                                                                                                            
                            
            
                                    
            
            
                | 994 | 361 |  |             $type = $this->parseNamedType(); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 995 |  |  |         } | 
            
                                                                                                            
                            
            
                                    
            
            
                | 996 | 361 |  |         if ($this->skip(Token::BANG)) { | 
            
                                                                                                            
                            
            
                                    
            
            
                | 997 | 119 |  |             return new NonNullTypeNode([ | 
            
                                                                                                            
                            
            
                                    
            
            
                | 998 | 119 |  |                 'type' => $type, | 
            
                                                                                                            
                            
            
                                    
            
            
                | 999 | 119 |  |                 'loc'  => $this->loc($start), | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1000 |  |  |             ]); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1001 |  |  |         } | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1002 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1003 | 326 |  |         return $type; | 
                            
                    |  |  |  | 
                                                                                        
                                                                                     | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1004 |  |  |     } | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1005 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1006 | 596 |  |     private function parseNamedType() : NamedTypeNode | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1007 |  |  |     { | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1008 | 596 |  |         $start = $this->lexer->token; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1009 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1010 | 596 |  |         return new NamedTypeNode([ | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1011 | 596 |  |             'name' => $this->parseName(), | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1012 | 593 |  |             'loc'  => $this->loc($start), | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1013 |  |  |         ]); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1014 |  |  |     } | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1015 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1016 |  |  |     // Implements the parsing rules in the Type Definition section. | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1017 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1018 |  |  |     /** | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1019 |  |  |      * TypeSystemDefinition : | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1020 |  |  |      *   - SchemaDefinition | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1021 |  |  |      *   - TypeDefinition | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1022 |  |  |      *   - TypeExtension | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1023 |  |  |      *   - DirectiveDefinition | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1024 |  |  |      * | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1025 |  |  |      * TypeDefinition : | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1026 |  |  |      *   - ScalarTypeDefinition | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1027 |  |  |      *   - ObjectTypeDefinition | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1028 |  |  |      *   - InterfaceTypeDefinition | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1029 |  |  |      *   - UnionTypeDefinition | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1030 |  |  |      *   - EnumTypeDefinition | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1031 |  |  |      *   - InputObjectTypeDefinition | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1032 |  |  |      * | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1033 |  |  |      * @throws SyntaxError | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1034 |  |  |      */ | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1035 | 256 |  |     private function parseTypeSystemDefinition() : TypeSystemDefinitionNode | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1036 |  |  |     { | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1037 |  |  |         // Many definitions begin with a description and require a lookahead. | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1038 | 256 |  |         $keywordToken = $this->peekDescription() | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1039 | 7 |  |             ? $this->lexer->lookahead() | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1040 | 256 |  |             : $this->lexer->token; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1041 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1042 | 256 |  |         if ($keywordToken->kind === Token::NAME) { | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1043 | 256 |  |             switch ($keywordToken->value) { | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1044 | 256 |  |                 case 'schema': | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1045 | 42 |  |                     return $this->parseSchemaDefinition(); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1046 | 254 |  |                 case 'scalar': | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1047 | 68 |  |                     return $this->parseScalarTypeDefinition(); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1048 | 253 |  |                 case 'type': | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1049 | 222 |  |                     return $this->parseObjectTypeDefinition(); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1050 | 174 |  |                 case 'interface': | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1051 | 96 |  |                     return $this->parseInterfaceTypeDefinition(); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1052 | 150 |  |                 case 'union': | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1053 | 85 |  |                     return $this->parseUnionTypeDefinition(); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1054 | 134 |  |                 case 'enum': | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1055 | 76 |  |                     return $this->parseEnumTypeDefinition(); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1056 | 124 |  |                 case 'input': | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1057 | 85 |  |                     return $this->parseInputObjectTypeDefinition(); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1058 | 105 |  |                 case 'extend': | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1059 | 65 |  |                     return $this->parseTypeExtension(); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1060 | 90 |  |                 case 'directive': | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1061 | 90 |  |                     return $this->parseDirectiveDefinition(); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1062 |  |  |             } | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1063 |  |  |         } | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1064 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1065 |  |  |         throw $this->unexpected($keywordToken); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1066 |  |  |     } | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1067 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1068 | 258 |  |     private function peekDescription() : bool | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1069 |  |  |     { | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1070 | 258 |  |         return $this->peek(Token::STRING) || $this->peek(Token::BLOCK_STRING); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1071 |  |  |     } | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1072 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1073 | 250 |  |     private function parseDescription() : ?StringValueNode | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1074 |  |  |     { | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1075 | 250 |  |         if ($this->peekDescription()) { | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1076 | 11 |  |             return $this->parseStringLiteral(); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1077 |  |  |         } | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1078 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1079 | 250 |  |         return null; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1080 |  |  |     } | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1081 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1082 |  |  |     /** | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1083 |  |  |      * @throws SyntaxError | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1084 |  |  |      */ | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1085 | 42 |  |     private function parseSchemaDefinition() : SchemaDefinitionNode | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1086 |  |  |     { | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1087 | 42 |  |         $start = $this->lexer->token; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1088 | 42 |  |         $this->expectKeyword('schema'); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1089 | 42 |  |         $directives = $this->parseDirectives(true); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1090 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1091 | 42 |  |         $operationTypes = $this->many( | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1092 | 42 |  |             Token::BRACE_L, | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1093 |  |  |             function () { | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1094 | 42 |  |                 return $this->parseOperationTypeDefinition(); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1095 | 42 |  |             }, | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1096 | 42 |  |             Token::BRACE_R | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1097 |  |  |         ); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1098 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1099 | 42 |  |         return new SchemaDefinitionNode([ | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1100 | 42 |  |             'directives'     => $directives, | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1101 | 42 |  |             'operationTypes' => $operationTypes, | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1102 | 42 |  |             'loc'            => $this->loc($start), | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1103 |  |  |         ]); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1104 |  |  |     } | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1105 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1106 |  |  |     /** | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1107 |  |  |      * @throws SyntaxError | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1108 |  |  |      */ | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1109 | 51 |  |     private function parseOperationTypeDefinition() : OperationTypeDefinitionNode | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1110 |  |  |     { | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1111 | 51 |  |         $start     = $this->lexer->token; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1112 | 51 |  |         $operation = $this->parseOperationType(); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1113 | 51 |  |         $this->expect(Token::COLON); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1114 | 51 |  |         $type = $this->parseNamedType(); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1115 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1116 | 51 |  |         return new OperationTypeDefinitionNode([ | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1117 | 51 |  |             'operation' => $operation, | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1118 | 51 |  |             'type'      => $type, | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1119 | 51 |  |             'loc'       => $this->loc($start), | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1120 |  |  |         ]); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1121 |  |  |     } | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1122 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1123 |  |  |     /** | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1124 |  |  |      * @throws SyntaxError | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1125 |  |  |      */ | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1126 | 68 |  |     private function parseScalarTypeDefinition() : ScalarTypeDefinitionNode | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1127 |  |  |     { | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1128 | 68 |  |         $start       = $this->lexer->token; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1129 | 68 |  |         $description = $this->parseDescription(); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1130 | 68 |  |         $this->expectKeyword('scalar'); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1131 | 68 |  |         $name       = $this->parseName(); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1132 | 68 |  |         $directives = $this->parseDirectives(true); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1133 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1134 | 68 |  |         return new ScalarTypeDefinitionNode([ | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1135 | 68 |  |             'name'        => $name, | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1136 | 68 |  |             'directives'  => $directives, | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1137 | 68 |  |             'loc'         => $this->loc($start), | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1138 | 68 |  |             'description' => $description, | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1139 |  |  |         ]); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1140 |  |  |     } | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1141 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1142 |  |  |     /** | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1143 |  |  |      * @throws SyntaxError | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1144 |  |  |      */ | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1145 | 223 |  |     private function parseObjectTypeDefinition() : ObjectTypeDefinitionNode | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1146 |  |  |     { | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1147 | 223 |  |         $start       = $this->lexer->token; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1148 | 223 |  |         $description = $this->parseDescription(); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1149 | 223 |  |         $this->expectKeyword('type'); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1150 | 223 |  |         $name       = $this->parseName(); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1151 | 223 |  |         $interfaces = $this->parseImplementsInterfaces(); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1152 | 223 |  |         $directives = $this->parseDirectives(true); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1153 | 223 |  |         $fields     = $this->parseFieldsDefinition(); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1154 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1155 | 222 |  |         return new ObjectTypeDefinitionNode([ | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1156 | 222 |  |             'name'        => $name, | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1157 | 222 |  |             'interfaces'  => $interfaces, | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1158 | 222 |  |             'directives'  => $directives, | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1159 | 222 |  |             'fields'      => $fields, | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1160 | 222 |  |             'loc'         => $this->loc($start), | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1161 | 222 |  |             'description' => $description, | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1162 |  |  |         ]); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1163 |  |  |     } | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1164 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1165 |  |  |     /** | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1166 |  |  |      * ImplementsInterfaces : | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1167 |  |  |      *   - implements `&`? NamedType | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1168 |  |  |      *   - ImplementsInterfaces & NamedType | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1169 |  |  |      * | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1170 |  |  |      * @return NamedTypeNode[] | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1171 |  |  |      */ | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1172 | 227 |  |     private function parseImplementsInterfaces() : array | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1173 |  |  |     { | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1174 | 227 |  |         $types = []; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1175 | 227 |  |         if ($this->lexer->token->value === 'implements') { | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1176 | 100 |  |             $this->lexer->advance(); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1177 |  |  |             // Optional leading ampersand | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1178 | 100 |  |             $this->skip(Token::AMP); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1179 |  |  |             do { | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1180 | 100 |  |                 $types[] = $this->parseNamedType(); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1181 | 100 |  |             } while ($this->skip(Token::AMP) || | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1182 |  |  |                 // Legacy support for the SDL? | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1183 | 100 |  |                 (! empty($this->lexer->options['allowLegacySDLImplementsInterfaces']) && $this->peek(Token::NAME)) | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1184 |  |  |             ); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1185 |  |  |         } | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1186 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1187 | 227 |  |         return $types; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1188 |  |  |     } | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1189 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1190 |  |  |     /** | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1191 |  |  |      * @throws SyntaxError | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1192 |  |  |      */ | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1193 | 228 |  |     private function parseFieldsDefinition() : NodeList | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1194 |  |  |     { | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1195 |  |  |         // Legacy support for the SDL? | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1196 | 228 |  |         if (! empty($this->lexer->options['allowLegacySDLEmptyFields']) | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1197 | 228 |  |             && $this->peek(Token::BRACE_L) | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1198 | 228 |  |             && $this->lexer->lookahead()->kind === Token::BRACE_R | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1199 |  |  |         ) { | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1200 | 1 |  |             $this->lexer->advance(); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1201 | 1 |  |             $this->lexer->advance(); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1202 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1203 |  |  |             /** @phpstan-var NodeList<FieldDefinitionNode&Node> $nodeList */ | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1204 | 1 |  |             $nodeList = new NodeList([]); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1205 |  |  |         } else { | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1206 |  |  |             /** @phpstan-var NodeList<FieldDefinitionNode&Node> $nodeList */ | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1207 | 227 |  |             $nodeList = $this->peek(Token::BRACE_L) | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1208 | 222 |  |                 ? $this->many( | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1209 | 222 |  |                     Token::BRACE_L, | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1210 |  |  |                     function () { | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1211 | 222 |  |                         return $this->parseFieldDefinition(); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1212 | 222 |  |                     }, | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1213 | 222 |  |                     Token::BRACE_R | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1214 |  |  |                 ) | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1215 | 226 |  |                 : new NodeList([]); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1216 |  |  |         } | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1217 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1218 | 227 |  |         return $nodeList; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1219 |  |  |     } | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1220 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1221 |  |  |     /** | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1222 |  |  |      * @throws SyntaxError | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1223 |  |  |      */ | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1224 | 222 |  |     private function parseFieldDefinition() : FieldDefinitionNode | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1225 |  |  |     { | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1226 | 222 |  |         $start       = $this->lexer->token; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1227 | 222 |  |         $description = $this->parseDescription(); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1228 | 222 |  |         $name        = $this->parseName(); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1229 | 221 |  |         $args        = $this->parseArgumentsDefinition(); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1230 | 221 |  |         $this->expect(Token::COLON); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1231 | 221 |  |         $type       = $this->parseTypeReference(); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1232 | 221 |  |         $directives = $this->parseDirectives(true); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1233 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1234 | 221 |  |         return new FieldDefinitionNode([ | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1235 | 221 |  |             'name'        => $name, | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1236 | 221 |  |             'arguments'   => $args, | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1237 | 221 |  |             'type'        => $type, | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1238 | 221 |  |             'directives'  => $directives, | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1239 | 221 |  |             'loc'         => $this->loc($start), | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1240 | 221 |  |             'description' => $description, | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1241 |  |  |         ]); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1242 |  |  |     } | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1243 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1244 |  |  |     /** | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1245 |  |  |      * @throws SyntaxError | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1246 |  |  |      */ | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1247 | 232 |  |     private function parseArgumentsDefinition() : NodeList | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1248 |  |  |     { | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1249 |  |  |         /** @var NodeList<InputValueDefinitionNode&Node> $nodeList */ | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1250 | 232 |  |         $nodeList = $this->peek(Token::PAREN_L) | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1251 | 110 |  |             ? $this->many( | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1252 | 110 |  |                 Token::PAREN_L, | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1253 |  |  |                 function () { | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1254 | 110 |  |                     return $this->parseInputValueDefinition(); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1255 | 110 |  |                 }, | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1256 | 110 |  |                 Token::PAREN_R | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1257 |  |  |             ) | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1258 | 232 |  |             : new NodeList([]); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1259 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1260 | 232 |  |         return $nodeList; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1261 |  |  |     } | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1262 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1263 |  |  |     /** | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1264 |  |  |      * @throws SyntaxError | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1265 |  |  |      */ | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1266 | 120 |  |     private function parseInputValueDefinition() : InputValueDefinitionNode | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1267 |  |  |     { | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1268 | 120 |  |         $start       = $this->lexer->token; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1269 | 120 |  |         $description = $this->parseDescription(); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1270 | 120 |  |         $name        = $this->parseName(); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1271 | 120 |  |         $this->expect(Token::COLON); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1272 | 119 |  |         $type         = $this->parseTypeReference(); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1273 | 119 |  |         $defaultValue = null; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1274 | 119 |  |         if ($this->skip(Token::EQUALS)) { | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1275 | 11 |  |             $defaultValue = $this->parseConstValue(); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1276 |  |  |         } | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1277 | 119 |  |         $directives = $this->parseDirectives(true); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1278 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1279 | 119 |  |         return new InputValueDefinitionNode([ | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1280 | 119 |  |             'name'         => $name, | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1281 | 119 |  |             'type'         => $type, | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1282 | 119 |  |             'defaultValue' => $defaultValue, | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1283 | 119 |  |             'directives'   => $directives, | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1284 | 119 |  |             'loc'          => $this->loc($start), | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1285 | 119 |  |             'description'  => $description, | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1286 |  |  |         ]); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1287 |  |  |     } | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1288 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1289 |  |  |     /** | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1290 |  |  |      * @throws SyntaxError | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1291 |  |  |      */ | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1292 | 96 |  |     private function parseInterfaceTypeDefinition() : InterfaceTypeDefinitionNode | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1293 |  |  |     { | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1294 | 96 |  |         $start       = $this->lexer->token; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1295 | 96 |  |         $description = $this->parseDescription(); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1296 | 96 |  |         $this->expectKeyword('interface'); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1297 | 96 |  |         $name       = $this->parseName(); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1298 | 96 |  |         $directives = $this->parseDirectives(true); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1299 | 96 |  |         $fields     = $this->parseFieldsDefinition(); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1300 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1301 | 96 |  |         return new InterfaceTypeDefinitionNode([ | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1302 | 96 |  |             'name'        => $name, | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1303 | 96 |  |             'directives'  => $directives, | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1304 | 96 |  |             'fields'      => $fields, | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1305 | 96 |  |             'loc'         => $this->loc($start), | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1306 | 96 |  |             'description' => $description, | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1307 |  |  |         ]); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1308 |  |  |     } | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1309 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1310 |  |  |     /** | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1311 |  |  |      * UnionTypeDefinition : | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1312 |  |  |      *   - Description? union Name Directives[Const]? UnionMemberTypes? | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1313 |  |  |      * | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1314 |  |  |      * @throws SyntaxError | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1315 |  |  |      */ | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1316 | 85 |  |     private function parseUnionTypeDefinition() : UnionTypeDefinitionNode | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1317 |  |  |     { | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1318 | 85 |  |         $start       = $this->lexer->token; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1319 | 85 |  |         $description = $this->parseDescription(); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1320 | 85 |  |         $this->expectKeyword('union'); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1321 | 85 |  |         $name       = $this->parseName(); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1322 | 85 |  |         $directives = $this->parseDirectives(true); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1323 | 85 |  |         $types      = $this->parseUnionMemberTypes(); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1324 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1325 | 81 |  |         return new UnionTypeDefinitionNode([ | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1326 | 81 |  |             'name'        => $name, | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1327 | 81 |  |             'directives'  => $directives, | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1328 | 81 |  |             'types'       => $types, | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1329 | 81 |  |             'loc'         => $this->loc($start), | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1330 | 81 |  |             'description' => $description, | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1331 |  |  |         ]); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1332 |  |  |     } | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1333 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1334 |  |  |     /** | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1335 |  |  |      * UnionMemberTypes : | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1336 |  |  |      *   - = `|`? NamedType | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1337 |  |  |      *   - UnionMemberTypes | NamedType | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1338 |  |  |      * | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1339 |  |  |      * @return NamedTypeNode[] | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1340 |  |  |      */ | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1341 | 85 |  |     private function parseUnionMemberTypes() : array | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1342 |  |  |     { | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1343 | 85 |  |         $types = []; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1344 | 85 |  |         if ($this->skip(Token::EQUALS)) { | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1345 |  |  |             // Optional leading pipe | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1346 | 83 |  |             $this->skip(Token::PIPE); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1347 |  |  |             do { | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1348 | 83 |  |                 $types[] = $this->parseNamedType(); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1349 | 81 |  |             } while ($this->skip(Token::PIPE)); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1350 |  |  |         } | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1351 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1352 | 81 |  |         return $types; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1353 |  |  |     } | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1354 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1355 |  |  |     /** | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1356 |  |  |      * @throws SyntaxError | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1357 |  |  |      */ | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1358 | 76 |  |     private function parseEnumTypeDefinition() : EnumTypeDefinitionNode | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1359 |  |  |     { | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1360 | 76 |  |         $start       = $this->lexer->token; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1361 | 76 |  |         $description = $this->parseDescription(); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1362 | 76 |  |         $this->expectKeyword('enum'); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1363 | 76 |  |         $name       = $this->parseName(); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1364 | 76 |  |         $directives = $this->parseDirectives(true); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1365 | 76 |  |         $values     = $this->parseEnumValuesDefinition(); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1366 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1367 | 76 |  |         return new EnumTypeDefinitionNode([ | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1368 | 76 |  |             'name'        => $name, | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1369 | 76 |  |             'directives'  => $directives, | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1370 | 76 |  |             'values'      => $values, | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1371 | 76 |  |             'loc'         => $this->loc($start), | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1372 | 76 |  |             'description' => $description, | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1373 |  |  |         ]); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1374 |  |  |     } | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1375 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1376 |  |  |     /** | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1377 |  |  |      * @throws SyntaxError | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1378 |  |  |      */ | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1379 | 76 |  |     private function parseEnumValuesDefinition() : NodeList | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1380 |  |  |     { | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1381 |  |  |         /** @var NodeList<EnumValueDefinitionNode&Node> $nodeList */ | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1382 | 76 |  |         $nodeList = $this->peek(Token::BRACE_L) | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1383 | 75 |  |             ? $this->many( | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1384 | 75 |  |                 Token::BRACE_L, | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1385 |  |  |                 function () { | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1386 | 75 |  |                     return $this->parseEnumValueDefinition(); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1387 | 75 |  |                 }, | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1388 | 75 |  |                 Token::BRACE_R | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1389 |  |  |             ) | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1390 | 76 |  |             : new NodeList([]); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1391 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1392 | 76 |  |         return $nodeList; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1393 |  |  |     } | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1394 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1395 |  |  |     /** | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1396 |  |  |      * @throws SyntaxError | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1397 |  |  |      */ | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1398 | 75 |  |     private function parseEnumValueDefinition() : EnumValueDefinitionNode | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1399 |  |  |     { | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1400 | 75 |  |         $start       = $this->lexer->token; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1401 | 75 |  |         $description = $this->parseDescription(); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1402 | 75 |  |         $name        = $this->parseName(); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1403 | 75 |  |         $directives  = $this->parseDirectives(true); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1404 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1405 | 75 |  |         return new EnumValueDefinitionNode([ | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1406 | 75 |  |             'name'        => $name, | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1407 | 75 |  |             'directives'  => $directives, | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1408 | 75 |  |             'loc'         => $this->loc($start), | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1409 | 75 |  |             'description' => $description, | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1410 |  |  |         ]); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1411 |  |  |     } | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1412 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1413 |  |  |     /** | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1414 |  |  |      * @throws SyntaxError | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1415 |  |  |      */ | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1416 | 85 |  |     private function parseInputObjectTypeDefinition() : InputObjectTypeDefinitionNode | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1417 |  |  |     { | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1418 | 85 |  |         $start       = $this->lexer->token; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1419 | 85 |  |         $description = $this->parseDescription(); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1420 | 85 |  |         $this->expectKeyword('input'); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1421 | 85 |  |         $name       = $this->parseName(); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1422 | 85 |  |         $directives = $this->parseDirectives(true); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1423 | 85 |  |         $fields     = $this->parseInputFieldsDefinition(); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1424 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1425 | 84 |  |         return new InputObjectTypeDefinitionNode([ | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1426 | 84 |  |             'name'        => $name, | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1427 | 84 |  |             'directives'  => $directives, | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1428 | 84 |  |             'fields'      => $fields, | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1429 | 84 |  |             'loc'         => $this->loc($start), | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1430 | 84 |  |             'description' => $description, | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1431 |  |  |         ]); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1432 |  |  |     } | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1433 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1434 |  |  |     /** | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1435 |  |  |      * @throws SyntaxError | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1436 |  |  |      */ | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1437 | 85 |  |     private function parseInputFieldsDefinition() : NodeList | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1438 |  |  |     { | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1439 |  |  |         /** @var NodeList<InputValueDefinitionNode&Node> $nodeList */ | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1440 | 85 |  |         $nodeList = $this->peek(Token::BRACE_L) | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1441 | 83 |  |             ? $this->many( | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1442 | 83 |  |                 Token::BRACE_L, | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1443 |  |  |                 function () { | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1444 | 83 |  |                     return $this->parseInputValueDefinition(); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1445 | 83 |  |                 }, | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1446 | 83 |  |                 Token::BRACE_R | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1447 |  |  |             ) | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1448 | 84 |  |             : new NodeList([]); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1449 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1450 | 84 |  |         return $nodeList; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1451 |  |  |     } | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1452 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1453 |  |  |     /** | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1454 |  |  |      * TypeExtension : | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1455 |  |  |      *   - ScalarTypeExtension | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1456 |  |  |      *   - ObjectTypeExtension | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1457 |  |  |      *   - InterfaceTypeExtension | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1458 |  |  |      *   - UnionTypeExtension | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1459 |  |  |      *   - EnumTypeExtension | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1460 |  |  |      *   - InputObjectTypeDefinition | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1461 |  |  |      * | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1462 |  |  |      * @throws SyntaxError | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1463 |  |  |      */ | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1464 | 65 |  |     private function parseTypeExtension() : TypeExtensionNode | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1465 |  |  |     { | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1466 | 65 |  |         $keywordToken = $this->lexer->lookahead(); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1467 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1468 | 65 |  |         if ($keywordToken->kind === Token::NAME) { | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1469 | 64 |  |             switch ($keywordToken->value) { | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1470 | 64 |  |                 case 'schema': | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1471 | 12 |  |                     return $this->parseSchemaTypeExtension(); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1472 | 53 |  |                 case 'scalar': | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1473 | 7 |  |                     return $this->parseScalarTypeExtension(); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1474 | 52 |  |                 case 'type': | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1475 | 38 |  |                     return $this->parseObjectTypeExtension(); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1476 | 28 |  |                 case 'interface': | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1477 | 15 |  |                     return $this->parseInterfaceTypeExtension(); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1478 | 22 |  |                 case 'union': | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1479 | 14 |  |                     return $this->parseUnionTypeExtension(); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1480 | 17 |  |                 case 'enum': | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1481 | 11 |  |                     return $this->parseEnumTypeExtension(); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1482 | 13 |  |                 case 'input': | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1483 | 12 |  |                     return $this->parseInputObjectTypeExtension(); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1484 |  |  |             } | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1485 |  |  |         } | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1486 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1487 | 2 |  |         throw $this->unexpected($keywordToken); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1488 |  |  |     } | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1489 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1490 |  |  |     /** | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1491 |  |  |      * @throws SyntaxError | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1492 |  |  |      */ | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1493 | 12 |  |     private function parseSchemaTypeExtension() : SchemaTypeExtensionNode | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1494 |  |  |     { | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1495 | 12 |  |         $start = $this->lexer->token; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1496 | 12 |  |         $this->expectKeyword('extend'); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1497 | 12 |  |         $this->expectKeyword('schema'); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1498 | 12 |  |         $directives     = $this->parseDirectives(true); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1499 | 12 |  |         $operationTypes = $this->peek(Token::BRACE_L) | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1500 | 9 |  |             ? $this->many( | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1501 | 9 |  |                 Token::BRACE_L, | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1502 | 9 |  |                 [$this, 'parseOperationTypeDefinition'], | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1503 | 9 |  |                 Token::BRACE_R | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1504 |  |  |             ) | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1505 | 12 |  |             : []; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1506 | 12 |  |         if (count($directives) === 0 && count($operationTypes) === 0) { | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1507 |  |  |             $this->unexpected(); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1508 |  |  |         } | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1509 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1510 | 12 |  |         return new SchemaTypeExtensionNode([ | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1511 | 12 |  |             'directives' => $directives, | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1512 | 12 |  |             'operationTypes' => $operationTypes, | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1513 | 12 |  |             'loc' => $this->loc($start), | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1514 |  |  |         ]); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1515 |  |  |     } | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1516 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1517 |  |  |     /** | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1518 |  |  |      * @throws SyntaxError | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1519 |  |  |      */ | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1520 | 7 |  |     private function parseScalarTypeExtension() : ScalarTypeExtensionNode | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1521 |  |  |     { | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1522 | 7 |  |         $start = $this->lexer->token; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1523 | 7 |  |         $this->expectKeyword('extend'); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1524 | 7 |  |         $this->expectKeyword('scalar'); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1525 | 7 |  |         $name       = $this->parseName(); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1526 | 7 |  |         $directives = $this->parseDirectives(true); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1527 | 7 |  |         if (count($directives) === 0) { | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1528 |  |  |             throw $this->unexpected(); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1529 |  |  |         } | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1530 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1531 | 7 |  |         return new ScalarTypeExtensionNode([ | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1532 | 7 |  |             'name'       => $name, | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1533 | 7 |  |             'directives' => $directives, | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1534 | 7 |  |             'loc'        => $this->loc($start), | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1535 |  |  |         ]); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1536 |  |  |     } | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1537 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1538 |  |  |     /** | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1539 |  |  |      * @throws SyntaxError | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1540 |  |  |      */ | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1541 | 38 |  |     private function parseObjectTypeExtension() : ObjectTypeExtensionNode | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1542 |  |  |     { | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1543 | 38 |  |         $start = $this->lexer->token; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1544 | 38 |  |         $this->expectKeyword('extend'); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1545 | 38 |  |         $this->expectKeyword('type'); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1546 | 38 |  |         $name       = $this->parseName(); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1547 | 38 |  |         $interfaces = $this->parseImplementsInterfaces(); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1548 | 38 |  |         $directives = $this->parseDirectives(true); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1549 | 38 |  |         $fields     = $this->parseFieldsDefinition(); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1550 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1551 | 38 |  |         if (count($interfaces) === 0 && | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1552 | 38 |  |             count($directives) === 0 && | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1553 | 38 |  |             count($fields) === 0 | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1554 |  |  |         ) { | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1555 | 1 |  |             throw $this->unexpected(); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1556 |  |  |         } | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1557 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1558 | 37 |  |         return new ObjectTypeExtensionNode([ | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1559 | 37 |  |             'name'       => $name, | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1560 | 37 |  |             'interfaces' => $interfaces, | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1561 | 37 |  |             'directives' => $directives, | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1562 | 37 |  |             'fields'     => $fields, | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1563 | 37 |  |             'loc'        => $this->loc($start), | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1564 |  |  |         ]); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1565 |  |  |     } | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1566 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1567 |  |  |     /** | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1568 |  |  |      * @throws SyntaxError | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1569 |  |  |      */ | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1570 | 15 |  |     private function parseInterfaceTypeExtension() : InterfaceTypeExtensionNode | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1571 |  |  |     { | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1572 | 15 |  |         $start = $this->lexer->token; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1573 | 15 |  |         $this->expectKeyword('extend'); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1574 | 15 |  |         $this->expectKeyword('interface'); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1575 | 15 |  |         $name       = $this->parseName(); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1576 | 15 |  |         $directives = $this->parseDirectives(true); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1577 | 15 |  |         $fields     = $this->parseFieldsDefinition(); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1578 | 15 |  |         if (count($directives) === 0 && | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1579 | 15 |  |             count($fields) === 0 | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1580 |  |  |         ) { | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1581 |  |  |             throw $this->unexpected(); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1582 |  |  |         } | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1583 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1584 | 15 |  |         return new InterfaceTypeExtensionNode([ | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1585 | 15 |  |             'name'       => $name, | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1586 | 15 |  |             'directives' => $directives, | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1587 | 15 |  |             'fields'     => $fields, | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1588 | 15 |  |             'loc'        => $this->loc($start), | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1589 |  |  |         ]); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1590 |  |  |     } | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1591 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1592 |  |  |     /** | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1593 |  |  |      * UnionTypeExtension : | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1594 |  |  |      *   - extend union Name Directives[Const]? UnionMemberTypes | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1595 |  |  |      *   - extend union Name Directives[Const] | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1596 |  |  |      * | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1597 |  |  |      * @throws SyntaxError | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1598 |  |  |      */ | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1599 | 14 |  |     private function parseUnionTypeExtension() : UnionTypeExtensionNode | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1600 |  |  |     { | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1601 | 14 |  |         $start = $this->lexer->token; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1602 | 14 |  |         $this->expectKeyword('extend'); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1603 | 14 |  |         $this->expectKeyword('union'); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1604 | 14 |  |         $name       = $this->parseName(); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1605 | 14 |  |         $directives = $this->parseDirectives(true); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1606 | 14 |  |         $types      = $this->parseUnionMemberTypes(); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1607 | 14 |  |         if (count($directives) === 0 && count($types) === 0) { | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1608 |  |  |             throw $this->unexpected(); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1609 |  |  |         } | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1610 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1611 | 14 |  |         return new UnionTypeExtensionNode([ | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1612 | 14 |  |             'name'       => $name, | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1613 | 14 |  |             'directives' => $directives, | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1614 | 14 |  |             'types'      => $types, | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1615 | 14 |  |             'loc'        => $this->loc($start), | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1616 |  |  |         ]); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1617 |  |  |     } | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1618 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1619 |  |  |     /** | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1620 |  |  |      * @throws SyntaxError | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1621 |  |  |      */ | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1622 | 11 |  |     private function parseEnumTypeExtension() : EnumTypeExtensionNode | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1623 |  |  |     { | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1624 | 11 |  |         $start = $this->lexer->token; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1625 | 11 |  |         $this->expectKeyword('extend'); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1626 | 11 |  |         $this->expectKeyword('enum'); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1627 | 11 |  |         $name       = $this->parseName(); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1628 | 11 |  |         $directives = $this->parseDirectives(true); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1629 | 11 |  |         $values     = $this->parseEnumValuesDefinition(); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1630 | 11 |  |         if (count($directives) === 0 && | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1631 | 11 |  |             count($values) === 0 | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1632 |  |  |         ) { | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1633 |  |  |             throw $this->unexpected(); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1634 |  |  |         } | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1635 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1636 | 11 |  |         return new EnumTypeExtensionNode([ | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1637 | 11 |  |             'name'       => $name, | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1638 | 11 |  |             'directives' => $directives, | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1639 | 11 |  |             'values'     => $values, | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1640 | 11 |  |             'loc'        => $this->loc($start), | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1641 |  |  |         ]); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1642 |  |  |     } | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1643 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1644 |  |  |     /** | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1645 |  |  |      * @throws SyntaxError | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1646 |  |  |      */ | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1647 | 12 |  |     private function parseInputObjectTypeExtension() : InputObjectTypeExtensionNode | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1648 |  |  |     { | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1649 | 12 |  |         $start = $this->lexer->token; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1650 | 12 |  |         $this->expectKeyword('extend'); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1651 | 12 |  |         $this->expectKeyword('input'); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1652 | 12 |  |         $name       = $this->parseName(); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1653 | 12 |  |         $directives = $this->parseDirectives(true); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1654 | 12 |  |         $fields     = $this->parseInputFieldsDefinition(); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1655 | 12 |  |         if (count($directives) === 0 && | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1656 | 12 |  |             count($fields) === 0 | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1657 |  |  |         ) { | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1658 |  |  |             throw $this->unexpected(); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1659 |  |  |         } | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1660 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1661 | 12 |  |         return new InputObjectTypeExtensionNode([ | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1662 | 12 |  |             'name'       => $name, | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1663 | 12 |  |             'directives' => $directives, | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1664 | 12 |  |             'fields'     => $fields, | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1665 | 12 |  |             'loc'        => $this->loc($start), | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1666 |  |  |         ]); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1667 |  |  |     } | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1668 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1669 |  |  |     /** | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1670 |  |  |      * DirectiveDefinition : | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1671 |  |  |      *   - directive @ Name ArgumentsDefinition? on DirectiveLocations | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1672 |  |  |      * | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1673 |  |  |      * @throws SyntaxError | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1674 |  |  |      */ | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1675 | 90 |  |     private function parseDirectiveDefinition() : DirectiveDefinitionNode | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1676 |  |  |     { | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1677 | 90 |  |         $start       = $this->lexer->token; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1678 | 90 |  |         $description = $this->parseDescription(); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1679 | 90 |  |         $this->expectKeyword('directive'); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1680 | 90 |  |         $this->expect(Token::AT); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1681 | 90 |  |         $name = $this->parseName(); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1682 | 90 |  |         $args = $this->parseArgumentsDefinition(); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1683 | 90 |  |         $this->expectKeyword('on'); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1684 | 90 |  |         $locations = $this->parseDirectiveLocations(); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1685 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1686 | 89 |  |         return new DirectiveDefinitionNode([ | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1687 | 89 |  |             'name'        => $name, | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1688 | 89 |  |             'arguments'   => $args, | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1689 | 89 |  |             'locations'   => $locations, | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1690 | 89 |  |             'loc'         => $this->loc($start), | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1691 | 89 |  |             'description' => $description, | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1692 |  |  |         ]); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1693 |  |  |     } | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1694 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1695 |  |  |     /** | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1696 |  |  |      * @return NameNode[] | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1697 |  |  |      * | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1698 |  |  |      * @throws SyntaxError | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1699 |  |  |      */ | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1700 | 90 |  |     private function parseDirectiveLocations() : array | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1701 |  |  |     { | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1702 |  |  |         // Optional leading pipe | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1703 | 90 |  |         $this->skip(Token::PIPE); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1704 | 90 |  |         $locations = []; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1705 |  |  |         do { | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1706 | 90 |  |             $locations[] = $this->parseDirectiveLocation(); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1707 | 90 |  |         } while ($this->skip(Token::PIPE)); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1708 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1709 | 89 |  |         return $locations; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1710 |  |  |     } | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1711 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1712 |  |  |     /** | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1713 |  |  |      * @throws SyntaxError | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1714 |  |  |      */ | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1715 | 90 |  |     private function parseDirectiveLocation() : NameNode | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1716 |  |  |     { | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1717 | 90 |  |         $start = $this->lexer->token; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1718 | 90 |  |         $name  = $this->parseName(); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1719 | 90 |  |         if (DirectiveLocation::has($name->value)) { | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1720 | 90 |  |             return $name; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1721 |  |  |         } | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1722 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1723 | 1 |  |         throw $this->unexpected($start); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 1724 |  |  |     } | 
            
                                                                                                            
                                                                
            
                                    
            
            
                | 1725 |  |  | } | 
            
                                                        
            
                                    
            
            
                | 1726 |  |  |  |