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