gql.tada 1.3.0 → 1.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/dist/gql-tada.d.ts +640 -382
  2. package/package.json +1 -1
@@ -259,6 +259,30 @@ type IntrospectionLikeType = {
259
259
  };
260
260
  };
261
261
 
262
+ declare const enum Token {
263
+ Name = 0,
264
+ Var = 1,
265
+ Directive = 2,
266
+ Spread = 3,
267
+ Exclam = 4,
268
+ Equal = 5,
269
+ Colon = 6,
270
+ BraceOpen = 7,
271
+ BraceClose = 8,
272
+ ParenOpen = 9,
273
+ ParenClose = 10,
274
+ BracketOpen = 11,
275
+ BracketClose = 12,
276
+ BlockString = 13,
277
+ String = 14,
278
+ Integer = 15,
279
+ Float = 16,
280
+ }
281
+ interface _match$1<Out extends string, In extends string> {
282
+ out: Out;
283
+ in: In;
284
+ }
285
+ type ignored = ' ' | '\n' | '\t' | '\r' | ',' | '\ufeff';
262
286
  type digit = '0' | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9';
263
287
  type letter =
264
288
  | 'A'
@@ -313,291 +337,423 @@ type letter =
313
337
  | 'x'
314
338
  | 'y'
315
339
  | 'z';
316
- type skipIgnored<In> = In extends `#${infer _}\n${infer In}`
317
- ? skipIgnored<In>
318
- : In extends `${' ' | '\n' | '\t' | '\r' | ',' | '\ufeff'}${infer In}`
319
- ? skipIgnored<In>
320
- : In extends string
321
- ? In
322
- : never;
323
340
  type skipDigits<In> = In extends `${digit}${infer In}` ? skipDigits<In> : In;
324
- type skipInt<In> = In extends `${'-'}${digit}${infer In}`
325
- ? skipDigits<In>
326
- : In extends `${digit}${infer In}`
327
- ? skipDigits<In>
328
- : void;
329
- type skipExponent<In> = In extends `${'e' | 'E'}${'+' | '-'}${infer In}`
330
- ? skipDigits<In>
331
- : In extends `${'e' | 'E'}${infer In}`
332
- ? skipDigits<In>
333
- : In;
334
341
  type skipFloat<In> = In extends `${'.'}${infer In}`
335
342
  ? In extends `${digit}${infer In}`
336
- ? skipExponent<skipDigits<In>>
343
+ ? In extends `${'e' | 'E'}${infer In}`
344
+ ? skipDigits<In extends `${'+' | '-'}${infer In}` ? In : In>
345
+ : In
337
346
  : void
338
- : In extends `${'e' | 'E'}${infer _}`
339
- ? skipExponent<In>
347
+ : In extends `${'e' | 'E'}${infer In}`
348
+ ? skipDigits<In extends `${'+' | '-'}${infer In}` ? In : In>
340
349
  : void;
341
350
  type skipBlockString<In> = In extends `${infer Hd}${'"""'}${infer In}`
342
- ? Hd extends `${infer _}${'\\'}`
343
- ? skipBlockString<skipIgnored<In>>
351
+ ? Hd extends `${string}${'\\'}`
352
+ ? skipBlockString<In>
344
353
  : In
345
- : void;
354
+ : In;
346
355
  type skipString<In> = In extends `${infer Hd}${'"'}${infer In}`
347
- ? Hd extends `${infer _}${'\\'}`
356
+ ? Hd extends `${string}${'\\'}`
348
357
  ? skipString<In>
349
358
  : In
350
- : void;
351
- type _takeNameLiteralRec<PrevMatch extends string, In> = In extends `${infer Match}${infer Out}`
359
+ : In;
360
+ type takeNameLiteralRec<
361
+ PrevMatch extends string,
362
+ In extends string,
363
+ > = In extends `${infer Match}${infer Out}`
352
364
  ? Match extends letter | digit | '_'
