@danielx/civet 0.4.5 → 0.4.6

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
@@ -132,6 +132,7 @@ Things Changed from CoffeeScript
132
132
  - Embedded JS `\`\`` has been replaced with JS template literals.
133
133
  - No longer allowing multiple postfix `if/unless` on the same line.
134
134
  - No `else` block on `unless` (negate condition and use `if`)
135
+ - `#{}` interpolation in `""` strings only when `"use coffee-compat"`
135
136
  - Civet tries to keep the transpiled output verbatim as much as possible.
136
137
  In Coffee `(x)` -> `x;` but in Civet `(x)` -> `(x);`.
137
138
  Also in Coffee `x + 3` -> `x + 3` but in Civet `x + 3` remains as is.
@@ -159,6 +160,7 @@ Things Added that CoffeeScript didn't
159
160
  - JS Compatability
160
161
  - `var`, `let`, `const`
161
162
  - JS Comment Syntax `//` and `/* */`
163
+ - `function` keyword
162
164
  - Braced Blocks
163
165
  - OptionalChain longhand
164
166
  - ConditionalExpression
@@ -169,7 +171,7 @@ Things Added that CoffeeScript didn't
169
171
  - `<` as `extends` shorthand
170
172
  - `@#id` -> `this.#id` shorthand for private identifiers
171
173
  - `import` shorthand `x from ./x` -> `import x from "./x"`
172
- - `\`\`\`` Block Template Strings
174
+ - `\`\`\`` Block Template Strings remove leading indentation for clarity
173
175
  - Class constructor shorthand `@( ... )`
174
176
  - ClassStaticBlock
175
177
  - `get`/`set` method definitions
