@@ -39,13 +39,14 @@ import type {
3939 Type ,
4040 NamedType ,
4141
42- TypeDefinition ,
42+ TypeSystemDefinition ,
43+
44+ ScalarTypeDefinition ,
4345 ObjectTypeDefinition ,
4446 FieldDefinition ,
4547 InputValueDefinition ,
4648 InterfaceTypeDefinition ,
4749 UnionTypeDefinition ,
48- ScalarTypeDefinition ,
4950 EnumTypeDefinition ,
5051 EnumValueDefinition ,
5152 InputObjectTypeDefinition ,
@@ -85,12 +86,12 @@ import {
8586 LIST_TYPE ,
8687 NON_NULL_TYPE ,
8788
89+ SCALAR_TYPE_DEFINITION ,
8890 OBJECT_TYPE_DEFINITION ,
8991 FIELD_DEFINITION ,
9092 INPUT_VALUE_DEFINITION ,
9193 INTERFACE_TYPE_DEFINITION ,
9294 UNION_TYPE_DEFINITION ,
93- SCALAR_TYPE_DEFINITION ,
9495 ENUM_TYPE_DEFINITION ,
9596 ENUM_VALUE_DEFINITION ,
9697 INPUT_OBJECT_TYPE_DEFINITION ,
@@ -185,8 +186,7 @@ function parseDocument(parser: Parser): Document {
185186 * Definition :
186187 * - OperationDefinition
187188 * - FragmentDefinition
188- * - TypeDefinition
189- * - TypeExtensionDefinition
189+ * - TypeSystemDefinition
190190 */
191191function parseDefinition ( parser : Parser ) : Definition {
192192 if ( peek ( parser , TokenKind . BRACE_L ) ) {
@@ -202,14 +202,15 @@ function parseDefinition(parser: Parser): Definition {
202202
203203 case 'fragment' : return parseFragmentDefinition ( parser ) ;
204204
205+ // Note: the Type System IDL is an experimental non-spec addition.
206+ case 'scalar' :
205207 case 'type' :
206208 case 'interface' :
207209 case 'union' :
208- case 'scalar' :
209210 case 'enum' :
210- case 'input' : return parseTypeDefinition ( parser ) ;
211- case 'extend' : return parseTypeExtensionDefinition ( parser ) ;
212- case 'directive' : return parseDirectiveDefinition ( parser ) ;
211+ case 'input' :
212+ case 'extend' :
213+ case 'directive' : return parseTypeSystemDefinition ( parser ) ;
213214 }
214215 }
215216
@@ -649,34 +650,48 @@ export function parseNamedType(parser: Parser): NamedType {
649650// Implements the parsing rules in the Type Definition section.
650651
651652/**
653+ * TypeSystemDefinition :
654+ * - TypeDefinition
655+ * - TypeExtensionDefinition
656+ * - DirectiveDefinition
657+ *
652658 * TypeDefinition :
659+ * - ScalarTypeDefinition
653660 * - ObjectTypeDefinition
654661 * - InterfaceTypeDefinition
655662 * - UnionTypeDefinition
656- * - ScalarTypeDefinition
657663 * - EnumTypeDefinition
658664 * - InputObjectTypeDefinition
659665 */
660- function parseTypeDefinition ( parser : Parser ) : TypeDefinition {
661- if ( ! peek ( parser , TokenKind . NAME ) ) {
662- throw unexpected ( parser ) ;
663- }
664- switch ( parser . token . value ) {
665- case 'type' :
666- return parseObjectTypeDefinition ( parser ) ;
667- case 'interface' :
668- return parseInterfaceTypeDefinition ( parser ) ;
669- case 'union' :
670- return parseUnionTypeDefinition ( parser ) ;
671- case 'scalar' :
672- return parseScalarTypeDefinition ( parser ) ;
673- case 'enum' :
674- return parseEnumTypeDefinition ( parser ) ;
675- case 'input' :
676- return parseInputObjectTypeDefinition ( parser ) ;
677- default :
678- throw unexpected ( parser ) ;
666+ function parseTypeSystemDefinition ( parser : Parser ) : TypeSystemDefinition {
667+ if ( peek ( parser , TokenKind . NAME ) ) {
668+ switch ( parser . token . value ) {
669+ case 'scalar' : return parseScalarTypeDefinition ( parser ) ;
670+ case 'type' : return parseObjectTypeDefinition ( parser ) ;
671+ case 'interface' : return parseInterfaceTypeDefinition ( parser ) ;
672+ case 'union' : return parseUnionTypeDefinition ( parser ) ;
673+ case 'enum' : return parseEnumTypeDefinition ( parser ) ;
674+ case 'input' : return parseInputObjectTypeDefinition ( parser ) ;
675+ case 'extend' : return parseTypeExtensionDefinition ( parser ) ;
676+ case 'directive' : return parseDirectiveDefinition ( parser ) ;
677+ }
679678 }
679+
680+ throw unexpected ( parser ) ;
681+ }
682+
683+ /**
684+ * ScalarTypeDefinition : scalar Name
685+ */
686+ function parseScalarTypeDefinition ( parser : Parser ) : ScalarTypeDefinition {
687+ const start = parser . token . start ;
688+ expectKeyword ( parser , 'scalar' ) ;
689+ const name = parseName ( parser ) ;
690+ return {
691+ kind : SCALAR_TYPE_DEFINITION ,
692+ name,
693+ loc : loc ( parser , start ) ,
694+ } ;
680695}
681696
682697/**
@@ -816,20 +831,6 @@ function parseUnionMembers(parser: Parser): Array<NamedType> {
816831 return members ;
817832}
818833
819- /**
820- * ScalarTypeDefinition : scalar Name
821- */
822- function parseScalarTypeDefinition ( parser : Parser ) : ScalarTypeDefinition {
823- const start = parser . token . start ;
824- expectKeyword ( parser , 'scalar' ) ;
825- const name = parseName ( parser ) ;
826- return {
827- kind : SCALAR_TYPE_DEFINITION ,
828- name,
829- loc : loc ( parser , start ) ,
830- } ;
831- }
832-
833834/**
834835 * EnumTypeDefinition : enum Name { EnumValueDefinition+ }
835836 */
0 commit comments