353
- ? _takeNameLiteralRec<`${PrevMatch}${Match}`, Out>
354
- : [PrevMatch, In]
355
- : [PrevMatch, In];
356
- type takeNameLiteral<In> = In extends `${infer Match}${infer In}`
357
- ? Match extends letter | '_'
358
- ? _takeNameLiteralRec<Match, In>
359
- : void
360
- : void;
361
- type takeName<In> = takeNameLiteral<In> extends [infer Out, infer In]
362
- ? [
363
- {
364
- kind: Kind.NAME;
365
- value: Out;
366
- },
367
- In,
368
- ]
369
- : void;
370
- type takeOptionalName<In> = takeNameLiteral<In> extends [infer Out, infer In]
371
- ? [
365
+ ? takeNameLiteralRec<`${PrevMatch}${Match}`, Out>
366
+ : _match$1<PrevMatch, In>
367
+ : _match$1<PrevMatch, In>;
368
+ interface VarTokenNode<Name extends string = string> {
369
+ kind: Token.Var;
370
+ name: Name;
371
+ }
372
+ interface NameTokenNode<Name extends string = string> {
373
+ kind: Token.Name;
374
+ name: Name;
375
+ }
376
+ interface DirectiveTokenNode<Name extends string = string> {
377
+ kind: Token.Directive;
378
+ name: Name;
379
+ }
380
+ type TokenNode = Token | NameTokenNode | VarTokenNode | DirectiveTokenNode;
381
+ interface _state<In extends string, Out extends TokenNode[]> {
382
+ out: Out;
383
+ in: In;
384
+ }
385
+ type tokenizeRec<State> = State extends _state<'', any>
386
+ ? State['out']
387
+ : State extends _state<infer In, infer Out>
388
+ ? tokenizeRec<
389
+ In extends `#${string}\n${infer In}`
390
+ ? _state<In, Out>
391
+ : In extends `${ignored}${infer In}`
392
+ ? _state<In, Out>
393
+ : In extends `...${infer In}`
394
+ ? _state<In, [...Out, Token.Spread]>
395
+ : In extends `!${infer In}`
396
+ ? _state<In, [...Out, Token.Exclam]>
397
+ : In extends `=${infer In}`
398
+ ? _state<In, [...Out, Token.Equal]>
399
+ : In extends `:${infer In}`
400
+ ? _state<In, [...Out, Token.Colon]>
401
+ : In extends `{${infer In}`
402
+ ? _state<In, [...Out, Token.BraceOpen]>
403
+ : In extends `}${infer In}`
404
+ ? _state<In, [...Out, Token.BraceClose]>
405
+ : In extends `(${infer In}`
406
+ ? _state<In, [...Out, Token.ParenOpen]>
407
+ : In extends `)${infer In}`
408
+ ? _state<In, [...Out, Token.ParenClose]>
409
+ : In extends `[${infer In}`
410
+ ? _state<In, [...Out, Token.BracketOpen]>
411
+ : In extends `]${infer In}`
412
+ ? _state<In, [...Out, Token.BracketClose]>
413
+ : In extends `"""${infer In}`
414
+ ? _state<skipBlockString<In>, [...Out, Token.BlockString]>
415
+ : In extends `"${infer In}`
416
+ ? _state<skipString<In>, [...Out, Token.String]>
417
+ : In extends `-${digit}${infer In}`
418
+ ? skipFloat<skipDigits<In>> extends `${infer In}`
419
+ ? _state<In, [...Out, Token.Float]>
420
+ : _state<skipDigits<In>, [...Out, Token.Integer]>
421
+ : In extends `${digit}${infer In}`
422
+ ? skipFloat<skipDigits<In>> extends `${infer In}`
423
+ ? _state<In, [...Out, Token.Float]>
424
+ : _state<skipDigits<In>, [...Out, Token.Integer]>
425
+ : In extends `$${infer In}`
426
+ ? takeNameLiteralRec<'', In> extends _match$1<
427
+ infer Match,
428
+ infer In
429
+ >
430
+ ? _state<In, [...Out, VarTokenNode<Match>]>
431
+ : void
432
+ : In extends `@${infer In}`
433
+ ? takeNameLiteralRec<'', In> extends _match$1<
434
+ infer Match,
435
+ infer In
436
+ >
437
+ ? _state<In, [...Out, DirectiveTokenNode<Match>]>
438
+ : void
439
+ : In extends `${letter | '_'}${string}`
440
+ ? takeNameLiteralRec<'', In> extends _match$1<
441
+ infer Match,
442
+ infer In
443
+ >
444
+ ? _state<In, [...Out, NameTokenNode<Match>]>
445
+ : void
446
+ : void
447
+ >
448
+ : [];
449
+ type tokenize<In extends string> = tokenizeRec<_state<In, []>>;
450
+
451
+ interface _match<Out, In extends any[]> {
452
+ out: Out;
453
+ in: In;
454
+ }
455
+ type takeOptionalName<In extends any[]> = In extends [
456
+ {
457
+ kind: Token.Name;
458
+ name: infer Name;
459
+ },
460
+ ...infer In,
461
+ ]
462
+ ? _match<
372
463
  {
373
464
  kind: Kind.NAME;
374
- value: Out;
465
+ value: Name;
375
466
  },
376
- In,
377
- ]
378
- : [undefined, In];
379
- type takeEnum<In> = takeNameLiteral<In> extends [infer Out, infer In]
380
- ? [
467
+ In
468
+ >
469
+ : _match<undefined, In>;
470
+ type takeValue<In extends any[], Const extends boolean> = In extends [Token.Float, ...infer In]
471
+ ? _match<
381
472
  {
382
- kind: Kind.ENUM;
383
- value: Out;
473
+ kind: Kind.FLOAT;
474
+ value: string;
384
475
  },
385
- In,
386
- ]
387
- : void;
388
- type TakeVariable<In, Const> = Const extends false
389
- ? In extends `${'$'}${infer In}`
390
- ? takeNameLiteral<In> extends [infer Out, infer In]
391
- ? [
392
- {
393
- kind: Kind.VARIABLE;
394
- name: {
395
- kind: Kind.NAME;
396
- value: Out;
397
- };
398
- },
399
- In,
400
- ]
401
- : void
402
- : void
403
- : void;
404
- type takeNumber<In> = skipInt<In> extends `${infer In}`
405
- ? skipFloat<In> extends `${infer In}`
406
- ? [
407
- {
408
- kind: Kind.FLOAT;
409
- value: string;
410
- },
411
- In,
412
- ]
413
- : [
476
+ In
477
+ >
478
+ : In extends [Token.Integer, ...infer In]
479
+ ? _match<
414
480
  {
415
481
  kind: Kind.INT;
416
482
  value: string;
417
483
  },
418
- In,
419
- ]
420
- : void;
421
- type takeString<In> = In extends `${'"""'}${infer In}`
422
- ? skipBlockString<In> extends `${infer In}`
423
- ? [
424
- {
425
- kind: Kind.STRING;
426
- value: string;
427
- block: true;
428
- },
429
- In,
430
- ]
431
- : void
432
- : In extends `${'"'}${infer In}`
433
- ? skipString<In> extends `${infer In}`
434
- ? [
484
+ In
485
+ >
486
+ : In extends [Token.String, ...infer In]
487
+ ? _match<
435
488
  {
436
489
  kind: Kind.STRING;
437
490
  value: string;
438
491
  block: false;
439
492
  },
440
- In,
441
- ]
442
- : void
443
- : void;
444
- type takeLiteral<In> = In extends `${'null'}${infer In}`
445
- ? [
446
- {
447
- kind: Kind.NULL;
448
- },
449
- In,
450
- ]
451
- : In extends `${'true' | 'false'}${infer In}`
452
- ? [
453
- {
454
- kind: Kind.BOOLEAN;
455
- value: boolean;
456
- },
457
- In,
458
- ]
459
- : void;
460
- type takeValue<In, Const> = takeLiteral<In> extends [infer Node, infer Rest]
461
- ? [Node, Rest]
462
- : TakeVariable<In, Const> extends [infer Node, infer Rest]
463
- ? [Node, Rest]
464
- : takeNumber<In> extends [infer Node, infer Rest]
465
- ? [Node, Rest]
466
- : takeEnum<In> extends [infer Node, infer Rest]
467
- ? [Node, Rest]
468
- : takeString<In> extends [infer Node, infer Rest]
469
- ? [Node, Rest]
470
- : takeList<In, Const> extends [infer Node, infer Rest]
471
- ? [Node, Rest]
472
- : takeObject<In, Const> extends [infer Node, infer Rest]
473
- ? [Node, Rest]
474
- : void;
475
- type _takeListRec<Nodes extends any[], In, Const> = In extends `${']'}${infer In}`
476
- ? [
493
+ In
494
+ >
495
+ : In extends [Token.BlockString, ...infer In]
496
+ ? _match<
497
+ {
498
+ kind: Kind.STRING;
499
+ value: string;
500
+ block: true;
501
+ },
502
+ In
503
+ >
504
+ : In extends [
505
+ {
506
+ kind: Token.Name;
507
+ name: 'null';
508
+ },
509
+ ...infer In,
510
+ ]
511
+ ? _match<
512
+ {
513
+ kind: Kind.NULL;
514
+ },
515
+ In
516
+ >
517
+ : In extends [
518
+ {
519
+ kind: Token.Name;
520
+ name: 'true' | 'false';
521
+ },
522
+ ...infer In,
523
+ ]
524
+ ? _match<
525
+ {
526
+ kind: Kind.BOOLEAN;
527
+ value: boolean;
528
+ },
529
+ In
530
+ >
531
+ : In extends [
532
+ {
533
+ kind: Token.Name;
534
+ name: infer Name;
535
+ },
536
+ ...infer In,
537
+ ]
538
+ ? _match<
539
+ {
540
+ kind: Kind.ENUM;
541
+ value: Name;
542
+ },
543
+ In
544
+ >
545
+ : In extends [Token.BracketOpen, ...infer In]
546
+ ? takeListRec<[], In, Const>
547
+ : In extends [Token.BraceOpen, ...infer In]
548
+ ? takeObjectRec<[], In, Const>
549
+ : Const extends false
550
+ ? In extends [
551
+ {
552
+ kind: Token.Var;
553
+ name: infer Name;
554
+ },
555
+ ...infer In,
556
+ ]
557
+ ? _match<
558
+ {
559
+ kind: Kind.VARIABLE;
560
+ name: {
561
+ kind: Kind.NAME;
562
+ value: Name;
563
+ };
564
+ },
565
+ In
566
+ >
567
+ : void
568
+ : void;
569
+ type takeListRec<Nodes extends any[], In extends any[], Const extends boolean> = In extends [
570
+ Token.BracketClose,
571
+ ...infer In,
572
+ ]
573
+ ? _match<
477
574
  {
478
575
  kind: Kind.LIST;
479
576
  values: Nodes;
480
577
  },
481
- In,
482
- ]
483
- : takeValue<skipIgnored<In>, Const> extends [infer Node, infer In]
484
- ? _takeListRec<[...Nodes, Node], skipIgnored<In>, Const>
578
+ In
579
+ >
580
+ : takeValue<In, Const> extends _match<infer Node, infer In>
581
+ ? takeListRec<[...Nodes, Node], In, Const>
485
582
  : void;