package/dist/browser.js CHANGED
@@ -586,6 +586,9 @@ var Civet = (() => {
586
586
  TripleDoubleStringCharacters,
587
587
  TripleSingleStringCharacters,
588
588
  CoffeeStringSubstitution,
589
+ CoffeeCompat,
590
+ CoffeeCompatDoubleQuotedString,
591
+ CoffeeCompatDoubleQuotedStringCharacters,
589
592
  RegularExpressionLiteral,
590
593
  RegularExpressionBody,
591
594
  RegExpCharacter,
@@ -728,6 +731,7 @@ var Civet = (() => {
728
731
  InsertSpace,
729
732
  InsertDot,
730
733
  InsertBreak,
734
+ Reset,
731
735
  Init,
732
736
  Indent,
733
737
  TrackIndent,
@@ -893,31 +897,32 @@ var Civet = (() => {
893
897
  var $R10 = $R(new RegExp("(?:\\\\.|[^'])*", "suy"));
894
898
  var $R11 = $R(new RegExp('(?:"(?!"")|#(?!\\{)|\\\\.|[^#"])+', "suy"));
895
899
  var $R12 = $R(new RegExp("(?:'(?!'')|\\\\.|[^'])*", "suy"));
896
- var $R13 = $R(new RegExp("[*\\/\\r\\n]", "suy"));
897
- var $R14 = $R(new RegExp("(?:\\\\.|[^\\/\\r\\n])+", "suy"));
898
- var $R15 = $R(new RegExp("(?:\\p{ID_Continue}|[\\u200C\\u200D$])*", "suy"));
899
- var $R16 = $R(new RegExp("(?:\\$(?!\\{)|\\\\.|[^$`])+", "suy"));
900
- var $R17 = $R(new RegExp("(?:\\$(?!\\{)|`(?!``)|\\\\.|[^$`])+", "suy"));
901
- var $R18 = $R(new RegExp("(?:and|as|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|false|finally|for|function|if|import|in|instanceof|interface|is|new|null|or|return|static|super|switch|this|throw|true|try|typeof|unless|var|void|while|with|yield)(?!\\p{ID_Continue})", "suy"));
902
- var $R19 = $R(new RegExp("\\/\\/[^\\r\\n]*", "suy"));
903
- var $R20 = $R(new RegExp(".", "suy"));
904
- var $R21 = $R(new RegExp("#([^\\r\\n]*)", "suy"));
905
- var $R22 = $R(new RegExp("[^\\r\\n]", "suy"));
906
- var $R23 = $R(new RegExp("[ \\t]+", "suy"));
907
- var $R24 = $R(new RegExp("[\\s]+", "suy"));
908
- var $R25 = $R(new RegExp("(?!\\p{ID_Continue})", "suy"));
909
- var $R26 = $R(new RegExp("\\s", "suy"));
910
- var $R27 = $R(new RegExp("(?:\\p{ID_Start}|[_$])(?:\\p{ID_Continue}|[\\u200C\\u200D$-])*", "suy"));
911
- var $R28 = $R(new RegExp('"[^"]*"', "suy"));
912
- var $R29 = $R(new RegExp("'[^']*'", "suy"));
913
- var $R30 = $R(new RegExp("[^{}<>]+", "suy"));
914
- var $R31 = $R(new RegExp("[+-]?", "suy"));
915
- var $R32 = $R(new RegExp("[+-]", "suy"));
916
- var $R33 = $R(new RegExp("#![^\\r\\n]*", "suy"));
917
- var $R34 = $R(new RegExp("[\\t ]*", "suy"));
918
- var $R35 = $R(new RegExp("\\r\\n|\\n|\\r|$", "suy"));
919
- var $R36 = $R(new RegExp("$", "suy"));
920
- var Program$0 = $S(Init, __, $Q(TopLevelStatement), __);
900
+ var $R13 = $R(new RegExp('(?:\\\\.|#(?!\\{)|[^"#])+', "suy"));
901
+ var $R14 = $R(new RegExp("[*\\/\\r\\n]", "suy"));
902
+ var $R15 = $R(new RegExp("(?:\\\\.|[^\\/\\r\\n])+", "suy"));
903
+ var $R16 = $R(new RegExp("(?:\\p{ID_Continue}|[\\u200C\\u200D$])*", "suy"));
904
+ var $R17 = $R(new RegExp("(?:\\$(?!\\{)|\\\\.|[^$`])+", "suy"));
905
+ var $R18 = $R(new RegExp("(?:\\$(?!\\{)|`(?!``)|\\\\.|[^$`])+", "suy"));
906
+ var $R19 = $R(new RegExp("(?:and|as|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|false|finally|for|function|if|import|in|instanceof|interface|is|new|null|or|return|static|super|switch|this|throw|true|try|typeof|unless|var|void|while|with|yield)(?!\\p{ID_Continue})", "suy"));
907
+ var $R20 = $R(new RegExp("\\/\\/[^\\r\\n]*", "suy"));
908
+ var $R21 = $R(new RegExp(".", "suy"));
909
+ var $R22 = $R(new RegExp("#([^\\r\\n]*)", "suy"));
910
+ var $R23 = $R(new RegExp("[^\\r\\n]", "suy"));
911
+ var $R24 = $R(new RegExp("[ \\t]+", "suy"));
912
+ var $R25 = $R(new RegExp("[\\s]+", "suy"));
913
+ var $R26 = $R(new RegExp("(?!\\p{ID_Continue})", "suy"));
914
+ var $R27 = $R(new RegExp("\\s", "suy"));
915
+ var $R28 = $R(new RegExp("(?:\\p{ID_Start}|[_$])(?:\\p{ID_Continue}|[\\u200C\\u200D$-])*", "suy"));
916
+ var $R29 = $R(new RegExp('"[^"]*"', "suy"));
917
+ var $R30 = $R(new RegExp("'[^']*'", "suy"));
918
+ var $R31 = $R(new RegExp("[^{}<>]+", "suy"));
919
+ var $R32 = $R(new RegExp("[+-]?", "suy"));
920
+ var $R33 = $R(new RegExp("[+-]", "suy"));
921
+ var $R34 = $R(new RegExp("#![^\\r\\n]*", "suy"));
922
+ var $R35 = $R(new RegExp("[\\t ]*", "suy"));
923
+ var $R36 = $R(new RegExp("\\r\\n|\\n|\\r|$", "suy"));
924
+ var $R37 = $R(new RegExp("$", "suy"));
925
+ var Program$0 = $S(Reset, Init, __, $Q(TopLevelStatement), __);
921
926
  function Program(state) {
922
927
  if (state.verbose)
923
928
  console.log("ENTER:", "Program");
@@ -2973,12 +2978,13 @@ var Civet = (() => {
2973
2978
  var e = $3;
2974
2979
  return [s, module.dedentBlockString(str), e];
2975
2980
  });
2976
- var StringLiteral$2 = BasicStringLiteral;
2981
+ var StringLiteral$2 = CoffeeCompatDoubleQuotedString;
2982
+ var StringLiteral$3 = BasicStringLiteral;
2977
2983
  function StringLiteral(state) {
2978
2984
  if (state.tokenize) {
2979
- return $TOKEN("StringLiteral", state, StringLiteral$0(state) || StringLiteral$1(state) || StringLiteral$2(state));
2985
+ return $TOKEN("StringLiteral", state, StringLiteral$0(state) || StringLiteral$1(state) || StringLiteral$2(state) || StringLiteral$3(state));
2980
2986
  } else {
2981
- return StringLiteral$0(state) || StringLiteral$1(state) || StringLiteral$2(state);
2987
+ return StringLiteral$0(state) || StringLiteral$1(state) || StringLiteral$2(state) || StringLiteral$3(state);
2982
2988
  }
2983
2989
  }
2984
2990
  var BasicStringLiteral$0 = $TS($S(DoubleQuote, DoubleStringCharacters, DoubleQuote), function($skip, $loc, $0, $1, $2, $3) {
@@ -3060,6 +3066,61 @@ var Civet = (() => {
3060
3066
  return CoffeeStringSubstitution$0(state);
3061
3067
  }
3062
3068
  }
3069
+ var CoffeeCompat$0 = $TV($EXPECT($L1, fail, 'CoffeeCompat ""'), function($skip, $loc, $0, $1) {
3070
+ if (module.coffeeCompat)
3071
+ return;
3072
+ return $skip;
3073
+ });
3074
+ function CoffeeCompat(state) {
3075
+ if (state.verbose)
3076
+ console.log("ENTER:", "CoffeeCompat");
3077
+ if (state.tokenize) {
3078
+ return $TOKEN("CoffeeCompat", state, CoffeeCompat$0(state));
3079
+ } else {
3080
+ return CoffeeCompat$0(state);
3081
+ }
3082
+ }
3083
+ var CoffeeCompatDoubleQuotedString$0 = $TS($S(CoffeeCompat, DoubleQuote, $Q($C(CoffeeCompatDoubleQuotedStringCharacters, CoffeeStringSubstitution)), DoubleQuote), function($skip, $loc, $0, $1, $2, $3, $4) {
3084
+ var s = $2;
3085
+ var parts = $3;
3086
+ var e = $4;
3087
+ const noInterpolations = parts.length === 1 && parts[0].token != null;
3088
+ if (noInterpolations) {
3089
+ return {
3090
+ token: `"${module.modifyString(parts[0].token)}"`,
3091
+ $loc
3092
+ };
3093
+ }
3094
+ parts.forEach((part) => {
3095
+ if (part.token) {
3096
+ const str = part.token.replace(/(`|\$\{)/g, "\\$1");
3097
+ part.token = module.modifyString(str);
3098
+ }
3099
+ });
3100
+ s.token = e.token = "`";
3101
+ return [s, parts, e];
3102
+ });
3103
+ function CoffeeCompatDoubleQuotedString(state) {
3104
+ if (state.verbose)
3105
+ console.log("ENTER:", "CoffeeCompatDoubleQuotedString");
3106
+ if (state.tokenize) {
3107
+ return $TOKEN("CoffeeCompatDoubleQuotedString", state, CoffeeCompatDoubleQuotedString$0(state));
3108
+ } else {
3109
+ return CoffeeCompatDoubleQuotedString$0(state);
3110
+ }
3111
+ }
3112
+ var CoffeeCompatDoubleQuotedStringCharacters$0 = $TR($EXPECT($R13, fail, 'CoffeeCompatDoubleQuotedStringCharacters /(?:\\\\.|#(?!\\{)|[^"#])+/'), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7, $8, $9) {
3113
+ return { $loc, token: $0 };
3114
+ });
3115
+ function CoffeeCompatDoubleQuotedStringCharacters(state) {
3116
+ if (state.verbose)
3117
+ console.log("ENTER:", "CoffeeCompatDoubleQuotedStringCharacters");
3118
+ if (state.tokenize) {
3119
+ return $TOKEN("CoffeeCompatDoubleQuotedStringCharacters", state, CoffeeCompatDoubleQuotedStringCharacters$0(state));
3120
+ } else {
3121
+ return CoffeeCompatDoubleQuotedStringCharacters$0(state);
3122
+ }
3123
+ }
3063
3124
  var RegularExpressionLiteral$0 = $TV($TEXT($S($EXPECT($L44, fail, 'RegularExpressionLiteral "/"'), RegularExpressionBody, $EXPECT($L44, fail, 'RegularExpressionLiteral "/"'), RegularExpressionFlags)), function($skip, $loc, $0, $1) {
3064
3125
  return { $loc, token: $1 };
3065
3126
  });
@@ -3072,7 +3133,7 @@ var Civet = (() => {
3072
3133
  return RegularExpressionLiteral$0(state);
3073
3134
  }
3074
3135
  }
3075
- var RegularExpressionBody$0 = $S($N($R$0($EXPECT($R13, fail, "RegularExpressionBody /[*\\/\\r\\n]/"))), $Q(RegExpCharacter));
3136
+ var RegularExpressionBody$0 = $S($N($R$0($EXPECT($R14, fail, "RegularExpressionBody /[*\\/\\r\\n]/"))), $Q(RegExpCharacter));
3076
3137
  function RegularExpressionBody(state) {
3077
3138
  if (state.verbose)
3078
3139
  console.log("ENTER:", "RegularExpressionBody");
@@ -3082,7 +3143,7 @@ var Civet = (() => {
3082
3143
  return RegularExpressionBody$0(state);
3083
3144
  }
3084
3145
  }
3085
- var RegExpCharacter$0 = $R$0($EXPECT($R14, fail, "RegExpCharacter /(?:\\\\.|[^\\/\\r\\n])+/"));
3146
+ var RegExpCharacter$0 = $R$0($EXPECT($R15, fail, "RegExpCharacter /(?:\\\\.|[^\\/\\r\\n])+/"));
3086
3147
  function RegExpCharacter(state) {
3087
3148
  if (state.verbose)
3088
3149
  console.log("ENTER:", "RegExpCharacter");
@@ -3092,7 +3153,7 @@ var Civet = (() => {
3092
3153
  return RegExpCharacter$0(state);
3093
3154
  }
3094
3155
  }
3095
- var RegularExpressionFlags$0 = $R$0($EXPECT($R15, fail, "RegularExpressionFlags /(?:\\p{ID_Continue}|[\\u200C\\u200D$])*/"));
3156
+ var RegularExpressionFlags$0 = $R$0($EXPECT($R16, fail, "RegularExpressionFlags /(?:\\p{ID_Continue}|[\\u200C\\u200D$])*/"));
3096
3157
  function RegularExpressionFlags(state) {
3097
3158
  if (state.verbose)
3098
3159
  console.log("ENTER:", "RegularExpressionFlags");
@@ -3123,7 +3184,7 @@ var Civet = (() => {
3123
3184
  return TemplateSubstitution$0(state);
3124
3185
  }
3125
3186
  }
3126
- var TemplateCharacters$0 = $TR($EXPECT($R16, fail, "TemplateCharacters /(?:\\$(?!\\{)|\\\\.|[^$`])+/"), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7, $8, $9) {
3187
+ var TemplateCharacters$0 = $TR($EXPECT($R17, fail, "TemplateCharacters /(?:\\$(?!\\{)|\\\\.|[^$`])+/"), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7, $8, $9) {
3127
3188
  return { $loc, token: $0 };
3128
3189
  });
3129
3190
  function TemplateCharacters(state) {
@@ -3135,7 +3196,7 @@ var Civet = (() => {
3135
3196
  return TemplateCharacters$0(state);
3136
3197
  }
3137
3198
  }
3138
- var TemplateBlockCharacters$0 = $TR($EXPECT($R17, fail, "TemplateBlockCharacters /(?:\\$(?!\\{)|`(?!``)|\\\\.|[^$`])+/"), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7, $8, $9) {
3199
+ var TemplateBlockCharacters$0 = $TR($EXPECT($R18, fail, "TemplateBlockCharacters /(?:\\$(?!\\{)|`(?!``)|\\\\.|[^$`])+/"), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7, $8, $9) {
3139
3200
  return { $loc, token: $0 };
3140
3201
  });
3141
3202
  function TemplateBlockCharacters(state) {
@@ -3147,7 +3208,7 @@ var Civet = (() => {
3147
3208
  return TemplateBlockCharacters$0(state);
3148
3209
  }
3149
3210
  }
3150
- var ReservedWord$0 = $R$0($EXPECT($R18, fail, "ReservedWord /(?:and|as|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|false|finally|for|function|if|import|in|instanceof|interface|is|new|null|or|return|static|super|switch|this|throw|true|try|typeof|unless|var|void|while|with|yield)(?!\\p{ID_Continue})/"));
3211
+ var ReservedWord$0 = $R$0($EXPECT($R19, fail, "ReservedWord /(?:and|as|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|false|finally|for|function|if|import|in|instanceof|interface|is|new|null|or|return|static|super|switch|this|throw|true|try|typeof|unless|var|void|while|with|yield)(?!\\p{ID_Continue})/"));
3151
3212
  function ReservedWord(state) {
3152
3213
  if (state.verbose)
3153
3214
  console.log("ENTER:", "ReservedWord");
@@ -3166,10 +3227,10 @@ var Civet = (() => {
3166
3227
  return Comment$0(state) || Comment$1(state);
3167
3228
  }
3168
3229
  }
3169
- var SingleLineComment$0 = $TR($EXPECT($R19, fail, "SingleLineComment /\\/\\/[^\\r\\n]*/"), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7, $8, $9) {
3230
+ var SingleLineComment$0 = $TR($EXPECT($R20, fail, "SingleLineComment /\\/\\/[^\\r\\n]*/"), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7, $8, $9) {
3170
3231
  return { $loc, token: $0 };
3171
3232
  });
3172
- var SingleLineComment$1 = CoffeeSingleLineComment;
3233
+ var SingleLineComment$1 = $S(CoffeeCompat, CoffeeSingleLineComment);
3173
3234
  function SingleLineComment(state) {
3174
3235
  if (state.tokenize) {
3175
3236
  return $TOKEN("SingleLineComment", state, SingleLineComment$0(state) || SingleLineComment$1(state));
@@ -3186,7 +3247,7 @@ var Civet = (() => {
3186
3247
  return MultiLineComment$0(state) || MultiLineComment$1(state);
3187
3248
  }
3188
3249
  }
3189
- var JSMultiLineComment$0 = $TV($TEXT($S($EXPECT($L84, fail, 'JSMultiLineComment "/*"'), $Q($S($N($EXPECT($L85, fail, 'JSMultiLineComment "*/"')), $EXPECT($R20, fail, "JSMultiLineComment /./"))), $EXPECT($L85, fail, 'JSMultiLineComment "*/"'))), function($skip, $loc, $0, $1) {
3250
+ var JSMultiLineComment$0 = $TV($TEXT($S($EXPECT($L84, fail, 'JSMultiLineComment "/*"'), $Q($S($N($EXPECT($L85, fail, 'JSMultiLineComment "*/"')), $EXPECT($R21, fail, "JSMultiLineComment /./"))), $EXPECT($L85, fail, 'JSMultiLineComment "*/"'))), function($skip, $loc, $0, $1) {
3190
3251
  return { $loc, token: $1 };
3191
3252
  });
3192
3253
  function JSMultiLineComment(state) {
@@ -3198,9 +3259,7 @@ var Civet = (() => {
3198
3259
  return JSMultiLineComment$0(state);
3199
3260
  }
3200
3261
  }
3201
- var CoffeeSingleLineComment$0 = $TR($EXPECT($R21, fail, "CoffeeSingleLineComment /#([^\\r\\n]*)/"), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7, $8, $9) {
3202
- if (!module.coffeeCompat)
3203
- return $skip;
3262
+ var CoffeeSingleLineComment$0 = $TR($EXPECT($R22, fail, "CoffeeSingleLineComment /#([^\\r\\n]*)/"), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7, $8, $9) {
3204
3263
  return { $loc, token: `//${$1}` };
3205
3264
  });
3206
3265
  function CoffeeSingleLineComment(state) {
@@ -3212,7 +3271,7 @@ var Civet = (() => {
3212
3271
  return CoffeeSingleLineComment$0(state);
3213
3272
  }
3214
3273
  }
3215
- var CoffeeMultiLineComment$0 = $TS($S($EXPECT($L86, fail, 'CoffeeMultiLineComment "###"'), $TEXT($Q($S($N($C($EXPECT($L86, fail, 'CoffeeMultiLineComment "###"'), $EXPECT($L85, fail, 'CoffeeMultiLineComment "*/"'))), $EXPECT($R20, fail, "CoffeeMultiLineComment /./")))), $EXPECT($L86, fail, 'CoffeeMultiLineComment "###"')), function($skip, $loc, $0, $1, $2, $3) {
3274
+ var CoffeeMultiLineComment$0 = $TS($S($EXPECT($L86, fail, 'CoffeeMultiLineComment "###"'), $TEXT($Q($S($N($C($EXPECT($L86, fail, 'CoffeeMultiLineComment "###"'), $EXPECT($L85, fail, 'CoffeeMultiLineComment "*/"'))), $EXPECT($R21, fail, "CoffeeMultiLineComment /./")))), $EXPECT($L86, fail, 'CoffeeMultiLineComment "###"')), function($skip, $loc, $0, $1, $2, $3) {
3216
3275
  return { $loc, token: `/*${$2}*/` };
3217
3276
  });
3218
3277
  function CoffeeMultiLineComment(state) {
@@ -3224,7 +3283,7 @@ var Civet = (() => {
3224
3283
  return CoffeeMultiLineComment$0(state);
3225
3284
  }
3226
3285
  }
3227
- var InlineComment$0 = $TV($TEXT($S($EXPECT($L84, fail, 'InlineComment "/*"'), $TEXT($Q($S($N($EXPECT($L85, fail, 'InlineComment "*/"')), $EXPECT($R22, fail, "InlineComment /[^\\r\\n]/")))), $EXPECT($L85, fail, 'InlineComment "*/"'))), function($skip, $loc, $0, $1) {
3286
+ var InlineComment$0 = $TV($TEXT($S($EXPECT($L84, fail, 'InlineComment "/*"'), $TEXT($Q($S($N($EXPECT($L85, fail, 'InlineComment "*/"')), $EXPECT($R23, fail, "InlineComment /[^\\r\\n]/")))), $EXPECT($L85, fail, 'InlineComment "*/"'))), function($skip, $loc, $0, $1) {
3228
3287
  return { $loc, token: $1 };
3229
3288
  });
3230
3289
  function InlineComment(state) {
@@ -3266,7 +3325,7 @@ var Civet = (() => {
3266
3325
  return _$0(state);
3267
3326
  }
3268
3327
  }
3269
- var NonNewlineWhitespace$0 = $TR($EXPECT($R23, fail, "NonNewlineWhitespace /[ \\t]+/"), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7, $8, $9) {
3328
+ var NonNewlineWhitespace$0 = $TR($EXPECT($R24, fail, "NonNewlineWhitespace /[ \\t]+/"), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7, $8, $9) {
3270
3329
  return { $loc, token: $0 };
3271
3330
  });
3272
3331
  function NonNewlineWhitespace(state) {
@@ -3288,7 +3347,7 @@ var Civet = (() => {
3288
3347
  return __$0(state);
3289
3348
  }
3290
3349
  }
3291
- var Whitespace$0 = $TR($EXPECT($R24, fail, "Whitespace /[\\s]+/"), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7, $8, $9) {
3350
+ var Whitespace$0 = $TR($EXPECT($R25, fail, "Whitespace /[\\s]+/"), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7, $8, $9) {
3292
3351
  return { $loc, token: $0 };
3293
3352
  });
3294
3353
  function Whitespace(state) {
@@ -3311,7 +3370,7 @@ var Civet = (() => {
3311
3370
  return StatementDelimiter$0(state) || StatementDelimiter$1(state);
3312
3371
  }
3313
3372
  }
3314
- var NonIdContinue$0 = $R$0($EXPECT($R25, fail, "NonIdContinue /(?!\\p{ID_Continue})/"));
3373
+ var NonIdContinue$0 = $R$0($EXPECT($R26, fail, "NonIdContinue /(?!\\p{ID_Continue})/"));
3315
3374
  function NonIdContinue(state) {
3316
3375
  if (state.verbose)
3317
3376
  console.log("ENTER:", "NonIdContinue");
@@ -3609,7 +3668,7 @@ var Civet = (() => {
3609
3668
  return If$0(state);
3610
3669
  }
3611
3670
  }
3612
- var Import$0 = $TS($S($EXPECT($L11, fail, 'Import "import"'), $Y($EXPECT($R26, fail, "Import /\\s/"))), function($skip, $loc, $0, $1, $2) {
3671
+ var Import$0 = $TS($S($EXPECT($L11, fail, 'Import "import"'), $Y($EXPECT($R27, fail, "Import /\\s/"))), function($skip, $loc, $0, $1, $2) {
3613
3672
  return { $loc, token: $1 };
3614
3673
  });
3615
3674
  function Import(state) {
@@ -3986,7 +4045,7 @@ var Civet = (() => {
3986
4045
  return JSXElementName$0(state);
3987
4046
  }
3988
4047
  }
3989
- var JSXIdentifierName$0 = $R$0($EXPECT($R27, fail, "JSXIdentifierName /(?:\\p{ID_Start}|[_$])(?:\\p{ID_Continue}|[\\u200C\\u200D$-])*/"));
4048
+ var JSXIdentifierName$0 = $R$0($EXPECT($R28, fail, "JSXIdentifierName /(?:\\p{ID_Start}|[_$])(?:\\p{ID_Continue}|[\\u200C\\u200D$-])*/"));
3990
4049
  function JSXIdentifierName(state) {
3991
4050
  if (state.verbose)
3992
4051
  console.log("ENTER:", "JSXIdentifierName");
@@ -4035,8 +4094,8 @@ var Civet = (() => {
4035
4094
  return JSXAttributeInitializer$0(state);
4036
4095
  }
4037
4096
  }
4038
- var JSXAttributeValue$0 = $R$0($EXPECT($R28, fail, 'JSXAttributeValue /"[^"]*"/'));
4039
- var JSXAttributeValue$1 = $R$0($EXPECT($R29, fail, "JSXAttributeValue /'[^']*'/"));
4097
+ var JSXAttributeValue$0 = $R$0($EXPECT($R29, fail, 'JSXAttributeValue /"[^"]*"/'));
4098
+ var JSXAttributeValue$1 = $R$0($EXPECT($R30, fail, "JSXAttributeValue /'[^']*'/"));
4040
4099
  var JSXAttributeValue$2 = $S(OpenBrace, __, AssignmentExpression, __, CloseBrace);
4041
4100
  var JSXAttributeValue$3 = JSXElement;
4042
4101
  var JSXAttributeValue$4 = JSXFragment;
@@ -4068,7 +4127,7 @@ var Civet = (() => {
4068
4127
  return JSXChild$0(state) || JSXChild$1(state) || JSXChild$2(state) || JSXChild$3(state);
4069
4128
  }
4070
4129
  }
4071
- var JSXText$0 = $R$0($EXPECT($R30, fail, "JSXText /[^{}<>]+/"));
4130
+ var JSXText$0 = $R$0($EXPECT($R31, fail, "JSXText /[^{}<>]+/"));
4072
4131
  function JSXText(state) {
4073
4132
  if (state.verbose)
4074
4133
  console.log("ENTER:", "JSXText");
@@ -4243,7 +4302,7 @@ var Civet = (() => {
4243
4302
  return NestedTypeDeclaration$0(state);
4244
4303
  }
4245
4304
  }
4246
- var TypeIndexSignature$0 = $S($E($S($R$0($EXPECT($R31, fail, "TypeIndexSignature /[+-]?/")), $EXPECT($L136, fail, 'TypeIndexSignature "readonly"'), __)), OpenBracket, TypeIndex, CloseBracket, $E($S(__, $R$0($EXPECT($R32, fail, "TypeIndexSignature /[+-]/")), QuestionMark)));
4305
+ var TypeIndexSignature$0 = $S($E($S($R$0($EXPECT($R32, fail, "TypeIndexSignature /[+-]?/")), $EXPECT($L136, fail, 'TypeIndexSignature "readonly"'), __)), OpenBracket, TypeIndex, CloseBracket, $E($S(__, $R$0($EXPECT($R33, fail, "TypeIndexSignature /[+-]/")), QuestionMark)));
4247
4306
  function TypeIndexSignature(state) {
4248
4307
  if (state.verbose)
4249
4308
  console.log("ENTER:", "TypeIndexSignature");
@@ -4464,7 +4523,7 @@ var Civet = (() => {
4464
4523
  return TypeParameterDelimiter$0(state) || TypeParameterDelimiter$1(state) || TypeParameterDelimiter$2(state) || TypeParameterDelimiter$3(state);
4465
4524
  }
4466
4525
  }
4467
- var Shebang$0 = $S($R$0($EXPECT($R33, fail, "Shebang /#![^\\r\\n]*/")), EOL);
4526
+ var Shebang$0 = $S($R$0($EXPECT($R34, fail, "Shebang /#![^\\r\\n]*/")), EOL);
4468
4527
  function Shebang(state) {
4469
4528
  if (state.verbose)
4470
4529
  console.log("ENTER:", "Shebang");
@@ -4474,7 +4533,7 @@ var Civet = (() => {
4474
4533
  return Shebang$0(state);
4475
4534
  }
4476
4535
  }
4477
- var DirectivePrologue$0 = $Q($S($R$0($EXPECT($R34, fail, "DirectivePrologue /[\\t ]*/")), StringLiteral, $TEXT(StatementDelimiter), EOS));
4536
+ var DirectivePrologue$0 = $Q($S($R$0($EXPECT($R35, fail, "DirectivePrologue /[\\t ]*/")), StringLiteral, $TEXT(StatementDelimiter), EOS));
4478
4537
  function DirectivePrologue(state) {
4479
4538
  if (state.verbose)
4480
4539
  console.log("ENTER:", "DirectivePrologue");
@@ -4494,7 +4553,7 @@ var Civet = (() => {
4494
4553
  return EOS$0(state);
4495
4554
  }
4496
4555
  }
4497
- var EOL$0 = $R$0($EXPECT($R35, fail, "EOL /\\r\\n|\\n|\\r|$/"));
4556
+ var EOL$0 = $R$0($EXPECT($R36, fail, "EOL /\\r\\n|\\n|\\r|$/"));
4498
4557
  function EOL(state) {
4499
4558
  if (state.verbose)
4500
4559
  console.log("ENTER:", "EOL");
@@ -4504,7 +4563,7 @@ var Civet = (() => {
4504
4563
  return EOL$0(state);
4505
4564
  }
4506
4565
  }
4507
- var EOF$0 = $R$0($EXPECT($R36, fail, "EOF /$/"));
4566
+ var EOF$0 = $R$0($EXPECT($R37, fail, "EOF /$/"));
4508
4567
  function EOF(state) {
4509
4568
  if (state.verbose)
4510
4569
  console.log("ENTER:", "EOF");
@@ -4658,11 +4717,23 @@ var Civet = (() => {
4658
4717
  return InsertBreak$0(state);
4659
4718
  }
4660
4719
  }
4661
- var Init$0 = $TS($S($E(Shebang), DirectivePrologue, $EXPECT($L1, fail, 'Init ""')), function($skip, $loc, $0, $1, $2, $3) {
4662
- var directives = $2;
4720
+ var Reset$0 = $TV($EXPECT($L1, fail, 'Reset ""'), function($skip, $loc, $0, $1) {
4663
4721
  module.currentIndent = 0;
4664
4722
  module.indentLevels = [0];
4665
4723
  module.verbose = false;
4724
+ module.coffeeCompat = false;
4725
+ });
4726
+ function Reset(state) {
4727
+ if (state.verbose)
4728
+ console.log("ENTER:", "Reset");
4729
+ if (state.tokenize) {
4730
+ return $TOKEN("Reset", state, Reset$0(state));
4731
+ } else {
4732
+ return Reset$0(state);
4733
+ }
4734
+ }
4735
+ var Init$0 = $TS($S($E(Shebang), DirectivePrologue, $EXPECT($L1, fail, 'Init ""')), function($skip, $loc, $0, $1, $2, $3) {
4736
+ var directives = $2;
4666
4737
  if (directives) {
4667
4738
  const compatRe = /use coffee-compat/;
4668
4739
  module.coffeeCompat = directives.some((d) => d[1].token?.match(compatRe));
@@ -4730,7 +4801,7 @@ var Civet = (() => {
4730
4801
  if (trim) {
4731
4802
  str = str.replace(/^(\r?\n|\n)/, "").replace(/(\r?\n|\n)[ \t]*$/, "");
4732
4803
  }
4733
- str = str.replace(/(`|\$)/g, "\\$1");
4804
+ str = str.replace(/(`|\$\{)/g, "\\$1");
4734
4805
  return {
4735
4806
  $loc: $loc2,
4736
4807
  token: str
package/dist/main.js CHANGED
@@ -585,6 +585,9 @@ var require_parser = __commonJS({
585
585
  TripleDoubleStringCharacters,
586
586
  TripleSingleStringCharacters,
587
587
  CoffeeStringSubstitution,
588
+ CoffeeCompat,
589
+ CoffeeCompatDoubleQuotedString,
590
+ CoffeeCompatDoubleQuotedStringCharacters,
588
591
  RegularExpressionLiteral,
589
592
  RegularExpressionBody,
590
593
  RegExpCharacter,
@@ -727,6 +730,7 @@ var require_parser = __commonJS({
727
730
  InsertSpace,
728
731
  InsertDot,
729
732
  InsertBreak,
733
+ Reset,
730
734
  Init,
731
735
  Indent,
732
736
  TrackIndent,
@@ -892,31 +896,32 @@ var require_parser = __commonJS({
892
896
  var $R10 = $R(new RegExp("(?:\\\\.|[^'])*", "suy"));
893
897
  var $R11 = $R(new RegExp('(?:"(?!"")|#(?!\\{)|\\\\.|[^#"])+', "suy"));
894
898
  var $R12 = $R(new RegExp("(?:'(?!'')|\\\\.|[^'])*", "suy"));
895
- var $R13 = $R(new RegExp("[*\\/\\r\\n]", "suy"));
896
- var $R14 = $R(new RegExp("(?:\\\\.|[^\\/\\r\\n])+", "suy"));
897
- var $R15 = $R(new RegExp("(?:\\p{ID_Continue}|[\\u200C\\u200D$])*", "suy"));
898
- var $R16 = $R(new RegExp("(?:\\$(?!\\{)|\\\\.|[^$`])+", "suy"));
899
- var $R17 = $R(new RegExp("(?:\\$(?!\\{)|`(?!``)|\\\\.|[^$`])+", "suy"));
900
- var $R18 = $R(new RegExp("(?:and|as|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|false|finally|for|function|if|import|in|instanceof|interface|is|new|null|or|return|static|super|switch|this|throw|true|try|typeof|unless|var|void|while|with|yield)(?!\\p{ID_Continue})", "suy"));
901
- var $R19 = $R(new RegExp("\\/\\/[^\\r\\n]*", "suy"));
902
- var $R20 = $R(new RegExp(".", "suy"));
903
- var $R21 = $R(new RegExp("#([^\\r\\n]*)", "suy"));
904
- var $R22 = $R(new RegExp("[^\\r\\n]", "suy"));
905
- var $R23 = $R(new RegExp("[ \\t]+", "suy"));
906
- var $R24 = $R(new RegExp("[\\s]+", "suy"));
907
- var $R25 = $R(new RegExp("(?!\\p{ID_Continue})", "suy"));
908
- var $R26 = $R(new RegExp("\\s", "suy"));
909
- var $R27 = $R(new RegExp("(?:\\p{ID_Start}|[_$])(?:\\p{ID_Continue}|[\\u200C\\u200D$-])*", "suy"));
910
- var $R28 = $R(new RegExp('"[^"]*"', "suy"));
911
- var $R29 = $R(new RegExp("'[^']*'", "suy"));
912
- var $R30 = $R(new RegExp("[^{}<>]+", "suy"));
913
- var $R31 = $R(new RegExp("[+-]?", "suy"));
914
- var $R32 = $R(new RegExp("[+-]", "suy"));
915
- var $R33 = $R(new RegExp("#![^\\r\\n]*", "suy"));
916
- var $R34 = $R(new RegExp("[\\t ]*", "suy"));
917
- var $R35 = $R(new RegExp("\\r\\n|\\n|\\r|$", "suy"));
918
- var $R36 = $R(new RegExp("$", "suy"));
919
- var Program$0 = $S(Init, __, $Q(TopLevelStatement), __);
899
+ var $R13 = $R(new RegExp('(?:\\\\.|#(?!\\{)|[^"#])+', "suy"));
900
+ var $R14 = $R(new RegExp("[*\\/\\r\\n]", "suy"));
901
+ var $R15 = $R(new RegExp("(?:\\\\.|[^\\/\\r\\n])+", "suy"));
902
+ var $R16 = $R(new RegExp("(?:\\p{ID_Continue}|[\\u200C\\u200D$])*", "suy"));
903
+ var $R17 = $R(new RegExp("(?:\\$(?!\\{)|\\\\.|[^$`])+", "suy"));
904
+ var $R18 = $R(new RegExp("(?:\\$(?!\\{)|`(?!``)|\\\\.|[^$`])+", "suy"));
905
+ var $R19 = $R(new RegExp("(?:and|as|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|false|finally|for|function|if|import|in|instanceof|interface|is|new|null|or|return|static|super|switch|this|throw|true|try|typeof|unless|var|void|while|with|yield)(?!\\p{ID_Continue})", "suy"));
906
+ var $R20 = $R(new RegExp("\\/\\/[^\\r\\n]*", "suy"));
907
+ var $R21 = $R(new RegExp(".", "suy"));
908
+ var $R22 = $R(new RegExp("#([^\\r\\n]*)", "suy"));
909
+ var $R23 = $R(new RegExp("[^\\r\\n]", "suy"));
910
+ var $R24 = $R(new RegExp("[ \\t]+", "suy"));
911
+ var $R25 = $R(new RegExp("[\\s]+", "suy"));
912
+ var $R26 = $R(new RegExp("(?!\\p{ID_Continue})", "suy"));
913
+ var $R27 = $R(new RegExp("\\s", "suy"));
914
+ var $R28 = $R(new RegExp("(?:\\p{ID_Start}|[_$])(?:\\p{ID_Continue}|[\\u200C\\u200D$-])*", "suy"));
915
+ var $R29 = $R(new RegExp('"[^"]*"', "suy"));
916
+ var $R30 = $R(new RegExp("'[^']*'", "suy"));
917
+ var $R31 = $R(new RegExp("[^{}<>]+", "suy"));
918
+ var $R32 = $R(new RegExp("[+-]?", "suy"));
919
+ var $R33 = $R(new RegExp("[+-]", "suy"));
920
+ var $R34 = $R(new RegExp("#![^\\r\\n]*", "suy"));
921
+ var $R35 = $R(new RegExp("[\\t ]*", "suy"));
922
+ var $R36 = $R(new RegExp("\\r\\n|\\n|\\r|$", "suy"));
923
+ var $R37 = $R(new RegExp("$", "suy"));
924
+ var Program$0 = $S(Reset, Init, __, $Q(TopLevelStatement), __);
920
925
  function Program(state) {
921
926
  if (state.verbose)
922
927
  console.log("ENTER:", "Program");
@@ -2972,12 +2977,13 @@ var require_parser = __commonJS({
2972
2977
  var e = $3;
2973
2978
  return [s, module2.dedentBlockString(str), e];
2974
2979
  });
2975
- var StringLiteral$2 = BasicStringLiteral;
2980
+ var StringLiteral$2 = CoffeeCompatDoubleQuotedString;
2981
+ var StringLiteral$3 = BasicStringLiteral;
2976
2982
  function StringLiteral(state) {
2977
2983
  if (state.tokenize) {
2978
- return $TOKEN("StringLiteral", state, StringLiteral$0(state) || StringLiteral$1(state) || StringLiteral$2(state));
2984
+ return $TOKEN("StringLiteral", state, StringLiteral$0(state) || StringLiteral$1(state) || StringLiteral$2(state) || StringLiteral$3(state));
2979
2985
  } else {
2980
- return StringLiteral$0(state) || StringLiteral$1(state) || StringLiteral$2(state);
2986
+ return StringLiteral$0(state) || StringLiteral$1(state) || StringLiteral$2(state) || StringLiteral$3(state);
2981
2987
  }
2982
2988
  }
2983
2989
  var BasicStringLiteral$0 = $TS($S(DoubleQuote, DoubleStringCharacters, DoubleQuote), function($skip, $loc, $0, $1, $2, $3) {
@@ -3059,6 +3065,61 @@ var require_parser = __commonJS({
3059
3065
  return CoffeeStringSubstitution$0(state);
3060
3066
  }
3061
3067
  }
3068
+ var CoffeeCompat$0 = $TV($EXPECT($L1, fail, 'CoffeeCompat ""'), function($skip, $loc, $0, $1) {
3069
+ if (module2.coffeeCompat)
3070
+ return;
3071
+ return $skip;
3072
+ });
3073
+ function CoffeeCompat(state) {
3074
+ if (state.verbose)
3075
+ console.log("ENTER:", "CoffeeCompat");
3076
+ if (state.tokenize) {
3077
+ return $TOKEN("CoffeeCompat", state, CoffeeCompat$0(state));
3078
+ } else {
3079
+ return CoffeeCompat$0(state);
3080
+ }
3081
+ }
3082
+ var CoffeeCompatDoubleQuotedString$0 = $TS($S(CoffeeCompat, DoubleQuote, $Q($C(CoffeeCompatDoubleQuotedStringCharacters, CoffeeStringSubstitution)), DoubleQuote), function($skip, $loc, $0, $1, $2, $3, $4) {
3083
+ var s = $2;
3084
+ var parts = $3;
3085
+ var e = $4;
3086
+ const noInterpolations = parts.length === 1 && parts[0].token != null;
3087
+ if (noInterpolations) {
3088
+ return {
3089
+ token: `"${module2.modifyString(parts[0].token)}"`,
3090
+ $loc
3091
+ };
3092
+ }
3093
+ parts.forEach((part) => {
3094
+ if (part.token) {
3095
+ const str = part.token.replace(/(`|\$\{)/g, "\\$1");
3096
+ part.token = module2.modifyString(str);
3097
+ }
3098
+ });
3099
+ s.token = e.token = "`";
3100
+ return [s, parts, e];
3101
+ });
3102
+ function CoffeeCompatDoubleQuotedString(state) {
3103
+ if (state.verbose)
3104
+ console.log("ENTER:", "CoffeeCompatDoubleQuotedString");
3105
+ if (state.tokenize) {
3106
+ return $TOKEN("CoffeeCompatDoubleQuotedString", state, CoffeeCompatDoubleQuotedString$0(state));
3107
+ } else {
3108
+ return CoffeeCompatDoubleQuotedString$0(state);
3109
+ }
3110
+ }
3111
+ var CoffeeCompatDoubleQuotedStringCharacters$0 = $TR($EXPECT($R13, fail, 'CoffeeCompatDoubleQuotedStringCharacters /(?:\\\\.|#(?!\\{)|[^"#])+/'), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7, $8, $9) {
3112
+ return { $loc, token: $0 };
3113
+ });
3114
+ function CoffeeCompatDoubleQuotedStringCharacters(state) {
3115
+ if (state.verbose)
3116
+ console.log("ENTER:", "CoffeeCompatDoubleQuotedStringCharacters");
3117
+ if (state.tokenize) {
3118
+ return $TOKEN("CoffeeCompatDoubleQuotedStringCharacters", state, CoffeeCompatDoubleQuotedStringCharacters$0(state));
3119
+ } else {
3120
+ return CoffeeCompatDoubleQuotedStringCharacters$0(state);
3121
+ }
3122
+ }
3062
3123
  var RegularExpressionLiteral$0 = $TV($TEXT($S($EXPECT($L44, fail, 'RegularExpressionLiteral "/"'), RegularExpressionBody, $EXPECT($L44, fail, 'RegularExpressionLiteral "/"'), RegularExpressionFlags)), function($skip, $loc, $0, $1) {
3063
3124
  return { $loc, token: $1 };
3064
3125
  });
@@ -3071,7 +3132,7 @@ var require_parser = __commonJS({
3071
3132
  return RegularExpressionLiteral$0(state);
3072
3133
  }
3073
3134
  }
3074
- var RegularExpressionBody$0 = $S($N($R$0($EXPECT($R13, fail, "RegularExpressionBody /[*\\/\\r\\n]/"))), $Q(RegExpCharacter));
3135
+ var RegularExpressionBody$0 = $S($N($R$0($EXPECT($R14, fail, "RegularExpressionBody /[*\\/\\r\\n]/"))), $Q(RegExpCharacter));
3075
3136
  function RegularExpressionBody(state) {
3076
3137
  if (state.verbose)
3077
3138
  console.log("ENTER:", "RegularExpressionBody");
@@ -3081,7 +3142,7 @@ var require_parser = __commonJS({
3081
3142
  return RegularExpressionBody$0(state);
3082
3143
  }
3083
3144
  }
3084
- var RegExpCharacter$0 = $R$0($EXPECT($R14, fail, "RegExpCharacter /(?:\\\\.|[^\\/\\r\\n])+/"));
3145
+ var RegExpCharacter$0 = $R$0($EXPECT($R15, fail, "RegExpCharacter /(?:\\\\.|[^\\/\\r\\n])+/"));
3085
3146
  function RegExpCharacter(state) {
3086
3147
  if (state.verbose)
3087
3148
  console.log("ENTER:", "RegExpCharacter");
@@ -3091,7 +3152,7 @@ var require_parser = __commonJS({
3091
3152
  return RegExpCharacter$0(state);
3092
3153
  }
3093
3154
  }
3094
- var RegularExpressionFlags$0 = $R$0($EXPECT($R15, fail, "RegularExpressionFlags /(?:\\p{ID_Continue}|[\\u200C\\u200D$])*/"));
3155
+ var RegularExpressionFlags$0 = $R$0($EXPECT($R16, fail, "RegularExpressionFlags /(?:\\p{ID_Continue}|[\\u200C\\u200D$])*/"));
3095
3156
  function RegularExpressionFlags(state) {
3096
3157
  if (state.verbose)
3097
3158
  console.log("ENTER:", "RegularExpressionFlags");
@@ -3122,7 +3183,7 @@ var require_parser = __commonJS({
3122
3183
  return TemplateSubstitution$0(state);
3123
3184
  }
3124
3185
  }
3125
- var TemplateCharacters$0 = $TR($EXPECT($R16, fail, "TemplateCharacters /(?:\\$(?!\\{)|\\\\.|[^$`])+/"), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7, $8, $9) {
3186
+ var TemplateCharacters$0 = $TR($EXPECT($R17, fail, "TemplateCharacters /(?:\\$(?!\\{)|\\\\.|[^$`])+/"), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7, $8, $9) {
3126
3187
  return { $loc, token: $0 };
3127
3188
  });
3128
3189
  function TemplateCharacters(state) {
@@ -3134,7 +3195,7 @@ var require_parser = __commonJS({
3134
3195
  return TemplateCharacters$0(state);
3135
3196
  }
3136
3197
  }
3137
- var TemplateBlockCharacters$0 = $TR($EXPECT($R17, fail, "TemplateBlockCharacters /(?:\\$(?!\\{)|`(?!``)|\\\\.|[^$`])+/"), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7, $8, $9) {
3198
+ var TemplateBlockCharacters$0 = $TR($EXPECT($R18, fail, "TemplateBlockCharacters /(?:\\$(?!\\{)|`(?!``)|\\\\.|[^$`])+/"), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7, $8, $9) {
3138
3199
  return { $loc, token: $0 };
3139
3200
  });
3140
3201
  function TemplateBlockCharacters(state) {
@@ -3146,7 +3207,7 @@ var require_parser = __commonJS({
3146
3207
  return TemplateBlockCharacters$0(state);
3147
3208
  }
3148
3209
  }
3149
- var ReservedWord$0 = $R$0($EXPECT($R18, fail, "ReservedWord /(?:and|as|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|false|finally|for|function|if|import|in|instanceof|interface|is|new|null|or|return|static|super|switch|this|throw|true|try|typeof|unless|var|void|while|with|yield)(?!\\p{ID_Continue})/"));
3210
+ var ReservedWord$0 = $R$0($EXPECT($R19, fail, "ReservedWord /(?:and|as|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|false|finally|for|function|if|import|in|instanceof|interface|is|new|null|or|return|static|super|switch|this|throw|true|try|typeof|unless|var|void|while|with|yield)(?!\\p{ID_Continue})/"));
3150
3211
  function ReservedWord(state) {
3151
3212
  if (state.verbose)
3152
3213
  console.log("ENTER:", "ReservedWord");
@@ -3165,10 +3226,10 @@ var require_parser = __commonJS({
3165
3226
  return Comment$0(state) || Comment$1(state);
3166
3227
  }
3167
3228
  }
3168
- var SingleLineComment$0 = $TR($EXPECT($R19, fail, "SingleLineComment /\\/\\/[^\\r\\n]*/"), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7, $8, $9) {
3229
+ var SingleLineComment$0 = $TR($EXPECT($R20, fail, "SingleLineComment /\\/\\/[^\\r\\n]*/"), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7, $8, $9) {
3169
3230
  return { $loc, token: $0 };
3170
3231
  });
3171
- var SingleLineComment$1 = CoffeeSingleLineComment;
3232
+ var SingleLineComment$1 = $S(CoffeeCompat, CoffeeSingleLineComment);
3172
3233
  function SingleLineComment(state) {
3173
3234
  if (state.tokenize) {
3174
3235
  return $TOKEN("SingleLineComment", state, SingleLineComment$0(state) || SingleLineComment$1(state));
@@ -3185,7 +3246,7 @@ var require_parser = __commonJS({
3185
3246
  return MultiLineComment$0(state) || MultiLineComment$1(state);
3186
3247
  }
3187
3248
  }
3188
- var JSMultiLineComment$0 = $TV($TEXT($S($EXPECT($L84, fail, 'JSMultiLineComment "/*"'), $Q($S($N($EXPECT($L85, fail, 'JSMultiLineComment "*/"')), $EXPECT($R20, fail, "JSMultiLineComment /./"))), $EXPECT($L85, fail, 'JSMultiLineComment "*/"'))), function($skip, $loc, $0, $1) {
3249
+ var JSMultiLineComment$0 = $TV($TEXT($S($EXPECT($L84, fail, 'JSMultiLineComment "/*"'), $Q($S($N($EXPECT($L85, fail, 'JSMultiLineComment "*/"')), $EXPECT($R21, fail, "JSMultiLineComment /./"))), $EXPECT($L85, fail, 'JSMultiLineComment "*/"'))), function($skip, $loc, $0, $1) {
3189
3250
  return { $loc, token: $1 };
3190
3251
  });
3191
3252
  function JSMultiLineComment(state) {
@@ -3197,9 +3258,7 @@ var require_parser = __commonJS({
3197
3258
  return JSMultiLineComment$0(state);
3198
3259
  }
3199
3260
  }
3200
- var CoffeeSingleLineComment$0 = $TR($EXPECT($R21, fail, "CoffeeSingleLineComment /#([^\\r\\n]*)/"), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7, $8, $9) {
3201
- if (!module2.coffeeCompat)
3202
- return $skip;
3261
+ var CoffeeSingleLineComment$0 = $TR($EXPECT($R22, fail, "CoffeeSingleLineComment /#([^\\r\\n]*)/"), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7, $8, $9) {
3203
3262
  return { $loc, token: `//${$1}` };
3204
3263
  });
3205
3264
  function CoffeeSingleLineComment(state) {
@@ -3211,7 +3270,7 @@ var require_parser = __commonJS({
3211
3270
  return CoffeeSingleLineComment$0(state);
3212
3271
  }
3213
3272
  }
3214
- var CoffeeMultiLineComment$0 = $TS($S($EXPECT($L86, fail, 'CoffeeMultiLineComment "###"'), $TEXT($Q($S($N($C($EXPECT($L86, fail, 'CoffeeMultiLineComment "###"'), $EXPECT($L85, fail, 'CoffeeMultiLineComment "*/"'))), $EXPECT($R20, fail, "CoffeeMultiLineComment /./")))), $EXPECT($L86, fail, 'CoffeeMultiLineComment "###"')), function($skip, $loc, $0, $1, $2, $3) {
3273
+ var CoffeeMultiLineComment$0 = $TS($S($EXPECT($L86, fail, 'CoffeeMultiLineComment "###"'), $TEXT($Q($S($N($C($EXPECT($L86, fail, 'CoffeeMultiLineComment "###"'), $EXPECT($L85, fail, 'CoffeeMultiLineComment "*/"'))), $EXPECT($R21, fail, "CoffeeMultiLineComment /./")))), $EXPECT($L86, fail, 'CoffeeMultiLineComment "###"')), function($skip, $loc, $0, $1, $2, $3) {
3215
3274
  return { $loc, token: `/*${$2}*/` };
3216
3275
  });
3217
3276
  function CoffeeMultiLineComment(state) {
@@ -3223,7 +3282,7 @@ var require_parser = __commonJS({
3223
3282
  return CoffeeMultiLineComment$0(state);
3224
3283
  }
3225
3284
  }
3226
- var InlineComment$0 = $TV($TEXT($S($EXPECT($L84, fail, 'InlineComment "/*"'), $TEXT($Q($S($N($EXPECT($L85, fail, 'InlineComment "*/"')), $EXPECT($R22, fail, "InlineComment /[^\\r\\n]/")))), $EXPECT($L85, fail, 'InlineComment "*/"'))), function($skip, $loc, $0, $1) {
3285
+ var InlineComment$0 = $TV($TEXT($S($EXPECT($L84, fail, 'InlineComment "/*"'), $TEXT($Q($S($N($EXPECT($L85, fail, 'InlineComment "*/"')), $EXPECT($R23, fail, "InlineComment /[^\\r\\n]/")))), $EXPECT($L85, fail, 'InlineComment "*/"'))), function($skip, $loc, $0, $1) {
3227
3286
  return { $loc, token: $1 };
3228
3287
  });
3229
3288
  function InlineComment(state) {
@@ -3265,7 +3324,7 @@ var require_parser = __commonJS({
3265
3324
  return _$0(state);
3266
3325
  }
3267
3326
  }
3268
- var NonNewlineWhitespace$0 = $TR($EXPECT($R23, fail, "NonNewlineWhitespace /[ \\t]+/"), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7, $8, $9) {
3327
+ var NonNewlineWhitespace$0 = $TR($EXPECT($R24, fail, "NonNewlineWhitespace /[ \\t]+/"), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7, $8, $9) {
3269
3328
  return { $loc, token: $0 };
3270
3329
  });
3271
3330
  function NonNewlineWhitespace(state) {
@@ -3287,7 +3346,7 @@ var require_parser = __commonJS({
3287
3346
  return __$0(state);
3288
3347
  }
3289
3348
  }
3290
- var Whitespace$0 = $TR($EXPECT($R24, fail, "Whitespace /[\\s]+/"), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7, $8, $9) {
3349
+ var Whitespace$0 = $TR($EXPECT($R25, fail, "Whitespace /[\\s]+/"), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7, $8, $9) {
3291
3350
  return { $loc, token: $0 };
3292
3351
  });
3293
3352
  function Whitespace(state) {
@@ -3310,7 +3369,7 @@ var require_parser = __commonJS({
3310
3369
  return StatementDelimiter$0(state) || StatementDelimiter$1(state);
3311
3370
  }
3312
3371
  }
3313
- var NonIdContinue$0 = $R$0($EXPECT($R25, fail, "NonIdContinue /(?!\\p{ID_Continue})/"));
3372
+ var NonIdContinue$0 = $R$0($EXPECT($R26, fail, "NonIdContinue /(?!\\p{ID_Continue})/"));
3314
3373
  function NonIdContinue(state) {
3315
3374
  if (state.verbose)
3316
3375
  console.log("ENTER:", "NonIdContinue");
@@ -3608,7 +3667,7 @@ var require_parser = __commonJS({
3608
3667
  return If$0(state);
3609
3668
  }
3610
3669
  }
3611
- var Import$0 = $TS($S($EXPECT($L11, fail, 'Import "import"'), $Y($EXPECT($R26, fail, "Import /\\s/"))), function($skip, $loc, $0, $1, $2) {
3670
+ var Import$0 = $TS($S($EXPECT($L11, fail, 'Import "import"'), $Y($EXPECT($R27, fail, "Import /\\s/"))), function($skip, $loc, $0, $1, $2) {
3612
3671
  return { $loc, token: $1 };
3613
3672
  });
3614
3673
  function Import(state) {
@@ -3985,7 +4044,7 @@ var require_parser = __commonJS({
3985
4044
  return JSXElementName$0(state);
3986
4045
  }
3987
4046
  }
3988
- var JSXIdentifierName$0 = $R$0($EXPECT($R27, fail, "JSXIdentifierName /(?:\\p{ID_Start}|[_$])(?:\\p{ID_Continue}|[\\u200C\\u200D$-])*/"));
4047
+ var JSXIdentifierName$0 = $R$0($EXPECT($R28, fail, "JSXIdentifierName /(?:\\p{ID_Start}|[_$])(?:\\p{ID_Continue}|[\\u200C\\u200D$-])*/"));
3989
4048
  function JSXIdentifierName(state) {
3990
4049
  if (state.verbose)
3991
4050
  console.log("ENTER:", "JSXIdentifierName");
@@ -4034,8 +4093,8 @@ var require_parser = __commonJS({
4034
4093
  return JSXAttributeInitializer$0(state);
4035
4094
  }
4036
4095
  }
4037
- var JSXAttributeValue$0 = $R$0($EXPECT($R28, fail, 'JSXAttributeValue /"[^"]*"/'));
4038
- var JSXAttributeValue$1 = $R$0($EXPECT($R29, fail, "JSXAttributeValue /'[^']*'/"));
4096
+ var JSXAttributeValue$0 = $R$0($EXPECT($R29, fail, 'JSXAttributeValue /"[^"]*"/'));
4097
+ var JSXAttributeValue$1 = $R$0($EXPECT($R30, fail, "JSXAttributeValue /'[^']*'/"));
4039
4098
  var JSXAttributeValue$2 = $S(OpenBrace, __, AssignmentExpression, __, CloseBrace);
4040
4099
  var JSXAttributeValue$3 = JSXElement;
4041
4100
  var JSXAttributeValue$4 = JSXFragment;
@@ -4067,7 +4126,7 @@ var require_parser = __commonJS({
4067
4126
  return JSXChild$0(state) || JSXChild$1(state) || JSXChild$2(state) || JSXChild$3(state);
4068
4127
  }
4069
4128
  }
4070
- var JSXText$0 = $R$0($EXPECT($R30, fail, "JSXText /[^{}<>]+/"));
4129
+ var JSXText$0 = $R$0($EXPECT($R31, fail, "JSXText /[^{}<>]+/"));
4071
4130
  function JSXText(state) {
4072
4131
  if (state.verbose)
4073
4132
  console.log("ENTER:", "JSXText");
@@ -4242,7 +4301,7 @@ var require_parser = __commonJS({
4242
4301
  return NestedTypeDeclaration$0(state);
4243
4302
  }
4244
4303
  }
4245
- var TypeIndexSignature$0 = $S($E($S($R$0($EXPECT($R31, fail, "TypeIndexSignature /[+-]?/")), $EXPECT($L136, fail, 'TypeIndexSignature "readonly"'), __)), OpenBracket, TypeIndex, CloseBracket, $E($S(__, $R$0($EXPECT($R32, fail, "TypeIndexSignature /[+-]/")), QuestionMark)));
4304
+ var TypeIndexSignature$0 = $S($E($S($R$0($EXPECT($R32, fail, "TypeIndexSignature /[+-]?/")), $EXPECT($L136, fail, 'TypeIndexSignature "readonly"'), __)), OpenBracket, TypeIndex, CloseBracket, $E($S(__, $R$0($EXPECT($R33, fail, "TypeIndexSignature /[+-]/")), QuestionMark)));
4246
4305
  function TypeIndexSignature(state) {
4247
4306
  if (state.verbose)
4248
4307
  console.log("ENTER:", "TypeIndexSignature");
@@ -4463,7 +4522,7 @@ var require_parser = __commonJS({
4463
4522
  return TypeParameterDelimiter$0(state) || TypeParameterDelimiter$1(state) || TypeParameterDelimiter$2(state) || TypeParameterDelimiter$3(state);
4464
4523
  }
4465
4524
  }
4466
- var Shebang$0 = $S($R$0($EXPECT($R33, fail, "Shebang /#![^\\r\\n]*/")), EOL);
4525
+ var Shebang$0 = $S($R$0($EXPECT($R34, fail, "Shebang /#![^\\r\\n]*/")), EOL);
4467
4526
  function Shebang(state) {
4468
4527
  if (state.verbose)
4469
4528
  console.log("ENTER:", "Shebang");
@@ -4473,7 +4532,7 @@ var require_parser = __commonJS({
4473
4532
  return Shebang$0(state);
4474
4533
  }
4475
4534
  }
4476
- var DirectivePrologue$0 = $Q($S($R$0($EXPECT($R34, fail, "DirectivePrologue /[\\t ]*/")), StringLiteral, $TEXT(StatementDelimiter), EOS));
4535
+ var DirectivePrologue$0 = $Q($S($R$0($EXPECT($R35, fail, "DirectivePrologue /[\\t ]*/")), StringLiteral, $TEXT(StatementDelimiter), EOS));
4477
4536
  function DirectivePrologue(state) {
4478
4537
  if (state.verbose)
4479
4538
  console.log("ENTER:", "DirectivePrologue");
@@ -4493,7 +4552,7 @@ var require_parser = __commonJS({
4493
4552
  return EOS$0(state);
4494
4553
  }
4495
4554
  }
4496
- var EOL$0 = $R$0($EXPECT($R35, fail, "EOL /\\r\\n|\\n|\\r|$/"));
4555
+ var EOL$0 = $R$0($EXPECT($R36, fail, "EOL /\\r\\n|\\n|\\r|$/"));
4497
4556
  function EOL(state) {
4498
4557
  if (state.verbose)
4499
4558
  console.log("ENTER:", "EOL");
@@ -4503,7 +4562,7 @@ var require_parser = __commonJS({
4503
4562
  return EOL$0(state);
4504
4563
  }
4505
4564
  }
4506
- var EOF$0 = $R$0($EXPECT($R36, fail, "EOF /$/"));
4565
+ var EOF$0 = $R$0($EXPECT($R37, fail, "EOF /$/"));
4507
4566
  function EOF(state) {
4508
4567
  if (state.verbose)
4509
4568
  console.log("ENTER:", "EOF");
@@ -4657,11 +4716,23 @@ var require_parser = __commonJS({
4657
4716
  return InsertBreak$0(state);
4658
4717
  }
4659
4718
  }
4660
- var Init$0 = $TS($S($E(Shebang), DirectivePrologue, $EXPECT($L1, fail, 'Init ""')), function($skip, $loc, $0, $1, $2, $3) {
4661
- var directives = $2;
4719
+ var Reset$0 = $TV($EXPECT($L1, fail, 'Reset ""'), function($skip, $loc, $0, $1) {
4662
4720
  module2.currentIndent = 0;
4663
4721
  module2.indentLevels = [0];
4664
4722
  module2.verbose = false;
4723
+ module2.coffeeCompat = false;
4724
+ });
4725
+ function Reset(state) {
4726
+ if (state.verbose)
4727
+ console.log("ENTER:", "Reset");
4728
+ if (state.tokenize) {
4729
+ return $TOKEN("Reset", state, Reset$0(state));
4730
+ } else {
4731
+ return Reset$0(state);
4732
+ }
4733
+ }
4734
+ var Init$0 = $TS($S($E(Shebang), DirectivePrologue, $EXPECT($L1, fail, 'Init ""')), function($skip, $loc, $0, $1, $2, $3) {
4735
+ var directives = $2;
4665
4736
  if (directives) {
4666
4737
  const compatRe = /use coffee-compat/;
4667
4738
  module2.coffeeCompat = directives.some((d) => d[1].token?.match(compatRe));
@@ -4729,7 +4800,7 @@ var require_parser = __commonJS({
4729
4800
  if (trim) {
4730
4801
  str = str.replace(/^(\r?\n|\n)/, "").replace(/(\r?\n|\n)[ \t]*$/, "");
4731
4802
  }
4732
- str = str.replace(/(`|\$)/g, "\\$1");
4803
+ str = str.replace(/(`|\$\{)/g, "\\$1");
4733
4804
  return {
4734
4805
  $loc: $loc2,
4735
4806
  token: str
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@danielx/civet",
3
- "version": "0.4.5",
3
+ "version": "0.4.6",
4
4
  "description": "CoffeeScript style syntax for TypeScript",
5
5
  "main": "dist/main.js",
6
6
  "exports": {