@@ -24,6 +24,7 @@ import type {
2424 FieldDefinitionNode ,
2525 FieldNode ,
2626 FloatValueNode ,
27+ FragmentArgumentNode ,
2728 FragmentDefinitionNode ,
2829 FragmentSpreadNode ,
2930 InlineFragmentNode ,
@@ -528,6 +529,12 @@ export class Parser {
528529 return this . optionalMany ( TokenKind . PAREN_L , item , TokenKind . PAREN_R ) ;
529530 }
530531
532+ /* experimental */
533+ parseFragmentArguments ( ) : Array < FragmentArgumentNode > {
534+ const item = this . parseFragmentArgument ;
535+ return this . optionalMany ( TokenKind . PAREN_L , item , TokenKind . PAREN_R ) ;
536+ }
537+
531538 /**
532539 * Argument[Const] : Name : Value[?Const]
533540 */
@@ -549,6 +556,19 @@ export class Parser {
549556 return this . parseArgument ( true ) ;
550557 }
551558
559+ /* experimental */
560+ parseFragmentArgument ( ) : FragmentArgumentNode {
561+ const start = this . _lexer . token ;
562+ const name = this . parseName ( ) ;
563+
564+ this . expectToken ( TokenKind . COLON ) ;
565+ return this . node < FragmentArgumentNode > ( start , {
566+ kind : Kind . FRAGMENT_ARGUMENT ,
567+ name,
568+ value : this . parseValueLiteral ( false ) ,
569+ } ) ;
570+ }
571+
552572 // Implements the parsing rules in the Fragments section.
553573
554574 /**
@@ -572,7 +592,7 @@ export class Parser {
572592 return this . node < FragmentSpreadNode > ( start , {
573593 kind : Kind . FRAGMENT_SPREAD ,
574594 name,
575- arguments : this . parseArguments ( false ) ,
595+ arguments : this . parseFragmentArguments ( ) ,
576596 directives : this . parseDirectives ( false ) ,
577597 } ) ;
578598 }
0 commit comments