486
- type takeList<In, Const> = In extends `${'['}${infer In}`
487
- ? _takeListRec<[], skipIgnored<In>, Const>
488
- : void;
489
- type takeObjectField<In, Const> = takeName<In> extends [infer Name, infer In]
490
- ? skipIgnored<In> extends `${':'}${infer In}`
491
- ? takeValue<skipIgnored<In>, Const> extends [infer Value, infer In]
492
- ? [
493
- {
494
- kind: Kind.OBJECT_FIELD;
495
- name: Name;
496
- value: Value;
497
- },
498
- In,
499
- ]
500
- : void
583
+ type takeObjectField<In extends any[], Const extends boolean> = In extends [
584
+ {
585
+ kind: Token.Name;
586
+ name: infer FieldName;
587
+ },
588
+ Token.Colon,
589
+ ...infer In,
590
+ ]
591
+ ? takeValue<In, Const> extends _match<infer Value, infer In>
592
+ ? _match<
593
+ {
594
+ kind: Kind.OBJECT_FIELD;
595
+ name: {
596
+ kind: Kind.NAME;
597
+ value: FieldName;
598
+ };
599
+ value: Value;
600
+ },
601
+ In
602
+ >
501
603
  : void
502
604
  : void;
503
- type _takeObjectRec<Fields extends any[], In, Const> = In extends `${'}'}${infer In}`
504
- ? [
605
+ type takeObjectRec<Fields extends any[], In extends any[], Const extends boolean> = In extends [
606
+ Token.BraceClose,
607
+ ...infer In,
608
+ ]
609
+ ? _match<
505
610
  {
506
611
  kind: Kind.OBJECT;
507
612
  fields: Fields;
508
613
  },
509
- In,
510
- ]
511
- : takeObjectField<skipIgnored<In>, Const> extends [infer Field, infer In]
512
- ? _takeObjectRec<[...Fields, Field], skipIgnored<In>, Const>
614
+ In
615
+ >
616
+ : takeObjectField<In, Const> extends _match<infer Field, infer In>
617
+ ? takeObjectRec<[...Fields, Field], In, Const>
513
618
  : void;
