@danielx/civet 0.1.1 → 0.2.0

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.
package/README.md CHANGED
@@ -7,6 +7,11 @@ A new CoffeeScript. Much closer to ES2015+ (for better or worse).
7
7
 
8
8
  Also TypeScript, the sky is the limit.
9
9
 
10
+ ```bash
11
+ npm install -g @danielx/civet
12
+ civet < source.civet > output.ts
13
+ ```
14
+
10
15
  ![image](https://user-images.githubusercontent.com/18894/184558519-b675a903-7490-43ba-883e-0d8addacd4b9.png)
11
16
 
12
17
  Code Sample
@@ -55,9 +60,11 @@ Things Kept from CoffeeScript
55
60
  - OptionalChain shorthand for index and function application `a?[b]` -> `a?.[b]`, `a?(b)` -> `a?.(b)`
56
61
  - `@` -> `this`
57
62
  - `@id` -> `this.id`
63
+ - JSX 😿
58
64
  - TODO
59
- - `"""` Strings (for compatibility with existing .coffee code)
60
- - `///` Heregexp
65
+ - [ ] `"""` Strings (for compatibility with existing .coffee code)
66
+ - [ ] `///` Heregexp
67
+ - [ ] Chained comparisons
61
68
 
62
69
  Things Removed from CoffeeScript
63
70
  ---
package/dist/browser.js CHANGED
@@ -582,14 +582,41 @@ var Civet = (() => {
582
582
  _,
583
583
  __,
584
584
  StatementDelimiter,
585
+ JSXElement,
586
+ JSXSelfClosingElement,
587
+ JSXOpeningElement,
588
+ JSXClosingElement,
589
+ JSXFragment,
590
+ JSXElementName,
591
+ JSXIdentifierName,
592
+ JSXAttributes,
593
+ JSXAttribute,
594
+ JSXAttributeName,
595
+ JSXAttributeInitializer,
596
+ JSXAttributeValue,
597
+ JSXChildren,
598
+ JSXChild,
599
+ JSXText,
600
+ JSXChildExpression,
585
601
  TypeDeclaration,
586
602
  InterfaceBlock,
587
603
  NestedInterfaceProperties,
588
604
  NestedInterfaceProperty,
589
605
  TypeSuffix,
590
606
  Type,
607
+ TypeBinary,
608
+ TypeUnary,
609
+ TypeUnaryOp,
610
+ TypePrimary,
611
+ TypeConditional,
612
+ TypeLiteral,
613
+ TypeBinaryOp,
591
614
  FunctionType,
592
615
  TypeArguments,
616
+ TypeParameters,
617
+ TypeParameter,
618
+ TypeConstraint,
619
+ TypeParameterDelimiter,
593
620
  Shebang,
594
621
  DirectivePrologue,
595
622
  EOS,
@@ -733,10 +760,14 @@ var Civet = (() => {
733
760
  var $L120 = $L("/*");
734
761
  var $L121 = $L("*/");
735
762
  var $L122 = $L("###");
736
- var $L123 = $L("interface");
737
- var $L124 = $L("[]");
738
- var $L125 = $L(" ");
739
- var $L126 = $L(" ");
763
+ var $L123 = $L("/>");
764
+ var $L124 = $L("</");
765
+ var $L125 = $L("<>");
766
+ var $L126 = $L("</>");
767
+ var $L127 = $L("infer");
768
+ var $L128 = $L("[]");
769
+ var $L129 = $L(" ");
770
+ var $L130 = $L(" ");
740
771
  var $R0 = $R(new RegExp("(of)(?!\\p{ID_Continue})", "suy"));
741
772
  var $R1 = $R(new RegExp("(?:\\p{ID_Start}|[_$])(?:\\p{ID_Continue}|[\\u200C\\u200D$])*", "suy"));
742
773
  var $R2 = $R(new RegExp("\\p{ID_Continue}", "suy"));
@@ -760,10 +791,17 @@ var Civet = (() => {
760
791
  var $R20 = $R(new RegExp("[^\\r\\n]", "suy"));
761
792
  var $R21 = $R(new RegExp("[\\t ]+", "suy"));
762
793
  var $R22 = $R(new RegExp("[\\s]+", "suy"));
763
- var $R23 = $R(new RegExp("#![^\\r\\n]*", "suy"));
764
- var $R24 = $R(new RegExp("[\\t ]*", "suy"));
765
- var $R25 = $R(new RegExp("\\r\\n|\\n|\\r|$", "suy"));
766
- var $R26 = $R(new RegExp("$", "suy"));
794
+ var $R23 = $R(new RegExp("(?:\\p{ID_Start}|[_$])(?:\\p{ID_Continue}|[\\u200C\\u200D$-])*", "suy"));
795
+ var $R24 = $R(new RegExp('"[^"]*"', "suy"));
796
+ var $R25 = $R(new RegExp("'[^']*'", "suy"));
797
+ var $R26 = $R(new RegExp("[^{}<>]+", "suy"));
798
+ var $R27 = $R(new RegExp("type(?!\\p{ID_Continue})", "suy"));
799
+ var $R28 = $R(new RegExp("interface(?!\\p{ID_Continue})", "suy"));
800
+ var $R29 = $R(new RegExp("(?!\\p{ID_Continue})", "suy"));
801
+ var $R30 = $R(new RegExp("#![^\\r\\n]*", "suy"));
802
+ var $R31 = $R(new RegExp("[\\t ]*", "suy"));
803
+ var $R32 = $R(new RegExp("\\r\\n|\\n|\\r|$", "suy"));
804
+ var $R33 = $R(new RegExp("$", "suy"));
767
805
  var Program$0 = $S(Init, __, $Q(TopLevelStatement), __);
768
806
  function Program(state) {
769
807
  if (state.verbose)
@@ -974,11 +1012,13 @@ var Civet = (() => {
974
1012
  var PrimaryExpression$7 = RegularExpressionLiteral;
975
1013
  var PrimaryExpression$8 = TemplateLiteral;
976
1014
  var PrimaryExpression$9 = $S($EXPECT($L1, fail, 'PrimaryExpression "("'), __, Expression, __, $EXPECT($L2, fail, 'PrimaryExpression ")"'));
1015
+ var PrimaryExpression$10 = JSXElement;
1016
+ var PrimaryExpression$11 = JSXFragment;
977
1017
  function PrimaryExpression(state) {
978
1018
  if (state.tokenize) {
979
- return $TOKEN("PrimaryExpression", state, PrimaryExpression$0(state) || PrimaryExpression$1(state) || PrimaryExpression$2(state) || PrimaryExpression$3(state) || PrimaryExpression$4(state) || PrimaryExpression$5(state) || PrimaryExpression$6(state) || PrimaryExpression$7(state) || PrimaryExpression$8(state) || PrimaryExpression$9(state));
1019
+ return $TOKEN("PrimaryExpression", state, PrimaryExpression$0(state) || PrimaryExpression$1(state) || PrimaryExpression$2(state) || PrimaryExpression$3(state) || PrimaryExpression$4(state) || PrimaryExpression$5(state) || PrimaryExpression$6(state) || PrimaryExpression$7(state) || PrimaryExpression$8(state) || PrimaryExpression$9(state) || PrimaryExpression$10(state) || PrimaryExpression$11(state));
980
1020
  } else {
981
- return PrimaryExpression$0(state) || PrimaryExpression$1(state) || PrimaryExpression$2(state) || PrimaryExpression$3(state) || PrimaryExpression$4(state) || PrimaryExpression$5(state) || PrimaryExpression$6(state) || PrimaryExpression$7(state) || PrimaryExpression$8(state) || PrimaryExpression$9(state);
1021
+ return PrimaryExpression$0(state) || PrimaryExpression$1(state) || PrimaryExpression$2(state) || PrimaryExpression$3(state) || PrimaryExpression$4(state) || PrimaryExpression$5(state) || PrimaryExpression$6(state) || PrimaryExpression$7(state) || PrimaryExpression$8(state) || PrimaryExpression$9(state) || PrimaryExpression$10(state) || PrimaryExpression$11(state);
982
1022
  }
983
1023
  }
984
1024
  var ClassDeclaration$0 = ClassExpression;
@@ -2165,9 +2205,9 @@ var Civet = (() => {
2165
2205
  var KeywordStatement$0 = $EXPECT($L104, fail, 'KeywordStatement "break"');
2166
2206
  var KeywordStatement$1 = $EXPECT($L105, fail, 'KeywordStatement "continue"');
2167
2207
  var KeywordStatement$2 = $EXPECT($L106, fail, 'KeywordStatement "debugger"');
2168
- var KeywordStatement$3 = $S($EXPECT($L107, fail, 'KeywordStatement "return"'), $P(_), Expression);
2208
+ var KeywordStatement$3 = $S($EXPECT($L107, fail, 'KeywordStatement "return"'), Expression);
2169
2209
  var KeywordStatement$4 = $EXPECT($L107, fail, 'KeywordStatement "return"');
2170
- var KeywordStatement$5 = $S($EXPECT($L108, fail, 'KeywordStatement "throw"'), $P(_), Expression);
2210
+ var KeywordStatement$5 = $S($EXPECT($L108, fail, 'KeywordStatement "throw"'), Expression);
2171
2211
  function KeywordStatement(state) {
2172
2212
  if (state.tokenize) {
2173
2213
  return $TOKEN("KeywordStatement", state, KeywordStatement$0(state) || KeywordStatement$1(state) || KeywordStatement$2(state) || KeywordStatement$3(state) || KeywordStatement$4(state) || KeywordStatement$5(state));
@@ -2704,16 +2744,184 @@ var Civet = (() => {
2704
2744
  return StatementDelimiter$0(state) || StatementDelimiter$1(state);
2705
2745
  }
2706
2746
  }
2707
- var TypeDeclaration$0 = $T($S($EXPECT($L123, fail, 'TypeDeclaration "interface"'), $Q(TrailingComment), IdentifierName, InterfaceBlock), function(value) {
2747
+ var JSXElement$0 = JSXSelfClosingElement;
2748
+ var JSXElement$1 = $TS($S(JSXOpeningElement, $Q(JSXChildren), __, JSXClosingElement), function($skip, $loc, $0, $1, $2, $3, $4) {
2749
+ if ($1[1] !== $4[2]) {
2750
+ console.log($1, $4, $loc);
2751
+ throw new Error(`mismatched closing tags at ${JSON.stringify($loc)}`);
2752
+ }
2753
+ return $0;
2754
+ });
2755
+ function JSXElement(state) {
2756
+ if (state.tokenize) {
2757
+ return $TOKEN("JSXElement", state, JSXElement$0(state) || JSXElement$1(state));
2758
+ } else {
2759
+ return JSXElement$0(state) || JSXElement$1(state);
2760
+ }
2761
+ }
2762
+ var JSXSelfClosingElement$0 = $S($EXPECT($L13, fail, 'JSXSelfClosingElement "<"'), $TEXT(JSXElementName), $E(JSXAttributes), __, $EXPECT($L123, fail, 'JSXSelfClosingElement "/>"'));
2763
+ function JSXSelfClosingElement(state) {
2764
+ if (state.verbose)
2765
+ console.log("ENTER:", "JSXSelfClosingElement");
2766
+ if (state.tokenize) {
2767
+ return $TOKEN("JSXSelfClosingElement", state, JSXSelfClosingElement$0(state));
2768
+ } else {
2769
+ return JSXSelfClosingElement$0(state);
2770
+ }
2771
+ }
2772
+ var JSXOpeningElement$0 = $S($EXPECT($L13, fail, 'JSXOpeningElement "<"'), $TEXT(JSXElementName), $E(JSXAttributes), __, $EXPECT($L65, fail, 'JSXOpeningElement ">"'));
2773
+ function JSXOpeningElement(state) {
2774
+ if (state.verbose)
2775
+ console.log("ENTER:", "JSXOpeningElement");
2776
+ if (state.tokenize) {
2777
+ return $TOKEN("JSXOpeningElement", state, JSXOpeningElement$0(state));
2778
+ } else {
2779
+ return JSXOpeningElement$0(state);
2780
+ }
2781
+ }
2782
+ var JSXClosingElement$0 = $S($EXPECT($L124, fail, 'JSXClosingElement "</"'), __, $TEXT(JSXElementName), __, $EXPECT($L65, fail, 'JSXClosingElement ">"'));
2783
+ function JSXClosingElement(state) {
2784
+ if (state.verbose)
2785
+ console.log("ENTER:", "JSXClosingElement");
2786
+ if (state.tokenize) {
2787
+ return $TOKEN("JSXClosingElement", state, JSXClosingElement$0(state));
2788
+ } else {
2789
+ return JSXClosingElement$0(state);
2790
+ }
2791
+ }
2792
+ var JSXFragment$0 = $S($EXPECT($L125, fail, 'JSXFragment "<>"'), $E(JSXChildren), $EXPECT($L126, fail, 'JSXFragment "</>"'));
2793
+ function JSXFragment(state) {
2794
+ if (state.verbose)
2795
+ console.log("ENTER:", "JSXFragment");
2796
+ if (state.tokenize) {
2797
+ return $TOKEN("JSXFragment", state, JSXFragment$0(state));
2798
+ } else {
2799
+ return JSXFragment$0(state);
2800
+ }
2801
+ }
2802
+ var JSXElementName$0 = $S(JSXIdentifierName, $C($S($EXPECT($L11, fail, 'JSXElementName ":"'), JSXIdentifierName), $Q($S($EXPECT($L25, fail, 'JSXElementName "."'), JSXIdentifierName))));
2803
+ function JSXElementName(state) {
2804
+ if (state.verbose)
2805
+ console.log("ENTER:", "JSXElementName");
2806
+ if (state.tokenize) {
2807
+ return $TOKEN("JSXElementName", state, JSXElementName$0(state));
2808
+ } else {
2809
+ return JSXElementName$0(state);
2810
+ }
2811
+ }
2812
+ var JSXIdentifierName$0 = $R$0($EXPECT($R23, fail, "JSXIdentifierName /(?:\\p{ID_Start}|[_$])(?:\\p{ID_Continue}|[\\u200C\\u200D$-])*/"));
2813
+ function JSXIdentifierName(state) {
2814
+ if (state.verbose)
2815
+ console.log("ENTER:", "JSXIdentifierName");
2816
+ if (state.tokenize) {
2817
+ return $TOKEN("JSXIdentifierName", state, JSXIdentifierName$0(state));
2818
+ } else {
2819
+ return JSXIdentifierName$0(state);
2820
+ }
2821
+ }
2822
+ var JSXAttributes$0 = $Q($S(__, JSXAttribute));
2823
+ function JSXAttributes(state) {
2824
+ if (state.verbose)
2825
+ console.log("ENTER:", "JSXAttributes");
2826
+ if (state.tokenize) {
2827
+ return $TOKEN("JSXAttributes", state, JSXAttributes$0(state));
2828
+ } else {
2829
+ return JSXAttributes$0(state);
2830
+ }
2831
+ }
2832
+ var JSXAttribute$0 = $S($EXPECT($L10, fail, 'JSXAttribute "{"'), __, $EXPECT($L30, fail, 'JSXAttribute "..."'), __, AssignmentExpression, __, $EXPECT($L15, fail, 'JSXAttribute "}"'));
2833
+ var JSXAttribute$1 = $S(JSXAttributeName, $E(JSXAttributeInitializer));
2834
+ function JSXAttribute(state) {
2835
+ if (state.tokenize) {
2836
+ return $TOKEN("JSXAttribute", state, JSXAttribute$0(state) || JSXAttribute$1(state));
2837
+ } else {
2838
+ return JSXAttribute$0(state) || JSXAttribute$1(state);
2839
+ }
2840
+ }
2841
+ var JSXAttributeName$0 = $S(JSXIdentifierName, $E($S($EXPECT($L11, fail, 'JSXAttributeName ":"'), JSXIdentifierName)));
2842
+ function JSXAttributeName(state) {
2843
+ if (state.verbose)
2844
+ console.log("ENTER:", "JSXAttributeName");
2845
+ if (state.tokenize) {
2846
+ return $TOKEN("JSXAttributeName", state, JSXAttributeName$0(state));
2847
+ } else {
2848
+ return JSXAttributeName$0(state);
2849
+ }
2850
+ }
2851
+ var JSXAttributeInitializer$0 = $S(__, $EXPECT($L54, fail, 'JSXAttributeInitializer "="'), __, JSXAttributeValue);
2852
+ function JSXAttributeInitializer(state) {
2853
+ if (state.verbose)
2854
+ console.log("ENTER:", "JSXAttributeInitializer");
2855
+ if (state.tokenize) {
2856
+ return $TOKEN("JSXAttributeInitializer", state, JSXAttributeInitializer$0(state));
2857
+ } else {
2858
+ return JSXAttributeInitializer$0(state);
2859
+ }
2860
+ }
2861
+ var JSXAttributeValue$0 = $R$0($EXPECT($R24, fail, 'JSXAttributeValue /"[^"]*"/'));
2862
+ var JSXAttributeValue$1 = $R$0($EXPECT($R25, fail, "JSXAttributeValue /'[^']*'/"));
2863
+ var JSXAttributeValue$2 = $S($EXPECT($L10, fail, 'JSXAttributeValue "{"'), __, AssignmentExpression, __, $EXPECT($L15, fail, 'JSXAttributeValue "}"'));
2864
+ var JSXAttributeValue$3 = JSXElement;
2865
+ var JSXAttributeValue$4 = JSXFragment;
2866
+ function JSXAttributeValue(state) {
2867
+ if (state.tokenize) {
2868
+ return $TOKEN("JSXAttributeValue", state, JSXAttributeValue$0(state) || JSXAttributeValue$1(state) || JSXAttributeValue$2(state) || JSXAttributeValue$3(state) || JSXAttributeValue$4(state));
2869
+ } else {
2870
+ return JSXAttributeValue$0(state) || JSXAttributeValue$1(state) || JSXAttributeValue$2(state) || JSXAttributeValue$3(state) || JSXAttributeValue$4(state);
2871
+ }
2872
+ }
2873
+ var JSXChildren$0 = $Q($S(__, JSXChild));
2874
+ function JSXChildren(state) {
2875
+ if (state.verbose)
2876
+ console.log("ENTER:", "JSXChildren");
2877
+ if (state.tokenize) {
2878
+ return $TOKEN("JSXChildren", state, JSXChildren$0(state));
2879
+ } else {
2880
+ return JSXChildren$0(state);
2881
+ }
2882
+ }
2883
+ var JSXChild$0 = JSXText;
2884
+ var JSXChild$1 = JSXElement;
2885
+ var JSXChild$2 = JSXFragment;
2886
+ var JSXChild$3 = $S($EXPECT($L10, fail, 'JSXChild "{"'), $E(JSXChildExpression), __, $EXPECT($L15, fail, 'JSXChild "}"'));
2887
+ function JSXChild(state) {
2888
+ if (state.tokenize) {
2889
+ return $TOKEN("JSXChild", state, JSXChild$0(state) || JSXChild$1(state) || JSXChild$2(state) || JSXChild$3(state));
2890
+ } else {
2891
+ return JSXChild$0(state) || JSXChild$1(state) || JSXChild$2(state) || JSXChild$3(state);
2892
+ }
2893
+ }
2894
+ var JSXText$0 = $R$0($EXPECT($R26, fail, "JSXText /[^{}<>]+/"));
2895
+ function JSXText(state) {
2896
+ if (state.verbose)
2897
+ console.log("ENTER:", "JSXText");
2898
+ if (state.tokenize) {
2899
+ return $TOKEN("JSXText", state, JSXText$0(state));
2900
+ } else {
2901
+ return JSXText$0(state);
2902
+ }
2903
+ }
2904
+ var JSXChildExpression$0 = $S(__, $E($S($EXPECT($L30, fail, 'JSXChildExpression "..."'), __)), AssignmentExpression);
2905
+ function JSXChildExpression(state) {
2906
+ if (state.verbose)
2907
+ console.log("ENTER:", "JSXChildExpression");
2908
+ if (state.tokenize) {
2909
+ return $TOKEN("JSXChildExpression", state, JSXChildExpression$0(state));
2910
+ } else {
2911
+ return JSXChildExpression$0(state);
2912
+ }
2913
+ }
2914
+ var TypeDeclaration$0 = $T($S($EXPECT($R27, fail, "TypeDeclaration /type(?!\\p{ID_Continue})/"), $Q(TrailingComment), IdentifierName, $E(TypeParameters), __, $EXPECT($L54, fail, 'TypeDeclaration "="'), __, Type), function(value) {
2915
+ return { "ts": true, "children": value };
2916
+ });
2917
+ var TypeDeclaration$1 = $T($S($EXPECT($R28, fail, "TypeDeclaration /interface(?!\\p{ID_Continue})/"), $Q(TrailingComment), IdentifierName, InterfaceBlock), function(value) {
2708
2918
  return { "ts": true, "children": value };
2709
2919
  });
2710
2920
  function TypeDeclaration(state) {
2711
- if (state.verbose)
2712
- console.log("ENTER:", "TypeDeclaration");
2713
2921
  if (state.tokenize) {
2714
- return $TOKEN("TypeDeclaration", state, TypeDeclaration$0(state));
2922
+ return $TOKEN("TypeDeclaration", state, TypeDeclaration$0(state) || TypeDeclaration$1(state));
2715
2923
  } else {
2716
- return TypeDeclaration$0(state);
2924
+ return TypeDeclaration$0(state) || TypeDeclaration$1(state);
2717
2925
  }
2718
2926
  }
2719
2927
  var InterfaceBlock$0 = $S(__, $EXPECT($L10, fail, 'InterfaceBlock "{"'), EOS, NestedInterfaceProperties, __, $EXPECT($L15, fail, 'InterfaceBlock "}"'));
@@ -2750,7 +2958,7 @@ var Civet = (() => {
2750
2958
  return NestedInterfaceProperty$0(state);
2751
2959
  }
2752
2960
  }
2753
- var TypeSuffix$0 = $T($S(__, $EXPECT($L11, fail, 'TypeSuffix ":"'), Type), function(value) {
2961
+ var TypeSuffix$0 = $T($S($E($EXPECT($L3, fail, 'TypeSuffix "?"')), __, $EXPECT($L11, fail, 'TypeSuffix ":"'), Type), function(value) {
2754
2962
  return { "ts": true, "children": value };
2755
2963
  });
2756
2964
  function TypeSuffix(state) {
@@ -2762,17 +2970,84 @@ var Civet = (() => {
2762
2970
  return TypeSuffix$0(state);
2763
2971
  }
2764
2972
  }
2765
- var Type$0 = InterfaceBlock;
2766
- var Type$1 = $S($Q(_), FunctionType);
2767
- var Type$2 = $S($Q(_), IdentifierName, $Q($S($EXPECT($L25, fail, 'Type "."'), IdentifierName)), $E(TypeArguments), $Q($EXPECT($L124, fail, 'Type "[]"')));
2768
- var Type$3 = $S($Q(_), NumericLiteral);
2769
- var Type$4 = $S($Q(_), StringLiteral);
2770
- var Type$5 = $S($Q(_), $EXPECT($L82, fail, 'Type "void"'));
2973
+ var Type$0 = TypeConditional;
2771
2974
  function Type(state) {
2975
+ if (state.verbose)
2976
+ console.log("ENTER:", "Type");
2977
+ if (state.tokenize) {
2978
+ return $TOKEN("Type", state, Type$0(state));
2979
+ } else {
2980
+ return Type$0(state);
2981
+ }
2982
+ }
2983
+ var TypeBinary$0 = $S(TypeUnary, $Q($S(__, TypeBinaryOp, TypeUnary)));
2984
+ function TypeBinary(state) {
2985
+ if (state.verbose)
2986
+ console.log("ENTER:", "TypeBinary");
2987
+ if (state.tokenize) {
2988
+ return $TOKEN("TypeBinary", state, TypeBinary$0(state));
2989
+ } else {
2990
+ return TypeBinary$0(state);
2991
+ }
2992
+ }
2993
+ var TypeUnary$0 = $S($Q(TypeUnaryOp), TypePrimary);
2994
+ function TypeUnary(state) {
2995
+ if (state.verbose)
2996
+ console.log("ENTER:", "TypeUnary");
2997
+ if (state.tokenize) {
2998
+ return $TOKEN("TypeUnary", state, TypeUnary$0(state));
2999
+ } else {
3000
+ return TypeUnary$0(state);
3001
+ }
3002
+ }
3003
+ var TypeUnaryOp$0 = $S(__, $EXPECT($L83, fail, 'TypeUnaryOp "typeof"'), $R$0($EXPECT($R29, fail, "TypeUnaryOp /(?!\\p{ID_Continue})/")));
3004
+ var TypeUnaryOp$1 = $S(__, $EXPECT($L127, fail, 'TypeUnaryOp "infer"'), $R$0($EXPECT($R29, fail, "TypeUnaryOp /(?!\\p{ID_Continue})/")));
3005
+ function TypeUnaryOp(state) {
3006
+ if (state.tokenize) {
3007
+ return $TOKEN("TypeUnaryOp", state, TypeUnaryOp$0(state) || TypeUnaryOp$1(state));
3008
+ } else {
3009
+ return TypeUnaryOp$0(state) || TypeUnaryOp$1(state);
3010
+ }
3011
+ }
3012
+ var TypePrimary$0 = InterfaceBlock;
3013
+ var TypePrimary$1 = $S(__, $EXPECT($L1, fail, 'TypePrimary "("'), Type, __, $EXPECT($L2, fail, 'TypePrimary ")"'));
3014
+ var TypePrimary$2 = $S($Q(_), FunctionType);
3015
+ var TypePrimary$3 = $S($Q(_), IdentifierName, $Q($S($EXPECT($L25, fail, 'TypePrimary "."'), IdentifierName)), $E(TypeArguments), $Q($EXPECT($L128, fail, 'TypePrimary "[]"')));
3016
+ var TypePrimary$4 = $S($Q(_), TypeLiteral);
3017
+ function TypePrimary(state) {
3018
+ if (state.tokenize) {
3019
+ return $TOKEN("TypePrimary", state, TypePrimary$0(state) || TypePrimary$1(state) || TypePrimary$2(state) || TypePrimary$3(state) || TypePrimary$4(state));
3020
+ } else {
3021
+ return TypePrimary$0(state) || TypePrimary$1(state) || TypePrimary$2(state) || TypePrimary$3(state) || TypePrimary$4(state);
3022
+ }
3023
+ }
3024
+ var TypeConditional$0 = $S(TypeBinary, $E($S(__, $EXPECT($L14, fail, 'TypeConditional "extends"'), Type, __, $EXPECT($L3, fail, 'TypeConditional "?"'), Type, __, $EXPECT($L11, fail, 'TypeConditional ":"'), Type)));
3025
+ function TypeConditional(state) {
3026
+ if (state.verbose)
3027
+ console.log("ENTER:", "TypeConditional");
2772
3028
  if (state.tokenize) {
2773
- return $TOKEN("Type", state, Type$0(state) || Type$1(state) || Type$2(state) || Type$3(state) || Type$4(state) || Type$5(state));
3029
+ return $TOKEN("TypeConditional", state, TypeConditional$0(state));
2774
3030
  } else {
2775
- return Type$0(state) || Type$1(state) || Type$2(state) || Type$3(state) || Type$4(state) || Type$5(state);
3031
+ return TypeConditional$0(state);
3032
+ }
3033
+ }
3034
+ var TypeLiteral$0 = Literal;
3035
+ var TypeLiteral$1 = $EXPECT($L82, fail, 'TypeLiteral "void"');
3036
+ var TypeLiteral$2 = $EXPECT($L128, fail, 'TypeLiteral "[]"');
3037
+ function TypeLiteral(state) {
3038
+ if (state.tokenize) {
3039
+ return $TOKEN("TypeLiteral", state, TypeLiteral$0(state) || TypeLiteral$1(state) || TypeLiteral$2(state));
3040
+ } else {
3041
+ return TypeLiteral$0(state) || TypeLiteral$1(state) || TypeLiteral$2(state);
3042
+ }
3043
+ }
3044
+ var TypeBinaryOp$0 = $EXPECT($L80, fail, 'TypeBinaryOp "|"');
3045
+ var TypeBinaryOp$1 = $EXPECT($L78, fail, 'TypeBinaryOp "&"');
3046
+ function TypeBinaryOp(state) {
3047
+ if (state.tokenize) {
3048
+ return $TOKEN("TypeBinaryOp", state, TypeBinaryOp$0(state) || TypeBinaryOp$1(state));
3049
+ } else {
3050
+ return TypeBinaryOp$0(state) || TypeBinaryOp$1(state);
2776
3051
  }
2777
3052
  }
2778
3053
  var FunctionType$0 = $S(Parameters, __, $EXPECT($L9, fail, 'FunctionType "=>"'), Type);
@@ -2795,7 +3070,52 @@ var Civet = (() => {
2795
3070
  return TypeArguments$0(state);
2796
3071
  }
2797
3072
  }
2798
- var Shebang$0 = $R$0($EXPECT($R23, fail, "Shebang /#![^\\r\\n]*/"));
3073
+ var TypeParameters$0 = $S(__, $EXPECT($L13, fail, 'TypeParameters "<"'), __, Type, $Q($S(__, $EXPECT($L0, fail, 'TypeParameters ","'), __, Type)), $E($S(__, $EXPECT($L0, fail, 'TypeParameters ","'))), __, $EXPECT($L65, fail, 'TypeParameters ">"'));
3074
+ function TypeParameters(state) {
3075
+ if (state.verbose)
3076
+ console.log("ENTER:", "TypeParameters");
3077
+ if (state.tokenize) {
3078
+ return $TOKEN("TypeParameters", state, TypeParameters$0(state));
3079
+ } else {
3080
+ return TypeParameters$0(state);
3081
+ }
3082
+ }
3083
+ var TypeParameter$0 = $S(__, Identifier, $E(TypeConstraint), TypeParameterDelimiter);
3084
+ function TypeParameter(state) {
3085
+ if (state.verbose)
3086
+ console.log("ENTER:", "TypeParameter");
3087
+ if (state.tokenize) {
3088
+ return $TOKEN("TypeParameter", state, TypeParameter$0(state));
3089
+ } else {
3090
+ return TypeParameter$0(state);
3091
+ }
3092
+ }
3093
+ var TypeConstraint$0 = $S(__, $EXPECT($L14, fail, 'TypeConstraint "extends"'), Type);
3094
+ function TypeConstraint(state) {
3095
+ if (state.verbose)
3096
+ console.log("ENTER:", "TypeConstraint");
3097
+ if (state.tokenize) {
3098
+ return $TOKEN("TypeConstraint", state, TypeConstraint$0(state));
3099
+ } else {
3100
+ return TypeConstraint$0(state);
3101
+ }
3102
+ }
3103
+ var TypeParameterDelimiter$0 = $S($Q(_), $EXPECT($L0, fail, 'TypeParameterDelimiter ","'));
3104
+ var TypeParameterDelimiter$1 = $Y($S($Q(_), $EXPECT($L65, fail, 'TypeParameterDelimiter ">"')));
3105
+ var TypeParameterDelimiter$2 = $T($Y($S(__, $EXPECT($L65, fail, 'TypeParameterDelimiter ">"'))), function(value) {
3106
+ return ",";
3107
+ });
3108
+ var TypeParameterDelimiter$3 = $T($Y(EOS), function(value) {
3109
+ return ",";
3110
+ });
3111
+ function TypeParameterDelimiter(state) {
3112
+ if (state.tokenize) {
3113
+ return $TOKEN("TypeParameterDelimiter", state, TypeParameterDelimiter$0(state) || TypeParameterDelimiter$1(state) || TypeParameterDelimiter$2(state) || TypeParameterDelimiter$3(state));
3114
+ } else {
3115
+ return TypeParameterDelimiter$0(state) || TypeParameterDelimiter$1(state) || TypeParameterDelimiter$2(state) || TypeParameterDelimiter$3(state);
3116
+ }
3117
+ }
3118
+ var Shebang$0 = $R$0($EXPECT($R30, fail, "Shebang /#![^\\r\\n]*/"));
2799
3119
  function Shebang(state) {
2800
3120
  if (state.verbose)
2801
3121
  console.log("ENTER:", "Shebang");
@@ -2805,7 +3125,7 @@ var Civet = (() => {
2805
3125
  return Shebang$0(state);
2806
3126
  }
2807
3127
  }
2808
- var DirectivePrologue$0 = $TV($Q($S($TEXT($EXPECT($R24, fail, "DirectivePrologue /[\\t ]*/")), $TEXT(StringLiteral), $TEXT(StatementDelimiter), $TEXT(EOS))), function($skip, $loc, $0, $1) {
3128
+ var DirectivePrologue$0 = $TV($Q($S($TEXT($EXPECT($R31, fail, "DirectivePrologue /[\\t ]*/")), $TEXT(StringLiteral), $TEXT(StatementDelimiter), $TEXT(EOS))), function($skip, $loc, $0, $1) {
2809
3129
  return $0.map((p) => p.join(""));
2810
3130
  });
2811
3131
  function DirectivePrologue(state) {
@@ -2827,7 +3147,7 @@ var Civet = (() => {
2827
3147
  return EOS$0(state);
2828
3148
  }
2829
3149
  }
2830
- var EOL$0 = $R$0($EXPECT($R25, fail, "EOL /\\r\\n|\\n|\\r|$/"));
3150
+ var EOL$0 = $R$0($EXPECT($R32, fail, "EOL /\\r\\n|\\n|\\r|$/"));
2831
3151
  function EOL(state) {
2832
3152
  if (state.verbose)
2833
3153
  console.log("ENTER:", "EOL");
@@ -2837,7 +3157,7 @@ var Civet = (() => {
2837
3157
  return EOL$0(state);
2838
3158
  }
2839
3159
  }
2840
- var EOF$0 = $R$0($EXPECT($R26, fail, "EOF /$/"));
3160
+ var EOF$0 = $R$0($EXPECT($R33, fail, "EOF /$/"));
2841
3161
  function EOF(state) {
2842
3162
  if (state.verbose)
2843
3163
  console.log("ENTER:", "EOF");
@@ -2975,7 +3295,7 @@ var Civet = (() => {
2975
3295
  return Init$0(state);
2976
3296
  }
2977
3297
  }
2978
- var Indent$0 = $TV($Q($C($EXPECT($L125, fail, 'Indent " "'), $EXPECT($L126, fail, 'Indent "\\\\t"'))), function($skip, $loc, $0, $1) {
3298
+ var Indent$0 = $TV($Q($C($EXPECT($L129, fail, 'Indent " "'), $EXPECT($L130, fail, 'Indent "\\\\t"'))), function($skip, $loc, $0, $1) {
2979
3299
  return $1.length;
2980
3300
  });
2981
3301
  function Indent(state) {