@@ -24,6 +24,7 @@ import type {
24
24
FieldDefinitionNode ,
25
25
FieldNode ,
26
26
FloatValueNode ,
27
+ FragmentArgumentNode ,
27
28
FragmentDefinitionNode ,
28
29
FragmentSpreadNode ,
29
30
InlineFragmentNode ,
@@ -528,6 +529,12 @@ export class Parser {
528
529
return this . optionalMany ( TokenKind . PAREN_L , item , TokenKind . PAREN_R ) ;
529
530
}
530
531
532
+ /* experimental */
533
+ parseFragmentArguments ( ) : Array < FragmentArgumentNode > {
534
+ const item = this . parseFragmentArgument ;
535
+ return this . optionalMany ( TokenKind . PAREN_L , item , TokenKind . PAREN_R ) ;
536
+ }
537
+
531
538
/**
532
539
* Argument[Const] : Name : Value[?Const]
533
540
*/
@@ -549,6 +556,19 @@ export class Parser {
549
556
return this . parseArgument ( true ) ;
550
557
}
551
558
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
+
552
572
// Implements the parsing rules in the Fragments section.
553
573
554
574
/**
@@ -572,7 +592,7 @@ export class Parser {
572
592
return this . node < FragmentSpreadNode > ( start , {
573
593
kind : Kind . FRAGMENT_SPREAD ,
574
594
name,
575
- arguments : this . parseArguments ( false ) ,
595
+ arguments : this . parseFragmentArguments ( ) ,
576
596
directives : this . parseDirectives ( false ) ,
577
597
} ) ;
578
598
}
0 commit comments