514
- type takeObject<In, Const> = In extends `${'{'}${infer In}`
515
- ? _takeObjectRec<[], skipIgnored<In>, Const>
516
- : void;
517
- type takeArgument<In, Const> = takeName<In> extends [infer Name, infer In]
518
- ? skipIgnored<In> extends `${':'}${infer In}`
519
- ? takeValue<skipIgnored<In>, Const> extends [infer Value, infer In]
520
- ? [
521
- {
522
- kind: Kind.ARGUMENT;
523
- name: Name;
524
- value: Value;
525
- },
526
- In,
527
- ]
528
- : void
619
+ type takeArgument<In extends any[], Const extends boolean> = In extends [
620
+ {
621
+ kind: Token.Name;
622
+ name: infer ArgName;
623
+ },
624
+ Token.Colon,
625
+ ...infer In,
626
+ ]
627
+ ? takeValue<In, Const> extends _match<infer Value, infer In>
628
+ ? _match<
629
+ {
630
+ kind: Kind.ARGUMENT;
631
+ name: {
632
+ kind: Kind.NAME;
633
+ value: ArgName;
634
+ };
635
+ value: Value;
636
+ },
637
+ In
638
+ >
529
639
  : void
530
640
  : void;
531
- type _takeArgumentsRec<Arguments extends any[], In, Const> = In extends `${')'}${infer In}`
532
- ? Arguments extends []
533
- ? void
534
- : [Arguments, In]
535
- : takeArgument<In, Const> extends [infer Argument, infer In]
536
- ? _takeArgumentsRec<[...Arguments, Argument], skipIgnored<In>, Const>
641
+ type _takeArgumentsRec<
642
+ Arguments extends any[],
643
+ In extends any[],
644
+ Const extends boolean,
645
+ > = In extends [Token.ParenClose, ...infer In]
646
+ ? _match<Arguments, In>
647
+ : takeArgument<In, Const> extends _match<infer Argument, infer In>
648
+ ? _takeArgumentsRec<[...Arguments, Argument], In, Const>
537
649
  : void;
538
- type takeArguments<In, Const> = In extends `${'('}${infer In}`
539
- ? _takeArgumentsRec<[], skipIgnored<In>, Const>
540
- : [[], In];
541
- type takeDirective<In, Const> = In extends `${'@'}${infer In}`
542
- ? takeName<In> extends [infer Name, infer In]
543
- ? takeArguments<skipIgnored<In>, Const> extends [infer Arguments, infer In]
544
- ? [
545
- {
546
- kind: Kind.DIRECTIVE;
547
- name: Name;
548
- arguments: Arguments;
549
- },
550
- In,
551
- ]
552
- : void
650
+ type takeArguments<In extends any[], Const extends boolean> = In extends [
651
+ Token.ParenOpen,
652
+ ...infer In,
653
+ ]
654
+ ? _takeArgumentsRec<[], In, Const>
655
+ : _match<[], In>;
656
+ type takeDirective<In extends any[], Const extends boolean> = In extends [
657
+ {
658
+ kind: Token.Directive;
659
+ name: infer DirectiveName;
660
+ },
661
+ ...infer In,
662
+ ]
663
+ ? takeArguments<In, Const> extends _match<infer Arguments, infer In>
664
+ ? _match<
665
+ {
666
+ kind: Kind.DIRECTIVE;
667
+ name: {
668
+ kind: Kind.NAME;
669
+ value: DirectiveName;
670
+ };
671
+ arguments: Arguments;
672
+ },
673
+ In
674
+ >
553
675
  : void
554
676
  : void;
