@danielx/civet 0.6.89 → 0.6.91

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/dist/main.js CHANGED
@@ -33,213 +33,596 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
33
33
  ));
34
34
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
35
35
 
36
- // source/parser/util.civet
37
- function addParentPointers(node, parent) {
38
- if (node == null)
39
- return;
40
- if (typeof node !== "object")
41
- return;
42
- if (Array.isArray(node)) {
43
- for (const child of node) {
44
- addParentPointers(child, parent);
45
- }
46
- return;
36
+ // source/parser/op.civet
37
+ function getPrecedence(op) {
38
+ if (typeof op === "string") {
39
+ return precedenceMap.get(op) ?? (() => {
40
+ throw new Error(`Unknown operator: ${op}`);
41
+ })();
42
+ } else if (typeof op.prec === "number") {
43
+ return op.prec;
44
+ } else {
45
+ return precedenceMap.get(op.prec ?? op.token) ?? (op.relational ? precedenceRelational : precedenceCustomDefault);
47
46
  }
48
- node = node;
49
- node.parent = parent;
50
- if (node.children) {
51
- for (const child of node.children) {
52
- addParentPointers(child, node);
47
+ }
48
+ function processBinaryOpExpression($0) {
49
+ return recurse(expandChainedComparisons($0));
50
+ function recurse(expandedOps) {
51
+ let i = 2;
52
+ while (i < expandedOps.length) {
53
+ let op = expandedOps[i];
54
+ if (op.special) {
55
+ let advanceLeft2 = function(allowEqual) {
56
+ while (start >= 4) {
57
+ const prevPrec = getPrecedence(expandedOps[start - 2]);
58
+ if (!(prevPrec > prec || allowEqual && prevPrec === prec)) {
59
+ return prevPrec === prec;
60
+ }
61
+ start -= 4;
62
+ }
63
+ return false;
64
+ }, advanceRight2 = function(allowEqual) {
65
+ while (end + 4 < expandedOps.length) {
66
+ const nextPrec = getPrecedence(expandedOps[end + 2]);
67
+ if (!(nextPrec > prec || allowEqual && nextPrec === prec)) {
68
+ return nextPrec === prec;
69
+ }
70
+ end += 4;
71
+ }
72
+ return false;
73
+ };
74
+ var advanceLeft = advanceLeft2, advanceRight = advanceRight2;
75
+ let start = i - 2, end = i + 2;
76
+ const prec = getPrecedence(op);
77
+ let error;
78
+ switch (op.assoc) {
79
+ case "left":
80
+ case void 0: {
81
+ advanceLeft2(true);
82
+ advanceRight2(false);
83
+ break;
84
+ }
85
+ case "right": {
86
+ advanceLeft2(false);
87
+ advanceRight2(true);
88
+ break;
89
+ }
90
+ case "non": {
91
+ if (advanceLeft2(false) || advanceRight2(false)) {
92
+ error = {
93
+ type: "Error",
94
+ message: `non-associative operator ${op.token} used at same precedence level without parenthesization`
95
+ };
96
+ }
97
+ ;
98
+ break;
99
+ }
100
+ case "arguments": {
101
+ if (advanceLeft2(false)) {
102
+ error = {
103
+ type: "Error",
104
+ message: `arguments operator ${op.token} used at same precedence level as ${expandedOps[start - 2].token} to the left`
105
+ };
106
+ }
107
+ advanceRight2(true);
108
+ break;
109
+ }
110
+ default: {
111
+ throw new Error(`Unsupported associativity: ${op.assoc}`);
112
+ }
113
+ }
114
+ let a = start === i - 2 ? expandedOps[start] : expandedOps.slice(start, i - 1);
115
+ let wsOp = expandedOps[i - 1];
116
+ let wsB = expandedOps[i + 1];
117
+ let b = end === i + 2 ? expandedOps[i + 2] : expandedOps.slice(i + 2, end + 1);
118
+ if (op.assoc === "arguments") {
119
+ let i2 = 2;
120
+ while (i2 < b.length) {
121
+ if (prec === getPrecedence(b[i2])) {
122
+ if (!(b[i2].token === op.token)) {
123
+ error ??= {
124
+ type: "Error",
125
+ message: `arguments operator ${op.token} used at same precedence level as ${b[i2].token} to the right`
126
+ };
127
+ }
128
+ b[i2] = ",";
129
+ }
130
+ i2 += 4;
131
+ }
132
+ } else {
133
+ b = recurse(b);
134
+ }
135
+ if (op.token === "instanceof" && b.type === "Literal" && b.children?.[0]?.type === "StringLiteral") {
136
+ a = ["typeof ", makeLeftHandSideExpression(a)];
137
+ if (op.negated) {
138
+ op = { ...op, token: "!==", negated: false };
139
+ } else {
140
+ op = { ...op, token: "===" };
141
+ }
142
+ }
143
+ if (op.asConst) {
144
+ a = makeAsConst(a);
145
+ b = makeAsConst(b);
146
+ }
147
+ let children;
148
+ if (op.call) {
149
+ wsOp = insertTrimmingSpace(wsOp, "");
150
+ if (op.reversed) {
151
+ wsB = insertTrimmingSpace(wsB, "");
152
+ children = [wsOp, op.call, "(", wsB, b, ", ", a, ")", op.suffix];
153
+ } else {
154
+ children = [wsOp, op.call, "(", a, ",", wsB, b, ")", op.suffix];
155
+ }
156
+ } else if (op.method) {
157
+ wsOp = insertTrimmingSpace(wsOp, "");
158
+ wsB = insertTrimmingSpace(wsB, "");
159
+ if (op.reversed) {
160
+ if (end !== i + 2)
161
+ b = makeLeftHandSideExpression(b);
162
+ b = dotNumericLiteral(b);
163
+ children = [wsB, b, wsOp, ".", op.method, "(", a, ")"];
164
+ } else {
165
+ if (start !== i - 2 || a.type === "NumericLiteral") {
166
+ a = makeLeftHandSideExpression(a);
167
+ }
168
+ a = dotNumericLiteral(a);
169
+ children = [a, wsOp, ".", op.method, "(", wsB, b, ")"];
170
+ }
171
+ } else if (op.token) {
172
+ children = [a, wsOp, op, wsB, b];
173
+ if (op.negated)
174
+ children = ["(", ...children, ")"];
175
+ } else {
176
+ throw new Error("Unknown operator: " + JSON.stringify(op));
177
+ }
178
+ if (op.negated)
179
+ children.unshift("!");
180
+ if (error != null) {
181
+ children.push(error);
182
+ }
183
+ expandedOps.splice(start, end - start + 1, {
184
+ children
185
+ });
186
+ i = start + 2;
187
+ } else {
188
+ i += 4;
189
+ }
53
190
  }
191
+ return expandedOps;
54
192
  }
193
+ ;
194
+ return recurse;
55
195
  }
56
- function clone(node) {
57
- removeParentPointers(node);
58
- return deepCopy(node);
196
+ function dotNumericLiteral(literal) {
197
+ if (literal?.type === "Literal" && /^[+-]?(?:0|[1-9](?:_[0-9]|[0-9])*)$/.test(literal.raw)) {
198
+ literal.children.push(".");
199
+ literal.raw += ".";
200
+ }
201
+ return literal;
59
202
  }
60
- function removeParentPointers(node) {
61
- if (node == null)
62
- return;
63
- if (typeof node !== "object")
64
- return;
65
- if (Array.isArray(node)) {
66
- for (const child of node) {
67
- removeParentPointers(child);
68
- }
69
- return;
203
+ function makeAsConst(node) {
204
+ if (Array.isArray(node) && node.length === 1) {
205
+ node = node[0];
70
206
  }
71
- node.parent = null;
72
- if (node.children) {
73
- for (const child of node.children) {
74
- removeParentPointers(child);
75
- }
207
+ if (node.type === "Literal" && node.raw !== "null" || node.type === "ArrayExpression" || node.type === "ObjectExpression") {
208
+ return { ...node, children: [...node.children, asConst] };
209
+ } else {
210
+ return node;
76
211
  }
77
212
  }
78
- function isEmptyBareBlock(node) {
79
- if (node?.type !== "BlockStatement")
80
- return false;
81
- const { bare, expressions } = node;
82
- return bare && (expressions.length === 0 || expressions.length === 1 && expressions[0][1]?.type === "EmptyStatement");
83
- }
84
- function isFunction(node) {
85
- const { type } = node;
86
- return type === "FunctionExpression" || type === "ArrowFunction" || type === "MethodDefinition" || !!node.async;
87
- }
88
- function isWhitespaceOrEmpty(node) {
89
- if (!node)
90
- return true;
91
- if (node.type === "Ref")
92
- return false;
93
- if (node.token)
94
- return node.token.match(/^\s*$/);
95
- if (node.children)
96
- node = node.children;
97
- if (!node.length)
98
- return true;
99
- if (typeof node === "string")
100
- return node.match(/^\s*$/);
101
- if (Array.isArray(node))
102
- return node.every(isWhitespaceOrEmpty);
103
- return;
104
- }
105
- function isExit(node) {
106
- return [
107
- "ReturnStatement",
108
- "ThrowStatement",
109
- "BreakStatement",
110
- "ContinueStatement"
111
- ].includes(node?.type);
112
- }
113
- function isComma(node) {
114
- if (node?.token === ",") {
115
- return node;
116
- } else if (Array.isArray(node) && node.at(-1)?.token === ",") {
117
- return node.at(-1);
213
+ function isExistence(exp) {
214
+ if (exp?.type === "ParenthesizedExpression" && exp.implicit) {
215
+ exp = exp.expression;
216
+ }
217
+ if (exp?.type === "Existence") {
218
+ return exp;
118
219
  }
119
220
  ;
120
221
  return;
121
222
  }
122
- function insertTrimmingSpace(target, c) {
123
- if (!target) {
124
- return target;
223
+ function isRelationalOp(op) {
224
+ return op.relational || getPrecedence(op) === precedenceRelational;
225
+ }
226
+ function expandChainedComparisons([first, binops]) {
227
+ if (!binops.length) {
228
+ return [first];
125
229
  }
126
- if (Array.isArray(target)) {
127
- if (target.length === 0) {
128
- return c;
230
+ const results = [];
231
+ let start = 0;
232
+ const chains = [];
233
+ var i = 0;
234
+ for (let i3 = 0, len2 = binops.length; i3 < len2; i3++) {
235
+ var i = i3;
236
+ var [, op] = binops[i3];
237
+ if (isRelationalOp(op)) {
238
+ chains.push(i);
239
+ } else if (getPrecedence(op) < precedenceRelational) {
240
+ processChains();
241
+ first = results.pop();
129
242
  }
130
- return target.map((e, i) => {
131
- if (i === 0) {
132
- return insertTrimmingSpace(e, c);
133
- }
134
- return e;
135
- });
136
243
  }
137
- if (target.children) {
138
- return {
139
- ...target,
140
- children: insertTrimmingSpace(target.children, c)
141
- };
244
+ processChains();
245
+ return results;
246
+ function processChains() {
247
+ if (chains.length > 0) {
248
+ first = expandExistence(first);
249
+ for (let i4 = 0, len3 = chains.length; i4 < len3; i4++) {
250
+ const k = i4;
251
+ const index = chains[i4];
252
+ if (k > 0) {
253
+ results.push(" ", "&&", " ");
254
+ }
255
+ const binop = binops[index];
256
+ const exp = binop[3] = expandExistence(binop[3]);
257
+ results.push(first);
258
+ const endIndex = chains[k + 1] ?? i + 1;
259
+ results.push(...binops.slice(start, endIndex).flat());
260
+ first = [exp].concat(binops.slice(index + 1, endIndex));
261
+ start = endIndex;
262
+ }
263
+ } else {
264
+ results.push(first);
265
+ results.push(...binops.slice(start, i + 1).flat());
266
+ start = i + 1;
267
+ }
268
+ chains.length = 0;
142
269
  }
143
- if (target.token) {
144
- return {
145
- ...target,
146
- token: target.token.replace(/^ ?/, c)
147
- };
270
+ function expandExistence(exp) {
271
+ let ref;
272
+ if (ref = isExistence(exp)) {
273
+ const existence = ref;
274
+ results.push(existence, " ", "&&", " ");
275
+ return existence.expression;
276
+ } else {
277
+ return exp;
278
+ }
148
279
  }
149
- return target;
150
- }
151
- function getTrimmingSpace(target) {
152
- if (!target)
153
- return;
154
- if (Array.isArray(target))
155
- return getTrimmingSpace(target[0]);
156
- if (target.children)
157
- return getTrimmingSpace(target.children[0]);
158
- if (target.token)
159
- return target.token.match(/^ ?/)[0];
160
- return;
280
+ ;
161
281
  }
162
- function literalValue(literal) {
163
- let { raw } = literal;
164
- switch (raw) {
165
- case "null":
166
- return null;
167
- case "true":
168
- return true;
169
- case "false":
170
- return false;
171
- }
172
- if (raw.startsWith('"') && raw.endsWith('"') || raw.startsWith("'") && raw.endsWith("'")) {
173
- return raw.slice(1, -1);
282
+ var precedenceOrder, precedenceMap, precedenceStep, precedenceRelational, precedenceCustomDefault, asConst;
283
+ var init_op = __esm({
284
+ "source/parser/op.civet"() {
285
+ "use strict";
286
+ init_util();
287
+ precedenceOrder = [
288
+ ["||", "??"],
289
+ ["^^"],
290
+ ["&&"],
291
+ ["|"],
292
+ ["^"],
293
+ ["&"],
294
+ // NOTE: Equality and inequality merged because of relational chaining
295
+ [
296
+ "==",
297
+ "!=",
298
+ "===",
299
+ "!==",
300
+ "<",
301
+ "<=",
302
+ ">",
303
+ ">=",
304
+ "in",
305
+ "instanceof"
306
+ ],
307
+ // NOTE: Extra in-between level for default custom operators
308
+ ["custom"],
309
+ ["<<", ">>", ">>>"],
310
+ ["+", "-"],
311
+ ["*", "/", "%"],
312
+ ["**"]
313
+ ];
314
+ precedenceMap = /* @__PURE__ */ new Map();
315
+ for (let i1 = 0, len = precedenceOrder.length; i1 < len; i1++) {
316
+ const prec = i1;
317
+ const ops = precedenceOrder[i1];
318
+ for (let i2 = 0, len1 = ops.length; i2 < len1; i2++) {
319
+ const op = ops[i2];
320
+ precedenceMap.set(op, prec);
321
+ }
322
+ }
323
+ precedenceStep = 1 / 64;
324
+ precedenceRelational = precedenceMap.get("==");
325
+ precedenceCustomDefault = precedenceMap.get("custom");
326
+ asConst = {
327
+ ts: true,
328
+ children: [" as const"]
329
+ };
174
330
  }
175
- const numeric = literal.children.find(
176
- (child) => child.type === "NumericLiteral"
177
- );
178
- if (numeric) {
179
- raw = raw.replace(/_/g, "");
180
- const { token } = numeric;
181
- if (token.endsWith("n")) {
182
- return BigInt(raw.slice(0, -1));
183
- } else if (token.match(/[\.eE]/)) {
184
- return parseFloat(raw);
185
- } else if (token.startsWith("0")) {
186
- switch (token.charAt(1).toLowerCase()) {
187
- case "x":
188
- return parseInt(raw.replace(/0[xX]/, ""), 16);
189
- case "b":
190
- return parseInt(raw.replace(/0[bB]/, ""), 2);
191
- case "o":
192
- return parseInt(raw.replace(/0[oO]/, ""), 8);
331
+ });
332
+
333
+ // source/parser/unary.civet
334
+ function processUnaryExpression(pre, exp, post) {
335
+ if (!(pre.length || post))
336
+ return exp;
337
+ if (post?.token === "?") {
338
+ post = {
339
+ $loc: post.$loc,
340
+ token: " != null"
341
+ };
342
+ if (pre.length) {
343
+ const lastPre = pre.at(-1);
344
+ if (lastPre.token === "!") {
345
+ post.token = " == null";
346
+ pre = pre.slice(0, -1);
347
+ } else if (lastPre.length === 2 && lastPre[0].token === "!") {
348
+ post.token = " == null";
349
+ pre = pre.slice(0, -1);
193
350
  }
194
351
  }
195
- return parseInt(raw, 10);
352
+ const existence = {
353
+ type: "Existence",
354
+ expression: exp,
355
+ children: [exp, post],
356
+ parent: void 0
357
+ };
358
+ exp = makeLeftHandSideExpression(existence);
359
+ if (pre.length) {
360
+ return {
361
+ type: "UnaryExpression",
362
+ children: [...pre, exp]
363
+ };
364
+ }
365
+ return exp;
196
366
  }
197
- throw new Error("Unrecognized literal " + JSON.stringify(literal));
198
- }
199
- function startsWith(target, value) {
200
- if (!target)
201
- return;
202
- if (Array.isArray(target)) {
203
- let i = 0;
204
- let l = target.length;
205
- while (i < l) {
206
- const t = target[i];
207
- if (t && (t.length || t.token || t.children)) {
208
- break;
367
+ if (exp.type === "Literal") {
368
+ if (pre.length === 1) {
369
+ const { token } = pre[0];
370
+ if (token === "-" || token === "+") {
371
+ const children = [pre[0], ...exp.children];
372
+ if (post)
373
+ exp.children.push(post);
374
+ return {
375
+ type: "Literal",
376
+ children,
377
+ raw: `${token}${exp.raw}`
378
+ };
209
379
  }
210
- i++;
211
380
  }
212
- if (i < l) {
213
- return startsWith(target[i], value);
381
+ }
382
+ let ref;
383
+ while (ref = pre.length) {
384
+ const l = ref;
385
+ const last = pre[l - 1];
386
+ if (last.type === "Await") {
387
+ if (last.op) {
388
+ if (exp.type !== "ParenthesizedExpression") {
389
+ exp = ["(", exp, ")"];
390
+ }
391
+ exp = {
392
+ type: "CallExpression",
393
+ children: [...last.children, "Promise", last.op, exp]
394
+ };
395
+ pre = pre.slice(0, -1);
396
+ } else {
397
+ exp = {
398
+ type: "AwaitExpression",
399
+ children: [...last.children, exp]
400
+ };
401
+ pre = pre.slice(0, -1);
402
+ }
403
+ } else {
404
+ break;
214
405
  }
215
406
  }
216
- if (target.children)
217
- return startsWith(target.children, value);
218
- if (target.token)
219
- return value.test(target.token);
220
- if (typeof target === "string")
221
- return value.test(target);
222
- return;
223
- }
224
- function hasAwait(exp) {
225
- return gatherRecursiveWithinFunction(exp, ({ type }) => type === "Await").length > 0;
226
- }
227
- function hasYield(exp) {
228
- return gatherRecursiveWithinFunction(exp, ({ type }) => type === "Yield").length > 0;
229
- }
230
- function hasImportDeclaration(exp) {
231
- return gatherRecursiveWithinFunction(exp, ({ type }) => type === "ImportDeclaration").length > 0;
407
+ return {
408
+ type: "UnaryExpression",
409
+ children: [...pre, exp, post]
410
+ };
232
411
  }
233
- function deepCopy(node) {
412
+ var init_unary = __esm({
413
+ "source/parser/unary.civet"() {
414
+ "use strict";
415
+ init_util();
416
+ }
417
+ });
418
+
419
+ // source/parser/util.civet
420
+ function addParentPointers(node, parent) {
234
421
  if (node == null)
235
- return node;
422
+ return;
236
423
  if (typeof node !== "object")
237
- return node;
424
+ return;
238
425
  if (Array.isArray(node)) {
239
- return node.map(deepCopy);
426
+ for (const child of node) {
427
+ addParentPointers(child, parent);
428
+ }
429
+ return;
240
430
  }
241
- return Object.fromEntries(
242
- Object.entries(node).map(([key, value]) => {
431
+ node = node;
432
+ node.parent = parent;
433
+ if (node.children) {
434
+ for (const child of node.children) {
435
+ addParentPointers(child, node);
436
+ }
437
+ }
438
+ }
439
+ function clone(node) {
440
+ removeParentPointers(node);
441
+ return deepCopy(node);
442
+ }
443
+ function removeParentPointers(node) {
444
+ if (node == null)
445
+ return;
446
+ if (typeof node !== "object")
447
+ return;
448
+ if (Array.isArray(node)) {
449
+ for (const child of node) {
450
+ removeParentPointers(child);
451
+ }
452
+ return;
453
+ }
454
+ node.parent = null;
455
+ if (node.children) {
456
+ for (const child of node.children) {
457
+ removeParentPointers(child);
458
+ }
459
+ }
460
+ }
461
+ function isEmptyBareBlock(node) {
462
+ if (node?.type !== "BlockStatement")
463
+ return false;
464
+ const { bare, expressions } = node;
465
+ return bare && (expressions.length === 0 || expressions.length === 1 && expressions[0][1]?.type === "EmptyStatement");
466
+ }
467
+ function isFunction(node) {
468
+ const { type } = node;
469
+ return type === "FunctionExpression" || type === "ArrowFunction" || type === "MethodDefinition" || !!node.async;
470
+ }
471
+ function isWhitespaceOrEmpty(node) {
472
+ if (!node)
473
+ return true;
474
+ if (node.type === "Ref")
475
+ return false;
476
+ if (node.token)
477
+ return node.token.match(/^\s*$/);
478
+ if (node.children)
479
+ node = node.children;
480
+ if (!node.length)
481
+ return true;
482
+ if (typeof node === "string")
483
+ return node.match(/^\s*$/);
484
+ if (Array.isArray(node))
485
+ return node.every(isWhitespaceOrEmpty);
486
+ return;
487
+ }
488
+ function isExit(node) {
489
+ return [
490
+ "ReturnStatement",
491
+ "ThrowStatement",
492
+ "BreakStatement",
493
+ "ContinueStatement"
494
+ ].includes(node?.type);
495
+ }
496
+ function isComma(node) {
497
+ if (node?.token === ",") {
498
+ return node;
499
+ } else if (Array.isArray(node) && node.at(-1)?.token === ",") {
500
+ return node.at(-1);
501
+ }
502
+ ;
503
+ return;
504
+ }
505
+ function insertTrimmingSpace(target, c) {
506
+ if (!target) {
507
+ return target;
508
+ }
509
+ if (Array.isArray(target)) {
510
+ if (target.length === 0) {
511
+ return c;
512
+ }
513
+ return target.map((e, i) => {
514
+ if (i === 0) {
515
+ return insertTrimmingSpace(e, c);
516
+ }
517
+ return e;
518
+ });
519
+ }
520
+ if (target.children) {
521
+ return {
522
+ ...target,
523
+ children: insertTrimmingSpace(target.children, c)
524
+ };
525
+ }
526
+ if (target.token) {
527
+ return {
528
+ ...target,
529
+ token: target.token.replace(/^ ?/, c)
530
+ };
531
+ }
532
+ return target;
533
+ }
534
+ function getTrimmingSpace(target) {
535
+ if (!target)
536
+ return;
537
+ if (Array.isArray(target))
538
+ return getTrimmingSpace(target[0]);
539
+ if (target.children)
540
+ return getTrimmingSpace(target.children[0]);
541
+ if (target.token)
542
+ return target.token.match(/^ ?/)[0];
543
+ return;
544
+ }
545
+ function literalValue(literal) {
546
+ let { raw } = literal;
547
+ switch (raw) {
548
+ case "null":
549
+ return null;
550
+ case "true":
551
+ return true;
552
+ case "false":
553
+ return false;
554
+ }
555
+ if (raw.startsWith('"') && raw.endsWith('"') || raw.startsWith("'") && raw.endsWith("'")) {
556
+ return raw.slice(1, -1);
557
+ }
558
+ const numeric = literal.children.find(
559
+ (child) => child.type === "NumericLiteral"
560
+ );
561
+ if (numeric) {
562
+ raw = raw.replace(/_/g, "");
563
+ const { token } = numeric;
564
+ if (token.endsWith("n")) {
565
+ return BigInt(raw.slice(0, -1));
566
+ } else if (token.match(/[\.eE]/)) {
567
+ return parseFloat(raw);
568
+ } else if (token.startsWith("0")) {
569
+ switch (token.charAt(1).toLowerCase()) {
570
+ case "x":
571
+ return parseInt(raw.replace(/0[xX]/, ""), 16);
572
+ case "b":
573
+ return parseInt(raw.replace(/0[bB]/, ""), 2);
574
+ case "o":
575
+ return parseInt(raw.replace(/0[oO]/, ""), 8);
576
+ }
577
+ }
578
+ return parseInt(raw, 10);
579
+ }
580
+ throw new Error("Unrecognized literal " + JSON.stringify(literal));
581
+ }
582
+ function startsWith(target, value) {
583
+ if (!target)
584
+ return;
585
+ if (Array.isArray(target)) {
586
+ let i = 0;
587
+ let l = target.length;
588
+ while (i < l) {
589
+ const t = target[i];
590
+ if (t && (t.length || t.token || t.children)) {
591
+ break;
592
+ }
593
+ i++;
594
+ }
595
+ if (i < l) {
596
+ return startsWith(target[i], value);
597
+ }
598
+ }
599
+ if (target.children)
600
+ return startsWith(target.children, value);
601
+ if (target.token)
602
+ return value.test(target.token);
603
+ if (typeof target === "string")
604
+ return value.test(target);
605
+ return;
606
+ }
607
+ function hasAwait(exp) {
608
+ return gatherRecursiveWithinFunction(exp, ({ type }) => type === "Await").length > 0;
609
+ }
610
+ function hasYield(exp) {
611
+ return gatherRecursiveWithinFunction(exp, ({ type }) => type === "Yield").length > 0;
612
+ }
613
+ function hasImportDeclaration(exp) {
614
+ return gatherRecursiveWithinFunction(exp, ({ type }) => type === "ImportDeclaration").length > 0;
615
+ }
616
+ function deepCopy(node) {
617
+ if (node == null)
618
+ return node;
619
+ if (typeof node !== "object")
620
+ return node;
621
+ if (Array.isArray(node)) {
622
+ return node.map(deepCopy);
623
+ }
624
+ return Object.fromEntries(
625
+ Object.entries(node).map(([key, value]) => {
243
626
  return [key, deepCopy(value)];
244
627
  })
245
628
  );
@@ -268,6 +651,92 @@ function makeAmpersandFunction(bodyAfterRef = []) {
268
651
  parameters
269
652
  };
270
653
  }
654
+ function makeAmpersandFunctionExpression(prefix, rhs) {
655
+ let ref, body, typeSuffix;
656
+ if (!rhs) {
657
+ body = ref = makeRef("$");
658
+ } else {
659
+ ({ ref, typeSuffix } = rhs);
660
+ if (!ref) {
661
+ throw new Error("Could not find ref in ampersand shorthand block");
662
+ }
663
+ body = rhs;
664
+ }
665
+ if (prefix.length) {
666
+ body = {
667
+ type: "UnaryExpression",
668
+ children: [processUnaryExpression(prefix, body, void 0)]
669
+ };
670
+ }
671
+ const parameters = {
672
+ type: "Parameters",
673
+ children: typeSuffix ? ["(", ref, typeSuffix, ")"] : [ref],
674
+ names: []
675
+ };
676
+ const expressions = [body];
677
+ const block = {
678
+ bare: true,
679
+ expressions,
680
+ children: [expressions]
681
+ };
682
+ const children = [parameters, " => ", block];
683
+ const async = hasAwait(body);
684
+ if (async) {
685
+ children.unshift("async ");
686
+ }
687
+ return {
688
+ type: "ArrowFunction",
689
+ signature: {
690
+ modifier: {
691
+ async
692
+ }
693
+ },
694
+ children,
695
+ ref,
696
+ body,
697
+ ampersandBlock: true,
698
+ block,
699
+ parameters
700
+ };
701
+ }
702
+ function makeAmpersandBlockRHSBody(typeSuffix, callExpRest, unaryPostfix, assign, binopRHS) {
703
+ const ref = makeRef("$");
704
+ let exp = {
705
+ type: "AmpersandRef",
706
+ children: [ref],
707
+ names: [],
708
+ ref
709
+ };
710
+ if (callExpRest) {
711
+ exp.children.push(...callExpRest[1]);
712
+ }
713
+ if (unaryPostfix) {
714
+ exp = processUnaryExpression([], exp, unaryPostfix);
715
+ }
716
+ if (assign) {
717
+ const [op1, more, rhs] = assign;
718
+ const lhs = [
719
+ [void 0, exp, ...op1],
720
+ ...more.map((x) => [x[0], x[1], ...x[2]])
721
+ ];
722
+ exp = {
723
+ type: "AssignmentExpression",
724
+ children: [lhs, rhs],
725
+ names: null,
726
+ lhs,
727
+ assigned: exp,
728
+ exp: rhs
729
+ };
730
+ }
731
+ if (binopRHS) {
732
+ exp = {
733
+ children: processBinaryOpExpression([exp, binopRHS[1]])
734
+ };
735
+ }
736
+ exp.ref = ref;
737
+ exp.typeSuffix = typeSuffix;
738
+ return exp;
739
+ }
271
740
  function makeLeftHandSideExpression(expression) {
272
741
  if (expression.parenthesized) {
273
742
  return expression;
@@ -445,7 +914,9 @@ function wrapWithReturn(expression) {
445
914
  const children = expression ? ["return ", expression] : ["return"];
446
915
  return makeNode({
447
916
  type: "ReturnStatement",
448
- children
917
+ children,
918
+ expression,
919
+ parent: expression?.parent
449
920
  });
450
921
  }
451
922
  var assert, typeNeedsNoParens;
@@ -453,6 +924,8 @@ var init_util = __esm({
453
924
  "source/parser/util.civet"() {
454
925
  "use strict";
455
926
  init_traversal();
927
+ init_op();
928
+ init_unary();
456
929
  assert = {
457
930
  equal(a, b, msg) {
458
931
  if (a !== b) {
@@ -686,503 +1159,200 @@ function insertHoistDec(block, node, dec) {
686
1159
  const index = expressions.findIndex((exp) => {
687
1160
  return exp === node || Array.isArray(exp) && exp[1] === node;
688
1161
  });
689
- if (index < 0) {
690
- throw new Error("Couldn't find expression in block for hoistable declaration.");
691
- }
692
- const statement = [expressions[index][0], dec, ";"];
693
- expressions[index][0] = "";
694
- expressions.splice(index, 0, statement);
695
- addParentPointers(dec, block);
696
- }
697
- function processBlocks(statements) {
698
- insertSemicolon(statements);
699
- gatherRecursive(statements, ($) => $.type === "BlockStatement").forEach(function({ expressions }) {
700
- return processBlocks(expressions);
701
- });
702
- }
703
- function insertSemicolon(statements) {
704
- const l = statements.length;
705
- for (let i1 = 0, len = statements.length; i1 < len; i1++) {
706
- const i = i1;
707
- const s = statements[i1];
708
- if (i < l - 1) {
709
- if (needsPrecedingSemicolon(statements[i + 1])) {
710
- const delim = s[2];
711
- if (!delim) {
712
- s[2] = ";";
713
- } else if (typeof delim === "string" && !delim.match(/;/)) {
714
- s[2] = `;${delim}`;
715
- }
716
- }
717
- }
718
- }
719
- }
720
- function needsPrecedingSemicolon(exp) {
721
- let following;
722
- if (Array.isArray(exp)) {
723
- [, following] = exp;
724
- } else {
725
- following = exp;
726
- }
727
- if (!following) {
728
- return false;
729
- }
730
- if (Array.isArray(following)) {
731
- return needsPrecedingSemicolon(following[0]);
732
- }
733
- switch (following.type) {
734
- case "ParenthesizedExpression":
735
- case "ArrayExpression":
736
- case "ArrowFunction":
737
- case "TemplateLiteral":
738
- case "RegularExpressionLiteral":
739
- case "RangeExpression": {
740
- return true;
741
- }
742
- case "AssignmentExpression": {
743
- return startsWith(following, /^(\[|\()/);
744
- }
745
- case "Literal": {
746
- return following.raw?.startsWith("-") || following.raw?.startsWith("+");
747
- }
748
- case "PipelineExpression":
749
- case "UnwrappedExpression": {
750
- return needsPrecedingSemicolon(following.children[1]);
751
- }
752
- default: {
753
- if (following.children) {
754
- return needsPrecedingSemicolon(following.children[0]);
755
- }
756
- ;
757
- return;
758
- }
759
- }
760
- }
761
- var init_block = __esm({
762
- "source/parser/block.civet"() {
763
- "use strict";
764
- init_util();
765
- init_traversal();
766
- }
767
- });
768
-
769
- // source/parser/binding.civet
770
- function adjustAtBindings(statements, asThis = false) {
771
- gatherRecursiveAll(statements, (n) => n.type === "AtBindingProperty").forEach((binding) => {
772
- const { ref } = binding;
773
- if (asThis) {
774
- const atBinding = binding.binding;
775
- atBinding.children.pop();
776
- atBinding.type = void 0;
777
- binding.children.unshift(ref.id, ": this.", ref.base);
778
- binding.type = "Property";
779
- binding.ref = void 0;
780
- return;
781
- }
782
- if (ref.names[0] !== ref.base) {
783
- return binding.children.unshift(ref.base, ": ");
784
- }
785
- ;
786
- return;
787
- });
788
- }
789
- function adjustBindingElements(elements) {
790
- const names = elements.flatMap((p) => p.names || []), { length } = elements;
791
- let blockPrefix, restIndex = -1, restCount = 0;
792
- elements.forEach(({ type }, i) => {
793
- if (type === "BindingRestElement") {
794
- if (restIndex < 0)
795
- restIndex = i;
796
- return restCount++;
797
- }
798
- ;
799
- return;
800
- });
801
- if (restCount === 0) {
802
- return {
803
- children: elements,
804
- names,
805
- blockPrefix,
806
- length
807
- };
808
- } else if (restCount === 1) {
809
- const rest = elements[restIndex];
810
- const after = elements.slice(restIndex + 1);
811
- const restIdentifier = rest.binding.ref || rest.binding;
812
- names.push(...rest.names || []);
813
- let l = after.length;
814
- if (l) {
815
- if (arrayElementHasTrailingComma(after[l - 1]))
816
- l++;
817
- blockPrefix = {
818
- type: "PostRestBindingElements",
819
- children: ["[", insertTrimmingSpace(after, ""), "] = ", restIdentifier, ".splice(-", l.toString(), ")"],
820
- names: after.flatMap((p) => p.names)
821
- };
822
- }
823
- return {
824
- names,
825
- children: [...elements.slice(0, restIndex), {
826
- ...rest,
827
- children: rest.children.slice(0, -1)
828
- // remove trailing comma
829
- }],
830
- blockPrefix,
831
- length
832
- };
833
- }
834
- const err = {
835
- type: "Error",
836
- children: ["Multiple rest elements in array pattern"]
837
- };
838
- return {
839
- names,
840
- children: [...elements, err],
841
- blockPrefix,
842
- length
843
- };
844
- }
845
- function gatherBindingCode(statements, opts) {
846
- const thisAssignments = [];
847
- const splices = [];
848
- function insertRestSplices(s, p, thisAssignments2) {
849
- gatherRecursiveAll(s, (n) => n.blockPrefix || opts?.injectParamProps && n.accessModifier || n.type === "AtBinding").forEach((n) => {
850
- if (n.type === "AtBinding") {
851
- const { ref } = n;
852
- const { id } = ref;
853
- thisAssignments2.push([`this.${id} = `, ref]);
854
- return;
855
- }
856
- if (opts?.injectParamProps && n.type === "Parameter" && n.accessModifier) {
857
- n.names.forEach((id) => ({
858
- push: thisAssignments2.push({
859
- type: "AssignmentExpression",
860
- children: [`this.${id} = `, id],
861
- js: true
862
- })
863
- }));
864
- return;
865
- }
866
- const { blockPrefix } = n;
867
- p.push(blockPrefix);
868
- return insertRestSplices(blockPrefix, p, thisAssignments2);
869
- });
870
- }
871
- insertRestSplices(statements, splices, thisAssignments);
872
- return [splices, thisAssignments];
873
- }
874
- function arrayElementHasTrailingComma(elementNode) {
875
- const lastChild = elementNode.children.at(-1);
876
- return lastChild && lastChild[lastChild.length - 1]?.token === ",";
877
- }
878
- var init_binding = __esm({
879
- "source/parser/binding.civet"() {
880
- "use strict";
881
- init_traversal();
882
- init_util();
883
- }
884
- });
885
-
886
- // source/parser/op.civet
887
- function getPrecedence(op) {
888
- if (typeof op === "string") {
889
- return precedenceMap.get(op) ?? (() => {
890
- throw new Error(`Unknown operator: ${op}`);
891
- })();
892
- } else if (typeof op.prec === "number") {
893
- return op.prec;
894
- } else {
895
- return precedenceMap.get(op.prec ?? op.token) ?? (op.relational ? precedenceRelational : precedenceCustomDefault);
896
- }
897
- }
898
- function processBinaryOpExpression($0) {
899
- return recurse(expandChainedComparisons($0));
900
- function recurse(expandedOps) {
901
- let i = 2;
902
- while (i < expandedOps.length) {
903
- let op = expandedOps[i];
904
- if (op.special) {
905
- let advanceLeft2 = function(allowEqual) {
906
- while (start >= 4) {
907
- const prevPrec = getPrecedence(expandedOps[start - 2]);
908
- if (!(prevPrec > prec || allowEqual && prevPrec === prec)) {
909
- return prevPrec === prec;
910
- }
911
- start -= 4;
912
- }
913
- return false;
914
- }, advanceRight2 = function(allowEqual) {
915
- while (end + 4 < expandedOps.length) {
916
- const nextPrec = getPrecedence(expandedOps[end + 2]);
917
- if (!(nextPrec > prec || allowEqual && nextPrec === prec)) {
918
- return nextPrec === prec;
919
- }
920
- end += 4;
921
- }
922
- return false;
923
- };
924
- var advanceLeft = advanceLeft2, advanceRight = advanceRight2;
925
- let start = i - 2, end = i + 2;
926
- const prec = getPrecedence(op);
927
- let error;
928
- switch (op.assoc) {
929
- case "left":
930
- case void 0: {
931
- advanceLeft2(true);
932
- advanceRight2(false);
933
- break;
934
- }
935
- case "right": {
936
- advanceLeft2(false);
937
- advanceRight2(true);
938
- break;
939
- }
940
- case "non": {
941
- if (advanceLeft2(false) || advanceRight2(false)) {
942
- error = {
943
- type: "Error",
944
- message: `non-associative operator ${op.token} used at same precedence level without parenthesization`
945
- };
946
- }
947
- ;
948
- break;
949
- }
950
- case "arguments": {
951
- if (advanceLeft2(false)) {
952
- error = {
953
- type: "Error",
954
- message: `arguments operator ${op.token} used at same precedence level as ${expandedOps[start - 2].token} to the left`
955
- };
956
- }
957
- advanceRight2(true);
958
- break;
959
- }
960
- default: {
961
- throw new Error(`Unsupported associativity: ${op.assoc}`);
962
- }
963
- }
964
- let a = start === i - 2 ? expandedOps[start] : expandedOps.slice(start, i - 1);
965
- let wsOp = expandedOps[i - 1];
966
- let wsB = expandedOps[i + 1];
967
- let b = end === i + 2 ? expandedOps[i + 2] : expandedOps.slice(i + 2, end + 1);
968
- if (op.assoc === "arguments") {
969
- let i2 = 2;
970
- while (i2 < b.length) {
971
- if (prec === getPrecedence(b[i2])) {
972
- if (!(b[i2].token === op.token)) {
973
- error ??= {
974
- type: "Error",
975
- message: `arguments operator ${op.token} used at same precedence level as ${b[i2].token} to the right`
976
- };
977
- }
978
- b[i2] = ",";
979
- }
980
- i2 += 4;
981
- }
982
- } else {
983
- b = recurse(b);
984
- }
985
- if (op.token === "instanceof" && b.type === "Literal" && b.children?.[0]?.type === "StringLiteral") {
986
- a = ["typeof ", makeLeftHandSideExpression(a)];
987
- if (op.negated) {
988
- op = { ...op, token: "!==", negated: false };
989
- } else {
990
- op = { ...op, token: "===" };
991
- }
992
- }
993
- if (op.asConst) {
994
- a = makeAsConst(a);
995
- b = makeAsConst(b);
996
- }
997
- let children;
998
- if (op.call) {
999
- wsOp = insertTrimmingSpace(wsOp, "");
1000
- if (op.reversed) {
1001
- wsB = insertTrimmingSpace(wsB, "");
1002
- children = [wsOp, op.call, "(", wsB, b, ", ", a, ")", op.suffix];
1003
- } else {
1004
- children = [wsOp, op.call, "(", a, ",", wsB, b, ")", op.suffix];
1005
- }
1006
- } else if (op.method) {
1007
- wsOp = insertTrimmingSpace(wsOp, "");
1008
- wsB = insertTrimmingSpace(wsB, "");
1009
- if (op.reversed) {
1010
- if (end !== i + 2)
1011
- b = makeLeftHandSideExpression(b);
1012
- b = dotNumericLiteral(b);
1013
- children = [wsB, b, wsOp, ".", op.method, "(", a, ")"];
1014
- } else {
1015
- if (start !== i - 2 || a.type === "NumericLiteral") {
1016
- a = makeLeftHandSideExpression(a);
1017
- }
1018
- a = dotNumericLiteral(a);
1019
- children = [a, wsOp, ".", op.method, "(", wsB, b, ")"];
1020
- }
1021
- } else if (op.token) {
1022
- children = [a, wsOp, op, wsB, b];
1023
- if (op.negated)
1024
- children = ["(", ...children, ")"];
1025
- } else {
1026
- throw new Error("Unknown operator: " + JSON.stringify(op));
1027
- }
1028
- if (op.negated)
1029
- children.unshift("!");
1030
- if (error != null) {
1031
- children.push(error);
1162
+ if (index < 0) {
1163
+ throw new Error("Couldn't find expression in block for hoistable declaration.");
1164
+ }
1165
+ const statement = [expressions[index][0], dec, ";"];
1166
+ expressions[index][0] = "";
1167
+ expressions.splice(index, 0, statement);
1168
+ addParentPointers(dec, block);
1169
+ }
1170
+ function processBlocks(statements) {
1171
+ insertSemicolon(statements);
1172
+ gatherRecursive(statements, ($) => $.type === "BlockStatement").forEach(function({ expressions }) {
1173
+ return processBlocks(expressions);
1174
+ });
1175
+ }
1176
+ function insertSemicolon(statements) {
1177
+ const l = statements.length;
1178
+ for (let i1 = 0, len = statements.length; i1 < len; i1++) {
1179
+ const i = i1;
1180
+ const s = statements[i1];
1181
+ if (i < l - 1) {
1182
+ if (needsPrecedingSemicolon(statements[i + 1])) {
1183
+ const delim = s[2];
1184
+ if (!delim) {
1185
+ s[2] = ";";
1186
+ } else if (typeof delim === "string" && !delim.match(/;/)) {
1187
+ s[2] = `;${delim}`;
1032
1188
  }
1033
- expandedOps.splice(start, end - start + 1, {
1034
- children
1035
- });
1036
- i = start + 2;
1037
- } else {
1038
- i += 4;
1039
1189
  }
1040
1190
  }
1041
- return expandedOps;
1042
- }
1043
- ;
1044
- return recurse;
1045
- }
1046
- function dotNumericLiteral(literal) {
1047
- if (literal?.type === "Literal" && /^[+-]?(?:0|[1-9](?:_[0-9]|[0-9])*)$/.test(literal.raw)) {
1048
- literal.children.push(".");
1049
- literal.raw += ".";
1050
1191
  }
1051
- return literal;
1052
1192
  }
1053
- function makeAsConst(node) {
1054
- if (Array.isArray(node) && node.length === 1) {
1055
- node = node[0];
1056
- }
1057
- if (node.type === "Literal" && node.raw !== "null" || node.type === "ArrayExpression" || node.type === "ObjectExpression") {
1058
- return { ...node, children: [...node.children, asConst] };
1193
+ function needsPrecedingSemicolon(exp) {
1194
+ let following;
1195
+ if (Array.isArray(exp)) {
1196
+ [, following] = exp;
1059
1197
  } else {
1060
- return node;
1198
+ following = exp;
1061
1199
  }
1062
- }
1063
- function isExistence(exp) {
1064
- if (exp.type === "ParenthesizedExpression" && exp.implicit) {
1065
- exp = exp.expression;
1200
+ if (!following) {
1201
+ return false;
1066
1202
  }
1067
- if (exp.type === "Existence") {
1068
- return exp;
1203
+ if (Array.isArray(following)) {
1204
+ return needsPrecedingSemicolon(following[0]);
1069
1205
  }
1070
- ;
1071
- return;
1072
- }
1073
- function isRelationalOp(op) {
1074
- return op.relational || getPrecedence(op) === precedenceRelational;
1075
- }
1076
- function expandChainedComparisons([first, binops]) {
1077
- const results = [];
1078
- let i = 0;
1079
- const l = binops.length;
1080
- let start = 0;
1081
- let chains = [];
1082
- let op;
1083
- while (i < l) {
1084
- [, op] = binops[i];
1085
- if (isRelationalOp(op)) {
1086
- chains.push(i);
1087
- } else if (getPrecedence(op) < precedenceRelational) {
1088
- processChains(op);
1089
- first = void 0;
1206
+ switch (following.type) {
1207
+ case "ParenthesizedExpression":
1208
+ case "ArrayExpression":
1209
+ case "ArrowFunction":
1210
+ case "TemplateLiteral":
1211
+ case "RegularExpressionLiteral":
1212
+ case "RangeExpression": {
1213
+ return true;
1090
1214
  }
1091
- i++;
1092
- }
1093
- if (op != null) {
1094
- processChains(op);
1095
- }
1096
- return results;
1097
- function processChains(op2) {
1098
- if (first && isRelationalOp(op2)) {
1099
- first = expandExistence(first);
1215
+ case "AssignmentExpression": {
1216
+ return startsWith(following, /^(\[|\()/);
1100
1217
  }
1101
- if (chains.length > 1) {
1102
- chains.forEach((index, k) => {
1103
- if (k > 0) {
1104
- results.push(" ", "&&", " ");
1105
- }
1106
- const binop = binops[index];
1107
- let [, , , exp] = binop;
1108
- exp = binop[3] = expandExistence(exp);
1109
- let endIndex;
1110
- if (k < chains.length - 1) {
1111
- endIndex = chains[k + 1];
1112
- } else {
1113
- endIndex = i + 1;
1114
- }
1115
- results.push(first, ...binops.slice(start, endIndex).flat());
1116
- first = [exp].concat(binops.slice(index + 1, endIndex));
1117
- return start = endIndex;
1118
- });
1119
- } else {
1120
- if (first) {
1121
- results.push(first);
1122
- }
1123
- results.push(...binops.slice(start, i + 1).flat());
1124
- start = i + 1;
1218
+ case "Literal": {
1219
+ return following.raw?.startsWith("-") || following.raw?.startsWith("+");
1125
1220
  }
1126
- chains.length = 0;
1127
- }
1128
- function expandExistence(exp) {
1129
- const existence = isExistence(exp);
1130
- if (existence) {
1131
- results.push(existence, " ", "&&", " ");
1132
- return existence.expression;
1221
+ case "PipelineExpression":
1222
+ case "UnwrappedExpression": {
1223
+ return needsPrecedingSemicolon(following.children[1]);
1224
+ }
1225
+ default: {
1226
+ if (following.children) {
1227
+ return needsPrecedingSemicolon(following.children[0]);
1228
+ }
1229
+ ;
1230
+ return;
1133
1231
  }
1134
- return exp;
1135
1232
  }
1136
- ;
1137
1233
  }
1138
- var precedenceOrder, precedenceMap, precedenceStep, precedenceRelational, precedenceCustomDefault, asConst;
1139
- var init_op = __esm({
1140
- "source/parser/op.civet"() {
1234
+ var init_block = __esm({
1235
+ "source/parser/block.civet"() {
1141
1236
  "use strict";
1142
1237
  init_util();
1143
- precedenceOrder = [
1144
- ["||", "??"],
1145
- ["^^"],
1146
- ["&&"],
1147
- ["|"],
1148
- ["^"],
1149
- ["&"],
1150
- // NOTE: Equality and inequality merged because of relational chaining
1151
- [
1152
- "==",
1153
- "!=",
1154
- "===",
1155
- "!==",
1156
- "<",
1157
- "<=",
1158
- ">",
1159
- ">=",
1160
- "in",
1161
- "instanceof"
1162
- ],
1163
- // NOTE: Extra in-between level for default custom operators
1164
- ["custom"],
1165
- ["<<", ">>", ">>>"],
1166
- ["+", "-"],
1167
- ["*", "/", "%"],
1168
- ["**"]
1169
- ];
1170
- precedenceMap = /* @__PURE__ */ new Map();
1171
- for (let i1 = 0, len = precedenceOrder.length; i1 < len; i1++) {
1172
- const prec = i1;
1173
- const ops = precedenceOrder[i1];
1174
- for (let i2 = 0, len1 = ops.length; i2 < len1; i2++) {
1175
- const op = ops[i2];
1176
- precedenceMap.set(op, prec);
1238
+ init_traversal();
1239
+ }
1240
+ });
1241
+
1242
+ // source/parser/binding.civet
1243
+ function adjustAtBindings(statements, asThis = false) {
1244
+ gatherRecursiveAll(statements, (n) => n.type === "AtBindingProperty").forEach((binding) => {
1245
+ const { ref } = binding;
1246
+ if (asThis) {
1247
+ const atBinding = binding.binding;
1248
+ atBinding.children.pop();
1249
+ atBinding.type = void 0;
1250
+ binding.children.unshift(ref.id, ": this.", ref.base);
1251
+ binding.type = "Property";
1252
+ binding.ref = void 0;
1253
+ return;
1254
+ }
1255
+ if (ref.names[0] !== ref.base) {
1256
+ return binding.children.unshift(ref.base, ": ");
1257
+ }
1258
+ ;
1259
+ return;
1260
+ });
1261
+ }
1262
+ function adjustBindingElements(elements) {
1263
+ const names = elements.flatMap((p) => p.names || []), { length } = elements;
1264
+ let blockPrefix, restIndex = -1, restCount = 0;
1265
+ elements.forEach(({ type }, i) => {
1266
+ if (type === "BindingRestElement") {
1267
+ if (restIndex < 0)
1268
+ restIndex = i;
1269
+ return restCount++;
1270
+ }
1271
+ ;
1272
+ return;
1273
+ });
1274
+ if (restCount === 0) {
1275
+ return {
1276
+ children: elements,
1277
+ names,
1278
+ blockPrefix,
1279
+ length
1280
+ };
1281
+ } else if (restCount === 1) {
1282
+ const rest = elements[restIndex];
1283
+ const after = elements.slice(restIndex + 1);
1284
+ const restIdentifier = rest.binding.ref || rest.binding;
1285
+ names.push(...rest.names || []);
1286
+ let l = after.length;
1287
+ if (l) {
1288
+ if (arrayElementHasTrailingComma(after[l - 1]))
1289
+ l++;
1290
+ blockPrefix = {
1291
+ type: "PostRestBindingElements",
1292
+ children: ["[", insertTrimmingSpace(after, ""), "] = ", restIdentifier, ".splice(-", l.toString(), ")"],
1293
+ names: after.flatMap((p) => p.names)
1294
+ };
1295
+ }
1296
+ return {
1297
+ names,
1298
+ children: [...elements.slice(0, restIndex), {
1299
+ ...rest,
1300
+ children: rest.children.slice(0, -1)
1301
+ // remove trailing comma
1302
+ }],
1303
+ blockPrefix,
1304
+ length
1305
+ };
1306
+ }
1307
+ const err = {
1308
+ type: "Error",
1309
+ children: ["Multiple rest elements in array pattern"]
1310
+ };
1311
+ return {
1312
+ names,
1313
+ children: [...elements, err],
1314
+ blockPrefix,
1315
+ length
1316
+ };
1317
+ }
1318
+ function gatherBindingCode(statements, opts) {
1319
+ const thisAssignments = [];
1320
+ const splices = [];
1321
+ function insertRestSplices(s, p, thisAssignments2) {
1322
+ gatherRecursiveAll(s, (n) => n.blockPrefix || opts?.injectParamProps && n.accessModifier || n.type === "AtBinding").forEach((n) => {
1323
+ if (n.type === "AtBinding") {
1324
+ const { ref } = n;
1325
+ const { id } = ref;
1326
+ thisAssignments2.push([`this.${id} = `, ref]);
1327
+ return;
1328
+ }
1329
+ if (opts?.injectParamProps && n.type === "Parameter" && n.accessModifier) {
1330
+ n.names.forEach((id) => ({
1331
+ push: thisAssignments2.push({
1332
+ type: "AssignmentExpression",
1333
+ children: [`this.${id} = `, id],
1334
+ js: true
1335
+ })
1336
+ }));
1337
+ return;
1177
1338
  }
1178
- }
1179
- precedenceStep = 1 / 64;
1180
- precedenceRelational = precedenceMap.get("==");
1181
- precedenceCustomDefault = precedenceMap.get("custom");
1182
- asConst = {
1183
- ts: true,
1184
- children: [" as const"]
1185
- };
1339
+ const { blockPrefix } = n;
1340
+ p.push(blockPrefix);
1341
+ return insertRestSplices(blockPrefix, p, thisAssignments2);
1342
+ });
1343
+ }
1344
+ insertRestSplices(statements, splices, thisAssignments);
1345
+ return [splices, thisAssignments];
1346
+ }
1347
+ function arrayElementHasTrailingComma(elementNode) {
1348
+ const lastChild = elementNode.children.at(-1);
1349
+ return lastChild && lastChild[lastChild.length - 1]?.token === ",";
1350
+ }
1351
+ var init_binding = __esm({
1352
+ "source/parser/binding.civet"() {
1353
+ "use strict";
1354
+ init_traversal();
1355
+ init_util();
1186
1356
  }
1187
1357
  });
1188
1358
 
@@ -1892,7 +2062,7 @@ function insertReturn(node, outerNode = node) {
1892
2062
  return;
1893
2063
  case "IfStatement":
1894
2064
  insertReturn(exp.then);
1895
- if (exp.else)
2065
+ if (exp.else && exp.else.length !== 0)
1896
2066
  insertReturn(exp.else[2]);
1897
2067
  else
1898
2068
  exp.children.push(["", {
@@ -2185,7 +2355,8 @@ function processDeclarationCondition(condition, rootCondition, parent) {
2185
2355
  }
2186
2356
  const { decl, bindings } = condition.declaration;
2187
2357
  const binding = bindings[0];
2188
- const { pattern, suffix, initializer, splices, thisAssignments } = binding;
2358
+ let { pattern, suffix, initializer, splices, thisAssignments } = binding;
2359
+ const nullCheck = suffix?.optional && !suffix.t && !suffix.nonnull;
2189
2360
  let ref = prependStatementExpressionBlock(initializer, parent);
2190
2361
  if (ref) {
2191
2362
  Object.assign(condition, {
@@ -2199,11 +2370,16 @@ function processDeclarationCondition(condition, rootCondition, parent) {
2199
2370
  ref = makeRef();
2200
2371
  const grandparent = condition.parent?.parent;
2201
2372
  const children = (
2202
- // Check that the declaration is a plain assignment (no pattern-matching) and the immediate grandchild of an `if` or `while`
2373
+ // Wrap declaration that is a plain assignment (no pattern-matching) and the immediate grandchild of an `if` or `while`
2374
+ // to satisfy eslint's no-cond-assign rule
2203
2375
  // More complex conditions (triggered by pattern matching or `until`/`unless`) don't need double parens
2204
- // @ts-ignore Just because pattern might not have a type at runtime doesn't mean it's unsafe
2205
- pattern.type === "Identifier" && (grandparent?.type === "IfStatement" || grandparent?.type === "WhileStatement") ? ["(", ref, initializer, ")"] : [ref, initializer]
2376
+ pattern.type === "Identifier" && (grandparent?.type === "IfStatement" || grandparent?.type === "IterationStatement") && !nullCheck ? ["(", ref, initializer, ")"] : [ref, initializer]
2206
2377
  );
2378
+ if (nullCheck) {
2379
+ children.unshift("(");
2380
+ children.push(") != null");
2381
+ suffix = void 0;
2382
+ }
2207
2383
  Object.assign(condition, {
2208
2384
  type: "AssignmentExpression",
2209
2385
  children,
@@ -2442,91 +2618,6 @@ var init_declaration = __esm({
2442
2618
  }
2443
2619
  });
2444
2620
 
2445
- // source/parser/unary.civet
2446
- function processUnaryExpression(pre, exp, post) {
2447
- if (!(pre.length || post))
2448
- return exp;
2449
- if (post?.token === "?") {
2450
- post = {
2451
- $loc: post.$loc,
2452
- token: " != null"
2453
- };
2454
- if (pre.length) {
2455
- const lastPre = pre[pre.length - 1];
2456
- if (lastPre.token === "!") {
2457
- post.token = " == null";
2458
- pre = pre.slice(0, -1);
2459
- } else if (lastPre.length === 2 && lastPre[0].token === "!") {
2460
- post.token = " == null";
2461
- pre = pre.slice(0, -1);
2462
- }
2463
- }
2464
- const existence = {
2465
- type: "Existence",
2466
- expression: exp,
2467
- children: [exp, post]
2468
- };
2469
- exp = makeLeftHandSideExpression(existence);
2470
- if (pre.length) {
2471
- return {
2472
- type: "UnaryExpression",
2473
- children: [...pre, exp]
2474
- };
2475
- }
2476
- return exp;
2477
- }
2478
- if (exp.type === "Literal") {
2479
- if (pre.length === 1) {
2480
- const { token } = pre[0];
2481
- if (token === "-" || token === "+") {
2482
- const children = [pre[0], ...exp.children];
2483
- if (post)
2484
- exp.children.push(post);
2485
- return {
2486
- type: "Literal",
2487
- children,
2488
- raw: `${token}${exp.raw}`
2489
- };
2490
- }
2491
- }
2492
- }
2493
- let ref;
2494
- while (ref = pre.length) {
2495
- const l = ref;
2496
- const last = pre[l - 1];
2497
- if (last.type === "Await") {
2498
- if (last.op) {
2499
- if (exp.type !== "ParenthesizedExpression") {
2500
- exp = ["(", exp, ")"];
2501
- }
2502
- exp = {
2503
- type: "CallExpression",
2504
- children: [...last.children, "Promise", last.op, exp]
2505
- };
2506
- pre = pre.slice(0, -1);
2507
- } else {
2508
- exp = {
2509
- type: "AwaitExpression",
2510
- children: [...last.children, exp]
2511
- };
2512
- pre = pre.slice(0, -1);
2513
- }
2514
- } else {
2515
- break;
2516
- }
2517
- }
2518
- return {
2519
- type: "UnaryExpression",
2520
- children: [...pre, exp, post]
2521
- };
2522
- }
2523
- var init_unary = __esm({
2524
- "source/parser/unary.civet"() {
2525
- "use strict";
2526
- init_util();
2527
- }
2528
- });
2529
-
2530
2621
  // source/parser/pipe.civet
2531
2622
  function constructInvocation(fn, arg) {
2532
2623
  const fnArr = [fn.leadingComment, fn.expr, fn.trailingComment];
@@ -2743,10 +2834,13 @@ var init_pipe = __esm({
2743
2834
  function forRange(open, forDeclaration, range, stepExp, close) {
2744
2835
  const { start, end, inclusive } = range;
2745
2836
  const counterRef = makeRef("i");
2837
+ const infinite = end.type === "Identifier" && end.name === "Infinity";
2746
2838
  let stepRef;
2747
2839
  if (stepExp) {
2748
2840
  stepExp = insertTrimmingSpace(stepExp, "");
2749
2841
  stepRef = maybeRef(stepExp, "step");
2842
+ } else if (infinite) {
2843
+ stepExp = stepRef = "1";
2750
2844
  }
2751
2845
  let startRef = maybeRef(start, "start");
2752
2846
  let endRef = maybeRef(end, "end");
@@ -2776,7 +2870,7 @@ function forRange(open, forDeclaration, range, stepExp, close) {
2776
2870
  } else {
2777
2871
  const value = "StringLiteral" === start.subtype ? ["String.fromCharCode(", counterRef, ")"] : counterRef;
2778
2872
  blockPrefix = [
2779
- ["", forDeclaration, " = ", value, ";"]
2873
+ ["", [forDeclaration, " = ", value], ";"]
2780
2874
  ];
2781
2875
  }
2782
2876
  } else if (forDeclaration) {
@@ -2788,8 +2882,8 @@ function forRange(open, forDeclaration, range, stepExp, close) {
2788
2882
  names: forDeclaration?.names
2789
2883
  };
2790
2884
  const counterPart = inclusive ? [counterRef, " <= ", endRef, " : ", counterRef, " >= ", endRef] : [counterRef, " < ", endRef, " : ", counterRef, " > ", endRef];
2791
- const condition = stepRef ? [stepRef, " !== 0 && (", stepRef, " > 0 ? ", ...counterPart, ")"] : ascRef ? [ascRef, " ? ", ...counterPart] : asc ? counterPart.slice(0, 3) : counterPart.slice(4);
2792
- const increment = stepRef ? [...varAssign, counterRef, " += ", stepRef] : ascRef ? [...varAssign, ascRef, " ? ++", counterRef, " : --", counterRef] : [...varAssign, asc ? "++" : "--", counterRef];
2885
+ const condition = infinite ? [] : stepRef ? [stepRef, " !== 0 && (", stepRef, " > 0 ? ", ...counterPart, ")"] : ascRef ? [ascRef, " ? ", ...counterPart] : asc ? counterPart.slice(0, 3) : counterPart.slice(4);
2886
+ const increment = infinite ? [...varAssign, "++", counterRef] : stepRef ? [...varAssign, counterRef, " += ", stepRef] : ascRef ? [...varAssign, ascRef, " ? ++", counterRef, " : --", counterRef] : [...varAssign, asc ? "++" : "--", counterRef];
2793
2887
  return {
2794
2888
  declaration,
2795
2889
  children: [open, declaration, "; ", ...condition, "; ", ...increment, close],
@@ -3280,7 +3374,9 @@ __export(lib_exports, {
3280
3374
  isWhitespaceOrEmpty: () => isWhitespaceOrEmpty,
3281
3375
  lastAccessInCallExpression: () => lastAccessInCallExpression,
3282
3376
  literalValue: () => literalValue,
3377
+ makeAmpersandBlockRHSBody: () => makeAmpersandBlockRHSBody,
3283
3378
  makeAmpersandFunction: () => makeAmpersandFunction,
3379
+ makeAmpersandFunctionExpression: () => makeAmpersandFunctionExpression,
3284
3380
  makeEmptyBlock: () => makeEmptyBlock,
3285
3381
  makeExpressionStatement: () => makeExpressionStatement,
3286
3382
  makeGetterMethod: () => makeGetterMethod,
@@ -4243,6 +4339,7 @@ function processProgram(root, config, m, ReservedWord) {
4243
4339
  assert.equal(m.JSXTagStack.length, 1, "JSXTagStack");
4244
4340
  addParentPointers(root);
4245
4341
  const { expressions: statements } = root;
4342
+ processPartialPlaceholders(statements);
4246
4343
  processNegativeIndexAccess(statements);
4247
4344
  processTypes(statements);
4248
4345
  processDeclarationConditions(statements, m.getRef);
@@ -4287,6 +4384,43 @@ function populateRefs(statements) {
4287
4384
  });
4288
4385
  }
4289
4386
  }
4387
+ function processPartialPlaceholders(statements) {
4388
+ const partialMap = /* @__PURE__ */ new Map();
4389
+ gatherRecursiveAll(statements, ($3) => $3.type === "PartialPlaceholder").forEach((_exp) => {
4390
+ const exp = _exp;
4391
+ let { ancestor } = findAncestor(exp, ($4) => $4?.type === "Call");
4392
+ ancestor = ancestor?.parent;
4393
+ while (ancestor?.parent?.type === "UnaryExpression") {
4394
+ ancestor = ancestor.parent;
4395
+ }
4396
+ if (ancestor) {
4397
+ if (partialMap.has(ancestor)) {
4398
+ return partialMap.get(ancestor).push(exp);
4399
+ } else {
4400
+ return partialMap.set(ancestor, [exp]);
4401
+ }
4402
+ } else {
4403
+ return replaceNode(exp, {
4404
+ type: "Error",
4405
+ message: "Partial placeholder outside of call expression",
4406
+ parent: exp.parent
4407
+ });
4408
+ }
4409
+ });
4410
+ for (const [ancestor, placeholders] of partialMap) {
4411
+ let ref = makeRef("$");
4412
+ placeholders.forEach((exp) => {
4413
+ return replaceNode(exp.children.at(-1), ref);
4414
+ });
4415
+ const rhs = {
4416
+ ref,
4417
+ children: [ancestor]
4418
+ };
4419
+ const fnExp = makeAmpersandFunctionExpression([], rhs);
4420
+ replaceNode(ancestor, fnExp);
4421
+ }
4422
+ return;
4423
+ }
4290
4424
  function reorderBindingRestProperty(props) {
4291
4425
  const names = props.flatMap((p) => p.names);
4292
4426
  let restIndex = -1;
@@ -4997,11 +5131,11 @@ var require_parser = __commonJS({
4997
5131
  WRHS,
4998
5132
  SingleLineBinaryOpRHS,
4999
5133
  RHS,
5000
- ParenthesizedAssignment,
5001
5134
  UnaryExpression,
5002
5135
  UnaryWithoutParenthesizedAssignment,
5003
5136
  UnaryBody,
5004
5137
  UnaryWithoutParenthesizedAssignmentBody,
5138
+ ParenthesizedAssignment,
5005
5139
  UnaryPostfix,
5006
5140
  TypePostfix,
5007
5141
  Tuple,
@@ -5029,6 +5163,7 @@ var require_parser = __commonJS({
5029
5163
  PipelineTailItem,
5030
5164
  PrimaryExpression,
5031
5165
  ParenthesizedExpression,
5166
+ PartialPlaceholder,
5032
5167
  ClassDeclaration,
5033
5168
  ClassExpression,
5034
5169
  ClassBinding,
@@ -5073,6 +5208,7 @@ var require_parser = __commonJS({
5073
5208
  MemberBracketContent,
5074
5209
  SliceParameters,
5075
5210
  AccessStart,
5211
+ ImplicitAccessStart,
5076
5212
  PropertyAccessModifier,
5077
5213
  PropertyAccess,
5078
5214
  PropertyGlob,
@@ -5207,6 +5343,7 @@ var require_parser = __commonJS({
5207
5343
  BinaryOp,
5208
5344
  _BinaryOp,
5209
5345
  BinaryOpSymbol,
5346
+ ActualIn,
5210
5347
  CoffeeOfOp,
5211
5348
  NotOp,
5212
5349
  Xor,
@@ -5487,6 +5624,7 @@ var require_parser = __commonJS({
5487
5624
  TripleTick,
5488
5625
  Try,
5489
5626
  Typeof,
5627
+ Undefined,
5490
5628
  Unless,
5491
5629
  Until,
5492
5630
  Using,
@@ -5887,123 +6025,126 @@ var require_parser = __commonJS({
5887
6025
  var $L199 = $L("```");
5888
6026
  var $L200 = $L("try");
5889
6027
  var $L201 = $L("typeof");
5890
- var $L202 = $L("unless");
5891
- var $L203 = $L("until");
5892
- var $L204 = $L("using");
5893
- var $L205 = $L("var");
5894
- var $L206 = $L("void");
5895
- var $L207 = $L("when");
5896
- var $L208 = $L("while");
5897
- var $L209 = $L("yield");
5898
- var $L210 = $L("/>");
5899
- var $L211 = $L("</");
5900
- var $L212 = $L("<>");
5901
- var $L213 = $L("</>");
5902
- var $L214 = $L("<!--");
5903
- var $L215 = $L("-->");
5904
- var $L216 = $L("type");
5905
- var $L217 = $L("enum");
5906
- var $L218 = $L("interface");
5907
- var $L219 = $L("global");
5908
- var $L220 = $L("module");
5909
- var $L221 = $L("namespace");
5910
- var $L222 = $L("asserts");
5911
- var $L223 = $L("keyof");
5912
- var $L224 = $L("???");
5913
- var $L225 = $L("[]");
5914
- var $L226 = $L("civet");
6028
+ var $L202 = $L("undefined");
6029
+ var $L203 = $L("unless");
6030
+ var $L204 = $L("until");
6031
+ var $L205 = $L("using");
6032
+ var $L206 = $L("var");
6033
+ var $L207 = $L("void");
6034
+ var $L208 = $L("when");
6035
+ var $L209 = $L("while");
6036
+ var $L210 = $L("yield");
6037
+ var $L211 = $L("/>");
6038
+ var $L212 = $L("</");
6039
+ var $L213 = $L("<>");
6040
+ var $L214 = $L("</>");
6041
+ var $L215 = $L("<!--");
6042
+ var $L216 = $L("-->");
6043
+ var $L217 = $L("type");
6044
+ var $L218 = $L("enum");
6045
+ var $L219 = $L("interface");
6046
+ var $L220 = $L("global");
6047
+ var $L221 = $L("module");
6048
+ var $L222 = $L("namespace");
6049
+ var $L223 = $L("asserts");
6050
+ var $L224 = $L("keyof");
6051
+ var $L225 = $L("???");
6052
+ var $L226 = $L("[]");
6053
+ var $L227 = $L("civet");
5915
6054
  var $R0 = $R(new RegExp("(?=async|debugger|if|unless|do|for|loop|until|while|switch|throw|try)", "suy"));
5916
6055
  var $R1 = $R(new RegExp("(as|of|satisfies|then|when|implements|xor|xnor)(?!\\p{ID_Continue}|[\\u200C\\u200D$])", "suy"));
5917
6056
  var $R2 = $R(new RegExp("[0-9]", "suy"));
5918
6057
  var $R3 = $R(new RegExp("(?!\\p{ID_Start}|[_$0-9(\\[{])", "suy"));
5919
6058
  var $R4 = $R(new RegExp("[ \\t]", "suy"));
5920
- var $R5 = $R(new RegExp("(?=['\"`])", "suy"));
5921
- var $R6 = $R(new RegExp("(?=[\\/?])", "suy"));
5922
- var $R7 = $R(new RegExp("(?=[\\/\\[{?.!@'\u2019:])", "suy"));
5923
- var $R8 = $R(new RegExp("[)}]", "suy"));
5924
- var $R9 = $R(new RegExp("\\+\\+|--|[\\+-]\\S", "suy"));
5925
- var $R10 = $R(new RegExp("[&]", "suy"));
5926
- var $R11 = $R(new RegExp(`(?=[0-9.'"tfyno])`, "suy"));
5927
- var $R12 = $R(new RegExp("(?=true|false|yes|no|on|off)", "suy"));
5928
- var $R13 = $R(new RegExp("(?=\\p{ID_Start}|[_$])", "suy"));
5929
- var $R14 = $R(new RegExp("(?:\\p{ID_Start}|[_$])(?:\\p{ID_Continue}|[\\u200C\\u200D$])*", "suy"));
5930
- var $R15 = $R(new RegExp("(?=\\[)", "suy"));
5931
- var $R16 = $R(new RegExp("[!+-]?", "suy"));
5932
- var $R17 = $R(new RegExp("[+-]", "suy"));
5933
- var $R18 = $R(new RegExp("(?=\\p{ID_Start}|[_$^\xAB\xBB\u22D9\u2264\u2265\u2208\u220B\u2209\u220C\u2263\u2261\u2262\u2260=\u2016\u2047&|*\\/!?%<>\u29FA+-])", "suy"));
5934
- var $R19 = $R(new RegExp("!\\^\\^?", "suy"));
5935
- var $R20 = $R(new RegExp("(?!\\+\\+|--)[!~+-](?!\\s)", "suy"));
5936
- var $R21 = $R(new RegExp("[:.]", "suy"));
5937
- var $R22 = $R(new RegExp("(?=for|if|loop|unless|until|while)", "suy"));
5938
- var $R23 = $R(new RegExp("(?=loop|do|for|until|while)", "suy"));
5939
- var $R24 = $R(new RegExp("(?=[\\s\\),])", "suy"));
5940
- var $R25 = $R(new RegExp('[^;"\\s]+', "suy"));
5941
- var $R26 = $R(new RegExp("(?=[0-9.])", "suy"));
5942
- var $R27 = $R(new RegExp("(?:0|[1-9](?:_[0-9]|[0-9])*)n", "suy"));
5943
- var $R28 = $R(new RegExp("(?:0|[1-9](?:_[0-9]|[0-9])*)(?=\\.(?:\\p{ID_Start}|[_$]))", "suy"));
5944
- var $R29 = $R(new RegExp("(?:0|[1-9](?:_[0-9]|[0-9])*)(?:\\.(?:[0-9](?:_[0-9]|[0-9])*))?", "suy"));
5945
- var $R30 = $R(new RegExp("(?:\\.[0-9](?:_[0-9]|[0-9])*)", "suy"));
5946
- var $R31 = $R(new RegExp("(?:[eE][+-]?[0-9]+(?:_[0-9]|[0-9])*)", "suy"));
5947
- var $R32 = $R(new RegExp("0[bB][01](?:[01]|_[01])*n?", "suy"));
5948
- var $R33 = $R(new RegExp("0[oO][0-7](?:[0-7]|_[0-7])*n?", "suy"));
5949
- var $R34 = $R(new RegExp("0[xX][0-9a-fA-F](?:[0-9a-fA-F]|_[0-9a-fA-F])*n?", "suy"));
5950
- var $R35 = $R(new RegExp("(?=[0-9])", "suy"));
5951
- var $R36 = $R(new RegExp("(?:0|[1-9](?:_[0-9]|[0-9])*)", "suy"));
5952
- var $R37 = $R(new RegExp('(?:\\\\.|[^"])*', "suy"));
5953
- var $R38 = $R(new RegExp("(?:\\\\.|[^'])*", "suy"));
5954
- var $R39 = $R(new RegExp('(?:"(?!"")|#(?!\\{)|\\\\.|[^#"])+', "suy"));
5955
- var $R40 = $R(new RegExp("(?:'(?!'')|\\\\.|[^'])*", "suy"));
5956
- var $R41 = $R(new RegExp('(?:\\\\.|#(?!\\{)|[^"#])+', "suy"));
5957
- var $R42 = $R(new RegExp("(?:\\\\.|[^\\]])*", "suy"));
5958
- var $R43 = $R(new RegExp("(?:\\\\.)", "suy"));
5959
- var $R44 = $R(new RegExp("[\\s]+", "suy"));
5960
- var $R45 = $R(new RegExp("\\/(?!\\/\\/)", "suy"));
5961
- var $R46 = $R(new RegExp("[^[\\/\\s#\\\\]+", "suy"));
5962
- var $R47 = $R(new RegExp("[*\\/\\r\\n]", "suy"));
5963
- var $R48 = $R(new RegExp("(?:\\\\.|[^[\\/\\r\\n])+", "suy"));
5964
- var $R49 = $R(new RegExp("(?:\\p{ID_Continue}|[\\u200C\\u200D$])*", "suy"));
5965
- var $R50 = $R(new RegExp("(?=[`'\"])", "suy"));
5966
- var $R51 = $R(new RegExp("(?:\\$(?!\\{)|\\\\.|[^$`])+", "suy"));
5967
- var $R52 = $R(new RegExp("(?:\\$(?!\\{)|`(?!``)|\\\\.|[^$`])+", "suy"));
5968
- var $R53 = $R(new RegExp("(?:on|off|yes|no)(?!\\p{ID_Continue})", "suy"));
5969
- var $R54 = $R(new RegExp("(?:isnt)(?!\\p{ID_Continue})", "suy"));
5970
- var $R55 = $R(new RegExp("(?:by)(?!\\p{ID_Continue})", "suy"));
5971
- var $R56 = $R(new RegExp("(?:of)(?!\\p{ID_Continue})", "suy"));
5972
- var $R57 = $R(new RegExp("(?:and|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|let|loop|new|not|null|or|private|protected|public|return|static|super|switch|this|throw|true|try|typeof|unless|until|var|void|while|with|yield)(?!\\p{ID_Continue})", "suy"));
5973
- var $R58 = $R(new RegExp("(?=\\/|#)", "suy"));
5974
- var $R59 = $R(new RegExp("\\/\\/(?!\\/)[^\\r\\n]*", "suy"));
5975
- var $R60 = $R(new RegExp(".", "suy"));
5976
- var $R61 = $R(new RegExp("#(?!##(?!#))([^\\r\\n]*)", "suy"));
5977
- var $R62 = $R(new RegExp("[^]*?###", "suy"));
5978
- var $R63 = $R(new RegExp("###(?!#)", "suy"));
5979
- var $R64 = $R(new RegExp("\\/\\*(?:(?!\\*\\/)[^\\r\\n])*\\*\\/", "suy"));
5980
- var $R65 = $R(new RegExp("(?=[ \\t\\/\\\\])", "suy"));
5981
- var $R66 = $R(new RegExp("[ \\t]+", "suy"));
5982
- var $R67 = $R(new RegExp("(?=\\s|\\/|#)", "suy"));
5983
- var $R68 = $R(new RegExp("(?!\\p{ID_Continue})", "suy"));
5984
- var $R69 = $R(new RegExp("['\u2019]s", "suy"));
5985
- var $R70 = $R(new RegExp("\\s", "suy"));
5986
- var $R71 = $R(new RegExp("(?=[<])", "suy"));
5987
- var $R72 = $R(new RegExp("(?:\\p{ID_Start}|[_$])(?:\\p{ID_Continue}|[\\u200C\\u200D$-])*", "suy"));
5988
- var $R73 = $R(new RegExp("[!+-]", "suy"));
5989
- var $R74 = $R(new RegExp("[\\s>]|\\/>", "suy"));
5990
- var $R75 = $R(new RegExp("(?:[\\w\\-:]+|\\([^()]*\\)|\\[[^\\[\\]]*\\])+", "suy"));
5991
- var $R76 = $R(new RegExp(`"[^"]*"|'[^']*'`, "suy"));
5992
- var $R77 = $R(new RegExp("[<>]", "suy"));
5993
- var $R78 = $R(new RegExp("[!~+-](?!\\s|[!~+-]*&)", "suy"));
5994
- var $R79 = $R(new RegExp("(?:-[^-]|[^-]*)*", "suy"));
5995
- var $R80 = $R(new RegExp("[^{}<>\\r\\n]+", "suy"));
5996
- var $R81 = $R(new RegExp("[+-]?", "suy"));
5997
- var $R82 = $R(new RegExp("(?=if|unless)", "suy"));
5998
- var $R83 = $R(new RegExp("#![^\\r\\n]*", "suy"));
5999
- var $R84 = $R(new RegExp("[\\t ]*", "suy"));
6000
- var $R85 = $R(new RegExp("[ \\t]*", "suy"));
6001
- var $R86 = $R(new RegExp("[\\s]*", "suy"));
6002
- var $R87 = $R(new RegExp("\\s+([+-]?)([a-zA-Z0-9-]+)(\\s*=\\s*([a-zA-Z0-9.+-]*))?", "suy"));
6003
- var $R88 = $R(new RegExp("\\/\\/\\/[^\\r\\n]*", "suy"));
6004
- var $R89 = $R(new RegExp("(?=[ \\t\\r\\n\\/#]|$)", "suy"));
6005
- var $R90 = $R(new RegExp("\\r\\n|\\n|\\r|$", "suy"));
6006
- var $R91 = $R(new RegExp("[^]*", "suy"));
6059
+ var $R5 = $R(new RegExp("(?:\\p{ID_Continue}|[\\u200C\\u200D$.])", "suy"));
6060
+ var $R6 = $R(new RegExp("(?=['\"`])", "suy"));
6061
+ var $R7 = $R(new RegExp("(?=[\\/?])", "suy"));
6062
+ var $R8 = $R(new RegExp("(?=[\\/\\[{?.!@#'\u2019:])", "suy"));
6063
+ var $R9 = $R(new RegExp("[)}]", "suy"));
6064
+ var $R10 = $R(new RegExp("[+-]", "suy"));
6065
+ var $R11 = $R(new RegExp("\\+\\+|--|[\\+-]\\S", "suy"));
6066
+ var $R12 = $R(new RegExp("[&]", "suy"));
6067
+ var $R13 = $R(new RegExp(`(?=[0-9.'"tfyno])`, "suy"));
6068
+ var $R14 = $R(new RegExp("(?=true|false|yes|no|on|off)", "suy"));
6069
+ var $R15 = $R(new RegExp("(?=\\p{ID_Start}|[_$])", "suy"));
6070
+ var $R16 = $R(new RegExp("(?:\\p{ID_Start}|[_$])(?:\\p{ID_Continue}|[\\u200C\\u200D$])*", "suy"));
6071
+ var $R17 = $R(new RegExp("(?=\\[)", "suy"));
6072
+ var $R18 = $R(new RegExp("[!+-]?", "suy"));
6073
+ var $R19 = $R(new RegExp("(?=\\p{ID_Start}|[_$^\xAB\xBB\u22D9\u2264\u2265\u2208\u220B\u2209\u220C\u2263\u2261\u2262\u2260=\u2016\u2047&|*\\/!?%<>\u29FA+-])", "suy"));
6074
+ var $R20 = $R(new RegExp("!\\^\\^?", "suy"));
6075
+ var $R21 = $R(new RegExp("(?!\\+\\+|--)[!~+-](?!\\s)", "suy"));
6076
+ var $R22 = $R(new RegExp("[:.]", "suy"));
6077
+ var $R23 = $R(new RegExp("(?=for|if|loop|unless|until|while)", "suy"));
6078
+ var $R24 = $R(new RegExp("(?=loop|do|for|until|while)", "suy"));
6079
+ var $R25 = $R(new RegExp("(?=[\\s\\),])", "suy"));
6080
+ var $R26 = $R(new RegExp('[^;"\\s]+', "suy"));
6081
+ var $R27 = $R(new RegExp("(?=[0-9.])", "suy"));
6082
+ var $R28 = $R(new RegExp("(?:0|[1-9](?:_[0-9]|[0-9])*)n", "suy"));
6083
+ var $R29 = $R(new RegExp("(?:0|[1-9](?:_[0-9]|[0-9])*)(?=\\.(?:\\p{ID_Start}|[_$]))", "suy"));
6084
+ var $R30 = $R(new RegExp("(?:0|[1-9](?:_[0-9]|[0-9])*)(?:\\.(?:[0-9](?:_[0-9]|[0-9])*))?", "suy"));
6085
+ var $R31 = $R(new RegExp("(?:\\.[0-9](?:_[0-9]|[0-9])*)", "suy"));
6086
+ var $R32 = $R(new RegExp("(?:[eE][+-]?[0-9]+(?:_[0-9]|[0-9])*)", "suy"));
6087
+ var $R33 = $R(new RegExp("0[bB][01](?:[01]|_[01])*n?", "suy"));
6088
+ var $R34 = $R(new RegExp("0[oO][0-7](?:[0-7]|_[0-7])*n?", "suy"));
6089
+ var $R35 = $R(new RegExp("0[xX][0-9a-fA-F](?:[0-9a-fA-F]|_[0-9a-fA-F])*n?", "suy"));
6090
+ var $R36 = $R(new RegExp("(?=[0-9])", "suy"));
6091
+ var $R37 = $R(new RegExp("(?:0|[1-9](?:_[0-9]|[0-9])*)", "suy"));
6092
+ var $R38 = $R(new RegExp('(?:\\\\.|[^"])*', "suy"));
6093
+ var $R39 = $R(new RegExp("(?:\\\\.|[^'])*", "suy"));
6094
+ var $R40 = $R(new RegExp('(?:"(?!"")|#(?!\\{)|\\\\.|[^#"])+', "suy"));
6095
+ var $R41 = $R(new RegExp("(?:'(?!'')|\\\\.|[^'])*", "suy"));
6096
+ var $R42 = $R(new RegExp('(?:\\\\.|#(?!\\{)|[^"#])+', "suy"));
6097
+ var $R43 = $R(new RegExp("(?:\\\\.|[^\\]])*", "suy"));
6098
+ var $R44 = $R(new RegExp("(?:\\\\.)", "suy"));
6099
+ var $R45 = $R(new RegExp("[\\s]+", "suy"));
6100
+ var $R46 = $R(new RegExp("\\/(?!\\/\\/)", "suy"));
6101
+ var $R47 = $R(new RegExp("[^[\\/\\s#\\\\]+", "suy"));
6102
+ var $R48 = $R(new RegExp("[*\\/\\r\\n]", "suy"));
6103
+ var $R49 = $R(new RegExp("(?:\\\\.|[^[\\/\\r\\n])+", "suy"));
6104
+ var $R50 = $R(new RegExp("(?:\\p{ID_Continue}|[\\u200C\\u200D$])*", "suy"));
6105
+ var $R51 = $R(new RegExp("(?=[`'\"])", "suy"));
6106
+ var $R52 = $R(new RegExp("(?:\\$(?!\\{)|\\\\.|[^$`])+", "suy"));
6107
+ var $R53 = $R(new RegExp("(?:\\$(?!\\{)|`(?!``)|\\\\.|[^$`])+", "suy"));
6108
+ var $R54 = $R(new RegExp("(?:on|off|yes|no)(?!\\p{ID_Continue})", "suy"));
6109
+ var $R55 = $R(new RegExp("(?:isnt)(?!\\p{ID_Continue})", "suy"));
6110
+ var $R56 = $R(new RegExp("(?:by)(?!\\p{ID_Continue})", "suy"));
6111
+ var $R57 = $R(new RegExp("(?:of)(?!\\p{ID_Continue})", "suy"));
6112
+ var $R58 = $R(new RegExp("(?:and|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|let|loop|new|not|null|or|private|protected|public|return|static|super|switch|this|throw|true|try|typeof|unless|until|var|void|while|with|yield)(?!\\p{ID_Continue})", "suy"));
6113
+ var $R59 = $R(new RegExp("(?=\\/|#)", "suy"));
6114
+ var $R60 = $R(new RegExp("\\/\\/(?!\\/)[^\\r\\n]*", "suy"));
6115
+ var $R61 = $R(new RegExp(".", "suy"));
6116
+ var $R62 = $R(new RegExp("#(?!##(?!#))([^\\r\\n]*)", "suy"));
6117
+ var $R63 = $R(new RegExp("[^]*?###", "suy"));
6118
+ var $R64 = $R(new RegExp("###(?!#)", "suy"));
6119
+ var $R65 = $R(new RegExp("\\/\\*(?:(?!\\*\\/)[^\\r\\n])*\\*\\/", "suy"));
6120
+ var $R66 = $R(new RegExp("(?=[ \\t\\/\\\\])", "suy"));
6121
+ var $R67 = $R(new RegExp("[ \\t]+", "suy"));
6122
+ var $R68 = $R(new RegExp("(?=\\s|\\/|#)", "suy"));
6123
+ var $R69 = $R(new RegExp("(?!\\p{ID_Continue})", "suy"));
6124
+ var $R70 = $R(new RegExp("[=:]", "suy"));
6125
+ var $R71 = $R(new RegExp("['\u2019]s", "suy"));
6126
+ var $R72 = $R(new RegExp("\\s", "suy"));
6127
+ var $R73 = $R(new RegExp("(?=[<])", "suy"));
6128
+ var $R74 = $R(new RegExp("(?:\\p{ID_Start}|[_$])(?:\\p{ID_Continue}|[\\u200C\\u200D$-])*", "suy"));
6129
+ var $R75 = $R(new RegExp("[!+-]", "suy"));
6130
+ var $R76 = $R(new RegExp("[\\s>]|\\/>", "suy"));
6131
+ var $R77 = $R(new RegExp("(?:[\\w\\-:]+|\\([^()]*\\)|\\[[^\\[\\]]*\\])+", "suy"));
6132
+ var $R78 = $R(new RegExp(`"[^"]*"|'[^']*'`, "suy"));
6133
+ var $R79 = $R(new RegExp("[<>]", "suy"));
6134
+ var $R80 = $R(new RegExp("[!~+-](?!\\s|[!~+-]*&)", "suy"));
6135
+ var $R81 = $R(new RegExp("(?:-[^-]|[^-]*)*", "suy"));
6136
+ var $R82 = $R(new RegExp("[^{}<>\\r\\n]+", "suy"));
6137
+ var $R83 = $R(new RegExp("[+-]?", "suy"));
6138
+ var $R84 = $R(new RegExp("(?=if|unless)", "suy"));
6139
+ var $R85 = $R(new RegExp("#![^\\r\\n]*", "suy"));
6140
+ var $R86 = $R(new RegExp("[\\t ]*", "suy"));
6141
+ var $R87 = $R(new RegExp("[ \\t]*", "suy"));
6142
+ var $R88 = $R(new RegExp("[\\s]*", "suy"));
6143
+ var $R89 = $R(new RegExp("\\s+([+-]?)([a-zA-Z0-9-]+)(\\s*=\\s*([a-zA-Z0-9.+-]*))?", "suy"));
6144
+ var $R90 = $R(new RegExp("\\/\\/\\/[^\\r\\n]*", "suy"));
6145
+ var $R91 = $R(new RegExp("(?=[ \\t\\r\\n\\/#]|$)", "suy"));
6146
+ var $R92 = $R(new RegExp("\\r\\n|\\n|\\r|$", "suy"));
6147
+ var $R93 = $R(new RegExp("[^]*", "suy"));
6007
6148
  var Program$0 = $TS($S(Reset, Init, $E(EOS), TopLevelStatements, __), function($skip, $loc, $0, $1, $2, $3, $4, $5) {
6008
6149
  var statements = $4;
6009
6150
  processProgram({
@@ -6416,17 +6557,12 @@ var require_parser = __commonJS({
6416
6557
  function SingleLineBinaryOpRHS(ctx, state) {
6417
6558
  return $EVENT(ctx, state, "SingleLineBinaryOpRHS", SingleLineBinaryOpRHS$0);
6418
6559
  }
6419
- var RHS$0 = ParenthesizedAssignment;
6420
- var RHS$1 = UnaryExpression;
6421
- var RHS$2 = ExpressionizedStatementWithTrailingCallExpressions;
6422
- var RHS$$ = [RHS$0, RHS$1, RHS$2];
6560
+ var RHS$0 = UnaryExpression;
6561
+ var RHS$1 = ExpressionizedStatementWithTrailingCallExpressions;
6562
+ var RHS$$ = [RHS$0, RHS$1];
6423
6563
  function RHS(ctx, state) {
6424
6564
  return $EVENT_C(ctx, state, "RHS", RHS$$);
6425
6565
  }
6426
- var ParenthesizedAssignment$0 = $S(InsertOpenParen, ActualAssignment, InsertCloseParen);
6427
- function ParenthesizedAssignment(ctx, state) {
6428
- return $EVENT(ctx, state, "ParenthesizedAssignment", ParenthesizedAssignment$0);
6429
- }
6430
6566
  var UnaryExpression$0 = AmpersandFunctionExpression;
6431
6567
  var UnaryExpression$1 = $TS($S($Q(UnaryOp), UnaryBody, $E(UnaryPostfix)), function($skip, $loc, $0, $1, $2, $3) {
6432
6568
  var pre = $1;
@@ -6468,6 +6604,10 @@ var require_parser = __commonJS({
6468
6604
  function UnaryWithoutParenthesizedAssignmentBody(ctx, state) {
6469
6605
  return $EVENT_C(ctx, state, "UnaryWithoutParenthesizedAssignmentBody", UnaryWithoutParenthesizedAssignmentBody$$);
6470
6606
  }
6607
+ var ParenthesizedAssignment$0 = $S(InsertOpenParen, $C(ActualAssignment, ArrowFunction), InsertCloseParen);
6608
+ function ParenthesizedAssignment(ctx, state) {
6609
+ return $EVENT(ctx, state, "ParenthesizedAssignment", ParenthesizedAssignment$0);
6610
+ }
6471
6611
  var UnaryPostfix$0 = QuestionMark;
6472
6612
  var UnaryPostfix$1 = $P(TypePostfix);
6473
6613
  var UnaryPostfix$$ = [UnaryPostfix$0, UnaryPostfix$1];
@@ -6780,8 +6920,9 @@ var require_parser = __commonJS({
6780
6920
  var PrimaryExpression$7 = ClassExpression;
6781
6921
  var PrimaryExpression$8 = RegularExpressionLiteral;
6782
6922
  var PrimaryExpression$9 = ParenthesizedExpression;
6783
- var PrimaryExpression$10 = JSXImplicitFragment;
6784
- var PrimaryExpression$$ = [PrimaryExpression$0, PrimaryExpression$1, PrimaryExpression$2, PrimaryExpression$3, PrimaryExpression$4, PrimaryExpression$5, PrimaryExpression$6, PrimaryExpression$7, PrimaryExpression$8, PrimaryExpression$9, PrimaryExpression$10];
6923
+ var PrimaryExpression$10 = PartialPlaceholder;
6924
+ var PrimaryExpression$11 = JSXImplicitFragment;
6925
+ var PrimaryExpression$$ = [PrimaryExpression$0, PrimaryExpression$1, PrimaryExpression$2, PrimaryExpression$3, PrimaryExpression$4, PrimaryExpression$5, PrimaryExpression$6, PrimaryExpression$7, PrimaryExpression$8, PrimaryExpression$9, PrimaryExpression$10, PrimaryExpression$11];
6785
6926
  function PrimaryExpression(ctx, state) {
6786
6927
  return $EVENT_C(ctx, state, "PrimaryExpression", PrimaryExpression$$);
6787
6928
  }
@@ -6815,6 +6956,16 @@ var require_parser = __commonJS({
6815
6956
  function ParenthesizedExpression(ctx, state) {
6816
6957
  return $EVENT(ctx, state, "ParenthesizedExpression", ParenthesizedExpression$0);
6817
6958
  }
6959
+ var PartialPlaceholder$0 = $TS($S(Dot, $N($EXPECT($R5, "PartialPlaceholder /(?:\\p{ID_Continue}|[\\u200C\\u200D$.])/"))), function($skip, $loc, $0, $1, $2) {
6960
+ var dot = $1;
6961
+ return {
6962
+ type: "PartialPlaceholder",
6963
+ children: [dot]
6964
+ };
6965
+ });
6966
+ function PartialPlaceholder(ctx, state) {
6967
+ return $EVENT(ctx, state, "PartialPlaceholder", PartialPlaceholder$0);
6968
+ }
6818
6969
  var ClassDeclaration$0 = $TS($S(ClassExpression), function($skip, $loc, $0, $1) {
6819
6970
  if ($1.id)
6820
6971
  return $1;
@@ -7119,7 +7270,8 @@ var require_parser = __commonJS({
7119
7270
  return $EVENT_C(ctx, state, "FieldDefinition", FieldDefinition$$);
7120
7271
  }
7121
7272
  var ThisLiteral$0 = This;
7122
- var ThisLiteral$1 = $TS($S(AtThis, $TEXT($S($E(Hash), IdentifierName))), function($skip, $loc, $0, $1, $2) {
7273
+ var ThisLiteral$1 = HashThis;
7274
+ var ThisLiteral$2 = $TS($S(AtThis, $TEXT($S($E(Hash), IdentifierName))), function($skip, $loc, $0, $1, $2) {
7123
7275
  var at = $1;
7124
7276
  var id = $2;
7125
7277
  return {
@@ -7132,20 +7284,20 @@ var require_parser = __commonJS({
7132
7284
  thisShorthand: true
7133
7285
  };
7134
7286
  });
7135
- var ThisLiteral$2 = AtThis;
7136
- var ThisLiteral$3 = HashThis;
7287
+ var ThisLiteral$3 = AtThis;
7137
7288
  var ThisLiteral$$ = [ThisLiteral$0, ThisLiteral$1, ThisLiteral$2, ThisLiteral$3];
7138
7289
  function ThisLiteral(ctx, state) {
7139
7290
  return $EVENT_C(ctx, state, "ThisLiteral", ThisLiteral$$);
7140
7291
  }
7141
- var HashThis$0 = $TS($S(LengthShorthand, $E($S($Y($S($P(_), $C($S(Not, __, In), In))), $EXPECT($L0, 'HashThis ""')))), function($skip, $loc, $0, $1, $2) {
7142
- var id = $1;
7143
- var beforeIn = $2;
7144
- if (beforeIn != null)
7292
+ var HashThis$0 = $TS($S($E(AtThis), LengthShorthand, $E($S($Y($S(_, $E($S(Not, __)), ActualIn)), $EXPECT($L0, 'HashThis ""')))), function($skip, $loc, $0, $1, $2, $3) {
7293
+ var at = $1;
7294
+ var id = $2;
7295
+ var beforeIn = $3;
7296
+ if (beforeIn != null && at == null)
7145
7297
  return ['"', id.name, '"'];
7146
7298
  return {
7147
7299
  type: "MemberExpression",
7148
- children: ["this", {
7300
+ children: [at ?? "this", {
7149
7301
  type: "PropertyAccess",
7150
7302
  name: id.name,
7151
7303
  children: [".", id]
@@ -7153,7 +7305,7 @@ var require_parser = __commonJS({
7153
7305
  thisShorthand: true
7154
7306
  };
7155
7307
  });
7156
- var HashThis$1 = $TS($S(PrivateIdentifier, $Y($S($P(_), $C($S(Not, __, In), In)))), function($skip, $loc, $0, $1, $2) {
7308
+ var HashThis$1 = $TS($S(PrivateIdentifier, $Y($S(_, $E($S(Not, __)), ActualIn))), function($skip, $loc, $0, $1, $2) {
7157
7309
  var id = $1;
7158
7310
  return id;
7159
7311
  });
@@ -7247,7 +7399,7 @@ var require_parser = __commonJS({
7247
7399
  var CallExpressionRest$1 = $T($S(TypeArguments, $N($C(IdentifierName, NumericLiteral))), function(value) {
7248
7400
  return value[0];
7249
7401
  });
7250
- var CallExpressionRest$2 = $TS($S($EXPECT($R5, "CallExpressionRest /(?=['\"`])/"), $C(TemplateLiteral, StringLiteral)), function($skip, $loc, $0, $1, $2) {
7402
+ var CallExpressionRest$2 = $TS($S($EXPECT($R6, "CallExpressionRest /(?=['\"`])/"), $C(TemplateLiteral, StringLiteral)), function($skip, $loc, $0, $1, $2) {
7251
7403
  var literal = $2;
7252
7404
  if (literal.type === "StringLiteral") {
7253
7405
  literal = "`" + literal.token.slice(1, -1).replace(/(`|\$\{)/g, "\\$1") + "`";
@@ -7270,7 +7422,7 @@ var require_parser = __commonJS({
7270
7422
  function CallExpressionRest(ctx, state) {
7271
7423
  return $EVENT_C(ctx, state, "CallExpressionRest", CallExpressionRest$$);
7272
7424
  }
7273
- var OptionalShorthand$0 = $TS($S($EXPECT($R6, "OptionalShorthand /(?=[\\/?])/"), $Q(InlineComment), QuestionMark, OptionalDot), function($skip, $loc, $0, $1, $2, $3, $4) {
7425
+ var OptionalShorthand$0 = $TS($S($EXPECT($R7, "OptionalShorthand /(?=[\\/?])/"), $Q(InlineComment), QuestionMark, OptionalDot), function($skip, $loc, $0, $1, $2, $3, $4) {
7274
7426
  var comments = $2;
7275
7427
  var q = $3;
7276
7428
  var d = $4;
@@ -7324,7 +7476,7 @@ var require_parser = __commonJS({
7324
7476
  function MemberBase(ctx, state) {
7325
7477
  return $EVENT_C(ctx, state, "MemberBase", MemberBase$$);
7326
7478
  }
7327
- var MemberExpressionRest$0 = $TS($S($EXPECT($R7, "MemberExpressionRest /(?=[\\/\\[{?.!@'\u2019:])/"), $Q(InlineComment), MemberExpressionRestBody), function($skip, $loc, $0, $1, $2, $3) {
7479
+ var MemberExpressionRest$0 = $TS($S($EXPECT($R8, "MemberExpressionRest /(?=[\\/\\[{?.!@#'\u2019:])/"), $Q(InlineComment), MemberExpressionRestBody), function($skip, $loc, $0, $1, $2, $3) {
7328
7480
  var comments = $2;
7329
7481
  var body = $3;
7330
7482
  if (Array.isArray(body))
@@ -7457,16 +7609,27 @@ var require_parser = __commonJS({
7457
7609
  var AccessStart$0 = $TS($S($E(PropertyAccessModifier), Dot, $N(Dot)), function($skip, $loc, $0, $1, $2, $3) {
7458
7610
  var modifier = $1;
7459
7611
  var dot = $2;
7460
- let children = modifier ? [modifier, dot] : [dot];
7461
7612
  return {
7462
7613
  type: "AccessStart",
7463
- children,
7614
+ children: modifier ? [modifier, dot] : [dot],
7464
7615
  optional: modifier?.token === "?"
7465
7616
  };
7466
7617
  });
7467
7618
  function AccessStart(ctx, state) {
7468
7619
  return $EVENT(ctx, state, "AccessStart", AccessStart$0);
7469
7620
  }
7621
+ var ImplicitAccessStart$0 = $TS($S($E(PropertyAccessModifier), InsertDot, $N(Dot)), function($skip, $loc, $0, $1, $2, $3) {
7622
+ var modifier = $1;
7623
+ var dot = $2;
7624
+ return {
7625
+ type: "AccessStart",
7626
+ children: modifier ? [modifier, dot] : [dot],
7627
+ optional: modifier?.token === "?"
7628
+ };
7629
+ });
7630
+ function ImplicitAccessStart(ctx, state) {
7631
+ return $EVENT(ctx, state, "ImplicitAccessStart", ImplicitAccessStart$0);
7632
+ }
7470
7633
  var PropertyAccessModifier$0 = QuestionMark;
7471
7634
  var PropertyAccessModifier$1 = NonNullAssertion;
7472
7635
  var PropertyAccessModifier$$ = [PropertyAccessModifier$0, PropertyAccessModifier$1];
@@ -7508,15 +7671,24 @@ var require_parser = __commonJS({
7508
7671
  var dot = $1;
7509
7672
  var comments = $2;
7510
7673
  var id = $3;
7511
- const children = [dot, ...comments, ...id.children];
7512
7674
  return {
7513
7675
  type: "PropertyAccess",
7514
7676
  name: id.name,
7515
7677
  dot,
7516
- children
7678
+ children: [dot, ...comments, ...id.children]
7679
+ };
7680
+ });
7681
+ var PropertyAccess$3 = $TS($S(ImplicitAccessStart, $C(PrivateIdentifier, LengthShorthand)), function($skip, $loc, $0, $1, $2) {
7682
+ var dot = $1;
7683
+ var id = $2;
7684
+ return {
7685
+ type: "PropertyAccess",
7686
+ name: id.name,
7687
+ dot,
7688
+ children: [dot, ...id.children]
7517
7689
  };
7518
7690
  });
7519
- var PropertyAccess$3 = $TS($S(CoffeePrototypeEnabled, DoubleColon, $E(IdentifierName)), function($skip, $loc, $0, $1, $2, $3) {
7691
+ var PropertyAccess$4 = $TS($S(CoffeePrototypeEnabled, DoubleColon, $E(IdentifierName)), function($skip, $loc, $0, $1, $2, $3) {
7520
7692
  var p = $2;
7521
7693
  var id = $3;
7522
7694
  if (id) {
@@ -7537,7 +7709,7 @@ var require_parser = __commonJS({
7537
7709
  };
7538
7710
  }
7539
7711
  });
7540
- var PropertyAccess$$ = [PropertyAccess$0, PropertyAccess$1, PropertyAccess$2, PropertyAccess$3];
7712
+ var PropertyAccess$$ = [PropertyAccess$0, PropertyAccess$1, PropertyAccess$2, PropertyAccess$3, PropertyAccess$4];
7541
7713
  function PropertyAccess(ctx, state) {
7542
7714
  return $EVENT_C(ctx, state, "PropertyAccess", PropertyAccess$$);
7543
7715
  }
@@ -7788,7 +7960,7 @@ var require_parser = __commonJS({
7788
7960
  return $EVENT(ctx, state, "ParameterElement", ParameterElement$0);
7789
7961
  }
7790
7962
  var ParameterElementDelimiter$0 = $S($E(_), Comma);
7791
- var ParameterElementDelimiter$1 = $Y($S(__, $R$0($EXPECT($R8, "ParameterElementDelimiter /[)}]/"))));
7963
+ var ParameterElementDelimiter$1 = $Y($S(__, $R$0($EXPECT($R9, "ParameterElementDelimiter /[)}]/"))));
7792
7964
  var ParameterElementDelimiter$2 = $T($S($Y(EOS), InsertComma), function(value) {
7793
7965
  return value[1];
7794
7966
  });
@@ -7857,7 +8029,23 @@ var require_parser = __commonJS({
7857
8029
  expression
7858
8030
  };
7859
8031
  });
7860
- var PinPattern$$ = [PinPattern$0, PinPattern$1];
8032
+ var PinPattern$2 = $TV($S($EXPECT($R10, "PinPattern /[+-]/"), NumericLiteral), function($skip, $loc, $0, $1) {
8033
+ var expression = $0;
8034
+ return {
8035
+ type: "PinPattern",
8036
+ children: [expression],
8037
+ expression
8038
+ };
8039
+ });
8040
+ var PinPattern$3 = $TV(Undefined, function($skip, $loc, $0, $1) {
8041
+ var expression = $0;
8042
+ return {
8043
+ type: "PinPattern",
8044
+ children: [expression],
8045
+ expression
8046
+ };
8047
+ });
8048
+ var PinPattern$$ = [PinPattern$0, PinPattern$1, PinPattern$2, PinPattern$3];
7861
8049
  function PinPattern(ctx, state) {
7862
8050
  return $EVENT_C(ctx, state, "PinPattern", PinPattern$$);
7863
8051
  }
@@ -8292,7 +8480,7 @@ var require_parser = __commonJS({
8292
8480
  parameters
8293
8481
  };
8294
8482
  });
8295
- var FunctionExpression$4 = $TS($S(OpenParen, __, $N($EXPECT($R9, "FunctionExpression /\\+\\+|--|[\\+-]\\S/")), BinaryOp, __, NonPipelineAssignmentExpression, CloseParen), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7) {
8483
+ var FunctionExpression$4 = $TS($S(OpenParen, __, $N($EXPECT($R11, "FunctionExpression /\\+\\+|--|[\\+-]\\S/")), BinaryOp, __, NonPipelineAssignmentExpression, CloseParen), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7) {
8296
8484
  var open = $1;
8297
8485
  var ws1 = $2;
8298
8486
  var op = $4;
@@ -8335,52 +8523,7 @@ var require_parser = __commonJS({
8335
8523
  var rhs = $3;
8336
8524
  if (!prefix.length && !rhs)
8337
8525
  return $skip;
8338
- let body, ref, typeSuffix;
8339
- if (!rhs) {
8340
- body = ref = makeRef("$");
8341
- } else {
8342
- ({ ref, typeSuffix } = rhs);
8343
- if (!ref) {
8344
- throw new Error("Could not find ref in ampersand shorthand block");
8345
- }
8346
- body = rhs;
8347
- }
8348
- if (prefix.length) {
8349
- body = {
8350
- type: "UnaryExpression",
8351
- children: [processUnaryExpression(prefix, body, void 0)]
8352
- };
8353
- }
8354
- const parameters = {
8355
- type: "Parameters",
8356
- children: typeSuffix ? ["(", ref, typeSuffix, ")"] : [ref],
8357
- names: []
8358
- };
8359
- const expressions = [body];
8360
- const block = {
8361
- bare: true,
8362
- expressions,
8363
- children: [expressions]
8364
- };
8365
- const children = [parameters, " => ", block];
8366
- const async = hasAwait(body);
8367
- if (async) {
8368
- children.unshift("async ");
8369
- }
8370
- return {
8371
- type: "ArrowFunction",
8372
- signature: {
8373
- modifier: {
8374
- async
8375
- }
8376
- },
8377
- children,
8378
- ref,
8379
- body,
8380
- ampersandBlock: true,
8381
- block,
8382
- parameters
8383
- };
8526
+ return makeAmpersandFunctionExpression(prefix, rhs);
8384
8527
  });
8385
8528
  function AmpersandFunctionExpression(ctx, state) {
8386
8529
  return $EVENT(ctx, state, "AmpersandFunctionExpression", AmpersandFunctionExpression$0);
@@ -8506,7 +8649,7 @@ var require_parser = __commonJS({
8506
8649
  function AmpersandTypeSuffix(ctx, state) {
8507
8650
  return $EVENT(ctx, state, "AmpersandTypeSuffix", AmpersandTypeSuffix$0);
8508
8651
  }
8509
- var AmpersandBlockRHSBody$0 = $TS($S($E(AmpersandTypeSuffix), $E($S($N(_), $P(CallExpressionRest))), $E(UnaryPostfix), $E($S(WAssignmentOp, $Q($S(NotDedented, UpdateExpression, WAssignmentOp)), NonPipelineExtendedExpression)), $E($S($N($EXPECT($R10, "AmpersandBlockRHSBody /[&]/")), $P(BinaryOpRHS)))), function($skip, $loc, $0, $1, $2, $3, $4, $5) {
8652
+ var AmpersandBlockRHSBody$0 = $TS($S($E(AmpersandTypeSuffix), $E($S($N(_), $P(CallExpressionRest))), $E(UnaryPostfix), $E($S(WAssignmentOp, $Q($S(NotDedented, UpdateExpression, WAssignmentOp)), NonPipelineExtendedExpression)), $E($S($N($EXPECT($R12, "AmpersandBlockRHSBody /[&]/")), $P(BinaryOpRHS)))), function($skip, $loc, $0, $1, $2, $3, $4, $5) {
8510
8653
  var typeSuffix = $1;
8511
8654
  var callExpRest = $2;
8512
8655
  var unaryPostfix = $3;
@@ -8514,42 +8657,7 @@ var require_parser = __commonJS({
8514
8657
  var binopRHS = $5;
8515
8658
  if (!typeSuffix && !callExpRest && !binopRHS && !unaryPostfix)
8516
8659
  return $skip;
8517
- const ref = makeRef("$");
8518
- let exp = {
8519
- type: "AmpersandRef",
8520
- children: [ref],
8521
- names: [],
8522
- ref
8523
- };
8524
- if (callExpRest) {
8525
- exp.children.push(...callExpRest[1]);
8526
- }
8527
- if (unaryPostfix) {
8528
- exp = processUnaryExpression([], exp, unaryPostfix);
8529
- }
8530
- if (assign) {
8531
- const [op1, more, rhs] = assign;
8532
- const lhs = [
8533
- [void 0, exp, ...op1],
8534
- ...more.map((x) => [x[0], x[1], ...x[2]])
8535
- ];
8536
- exp = {
8537
- type: "AssignmentExpression",
8538
- children: [lhs, rhs],
8539
- names: null,
8540
- lhs,
8541
- assigned: exp,
8542
- exp: rhs
8543
- };
8544
- }
8545
- if (binopRHS) {
8546
- exp = {
8547
- children: processBinaryOpExpression([exp, binopRHS[1]])
8548
- };
8549
- }
8550
- exp.ref = ref;
8551
- exp.typeSuffix = typeSuffix;
8552
- return exp;
8660
+ return makeAmpersandBlockRHSBody(typeSuffix, callExpRest, unaryPostfix, assign, binopRHS);
8553
8661
  });
8554
8662
  function AmpersandBlockRHSBody(ctx, state) {
8555
8663
  return $EVENT(ctx, state, "AmpersandBlockRHSBody", AmpersandBlockRHSBody$0);
@@ -8950,7 +9058,7 @@ var require_parser = __commonJS({
8950
9058
  function BlockStatementPart(ctx, state) {
8951
9059
  return $EVENT(ctx, state, "BlockStatementPart", BlockStatementPart$0);
8952
9060
  }
8953
- var Literal$0 = $TS($S($EXPECT($R11, `Literal /(?=[0-9.'"tfyno])/`), LiteralContent), function($skip, $loc, $0, $1, $2) {
9061
+ var Literal$0 = $TS($S($EXPECT($R13, `Literal /(?=[0-9.'"tfyno])/`), LiteralContent), function($skip, $loc, $0, $1, $2) {
8954
9062
  var literal = $2;
8955
9063
  return {
8956
9064
  type: "Literal",
@@ -8976,7 +9084,7 @@ var require_parser = __commonJS({
8976
9084
  function NullLiteral(ctx, state) {
8977
9085
  return $EVENT(ctx, state, "NullLiteral", NullLiteral$0);
8978
9086
  }
8979
- var BooleanLiteral$0 = $T($S($EXPECT($R12, "BooleanLiteral /(?=true|false|yes|no|on|off)/"), _BooleanLiteral), function(value) {
9087
+ var BooleanLiteral$0 = $T($S($EXPECT($R14, "BooleanLiteral /(?=true|false|yes|no|on|off)/"), _BooleanLiteral), function(value) {
8980
9088
  return value[1];
8981
9089
  });
8982
9090
  function BooleanLiteral(ctx, state) {
@@ -9002,14 +9110,14 @@ var require_parser = __commonJS({
9002
9110
  function CoffeeScriptBooleanLiteral(ctx, state) {
9003
9111
  return $EVENT_C(ctx, state, "CoffeeScriptBooleanLiteral", CoffeeScriptBooleanLiteral$$);
9004
9112
  }
9005
- var Identifier$0 = $T($S($EXPECT($R13, "Identifier /(?=\\p{ID_Start}|[_$])/"), $N(ReservedWord), IdentifierName), function(value) {
9113
+ var Identifier$0 = $T($S($EXPECT($R15, "Identifier /(?=\\p{ID_Start}|[_$])/"), $N(ReservedWord), IdentifierName), function(value) {
9006
9114
  var id = value[2];
9007
9115
  return id;
9008
9116
  });
9009
9117
  function Identifier(ctx, state) {
9010
9118
  return $EVENT(ctx, state, "Identifier", Identifier$0);
9011
9119
  }
9012
- var IdentifierName$0 = $TR($EXPECT($R14, "IdentifierName /(?:\\p{ID_Start}|[_$])(?:\\p{ID_Continue}|[\\u200C\\u200D$])*/"), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7, $8, $9) {
9120
+ var IdentifierName$0 = $TR($EXPECT($R16, "IdentifierName /(?:\\p{ID_Start}|[_$])(?:\\p{ID_Continue}|[\\u200C\\u200D$])*/"), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7, $8, $9) {
9013
9121
  return {
9014
9122
  type: "Identifier",
9015
9123
  name: $0,
@@ -9031,7 +9139,7 @@ var require_parser = __commonJS({
9031
9139
  function UpcomingAssignment(ctx, state) {
9032
9140
  return $EVENT(ctx, state, "UpcomingAssignment", UpcomingAssignment$0);
9033
9141
  }
9034
- var ArrayLiteral$0 = $T($S($EXPECT($R15, "ArrayLiteral /(?=\\[)/"), _ArrayLiteral), function(value) {
9142
+ var ArrayLiteral$0 = $T($S($EXPECT($R17, "ArrayLiteral /(?=\\[)/"), _ArrayLiteral), function(value) {
9035
9143
  return value[1];
9036
9144
  });
9037
9145
  function ArrayLiteral(ctx, state) {
@@ -9132,8 +9240,26 @@ var require_parser = __commonJS({
9132
9240
  end: e
9133
9241
  };
9134
9242
  });
9243
+ var RangeExpression$1 = $TS($S(ExtendedExpression, __, DotDot, $Y($S(__, CloseBracket))), function($skip, $loc, $0, $1, $2, $3, $4) {
9244
+ var s = $1;
9245
+ var ws = $2;
9246
+ return {
9247
+ type: "RangeExpression",
9248
+ children: ["[]", {
9249
+ type: "Error",
9250
+ message: "Infinite range [x..] is only valid in for loops"
9251
+ }],
9252
+ start: s,
9253
+ end: {
9254
+ type: "Identifier",
9255
+ name: "Infinity",
9256
+ children: ["Infinity"]
9257
+ }
9258
+ };
9259
+ });
9260
+ var RangeExpression$$ = [RangeExpression$0, RangeExpression$1];
9135
9261
  function RangeExpression(ctx, state) {
9136
- return $EVENT(ctx, state, "RangeExpression", RangeExpression$0);
9262
+ return $EVENT_C(ctx, state, "RangeExpression", RangeExpression$$);
9137
9263
  }
9138
9264
  var ArrayLiteralContent$0 = RangeExpression;
9139
9265
  var ArrayLiteralContent$1 = $S(NestedElementList, $Y($S(__, CloseBracket)));
@@ -9229,7 +9355,7 @@ var require_parser = __commonJS({
9229
9355
  var ArrayElementExpression$1 = $T($S(ImplicitObjectLiteral, $Y(ArrayElementDelimiter)), function(value) {
9230
9356
  return value[0];
9231
9357
  });
9232
- var ArrayElementExpression$2 = $TS($S($E(ExtendedExpression), __, DotDotDot, $Y(ArrayElementDelimiter)), function($skip, $loc, $0, $1, $2, $3, $4) {
9358
+ var ArrayElementExpression$2 = $TS($S(ExtendedExpression, $E(_), DotDotDot, $Y(ArrayElementDelimiter)), function($skip, $loc, $0, $1, $2, $3, $4) {
9233
9359
  var exp = $1;
9234
9360
  var ws = $2;
9235
9361
  var dots = $3;
@@ -9238,7 +9364,7 @@ var require_parser = __commonJS({
9238
9364
  }
9239
9365
  return {
9240
9366
  type: "SpreadElement",
9241
- children: [...ws, dots, exp],
9367
+ children: [ws, dots, exp],
9242
9368
  names: exp.names
9243
9369
  };
9244
9370
  });
@@ -9455,7 +9581,7 @@ var require_parser = __commonJS({
9455
9581
  children: [ws, ...prop.children]
9456
9582
  };
9457
9583
  });
9458
- var PropertyDefinition$1 = $TS($S($E(_), $TEXT($EXPECT($R16, "PropertyDefinition /[!+-]?/")), PropertyName, $Y(ObjectPropertyDelimiter)), function($skip, $loc, $0, $1, $2, $3, $4) {
9584
+ var PropertyDefinition$1 = $TS($S($E(_), $TEXT($EXPECT($R18, "PropertyDefinition /[!+-]?/")), PropertyName, $Y(ObjectPropertyDelimiter)), function($skip, $loc, $0, $1, $2, $3, $4) {
9459
9585
  var ws = $1;
9460
9586
  var toggle = $2;
9461
9587
  var id = $3;
@@ -9640,7 +9766,7 @@ var require_parser = __commonJS({
9640
9766
  implicit: true
9641
9767
  };
9642
9768
  });
9643
- var ComputedPropertyName$2 = $TS($S(InsertOpenBracket, $EXPECT($R17, "ComputedPropertyName /[+-]/"), NumericLiteral, InsertCloseBracket), function($skip, $loc, $0, $1, $2, $3, $4) {
9769
+ var ComputedPropertyName$2 = $TS($S(InsertOpenBracket, $EXPECT($R10, "ComputedPropertyName /[+-]/"), NumericLiteral, InsertCloseBracket), function($skip, $loc, $0, $1, $2, $3, $4) {
9644
9770
  const expression = [$2, $3];
9645
9771
  return {
9646
9772
  type: "ComputedPropertyName",
@@ -9649,7 +9775,18 @@ var require_parser = __commonJS({
9649
9775
  implicit: true
9650
9776
  };
9651
9777
  });
9652
- var ComputedPropertyName$$ = [ComputedPropertyName$0, ComputedPropertyName$1, ComputedPropertyName$2];
9778
+ var ComputedPropertyName$3 = $TS($S(InsertOpenBracket, PartialPlaceholder, InsertCloseBracket), function($skip, $loc, $0, $1, $2, $3) {
9779
+ var open = $1;
9780
+ var expression = $2;
9781
+ var close = $3;
9782
+ return {
9783
+ type: "ComputedPropertyName",
9784
+ expression,
9785
+ children: [open, expression, close],
9786
+ implicit: true
9787
+ };
9788
+ });
9789
+ var ComputedPropertyName$$ = [ComputedPropertyName$0, ComputedPropertyName$1, ComputedPropertyName$2, ComputedPropertyName$3];
9653
9790
  function ComputedPropertyName(ctx, state) {
9654
9791
  return $EVENT_C(ctx, state, "ComputedPropertyName", ComputedPropertyName$$);
9655
9792
  }
@@ -10019,7 +10156,7 @@ var require_parser = __commonJS({
10019
10156
  function IdentifierBinaryOp(ctx, state) {
10020
10157
  return $EVENT(ctx, state, "IdentifierBinaryOp", IdentifierBinaryOp$0);
10021
10158
  }
10022
- var BinaryOp$0 = $T($S($EXPECT($R18, "BinaryOp /(?=\\p{ID_Start}|[_$^\xAB\xBB\u22D9\u2264\u2265\u2208\u220B\u2209\u220C\u2263\u2261\u2262\u2260=\u2016\u2047&|*\\/!?%<>\u29FA+-])/"), _BinaryOp), function(value) {
10159
+ var BinaryOp$0 = $T($S($EXPECT($R19, "BinaryOp /(?=\\p{ID_Start}|[_$^\xAB\xBB\u22D9\u2264\u2265\u2208\u220B\u2209\u220C\u2263\u2261\u2262\u2260=\u2016\u2047&|*\\/!?%<>\u29FA+-])/"), _BinaryOp), function(value) {
10023
10160
  var op = value[1];
10024
10161
  return op;
10025
10162
  });
@@ -10154,7 +10291,7 @@ var require_parser = __commonJS({
10154
10291
  prec: "^^"
10155
10292
  };
10156
10293
  });
10157
- var BinaryOpSymbol$35 = $TV($C($EXPECT($R19, "BinaryOpSymbol /!\\^\\^?/"), $S($EXPECT($L101, 'BinaryOpSymbol "xnor"'), NonIdContinue)), function($skip, $loc, $0, $1) {
10294
+ var BinaryOpSymbol$35 = $TV($C($EXPECT($R20, "BinaryOpSymbol /!\\^\\^?/"), $S($EXPECT($L101, 'BinaryOpSymbol "xnor"'), NonIdContinue)), function($skip, $loc, $0, $1) {
10158
10295
  return {
10159
10296
  call: module2.getRef("xnor"),
10160
10297
  special: true,
@@ -10248,6 +10385,16 @@ var require_parser = __commonJS({
10248
10385
  function BinaryOpSymbol(ctx, state) {
10249
10386
  return $EVENT_C(ctx, state, "BinaryOpSymbol", BinaryOpSymbol$$);
10250
10387
  }
10388
+ var ActualIn$0 = $T($S(CoffeeOfEnabled, Of), function(value) {
10389
+ return value[1];
10390
+ });
10391
+ var ActualIn$1 = $T($S($N(CoffeeOfEnabled), In), function(value) {
10392
+ return value[1];
10393
+ });
10394
+ var ActualIn$$ = [ActualIn$0, ActualIn$1];
10395
+ function ActualIn(ctx, state) {
10396
+ return $EVENT_C(ctx, state, "ActualIn", ActualIn$$);
10397
+ }
10251
10398
  var CoffeeOfOp$0 = $T($S(Of), function(value) {
10252
10399
  return "in";
10253
10400
  });
@@ -10308,24 +10455,24 @@ var require_parser = __commonJS({
10308
10455
  function Xor(ctx, state) {
10309
10456
  return $EVENT_C(ctx, state, "Xor", Xor$$);
10310
10457
  }
10311
- var Xnor$0 = $R$0($EXPECT($R19, "Xnor /!\\^\\^?/"));
10458
+ var Xnor$0 = $R$0($EXPECT($R20, "Xnor /!\\^\\^?/"));
10312
10459
  var Xnor$1 = $EXPECT($L101, 'Xnor "xnor"');
10313
10460
  var Xnor$$ = [Xnor$0, Xnor$1];
10314
10461
  function Xnor(ctx, state) {
10315
10462
  return $EVENT_C(ctx, state, "Xnor", Xnor$$);
10316
10463
  }
10317
- var UnaryOp$0 = $TR($EXPECT($R20, "UnaryOp /(?!\\+\\+|--)[!~+-](?!\\s)/"), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7, $8, $9) {
10464
+ var UnaryOp$0 = $TR($EXPECT($R21, "UnaryOp /(?!\\+\\+|--)[!~+-](?!\\s)/"), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7, $8, $9) {
10318
10465
  return { $loc, token: $0 };
10319
10466
  });
10320
10467
  var UnaryOp$1 = AwaitOp;
10321
- var UnaryOp$2 = $TS($S($C(Delete, Void, Typeof), $N($EXPECT($R21, "UnaryOp /[:.]/")), $E(_)), function($skip, $loc, $0, $1, $2, $3) {
10468
+ var UnaryOp$2 = $TS($S($C(Delete, Void, Typeof), $N($EXPECT($R22, "UnaryOp /[:.]/")), $E(_)), function($skip, $loc, $0, $1, $2, $3) {
10322
10469
  var op = $1;
10323
10470
  var ws = $3;
10324
10471
  if (!ws)
10325
10472
  return [op, [" "]];
10326
10473
  return [op, ws];
10327
10474
  });
10328
- var UnaryOp$3 = $T($S(Not, $N($EXPECT($R21, "UnaryOp /[:.]/")), $E($EXPECT($L16, 'UnaryOp " "')), $E(_)), function(value) {
10475
+ var UnaryOp$3 = $T($S(Not, $N($EXPECT($R22, "UnaryOp /[:.]/")), $E($EXPECT($L16, 'UnaryOp " "')), $E(_)), function(value) {
10329
10476
  return [value[0], value[3]];
10330
10477
  });
10331
10478
  var UnaryOp$$ = [UnaryOp$0, UnaryOp$1, UnaryOp$2, UnaryOp$3];
@@ -10420,7 +10567,7 @@ var require_parser = __commonJS({
10420
10567
  function NonPipelinePostfixedExpression(ctx, state) {
10421
10568
  return $EVENT(ctx, state, "NonPipelinePostfixedExpression", NonPipelinePostfixedExpression$0);
10422
10569
  }
10423
- var PostfixStatement$0 = $T($S($EXPECT($R22, "PostfixStatement /(?=for|if|loop|unless|until|while)/"), _PostfixStatement), function(value) {
10570
+ var PostfixStatement$0 = $T($S($EXPECT($R23, "PostfixStatement /(?=for|if|loop|unless|until|while)/"), _PostfixStatement), function(value) {
10424
10571
  return value[1];
10425
10572
  });
10426
10573
  function PostfixStatement(ctx, state) {
@@ -10553,7 +10700,7 @@ var require_parser = __commonJS({
10553
10700
  function UnlessClause(ctx, state) {
10554
10701
  return $EVENT(ctx, state, "UnlessClause", UnlessClause$0);
10555
10702
  }
10556
- var IterationStatement$0 = $T($S($EXPECT($R23, "IterationStatement /(?=loop|do|for|until|while)/"), _IterationStatement), function(value) {
10703
+ var IterationStatement$0 = $T($S($EXPECT($R24, "IterationStatement /(?=loop|do|for|until|while)/"), _IterationStatement), function(value) {
10557
10704
  return value[1];
10558
10705
  });
10559
10706
  function IterationStatement(ctx, state) {
@@ -10906,7 +11053,7 @@ var require_parser = __commonJS({
10906
11053
  names: binding.names
10907
11054
  };
10908
11055
  });
10909
- var ForDeclaration$1 = $TS($S(InsertConst, ForBinding, $EXPECT($R24, "ForDeclaration /(?=[\\s\\),])/")), function($skip, $loc, $0, $1, $2, $3) {
11056
+ var ForDeclaration$1 = $TS($S(InsertConst, ForBinding, $EXPECT($R25, "ForDeclaration /(?=[\\s\\),])/")), function($skip, $loc, $0, $1, $2, $3) {
10910
11057
  var c = $1;
10911
11058
  var binding = $2;
10912
11059
  return {
@@ -11735,7 +11882,7 @@ var require_parser = __commonJS({
11735
11882
  function UnprocessedModuleSpecifier(ctx, state) {
11736
11883
  return $EVENT_C(ctx, state, "UnprocessedModuleSpecifier", UnprocessedModuleSpecifier$$);
11737
11884
  }
11738
- var UnquotedSpecifier$0 = $TV($EXPECT($R25, 'UnquotedSpecifier /[^;"\\s]+/'), function($skip, $loc, $0, $1) {
11885
+ var UnquotedSpecifier$0 = $TV($EXPECT($R26, 'UnquotedSpecifier /[^;"\\s]+/'), function($skip, $loc, $0, $1) {
11739
11886
  var spec = $0;
11740
11887
  return { $loc, token: `"${spec}"` };
11741
11888
  });
@@ -11988,7 +12135,7 @@ var require_parser = __commonJS({
11988
12135
  function VariableDeclarationList(ctx, state) {
11989
12136
  return $EVENT(ctx, state, "VariableDeclarationList", VariableDeclarationList$0);
11990
12137
  }
11991
- var NumericLiteral$0 = $TS($S($EXPECT($R26, "NumericLiteral /(?=[0-9.])/"), NumericLiteralKind), function($skip, $loc, $0, $1, $2) {
12138
+ var NumericLiteral$0 = $TS($S($EXPECT($R27, "NumericLiteral /(?=[0-9.])/"), NumericLiteralKind), function($skip, $loc, $0, $1, $2) {
11992
12139
  var token = $2;
11993
12140
  return { type: "NumericLiteral", $loc, token };
11994
12141
  });
@@ -12004,36 +12151,36 @@ var require_parser = __commonJS({
12004
12151
  function NumericLiteralKind(ctx, state) {
12005
12152
  return $EVENT_C(ctx, state, "NumericLiteralKind", NumericLiteralKind$$);
12006
12153
  }
12007
- var DecimalBigIntegerLiteral$0 = $R$0($EXPECT($R27, "DecimalBigIntegerLiteral /(?:0|[1-9](?:_[0-9]|[0-9])*)n/"));
12154
+ var DecimalBigIntegerLiteral$0 = $R$0($EXPECT($R28, "DecimalBigIntegerLiteral /(?:0|[1-9](?:_[0-9]|[0-9])*)n/"));
12008
12155
  function DecimalBigIntegerLiteral(ctx, state) {
12009
12156
  return $EVENT(ctx, state, "DecimalBigIntegerLiteral", DecimalBigIntegerLiteral$0);
12010
12157
  }
12011
- var DecimalLiteral$0 = $TV($TEXT($EXPECT($R28, "DecimalLiteral /(?:0|[1-9](?:_[0-9]|[0-9])*)(?=\\.(?:\\p{ID_Start}|[_$]))/")), function($skip, $loc, $0, $1) {
12158
+ var DecimalLiteral$0 = $TV($TEXT($EXPECT($R29, "DecimalLiteral /(?:0|[1-9](?:_[0-9]|[0-9])*)(?=\\.(?:\\p{ID_Start}|[_$]))/")), function($skip, $loc, $0, $1) {
12012
12159
  return $1 + ".";
12013
12160
  });
12014
- var DecimalLiteral$1 = $TEXT($S($EXPECT($R29, "DecimalLiteral /(?:0|[1-9](?:_[0-9]|[0-9])*)(?:\\.(?:[0-9](?:_[0-9]|[0-9])*))?/"), $E(ExponentPart)));
12015
- var DecimalLiteral$2 = $TEXT($S($EXPECT($R30, "DecimalLiteral /(?:\\.[0-9](?:_[0-9]|[0-9])*)/"), $E(ExponentPart)));
12161
+ var DecimalLiteral$1 = $TEXT($S($EXPECT($R30, "DecimalLiteral /(?:0|[1-9](?:_[0-9]|[0-9])*)(?:\\.(?:[0-9](?:_[0-9]|[0-9])*))?/"), $E(ExponentPart)));
12162
+ var DecimalLiteral$2 = $TEXT($S($EXPECT($R31, "DecimalLiteral /(?:\\.[0-9](?:_[0-9]|[0-9])*)/"), $E(ExponentPart)));
12016
12163
  var DecimalLiteral$$ = [DecimalLiteral$0, DecimalLiteral$1, DecimalLiteral$2];
12017
12164
  function DecimalLiteral(ctx, state) {
12018
12165
  return $EVENT_C(ctx, state, "DecimalLiteral", DecimalLiteral$$);
12019
12166
  }
12020
- var ExponentPart$0 = $R$0($EXPECT($R31, "ExponentPart /(?:[eE][+-]?[0-9]+(?:_[0-9]|[0-9])*)/"));
12167
+ var ExponentPart$0 = $R$0($EXPECT($R32, "ExponentPart /(?:[eE][+-]?[0-9]+(?:_[0-9]|[0-9])*)/"));
12021
12168
  function ExponentPart(ctx, state) {
12022
12169
  return $EVENT(ctx, state, "ExponentPart", ExponentPart$0);
12023
12170
  }
12024
- var BinaryIntegerLiteral$0 = $R$0($EXPECT($R32, "BinaryIntegerLiteral /0[bB][01](?:[01]|_[01])*n?/"));
12171
+ var BinaryIntegerLiteral$0 = $R$0($EXPECT($R33, "BinaryIntegerLiteral /0[bB][01](?:[01]|_[01])*n?/"));
12025
12172
  function BinaryIntegerLiteral(ctx, state) {
12026
12173
  return $EVENT(ctx, state, "BinaryIntegerLiteral", BinaryIntegerLiteral$0);
12027
12174
  }
12028
- var OctalIntegerLiteral$0 = $R$0($EXPECT($R33, "OctalIntegerLiteral /0[oO][0-7](?:[0-7]|_[0-7])*n?/"));
12175
+ var OctalIntegerLiteral$0 = $R$0($EXPECT($R34, "OctalIntegerLiteral /0[oO][0-7](?:[0-7]|_[0-7])*n?/"));
12029
12176
  function OctalIntegerLiteral(ctx, state) {
12030
12177
  return $EVENT(ctx, state, "OctalIntegerLiteral", OctalIntegerLiteral$0);
12031
12178
  }
12032
- var HexIntegerLiteral$0 = $R$0($EXPECT($R34, "HexIntegerLiteral /0[xX][0-9a-fA-F](?:[0-9a-fA-F]|_[0-9a-fA-F])*n?/"));
12179
+ var HexIntegerLiteral$0 = $R$0($EXPECT($R35, "HexIntegerLiteral /0[xX][0-9a-fA-F](?:[0-9a-fA-F]|_[0-9a-fA-F])*n?/"));
12033
12180
  function HexIntegerLiteral(ctx, state) {
12034
12181
  return $EVENT(ctx, state, "HexIntegerLiteral", HexIntegerLiteral$0);
12035
12182
  }
12036
- var IntegerLiteral$0 = $TS($S($EXPECT($R35, "IntegerLiteral /(?=[0-9])/"), IntegerLiteralKind), function($skip, $loc, $0, $1, $2) {
12183
+ var IntegerLiteral$0 = $TS($S($EXPECT($R36, "IntegerLiteral /(?=[0-9])/"), IntegerLiteralKind), function($skip, $loc, $0, $1, $2) {
12037
12184
  var token = $2;
12038
12185
  return { $loc, token };
12039
12186
  });
@@ -12049,7 +12196,7 @@ var require_parser = __commonJS({
12049
12196
  function IntegerLiteralKind(ctx, state) {
12050
12197
  return $EVENT_C(ctx, state, "IntegerLiteralKind", IntegerLiteralKind$$);
12051
12198
  }
12052
- var DecimalIntegerLiteral$0 = $R$0($EXPECT($R36, "DecimalIntegerLiteral /(?:0|[1-9](?:_[0-9]|[0-9])*)/"));
12199
+ var DecimalIntegerLiteral$0 = $R$0($EXPECT($R37, "DecimalIntegerLiteral /(?:0|[1-9](?:_[0-9]|[0-9])*)/"));
12053
12200
  function DecimalIntegerLiteral(ctx, state) {
12054
12201
  return $EVENT(ctx, state, "DecimalIntegerLiteral", DecimalIntegerLiteral$0);
12055
12202
  }
@@ -12073,25 +12220,25 @@ var require_parser = __commonJS({
12073
12220
  function StringLiteral(ctx, state) {
12074
12221
  return $EVENT_C(ctx, state, "StringLiteral", StringLiteral$$);
12075
12222
  }
12076
- var DoubleStringCharacters$0 = $TR($EXPECT($R37, 'DoubleStringCharacters /(?:\\\\.|[^"])*/'), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7, $8, $9) {
12223
+ var DoubleStringCharacters$0 = $TR($EXPECT($R38, 'DoubleStringCharacters /(?:\\\\.|[^"])*/'), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7, $8, $9) {
12077
12224
  return { $loc, token: $0 };
12078
12225
  });
12079
12226
  function DoubleStringCharacters(ctx, state) {
12080
12227
  return $EVENT(ctx, state, "DoubleStringCharacters", DoubleStringCharacters$0);
12081
12228
  }
12082
- var SingleStringCharacters$0 = $TR($EXPECT($R38, "SingleStringCharacters /(?:\\\\.|[^'])*/"), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7, $8, $9) {
12229
+ var SingleStringCharacters$0 = $TR($EXPECT($R39, "SingleStringCharacters /(?:\\\\.|[^'])*/"), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7, $8, $9) {
12083
12230
  return { $loc, token: $0 };
12084
12231
  });
12085
12232
  function SingleStringCharacters(ctx, state) {
12086
12233
  return $EVENT(ctx, state, "SingleStringCharacters", SingleStringCharacters$0);
12087
12234
  }
12088
- var TripleDoubleStringCharacters$0 = $TR($EXPECT($R39, 'TripleDoubleStringCharacters /(?:"(?!"")|#(?!\\{)|\\\\.|[^#"])+/'), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7, $8, $9) {
12235
+ var TripleDoubleStringCharacters$0 = $TR($EXPECT($R40, 'TripleDoubleStringCharacters /(?:"(?!"")|#(?!\\{)|\\\\.|[^#"])+/'), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7, $8, $9) {
12089
12236
  return { $loc, token: $0 };
12090
12237
  });
12091
12238
  function TripleDoubleStringCharacters(ctx, state) {
12092
12239
  return $EVENT(ctx, state, "TripleDoubleStringCharacters", TripleDoubleStringCharacters$0);
12093
12240
  }
12094
- var TripleSingleStringCharacters$0 = $TR($EXPECT($R40, "TripleSingleStringCharacters /(?:'(?!'')|\\\\.|[^'])*/"), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7, $8, $9) {
12241
+ var TripleSingleStringCharacters$0 = $TR($EXPECT($R41, "TripleSingleStringCharacters /(?:'(?!'')|\\\\.|[^'])*/"), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7, $8, $9) {
12095
12242
  return { $loc, token: $0 };
12096
12243
  });
12097
12244
  function TripleSingleStringCharacters(ctx, state) {
@@ -12114,7 +12261,7 @@ var require_parser = __commonJS({
12114
12261
  function CoffeeInterpolatedDoubleQuotedString(ctx, state) {
12115
12262
  return $EVENT(ctx, state, "CoffeeInterpolatedDoubleQuotedString", CoffeeInterpolatedDoubleQuotedString$0);
12116
12263
  }
12117
- var CoffeeDoubleQuotedStringCharacters$0 = $TR($EXPECT($R41, 'CoffeeDoubleQuotedStringCharacters /(?:\\\\.|#(?!\\{)|[^"#])+/'), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7, $8, $9) {
12264
+ var CoffeeDoubleQuotedStringCharacters$0 = $TR($EXPECT($R42, 'CoffeeDoubleQuotedStringCharacters /(?:\\\\.|#(?!\\{)|[^"#])+/'), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7, $8, $9) {
12118
12265
  return { $loc, token: $0 };
12119
12266
  });
12120
12267
  function CoffeeDoubleQuotedStringCharacters(ctx, state) {
@@ -12134,7 +12281,7 @@ var require_parser = __commonJS({
12134
12281
  function RegularExpressionClass(ctx, state) {
12135
12282
  return $EVENT(ctx, state, "RegularExpressionClass", RegularExpressionClass$0);
12136
12283
  }
12137
- var RegularExpressionClassCharacters$0 = $TR($EXPECT($R42, "RegularExpressionClassCharacters /(?:\\\\.|[^\\]])*/"), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7, $8, $9) {
12284
+ var RegularExpressionClassCharacters$0 = $TR($EXPECT($R43, "RegularExpressionClassCharacters /(?:\\\\.|[^\\]])*/"), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7, $8, $9) {
12138
12285
  return { $loc, token: $0 };
12139
12286
  });
12140
12287
  function RegularExpressionClassCharacters(ctx, state) {
@@ -12191,7 +12338,7 @@ var require_parser = __commonJS({
12191
12338
  var HeregexPart$2 = $T($S(TemplateSubstitution), function(value) {
12192
12339
  return { "type": "Substitution", "children": value[0] };
12193
12340
  });
12194
- var HeregexPart$3 = $TR($EXPECT($R43, "HeregexPart /(?:\\\\.)/"), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7, $8, $9) {
12341
+ var HeregexPart$3 = $TR($EXPECT($R44, "HeregexPart /(?:\\\\.)/"), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7, $8, $9) {
12195
12342
  let token = $0;
12196
12343
  switch ($0[1]) {
12197
12344
  case "\n":
@@ -12209,13 +12356,13 @@ var require_parser = __commonJS({
12209
12356
  var HeregexPart$4 = $TS($S(HeregexComment), function($skip, $loc, $0, $1) {
12210
12357
  return { $loc, token: "" };
12211
12358
  });
12212
- var HeregexPart$5 = $TR($EXPECT($R44, "HeregexPart /[\\s]+/"), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7, $8, $9) {
12359
+ var HeregexPart$5 = $TR($EXPECT($R45, "HeregexPart /[\\s]+/"), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7, $8, $9) {
12213
12360
  return { $loc, token: "" };
12214
12361
  });
12215
- var HeregexPart$6 = $TR($EXPECT($R45, "HeregexPart /\\/(?!\\/\\/)/"), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7, $8, $9) {
12362
+ var HeregexPart$6 = $TR($EXPECT($R46, "HeregexPart /\\/(?!\\/\\/)/"), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7, $8, $9) {
12216
12363
  return { $loc, token: "\\/" };
12217
12364
  });
12218
- var HeregexPart$7 = $TR($EXPECT($R46, "HeregexPart /[^[\\/\\s#\\\\]+/"), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7, $8, $9) {
12365
+ var HeregexPart$7 = $TR($EXPECT($R47, "HeregexPart /[^[\\/\\s#\\\\]+/"), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7, $8, $9) {
12219
12366
  return { $loc, token: $0 };
12220
12367
  });
12221
12368
  var HeregexPart$$ = [HeregexPart$0, HeregexPart$1, HeregexPart$2, HeregexPart$3, HeregexPart$4, HeregexPart$5, HeregexPart$6, HeregexPart$7];
@@ -12228,7 +12375,7 @@ var require_parser = __commonJS({
12228
12375
  function HeregexComment(ctx, state) {
12229
12376
  return $EVENT_C(ctx, state, "HeregexComment", HeregexComment$$);
12230
12377
  }
12231
- var RegularExpressionBody$0 = $S($N($R$0($EXPECT($R47, "RegularExpressionBody /[*\\/\\r\\n]/"))), $Q(RegExpPart));
12378
+ var RegularExpressionBody$0 = $S($N($R$0($EXPECT($R48, "RegularExpressionBody /[*\\/\\r\\n]/"))), $Q(RegExpPart));
12232
12379
  function RegularExpressionBody(ctx, state) {
12233
12380
  return $EVENT(ctx, state, "RegularExpressionBody", RegularExpressionBody$0);
12234
12381
  }
@@ -12238,15 +12385,15 @@ var require_parser = __commonJS({
12238
12385
  function RegExpPart(ctx, state) {
12239
12386
  return $EVENT_C(ctx, state, "RegExpPart", RegExpPart$$);
12240
12387
  }
12241
- var RegExpCharacter$0 = $R$0($EXPECT($R48, "RegExpCharacter /(?:\\\\.|[^[\\/\\r\\n])+/"));
12388
+ var RegExpCharacter$0 = $R$0($EXPECT($R49, "RegExpCharacter /(?:\\\\.|[^[\\/\\r\\n])+/"));
12242
12389
  function RegExpCharacter(ctx, state) {
12243
12390
  return $EVENT(ctx, state, "RegExpCharacter", RegExpCharacter$0);
12244
12391
  }
12245
- var RegularExpressionFlags$0 = $R$0($EXPECT($R49, "RegularExpressionFlags /(?:\\p{ID_Continue}|[\\u200C\\u200D$])*/"));
12392
+ var RegularExpressionFlags$0 = $R$0($EXPECT($R50, "RegularExpressionFlags /(?:\\p{ID_Continue}|[\\u200C\\u200D$])*/"));
12246
12393
  function RegularExpressionFlags(ctx, state) {
12247
12394
  return $EVENT(ctx, state, "RegularExpressionFlags", RegularExpressionFlags$0);
12248
12395
  }
12249
- var TemplateLiteral$0 = $T($S($EXPECT($R50, "TemplateLiteral /(?=[`'\"])/"), _TemplateLiteral), function(value) {
12396
+ var TemplateLiteral$0 = $T($S($EXPECT($R51, "TemplateLiteral /(?=[`'\"])/"), _TemplateLiteral), function(value) {
12250
12397
  return value[1];
12251
12398
  });
12252
12399
  function TemplateLiteral(ctx, state) {
@@ -12286,28 +12433,28 @@ var require_parser = __commonJS({
12286
12433
  function TemplateSubstitution(ctx, state) {
12287
12434
  return $EVENT(ctx, state, "TemplateSubstitution", TemplateSubstitution$0);
12288
12435
  }
12289
- var TemplateCharacters$0 = $TR($EXPECT($R51, "TemplateCharacters /(?:\\$(?!\\{)|\\\\.|[^$`])+/"), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7, $8, $9) {
12436
+ var TemplateCharacters$0 = $TR($EXPECT($R52, "TemplateCharacters /(?:\\$(?!\\{)|\\\\.|[^$`])+/"), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7, $8, $9) {
12290
12437
  return { $loc, token: $0 };
12291
12438
  });
12292
12439
  function TemplateCharacters(ctx, state) {
12293
12440
  return $EVENT(ctx, state, "TemplateCharacters", TemplateCharacters$0);
12294
12441
  }
12295
- var TemplateBlockCharacters$0 = $TR($EXPECT($R52, "TemplateBlockCharacters /(?:\\$(?!\\{)|`(?!``)|\\\\.|[^$`])+/"), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7, $8, $9) {
12442
+ var TemplateBlockCharacters$0 = $TR($EXPECT($R53, "TemplateBlockCharacters /(?:\\$(?!\\{)|`(?!``)|\\\\.|[^$`])+/"), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7, $8, $9) {
12296
12443
  return { $loc, token: $0 };
12297
12444
  });
12298
12445
  function TemplateBlockCharacters(ctx, state) {
12299
12446
  return $EVENT(ctx, state, "TemplateBlockCharacters", TemplateBlockCharacters$0);
12300
12447
  }
12301
- var ReservedWord$0 = $S($R$0($EXPECT($R53, "ReservedWord /(?:on|off|yes|no)(?!\\p{ID_Continue})/")), CoffeeBooleansEnabled);
12302
- var ReservedWord$1 = $S($R$0($EXPECT($R54, "ReservedWord /(?:isnt)(?!\\p{ID_Continue})/")), CoffeeIsntEnabled);
12303
- var ReservedWord$2 = $S($R$0($EXPECT($R55, "ReservedWord /(?:by)(?!\\p{ID_Continue})/")), CoffeeForLoopsEnabled);
12304
- var ReservedWord$3 = $S($R$0($EXPECT($R56, "ReservedWord /(?:of)(?!\\p{ID_Continue})/")), CoffeeOfEnabled);
12305
- var ReservedWord$4 = $R$0($EXPECT($R57, "ReservedWord /(?:and|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|let|loop|new|not|null|or|private|protected|public|return|static|super|switch|this|throw|true|try|typeof|unless|until|var|void|while|with|yield)(?!\\p{ID_Continue})/"));
12448
+ var ReservedWord$0 = $S($R$0($EXPECT($R54, "ReservedWord /(?:on|off|yes|no)(?!\\p{ID_Continue})/")), CoffeeBooleansEnabled);
12449
+ var ReservedWord$1 = $S($R$0($EXPECT($R55, "ReservedWord /(?:isnt)(?!\\p{ID_Continue})/")), CoffeeIsntEnabled);
12450
+ var ReservedWord$2 = $S($R$0($EXPECT($R56, "ReservedWord /(?:by)(?!\\p{ID_Continue})/")), CoffeeForLoopsEnabled);
12451
+ var ReservedWord$3 = $S($R$0($EXPECT($R57, "ReservedWord /(?:of)(?!\\p{ID_Continue})/")), CoffeeOfEnabled);
12452
+ var ReservedWord$4 = $R$0($EXPECT($R58, "ReservedWord /(?:and|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|let|loop|new|not|null|or|private|protected|public|return|static|super|switch|this|throw|true|try|typeof|unless|until|var|void|while|with|yield)(?!\\p{ID_Continue})/"));
12306
12453
  var ReservedWord$$ = [ReservedWord$0, ReservedWord$1, ReservedWord$2, ReservedWord$3, ReservedWord$4];
12307
12454
  function ReservedWord(ctx, state) {
12308
12455
  return $EVENT_C(ctx, state, "ReservedWord", ReservedWord$$);
12309
12456
  }
12310
- var Comment$0 = $T($S($EXPECT($R58, "Comment /(?=\\/|#)/"), _Comment), function(value) {
12457
+ var Comment$0 = $T($S($EXPECT($R59, "Comment /(?=\\/|#)/"), _Comment), function(value) {
12311
12458
  return value[1];
12312
12459
  });
12313
12460
  function Comment(ctx, state) {
@@ -12325,7 +12472,7 @@ var require_parser = __commonJS({
12325
12472
  function SingleLineComment(ctx, state) {
12326
12473
  return $EVENT_C(ctx, state, "SingleLineComment", SingleLineComment$$);
12327
12474
  }
12328
- var JSSingleLineComment$0 = $TR($EXPECT($R59, "JSSingleLineComment /\\/\\/(?!\\/)[^\\r\\n]*/"), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7, $8, $9) {
12475
+ var JSSingleLineComment$0 = $TR($EXPECT($R60, "JSSingleLineComment /\\/\\/(?!\\/)[^\\r\\n]*/"), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7, $8, $9) {
12329
12476
  return { type: "Comment", $loc, token: $0 };
12330
12477
  });
12331
12478
  function JSSingleLineComment(ctx, state) {
@@ -12337,30 +12484,30 @@ var require_parser = __commonJS({
12337
12484
  function MultiLineComment(ctx, state) {
12338
12485
  return $EVENT_C(ctx, state, "MultiLineComment", MultiLineComment$$);
12339
12486
  }
12340
- var JSMultiLineComment$0 = $TV($TEXT($S($EXPECT($L123, 'JSMultiLineComment "/*"'), $Q($S($N($EXPECT($L124, 'JSMultiLineComment "*/"')), $EXPECT($R60, "JSMultiLineComment /./"))), $EXPECT($L124, 'JSMultiLineComment "*/"'))), function($skip, $loc, $0, $1) {
12487
+ var JSMultiLineComment$0 = $TV($TEXT($S($EXPECT($L123, 'JSMultiLineComment "/*"'), $Q($S($N($EXPECT($L124, 'JSMultiLineComment "*/"')), $EXPECT($R61, "JSMultiLineComment /./"))), $EXPECT($L124, 'JSMultiLineComment "*/"'))), function($skip, $loc, $0, $1) {
12341
12488
  return { type: "Comment", $loc, token: $1 };
12342
12489
  });
12343
12490
  function JSMultiLineComment(ctx, state) {
12344
12491
  return $EVENT(ctx, state, "JSMultiLineComment", JSMultiLineComment$0);
12345
12492
  }
12346
- var CoffeeSingleLineComment$0 = $TR($EXPECT($R61, "CoffeeSingleLineComment /#(?!##(?!#))([^\\r\\n]*)/"), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7, $8, $9) {
12493
+ var CoffeeSingleLineComment$0 = $TR($EXPECT($R62, "CoffeeSingleLineComment /#(?!##(?!#))([^\\r\\n]*)/"), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7, $8, $9) {
12347
12494
  return { type: "Comment", $loc, token: `//${$1}` };
12348
12495
  });
12349
12496
  function CoffeeSingleLineComment(ctx, state) {
12350
12497
  return $EVENT(ctx, state, "CoffeeSingleLineComment", CoffeeSingleLineComment$0);
12351
12498
  }
12352
- var CoffeeMultiLineComment$0 = $TS($S(CoffeeHereCommentStart, $TEXT($EXPECT($R62, "CoffeeMultiLineComment /[^]*?###/"))), function($skip, $loc, $0, $1, $2) {
12499
+ var CoffeeMultiLineComment$0 = $TS($S(CoffeeHereCommentStart, $TEXT($EXPECT($R63, "CoffeeMultiLineComment /[^]*?###/"))), function($skip, $loc, $0, $1, $2) {
12353
12500
  $2 = $2.slice(0, $2.length - 3).replace(/\*\//g, "* /");
12354
12501
  return { type: "Comment", $loc, token: `/*${$2}*/` };
12355
12502
  });
12356
12503
  function CoffeeMultiLineComment(ctx, state) {
12357
12504
  return $EVENT(ctx, state, "CoffeeMultiLineComment", CoffeeMultiLineComment$0);
12358
12505
  }
12359
- var CoffeeHereCommentStart$0 = $R$0($EXPECT($R63, "CoffeeHereCommentStart /###(?!#)/"));
12506
+ var CoffeeHereCommentStart$0 = $R$0($EXPECT($R64, "CoffeeHereCommentStart /###(?!#)/"));
12360
12507
  function CoffeeHereCommentStart(ctx, state) {
12361
12508
  return $EVENT(ctx, state, "CoffeeHereCommentStart", CoffeeHereCommentStart$0);
12362
12509
  }
12363
- var InlineComment$0 = $TR($EXPECT($R64, "InlineComment /\\/\\*(?:(?!\\*\\/)[^\\r\\n])*\\*\\//"), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7, $8, $9) {
12510
+ var InlineComment$0 = $TR($EXPECT($R65, "InlineComment /\\/\\*(?:(?!\\*\\/)[^\\r\\n])*\\*\\//"), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7, $8, $9) {
12364
12511
  return { $loc, token: $0 };
12365
12512
  });
12366
12513
  function InlineComment(ctx, state) {
@@ -12374,13 +12521,13 @@ var require_parser = __commonJS({
12374
12521
  function TrailingComment(ctx, state) {
12375
12522
  return $EVENT(ctx, state, "TrailingComment", TrailingComment$0);
12376
12523
  }
12377
- var _$0 = $T($S($EXPECT($R65, "_ /(?=[ \\t\\/\\\\])/"), $P($C(NonNewlineWhitespace, InlineComment))), function(value) {
12524
+ var _$0 = $T($S($EXPECT($R66, "_ /(?=[ \\t\\/\\\\])/"), $P($C(NonNewlineWhitespace, InlineComment))), function(value) {
12378
12525
  return value[1];
12379
12526
  });
12380
12527
  function _(ctx, state) {
12381
12528
  return $EVENT(ctx, state, "_", _$0);
12382
12529
  }
12383
- var NonNewlineWhitespace$0 = $TR($EXPECT($R66, "NonNewlineWhitespace /[ \\t]+/"), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7, $8, $9) {
12530
+ var NonNewlineWhitespace$0 = $TR($EXPECT($R67, "NonNewlineWhitespace /[ \\t]+/"), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7, $8, $9) {
12384
12531
  return { $loc, token: $0 };
12385
12532
  });
12386
12533
  var NonNewlineWhitespace$1 = $T($S($EXPECT($L125, 'NonNewlineWhitespace "\\\\\\\\"'), CoffeeLineContinuationEnabled, EOL), function(value) {
@@ -12397,7 +12544,7 @@ var require_parser = __commonJS({
12397
12544
  function Trimmed_(ctx, state) {
12398
12545
  return $EVENT(ctx, state, "Trimmed_", Trimmed_$0);
12399
12546
  }
12400
- var __$0 = $T($S($EXPECT($R67, "__ /(?=\\s|\\/|#)/"), $Q($C(Whitespace, Comment))), function(value) {
12547
+ var __$0 = $T($S($EXPECT($R68, "__ /(?=\\s|\\/|#)/"), $Q($C(Whitespace, Comment))), function(value) {
12401
12548
  return value[1];
12402
12549
  });
12403
12550
  var __$1 = $EXPECT($L0, '__ ""');
@@ -12405,7 +12552,7 @@ var require_parser = __commonJS({
12405
12552
  function __(ctx, state) {
12406
12553
  return $EVENT_C(ctx, state, "__", __$$);
12407
12554
  }
12408
- var Whitespace$0 = $TR($EXPECT($R44, "Whitespace /[\\s]+/"), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7, $8, $9) {
12555
+ var Whitespace$0 = $TR($EXPECT($R45, "Whitespace /[\\s]+/"), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7, $8, $9) {
12409
12556
  return { $loc, token: $0 };
12410
12557
  });
12411
12558
  function Whitespace(ctx, state) {
@@ -12443,7 +12590,7 @@ var require_parser = __commonJS({
12443
12590
  function SemicolonDelimiter(ctx, state) {
12444
12591
  return $EVENT(ctx, state, "SemicolonDelimiter", SemicolonDelimiter$0);
12445
12592
  }
12446
- var NonIdContinue$0 = $R$0($EXPECT($R68, "NonIdContinue /(?!\\p{ID_Continue})/"));
12593
+ var NonIdContinue$0 = $R$0($EXPECT($R69, "NonIdContinue /(?!\\p{ID_Continue})/"));
12447
12594
  function NonIdContinue(ctx, state) {
12448
12595
  return $EVENT(ctx, state, "NonIdContinue", NonIdContinue$0);
12449
12596
  }
@@ -12561,7 +12708,7 @@ var require_parser = __commonJS({
12561
12708
  function CoffeeSubstitutionStart(ctx, state) {
12562
12709
  return $EVENT(ctx, state, "CoffeeSubstitutionStart", CoffeeSubstitutionStart$0);
12563
12710
  }
12564
- var Colon$0 = $TS($S($EXPECT($L15, 'Colon ":"'), $N($EXPECT($L3, 'Colon "="'))), function($skip, $loc, $0, $1, $2) {
12711
+ var Colon$0 = $TS($S($EXPECT($L15, 'Colon ":"'), $N($EXPECT($R70, "Colon /[=:]/"))), function($skip, $loc, $0, $1, $2) {
12565
12712
  return { $loc, token: $1 };
12566
12713
  });
12567
12714
  function Colon(ctx, state) {
@@ -12606,7 +12753,7 @@ var require_parser = __commonJS({
12606
12753
  var Dot$0 = $TV($EXPECT($L7, 'Dot "."'), function($skip, $loc, $0, $1) {
12607
12754
  return { $loc, token: $1 };
12608
12755
  });
12609
- var Dot$1 = $TS($S($EXPECT($R69, "Dot /['\u2019]s/"), _), function($skip, $loc, $0, $1, $2) {
12756
+ var Dot$1 = $TS($S($EXPECT($R71, "Dot /['\u2019]s/"), _), function($skip, $loc, $0, $1, $2) {
12610
12757
  var ws = $2;
12611
12758
  return [
12612
12759
  { $loc, token: "." },
@@ -12727,7 +12874,7 @@ var require_parser = __commonJS({
12727
12874
  function If(ctx, state) {
12728
12875
  return $EVENT(ctx, state, "If", If$0);
12729
12876
  }
12730
- var Import$0 = $TS($S($EXPECT($L20, 'Import "import"'), $Y($EXPECT($R70, "Import /\\s/"))), function($skip, $loc, $0, $1, $2) {
12877
+ var Import$0 = $TS($S($EXPECT($L20, 'Import "import"'), $Y($EXPECT($R72, "Import /\\s/"))), function($skip, $loc, $0, $1, $2) {
12731
12878
  return { $loc, token: $1 };
12732
12879
  });
12733
12880
  function Import(ctx, state) {
@@ -12996,49 +13143,55 @@ var require_parser = __commonJS({
12996
13143
  function Typeof(ctx, state) {
12997
13144
  return $EVENT(ctx, state, "Typeof", Typeof$0);
12998
13145
  }
12999
- var Unless$0 = $TS($S($EXPECT($L202, 'Unless "unless"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
13146
+ var Undefined$0 = $TS($S($EXPECT($L202, 'Undefined "undefined"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
13147
+ return { $loc, token: $1 };
13148
+ });
13149
+ function Undefined(ctx, state) {
13150
+ return $EVENT(ctx, state, "Undefined", Undefined$0);
13151
+ }
13152
+ var Unless$0 = $TS($S($EXPECT($L203, 'Unless "unless"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
13000
13153
  return { $loc, token: $1, negated: true };
13001
13154
  });
13002
13155
  function Unless(ctx, state) {
13003
13156
  return $EVENT(ctx, state, "Unless", Unless$0);
13004
13157
  }
13005
- var Until$0 = $TS($S($EXPECT($L203, 'Until "until"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
13158
+ var Until$0 = $TS($S($EXPECT($L204, 'Until "until"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
13006
13159
  return { $loc, token: $1 };
13007
13160
  });
13008
13161
  function Until(ctx, state) {
13009
13162
  return $EVENT(ctx, state, "Until", Until$0);
13010
13163
  }
13011
- var Using$0 = $TS($S($EXPECT($L204, 'Using "using"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
13164
+ var Using$0 = $TS($S($EXPECT($L205, 'Using "using"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
13012
13165
  return { $loc, token: $1 };
13013
13166
  });
13014
13167
  function Using(ctx, state) {
13015
13168
  return $EVENT(ctx, state, "Using", Using$0);
13016
13169
  }
13017
- var Var$0 = $TS($S($EXPECT($L205, 'Var "var"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
13170
+ var Var$0 = $TS($S($EXPECT($L206, 'Var "var"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
13018
13171
  return { $loc, token: $1 };
13019
13172
  });
13020
13173
  function Var(ctx, state) {
13021
13174
  return $EVENT(ctx, state, "Var", Var$0);
13022
13175
  }
13023
- var Void$0 = $TS($S($EXPECT($L206, 'Void "void"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
13176
+ var Void$0 = $TS($S($EXPECT($L207, 'Void "void"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
13024
13177
  return { $loc, token: $1 };
13025
13178
  });
13026
13179
  function Void(ctx, state) {
13027
13180
  return $EVENT(ctx, state, "Void", Void$0);
13028
13181
  }
13029
- var When$0 = $TS($S($EXPECT($L207, 'When "when"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
13182
+ var When$0 = $TS($S($EXPECT($L208, 'When "when"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
13030
13183
  return { $loc, token: "case" };
13031
13184
  });
13032
13185
  function When(ctx, state) {
13033
13186
  return $EVENT(ctx, state, "When", When$0);
13034
13187
  }
13035
- var While$0 = $TS($S($EXPECT($L208, 'While "while"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
13188
+ var While$0 = $TS($S($EXPECT($L209, 'While "while"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
13036
13189
  return { $loc, token: $1 };
13037
13190
  });
13038
13191
  function While(ctx, state) {
13039
13192
  return $EVENT(ctx, state, "While", While$0);
13040
13193
  }
13041
- var Yield$0 = $TS($S($EXPECT($L209, 'Yield "yield"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
13194
+ var Yield$0 = $TS($S($EXPECT($L210, 'Yield "yield"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
13042
13195
  return { $loc, token: $1, type: "Yield" };
13043
13196
  });
13044
13197
  function Yield(ctx, state) {
@@ -13067,7 +13220,7 @@ var require_parser = __commonJS({
13067
13220
  function JSXImplicitFragment(ctx, state) {
13068
13221
  return $EVENT(ctx, state, "JSXImplicitFragment", JSXImplicitFragment$0);
13069
13222
  }
13070
- var JSXTag$0 = $T($S($EXPECT($R71, "JSXTag /(?=[<])/"), _JSXTag), function(value) {
13223
+ var JSXTag$0 = $T($S($EXPECT($R73, "JSXTag /(?=[<])/"), _JSXTag), function(value) {
13071
13224
  return value[1];
13072
13225
  });
13073
13226
  function JSXTag(ctx, state) {
@@ -13117,7 +13270,7 @@ var require_parser = __commonJS({
13117
13270
  function JSXElement(ctx, state) {
13118
13271
  return $EVENT_C(ctx, state, "JSXElement", JSXElement$$);
13119
13272
  }
13120
- var JSXSelfClosingElement$0 = $TS($S($EXPECT($L17, 'JSXSelfClosingElement "<"'), JSXElementName, $E(TypeArguments), $E(JSXAttributes), $E(Whitespace), $EXPECT($L210, 'JSXSelfClosingElement "/>"')), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6) {
13273
+ var JSXSelfClosingElement$0 = $TS($S($EXPECT($L17, 'JSXSelfClosingElement "<"'), JSXElementName, $E(TypeArguments), $E(JSXAttributes), $E(Whitespace), $EXPECT($L211, 'JSXSelfClosingElement "/>"')), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6) {
13121
13274
  return { type: "JSXElement", children: $0, tag: $2 };
13122
13275
  });
13123
13276
  function JSXSelfClosingElement(ctx, state) {
@@ -13151,7 +13304,7 @@ var require_parser = __commonJS({
13151
13304
  function JSXOptionalClosingElement(ctx, state) {
13152
13305
  return $EVENT_C(ctx, state, "JSXOptionalClosingElement", JSXOptionalClosingElement$$);
13153
13306
  }
13154
- var JSXClosingElement$0 = $S($EXPECT($L211, 'JSXClosingElement "</"'), $E(Whitespace), JSXElementName, $E(Whitespace), $EXPECT($L45, 'JSXClosingElement ">"'));
13307
+ var JSXClosingElement$0 = $S($EXPECT($L212, 'JSXClosingElement "</"'), $E(Whitespace), JSXElementName, $E(Whitespace), $EXPECT($L45, 'JSXClosingElement ">"'));
13155
13308
  function JSXClosingElement(ctx, state) {
13156
13309
  return $EVENT(ctx, state, "JSXClosingElement", JSXClosingElement$0);
13157
13310
  }
@@ -13172,7 +13325,7 @@ var require_parser = __commonJS({
13172
13325
  ];
13173
13326
  return { type: "JSXFragment", children: parts, jsxChildren: children.jsxChildren };
13174
13327
  });
13175
- var JSXFragment$1 = $TS($S(CoffeeJSXEnabled, $EXPECT($L212, 'JSXFragment "<>"'), $E(JSXChildren), $E(Whitespace), JSXClosingFragment), function($skip, $loc, $0, $1, $2, $3, $4, $5) {
13328
+ var JSXFragment$1 = $TS($S(CoffeeJSXEnabled, $EXPECT($L213, 'JSXFragment "<>"'), $E(JSXChildren), $E(Whitespace), JSXClosingFragment), function($skip, $loc, $0, $1, $2, $3, $4, $5) {
13176
13329
  var children = $3;
13177
13330
  $0 = $0.slice(1);
13178
13331
  return {
@@ -13185,7 +13338,7 @@ var require_parser = __commonJS({
13185
13338
  function JSXFragment(ctx, state) {
13186
13339
  return $EVENT_C(ctx, state, "JSXFragment", JSXFragment$$);
13187
13340
  }
13188
- var PushJSXOpeningFragment$0 = $TV($EXPECT($L212, 'PushJSXOpeningFragment "<>"'), function($skip, $loc, $0, $1) {
13341
+ var PushJSXOpeningFragment$0 = $TV($EXPECT($L213, 'PushJSXOpeningFragment "<>"'), function($skip, $loc, $0, $1) {
13189
13342
  module2.JSXTagStack.push("");
13190
13343
  return $1;
13191
13344
  });
@@ -13202,7 +13355,7 @@ var require_parser = __commonJS({
13202
13355
  function JSXOptionalClosingFragment(ctx, state) {
13203
13356
  return $EVENT_C(ctx, state, "JSXOptionalClosingFragment", JSXOptionalClosingFragment$$);
13204
13357
  }
13205
- var JSXClosingFragment$0 = $EXPECT($L213, 'JSXClosingFragment "</>"');
13358
+ var JSXClosingFragment$0 = $EXPECT($L214, 'JSXClosingFragment "</>"');
13206
13359
  function JSXClosingFragment(ctx, state) {
13207
13360
  return $EVENT(ctx, state, "JSXClosingFragment", JSXClosingFragment$0);
13208
13361
  }
@@ -13214,7 +13367,7 @@ var require_parser = __commonJS({
13214
13367
  function JSXElementName(ctx, state) {
13215
13368
  return $EVENT_C(ctx, state, "JSXElementName", JSXElementName$$);
13216
13369
  }
13217
- var JSXIdentifierName$0 = $R$0($EXPECT($R72, "JSXIdentifierName /(?:\\p{ID_Start}|[_$])(?:\\p{ID_Continue}|[\\u200C\\u200D$-])*/"));
13370
+ var JSXIdentifierName$0 = $R$0($EXPECT($R74, "JSXIdentifierName /(?:\\p{ID_Start}|[_$])(?:\\p{ID_Continue}|[\\u200C\\u200D$-])*/"));
13218
13371
  function JSXIdentifierName(ctx, state) {
13219
13372
  return $EVENT(ctx, state, "JSXIdentifierName", JSXIdentifierName$0);
13220
13373
  }
@@ -13393,7 +13546,7 @@ var require_parser = __commonJS({
13393
13546
  class: $2
13394
13547
  };
13395
13548
  });
13396
- var JSXAttribute$7 = $TS($S($TEXT($EXPECT($R73, "JSXAttribute /[!+-]/")), JSXAttributeName, $Y(JSXAttributeSpace)), function($skip, $loc, $0, $1, $2, $3) {
13549
+ var JSXAttribute$7 = $TS($S($TEXT($EXPECT($R75, "JSXAttribute /[!+-]/")), JSXAttributeName, $Y(JSXAttributeSpace)), function($skip, $loc, $0, $1, $2, $3) {
13397
13550
  var toggle = $1;
13398
13551
  var id = $2;
13399
13552
  const value = toggle === "+" ? "true" : "false";
@@ -13403,11 +13556,11 @@ var require_parser = __commonJS({
13403
13556
  function JSXAttribute(ctx, state) {
13404
13557
  return $EVENT_C(ctx, state, "JSXAttribute", JSXAttribute$$);
13405
13558
  }
13406
- var JSXAttributeSpace$0 = $R$0($EXPECT($R74, "JSXAttributeSpace /[\\s>]|\\/>/"));
13559
+ var JSXAttributeSpace$0 = $R$0($EXPECT($R76, "JSXAttributeSpace /[\\s>]|\\/>/"));
13407
13560
  function JSXAttributeSpace(ctx, state) {
13408
13561
  return $EVENT(ctx, state, "JSXAttributeSpace", JSXAttributeSpace$0);
13409
13562
  }
13410
- var JSXShorthandString$0 = $TR($EXPECT($R75, "JSXShorthandString /(?:[\\w\\-:]+|\\([^()]*\\)|\\[[^\\[\\]]*\\])+/"), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7, $8, $9) {
13563
+ var JSXShorthandString$0 = $TR($EXPECT($R77, "JSXShorthandString /(?:[\\w\\-:]+|\\([^()]*\\)|\\[[^\\[\\]]*\\])+/"), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7, $8, $9) {
13411
13564
  return quoteString($0);
13412
13565
  });
13413
13566
  var JSXShorthandString$1 = $TS($S(TemplateLiteral), function($skip, $loc, $0, $1) {
@@ -13441,7 +13594,7 @@ var require_parser = __commonJS({
13441
13594
  }
13442
13595
  return [open, value, close];
13443
13596
  });
13444
- var JSXAttributeValue$4 = $R$0($EXPECT($R76, `JSXAttributeValue /"[^"]*"|'[^']*'/`));
13597
+ var JSXAttributeValue$4 = $R$0($EXPECT($R78, `JSXAttributeValue /"[^"]*"|'[^']*'/`));
13445
13598
  var JSXAttributeValue$$ = [JSXAttributeValue$0, JSXAttributeValue$1, JSXAttributeValue$2, JSXAttributeValue$3, JSXAttributeValue$4];
13446
13599
  function JSXAttributeValue(ctx, state) {
13447
13600
  return $EVENT_C(ctx, state, "JSXAttributeValue", JSXAttributeValue$$);
@@ -13454,7 +13607,7 @@ var require_parser = __commonJS({
13454
13607
  function InlineJSXAttributeValue(ctx, state) {
13455
13608
  return $EVENT(ctx, state, "InlineJSXAttributeValue", InlineJSXAttributeValue$0);
13456
13609
  }
13457
- var InlineJSXBinaryOpRHS$0 = $TS($S($N($EXPECT($R77, "InlineJSXBinaryOpRHS /[<>]/")), BinaryOp, InlineJSXUnaryExpression), function($skip, $loc, $0, $1, $2, $3) {
13610
+ var InlineJSXBinaryOpRHS$0 = $TS($S($N($EXPECT($R79, "InlineJSXBinaryOpRHS /[<>]/")), BinaryOp, InlineJSXUnaryExpression), function($skip, $loc, $0, $1, $2, $3) {
13458
13611
  var op = $2;
13459
13612
  var rhs = $3;
13460
13613
  return [[], op, [], rhs];
@@ -13471,7 +13624,7 @@ var require_parser = __commonJS({
13471
13624
  function InlineJSXUnaryExpression(ctx, state) {
13472
13625
  return $EVENT(ctx, state, "InlineJSXUnaryExpression", InlineJSXUnaryExpression$0);
13473
13626
  }
13474
- var InlineJSXUnaryOp$0 = $TR($EXPECT($R78, "InlineJSXUnaryOp /[!~+-](?!\\s|[!~+-]*&)/"), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7, $8, $9) {
13627
+ var InlineJSXUnaryOp$0 = $TR($EXPECT($R80, "InlineJSXUnaryOp /[!~+-](?!\\s|[!~+-]*&)/"), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7, $8, $9) {
13475
13628
  return { $loc, token: $0 };
13476
13629
  });
13477
13630
  function InlineJSXUnaryOp(ctx, state) {
@@ -13681,19 +13834,19 @@ var require_parser = __commonJS({
13681
13834
  function JSXChild(ctx, state) {
13682
13835
  return $EVENT_C(ctx, state, "JSXChild", JSXChild$$);
13683
13836
  }
13684
- var JSXComment$0 = $TS($S($EXPECT($L214, 'JSXComment "<!--"'), JSXCommentContent, $EXPECT($L215, 'JSXComment "-->"')), function($skip, $loc, $0, $1, $2, $3) {
13837
+ var JSXComment$0 = $TS($S($EXPECT($L215, 'JSXComment "<!--"'), JSXCommentContent, $EXPECT($L216, 'JSXComment "-->"')), function($skip, $loc, $0, $1, $2, $3) {
13685
13838
  return ["{/*", $2, "*/}"];
13686
13839
  });
13687
13840
  function JSXComment(ctx, state) {
13688
13841
  return $EVENT(ctx, state, "JSXComment", JSXComment$0);
13689
13842
  }
13690
- var JSXCommentContent$0 = $TR($EXPECT($R79, "JSXCommentContent /(?:-[^-]|[^-]*)*/"), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7, $8, $9) {
13843
+ var JSXCommentContent$0 = $TR($EXPECT($R81, "JSXCommentContent /(?:-[^-]|[^-]*)*/"), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7, $8, $9) {
13691
13844
  return { $loc, token: $0.replace(/\*\//g, "* /") };
13692
13845
  });
13693
13846
  function JSXCommentContent(ctx, state) {
13694
13847
  return $EVENT(ctx, state, "JSXCommentContent", JSXCommentContent$0);
13695
13848
  }
13696
- var JSXText$0 = $TR($EXPECT($R80, "JSXText /[^{}<>\\r\\n]+/"), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7, $8, $9) {
13849
+ var JSXText$0 = $TR($EXPECT($R82, "JSXText /[^{}<>\\r\\n]+/"), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7, $8, $9) {
13697
13850
  return {
13698
13851
  type: "JSXText",
13699
13852
  token: $0,
@@ -13868,37 +14021,37 @@ var require_parser = __commonJS({
13868
14021
  function InterfaceExtendsTarget(ctx, state) {
13869
14022
  return $EVENT(ctx, state, "InterfaceExtendsTarget", InterfaceExtendsTarget$0);
13870
14023
  }
13871
- var TypeKeyword$0 = $TS($S($EXPECT($L216, 'TypeKeyword "type"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
14024
+ var TypeKeyword$0 = $TS($S($EXPECT($L217, 'TypeKeyword "type"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
13872
14025
  return { $loc, token: $1 };
13873
14026
  });
13874
14027
  function TypeKeyword(ctx, state) {
13875
14028
  return $EVENT(ctx, state, "TypeKeyword", TypeKeyword$0);
13876
14029
  }
13877
- var Enum$0 = $TS($S($EXPECT($L217, 'Enum "enum"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
14030
+ var Enum$0 = $TS($S($EXPECT($L218, 'Enum "enum"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
13878
14031
  return { $loc, token: $1 };
13879
14032
  });
13880
14033
  function Enum(ctx, state) {
13881
14034
  return $EVENT(ctx, state, "Enum", Enum$0);
13882
14035
  }
13883
- var Interface$0 = $TS($S($EXPECT($L218, 'Interface "interface"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
14036
+ var Interface$0 = $TS($S($EXPECT($L219, 'Interface "interface"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
13884
14037
  return { $loc, token: $1 };
13885
14038
  });
13886
14039
  function Interface(ctx, state) {
13887
14040
  return $EVENT(ctx, state, "Interface", Interface$0);
13888
14041
  }
13889
- var Global$0 = $TS($S($EXPECT($L219, 'Global "global"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
14042
+ var Global$0 = $TS($S($EXPECT($L220, 'Global "global"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
13890
14043
  return { $loc, token: $1 };
13891
14044
  });
13892
14045
  function Global(ctx, state) {
13893
14046
  return $EVENT(ctx, state, "Global", Global$0);
13894
14047
  }
13895
- var Module$0 = $TS($S($EXPECT($L220, 'Module "module"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
14048
+ var Module$0 = $TS($S($EXPECT($L221, 'Module "module"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
13896
14049
  return { $loc, token: $1 };
13897
14050
  });
13898
14051
  function Module(ctx, state) {
13899
14052
  return $EVENT(ctx, state, "Module", Module$0);
13900
14053
  }
13901
- var Namespace$0 = $TS($S($EXPECT($L221, 'Namespace "namespace"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
14054
+ var Namespace$0 = $TS($S($EXPECT($L222, 'Namespace "namespace"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
13902
14055
  return { $loc, token: $1 };
13903
14056
  });
13904
14057
  function Namespace(ctx, state) {
@@ -14114,7 +14267,7 @@ var require_parser = __commonJS({
14114
14267
  function TypeProperty(ctx, state) {
14115
14268
  return $EVENT(ctx, state, "TypeProperty", TypeProperty$0);
14116
14269
  }
14117
- var TypeIndexSignature$0 = $S($E($S($R$0($EXPECT($R81, "TypeIndexSignature /[+-]?/")), Readonly, NotDedented)), OpenBracket, TypeIndex, CloseBracket, $E($S(__, $R$0($EXPECT($R17, "TypeIndexSignature /[+-]/")), $Y($S($E(_), QuestionMark)))));
14270
+ var TypeIndexSignature$0 = $S($E($S($R$0($EXPECT($R83, "TypeIndexSignature /[+-]?/")), Readonly, NotDedented)), OpenBracket, TypeIndex, CloseBracket, $E($S(__, $R$0($EXPECT($R10, "TypeIndexSignature /[+-]/")), $Y($S($E(_), QuestionMark)))));
14118
14271
  function TypeIndexSignature(ctx, state) {
14119
14272
  return $EVENT(ctx, state, "TypeIndexSignature", TypeIndexSignature$0);
14120
14273
  }
@@ -14134,11 +14287,13 @@ var require_parser = __commonJS({
14134
14287
  return { "type": "TypeSuffix", "ts": true, "optional": optional, "children": value };
14135
14288
  });
14136
14289
  var TypeSuffix$2 = $TS($S(NonNullAssertion, $E(_), $E($S(Colon, MaybeIndentedType))), function($skip, $loc, $0, $1, $2, $3) {
14290
+ var nonnull = $1;
14137
14291
  var ct = $3;
14138
14292
  const [colon, t] = ct ?? [];
14139
14293
  return {
14140
14294
  type: "TypeSuffix",
14141
14295
  ts: true,
14296
+ nonnull,
14142
14297
  t,
14143
14298
  children: [$1, $2, colon, t]
14144
14299
  };
@@ -14172,7 +14327,7 @@ var require_parser = __commonJS({
14172
14327
  function ReturnTypeSuffix(ctx, state) {
14173
14328
  return $EVENT(ctx, state, "ReturnTypeSuffix", ReturnTypeSuffix$0);
14174
14329
  }
14175
- var ReturnType$0 = $TS($S($E($S(__, $EXPECT($L222, 'ReturnType "asserts"'), NonIdContinue)), TypePredicate), function($skip, $loc, $0, $1, $2) {
14330
+ var ReturnType$0 = $TS($S($E($S(__, $EXPECT($L223, 'ReturnType "asserts"'), NonIdContinue)), TypePredicate), function($skip, $loc, $0, $1, $2) {
14176
14331
  var asserts = $1;
14177
14332
  var t = $2;
14178
14333
  if (asserts) {
@@ -14251,7 +14406,7 @@ var require_parser = __commonJS({
14251
14406
  function TypeUnarySuffix(ctx, state) {
14252
14407
  return $EVENT_C(ctx, state, "TypeUnarySuffix", TypeUnarySuffix$$);
14253
14408
  }
14254
- var TypeUnaryOp$0 = $S($EXPECT($L223, 'TypeUnaryOp "keyof"'), NonIdContinue);
14409
+ var TypeUnaryOp$0 = $S($EXPECT($L224, 'TypeUnaryOp "keyof"'), NonIdContinue);
14255
14410
  var TypeUnaryOp$1 = $S($EXPECT($L184, 'TypeUnaryOp "readonly"'), NonIdContinue);
14256
14411
  var TypeUnaryOp$$ = [TypeUnaryOp$0, TypeUnaryOp$1];
14257
14412
  function TypeUnaryOp(ctx, state) {
@@ -14282,7 +14437,7 @@ var require_parser = __commonJS({
14282
14437
  function TypeIndexedAccess(ctx, state) {
14283
14438
  return $EVENT_C(ctx, state, "TypeIndexedAccess", TypeIndexedAccess$$);
14284
14439
  }
14285
- var UnknownAlias$0 = $TV($EXPECT($L224, 'UnknownAlias "???"'), function($skip, $loc, $0, $1) {
14440
+ var UnknownAlias$0 = $TV($EXPECT($L225, 'UnknownAlias "???"'), function($skip, $loc, $0, $1) {
14286
14441
  return { $loc, token: "unknown" };
14287
14442
  });
14288
14443
  function UnknownAlias(ctx, state) {
@@ -14408,7 +14563,7 @@ var require_parser = __commonJS({
14408
14563
  function NestedType(ctx, state) {
14409
14564
  return $EVENT(ctx, state, "NestedType", NestedType$0);
14410
14565
  }
14411
- var TypeConditional$0 = $TS($S($E(_), $EXPECT($R82, "TypeConditional /(?=if|unless)/"), TypeIfThenElse), function($skip, $loc, $0, $1, $2, $3) {
14566
+ var TypeConditional$0 = $TS($S($E(_), $EXPECT($R84, "TypeConditional /(?=if|unless)/"), TypeIfThenElse), function($skip, $loc, $0, $1, $2, $3) {
14412
14567
  return [$1, expressionizeTypeIf($3)];
14413
14568
  });
14414
14569
  var TypeConditional$1 = $TS($S(TypeCondition, NotDedented, QuestionMark, Type, __, Colon, Type), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7) {
@@ -14488,17 +14643,17 @@ var require_parser = __commonJS({
14488
14643
  }
14489
14644
  var TypeLiteral$0 = TypeTemplateLiteral;
14490
14645
  var TypeLiteral$1 = Literal;
14491
- var TypeLiteral$2 = $TS($S($EXPECT($R17, "TypeLiteral /[+-]/"), NumericLiteral), function($skip, $loc, $0, $1, $2) {
14646
+ var TypeLiteral$2 = $TS($S($EXPECT($R10, "TypeLiteral /[+-]/"), NumericLiteral), function($skip, $loc, $0, $1, $2) {
14492
14647
  var sign = $1;
14493
14648
  var num = $2;
14494
14649
  if (sign[0] === "+")
14495
14650
  return num;
14496
14651
  return $0;
14497
14652
  });
14498
- var TypeLiteral$3 = $TS($S($EXPECT($L206, 'TypeLiteral "void"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
14653
+ var TypeLiteral$3 = $TS($S($EXPECT($L207, 'TypeLiteral "void"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
14499
14654
  return { type: "VoidType", $loc, token: $1 };
14500
14655
  });
14501
- var TypeLiteral$4 = $TV($EXPECT($L225, 'TypeLiteral "[]"'), function($skip, $loc, $0, $1) {
14656
+ var TypeLiteral$4 = $TV($EXPECT($L226, 'TypeLiteral "[]"'), function($skip, $loc, $0, $1) {
14502
14657
  return { $loc, token: "[]" };
14503
14658
  });
14504
14659
  var TypeLiteral$$ = [TypeLiteral$0, TypeLiteral$1, TypeLiteral$2, TypeLiteral$3, TypeLiteral$4];
@@ -14608,15 +14763,15 @@ var require_parser = __commonJS({
14608
14763
  function ThisType(ctx, state) {
14609
14764
  return $EVENT(ctx, state, "ThisType", ThisType$0);
14610
14765
  }
14611
- var Shebang$0 = $S($R$0($EXPECT($R83, "Shebang /#![^\\r\\n]*/")), EOL);
14766
+ var Shebang$0 = $S($R$0($EXPECT($R85, "Shebang /#![^\\r\\n]*/")), EOL);
14612
14767
  function Shebang(ctx, state) {
14613
14768
  return $EVENT(ctx, state, "Shebang", Shebang$0);
14614
14769
  }
14615
- var CivetPrologue$0 = $T($S($EXPECT($R84, "CivetPrologue /[\\t ]*/"), DoubleQuote, CivetPrologueContent, DoubleQuote, SimpleStatementDelimiter, $EXPECT($R85, "CivetPrologue /[ \\t]*/"), $C(EOL, $Y(RestOfLine))), function(value) {
14770
+ var CivetPrologue$0 = $T($S($EXPECT($R86, "CivetPrologue /[\\t ]*/"), DoubleQuote, CivetPrologueContent, DoubleQuote, SimpleStatementDelimiter, $EXPECT($R87, "CivetPrologue /[ \\t]*/"), $C(EOL, $Y(RestOfLine))), function(value) {
14616
14771
  var content = value[2];
14617
14772
  return content;
14618
14773
  });
14619
- var CivetPrologue$1 = $T($S($EXPECT($R84, "CivetPrologue /[\\t ]*/"), SingleQuote, CivetPrologueContent, SingleQuote, SimpleStatementDelimiter, $EXPECT($R85, "CivetPrologue /[ \\t]*/"), $C(EOL, $Y(RestOfLine))), function(value) {
14774
+ var CivetPrologue$1 = $T($S($EXPECT($R86, "CivetPrologue /[\\t ]*/"), SingleQuote, CivetPrologueContent, SingleQuote, SimpleStatementDelimiter, $EXPECT($R87, "CivetPrologue /[ \\t]*/"), $C(EOL, $Y(RestOfLine))), function(value) {
14620
14775
  var content = value[2];
14621
14776
  return content;
14622
14777
  });
@@ -14624,7 +14779,7 @@ var require_parser = __commonJS({
14624
14779
  function CivetPrologue(ctx, state) {
14625
14780
  return $EVENT_C(ctx, state, "CivetPrologue", CivetPrologue$$);
14626
14781
  }
14627
- var CivetPrologueContent$0 = $TS($S($EXPECT($L226, 'CivetPrologueContent "civet"'), NonIdContinue, $Q(CivetOption), $EXPECT($R86, "CivetPrologueContent /[\\s]*/")), function($skip, $loc, $0, $1, $2, $3, $4) {
14782
+ var CivetPrologueContent$0 = $TS($S($EXPECT($L227, 'CivetPrologueContent "civet"'), NonIdContinue, $Q(CivetOption), $EXPECT($R88, "CivetPrologueContent /[\\s]*/")), function($skip, $loc, $0, $1, $2, $3, $4) {
14628
14783
  var options = $3;
14629
14784
  return {
14630
14785
  type: "CivetPrologue",
@@ -14635,7 +14790,7 @@ var require_parser = __commonJS({
14635
14790
  function CivetPrologueContent(ctx, state) {
14636
14791
  return $EVENT(ctx, state, "CivetPrologueContent", CivetPrologueContent$0);
14637
14792
  }
14638
- var CivetOption$0 = $TR($EXPECT($R87, "CivetOption /\\s+([+-]?)([a-zA-Z0-9-]+)(\\s*=\\s*([a-zA-Z0-9.+-]*))?/"), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7, $8, $9) {
14793
+ var CivetOption$0 = $TR($EXPECT($R89, "CivetOption /\\s+([+-]?)([a-zA-Z0-9-]+)(\\s*=\\s*([a-zA-Z0-9.+-]*))?/"), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7, $8, $9) {
14639
14794
  const optionName = $2.replace(/-+([a-z]?)/g, (_2, l) => {
14640
14795
  if (l)
14641
14796
  return l.toUpperCase();
@@ -14652,11 +14807,11 @@ var require_parser = __commonJS({
14652
14807
  function CivetOption(ctx, state) {
14653
14808
  return $EVENT(ctx, state, "CivetOption", CivetOption$0);
14654
14809
  }
14655
- var UnknownPrologue$0 = $S($R$0($EXPECT($R84, "UnknownPrologue /[\\t ]*/")), StringLiteral, $TEXT(SimpleStatementDelimiter), EOS);
14810
+ var UnknownPrologue$0 = $S($R$0($EXPECT($R86, "UnknownPrologue /[\\t ]*/")), StringLiteral, $TEXT(SimpleStatementDelimiter), EOS);
14656
14811
  function UnknownPrologue(ctx, state) {
14657
14812
  return $EVENT(ctx, state, "UnknownPrologue", UnknownPrologue$0);
14658
14813
  }
14659
- var TripleSlashDirective$0 = $S($R$0($EXPECT($R88, "TripleSlashDirective /\\/\\/\\/[^\\r\\n]*/")), $E(EOS));
14814
+ var TripleSlashDirective$0 = $S($R$0($EXPECT($R90, "TripleSlashDirective /\\/\\/\\/[^\\r\\n]*/")), $E(EOS));
14660
14815
  function TripleSlashDirective(ctx, state) {
14661
14816
  return $EVENT(ctx, state, "TripleSlashDirective", TripleSlashDirective$0);
14662
14817
  }
@@ -14672,13 +14827,13 @@ var require_parser = __commonJS({
14672
14827
  function PrologueString(ctx, state) {
14673
14828
  return $EVENT_C(ctx, state, "PrologueString", PrologueString$$);
14674
14829
  }
14675
- var EOS$0 = $T($S($EXPECT($R89, "EOS /(?=[ \\t\\r\\n\\/#]|$)/"), $P(RestOfLine)), function(value) {
14830
+ var EOS$0 = $T($S($EXPECT($R91, "EOS /(?=[ \\t\\r\\n\\/#]|$)/"), $P(RestOfLine)), function(value) {
14676
14831
  return value[1];
14677
14832
  });
14678
14833
  function EOS(ctx, state) {
14679
14834
  return $EVENT(ctx, state, "EOS", EOS$0);
14680
14835
  }
14681
- var EOL$0 = $TR($EXPECT($R90, "EOL /\\r\\n|\\n|\\r|$/"), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7, $8, $9) {
14836
+ var EOL$0 = $TR($EXPECT($R92, "EOL /\\r\\n|\\n|\\r|$/"), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7, $8, $9) {
14682
14837
  return { $loc, token: $0 };
14683
14838
  });
14684
14839
  function EOL(ctx, state) {
@@ -15250,11 +15405,11 @@ var require_parser = __commonJS({
15250
15405
  function Prologue(ctx, state) {
15251
15406
  return $EVENT(ctx, state, "Prologue", Prologue$0);
15252
15407
  }
15253
- var ProloguePrefix$0 = $S(Prologue, $R$0($EXPECT($R91, "ProloguePrefix /[^]*/")));
15408
+ var ProloguePrefix$0 = $S(Prologue, $R$0($EXPECT($R93, "ProloguePrefix /[^]*/")));
15254
15409
  function ProloguePrefix(ctx, state) {
15255
15410
  return $EVENT(ctx, state, "ProloguePrefix", ProloguePrefix$0);
15256
15411
  }
15257
- var Indent$0 = $TR($EXPECT($R85, "Indent /[ \\t]*/"), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7, $8, $9) {
15412
+ var Indent$0 = $TR($EXPECT($R87, "Indent /[ \\t]*/"), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7, $8, $9) {
15258
15413
  const level = getIndentLevel($0, module2.config.tab);
15259
15414
  return {
15260
15415
  $loc,
@@ -15402,11 +15557,11 @@ var require_parser = __commonJS({
15402
15557
  exports2.WRHS = WRHS;
15403
15558
  exports2.SingleLineBinaryOpRHS = SingleLineBinaryOpRHS;
15404
15559
  exports2.RHS = RHS;
15405
- exports2.ParenthesizedAssignment = ParenthesizedAssignment;
15406
15560
  exports2.UnaryExpression = UnaryExpression;
15407
15561
  exports2.UnaryWithoutParenthesizedAssignment = UnaryWithoutParenthesizedAssignment;
15408
15562
  exports2.UnaryBody = UnaryBody;
15409
15563
  exports2.UnaryWithoutParenthesizedAssignmentBody = UnaryWithoutParenthesizedAssignmentBody;
15564
+ exports2.ParenthesizedAssignment = ParenthesizedAssignment;
15410
15565
  exports2.UnaryPostfix = UnaryPostfix;
15411
15566
  exports2.TypePostfix = TypePostfix;
15412
15567
  exports2.Tuple = Tuple;
@@ -15434,6 +15589,7 @@ var require_parser = __commonJS({
15434
15589
  exports2.PipelineTailItem = PipelineTailItem;
15435
15590
  exports2.PrimaryExpression = PrimaryExpression;
15436
15591
  exports2.ParenthesizedExpression = ParenthesizedExpression;
15592
+ exports2.PartialPlaceholder = PartialPlaceholder;
15437
15593
  exports2.ClassDeclaration = ClassDeclaration;
15438
15594
  exports2.ClassExpression = ClassExpression;
15439
15595
  exports2.ClassBinding = ClassBinding;
@@ -15478,6 +15634,7 @@ var require_parser = __commonJS({
15478
15634
  exports2.MemberBracketContent = MemberBracketContent;
15479
15635
  exports2.SliceParameters = SliceParameters;
15480
15636
  exports2.AccessStart = AccessStart;
15637
+ exports2.ImplicitAccessStart = ImplicitAccessStart;
15481
15638
  exports2.PropertyAccessModifier = PropertyAccessModifier;
15482
15639
  exports2.PropertyAccess = PropertyAccess;
15483
15640
  exports2.PropertyGlob = PropertyGlob;
@@ -15612,6 +15769,7 @@ var require_parser = __commonJS({
15612
15769
  exports2.BinaryOp = BinaryOp;
15613
15770
  exports2._BinaryOp = _BinaryOp;
15614
15771
  exports2.BinaryOpSymbol = BinaryOpSymbol;
15772
+ exports2.ActualIn = ActualIn;
15615
15773
  exports2.CoffeeOfOp = CoffeeOfOp;
15616
15774
  exports2.NotOp = NotOp;
15617
15775
  exports2.Xor = Xor;
@@ -15892,6 +16050,7 @@ var require_parser = __commonJS({
15892
16050
  exports2.TripleTick = TripleTick;
15893
16051
  exports2.Try = Try;
15894
16052
  exports2.Typeof = Typeof;
16053
+ exports2.Undefined = Undefined;
15895
16054
  exports2.Unless = Unless;
15896
16055
  exports2.Until = Until;
15897
16056
  exports2.Using = Using;
@@ -16109,6 +16268,13 @@ module.exports = __toCommonJS(main_exports);
16109
16268
  var import_parser = __toESM(require_parser());
16110
16269
 
16111
16270
  // source/generate.civet
16271
+ function stringify(node) {
16272
+ try {
16273
+ return JSON.stringify(node);
16274
+ } catch (e) {
16275
+ return `${node}`;
16276
+ }
16277
+ }
16112
16278
  function gen(node, options) {
16113
16279
  if (node === null || node === void 0) {
16114
16280
  return "";
@@ -16142,16 +16308,16 @@ function gen(node, options) {
16142
16308
  if (!node.children) {
16143
16309
  switch (node.type) {
16144
16310
  case "Ref": {
16145
- throw new Error(`Unpopulated ref ${JSON.stringify(node)}`);
16311
+ throw new Error(`Unpopulated ref ${stringify(node)}`);
16146
16312
  }
16147
16313
  }
16148
16314
  debugger;
16149
- throw new Error(`Unknown node ${JSON.stringify(node)}`);
16315
+ throw new Error(`Unknown node ${stringify(node)}`);
16150
16316
  }
16151
16317
  return gen(node.children, options);
16152
16318
  }
16153
16319
  debugger;
16154
- throw new Error(`Unknown node ${JSON.stringify(node)}`);
16320
+ throw new Error(`Unknown node ${stringify(node)}`);
16155
16321
  }
16156
16322
  var generate_default = gen;
16157
16323
  function prune(node) {