555
- type takeDirectives<In, Const> = takeDirective<In, Const> extends [infer Directive, infer In]
556
- ? takeDirectives<skipIgnored<In>, Const> extends [[...infer Directives], infer In]
557
- ? [[Directive, ...Directives], In]
558
- : [[], In]
559
- : [[], In];
560
- type takeFieldName<In> = takeName<In> extends [infer MaybeAlias, infer In]
561
- ? skipIgnored<In> extends `${':'}${infer In}`
562
- ? takeName<skipIgnored<In>> extends [infer Name, infer In]
563
- ? [MaybeAlias, Name, In]
564
- : void
565
- : [undefined, MaybeAlias, In]
566
- : void;
567
- type takeField<In> = takeFieldName<In> extends [infer Alias, infer Name, infer In]
568
- ? takeArguments<skipIgnored<In>, false> extends [infer Arguments, infer In]
569
- ? takeDirectives<skipIgnored<In>, false> extends [infer Directives, infer In]
570
- ? takeSelectionSet<skipIgnored<In>> extends [infer SelectionSet, infer In]
571
- ? [
677
+ type takeDirectives<
678
+ In extends any[],
679
+ Const extends boolean,
680
+ Directives extends any[] = [],
681
+ > = takeDirective<In, Const> extends _match<infer Directive, infer In>
682
+ ? takeDirectives<In, Const, [...Directives, Directive]>
683
+ : _match<Directives, In>;
684
+ type _takeField<In extends any[], Alias> = In extends [
685
+ Token.Colon,
686
+ {
687
+ kind: Token.Name;
688
+ name: infer Name;
689
+ },
690
+ ...infer In,
691
+ ]
692
+ ? takeArguments<In, false> extends _match<infer Arguments, infer In>
693
+ ? takeDirectives<In, false> extends _match<infer Directives, infer In>
694
+ ? takeSelectionSet<In> extends _match<infer SelectionSet, infer In>
695
+ ? _match<
572
696
  {
573
697
  kind: Kind.FIELD;
574
698
  alias: Alias;
575
- name: Name;
699
+ name: {
700
+ kind: Kind.NAME;
701
+ value: Name;
702
+ };
576
703
  arguments: Arguments;
577
704
  directives: Directives;
578
705
  selectionSet: SelectionSet;
579
706
  },
580
- In,
581
- ]
582
- : [
707
+ In
708
+ >
709
+ : _match<
583
710
  {
584
711
  kind: Kind.FIELD;
585
712
  alias: Alias;
586
- name: Name;
713
+ name: {
714
+ kind: Kind.NAME;
715
+ value: Name;
716
+ };
587
717
  arguments: Arguments;
588
718
  directives: Directives;
589
719
  selectionSet: undefined;
590
720
  },
591
- In,
592
- ]
721
+ In
722
+ >
593
723
  : void
594
724
  : void
595
- : void;
596
- type takeType<In> = In extends `${'['}${infer In}`
597
- ? takeType<skipIgnored<In>> extends [infer Subtype, infer In]
598
- ? In extends `${']'}${infer In}`
599
- ? skipIgnored<In> extends `${'!'}${infer In}`
600
- ? [
725
+ : takeArguments<In, false> extends _match<infer Arguments, infer In>
726
+ ? takeDirectives<In, false> extends _match<infer Directives, infer In>
727
+ ? takeSelectionSet<In> extends _match<infer SelectionSet, infer In>
728
+ ? _match<
729
+ {
730
+ kind: Kind.FIELD;
731
+ alias: undefined;
732
+ name: Alias;
733
+ arguments: Arguments;
734
+ directives: Directives;
735
+ selectionSet: SelectionSet;
736
+ },
737
+ In
738
+ >
739
+ : _match<
740
+ {
741
+ kind: Kind.FIELD;
742
+ alias: undefined;
743
+ name: Alias;
744
+ arguments: Arguments;
745
+ directives: Directives;
746
+ selectionSet: undefined;
747
+ },
748
+ In
749
+ >
750
+ : void
751
+ : void;
752
+ type takeType<In extends any[]> = In extends [Token.BracketOpen, ...infer In]
753
+ ? takeType<In> extends _match<infer Subtype, infer In>
754
+ ? In extends [Token.BracketClose, ...infer In]
755
+ ? In extends [Token.Exclam, ...infer In]
756
+ ? _match<
601
757
  {
602
758
  kind: Kind.NON_NULL_TYPE;
603
759
  type: {
@@ -605,183 +761,285 @@ type takeType<In> = In extends `${'['}${infer In}`
605
761
  type: Subtype;
606
762
  };
607
763
  },
608
- In,
609
- ]
610
- : [
764
+ In
765
+ >
766
+ : _match<
611
767
  {
612
768
  kind: Kind.LIST_TYPE;
613
769
  type: Subtype;
614
770
  },
615
- In,
616
- ]
771
+ In
772
+ >
617
773
  : void
618
774
  : void
619
- : takeName<skipIgnored<In>> extends [infer Name, infer In]
620
- ? skipIgnored<In> extends `${'!'}${infer In}`
621
- ? [
775
+ : In extends [
776
+ {
777
+ kind: Token.Name;
778
+ name: infer Name;
779
+ },
780
+ ...infer In,
781
+ ]
782
+ ? In extends [Token.Exclam, ...infer In]
783
+ ? _match<
622
784
  {
623
785
  kind: Kind.NON_NULL_TYPE;
624
786
  type: {
625
787
  kind: Kind.NAMED_TYPE;
626
- name: Name;
788
+ name: {
789
+ kind: Kind.NAME;
790
+ value: Name;
791
+ };
627
792
  };
628
793
  },
629
- In,
630
- ]
631
- : [
794
+ In
795
+ >
796
+ : _match<
632
797
  {
633
798
  kind: Kind.NAMED_TYPE;
634
- name: Name;
799
+ name: {
800
+ kind: Kind.NAME;
801
+ value: Name;
802
+ };
635
803
  },
636
- In,
637
- ]
804
+ In
805
+ >
638
806
  : void;
639
- type takeTypeCondition<In> = In extends `${'on'}${infer In}`
640
- ? takeName<skipIgnored<In>> extends [infer Name, infer In]
641
- ? [
807
+ type _takeFragmentSpread<In extends any[]> = In extends [
808
+ {
809
+ kind: Token.Name;
810
+ name: 'on';
811
+ },
812
+ {
813
+ kind: Token.Name;
814
+ name: infer Type;
815
+ },
816
+ ...infer In,
817
+ ]
818
+ ? takeDirectives<In, false> extends _match<infer Directives, infer In>
819
+ ? takeSelectionSet<In> extends _match<infer SelectionSet, infer In>
820
+ ? _match<
821
+ {
822
+ kind: Kind.INLINE_FRAGMENT;
823
+ typeCondition: {
824
+ kind: Kind.NAMED_TYPE;
825
+ name: {
826
+ kind: Kind.NAME;
827
+ value: Type;
828
+ };
829
+ };
830
+ directives: Directives;
831
+ selectionSet: SelectionSet;
832
+ },
833
+ In
834
+ >
835
+ : void
836
+ : void
837
+ : In extends [
642
838
  {
643
- kind: Kind.NAMED_TYPE;
644
- name: Name;
839
+ kind: Token.Name;
840
+ name: infer Name;
645
841
  },
646
- In,
842
+ ...infer In,
647
843
  ]
648
- : void
649
- : void;
650
- type takeFragmentSpread<In> = In extends `${'...'}${infer In}`
651
- ? skipIgnored<In> extends `${'on'}${infer In}`
652
- ? takeName<skipIgnored<In>> extends [infer Name, infer In]
653
- ? takeDirectives<skipIgnored<In>, false> extends [infer Directives, infer In]
654
- ? takeSelectionSet<skipIgnored<In>> extends [infer SelectionSet, infer In]
655
- ? [
656
- {
657
- kind: Kind.INLINE_FRAGMENT;
658
- typeCondition: {
659
- kind: Kind.NAMED_TYPE;
660
- name: Name;
661
- };
662
- directives: Directives;
663
- selectionSet: SelectionSet;
664
- },
665
- In,
666
- ]
667
- : void
668
- : void
844
+ ? takeDirectives<In, false> extends _match<infer Directives, infer In>
845
+ ? _match<
846
+ {
847
+ kind: Kind.FRAGMENT_SPREAD;
848
+ name: {
849
+ kind: Kind.NAME;
850
+ value: Name;
851
+ };
852
+ directives: Directives;
853
+ },
854
+ In
855
+ >
669
856
  : void
670
- : takeName<skipIgnored<In>> extends [infer Name, infer In]
671
- ? takeDirectives<skipIgnored<In>, false> extends [infer Directives, infer In]
672
- ? [
857
+ : takeDirectives<In, false> extends _match<infer Directives, infer In>
858
+ ? takeSelectionSet<In> extends _match<infer SelectionSet, infer In>
859
+ ? _match<
673
860
  {
674
- kind: Kind.FRAGMENT_SPREAD;
675
- name: Name;
861
+ kind: Kind.INLINE_FRAGMENT;
862
+ typeCondition: undefined;
676
863
  directives: Directives;
864
+ selectionSet: SelectionSet;
677
865
  },
678
- In,
679
- ]
680
- : void
681
- : takeDirectives<skipIgnored<In>, false> extends [infer Directives, infer In]
682
- ? takeSelectionSet<skipIgnored<In>> extends [infer SelectionSet, infer In]
683
- ? [
684
- {
685
- kind: Kind.INLINE_FRAGMENT;
686
- typeCondition: undefined;
687
- directives: Directives;
688
- selectionSet: SelectionSet;
689
- },
690
- In,
691
- ]
692
- : void
866
+ In
867
+ >
693
868
  : void
694
- : void;
695
- type _takeSelectionRec<Selections extends any[], In> = In extends `${'}'}${infer In}`
696
- ? [
697
- {
698
- kind: Kind.SELECTION_SET;
699
- selections: Selections;
700
- },
701
- In,
702
- ]
703
- : takeFragmentSpread<skipIgnored<In>> extends [infer Selection, infer In]
704
- ? _takeSelectionRec<[...Selections, Selection], skipIgnored<In>>
705
- : takeField<skipIgnored<In>> extends [infer Selection, infer In]
706
- ? _takeSelectionRec<[...Selections, Selection], skipIgnored<In>>
707
869
  : void;
708
- type takeSelectionSet<In> = In extends `${'{'}${infer In}`
709
- ? _takeSelectionRec<[], skipIgnored<In>>
870
+ type _takeSelectionRec<Selections extends any[], In extends any[]> = In extends [
871
+ Token.Spread,
872
+ ...infer In,
873
+ ]
874
+ ? _takeFragmentSpread<In> extends _match<infer Selection, infer In>
875
+ ? _takeSelectionRec<[...Selections, Selection], In>
876
+ : void
877
+ : In extends [
878
+ {
879
+ kind: Token.Name;
880
+ name: infer Alias;
881
+ },
882
+ ...infer In,
883
+ ]
884
+ ? _takeField<
885
+ In,
886
+ {
887
+ kind: Kind.NAME;
888
+ value: Alias;
889
+ }
890
+ > extends _match<infer Selection, infer In>
891
+ ? _takeSelectionRec<[...Selections, Selection], In>
892
+ : void
893
+ : In extends [Token.BraceClose, ...infer In]
894
+ ? _match<
895
+ {
896
+ kind: Kind.SELECTION_SET;
897
+ selections: Selections;
898
+ },
899
+ In
900
+ >
901
+ : void;
902
+ type takeSelectionSet<In extends any[]> = In extends [Token.BraceOpen, ...infer In]
903
+ ? _takeSelectionRec<[], In>
710
904
  : void;
711
- type takeVarDefinition<In> = TakeVariable<In, false> extends [infer Variable, infer In]
712
- ? skipIgnored<In> extends `${':'}${infer In}`
713
- ? takeType<skipIgnored<In>> extends [infer Type, infer In]
714
- ? skipIgnored<In> extends `${'='}${infer In}`
715
- ? takeValue<skipIgnored<In>, true> extends [infer DefaultValue, infer In]
716
- ? takeDirectives<skipIgnored<In>, true> extends [infer Directives, infer In]
717
- ? [
718
- {
719
- kind: Kind.VARIABLE_DEFINITION;
720
- variable: Variable;
721
- type: Type;
722
- defaultValue: DefaultValue;
723
- directives: Directives;
724
- },
725
- In,
726
- ]
727
- : void
728
- : void
729
- : takeDirectives<skipIgnored<In>, true> extends [infer Directives, infer In]
730
- ? [
905
+ type takeVarDefinition<In extends any[]> = In extends [
906
+ {
907
+ kind: Token.Var;
908
+ name: infer VarName;
909
+ },
910
+ Token.Colon,
911
+ ...infer In,
912
+ ]
913
+ ? takeType<In> extends _match<infer Type, infer In>
914
+ ? In extends [Token.Equal, ...infer In]
915
+ ? takeValue<In, true> extends _match<infer DefaultValue, infer In>
916
+ ? takeDirectives<In, true> extends _match<infer Directives, infer In>
917
+ ? _match<
731
918
  {
732
919
  kind: Kind.VARIABLE_DEFINITION;
733
- variable: Variable;
920
+ variable: {
921
+ kind: Kind.VARIABLE;
922
+ name: {
923
+ kind: Kind.NAME;
924
+ value: VarName;
925
+ };
926
+ };
734
927
  type: Type;
735
- defaultValue: undefined;
928
+ defaultValue: DefaultValue;
736
929
  directives: Directives;
737
930
  },
738
- In,
739
- ]
931
+ In
932
+ >
740
933
  : void
741
- : void
934
+ : void
935
+ : takeDirectives<In, true> extends _match<infer Directives, infer In>
936
+ ? _match<
937
+ {
938
+ kind: Kind.VARIABLE_DEFINITION;
939
+ variable: {
940
+ kind: Kind.VARIABLE;
941
+ name: {
942
+ kind: Kind.NAME;
943
+ value: VarName;
944
+ };
945
+ };
946
+ type: Type;
947
+ defaultValue: undefined;
948
+ directives: Directives;
949
+ },
950
+ In
951
+ >
952
+ : void
742
953
  : void
743
954
  : void;
744
- type _takeVarDefinitionRec<Definitions extends any[], In> = In extends `${')'}${infer In}`
745
- ? [Definitions, In]
746
- : takeVarDefinition<In> extends [infer Definition, infer In]
747
- ? _takeVarDefinitionRec<[...Definitions, Definition], skipIgnored<In>>
955
+ type _takeVarDefinitionRec<Definitions extends any[], In extends any[]> = In extends [
956
+ Token.ParenClose,
957
+ ...infer In,
958
+ ]
959
+ ? _match<Definitions, In>
960
+ : takeVarDefinition<In> extends _match<infer Definition, infer In>
961
+ ? _takeVarDefinitionRec<[...Definitions, Definition], In>
748
962
  : void;
749
- type takeVarDefinitions<In> = skipIgnored<In> extends `${'('}${infer In}`
750
- ? _takeVarDefinitionRec<[], skipIgnored<In>>
751
- : [[], In];
752
- type takeFragmentDefinition<In> = In extends `${'fragment'}${infer In}`
753
- ? takeName<skipIgnored<In>> extends [infer Name, infer In]
754
- ? takeTypeCondition<skipIgnored<In>> extends [infer TypeCondition, infer In]
755
- ? takeDirectives<skipIgnored<In>, true> extends [infer Directives, infer In]
756
- ? takeSelectionSet<skipIgnored<In>> extends [infer SelectionSet, infer In]
757
- ? [
758
- {
759
- kind: Kind.FRAGMENT_DEFINITION;
760
- name: Name;
761
- typeCondition: TypeCondition;
762
- directives: Directives;
763
- selectionSet: SelectionSet;
764
- },
765
- In,
766
- ]
767
- : void
768
- : void
963
+ type takeVarDefinitions<In extends any[]> = In extends [Token.ParenOpen, ...infer In]
964
+ ? _takeVarDefinitionRec<[], In>
965
+ : _match<[], In>;
966
+ type takeFragmentDefinition<In extends any[]> = In extends [
967
+ {
968
+ kind: Token.Name;
969
+ name: 'fragment';
970
+ },
971
+ {
972
+ kind: Token.Name;
973
+ name: infer Name;
974
+ },
975
+ {
976
+ kind: Token.Name;
977
+ name: 'on';
978
+ },
979
+ {
980
+ kind: Token.Name;
981
+ name: infer Type;
982
+ },
983
+ ...infer In,
984
+ ]
985
+ ? takeDirectives<In, true> extends _match<infer Directives, infer In>
986
+ ? takeSelectionSet<In> extends _match<infer SelectionSet, infer In>
987
+ ? _match<
988
+ {
989
+ kind: Kind.FRAGMENT_DEFINITION;
990
+ name: {
991
+ kind: Kind.NAME;
992
+ value: Name;
993
+ };
994
+ typeCondition: {
995
+ kind: Kind.NAMED_TYPE;
996
+ name: {
997
+ kind: Kind.NAME;
998
+ value: Type;
999
+ };
1000
+ };
1001
+ directives: Directives;
1002
+ selectionSet: SelectionSet;
1003
+ },
1004
+ In
1005
+ >
769
1006
  : void
770
1007
  : void
771
1008
  : void;
772
- type TakeOperation<In> = In extends `${'query'}${infer In}`
773
- ? [OperationTypeNode.QUERY, In]
774
- : In extends `${'mutation'}${infer In}`
775
- ? [OperationTypeNode.MUTATION, In]
776
- : In extends `${'subscription'}${infer In}`
777
- ? [OperationTypeNode.SUBSCRIPTION, In]
1009
+ type takeOperation<In extends any[]> = In extends [
1010
+ {
1011
+ kind: Token.Name;
1012
+ name: 'query';
1013
+ },
1014
+ ...infer In,
1015
+ ]
1016
+ ? _match<OperationTypeNode.QUERY, In>
1017
+ : In extends [
1018
+ {
1019
+ kind: Token.Name;
1020
+ name: 'mutation';
1021
+ },
1022
+ ...infer In,
1023
+ ]
1024
+ ? _match<OperationTypeNode.MUTATION, In>
1025
+ : In extends [
1026
+ {
1027
+ kind: Token.Name;
1028
+ name: 'subscription';
1029
+ },
1030
+ ...infer In,
1031
+ ]
1032
+ ? _match<OperationTypeNode.SUBSCRIPTION, In>
778
1033
  : void;
779
- type takeOperationDefinition<In> = TakeOperation<In> extends [infer Operation, infer In]
780
- ? takeOptionalName<skipIgnored<In>> extends [infer Name, infer In]
781
- ? takeVarDefinitions<skipIgnored<In>> extends [infer VarDefinitions, infer In]
782
- ? takeDirectives<skipIgnored<In>, false> extends [infer Directives, infer In]
783
- ? takeSelectionSet<skipIgnored<In>> extends [infer SelectionSet, infer In]
784
- ? [
1034
+ type takeOperationDefinition<In extends any[]> = takeOperation<In> extends _match<
1035
+ infer Operation,
1036
+ infer In
1037
+ >
1038
+ ? takeOptionalName<In> extends _match<infer Name, infer In>
1039
+ ? takeVarDefinitions<In> extends _match<infer VarDefinitions, infer In>
1040
+ ? takeDirectives<In, false> extends _match<infer Directives, infer In>
1041
+ ? takeSelectionSet<In> extends _match<infer SelectionSet, infer In>
1042
+ ? _match<
785
1043
  {
786
1044
  kind: Kind.OPERATION_DEFINITION;
787
1045
  operation: Operation;
@@ -790,14 +1048,14 @@ type takeOperationDefinition<In> = TakeOperation<In> extends [infer Operation, i
790
1048
  directives: Directives;
791
1049
  selectionSet: SelectionSet;
792
1050
  },
793
- In,
794
- ]
1051
+ In
1052
+ >
795
1053
  : void
796
1054
  : void
797
1055
  : void
798
1056
  : void
799
- : takeSelectionSet<skipIgnored<In>> extends [infer SelectionSet, infer In]
800
- ? [
1057
+ : takeSelectionSet<In> extends _match<infer SelectionSet, infer In>
1058
+ ? _match<
801
1059
  {
802
1060
  kind: Kind.OPERATION_DEFINITION;
803
1061
  operation: OperationTypeNode.QUERY;
@@ -806,21 +1064,21 @@ type takeOperationDefinition<In> = TakeOperation<In> extends [infer Operation, i
806
1064
  directives: [];
807
1065
  selectionSet: SelectionSet;
808
1066
  },
809
- In,
810
- ]
1067
+ In
1068
+ >
811
1069
  : void;
812
- type _takeDocumentRec<Definitions extends any[], In> = takeFragmentDefinition<In> extends [
813
- infer Definition,
814
- infer In,
815
- ]
816
- ? _takeDocumentRec<[...Definitions, Definition], skipIgnored<In>>
817
- : takeOperationDefinition<In> extends [infer Definition, infer In]
818
- ? _takeDocumentRec<[...Definitions, Definition], skipIgnored<In>>
819
- : [Definitions, In];
820
- type parseDocument<In> = _takeDocumentRec<[], skipIgnored<In>> extends [
1070
+ type _takeDocumentRec<
1071
+ Definitions extends any[],
1072
+ In extends any[],
1073
+ > = takeFragmentDefinition<In> extends _match<infer Definition, infer In>
1074
+ ? _takeDocumentRec<[...Definitions, Definition], In>
1075
+ : takeOperationDefinition<In> extends _match<infer Definition, infer In>
1076
+ ? _takeDocumentRec<[...Definitions, Definition], In>
1077
+ : _match<Definitions, In>;
1078
+ type parseDocument<In extends string> = _takeDocumentRec<[], tokenize<In>> extends _match<
821
1079
  [...infer Definitions],
822
- infer _Rest,
823
- ]
1080
+ any
1081
+ >
824
1082
  ? Definitions extends []
825
1083
  ? never
826
1084
  : {
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "gql.tada",
3
3
  "description": "The spec-compliant & magical GraphQL query language engine in the TypeScript type system",
4
- "version": "1.3.0",
4
+ "version": "1.3.1",
5
5
  "author": "0no.co <hi@0no.co>",
6
6
  "source": "./src/index.ts",
7
7
  "main": "./dist/gql-tada",