rew_compiler/
civet.rs

1pub fn get_civet_script() -> String {
2  String::from(
3    r#"
4  (()=>{
5"use strict";
6var module = {};
7var __create = Object.create;
8var __defProp = Object.defineProperty;
9var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
10var __getOwnPropNames = Object.getOwnPropertyNames;
11var __getProtoOf = Object.getPrototypeOf;
12var __hasOwnProp = Object.prototype.hasOwnProperty;
13var __commonJS = (cb, mod) => function __require() {
14  return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
15};
16var __export = (target, all) => {
17  for (var name in all)
18    __defProp(target, name, { get: all[name], enumerable: true });
19};
20var __copyProps = (to, from, except, desc) => {
21  if (from && typeof from === "object" || typeof from === "function") {
22    for (let key of __getOwnPropNames(from))
23      if (!__hasOwnProp.call(to, key) && key !== except)
24        __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
25  }
26  return to;
27};
28var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
29  // If the importer is in node compatibility mode or this is not an ESM
30  // file that has been converted to a CommonJS file using a Babel-
31  // compatible transform (i.e. "__esModule" has not been set), then set
32  // "default" to the CommonJS "module.exports" for node compatibility.
33  isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
34  mod
35));
36var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
37
38// node_modules/@danielx/hera/dist/machine.js
39var require_machine = __commonJS({
40  "node_modules/@danielx/hera/dist/machine.js"(exports2, module2) {
41    "use strict";
42    var __defProp2 = Object.defineProperty;
43    var __getOwnPropDesc2 = Object.getOwnPropertyDescriptor;
44    var __getOwnPropNames2 = Object.getOwnPropertyNames;
45    var __hasOwnProp2 = Object.prototype.hasOwnProperty;
46    var __export2 = (target, all) => {
47      for (var name in all)
48        __defProp2(target, name, { get: all[name], enumerable: true });
49    };
50    var __copyProps2 = (to, from, except, desc) => {
51      if (from && typeof from === "object" || typeof from === "function") {
52        for (let key of __getOwnPropNames2(from))
53          if (!__hasOwnProp2.call(to, key) && key !== except)
54            __defProp2(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc2(from, key)) || desc.enumerable });
55      }
56      return to;
57    };
58    var __toCommonJS2 = (mod) => __copyProps2(__defProp2({}, "__esModule", { value: true }), mod);
59    var machine_exports = {};
60    __export2(machine_exports, {
61      $C: () => $C2,
62      $E: () => $E2,
63      $EVENT: () => $EVENT2,
64      $EVENT_C: () => $EVENT_C2,
65      $EXPECT: () => $EXPECT2,
66      $L: () => $L231,
67      $N: () => $N2,
68      $P: () => $P2,
69      $Q: () => $Q2,
70      $R: () => $R95,
71      $R$0: () => $R$02,
72      $S: () => $S2,
73      $T: () => $T2,
74      $TEXT: () => $TEXT2,
75      $TR: () => $TR2,
76      $TS: () => $TS2,
77      $TV: () => $TV2,
78      $Y: () => $Y2,
79      ParseError: () => ParseError2,
80      Validator: () => Validator2
81    });
82    module2.exports = __toCommonJS2(machine_exports);
83    function $EXPECT2(parser2, expectation) {
84      return function(ctx, state2) {
85        const result = parser2(ctx, state2);
86        if (!result)
87          ctx.fail(state2.pos, expectation);
88        return result;
89      };
90    }
91    function $L231(str) {
92      return function(_ctx, state2) {
93        const { input, pos } = state2, { length } = str, end = pos + length;
94        if (input.substring(pos, end) === str) {
95          return {
96            loc: {
97              pos,
98              length
99            },
100            pos: end,
101            value: str
102          };
103        }
104        return;
105      };
106    }
107    function $R95(regExp) {
108      return function(_ctx, state2) {
109        const { input, pos } = state2;
110        regExp.lastIndex = state2.pos;
111        let l, m, v;
112        if (m = input.match(regExp)) {
113          v = m[0];
114          l = v.length;
115          return {
116            loc: {
117              pos,
118              length: l
119            },
120            pos: pos + l,
121            value: m
122          };
123        }
124        return;
125      };
126    }
127    function $C2(...terms) {
128      return (ctx, state2) => {
129        let i = 0;
130        const l = terms.length;
131        while (i < l) {
132          const r = terms[i++](ctx, state2);
133          if (r)
134            return r;
135        }
136        return;
137      };
138    }
139    function $S2(...terms) {
140      return (ctx, state2) => {
141        let { input, pos } = state2, i = 0, value;
142        const results = [], s = pos, l = terms.length;
143        while (i < l) {
144          const r = terms[i++](ctx, { input, pos });
145          if (r) {
146            ({ pos, value } = r);
147            results.push(value);
148          } else
149            return;
150        }
151        return {
152          loc: {
153            pos: s,
154            length: pos - s
155          },
156          pos,
157          value: results
158        };
159      };
160    }
161    function $E2(fn) {
162      return (ctx, state2) => {
163        const r = fn(ctx, state2);
164        if (r)
165          return r;
166        const { pos } = state2;
167        return {
168          loc: {
169            pos,
170            length: 0
171          },
172          pos,
173          value: void 0
174        };
175      };
176    }
177    function $Q2(fn) {
178      return (ctx, state2) => {
179        let { input, pos } = state2;
180        let value;
181        const s = pos;
182        const results = [];
183        while (true) {
184          const prevPos = pos;
185          const r = fn(ctx, { input, pos });
186          if (!r)
187            break;
188          ({ pos, value } = r);
189          if (pos === prevPos)
190            break;
191          else
192            results.push(value);
193        }
194        return {
195          loc: {
196            pos: s,
197            length: pos - s
198          },
199          pos,
200          value: results
201        };
202      };
203    }
204    function $P2(fn) {
205      return (ctx, state2) => {
206        const { input, pos: s } = state2;
207        let value;
208        const first = fn(ctx, state2);
209        if (!first)
210          return;
211        let { pos } = first;
212        const results = [first.value];
213        while (true) {
214          const prevPos = pos;
215          const r = fn(ctx, { input, pos });
216          if (!r)
217            break;
218          ({ pos, value } = r);
219          if (pos === prevPos)
220            break;
221          results.push(value);
222        }
223        return {
224          loc: {
225            pos: s,
226            length: pos - s
227          },
228          value: results,
229          pos
230        };
231      };
232    }
233    function $TEXT2(fn) {
234      return (ctx, state2) => {
235        const newState = fn(ctx, state2);
236        if (!newState)
237          return;
238        newState.value = state2.input.substring(state2.pos, newState.pos);
239        return newState;
240      };
241    }
242    function $N2(fn) {
243      return (ctx, state2) => {
244        const newState = fn(ctx, state2);
245        if (newState)
246          return;
247        return {
248          loc: {
249            pos: state2.pos,
250            length: 0
251          },
252          value: void 0,
253          pos: state2.pos
254        };
255      };
256    }
257    function $Y2(fn) {
258      return (ctx, state2) => {
259        const newState = fn(ctx, state2);
260        if (!newState)
261          return;
262        return {
263          loc: {
264            pos: state2.pos,
265            length: 0
266          },
267          value: void 0,
268          pos: state2.pos
269        };
270      };
271    }
272    function $T2(parser2, fn) {
273      return function(ctx, state2) {
274        const result = parser2(ctx, state2);
275        if (!result)
276          return;
277        if (ctx.tokenize)
278          return result;
279        const { value } = result;
280        const mappedValue = fn(value);
281        result.value = mappedValue;
282        return result;
283      };
284    }
285    function $TR2(parser2, fn) {
286      return function(ctx, state2) {
287        const result = parser2(ctx, state2);
288        if (!result)
289          return;
290        if (ctx.tokenize)
291          return result;
292        const { loc, value } = result;
293        const mappedValue = fn(SKIP, loc, ...value);
294        if (mappedValue === SKIP) {
295          return;
296        }
297        result.value = mappedValue;
298        return result;
299      };
300    }
301    function $TS2(parser2, fn) {
302      return function(ctx, state2) {
303        const result = parser2(ctx, state2);
304        if (!result)
305          return;
306        if (ctx.tokenize)
307          return result;
308        const { loc, value } = result;
309        const mappedValue = fn(SKIP, loc, value, ...value);
310        if (mappedValue === SKIP) {
311          return;
312        }
313        result.value = mappedValue;
314        return result;
315      };
316    }
317    function $TV2(parser2, fn) {
318      return function(ctx, state2) {
319        const result = parser2(ctx, state2);
320        if (!result)
321          return;
322        if (ctx.tokenize)
323          return result;
324        const { loc, value } = result;
325        const mappedValue = fn(SKIP, loc, value, value);
326        if (mappedValue === SKIP) {
327          return;
328        }
329        result.value = mappedValue;
330        return result;
331      };
332    }
333    function $R$02(parser2) {
334      return function(ctx, state2) {
335        const result = parser2(ctx, state2);
336        if (!result)
337          return;
338        const value = result.value[0];
339        result.value = value;
340        return result;
341      };
342    }
343    function $EVENT2(ctx, state2, name, fn) {
344      let eventData, enter, exit;
345      if (enter = ctx.enter) {
346        const result2 = enter(name, state2);
347        if (result2) {
348          if ("cache" in result2)
349            return result2.cache;
350          eventData = result2.data;
351        }
352      }
353      let result = fn(ctx, state2);
354      if (result && ctx.tokenize) {
355        result = $TOKEN(name, state2, result);
356      }
357      if (exit = ctx.exit)
358        exit(name, state2, result, eventData);
359      return result;
360    }
361    function $EVENT_C2(ctx, state2, name, fns) {
362      let eventData, enter, exit;
363      if (enter = ctx.enter) {
364        const result2 = enter(name, state2);
365        if (result2) {
366          if ("cache" in result2)
367            return result2.cache;
368          eventData = result2.data;
369        }
370      }
371      let result, i = 0, l = fns.length;
372      while (!result && i < l) {
373        if (result = fns[i](ctx, state2))
374          break;
375        i++;
376      }
377      if (result && ctx.tokenize) {
378        result = $TOKEN(name, state2, result);
379      }
380      if (exit = ctx.exit)
381        exit(name, state2, result, eventData);
382      return result;
383    }
384    function $TOKEN(name, state2, newState) {
385      if (!newState)
386        return;
387      newState.value = {
388        type: name,
389        children: [newState.value].flat(),
390        token: state2.input.substring(state2.pos, newState.pos),
391        loc: newState.loc
392      };
393      return newState;
394    }
395    var SKIP = {};
396    function Validator2() {
397      const failHintRegex = /\S+|\s+|$/y;
398      const failExpected = Array(16);
399      let failIndex = 0;
400      let maxFailPos = 0;
401      function fail(pos, expected) {
402        if (pos < maxFailPos)
403          return;
404        if (pos > maxFailPos) {
405          maxFailPos = pos;
406          failExpected.length = failIndex = 0;
407        }
408        failExpected[failIndex++] = expected;
409        return;
410      }
411      function location(input, pos) {
412        const [line, column] = input.split(/\n|\r\n|\r/).reduce(([row, col], line2) => {
413          const l = line2.length + 1;
414          if (pos >= l) {
415            pos -= l;
416            return [row + 1, 1];
417          } else if (pos >= 0) {
418            col += pos;
419            pos = -1;
420            return [row, col];
421          } else {
422            return [row, col];
423          }
424        }, [1, 1]);
425        return [line, column];
426      }
427      function validate(input, result, { filename: filename2 }) {
428        if (result && result.pos === input.length)
429          return result.value;
430        const expectations = Array.from(new Set(failExpected.slice(0, failIndex)));
431        let l = location(input, maxFailPos), [line, column] = l;
432        if (result && result.pos > maxFailPos) {
433          l = location(input, result.pos);
434          throw new Error(`${filename2}:${line}:${column} Unconsumed input at #{l}
435
436${input.slice(result.pos)}
437`);
438        }
439        if (expectations.length) {
440          failHintRegex.lastIndex = maxFailPos;
441          let [hint] = input.match(failHintRegex);
442          if (hint.length)
443            hint = JSON.stringify(hint);
444          else
445            hint = "EOF";
446          const error = new ParseError2("Failed to parse", `Expected:
447	${expectations.join("\n	")}
448Found: ${hint}
449`, filename2, line, column, maxFailPos);
450          throw error;
451        }
452        if (result) {
453          throw new Error(`
454Unconsumed input at ${l}
455
456${input.slice(result.pos)}
457`);
458        }
459        throw new Error("No result");
460      }
461      function reset() {
462        failIndex = 0;
463        maxFailPos = 0;
464        failExpected.length = 0;
465      }
466      return {
467        fail,
468        validate,
469        reset
470      };
471    }
472    var ParseError2 = class extends Error {
473      constructor(header, body, filename2, line, column, offset) {
474        let message = `${filename2}:${line}:${column} ${header}`;
475        if (body)
476          message += `
477${body}`;
478        super(message);
479        this.header = header;
480        this.body = body;
481        this.filename = filename2;
482        this.line = line;
483        this.column = column;
484        this.offset = offset;
485        this.name = "ParseError";
486        this.message = message;
487      }
488    };
489  }
490});
491
492// source/main.civet
493var main_exports = {};
494__export(main_exports, {
495  ParseError: () => import_lib3.ParseError,
496  ParseErrors: () => ParseErrors,
497  SourceMap: () => SourceMap2,
498  compile: () => compile,
499  default: () => main_default,
500  generate: () => generate_default,
501  isCompileError: () => isCompileError,
502  lib: () => lib_exports,
503  parse: () => parse,
504  parseProgram: () => parseProgram,
505  prune: () => prune,
506  sourcemap: () => sourcemap_exports
507});
508module.exports = __toCommonJS(main_exports);
509
510// source/parser.hera
511var import_lib3 = __toESM(require_machine());
512
513// source/parser/lib.civet
514var lib_exports = {};
515__export(lib_exports, {
516  addPostfixStatement: () => addPostfixStatement,
517  adjustBindingElements: () => adjustBindingElements,
518  adjustIndexAccess: () => adjustIndexAccess,
519  attachPostfixStatementAsExpression: () => attachPostfixStatementAsExpression,
520  blockWithPrefix: () => blockWithPrefix,
521  convertNamedImportsToObject: () => convertNamedImportsToObject,
522  convertObjectToJSXAttributes: () => convertObjectToJSXAttributes,
523  convertWithClause: () => convertWithClause,
524  dedentBlockString: () => dedentBlockString,
525  dedentBlockSubstitutions: () => dedentBlockSubstitutions,
526  deepCopy: () => deepCopy,
527  dynamizeImportDeclaration: () => dynamizeImportDeclaration,
528  dynamizeImportDeclarationExpression: () => dynamizeImportDeclarationExpression,
529  expressionizeTypeIf: () => expressionizeTypeIf,
530  forRange: () => forRange,
531  gatherBindingCode: () => gatherBindingCode,
532  gatherRecursive: () => gatherRecursive,
533  gatherRecursiveAll: () => gatherRecursiveAll,
534  gatherRecursiveWithinFunction: () => gatherRecursiveWithinFunction,
535  getHelperRef: () => getHelperRef,
536  getIndentLevel: () => getIndentLevel,
537  getPrecedence: () => getPrecedence,
538  getTrimmingSpace: () => getTrimmingSpace,
539  hasAwait: () => hasAwait,
540  hasImportDeclaration: () => hasImportDeclaration,
541  hasYield: () => hasYield,
542  insertTrimmingSpace: () => insertTrimmingSpace,
543  isEmptyBareBlock: () => isEmptyBareBlock,
544  isFunction: () => isFunction,
545  isWhitespaceOrEmpty: () => isWhitespaceOrEmpty,
546  lastAccessInCallExpression: () => lastAccessInCallExpression,
547  literalValue: () => literalValue,
548  makeAmpersandFunction: () => makeAmpersandFunction,
549  makeEmptyBlock: () => makeEmptyBlock,
550  makeExpressionStatement: () => makeExpressionStatement,
551  makeGetterMethod: () => makeGetterMethod,
552  makeLeftHandSideExpression: () => makeLeftHandSideExpression,
553  makeRef: () => makeRef,
554  maybeRef: () => maybeRef,
555  maybeRefAssignment: () => maybeRefAssignment,
556  modifyString: () => modifyString,
557  negateCondition: () => negateCondition,
558  precedenceStep: () => precedenceStep,
559  prepend: () => prepend,
560  processAssignmentDeclaration: () => processAssignmentDeclaration,
561  processBinaryOpExpression: () => processBinaryOpExpression,
562  processCallMemberExpression: () => processCallMemberExpression,
563  processCoffeeDo: () => processCoffeeDo,
564  processCoffeeInterpolation: () => processCoffeeInterpolation,
565  processForInOf: () => processForInOf,
566  processProgram: () => processProgram,
567  processProgramAsync: () => processProgramAsync,
568  processTryBlock: () => processTryBlock,
569  processUnaryExpression: () => processUnaryExpression,
570  quoteString: () => quoteString,
571  reorderBindingRestProperty: () => reorderBindingRestProperty,
572  replaceNode: () => replaceNode,
573  replaceNodes: () => replaceNodes,
574  skipImplicitArguments: () => skipImplicitArguments,
575  trimFirstSpace: () => trimFirstSpace,
576  typeOfJSX: () => typeOfJSX,
577  wrapIIFE: () => wrapIIFE
578});
579
580// source/parser/binding.civet
581function adjustAtBindings(statements, asThis = false) {
582  gatherRecursiveAll(statements, (n) => n.type === "AtBindingProperty").forEach((binding) => {
583    const { ref } = binding;
584    if (asThis) {
585      const atBinding = binding.binding;
586      atBinding.children.pop();
587      atBinding.type = void 0;
588      binding.children.unshift(ref.id, ": this.", ref.base);
589      binding.type = "Property";
590      binding.ref = void 0;
591      return;
592    }
593    if (ref.names[0] !== ref.base) {
594      return binding.children.unshift(ref.base, ": ");
595    }
596    ;
597    return;
598  });
599}
600function adjustBindingElements(elements) {
601  const names = elements.flatMap((p) => p.names || []), { length } = elements;
602  let blockPrefix, restIndex = -1, restCount = 0;
603  elements.forEach(({ type }, i) => {
604    if (type === "BindingRestElement") {
605      if (restIndex < 0)
606        restIndex = i;
607      return restCount++;
608    }
609    ;
610    return;
611  });
612  if (restCount === 0) {
613    return {
614      children: elements,
615      names,
616      blockPrefix,
617      length
618    };
619  } else if (restCount === 1) {
620    const rest = elements[restIndex];
621    const after = elements.slice(restIndex + 1);
622    const restIdentifier = rest.binding.ref || rest.binding;
623    names.push(...rest.names || []);
624    let l = after.length;
625    if (l) {
626      if (arrayElementHasTrailingComma(after[l - 1]))
627        l++;
628      blockPrefix = {
629        type: "PostRestBindingElements",
630        children: ["[", insertTrimmingSpace(after, ""), "] = ", restIdentifier, ".splice(-", l.toString(), ")"],
631        names: after.flatMap((p) => p.names)
632      };
633    }
634    return {
635      names,
636      children: [...elements.slice(0, restIndex), {
637        ...rest,
638        children: rest.children.slice(0, -1)
639        // remove trailing comma
640      }],
641      blockPrefix,
642      length
643    };
644  }
645  const err = {
646    type: "Error",
647    children: ["Multiple rest elements in array pattern"]
648  };
649  return {
650    names,
651    children: [...elements, err],
652    blockPrefix,
653    length
654  };
655}
656function gatherBindingCode(statements, opts) {
657  const thisAssignments = [];
658  const splices = [];
659  function insertRestSplices(s, p, thisAssignments2) {
660    gatherRecursiveAll(s, (n) => n.blockPrefix || opts?.injectParamProps && n.accessModifier || n.type === "AtBinding").forEach((n) => {
661      if (n.type === "AtBinding") {
662        const { ref } = n;
663        const { id } = ref;
664        thisAssignments2.push([`this.${id} = `, ref]);
665        return;
666      }
667      if (opts?.injectParamProps && n.type === "Parameter" && n.accessModifier) {
668        n.names.forEach((id) => ({
669          push: thisAssignments2.push({
670            type: "AssignmentExpression",
671            children: [`this.${id} = `, id],
672            js: true
673          })
674        }));
675        return;
676      }
677      const { blockPrefix } = n;
678      p.push(blockPrefix);
679      return insertRestSplices(blockPrefix, p, thisAssignments2);
680    });
681  }
682  insertRestSplices(statements, splices, thisAssignments);
683  return [splices, thisAssignments];
684}
685function arrayElementHasTrailingComma(elementNode) {
686  let ref1;
687  const lastChild = (ref1 = elementNode.children)[ref1.length - 1];
688  return lastChild && lastChild[lastChild.length - 1]?.token === ",";
689}
690
691// source/parser/ref.civet
692function makeRef(base = "ref", id = base) {
693  return {
694    type: "Ref",
695    base,
696    id
697  };
698}
699function needsRef(expression, base = "ref") {
700  if (!(expression != null && typeof expression === "object")) {
701    return;
702  }
703  if (Array.isArray(expression)) {
704    const nonempty = ((s, e) => {
705      let step = e > s ? 1 : -1;
706      return Array.from({ length: Math.abs(e - s) }, (_2, i) => s + i * step);
707    })(0, expression.length).filter((i) => !isWhitespaceOrEmpty(expression[i]));
708    if (nonempty.length === 1) {
709      let ref1;
710      if (ref1 = needsRef(expression[nonempty[0]], base)) {
711        const ref = ref1;
712        return ref;
713      }
714      return;
715    } else {
716      return makeRef(base);
717    }
718  }
719  switch (expression.type) {
720    case "Ref":
721    case "Identifier":
722    case "Literal":
723      return;
724  }
725  return makeRef(base);
726}
727function maybeRef(exp, base = "ref") {
728  return needsRef(exp, base) || exp;
729}
730function makeRefAssignment(ref, exp) {
731  const refAssignment = {
732    type: "AssignmentExpression",
733    children: [ref, " = ", exp]
734  };
735  return {
736    hoistDec: {
737      type: "Declaration",
738      children: ["let ", ref],
739      names: []
740    },
741    refAssignment,
742    refAssignmentComma: refAssignment ? [refAssignment, ","] : []
743  };
744}
745function maybeRefAssignment(exp, base = "ref") {
746  let hoistDec, refAssignment;
747  const ref = maybeRef(exp, base);
748  if (ref === exp) {
749    return { ref, refAssignmentComma: [] };
750  } else {
751    return { ref, ...makeRefAssignment(ref, exp) };
752  }
753}
754
755// source/parser/function.civet
756function isVoidType(t) {
757  return t?.type === "LiteralType" && t.t.type === "VoidType";
758}
759function isPromiseVoidType(t) {
760  return t?.type === "IdentifierType" && t.raw === "Promise" && t.args?.types?.length === 1 && isVoidType(t.args.types[0]);
761}
762function isGeneratorVoidType(t) {
763  return t?.type === "IdentifierType" && (t.raw === "Iterator" || t.raw === "Generator") && t.args?.types?.length >= 2 && isVoidType(t.args.types[1]);
764}
765function isAsyncGeneratorVoidType(t) {
766  return t?.type === "IdentifierType" && (t.raw === "AsyncIterator" || t.raw === "AsyncGenerator") && t.args?.types?.length >= 2 && isVoidType(t.args.types[1]);
767}
768function implicitFunctionBlock(f) {
769  if (f.abstract || f.block || f.signature?.optional)
770    return;
771  const { name, parent } = f;
772  if (parent?.type === "ExportDeclaration")
773    return;
774  const expressions = parent?.expressions ?? parent?.elements;
775  const currentIndex = expressions?.findIndex(([, def]) => def === f);
776  const following = currentIndex >= 0 && expressions[currentIndex + 1]?.[1];
777  if (f.type === following?.type && name && name === following.name) {
778    f.ts = true;
779  } else {
780    const block = makeEmptyBlock();
781    block.parent = f;
782    f.block = block;
783    f.children.push(block);
784    f.ts = false;
785  }
786}
787function processReturn(f, implicitReturns) {
788  let { returnType } = f.signature;
789  if (returnType && returnType.optional) {
790    convertOptionalType(returnType);
791  }
792  if (!processReturnValue(f) && implicitReturns) {
793    const { signature, block } = f;
794    const { modifier, name, returnType: returnType2 } = signature;
795    const { async, generator, set } = modifier;
796    const isMethod = f.type === "MethodDefinition";
797    const isConstructor = isMethod && name === "constructor";
798    const isVoid = isVoidType(returnType2?.t) || async && (isPromiseVoidType(returnType2?.t) || generator && isAsyncGeneratorVoidType(returnType2?.t)) || !async && generator && isGeneratorVoidType(returnType2?.t);
799    if (block?.type === "BlockStatement") {
800      if (isVoid || set || isConstructor) {
801        if (block.bare && block.implicitlyReturned) {
802          braceBlock(block);
803        }
804      } else {
805        if (!block.implicitlyReturned) {
806          insertReturn(block);
807        }
808      }
809    }
810  }
811}
812function processReturnValue(func) {
813  const { block } = func;
814  const values = gatherRecursiveWithinFunction(
815    block,
816    ({ type }) => type === "ReturnValue"
817  );
818  if (!values.length) {
819    return false;
820  }
821  const ref = makeRef("ret");
822  let declaration;
823  values.forEach((value) => {
824    value.children = [ref];
825    const { ancestor, child } = findAncestor(
826      value,
827      ({ type }) => type === "Declaration",
828      isFunction
829    );
830    if (ancestor) {
831      return declaration ??= child;
832    }
833    ;
834    return;
835  });
836  let returnType = func.returnType ?? func.signature?.returnType;
837  if (returnType) {
838    const { t } = returnType;
839    let m;
840    if (m = t.type, m === "TypePredicate") {
841      returnType = ": boolean";
842    } else if (m === "AssertsType") {
843      returnType = void 0;
844    }
845  }
846  if (declaration) {
847    if (!(declaration.suffix != null)) {
848      declaration.children[1] = declaration.suffix = returnType;
849    }
850  } else {
851    block.expressions.unshift([
852      getIndent(block.expressions[0]),
853      {
854        type: "Declaration",
855        children: ["let ", ref, returnType],
856        names: []
857      },
858      ";"
859    ]);
860  }
861  gatherRecursiveWithinFunction(
862    block,
863    (r) => r.type === "ReturnStatement" && !r.expression
864  ).forEach((r) => {
865    r.expression = ref;
866    return r.children.splice(-1, 1, " ", ref);
867  });
868  let ref1;
869  if (!((ref1 = block.children)[ref1.length - 2]?.type === "ReturnStatement")) {
870    let ref2;
871    const indent = getIndent((ref2 = block.expressions)[ref2.length - 1]) || ";";
872    block.expressions.push([
873      [indent],
874      {
875        type: "ReturnStatement",
876        expression: ref,
877        children: ["return ", ref]
878      }
879    ]);
880  }
881  return true;
882}
883function patternAsValue(pattern) {
884  switch (pattern.type) {
885    case "ArrayBindingPattern": {
886      const children = [...pattern.children];
887      const index = children.indexOf(pattern.elements);
888      if (index < 0)
889        throw new Error("failed to find elements in ArrayBindingPattern");
890      children[index] = pattern.elements.map((el) => {
891        const [ws, e, delim] = el.children;
892        return { ...el, children: [ws, patternAsValue(e), delim] };
893      });
894      return { ...pattern, children };
895    }
896    case "ObjectBindingPattern": {
897      const children = [...pattern.children];
898      const index = children.indexOf(pattern.properties);
899      if (index < 0)
900        throw new Error("failed to find properties in ArrayBindingPattern");
901      children[index] = pattern.properties.map(patternAsValue);
902      return { ...pattern, children };
903    }
904    case "Identifier":
905    case "BindingProperty": {
906      const children = [
907        // { name: value } = ... declares value, not name
908        pattern.value ?? pattern.name,
909        pattern.delim
910      ];
911      if (isWhitespaceOrEmpty(pattern.children[0])) {
912        children.unshift(pattern.children[0]);
913      }
914      return { ...pattern, children };
915    }
916    default:
917      return pattern;
918  }
919}
920function assignResults(node, collect) {
921  if (!node)
922    return;
923  switch (node.type) {
924    case "BlockStatement":
925      if (node.expressions.length) {
926        let ref3;
927        assignResults((ref3 = node.expressions)[ref3.length - 1], collect);
928      } else {
929        node.expressions.push(["", collect("void 0"), ";"]);
930      }
931      return;
932    case "CaseBlock":
933      node.clauses.forEach((clause) => {
934        return assignResults(clause, collect);
935      });
936      return;
937    case "WhenClause":
938    case "DefaultClause":
939    case "PatternClause": {
940      assignResults(node.block, collect);
941      return;
942    }
943  }
944  if (!Array.isArray(node)) {
945    return;
946  }
947  let [, exp, semi] = node;
948  if (semi?.type === "SemicolonDelimiter") {
949    return;
950  }
951  if (!exp) {
952    return;
953  }
954  if (isExit(exp)) {
955    return;
956  }
957  const outer = exp;
958  let { type } = exp;
959  if (type === "LabelledStatement") {
960    exp = exp.statement;
961    ({ type } = exp);
962  }
963  let ref4;
964  switch (exp.type) {
965    case "BreakStatement":
966    case "ContinueStatement":
967    case "DebuggerStatement":
968    case "EmptyStatement":
969    case "ReturnStatement":
970    case "ThrowStatement": {
971      return;
972    }
973    case "Declaration": {
974      let ref5;
975      if (exp.bindings?.length) {
976        ref5 = patternAsValue((ref4 = exp.bindings)[ref4.length - 1].pattern);
977      } else {
978        ref5 = "void 0";
979      }
980      ;
981      const value = ref5;
982      exp.children.push([
983        "",
984        [";", collect(value)]
985      ]);
986      return;
987    }
988    case "FunctionExpression": {
989      if (exp.id) {
990        exp.children.push([
991          "",
992          [";", collect(exp.id)]
993        ]);
994        return;
995      }
996      break;
997    }
998    case "ForStatement":
999    case "IterationStatement":
1000    case "DoStatement":
1001    case "ComptimeStatement": {
1002      wrapIterationReturningResults(exp, outer, collect);
1003      return;
1004    }
1005    case "BlockStatement": {
1006      if (node.expressions.some(isExit)) {
1007        return;
1008      }
1009      assignResults(exp.expressions[exp.expressions.length - 1], collect);
1010      return;
1011    }
1012    case "IfStatement": {
1013      assignResults(exp.then, collect);
1014      if (exp.then.bare && !exp.then.semicolon) {
1015        exp.then.children.push(exp.then.semicolon = ";");
1016      }
1017      if (exp.else) {
1018        assignResults(exp.else.block, collect);
1019      } else {
1020        exp.children.push([" else {", collect("void 0"), "}"]);
1021      }
1022      return;
1023    }
1024    case "PatternMatchingStatement": {
1025      assignResults(exp.children[0], collect);
1026      return;
1027    }
1028    case "SwitchStatement": {
1029      assignResults(exp.children[2], collect);
1030      return;
1031    }
1032    case "TryStatement": {
1033      exp.blocks.forEach((block) => assignResults(block, collect));
1034      return;
1035    }
1036  }
1037  if (node[node.length - 1]?.type === "SemicolonDelimiter") {
1038    return;
1039  }
1040  node[1] = collect(node[1]);
1041}
1042function insertReturn(node, outerNode = node) {
1043  if (!node)
1044    return;
1045  switch (node.type) {
1046    case "BlockStatement": {
1047      if (node.expressions.length) {
1048        if (node.expressions.some(([, exp2]) => isExit(exp2))) {
1049          return;
1050        }
1051        const last = node.expressions[node.expressions.length - 1];
1052        insertReturn(last);
1053      } else {
1054        if (node.parent.type === "CatchClause") {
1055          node.expressions.push(["return"]);
1056        }
1057      }
1058      return;
1059    }
1060    case "WhenClause": {
1061      if (node.break) {
1062        node.children.splice(node.children.indexOf(node.break), 1);
1063      }
1064      if (node.block.expressions.length) {
1065        insertReturn(node.block);
1066      } else {
1067        node.block.expressions.push(wrapWithReturn());
1068      }
1069      return;
1070    }
1071    case "DefaultClause": {
1072      insertReturn(node.block);
1073      return;
1074    }
1075  }
1076  if (!Array.isArray(node))
1077    return;
1078  let [, exp, semi] = node;
1079  if (semi?.type === "SemicolonDelimiter") {
1080    return;
1081  }
1082  if (!exp) {
1083    return;
1084  }
1085  if (isExit(exp)) {
1086    return;
1087  }
1088  const outer = exp;
1089  let { type } = exp;
1090  if (type === "LabelledStatement") {
1091    exp = exp.statement;
1092    ({ type } = exp);
1093  }
1094  let ref6;
1095  switch (type) {
1096    case "BreakStatement":
1097    case "ContinueStatement":
1098    case "DebuggerStatement":
1099    case "EmptyStatement":
1100    case "ReturnStatement":
1101    case "ThrowStatement": {
1102      return;
1103    }
1104    case "Declaration": {
1105      let ref7;
1106      if (exp.bindings?.length) {
1107        ref7 = [" ", patternAsValue((ref6 = exp.bindings)[ref6.length - 1].pattern)];
1108      } else {
1109        ref7 = [];
1110      }
1111      ;
1112      const value = ref7;
1113      exp.children.push(["", {
1114        type: "ReturnStatement",
1115        children: [
1116          ";return",
1117          ...value
1118        ],
1119        parent: exp
1120      }]);
1121      return;
1122    }
1123    case "FunctionExpression": {
1124      if (exp.id) {
1125        exp.children.push([
1126          "",
1127          {
1128            type: "ReturnStatement",
1129            children: [";return ", exp.id],
1130            parent: exp
1131          }
1132        ]);
1133        return;
1134      }
1135      break;
1136    }
1137    case "ForStatement":
1138    case "IterationStatement":
1139    case "DoStatement":
1140    case "ComptimeStatement": {
1141      wrapIterationReturningResults(exp, outer);
1142      return;
1143    }
1144    case "BlockStatement": {
1145      insertReturn(exp.expressions[exp.expressions.length - 1]);
1146      return;
1147    }
1148    case "IfStatement": {
1149      insertReturn(exp.then);
1150      if (exp.else)
1151        insertReturn(exp.else.block);
1152      else
1153        exp.children.push(["", {
1154          type: "ReturnStatement",
1155          // NOTE: add a prefixed semi-colon because the if block may not be braced
1156          children: [";return"],
1157          parent: exp
1158        }]);
1159      return;
1160    }
1161    case "PatternMatchingStatement": {
1162      insertReturn(exp.children[0]);
1163      return;
1164    }
1165    case "SwitchStatement": {
1166      insertSwitchReturns(exp);
1167      return;
1168    }
1169    case "TryStatement": {
1170      exp.blocks.forEach((block) => insertReturn(block));
1171      return;
1172    }
1173  }
1174  if (node[node.length - 1]?.type === "SemicolonDelimiter") {
1175    return;
1176  }
1177  const returnStatement = wrapWithReturn(node[1]);
1178  node.splice(1, 1, returnStatement);
1179}
1180function insertSwitchReturns(exp) {
1181  exp.caseBlock.clauses.forEach((clause) => {
1182    return insertReturn(clause);
1183  });
1184}
1185function wrapIterationReturningResults(statement, outer, collect) {
1186  if (statement.type === "DoStatement" || statement.type === "ComptimeStatement") {
1187    if (collect) {
1188      assignResults(statement.block, collect);
1189    } else {
1190      insertReturn(statement.block, outer);
1191    }
1192    return;
1193  }
1194  assert.equal(
1195    statement.resultsRef,
1196    void 0,
1197    "wrapIterationReturningResults should not be called twice on the same statement"
1198  );
1199  const resultsRef = statement.resultsRef = makeRef("results");
1200  const declaration = {
1201    type: "Declaration",
1202    children: ["const ", resultsRef, "=[]"]
1203  };
1204  outer.children.unshift(["", declaration, ";"]);
1205  assignResults(statement.block, (node) => {
1206    return [resultsRef, ".push(", node, ")"];
1207  });
1208  if (collect) {
1209    statement.children.push(collect(resultsRef));
1210  } else {
1211    statement.children.push(";return ", resultsRef, ";");
1212  }
1213}
1214function processParams(f) {
1215  const { type, parameters, block } = f;
1216  const isConstructor = f.name === "constructor";
1217  if (type === "ArrowFunction" && parameters && parameters.tp && parameters.tp.parameters.length === 1) {
1218    parameters.tp.parameters.push(",");
1219  }
1220  if (!block)
1221    return;
1222  const { expressions } = block;
1223  if (!expressions)
1224    return;
1225  const { blockPrefix } = parameters;
1226  let indent;
1227  if (!expressions.length) {
1228    indent = "";
1229  } else {
1230    indent = expressions[0][0];
1231  }
1232  const [splices, thisAssignments] = gatherBindingCode(parameters, {
1233    injectParamProps: isConstructor
1234  });
1235  const delimiter = {
1236    type: "SemicolonDelimiter",
1237    children: [";"]
1238  };
1239  const prefix = splices.map((s) => ["let ", s]).concat(thisAssignments).map(
1240    (s) => s.type ? {
1241      // TODO: figure out how to get JS only statement tuples
1242      ...s,
1243      children: [indent, ...s.children, delimiter]
1244    } : [indent, s, delimiter]
1245  );
1246  if (!prefix.length)
1247    return;
1248  if (isConstructor) {
1249    const superCalls = gatherNodes(
1250      expressions,
1251      (a) => typeof a === "object" && a != null && "type" in a && a.type === "CallExpression" && "children" in a && Array.isArray(a.children) && a.children.length >= 1 && typeof a.children[0] === "object" && a.children[0] != null && "token" in a.children[0] && a.children[0].token === "super"
1252    );
1253    if (superCalls.length) {
1254      const { child } = findAncestor(superCalls[0], (a1) => a1 === block);
1255      const index = findChildIndex(expressions, child);
1256      if (index < 0) {
1257        throw new Error("Could not find super call within top-level expressions");
1258      }
1259      expressions.splice(index + 1, 0, ...prefix);
1260      return;
1261    }
1262  }
1263  expressions.unshift(...prefix);
1264}
1265function processSignature(f) {
1266  const { block, signature } = f;
1267  if (hasAwait(block) && !f.async?.length) {
1268    f.async.push("async ");
1269    signature.modifier.async = true;
1270  }
1271  if (hasYield(block) && !f.generator?.length) {
1272    if (f.type === "ArrowFunction") {
1273      gatherRecursiveWithinFunction(block, ($) => $.type === "YieldExpression").forEach((y) => {
1274        const i = y.children.findIndex(($1) => $1.type === "Yield");
1275        return y.children.splice(i + 1, 0, {
1276          type: "Error",
1277          message: "Can't use yield inside of => arrow function"
1278        });
1279      });
1280    } else {
1281      f.generator.push("*");
1282      signature.modifier.generator = true;
1283    }
1284  }
1285}
1286function processFunctions(statements, config2) {
1287  gatherRecursiveAll(statements, ({ type }) => type === "FunctionExpression" || type === "ArrowFunction").forEach((f) => {
1288    if (f.type === "FunctionExpression") {
1289      implicitFunctionBlock(f);
1290    }
1291    processSignature(f);
1292    processParams(f);
1293    return processReturn(f, config2.implicitReturns);
1294  });
1295  gatherRecursiveAll(statements, ({ type }) => type === "MethodDefinition").forEach((f) => {
1296    implicitFunctionBlock(f);
1297    processParams(f);
1298    return processReturn(f, config2.implicitReturns);
1299  });
1300}
1301function expressionizeIteration(exp) {
1302  const { async, subtype, block, children, statement } = exp;
1303  const i = children.indexOf(statement);
1304  if (i < 0) {
1305    throw new Error("Could not find iteration statement in iteration expression");
1306  }
1307  if (subtype === "DoStatement" || subtype === "ComptimeStatement") {
1308    children.splice(i, 1, wrapIIFE([["", statement, void 0]], async));
1309    updateParentPointers(exp);
1310    return;
1311  }
1312  exp.resultsRef ??= makeRef("results");
1313  const { resultsRef } = exp;
1314  assignResults(block, (node) => {
1315    return [resultsRef, ".push(", node, ")"];
1316  });
1317  braceBlock(block);
1318  children.splice(
1319    i,
1320    1,
1321    wrapIIFE([
1322      ["", ["const ", resultsRef, "=[]"], ";"],
1323      ...children.map((c) => ["", c, void 0]),
1324      ["", wrapWithReturn(resultsRef)]
1325    ], async)
1326  );
1327  updateParentPointers(exp);
1328}
1329function skipImplicitArguments(args) {
1330  if (args.length === 1) {
1331    let arg0 = args[0];
1332    if (arg0.type === "StatementExpression") {
1333      arg0 = arg0.statement;
1334    }
1335    return arg0.type === "IterationExpression" && arg0.subtype !== "DoStatement" && !arg0.async && isEmptyBareBlock(arg0.block);
1336  }
1337  return false;
1338}
1339function processCoffeeDo(ws, expression) {
1340  ws = insertTrimmingSpace(ws, "");
1341  const args = [];
1342  if (typeof expression === "object" && expression != null && "type" in expression && expression.type === "ArrowFunction" || typeof expression === "object" && expression != null && "type" in expression && expression.type === "FunctionExpression") {
1343    const { parameters } = expression;
1344    const newParameters = {
1345      ...parameters,
1346      children: (() => {
1347        const results = [];
1348        for (let ref8 = parameters.children, i1 = 0, len3 = ref8.length; i1 < len3; i1++) {
1349          let parameter = ref8[i1];
1350          if (typeof parameter === "object" && parameter != null && "type" in parameter && parameter.type === "Parameter") {
1351            let ref9;
1352            if (ref9 = parameter.initializer) {
1353              const initializer = ref9;
1354              args.push(initializer.expression, parameter.delim);
1355              parameter = {
1356                ...parameter,
1357                initializer: void 0,
1358                children: parameter.children.filter((a2) => a2 !== initializer)
1359              };
1360            } else {
1361              args.push(parameter.children.filter(
1362                (a3) => a3 !== parameter.typeSuffix
1363              ));
1364            }
1365          }
1366          results.push(parameter);
1367        }
1368        return results;
1369      })()
1370    };
1371    expression = {
1372      ...expression,
1373      parameters: newParameters,
1374      children: expression.children.map(($2) => $2 === parameters ? newParameters : $2)
1375    };
1376  }
1377  return {
1378    type: "CallExpression",
1379    children: [
1380      makeLeftHandSideExpression(expression),
1381      {
1382        type: "Call",
1383        args,
1384        children: ["(", args, ")"]
1385      }
1386    ]
1387  };
1388}
1389function makeAmpersandFunction(rhs) {
1390  let { ref, typeSuffix, body } = rhs;
1391  if (!(ref != null)) {
1392    ref = makeRef("$");
1393    inplacePrepend(ref, body);
1394  }
1395  if (body?.type === "ObjectExpression") {
1396    body = makeLeftHandSideExpression(body);
1397  }
1398  const parameters = makeNode({
1399    type: "Parameters",
1400    children: typeSuffix ? ["(", ref, typeSuffix, ")"] : [ref],
1401    names: []
1402  });
1403  const expressions = [[" ", body]];
1404  const block = makeNode({
1405    type: "BlockStatement",
1406    bare: true,
1407    expressions,
1408    children: [expressions],
1409    implicitlyReturned: true
1410  });
1411  const async = [];
1412  const children = [async, parameters, " =>", block];
1413  const fn = makeNode({
1414    type: "ArrowFunction",
1415    async,
1416    signature: {
1417      modifier: {
1418        async: !!async.length
1419      }
1420    },
1421    children,
1422    ref,
1423    block,
1424    parameters,
1425    ampersandBlock: true,
1426    body
1427  });
1428  if (isStatement(body)) {
1429    braceBlock(block);
1430    fn.ampersandBlock = false;
1431    delete fn.body;
1432  }
1433  return fn;
1434}
1435
1436// source/parser/block.civet
1437function blockWithPrefix(prefixStatements, block) {
1438  if (prefixStatements && prefixStatements.length) {
1439    const expressions = [...prefixStatements, ...block.expressions];
1440    updateParentPointers(prefixStatements, block);
1441    block = {
1442      ...block,
1443      expressions,
1444      children: block.children === block.expressions ? expressions : block.children.map((c) => c === block.expressions ? expressions : c)
1445    };
1446    braceBlock(block);
1447    updateParentPointers(block);
1448  }
1449  return block;
1450}
1451function braceBlock(block) {
1452  if (block.bare && !block.root) {
1453    if (block.children === block.expressions) {
1454      block.children = [block.expressions];
1455    }
1456    block.children.unshift(" {");
1457    block.children.push("}");
1458    const { implicitlyReturned } = block;
1459    block.bare = block.implicitlyReturned = false;
1460    if (implicitlyReturned) {
1461      processReturn(block.parent, true);
1462    }
1463  }
1464}
1465function duplicateBlock(block) {
1466  const expressions = [...block.expressions];
1467  let children;
1468  if (block.children === block.expressions) {
1469    children = expressions;
1470  } else {
1471    children = [...block.children];
1472    children.splice(children.indexOf(block.expressions), 1, expressions);
1473  }
1474  return {
1475    ...block,
1476    expressions,
1477    children
1478  };
1479}
1480function makeEmptyBlock() {
1481  const expressions = [];
1482  return {
1483    type: "BlockStatement",
1484    expressions,
1485    children: ["{", expressions, "}"],
1486    bare: false,
1487    empty: true
1488  };
1489}
1490function makeBlockFragment() {
1491  const expressions = [];
1492  return {
1493    type: "BlockStatement",
1494    children: expressions,
1495    parent: void 0,
1496    expressions,
1497    bare: false,
1498    root: false
1499  };
1500}
1501function replaceBlockExpression(node, child, replacement) {
1502  let found = false;
1503  const { expressions } = node;
1504  for (let i1 = 0, len3 = expressions.length; i1 < len3; i1++) {
1505    const statement = expressions[i1];
1506    const [, s] = statement;
1507    if (s === child) {
1508      statement[1] = replacement;
1509      replacement.parent = node;
1510      found = true;
1511      break;
1512    }
1513  }
1514  if (!found) {
1515    throw new Error("Could not find child to replace");
1516  }
1517}
1518function getIndent(statement) {
1519  let indent = statement?.[0];
1520  if (Array.isArray(indent)) {
1521    indent = indent.flat(Infinity);
1522    return indent.filter((n) => n && !(n.type === "Comment")).map((n) => {
1523      if (typeof n === "string")
1524        return n;
1525      if (n.token != null)
1526        return n.token;
1527      return "";
1528    });
1529  }
1530  return indent;
1531}
1532function hoistRefDecs(statements) {
1533  gatherRecursiveAll(statements, (s) => s.hoistDec).forEach((node) => {
1534    const { hoistDec } = node;
1535    node.hoistDec = null;
1536    const { ancestor, child } = findAncestor(node, (ancestor2) => {
1537      return ancestor2.type === "BlockStatement" && (!ancestor2.bare || ancestor2.root);
1538    });
1539    if (ancestor) {
1540      insertHoistDec(ancestor, child, hoistDec);
1541    } else {
1542      throw new Error("Couldn't find block to hoist declaration into.");
1543    }
1544    return;
1545  });
1546}
1547function insertHoistDec(block, node, dec) {
1548  const { expressions } = block;
1549  const index = findChildIndex(expressions, node);
1550  if (index < 0) {
1551    throw new Error("Couldn't find expression in block for hoistable declaration.");
1552  }
1553  const statement = [expressions[index][0], dec, ";"];
1554  expressions[index][0] = "";
1555  expressions.splice(index, 0, statement);
1556  updateParentPointers(dec, block);
1557}
1558function processBlocks(statements) {
1559  insertSemicolon(statements);
1560  gatherRecursive(statements, ($) => $.type === "BlockStatement").forEach(({ expressions }) => {
1561    return processBlocks(expressions);
1562  });
1563}
1564function insertSemicolon(statements) {
1565  const l = statements.length;
1566  for (let i2 = 0, len1 = statements.length; i2 < len1; i2++) {
1567    const i = i2;
1568    const s = statements[i2];
1569    if (i < l - 1) {
1570      if (needsPrecedingSemicolon(statements[i + 1][1])) {
1571        const delim = s[2];
1572        if (!delim) {
1573          s[2] = ";";
1574        } else if (typeof delim === "string" && !delim.match(/;/)) {
1575          s[2] = `;${delim}`;
1576        }
1577      }
1578    }
1579  }
1580}
1581function needsPrecedingSemicolon(exp) {
1582  if (!exp) {
1583    return false;
1584  }
1585  if (Array.isArray(exp)) {
1586    for (let i3 = 0, len22 = exp.length; i3 < len22; i3++) {
1587      const child = exp[i3];
1588      if (!(child != null)) {
1589        continue;
1590      }
1591      return needsPrecedingSemicolon(child);
1592    }
1593    return false;
1594  }
1595  if (isToken(exp)) {
1596    exp = exp.token;
1597  }
1598  if (typeof exp === "string") {
1599    return /^\s*[\(\[\`\+\-\/]/.test(exp);
1600  }
1601  switch (exp.type) {
1602    case "ParenthesizedExpression":
1603    case "ArrayExpression":
1604    case "ArrowFunction":
1605    case "TemplateLiteral":
1606    case "RegularExpressionLiteral":
1607    case "RangeExpression":
1608    case "ComputedPropertyName": {
1609      return true;
1610    }
1611    case "AssignmentExpression": {
1612      return startsWith(exp, /^(\[|\()/);
1613    }
1614    case "Literal": {
1615      return exp.raw?.startsWith("-") || exp.raw?.startsWith("+");
1616    }
1617    case "PipelineExpression":
1618    case "UnwrappedExpression": {
1619      return needsPrecedingSemicolon(exp.children[1]);
1620    }
1621    default: {
1622      if (exp.children) {
1623        return needsPrecedingSemicolon(exp.children);
1624      }
1625      ;
1626      return;
1627    }
1628  }
1629}
1630
1631// source/parser/util.civet
1632function len(arr, length) {
1633  return arr.length === length;
1634}
1635var assert = {
1636  equal(a, b, msg) {
1637    if (a !== b) {
1638      throw new Error(`Assertion failed [${msg}]: ${a} !== ${b}`);
1639    }
1640  }
1641};
1642function addParentPointers(node, parent) {
1643  if (node == null)
1644    return;
1645  if (typeof node !== "object")
1646    return;
1647  if (Array.isArray(node)) {
1648    for (const child of node) {
1649      addParentPointers(child, parent);
1650    }
1651    return;
1652  }
1653  node = node;
1654  if (parent != null) {
1655    node.parent = parent;
1656  }
1657  if (node.children) {
1658    for (let ref = node.children, i1 = 0, len1 = ref.length; i1 < len1; i1++) {
1659      const child = ref[i1];
1660      addParentPointers(child, node);
1661    }
1662  }
1663}
1664function clone(node) {
1665  removeParentPointers(node);
1666  return deepCopy(node);
1667}
1668function removeParentPointers(node) {
1669  if (!(node != null && typeof node === "object")) {
1670    return;
1671  }
1672  if (Array.isArray(node)) {
1673    for (const child of node) {
1674      removeParentPointers(child);
1675    }
1676    return;
1677  }
1678  node.parent = null;
1679  if (node.children) {
1680    for (const child of node.children) {
1681      removeParentPointers(child);
1682    }
1683  }
1684}
1685function maybeWrap(node, parent) {
1686  if (!isASTNodeObject(node)) {
1687    updateParentPointers(node = {
1688      type: "Wrapper",
1689      children: [node],
1690      parent
1691    });
1692  }
1693  return node;
1694}
1695function maybeUnwrap(node) {
1696  if (node?.type === "Wrapper") {
1697    return node.children[0];
1698  } else {
1699    return node;
1700  }
1701}
1702function isASTNodeObject(node) {
1703  return typeof node === "object" && node != null && !Array.isArray(node);
1704}
1705function isParent(node) {
1706  return node != null && node.children != null;
1707}
1708function isToken(node) {
1709  return node != null && node.token != null;
1710}
1711function isEmptyBareBlock(node) {
1712  if (node?.type !== "BlockStatement")
1713    return false;
1714  const { bare, expressions } = node;
1715  return bare && (Array.isArray(expressions) && len(expressions, 0) || Array.isArray(expressions) && len(expressions, 1) && Array.isArray(expressions[0]) && expressions[0].length >= 2 && typeof expressions[0][1] === "object" && expressions[0][1] != null && "type" in expressions[0][1] && expressions[0][1].type === "EmptyStatement");
1716}
1717function isFunction(node) {
1718  if (node && typeof node === "object" && "type" in node) {
1719    const { type } = node;
1720    return type === "FunctionExpression" || type === "ArrowFunction" || type === "MethodDefinition";
1721  }
1722  return false;
1723}
1724var statementTypes = /* @__PURE__ */ new Set([
1725  "BlockStatement",
1726  "BreakStatement",
1727  "ComptimeStatement",
1728  "ContinueStatement",
1729  "DebuggerStatement",
1730  "Declaration",
1731  "DoStatement",
1732  "ForStatement",
1733  "IfStatement",
1734  "IterationStatement",
1735  "LabeledStatement",
1736  "ReturnStatement",
1737  "SwitchStatement",
1738  "ThrowStatement",
1739  "TryStatement"
1740]);
1741function isStatement(node) {
1742  return isASTNodeObject(node) && node.type != null && // forbid leaf
1743  statementTypes.has(node.type);
1744}
1745function isWhitespaceOrEmpty(node) {
1746  if (!node)
1747    return true;
1748  if (node.type === "Ref")
1749    return false;
1750  if (node.token)
1751    return /^\s*$/.test(node.token);
1752  if (node.children)
1753    node = node.children;
1754  if (!node.length)
1755    return true;
1756  if (typeof node === "string")
1757    return /^\s*$/.test(node);
1758  if (Array.isArray(node))
1759    return node.every(isWhitespaceOrEmpty);
1760  return false;
1761}
1762function isExit(node) {
1763  if (!(node != null)) {
1764    return false;
1765  }
1766  switch (node.type) {
1767    case "ReturnStatement":
1768    case "ThrowStatement":
1769    case "BreakStatement":
1770    case "ContinueStatement": {
1771      return true;
1772    }
1773    case "IfStatement": {
1774      return isExit(node.then) && isExit(node.else?.block);
1775    }
1776    case "BlockStatement": {
1777      return node.expressions.some((s) => isExit(s[1]));
1778    }
1779    case "IterationStatement": {
1780      return node.condition?.type === "ParenthesizedExpression" && node.condition.expression?.type === "Literal" && node.condition.expression?.raw === "true" && gatherRecursiveWithinFunction(node.block, ($) => $.type === "BreakStatement").length === 0;
1781    }
1782    default: {
1783      return false;
1784    }
1785  }
1786}
1787function isComma(node) {
1788  if (node?.token === ",") {
1789    return node;
1790  } else if (Array.isArray(node) && node[node.length - 1]?.token === ",") {
1791    return node[node.length - 1];
1792  }
1793  ;
1794  return;
1795}
1796function insertTrimmingSpace(target, c) {
1797  if (!(target != null)) {
1798    return target;
1799  }
1800  if (Array.isArray(target)) {
1801    if (target.length === 0) {
1802      return c;
1803    }
1804    return target.map((e, i) => {
1805      if (i === 0) {
1806        return insertTrimmingSpace(e, c);
1807      } else {
1808        return e;
1809      }
1810    });
1811  } else if (isParent(target)) {
1812    return {
1813      ...target,
1814      children: insertTrimmingSpace(target.children, c)
1815    };
1816  } else if (isToken(target)) {
1817    return {
1818      ...target,
1819      token: target.token.replace(/^ ?/, c)
1820    };
1821  } else if (typeof target === "string") {
1822    return target.replace(/^ ?/, c);
1823  } else {
1824    return target;
1825  }
1826}
1827function trimFirstSpace(target) {
1828  return insertTrimmingSpace(target, "");
1829}
1830function inplaceInsertTrimmingSpace(target, c) {
1831  if (!(target != null)) {
1832    return target;
1833  }
1834  if (Array.isArray(target)) {
1835    inplaceInsertTrimmingSpace(target[0], c);
1836  } else if (isParent(target)) {
1837    inplaceInsertTrimmingSpace(target.children, c);
1838  } else if (isToken(target)) {
1839    target.token = target.token.replace(/^ ?/, c);
1840  }
1841}
1842function getTrimmingSpace(target) {
1843  if (!(target != null)) {
1844    return;
1845  }
1846  if (Array.isArray(target)) {
1847    return getTrimmingSpace(target[0]);
1848  } else if (isParent(target)) {
1849    return getTrimmingSpace(target.children[0]);
1850  } else if (isToken(target)) {
1851    return target.token.match(/^ ?/)[0];
1852  }
1853  ;
1854  return;
1855}
1856function prepend(prefix, node) {
1857  if (!(prefix && prefix.length)) {
1858    return node;
1859  }
1860  if (Array.isArray(node)) {
1861    return [prefix, ...node];
1862  } else if (isParent(node)) {
1863    return {
1864      ...node,
1865      children: [prefix, ...node.children]
1866    };
1867  } else {
1868    return [prefix, node];
1869  }
1870}
1871function inplacePrepend(prefix, node) {
1872  if (!prefix) {
1873    return;
1874  }
1875  if (Array.isArray(prefix) && !prefix.length) {
1876    return;
1877  }
1878  if (Array.isArray(node)) {
1879    node.unshift(prefix);
1880  } else if (isParent(node)) {
1881    node.children.unshift(prefix);
1882  } else {
1883    throw new Error("Can't prepend to a leaf node");
1884  }
1885}
1886function literalValue(literal) {
1887  let { raw } = literal;
1888  switch (raw) {
1889    case "null":
1890      return null;
1891    case "true":
1892      return true;
1893    case "false":
1894      return false;
1895  }
1896  if (raw.startsWith('"') && raw.endsWith('"') || raw.startsWith("'") && raw.endsWith("'")) {
1897    return raw.slice(1, -1);
1898  }
1899  const numeric = literal.children.find(
1900    (child) => child.type === "NumericLiteral"
1901  );
1902  if (numeric) {
1903    raw = raw.replace(/_/g, "");
1904    const { token } = numeric;
1905    if (token.endsWith("n")) {
1906      return BigInt(raw.slice(0, -1));
1907    } else if (token.match(/[\.eE]/)) {
1908      return parseFloat(raw);
1909    } else if (token.startsWith("0")) {
1910      switch (token.charAt(1).toLowerCase()) {
1911        case "x":
1912          return parseInt(raw.replace(/0[xX]/, ""), 16);
1913        case "b":
1914          return parseInt(raw.replace(/0[bB]/, ""), 2);
1915        case "o":
1916          return parseInt(raw.replace(/0[oO]/, ""), 8);
1917      }
1918    }
1919    return parseInt(raw, 10);
1920  }
1921  throw new Error("Unrecognized literal " + JSON.stringify(literal));
1922}
1923function startsWith(target, value) {
1924  if (!target)
1925    return;
1926  if (Array.isArray(target)) {
1927    let i = 0;
1928    let l = target.length;
1929    while (i < l) {
1930      const t = target[i];
1931      if (t && (t.length || t.token || t.children)) {
1932        break;
1933      }
1934      i++;
1935    }
1936    if (i < l) {
1937      return startsWith(target[i], value);
1938    }
1939  }
1940  if (typeof target === "string")
1941    return value.test(target);
1942  if (target.children)
1943    return startsWith(target.children, value);
1944  if (target.token)
1945    return value.test(target.token);
1946  return;
1947}
1948function hasAwait(exp) {
1949  return gatherRecursiveWithinFunction(exp, ($1) => $1.type === "Await").length > 0;
1950}
1951function hasYield(exp) {
1952  return gatherRecursiveWithinFunction(exp, ($2) => $2.type === "Yield").length > 0;
1953}
1954function hasImportDeclaration(exp) {
1955  return gatherRecursiveWithinFunction(exp, ($3) => $3.type === "ImportDeclaration").length > 0;
1956}
1957function deepCopy(node) {
1958  if (node == null)
1959    return node;
1960  if (typeof node !== "object")
1961    return node;
1962  if (Array.isArray(node)) {
1963    return node.map(deepCopy);
1964  }
1965  if (node?.type === "Ref")
1966    return node;
1967  return Object.fromEntries(
1968    Object.entries(node).map(([key, value]) => {
1969      return [key, deepCopy(value)];
1970    })
1971  );
1972}
1973function removeHoistDecs(node) {
1974  if (node == null)
1975    return;
1976  if (typeof node !== "object")
1977    return;
1978  if ("hoistDec" in node) {
1979    node.hoistDec = void 0;
1980  }
1981  if (Array.isArray(node)) {
1982    for (const child of node) {
1983      removeHoistDecs(child);
1984    }
1985    return;
1986  }
1987  if (node.children) {
1988    for (const child of node.children) {
1989      removeHoistDecs(child);
1990    }
1991  }
1992}
1993var skipParens = /* @__PURE__ */ new Set([
1994  "AmpersandRef",
1995  "CallExpression",
1996  "Identifier",
1997  "JSXElement",
1998  "JSXFragment",
1999  "Literal",
2000  "MemberExpression",
2001  "NewExpression",
2002  "ParenthesizedExpression",
2003  "Ref",
2004  "Placeholder",
2005  "StatementExpression"
2006  // wrapIIFE
2007]);
2008function makeLeftHandSideExpression(expression) {
2009  if (isASTNodeObject(expression)) {
2010    if (expression.parenthesized) {
2011      return expression;
2012    }
2013    if (skipParens.has(expression.type)) {
2014      return expression;
2015    }
2016  }
2017  return makeNode({
2018    type: "ParenthesizedExpression",
2019    children: ["(", expression, ")"],
2020    expression,
2021    implicit: true
2022  });
2023}
2024function updateParentPointers(node, parent, depth = 1) {
2025  if (!(node != null)) {
2026    return;
2027  }
2028  if (!(typeof node === "object")) {
2029    return;
2030  }
2031  if (Array.isArray(node)) {
2032    for (let i2 = 0, len22 = node.length; i2 < len22; i2++) {
2033      const child = node[i2];
2034      updateParentPointers(child, parent, depth);
2035    }
2036    return;
2037  }
2038  node = node;
2039  if (parent != null) {
2040    node.parent = parent;
2041  }
2042  if (depth && isParent(node)) {
2043    for (let ref1 = node.children, i3 = 0, len3 = ref1.length; i3 < len3; i3++) {
2044      const child = ref1[i3];
2045      updateParentPointers(child, node, depth - 1);
2046    }
2047  }
2048}
2049function makeNode(node) {
2050  updateParentPointers(node);
2051  return node;
2052}
2053function skipIfOnlyWS(target) {
2054  if (!target)
2055    return target;
2056  if (Array.isArray(target)) {
2057    if (target.length === 1) {
2058      return skipIfOnlyWS(target[0]);
2059    } else if (target.every((e) => skipIfOnlyWS(e) === void 0)) {
2060      return void 0;
2061    }
2062    return target;
2063  }
2064  if (target.token != null && target.token.trim() === "") {
2065    return void 0;
2066  }
2067  return target;
2068}
2069function spliceChild(node, child, del, ...replacements) {
2070  const children = node?.children ?? node;
2071  if (!Array.isArray(children)) {
2072    throw new Error("spliceChild: non-array node has no children field");
2073  }
2074  const index = children.indexOf(child);
2075  if (index < 0) {
2076    throw new Error("spliceChild: child not found");
2077  }
2078  return children.splice(index, del, ...replacements);
2079}
2080function convertOptionalType(suffix) {
2081  if (suffix.t.type === "AssertsType") {
2082    spliceChild(suffix, suffix.optional, 1, suffix.optional = {
2083      type: "Error",
2084      message: "Can't use optional ?: syntax with asserts type"
2085    });
2086    return;
2087  }
2088  spliceChild(suffix, suffix.optional, 1, suffix.optional = void 0);
2089  const wrap = suffix.type === "ReturnTypeAnnotation";
2090  spliceChild(suffix, suffix.t, 1, suffix.t = [
2091    getTrimmingSpace(suffix.t),
2092    wrap && "(",
2093    // TODO: avoid parens if unnecessary
2094    "undefined | ",
2095    parenthesizeType(insertTrimmingSpace(suffix.t, "")),
2096    wrap && ")"
2097  ]);
2098}
2099var typeNeedsNoParens = /* @__PURE__ */ new Set([
2100  "IdentifierType",
2101  "ImportType",
2102  "LiteralType",
2103  "TupleType",
2104  "ParenthesizedType",
2105  "UnaryType"
2106]);
2107function parenthesizeType(type) {
2108  if (typeNeedsNoParens.has(type.type)) {
2109    return type;
2110  }
2111  return ["(", type, ")"];
2112}
2113function wrapIIFE(expressions, asyncFlag) {
2114  let prefix;
2115  const async = [];
2116  if (asyncFlag) {
2117    async.push("async ");
2118  } else if (hasAwait(expressions)) {
2119    async.push("async ");
2120    prefix = {
2121      type: "Await",
2122      children: ["await "]
2123    };
2124  }
2125  const block = makeNode({
2126    type: "BlockStatement",
2127    expressions,
2128    children: ["{", expressions, "}"],
2129    bare: false,
2130    root: false
2131  });
2132  const parameters = {
2133    type: "Parameters",
2134    children: ["()"],
2135    names: []
2136  };
2137  const signature = {
2138    modifier: {
2139      async: !!async.length
2140    },
2141    returnType: void 0
2142  };
2143  const fn = makeNode({
2144    type: "ArrowFunction",
2145    signature,
2146    parameters,
2147    returnType: void 0,
2148    ts: false,
2149    async,
2150    block,
2151    children: [async, parameters, "=>", block]
2152  });
2153  const exp = makeNode({
2154    type: "CallExpression",
2155    children: [makeLeftHandSideExpression(fn), "()"]
2156  });
2157  if (prefix) {
2158    return makeLeftHandSideExpression([prefix, exp]);
2159  }
2160  return exp;
2161}
2162function wrapWithReturn(expression) {
2163  const children = expression ? ["return ", expression] : ["return"];
2164  return makeNode({
2165    type: "ReturnStatement",
2166    children,
2167    expression,
2168    parent: expression?.parent
2169  });
2170}
2171function flatJoin(array, separator) {
2172  const result = [];
2173  for (let i4 = 0, len4 = array.length; i4 < len4; i4++) {
2174    const i = i4;
2175    const items = array[i4];
2176    if (i) {
2177      result.push(separator);
2178    }
2179    result.push(...items);
2180  }
2181  return result;
2182}
2183
2184// source/parser/traversal.civet
2185function gatherRecursiveWithinFunction(node, predicate) {
2186  return gatherRecursive(node, predicate, isFunction);
2187}
2188function findChildIndex(parent, child) {
2189  if (!(parent != null)) {
2190    return -1;
2191  }
2192  const children = Array.isArray(parent) ? parent : parent.children;
2193  if (!(children != null)) {
2194    return -1;
2195  }
2196  for (let i1 = 0, len3 = children.length; i1 < len3; i1++) {
2197    const i = i1;
2198    const c = children[i1];
2199    if (c === child || Array.isArray(c) && arrayRecurse(c)) {
2200      return i;
2201    }
2202  }
2203  function arrayRecurse(array) {
2204    for (let i2 = 0, len1 = array.length; i2 < len1; i2++) {
2205      const c = array[i2];
2206      if (c === child || Array.isArray(c) && arrayRecurse(c)) {
2207        return true;
2208      }
2209    }
2210    return false;
2211  }
2212  return -1;
2213}
2214function findAncestor(node, predicate, stopPredicate) {
2215  let { parent } = node;
2216  while (parent && !stopPredicate?.(parent, node)) {
2217    if (predicate(parent, node)) {
2218      return { ancestor: parent, child: node };
2219    }
2220    node = parent;
2221    ({ parent } = node);
2222  }
2223  return { ancestor: void 0, child: node };
2224}
2225function gatherNodes(node, predicate) {
2226  if (node == null || typeof node === "string") {
2227    return [];
2228  }
2229  if (Array.isArray(node)) {
2230    return node.flatMap((n) => gatherNodes(n, predicate));
2231  }
2232  if (predicate(node)) {
2233    return [node];
2234  }
2235  switch (node.type) {
2236    case "BlockStatement": {
2237      return [];
2238    }
2239    case "ForStatement": {
2240      const isDec = node.declaration?.type === "Declaration";
2241      return node.children.flatMap((n) => {
2242        if (isDec && n === node.declaration) {
2243          return [];
2244        } else {
2245          return gatherNodes(n, predicate);
2246        }
2247      });
2248    }
2249    default: {
2250      return gatherNodes(
2251        //@ts-ignore
2252        node.children,
2253        predicate
2254      );
2255    }
2256  }
2257}
2258function gatherRecursive(node, predicate, skipPredicate) {
2259  if (node == null || typeof node === "string") {
2260    return [];
2261  }
2262  if (Array.isArray(node)) {
2263    return node.flatMap(($) => gatherRecursive($, predicate, skipPredicate));
2264  }
2265  if (skipPredicate?.(node)) {
2266    return [];
2267  }
2268  if (predicate(node)) {
2269    return [node];
2270  }
2271  return gatherRecursive(
2272    //@ts-ignore
2273    node.children,
2274    predicate,
2275    skipPredicate
2276  );
2277}
2278function gatherRecursiveAll(node, predicate) {
2279  if (node == null || typeof node === "string") {
2280    return [];
2281  }
2282  if (Array.isArray(node)) {
2283    return node.flatMap((n) => gatherRecursiveAll(n, predicate));
2284  }
2285  const nodes = gatherRecursiveAll(
2286    //@ts-ignore
2287    node.children,
2288    predicate
2289  );
2290  if (predicate(node)) {
2291    nodes.push(node);
2292  }
2293  return nodes;
2294}
2295
2296// source/parser/op.civet
2297var precedenceOrder = [
2298  ["||", "??"],
2299  ["^^"],
2300  ["&&"],
2301  ["|"],
2302  ["^"],
2303  ["&"],
2304  // NOTE: Equality and inequality merged because of relational chaining
2305  [
2306    "==",
2307    "!=",
2308    "===",
2309    "!==",
2310    "<",
2311    "<=",
2312    ">",
2313    ">=",
2314    "in",
2315    "instanceof"
2316  ],
2317  // NOTE: Extra in-between level for default custom operators
2318  ["custom"],
2319  ["<<", ">>", ">>>"],
2320  ["+", "-"],
2321  ["*", "/", "%"],
2322  ["**"]
2323];
2324var precedenceMap = /* @__PURE__ */ new Map();
2325for (let i1 = 0, len3 = precedenceOrder.length; i1 < len3; i1++) {
2326  const prec = i1;
2327  const ops = precedenceOrder[i1];
2328  for (let i2 = 0, len1 = ops.length; i2 < len1; i2++) {
2329    const op = ops[i2];
2330    precedenceMap.set(op, prec);
2331  }
2332}
2333var precedenceStep = 1 / 64;
2334var precedenceRelational = precedenceMap.get("==");
2335var precedenceCustomDefault = precedenceMap.get("custom");
2336function getPrecedence(op) {
2337  if (typeof op === "string") {
2338    return precedenceMap.get(op) ?? (() => {
2339      throw new Error(`Unknown operator: ${op}`);
2340    })();
2341  } else if (op.type === "PatternTest") {
2342    return precedenceRelational;
2343  } else if (typeof op.prec === "number") {
2344    return op.prec;
2345  } else {
2346    return precedenceMap.get(op.prec ?? op.token) ?? (op.relational ? precedenceRelational : precedenceCustomDefault);
2347  }
2348}
2349function processBinaryOpExpression($0) {
2350  return recurse(expandChainedComparisons($0));
2351  function recurse(expandedOps) {
2352    let i = 2;
2353    while (i < expandedOps.length) {
2354      let op = expandedOps[i];
2355      if (op.special) {
2356        let advanceLeft2 = function(allowEqual) {
2357          while (start >= 4) {
2358            const prevPrec = getPrecedence(expandedOps[start - 2]);
2359            if (!(prevPrec > prec || allowEqual && prevPrec === prec)) {
2360              return prevPrec === prec;
2361            }
2362            start -= 4;
2363          }
2364          return false;
2365        }, advanceRight2 = function(allowEqual) {
2366          while (end + 4 < expandedOps.length) {
2367            const nextPrec = getPrecedence(expandedOps[end + 2]);
2368            if (!(nextPrec > prec || allowEqual && nextPrec === prec)) {
2369              return nextPrec === prec;
2370            }
2371            end += 4;
2372          }
2373          return false;
2374        };
2375        var advanceLeft = advanceLeft2, advanceRight = advanceRight2;
2376        let start = i - 2, end = i + 2;
2377        const prec = getPrecedence(op);
2378        let error;
2379        switch (op.assoc) {
2380          case "left":
2381          case void 0: {
2382            advanceLeft2(true);
2383            advanceRight2(false);
2384            break;
2385          }
2386          case "right": {
2387            advanceLeft2(false);
2388            advanceRight2(true);
2389            break;
2390          }
2391          case "non": {
2392            if (advanceLeft2(false) || advanceRight2(false)) {
2393              error = {
2394                type: "Error",
2395                message: `non-associative operator ${op.token} used at same precedence level without parenthesization`
2396              };
2397            }
2398            ;
2399            break;
2400          }
2401          case "arguments": {
2402            if (advanceLeft2(false)) {
2403              error = {
2404                type: "Error",
2405                message: `arguments operator ${op.token} used at same precedence level as ${expandedOps[start - 2].token} to the left`
2406              };
2407            }
2408            advanceRight2(true);
2409            break;
2410          }
2411          default: {
2412            throw new Error(`Unsupported associativity: ${op.assoc}`);
2413          }
2414        }
2415        let a = start === i - 2 ? expandedOps[start] : expandedOps.slice(start, i - 1);
2416        let wsOp = expandedOps[i - 1];
2417        let wsB = expandedOps[i + 1];
2418        let b = end === i + 2 ? expandedOps[i + 2] : expandedOps.slice(i + 2, end + 1);
2419        if (op.assoc === "arguments") {
2420          let i2 = 2;
2421          while (i2 < b.length) {
2422            if (prec === getPrecedence(b[i2])) {
2423              if (!(b[i2].token === op.token)) {
2424                error ??= {
2425                  type: "Error",
2426                  message: `arguments operator ${op.token} used at same precedence level as ${b[i2].token} to the right`
2427                };
2428              }
2429              b[i2] = ",";
2430            }
2431            i2 += 4;
2432          }
2433        } else {
2434          b = recurse(b);
2435        }
2436        if (op.token === "instanceof" && (typeof b === "object" && b != null && "type" in b && b.type === "Literal" && "children" in b && Array.isArray(b.children) && b.children.length >= 1 && typeof b.children[0] === "object" && b.children[0] != null && "type" in b.children[0] && b.children[0].type === "StringLiteral")) {
2437          a = ["typeof ", makeLeftHandSideExpression(a)];
2438          if (op.negated) {
2439            op = { ...op, token: "!==", negated: false };
2440          } else {
2441            op = { ...op, token: "===" };
2442          }
2443        }
2444        if (op.asConst) {
2445          a = makeAsConst(a);
2446          b = makeAsConst(b);
2447        }
2448        let children;
2449        if (op.type === "PatternTest") {
2450          children = [processPatternTest(a, b)];
2451        } else if (op.call) {
2452          wsOp = insertTrimmingSpace(wsOp, "");
2453          if (op.reversed) {
2454            wsB = insertTrimmingSpace(wsB, "");
2455            children = [wsOp, op.call, "(", wsB, b, ", ", a, ")", op.suffix];
2456          } else {
2457            children = [wsOp, op.call, "(", a, ",", wsB, b, ")", op.suffix];
2458          }
2459        } else if (op.method) {
2460          wsOp = insertTrimmingSpace(wsOp, "");
2461          wsB = insertTrimmingSpace(wsB, "");
2462          if (op.reversed) {
2463            if (end !== i + 2)
2464              b = makeLeftHandSideExpression(b);
2465            b = dotNumericLiteral(b);
2466            children = [wsB, b, wsOp, ".", op.method, "(", a, ")"];
2467          } else {
2468            if (start !== i - 2 || a.type === "NumericLiteral") {
2469              a = makeLeftHandSideExpression(a);
2470            }
2471            a = dotNumericLiteral(a);
2472            children = [a, wsOp, ".", op.method, "(", wsB, b, ")"];
2473          }
2474        } else if (op.token) {
2475          children = [a, wsOp, op, wsB, b];
2476          if (op.negated)
2477            children = ["(", ...children, ")"];
2478        } else {
2479          throw new Error("Unknown operator: " + JSON.stringify(op));
2480        }
2481        if (op.negated)
2482          children.unshift("!");
2483        if (error != null) {
2484          children.push(error);
2485        }
2486        expandedOps.splice(start, end - start + 1, {
2487          children
2488        });
2489        i = start + 2;
2490      } else {
2491        i += 4;
2492      }
2493    }
2494    return expandedOps;
2495  }
2496}
2497function dotNumericLiteral(literal) {
2498  if (literal?.type === "Literal" && /^[+-]?(?:0|[1-9](?:_[0-9]|[0-9])*)$/.test(literal.raw)) {
2499    literal.children.push(".");
2500    literal.raw += ".";
2501  }
2502  return literal;
2503}
2504var asConst = {
2505  ts: true,
2506  children: [" as const"]
2507};
2508function makeAsConst(node) {
2509  if (Array.isArray(node) && node.length === 1) {
2510    node = node[0];
2511  }
2512  if (node.type === "Literal" && node.raw !== "null" || node.type === "ArrayExpression" || node.type === "ObjectExpression") {
2513    return { ...node, children: [...node.children, asConst] };
2514  } else {
2515    return node;
2516  }
2517}
2518function isExistence(exp) {
2519  if (exp?.type === "ParenthesizedExpression" && exp.implicit) {
2520    exp = exp.expression;
2521  }
2522  if (exp?.type === "Existence") {
2523    return exp;
2524  }
2525  ;
2526  return;
2527}
2528function isRelationalOp(op) {
2529  return op.relational || getPrecedence(op) === precedenceRelational;
2530}
2531function expandChainedComparisons([first, binops]) {
2532  if (!binops.length) {
2533    return [first];
2534  }
2535  const results = [];
2536  let start = 0;
2537  const chains = [];
2538  var i = 0;
2539  for (let i3 = 0, len22 = binops.length; i3 < len22; i3++) {
2540    var i = i3;
2541    var [, op] = binops[i3];
2542    if (isRelationalOp(op)) {
2543      chains.push(i);
2544    } else if (getPrecedence(op) < precedenceRelational) {
2545      processChains();
2546      first = results.pop();
2547    }
2548  }
2549  processChains();
2550  return results;
2551  function processChains() {
2552    if (chains.length > 0) {
2553      first = expandExistence(first);
2554      for (let i4 = 0, len3 = chains.length; i4 < len3; i4++) {
2555        const k = i4;
2556        const index = chains[i4];
2557        if (k > 0) {
2558          results.push(" ", "&&", " ");
2559        }
2560        const binop = binops[index];
2561        const exp = binop[3] = expandExistence(binop[3]);
2562        results.push(first);
2563        const endIndex = chains[k + 1] ?? i + 1;
2564        results.push(...binops.slice(start, endIndex).flat());
2565        first = [exp].concat(binops.slice(index + 1, endIndex));
2566        start = endIndex;
2567      }
2568    } else {
2569      results.push(first);
2570      results.push(...binops.slice(start, i + 1).flat());
2571      start = i + 1;
2572    }
2573    chains.length = 0;
2574  }
2575  function expandExistence(exp) {
2576    let ref;
2577    if (ref = isExistence(exp)) {
2578      const existence = ref;
2579      results.push(existence, " ", "&&", " ");
2580      return existence.expression;
2581    } else {
2582      return exp;
2583    }
2584  }
2585  ;
2586}
2587
2588// source/parser/helper.civet
2589var preludeVar = "var ";
2590function ts(children) {
2591  return {
2592    ts: true,
2593    children: Array.isArray(children) ? children : [children]
2594  };
2595}
2596var asAny = ts(" as any");
2597var declareHelper = {
2598  indexOf(indexOfRef) {
2599    state.prelude.push(["", [
2600      // [indent, statement]
2601      preludeVar,
2602      indexOfRef,
2603      ts([": <T>(this: T[], searchElement: T) => number"]),
2604      " = [].indexOf",
2605      asAny
2606    ], ";\n"]);
2607  },
2608  hasProp(hasPropRef) {
2609    state.prelude.push(["", [
2610      // [indent, statement]
2611      preludeVar,
2612      hasPropRef,
2613      ts(": <T>(object: T, prop: PropertyKey) => boolean"),
2614      " = ({}.constructor",
2615      asAny,
2616      ").hasOwn;\n"
2617    ]]);
2618  },
2619  is(isRef) {
2620    state.prelude.push(["", [
2621      // [indent, statement]
2622      preludeVar,
2623      isRef,
2624      ts(": { <B, A extends B> (a: A, b: B): b is A, <A, B> (a: A, b: B): a is A & B }"),
2625      " = Object.is",
2626      asAny,
2627      ";\n"
2628    ]]);
2629  },
2630  /**
2631   * Array length check with type guard.
2632   * From tlgreg https://discord.com/channels/933472021310996512/1012166187196629113/1157386582546976873
2633   */
2634  len(lenRef) {
2635    state.prelude.push(["", [
2636      ts(["function ", lenRef, "<T extends readonly unknown[], N extends number>(arr: T, length: N): arr is T & { length: N } { return arr.length === length }"]),
2637      {
2638        js: true,
2639        children: ["function ", lenRef, "(arr, length) { return arr.length === length }"]
2640      },
2641      "\n"
2642    ]]);
2643  },
2644  modulo(moduloRef) {
2645    state.prelude.push(["", [
2646      // [indent, statement]
2647      preludeVar,
2648      moduloRef,
2649      ts(": (a: number, b: number) => number"),
2650      " = (a, b) => (a % b + b) % b;\n"
2651    ]]);
2652  },
2653  Falsy(FalsyRef) {
2654    state.prelude.push([
2655      "",
2656      // [indent, statement]
2657      ts(["type ", FalsyRef, " = false | 0 | '' | 0n | null | undefined;\n"])
2658    ]);
2659  },
2660  xor(xorRef) {
2661    const Falsy = getHelperRef("Falsy");
2662    state.prelude.push(["", [
2663      // [indent, statement]
2664      preludeVar,
2665      xorRef,
2666      ts([
2667        ": <A, B>(a: A, b: B) => A extends ",
2668        Falsy,
2669        " ? B : B extends ",
2670        Falsy,
2671        " ? A : (false | (A & ",
2672        Falsy,
2673        " extends never ? never : B) | (B & ",
2674        Falsy,
2675        " extends never ? never : A))"
2676      ]),
2677      " = (a, b) => (a ? !b && a : b)",
2678      asAny,
2679      ";\n"
2680    ]]);
2681  },
2682  xnor(xnorRef) {
2683    const Falsy = getHelperRef("Falsy");
2684    state.prelude.push(["", [
2685      // [indent, statement]
2686      preludeVar,
2687      xnorRef,
2688      ts([
2689        ": <A, B>(a: A, b: B) => A & ",
2690        Falsy,
2691        " extends never ? B : (true | (B extends ",
2692        Falsy,
2693        " ? never : A) | (A extends ",
2694        Falsy,
2695        " ? never : B))"
2696      ]),
2697      " = (a, b) => (a ? b : !b || a)",
2698      asAny,
2699      ";\n"
2700    ]]);
2701  },
2702  concatAssign(ref) {
2703    state.prelude.push(["", [
2704      // [indent, statement]
2705      preludeVar,
2706      ref,
2707      ts([
2708        ": <B, A extends {push: (this: A, b: B) => void} | (B extends unknown[] ? {push: (this: A, ...b: B) => void} : never)>(lhs: A, rhs: B) => A"
2709      ]),
2710      " = (lhs, rhs) => (((rhs",
2711      asAny,
2712      ")?.[Symbol.isConcatSpreadable] ?? Array.isArray(rhs)) ? (lhs",
2713      asAny,
2714      ").push.apply(lhs, rhs",
2715      asAny,
2716      ") : (lhs",
2717      asAny,
2718      ").push(rhs), lhs);\n"
2719    ]]);
2720  },
2721  JSX(jsxRef) {
2722    state.prelude.push([
2723      "",
2724      // [indent, statement]
2725      ts(["import type { JSX as ", jsxRef, " } from 'solid-js'"]),
2726      ";\n"
2727    ]);
2728  },
2729  IntrinsicElements(intrinsicElementsRef) {
2730    const JSX = getHelperRef("JSX");
2731    state.prelude.push([
2732      "",
2733      // [indent, statement, delim]
2734      ts([
2735        "type ",
2736        intrinsicElementsRef,
2737        "<K extends keyof ",
2738        JSX,
2739        ".IntrinsicElements> =\n",
2740        "  ",
2741        JSX,
2742        ".IntrinsicElements[K] extends ",
2743        JSX,
2744        ".DOMAttributes<infer T> ? T : unknown"
2745      ]),
2746      ";\n"
2747    ]);
2748  }
2749};
2750function getHelperRef(base) {
2751  if (base in state.helperRefs) {
2752    return state.helperRefs[base];
2753  }
2754  const ref = makeRef(base);
2755  if (!(base in declareHelper)) {
2756    throw new Error(`Unknown helper function: ${base}`);
2757  }
2758  declareHelper[base](ref);
2759  return state.helperRefs[base] = ref;
2760}
2761function extractPreludeFor(node) {
2762  let helpers = new Set(Object.values(state.helperRefs));
2763  helpers = new Set(gatherRecursive(node, helpers.has.bind(helpers)));
2764  return state.prelude.filter((s) => gatherRecursive(s, helpers.has.bind(helpers)).length);
2765}
2766
2767// source/parser/pattern-matching.civet
2768function processPatternTest(lhs, patterns) {
2769  const { ref, hoistDec, refAssignmentComma } = maybeRefAssignment(lhs, "m");
2770  const conditionExpression = flatJoin(patterns.map(($) => getPatternConditions($, ref)).map(($1) => flatJoin($1, " && ")), " || ");
2771  return makeLeftHandSideExpression({
2772    type: "PatternTest",
2773    hoistDec,
2774    children: [
2775      ...refAssignmentComma,
2776      conditionExpression
2777    ]
2778  });
2779}
2780function processPatternMatching(statements) {
2781  gatherRecursiveAll(statements, ($2) => $2.type === "SwitchStatement").forEach((s) => {
2782    const { caseBlock } = s;
2783    const { clauses } = caseBlock;
2784    for (let i1 = 0, len3 = clauses.length; i1 < len3; i1++) {
2785      const c = clauses[i1];
2786      if (c.type === "WhenClause" && c.break) {
2787        if (isExit(c.block)) {
2788          c.children.splice(c.children.indexOf(c.break), 1);
2789          c.break = void 0;
2790        }
2791      }
2792    }
2793    let errors = false;
2794    let isPattern = false;
2795    if (clauses.some(($3) => $3.type === "PatternClause")) {
2796      isPattern = true;
2797      for (let i2 = 0, len1 = clauses.length; i2 < len1; i2++) {
2798        const c = clauses[i2];
2799        if (!(c.type === "PatternClause" || c.type === "DefaultClause")) {
2800          errors = true;
2801          c.children.push({
2802            type: "Error",
2803            message: "Can't mix pattern matching and non-pattern matching clauses"
2804          });
2805        }
2806      }
2807    }
2808    if (errors || !isPattern) {
2809      return;
2810    }
2811    let { condition } = s;
2812    if (condition.type === "ParenthesizedExpression") {
2813      condition = condition.expression;
2814    }
2815    let { ref, hoistDec, refAssignmentComma } = maybeRefAssignment(condition, "m");
2816    const root = [];
2817    let prev = root;
2818    let e;
2819    const l = clauses.length;
2820    for (let i3 = 0, len22 = clauses.length; i3 < len22; i3++) {
2821      const i = i3;
2822      const c = clauses[i3];
2823      if (c.type === "DefaultClause") {
2824        if (e != null) {
2825          replaceNode(e.block, c.block, e);
2826        } else {
2827          prev.push(c.block);
2828        }
2829        break;
2830      }
2831      let { patterns, block } = c;
2832      let pattern = patterns[0];
2833      const conditionExpression = flatJoin(patterns.map(($4) => getPatternConditions($4, ref)).map(($5) => flatJoin($5, " && ")), " || ");
2834      const condition2 = makeNode({
2835        type: "ParenthesizedExpression",
2836        children: ["(", ...refAssignmentComma, conditionExpression, ")"],
2837        expression: conditionExpression
2838      });
2839      braceBlock(block);
2840      block = blockWithPrefix(getPatternBlockPrefix(pattern, ref), block);
2841      if (i < l - 1) {
2842        const expressions = [];
2843        const block2 = makeNode({
2844          type: "BlockStatement",
2845          expressions,
2846          children: [expressions],
2847          bare: true
2848        });
2849        e = makeNode({
2850          type: "ElseClause",
2851          block: block2,
2852          children: ["\n", "else ", block2]
2853        });
2854      } else {
2855        e = void 0;
2856      }
2857      prev.push(["", makeNode({
2858        type: "IfStatement",
2859        children: ["if", condition2, block, e],
2860        then: block,
2861        else: e,
2862        hoistDec
2863      })]);
2864      hoistDec = void 0;
2865      refAssignmentComma = [];
2866      if (e != null) {
2867        prev = e.block.expressions;
2868      }
2869    }
2870    s.type = "PatternMatchingStatement";
2871    s.children = root;
2872    return updateParentPointers(s);
2873  });
2874}
2875function getPatternConditions(pattern, ref, conditions = []) {
2876  if (pattern.rest)
2877    return conditions;
2878  switch (pattern.type) {
2879    case "ArrayBindingPattern": {
2880      const { elements, length } = pattern, hasRest = elements.some((e) => e.rest), l = (length - +hasRest).toString(), lengthCheck = hasRest ? [ref, ".length >= ", l] : [getHelperRef("len"), "(", ref, ", ", l, ")"];
2881      conditions.push(
2882        ["Array.isArray(", ref, ")"],
2883        lengthCheck
2884      );
2885      elements.forEach(({ children: [, e] }, i) => {
2886        const subRef = [ref, "[", i.toString(), "]"];
2887        return getPatternConditions(e, subRef, conditions);
2888      });
2889      const { blockPrefix } = pattern;
2890      if (blockPrefix) {
2891        const postElements = blockPrefix.children[1], { length: postLength } = postElements;
2892        postElements.forEach(({ children: [, e] }, i) => {
2893          const subRef = [ref, "[", ref, ".length - ", (postLength + i).toString(), "]"];
2894          return getPatternConditions(e, subRef, conditions);
2895        });
2896      }
2897      break;
2898    }
2899    case "ObjectBindingPattern": {
2900      conditions.push(
2901        ["typeof ", ref, " === 'object'"],
2902        [ref, " != null"]
2903      );
2904      pattern.properties.forEach((p) => {
2905        switch (p.type) {
2906          case "PinProperty":
2907          case "BindingProperty": {
2908            const { name, value } = p;
2909            let subRef;
2910            switch (name.type) {
2911              case "ComputedPropertyName":
2912                conditions.push([name.expression, " in ", ref]);
2913                subRef = [ref, name];
2914                break;
2915              case "Literal":
2916              case "StringLiteral":
2917              case "NumericLiteral":
2918                conditions.push([name, " in ", ref]);
2919                subRef = [ref, "[", name, "]"];
2920                break;
2921              default:
2922                conditions.push(["'", name, "' in ", ref]);
2923                subRef = [ref, ".", name];
2924            }
2925            if (value) {
2926              getPatternConditions(value, subRef, conditions);
2927            }
2928            break;
2929          }
2930        }
2931      });
2932      break;
2933    }
2934    case "ConditionFragment": {
2935      let { children } = pattern;
2936      if (children.length) {
2937        let [first, ...rest] = children;
2938        let [ws, ...op] = first;
2939        ws = [" "].concat(ws);
2940        first = [ws, ...op];
2941        children = [first, ...rest];
2942      }
2943      conditions.push(
2944        processBinaryOpExpression([ref, children])
2945      );
2946      break;
2947    }
2948    case "RegularExpressionLiteral": {
2949      conditions.push(
2950        ["typeof ", ref, " === 'string'"],
2951        [pattern, ".test(", ref, ")"]
2952      );
2953      break;
2954    }
2955    case "PinPattern":
2956      conditions.push([
2957        ref,
2958        " === ",
2959        pattern.expression
2960      ]);
2961      break;
2962    case "Literal":
2963      conditions.push([
2964        ref,
2965        " === ",
2966        pattern
2967      ]);
2968      break;
2969    default:
2970      break;
2971  }
2972  return conditions;
2973}
2974function getPatternBlockPrefix(pattern, ref, decl = "const ", suffix) {
2975  switch (pattern.type) {
2976    case "ArrayBindingPattern": {
2977      if (!pattern.length) {
2978        return;
2979      }
2980      ;
2981      break;
2982    }
2983    case "ObjectBindingPattern": {
2984      if (!pattern.properties.length) {
2985        return;
2986      }
2987      ;
2988      break;
2989    }
2990    case "Literal":
2991    case "RegularExpressionLiteral":
2992    case "PinPattern":
2993    case "ConditionFragment": {
2994      return;
2995    }
2996  }
2997  let [splices, thisAssignments] = gatherBindingCode(pattern);
2998  const patternBindings = nonMatcherBindings(pattern);
2999  splices = splices.map((s) => [", ", nonMatcherBindings(s)]);
3000  thisAssignments = thisAssignments.map(($6) => ["", $6, ";"]);
3001  const duplicateDeclarations = aggregateDuplicateBindings([patternBindings, splices]);
3002  return [
3003    ["", {
3004      type: "Declaration",
3005      children: [decl, patternBindings, suffix, " = ", ref, ...splices],
3006      names: [],
3007      bindings: []
3008      // avoid implicit return of any bindings
3009    }, ";"],
3010    ...thisAssignments,
3011    ...duplicateDeclarations.map(($7) => ["", $7, ";"])
3012  ];
3013}
3014function elideMatchersFromArrayBindings(elements) {
3015  return elements.map((el) => {
3016    if (el.type === "BindingRestElement") {
3017      return ["", el, void 0];
3018    }
3019    const { children: [ws, e, delim] } = el;
3020    switch (e.type) {
3021      case "Literal":
3022      case "RegularExpressionLiteral":
3023      case "StringLiteral":
3024      case "PinPattern":
3025        return delim;
3026      default:
3027        return [ws, nonMatcherBindings(e), delim];
3028    }
3029  });
3030}
3031function elideMatchersFromPropertyBindings(properties) {
3032  return properties.map((p) => {
3033    switch (p.type) {
3034      case "BindingProperty": {
3035        const { children, name, value } = p;
3036        const [ws] = children;
3037        switch (value && value.type) {
3038          case "ArrayBindingPattern":
3039          case "ObjectBindingPattern": {
3040            const bindings = nonMatcherBindings(value);
3041            return {
3042              ...p,
3043              children: [ws, name, bindings && ": ", bindings, p.delim]
3044            };
3045          }
3046          case "Identifier": {
3047            return p;
3048          }
3049          case "Literal":
3050          case "RegularExpressionLiteral":
3051          case "StringLiteral":
3052          default:
3053            return {
3054              ...p,
3055              children: [ws, name, p.delim]
3056            };
3057        }
3058      }
3059      case "PinProperty":
3060      case "BindingRestProperty":
3061      default:
3062        return p;
3063    }
3064  });
3065}
3066function nonMatcherBindings(pattern) {
3067  switch (pattern.type) {
3068    case "ArrayBindingPattern": {
3069      const elements = elideMatchersFromArrayBindings(pattern.elements);
3070      return {
3071        ...pattern,
3072        elements,
3073        children: pattern.children.map(($8) => $8 === pattern.elements ? elements : $8)
3074      };
3075    }
3076    case "PostRestBindingElements": {
3077      const els = elideMatchersFromArrayBindings(pattern.children[1]);
3078      return {
3079        ...pattern,
3080        children: [
3081          pattern.children[0],
3082          els,
3083          ...pattern.children.slice(2)
3084        ]
3085      };
3086    }
3087    case "ObjectBindingPattern": {
3088      const properties = elideMatchersFromPropertyBindings(pattern.properties);
3089      return {
3090        ...pattern,
3091        properties,
3092        children: pattern.children.map(($9) => $9 === pattern.properties ? properties : $9)
3093      };
3094    }
3095    default: {
3096      return pattern;
3097    }
3098  }
3099}
3100function aggregateDuplicateBindings(bindings) {
3101  const props = gatherRecursiveAll(bindings, ($10) => $10.type === "BindingProperty");
3102  const arrayBindings = gatherRecursiveAll(bindings, ($11) => $11.type === "ArrayBindingPattern");
3103  arrayBindings.forEach((a) => {
3104    const { elements } = a;
3105    return elements.forEach((element) => {
3106      if (Array.isArray(element)) {
3107        const [, e] = element;
3108        if (e.type === "Identifier") {
3109          return props.push(e);
3110        } else if (e.type === "BindingRestElement") {
3111          return props.push(e);
3112        }
3113        ;
3114        return;
3115      }
3116      ;
3117      return;
3118    });
3119  });
3120  const declarations = [];
3121  const propsGroupedByName = /* @__PURE__ */ new Map();
3122  for (const p of props) {
3123    const { name, value } = p;
3124    let m;
3125    if (m = value?.type, m === "ArrayBindingPattern" || m === "ObjectBindingPattern") {
3126      continue;
3127    }
3128    const key = value?.name || name?.name || name;
3129    if (propsGroupedByName.has(key)) {
3130      propsGroupedByName.get(key).push(p);
3131    } else {
3132      propsGroupedByName.set(key, [p]);
3133    }
3134  }
3135  propsGroupedByName.forEach((shared, key) => {
3136    if (!key) {
3137      return;
3138    }
3139    if (ReservedWord({ fail() {
3140    } }, {
3141      pos: 0,
3142      input: key
3143    })) {
3144      shared.forEach((p) => {
3145        return aliasBinding(p, makeRef(`_${key}`, key));
3146      });
3147      return;
3148    }
3149    if (shared.length === 1) {
3150      return;
3151    }
3152    const refs = shared.map((p) => {
3153      const ref = makeRef(key);
3154      aliasBinding(p, ref);
3155      return ref;
3156    });
3157    return declarations.push({
3158      type: "Declaration",
3159      children: [
3160        "const ",
3161        key,
3162        " = [",
3163        ...refs.map((r, i) => i === 0 ? r : [", ", r]),
3164        "]"
3165      ],
3166      names: [],
3167      bindings: []
3168    });
3169  });
3170  return declarations;
3171}
3172function aliasBinding(p, ref) {
3173  if (p.type === "Identifier") {
3174    p.children[0] = ref;
3175  } else if (p.type === "BindingRestElement") {
3176    aliasBinding(p.binding, ref);
3177  } else if (p.value?.type === "Identifier") {
3178    aliasBinding(p.value, ref);
3179  } else {
3180    p.value = ref;
3181    const index = p.children.indexOf(p.name);
3182    p.children.splice(index + 1, 0, ": ", ref);
3183  }
3184}
3185
3186// source/parser/declaration.civet
3187function len2(arr, length) {
3188  return arr.length === length;
3189}
3190function processAssignmentDeclaration(decl, pattern, suffix, ws, assign, e) {
3191  decl = {
3192    ...decl,
3193    $loc: {
3194      pos: assign.$loc.pos - 1,
3195      length: assign.$loc.length + 1
3196    }
3197  };
3198  let [splices, assignments] = gatherBindingCode(pattern);
3199  splices = splices.map((s) => [", ", s]);
3200  const thisAssignments = assignments.map((a) => ["", a, ";"]);
3201  const initializer = makeNode({
3202    type: "Initializer",
3203    expression: e,
3204    children: [ws, assign, e]
3205  });
3206  const binding = makeNode({
3207    type: "Binding",
3208    pattern,
3209    initializer,
3210    splices,
3211    suffix,
3212    thisAssignments,
3213    children: [pattern, suffix, initializer]
3214  });
3215  const children = [decl, binding];
3216  return makeNode({
3217    type: "Declaration",
3218    names: pattern.names,
3219    decl,
3220    bindings: [binding],
3221    splices,
3222    thisAssignments,
3223    children
3224  });
3225}
3226function processDeclarations(statements) {
3227  gatherRecursiveAll(statements, ($) => $.type === "Declaration").forEach((statement) => {
3228    const { bindings } = statement;
3229    return bindings?.forEach((binding) => {
3230      const suffix = binding.suffix;
3231      if (suffix && suffix.optional && suffix.t) {
3232        convertOptionalType(suffix);
3233      }
3234      const { initializer } = binding;
3235      if (initializer) {
3236        return prependStatementExpressionBlock(initializer, statement);
3237      }
3238      ;
3239      return;
3240    });
3241  });
3242}
3243function prependStatementExpressionBlock(initializer, statement) {
3244  let { expression: exp } = initializer;
3245  let ws;
3246  if (Array.isArray(exp)) {
3247    ws = exp[0];
3248    exp = exp[1];
3249  }
3250  if (!(exp?.type === "StatementExpression")) {
3251    return;
3252  }
3253  const pre = [];
3254  const statementExp = exp.statement;
3255  const blockStatement = ["", statementExp];
3256  let ref;
3257  if (statementExp.type === "IterationExpression") {
3258    if (statementExp.async) {
3259      return;
3260    }
3261    const statement2 = statementExp.statement;
3262    blockStatement[1] = statement2;
3263    if (statement2.type === "ComptimeStatement") {
3264      return;
3265    }
3266    if (statement2.type === "DoStatement") {
3267      ref = initializer.expression = initializer.children[2] = makeRef();
3268      assignResults(blockStatement, (resultNode) => {
3269        return makeNode({
3270          type: "AssignmentExpression",
3271          children: [ref, " = ", resultNode],
3272          parent: statement2
3273        });
3274      });
3275      const refDec = {
3276        type: "Declaration",
3277        children: ["let ", ref, ";"]
3278      };
3279      pre.unshift(refDec);
3280    } else {
3281      wrapIterationReturningResults(statement2, { children: blockStatement }, function() {
3282      });
3283      ref = initializer.expression = initializer.children[2] = statement2.resultsRef;
3284    }
3285  } else {
3286    ref = initializer.expression = initializer.children[2] = makeRef();
3287    assignResults(blockStatement, (resultNode) => {
3288      return makeNode({
3289        type: "AssignmentExpression",
3290        children: [ref, " = ", resultNode],
3291        parent: statement
3292      });
3293    });
3294    const refDec = {
3295      type: "Declaration",
3296      children: ["let ", ref, ";"]
3297    };
3298    pre.unshift(refDec);
3299    if (ws) {
3300      pre.push(ws);
3301    }
3302  }
3303  statement.children.unshift(pre, blockStatement, ";");
3304  updateParentPointers(blockStatement, statement);
3305  return ref;
3306}
3307function processDeclarationCondition(condition, rootCondition, parent) {
3308  if (!(condition.type === "DeclarationCondition")) {
3309    return;
3310  }
3311  const { decl, bindings } = condition.declaration;
3312  const binding = bindings[0];
3313  let { pattern, suffix, initializer } = binding;
3314  const nullCheck = suffix?.optional && !suffix.t && !suffix.nonnull;
3315  if (!(initializer != null)) {
3316    condition.children = [
3317      {
3318        type: "Error",
3319        message: "Missing initializer in declaration condition"
3320      }
3321    ];
3322    return;
3323  }
3324  let ref = prependStatementExpressionBlock(initializer, parent);
3325  if (ref) {
3326    Object.assign(condition, {
3327      type: "AssignmentExpression",
3328      children: [ref],
3329      pattern,
3330      ref,
3331      statementDeclaration: true
3332    });
3333  } else {
3334    const { expression } = initializer;
3335    ref = maybeRef(expression);
3336    const simple = ref === expression;
3337    let children;
3338    if (simple) {
3339      ref = insertTrimmingSpace(ref, "");
3340      children = [ref];
3341    } else {
3342      children = [ref, initializer];
3343      const grandparent = condition.parent?.parent;
3344      if (pattern.type === "Identifier" && (grandparent?.type === "IfStatement" || grandparent?.type === "IterationStatement") && !nullCheck) {
3345        children.unshift("(");
3346        children.push(")");
3347      }
3348    }
3349    if (nullCheck) {
3350      children.unshift("(");
3351      children.push(") != null");
3352      suffix = void 0;
3353    }
3354    Object.assign(condition, {
3355      type: "AssignmentExpression",
3356      children,
3357      hoistDec: !simple ? {
3358        type: "Declaration",
3359        children: ["let ", ref, suffix],
3360        names: []
3361      } : void 0,
3362      pattern,
3363      ref
3364    });
3365  }
3366  updateParentPointers(condition, parent);
3367  rootCondition.blockPrefix = getPatternBlockPrefix(pattern, ref, decl, suffix);
3368}
3369function processDeclarationConditions(node) {
3370  gatherRecursiveAll(
3371    node,
3372    (n) => {
3373      return n.type === "IfStatement" || n.type === "IterationStatement" || n.type === "SwitchStatement";
3374    }
3375  ).forEach((s) => {
3376    return processDeclarationConditionStatement(s);
3377  });
3378}
3379function processDeclarationConditionStatement(s) {
3380  const { condition } = s;
3381  if (!condition?.expression) {
3382    return;
3383  }
3384  let { expression } = condition;
3385  if (expression && typeof expression === "object" && "type" in expression && expression.type === "UnaryExpression" && "children" in expression && Array.isArray(expression.children) && len2(expression.children, 2) && expression.children[0] === "!" && typeof expression.children[1] === "object" && expression.children[1] != null && "type" in expression.children[1] && expression.children[1].type === "ParenthesizedExpression" && "expression" in expression.children[1]) {
3386    const { type: type1, children: [, { type: type2, expression: expression2 }] } = expression;
3387    const type = [type1, type2];
3388    expression = expression2;
3389  }
3390  processDeclarationCondition(expression, condition.expression, s);
3391  const { ref, pattern } = expression;
3392  if (pattern) {
3393    const conditions = getPatternConditions(pattern, ref).filter((c) => {
3394      if (Array.isArray(c) && len2(c, 2) && c[0] === ref && c[1] === " != null") {
3395        const [,] = c;
3396        return false;
3397      } else {
3398        return true;
3399      }
3400    });
3401    if (conditions.length) {
3402      if (s.negated) {
3403        let m;
3404        if (!(m = condition.expression, typeof m === "object" && m != null && "type" in m && m.type === "UnaryExpression" && "children" in m && Array.isArray(m.children) && len2(m.children, 2) && m.children[0] === "!" && typeof m.children[1] === "object" && m.children[1] != null && "type" in m.children[1] && m.children[1].type === "ParenthesizedExpression")) {
3405          throw new Error("Unsupported negated condition");
3406        }
3407        const { children } = condition.expression.children[1];
3408        const close = children.pop();
3409        conditions.forEach((c) => {
3410          return children.push(" && ", c);
3411        });
3412        children.push(close);
3413      } else {
3414        condition.children.unshift("(");
3415        conditions.forEach((c) => {
3416          return condition.children.push(" && ", c);
3417        });
3418        condition.children.push(")");
3419      }
3420    }
3421  }
3422  const { blockPrefix } = condition.expression;
3423  if (s.negated && blockPrefix && (s.type === "IfStatement" && isExit(s.then) || s.type === "IterationStatement")) {
3424    const { ancestor, child } = findAncestor(
3425      s,
3426      (a) => a.type === "BlockStatement"
3427    );
3428    if (!(ancestor != null)) {
3429      throw new Error("Couldn't find block for postfix declaration");
3430    }
3431    const index = findChildIndex(ancestor.expressions, child);
3432    if (index < 0) {
3433      throw new Error("Couldn't find where in block to put postfix declaration");
3434    }
3435    ancestor.expressions.splice(index + 1, 0, ...blockPrefix);
3436    updateParentPointers(ancestor);
3437    braceBlock(ancestor);
3438    let ref1;
3439    switch (s.type) {
3440      case "IfStatement": {
3441        if (ref1 = s.else?.block) {
3442          const elseBlock = ref1;
3443          if (elseBlock.bare && !elseBlock.semicolon) {
3444            elseBlock.children.push(elseBlock.semicolon = ";");
3445          }
3446          ancestor.expressions.splice(index + 1 + blockPrefix.length, 0, ["", elseBlock]);
3447          s.children = s.children.filter((a1) => a1 !== s.else);
3448          s.else = void 0;
3449        }
3450        const block = s.then;
3451        if (block.bare && !block.semicolon) {
3452          block.children.push(block.semicolon = ";");
3453        }
3454        ;
3455        break;
3456      }
3457    }
3458    return;
3459  }
3460  switch (s.type) {
3461    case "IfStatement": {
3462      const { else: e } = s;
3463      if (s.negated) {
3464        if (e != null) {
3465          const block = blockWithPrefix(blockPrefix, e.block);
3466          e.children = e.children.map(($1) => $1 === e.block ? block : $1);
3467          e.block = block;
3468          updateParentPointers(e);
3469        }
3470      } else {
3471        const block = blockWithPrefix(blockPrefix, s.then);
3472        if (block.bare && e && !block.semicolon) {
3473          block.children.push(block.semicolon = ";");
3474        }
3475        s.children = s.children.map(($2) => $2 === s.then ? block : $2);
3476        s.then = block;
3477        updateParentPointers(s);
3478      }
3479      ;
3480      break;
3481    }
3482    case "IterationStatement": {
3483      if (!blockPrefix) {
3484        return;
3485      }
3486      const { children, block } = s;
3487      const newBlock = blockWithPrefix(blockPrefix, block);
3488      s.children = children.map(($3) => $3 === block ? newBlock : $3);
3489      updateParentPointers(s);
3490      break;
3491    }
3492    case "SwitchStatement": {
3493      const { ref: ref2, statementDeclaration } = condition.expression;
3494      if (!blockPrefix) {
3495        return;
3496      }
3497      const newCondition = {
3498        type: "ParenthesizedExpression",
3499        children: ["(", ref2, ")"],
3500        expression: ref2,
3501        parent: s
3502      };
3503      s.children = s.children.map(function(c) {
3504        if (c === s.condition) {
3505          return newCondition;
3506        } else {
3507          return c;
3508        }
3509      });
3510      s.condition = newCondition;
3511      updateParentPointers(s);
3512      if (statementDeclaration) {
3513        const block = makeEmptyBlock();
3514        replaceBlockExpression(s.parent, s, block);
3515        block.expressions.push(["", s]);
3516        s.children.splice(s.children.findIndex(($4) => $4.token === "switch"), 0, blockPrefix);
3517        s.parent = block;
3518      } else {
3519        const block = blockWithPrefix([["", [{
3520          type: "Declaration",
3521          children: ["let ", ...condition.expression.children]
3522        }], ";"], ...blockPrefix], makeEmptyBlock());
3523        updateParentPointers(block, s.parent);
3524        replaceBlockExpression(s.parent, s, block);
3525        block.expressions.push(["", s]);
3526        s.parent = block;
3527      }
3528      ;
3529      break;
3530    }
3531  }
3532}
3533function dynamizeFromClause(from) {
3534  from = from.slice(1);
3535  from = insertTrimmingSpace(from, "");
3536  if (from[from.length - 1]?.type === "ImportAssertion") {
3537    const assert2 = from.pop();
3538    from.push(", {", assert2.keyword, ":", assert2.object, "}");
3539  }
3540  return ["(", ...from, ")"];
3541}
3542function dynamizeImportDeclaration(decl) {
3543  const { imports } = decl;
3544  let { star, binding, specifiers } = imports;
3545  const justDefault = binding && !specifiers && !star;
3546  let ref2;
3547  {
3548    if (binding) {
3549      if (specifiers) {
3550        ref2 = makeRef();
3551      } else {
3552        ref2 = binding;
3553      }
3554    } else {
3555      ref2 = convertNamedImportsToObject(imports, true);
3556    }
3557  }
3558  ;
3559  const pattern = ref2;
3560  const c = "const";
3561  const expression = [
3562    justDefault ? "(" : void 0,
3563    { type: "Await", children: ["await"] },
3564    " ",
3565    decl.children[0],
3566    // import
3567    dynamizeFromClause(decl.from),
3568    justDefault ? ").default" : void 0
3569  ];
3570  const initializer = {
3571    type: "Initializer",
3572    expression,
3573    children: [" ", "= ", expression]
3574  };
3575  const bindings = [{
3576    type: "Binding",
3577    names: pattern.names,
3578    pattern,
3579    initializer,
3580    children: [pattern, initializer]
3581  }];
3582  if (binding && specifiers) {
3583    const pattern2 = binding;
3584    const exp2 = [
3585      pattern,
3586      ".default"
3587    ];
3588    const initializer2 = {
3589      type: "Initializer",
3590      expression,
3591      children: [" ", "= ", exp2]
3592    };
3593    bindings.push({
3594      type: "Binding",
3595      names: binding.names,
3596      pattern: pattern2,
3597      initializer: initializer2,
3598      children: [pattern2, initializer2]
3599    });
3600    const pattern3 = convertNamedImportsToObject(imports.children.at(-1), true);
3601    const initializer3 = {
3602      type: "Initializer",
3603      expression: pattern,
3604      children: [" ", "= ", pattern]
3605    };
3606    bindings.push({
3607      type: "Binding",
3608      names: specifiers.names,
3609      pattern: pattern3,
3610      initializer: initializer3,
3611      children: [pattern3, initializer3]
3612    });
3613  }
3614  return {
3615    type: "Declaration",
3616    names: imports.names,
3617    bindings,
3618    decl: c,
3619    children: [
3620      c,
3621      " ",
3622      bindings.flatMap((binding2, i) => i > 0 ? [", ", binding2] : [binding2])
3623    ]
3624  };
3625}
3626function dynamizeImportDeclarationExpression($0) {
3627  const [imp, ws1, named, ws2, from] = $0;
3628  const object = convertNamedImportsToObject(named);
3629  const dot = ".";
3630  return processCallMemberExpression({
3631    type: "CallExpression",
3632    children: [
3633      { type: "Await", children: "await" },
3634      " ",
3635      imp,
3636      insertTrimmingSpace(ws2, ""),
3637      dynamizeFromClause(from),
3638      {
3639        type: "PropertyGlob",
3640        dot,
3641        object,
3642        children: [ws1, dot, object],
3643        reversed: true
3644      }
3645    ]
3646  });
3647}
3648function convertWithClause(withClause, extendsClause) {
3649  let extendsToken, extendsTarget, ws;
3650  if (extendsClause) {
3651    [extendsToken, ws, extendsTarget] = extendsClause;
3652  } else {
3653    extendsToken = {
3654      type: "Extends",
3655      children: [" extends"]
3656    };
3657    ws = "";
3658    extendsTarget = "Object";
3659  }
3660  const wrapped = withClause.targets.reduce(
3661    (extendsTarget2, [wsNext, withTarget]) => {
3662      const args = [extendsTarget2];
3663      const exp = {
3664        type: "CallExpression",
3665        children: [
3666          makeLeftHandSideExpression(withTarget),
3667          {
3668            type: "Call",
3669            args,
3670            children: ["(", trimFirstSpace(ws), args, ")"]
3671          }
3672        ]
3673      };
3674      ws = wsNext;
3675      return exp;
3676    },
3677    extendsTarget
3678  );
3679  return [extendsToken, insertTrimmingSpace(ws, " "), wrapped];
3680}
3681
3682// source/parser/unary.civet
3683function processUnaryExpression(pre, exp, post) {
3684  if (!(pre.length || post))
3685    return exp;
3686  if (post?.token === "?") {
3687    post = {
3688      $loc: post.$loc,
3689      token: " != null"
3690    };
3691    if (pre.length) {
3692      const lastPre = pre[pre.length - 1];
3693      if (lastPre.token === "!") {
3694        post.token = " == null";
3695        pre = pre.slice(0, -1);
3696      } else if (lastPre.length === 2 && lastPre[0].token === "!") {
3697        post.token = " == null";
3698        pre = pre.slice(0, -1);
3699      }
3700    }
3701    const existence = {
3702      type: "Existence",
3703      expression: exp,
3704      children: [exp, post],
3705      parent: void 0
3706    };
3707    exp = makeLeftHandSideExpression(existence);
3708    if (pre.length) {
3709      return {
3710        type: "UnaryExpression",
3711        children: [...pre, exp]
3712      };
3713    }
3714    return exp;
3715  }
3716  if (exp.type === "Literal") {
3717    if (pre.length === 1) {
3718      const { token } = pre[0];
3719      if (token === "-" || token === "+") {
3720        const children = [pre[0], ...exp.children];
3721        const literal = {
3722          type: "Literal",
3723          children,
3724          raw: `${token}${exp.raw}`
3725        };
3726        if (post) {
3727          return {
3728            type: "UnaryExpression",
3729            children: [literal, post]
3730          };
3731        }
3732        return literal;
3733      }
3734    }
3735  }
3736  let ref;
3737  while (ref = pre.length) {
3738    const l = ref;
3739    const last = pre[l - 1];
3740    if (last.type === "Await") {
3741      if (last.op) {
3742        if (exp.type !== "ParenthesizedExpression") {
3743          exp = ["(", exp, ")"];
3744        }
3745        exp = {
3746          type: "CallExpression",
3747          children: [...last.children, "Promise", last.op, exp]
3748        };
3749        pre = pre.slice(0, -1);
3750      } else {
3751        exp = {
3752          type: "AwaitExpression",
3753          children: [...last.children, exp]
3754        };
3755        pre = pre.slice(0, -1);
3756      }
3757    } else {
3758      break;
3759    }
3760  }
3761  return {
3762    type: "UnaryExpression",
3763    children: [...pre, exp, post]
3764  };
3765}
3766
3767// source/parser/pipe.civet
3768function constructInvocation(fn, arg) {
3769  const fnArr = [fn.leadingComment, fn.expr, fn.trailingComment];
3770  let expr = fn.expr;
3771  while (expr.type === "ParenthesizedExpression") {
3772    expr = expr.expression;
3773  }
3774  if (expr.ampersandBlock) {
3775    const { ref, body } = expr;
3776    ref.type = "PipedExpression";
3777    ref.children = [makeLeftHandSideExpression(arg)];
3778    updateParentPointers(ref);
3779    return makeNode({
3780      type: "UnwrappedExpression",
3781      children: [skipIfOnlyWS(fn.leadingComment), body, skipIfOnlyWS(fn.trailingComment)]
3782    });
3783  }
3784  expr = fn.expr;
3785  const lhs = makeLeftHandSideExpression(expr);
3786  let comment = skipIfOnlyWS(fn.trailingComment);
3787  if (comment)
3788    lhs.children.splice(2, 0, comment);
3789  comment = skipIfOnlyWS(fn.leadingComment);
3790  if (comment)
3791    lhs.children.splice(1, 0, comment);
3792  switch (arg.type) {
3793    case "CommaExpression":
3794      arg = makeLeftHandSideExpression(arg);
3795      break;
3796  }
3797  return {
3798    type: "CallExpression",
3799    children: [lhs, "(", arg, ")"]
3800  };
3801}
3802function constructPipeStep(fn, arg, returning) {
3803  let children = [[fn.leadingComment, fn.expr, fn.trailingComment].map(skipIfOnlyWS), " ", arg];
3804  switch (fn.expr.token) {
3805    case "yield":
3806    case "await":
3807      if (fn.expr.op) {
3808        children = processUnaryExpression([fn.expr], arg, void 0);
3809      }
3810      if (returning) {
3811        return [
3812          children,
3813          returning
3814        ];
3815      }
3816      return [
3817        children,
3818        null
3819      ];
3820    case "return":
3821      return [{
3822        type: "ReturnStatement",
3823        children
3824      }, null];
3825  }
3826  if (returning) {
3827    return [
3828      constructInvocation(fn, arg),
3829      returning
3830    ];
3831  }
3832  return [constructInvocation(fn, arg), null];
3833}
3834function processPipelineExpressions(statements) {
3835  gatherRecursiveAll(statements, (n) => n.type === "PipelineExpression").forEach((s) => {
3836    const [ws, , body] = s.children;
3837    let [, arg] = s.children;
3838    let i = 0, l = body.length;
3839    const children = [ws];
3840    let usingRef = null;
3841    for (i = 0; i < l; i++) {
3842      const step = body[i];
3843      const [leadingComment, pipe, trailingComment, expr] = step;
3844      const returns = pipe.token === "||>";
3845      let ref, result, returning = returns ? arg : null;
3846      if (pipe.token === "|>=") {
3847        let initRef;
3848        if (i === 0) {
3849          outer:
3850            switch (arg.type) {
3851              case "MemberExpression":
3852                if (arg.children.length <= 2)
3853                  break;
3854              case "CallExpression":
3855                const access = arg.children.pop();
3856                switch (access.type) {
3857                  case "PropertyAccess":
3858                  case "SliceExpression":
3859                  case "Index":
3860                    break;
3861                  default:
3862                    children.unshift({
3863                      type: "Error",
3864                      $loc: pipe.token.$loc,
3865                      message: `Can't assign to ${access.type}`
3866                    });
3867                    arg.children.push(access);
3868                    break outer;
3869                }
3870                usingRef = makeRef();
3871                initRef = {
3872                  type: "AssignmentExpression",
3873                  children: [usingRef, " = ", arg, ","]
3874                };
3875                arg = {
3876                  type: "MemberExpression",
3877                  children: [usingRef, access]
3878                };
3879                break;
3880            }
3881          const lhs = [[
3882            [initRef],
3883            arg,
3884            [],
3885            { token: "=", children: [" = "] }
3886          ]];
3887          Object.assign(s, {
3888            type: "AssignmentExpression",
3889            children: [lhs, children],
3890            names: null,
3891            lhs,
3892            assigned: arg,
3893            expression: children
3894          });
3895          arg = clone(arg);
3896          removeHoistDecs(arg);
3897          if (arg.children[0].type === "Ref") {
3898            arg.children[0] = usingRef;
3899          }
3900        } else {
3901          children.unshift({
3902            type: "Error",
3903            $loc: pipe.token.$loc,
3904            message: "Can't use |>= in the middle of a pipeline"
3905          });
3906        }
3907      } else {
3908        if (i === 0)
3909          s.children = children;
3910      }
3911      if (returns && (ref = needsRef(arg))) {
3912        usingRef = usingRef || ref;
3913        arg = {
3914          type: "ParenthesizedExpression",
3915          children: ["(", {
3916            type: "AssignmentExpression",
3917            children: [usingRef, " = ", arg]
3918          }, ")"]
3919        };
3920        returning = usingRef;
3921      }
3922      ;
3923      [result, returning] = constructPipeStep(
3924        {
3925          leadingComment: skipIfOnlyWS(leadingComment),
3926          trailingComment: skipIfOnlyWS(trailingComment),
3927          expr
3928        },
3929        arg,
3930        returning
3931      );
3932      if (result.type === "ReturnStatement") {
3933        if (i < l - 1) {
3934          result.children.push({
3935            type: "Error",
3936            message: "Can't continue a pipeline after returning"
3937          });
3938        }
3939        arg = result;
3940        if (children[children.length - 1] === ",") {
3941          children.pop();
3942          children.push(";");
3943        }
3944        break;
3945      }
3946      if (returning) {
3947        arg = returning;
3948        children.push(result, ",");
3949      } else {
3950        arg = result;
3951      }
3952    }
3953    if (usingRef) {
3954      s.hoistDec = {
3955        type: "Declaration",
3956        children: ["let ", usingRef],
3957        names: []
3958      };
3959    }
3960    children.push(arg);
3961    if (!children.some(($) => $?.type === "ReturnStatement") && children.some(($1) => $1 === ",")) {
3962      const { parent } = s;
3963      const parenthesizedExpression = makeLeftHandSideExpression({ ...s });
3964      Object.assign(s, parenthesizedExpression, {
3965        parent,
3966        hoistDec: void 0
3967      });
3968    }
3969    return addParentPointers(s, s.parent);
3970  });
3971}
3972
3973// source/parser/for.civet
3974function forRange(open, forDeclaration, range, stepExp, close) {
3975  const { start, end, inclusive } = range;
3976  const counterRef = makeRef("i");
3977  const infinite = end.type === "Identifier" && end.name === "Infinity";
3978  let stepRef;
3979  if (stepExp) {
3980    stepExp = insertTrimmingSpace(stepExp, "");
3981    stepRef = maybeRef(stepExp, "step");
3982  } else if (infinite) {
3983    stepExp = stepRef = "1";
3984  }
3985  let startRef = maybeRef(start, "start");
3986  let endRef = maybeRef(end, "end");
3987  const startRefDec = startRef !== start ? [startRef, " = ", start, ", "] : [];
3988  const endRefDec = endRef !== end ? [endRef, " = ", end, ", "] : [];
3989  let ascDec = [], ascRef, asc;
3990  if (stepRef) {
3991    if (!(stepRef === stepExp)) {
3992      ascDec = [", ", stepRef, " = ", stepExp];
3993    }
3994  } else if ("Literal" === start.type && start.type === end.type) {
3995    asc = literalValue(start) <= literalValue(end);
3996    if ("StringLiteral" === start.subtype && start.subtype === end.subtype) {
3997      startRef = literalValue(start).charCodeAt(0).toString();
3998      endRef = literalValue(end).charCodeAt(0).toString();
3999    }
4000  } else {
4001    ascRef = makeRef("asc");
4002    ascDec = [", ", ascRef, " = ", startRef, " <= ", endRef];
4003  }
4004  let varAssign = [], varLetAssign = varAssign, varLet = varAssign, blockPrefix;
4005  if (forDeclaration?.declare) {
4006    if (forDeclaration.declare.token === "let") {
4007      const varName = forDeclaration.children.splice(1);
4008      varAssign = [...insertTrimmingSpace(varName, ""), " = "];
4009      varLet = [",", ...varName, " = ", counterRef];
4010    } else {
4011      const value = "StringLiteral" === start.subtype ? ["String.fromCharCode(", counterRef, ")"] : counterRef;
4012      blockPrefix = [
4013        ["", [forDeclaration, " = ", value], ";"]
4014      ];
4015    }
4016  } else if (forDeclaration) {
4017    varAssign = varLetAssign = [forDeclaration, " = "];
4018  }
4019  const declaration = {
4020    type: "Declaration",
4021    children: ["let ", ...startRefDec, ...endRefDec, counterRef, " = ", ...varLetAssign, startRef, ...varLet, ...ascDec],
4022    names: forDeclaration?.names
4023  };
4024  const counterPart = inclusive ? [counterRef, " <= ", endRef, " : ", counterRef, " >= ", endRef] : [counterRef, " < ", endRef, " : ", counterRef, " > ", endRef];
4025  const condition = infinite ? [] : stepRef ? [stepRef, " !== 0 && (", stepRef, " > 0 ? ", ...counterPart, ")"] : ascRef ? [ascRef, " ? ", ...counterPart] : asc ? counterPart.slice(0, 3) : counterPart.slice(4);
4026  const increment = infinite ? [...varAssign, "++", counterRef] : stepRef ? [...varAssign, counterRef, " += ", stepRef] : ascRef ? [...varAssign, ascRef, " ? ++", counterRef, " : --", counterRef] : [...varAssign, asc ? "++" : "--", counterRef];
4027  return {
4028    declaration,
4029    children: [open, declaration, "; ", ...condition, "; ", ...increment, close],
4030    blockPrefix
4031  };
4032}
4033function processForInOf($0, getRef) {
4034  let [awaits, eachOwn, open, declaration, declaration2, ws, inOf, exp, step, close] = $0;
4035  if (exp.type === "RangeExpression" && inOf.token === "of" && !declaration2) {
4036    return forRange(open, declaration, exp, step, close);
4037  } else if (step) {
4038    throw new Error("for..of/in cannot use 'by' except with range literals");
4039  }
4040  let eachOwnError;
4041  let hoistDec, blockPrefix = [];
4042  if (eachOwn && eachOwn[0].token === "each") {
4043    if (inOf.token === "of") {
4044      const counterRef = makeRef("i");
4045      const lenRef = makeRef("len");
4046      const expRef2 = maybeRef(exp);
4047      const increment = "++";
4048      let assignmentNames = [...declaration.names];
4049      if (declaration2) {
4050        const [, , ws22, decl22] = declaration2;
4051        blockPrefix.push(["", [
4052          insertTrimmingSpace(ws22, ""),
4053          decl22,
4054          " = ",
4055          counterRef
4056        ], ";"]);
4057        assignmentNames.push(...decl22.names);
4058      }
4059      const expRefDec = expRef2 !== exp ? [insertTrimmingSpace(expRef2, " "), " = ", insertTrimmingSpace(exp, ""), ", "] : [];
4060      blockPrefix.push(["", {
4061        type: "Declaration",
4062        children: [declaration, " = ", insertTrimmingSpace(expRef2, ""), "[", counterRef, "]"],
4063        names: assignmentNames
4064      }, ";"]);
4065      declaration = {
4066        type: "Declaration",
4067        children: ["let ", ...expRefDec, counterRef, " = 0, ", lenRef, " = ", insertTrimmingSpace(expRef2, ""), ".length"],
4068        names: []
4069      };
4070      const condition = [counterRef, " < ", lenRef, "; "];
4071      const children = [open, declaration, "; ", condition, counterRef, increment, close];
4072      return { declaration, children, blockPrefix };
4073    } else {
4074      eachOwnError = {
4075        type: "Error",
4076        message: "'each' is only meaningful in for..of loops"
4077      };
4078    }
4079  }
4080  let own = eachOwn && eachOwn[0].token === "own";
4081  let expRef;
4082  if (own && inOf.token !== "in") {
4083    own = false;
4084    eachOwnError = {
4085      type: "Error",
4086      message: "'own' is only meaningful in for..in loops"
4087    };
4088  }
4089  if (!declaration2 && !own) {
4090    return {
4091      declaration,
4092      blockPrefix,
4093      children: [awaits, eachOwnError, open, declaration, ws, inOf, expRef ?? exp, step, close]
4094      // omit declaration2, replace eachOwn with eachOwnError, replace exp with expRef
4095    };
4096  }
4097  let ws2, decl2;
4098  if (declaration2)
4099    [, , ws2, decl2] = declaration2;
4100  switch (inOf.token) {
4101    case "of": {
4102      const counterRef = makeRef("i");
4103      hoistDec = {
4104        type: "Declaration",
4105        children: ["let ", counterRef, " = 0"],
4106        names: []
4107      };
4108      blockPrefix.push(["", {
4109        type: "Declaration",
4110        children: [insertTrimmingSpace(ws2, ""), decl2, " = ", counterRef, "++"],
4111        names: decl2.names
4112      }, ";"]);
4113      break;
4114    }
4115    case "in": {
4116      const expRef2 = maybeRef(exp);
4117      if (expRef2 !== exp) {
4118        hoistDec = {
4119          type: "Declaration",
4120          children: ["let ", expRef2],
4121          names: []
4122        };
4123        exp = {
4124          type: "AssignmentExpression",
4125          children: [" ", expRef2, " =", exp]
4126        };
4127      }
4128      let { binding } = declaration;
4129      if (binding?.type !== "Identifier") {
4130        const keyRef = makeRef("key");
4131        blockPrefix.push(["", [
4132          declaration,
4133          " = ",
4134          keyRef
4135        ], ";"]);
4136        declaration = {
4137          type: "ForDeclaration",
4138          binding: binding = keyRef,
4139          children: ["const ", keyRef],
4140          names: []
4141        };
4142      }
4143      if (own) {
4144        const hasPropRef = getRef("hasProp");
4145        blockPrefix.push(["", ["if (!", hasPropRef, "(", insertTrimmingSpace(expRef2, ""), ", ", insertTrimmingSpace(binding, ""), ")) continue"], ";"]);
4146      }
4147      if (decl2) {
4148        blockPrefix.push(["", {
4149          type: "Declaration",
4150          children: [insertTrimmingSpace(ws2, ""), decl2, " = ", insertTrimmingSpace(expRef2, ""), "[", insertTrimmingSpace(binding, ""), "]"],
4151          names: decl2.names
4152        }, ";"]);
4153      }
4154      break;
4155    }
4156    default:
4157      throw new Error(`for item, index must use 'of' or 'in' instead of '${inOf.token}'`);
4158  }
4159  return {
4160    declaration,
4161    children: [awaits, eachOwnError, open, declaration, ws, inOf, exp, step, close],
4162    // omit declaration2, replace each with eachOwnError
4163    blockPrefix,
4164    hoistDec
4165  };
4166}
4167
4168// source/parser/auto-dec.civet
4169function findDecs(statements) {
4170  const predicate = ($) => $.type === "Declaration";
4171  const declarations = gatherNodes(statements, predicate);
4172  const declarationNames = declarations.flatMap((d) => d.names);
4173  return new Set(declarationNames);
4174}
4175function createConstLetDecs(statements, scopes, letOrConst) {
4176  function findVarDecs(statements2, decs) {
4177    const declarationNames = gatherRecursive(statements2, (node) => {
4178      return node.type === "Declaration" && node.children && node.children.length > 0 && node.children[0].token && node.children[0].token.startsWith("var") || node.type === "FunctionExpression";
4179    }).filter((node) => node.type === "Declaration").flatMap((node) => node.names);
4180    return new Set(declarationNames);
4181  }
4182  let declaredIdentifiers = findVarDecs(statements);
4183  function hasDec(name) {
4184    return declaredIdentifiers.has(name) || scopes.some((s) => s.has(name));
4185  }
4186  function gatherBlockOrOther(statement) {
4187    return gatherNodes(statement, (s) => s.type === "BlockStatement" || s.type === "AssignmentExpression" || s.type === "Declaration").flatMap((node) => {
4188      if (node.type == "BlockStatement") {
4189        return node.bare ? gatherBlockOrOther(node.expressions) : node;
4190      } else if (node.children && node.children.length) {
4191        return [...gatherBlockOrOther(node.children), node];
4192      } else {
4193        return [];
4194      }
4195    });
4196  }
4197  let currentScope = /* @__PURE__ */ new Set();
4198  scopes.push(currentScope);
4199  const fnNodes = gatherNodes(statements, isFunction);
4200  const forNodes = gatherNodes(statements, (s) => s.type === "ForStatement");
4201  let targetStatements = [];
4202  for (const statement of statements) {
4203    const nodes = gatherBlockOrOther(statement);
4204    let undeclaredIdentifiers = [];
4205    for (const node of nodes) {
4206      if (node.type == "BlockStatement") {
4207        let block = node;
4208        let fnNode = fnNodes.find((fnNode2) => fnNode2.block === block);
4209        let forNode = forNodes.find((forNode2) => forNode2.block === block);
4210        if (fnNode != null) {
4211          scopes.push(new Set(fnNode.parameters.names));
4212          createConstLetDecs(block.expressions, scopes, letOrConst);
4213          scopes.pop();
4214        } else if (forNode != null) {
4215          scopes.push(new Set(forNode.declaration.names));
4216          createConstLetDecs(block.expressions, scopes, letOrConst);
4217          scopes.pop();
4218        } else {
4219          createConstLetDecs(block.expressions, scopes, letOrConst);
4220        }
4221        continue;
4222      }
4223      if (node.names == null)
4224        continue;
4225      let names = node.names.filter((name) => !hasDec(name));
4226      if (node.type == "AssignmentExpression") {
4227        undeclaredIdentifiers.push(...names);
4228      }
4229      names.forEach((name) => currentScope.add(name));
4230    }
4231    if (undeclaredIdentifiers.length > 0) {
4232      let indent = statement[0];
4233      let firstIdentifier = gatherNodes(statement[1], (node) => node.type == "Identifier")[0];
4234      if (undeclaredIdentifiers.length == 1 && statement[1].type == "AssignmentExpression" && statement[1].names.length == 1 && statement[1].names[0] == undeclaredIdentifiers[0] && firstIdentifier && firstIdentifier.names == undeclaredIdentifiers[0] && gatherNodes(statement[1], (node) => node.type === "ObjectBindingPattern").length == 0) {
4235        statement[1].children.unshift([`${letOrConst} `]);
4236      } else {
4237        let tail = "\n";
4238        if (gatherNodes(indent, (node) => node.token && node.token.endsWith("\n")).length > 0) {
4239          tail = void 0;
4240        }
4241        targetStatements.push([indent, {
4242          type: "Declaration",
4243          children: ["let ", ...undeclaredIdentifiers.join(", ")],
4244          names: undeclaredIdentifiers
4245        }, tail]);
4246      }
4247    }
4248    targetStatements.push(statement);
4249  }
4250  scopes.pop();
4251  statements.splice(0, statements.length, ...targetStatements);
4252}
4253function createVarDecs(block, scopes, pushVar) {
4254  function hasDec(name) {
4255    return scopes.some((s) => s.has(name));
4256  }
4257  function findAssignments(statements2, decs2) {
4258    let assignmentStatements2 = gatherNodes(statements2, (node) => {
4259      return node.type === "AssignmentExpression";
4260    });
4261    if (assignmentStatements2.length) {
4262      assignmentStatements2 = assignmentStatements2.concat(findAssignments(assignmentStatements2.map((s) => s.children), decs2));
4263    }
4264    return assignmentStatements2;
4265  }
4266  if (!pushVar) {
4267    pushVar = function(name) {
4268      varIds.push(name);
4269      return decs.add(name);
4270    };
4271  }
4272  const { expressions: statements } = block;
4273  const decs = findDecs(statements);
4274  scopes.push(decs);
4275  const varIds = [];
4276  const assignmentStatements = findAssignments(statements, scopes);
4277  const undeclaredIdentifiers = assignmentStatements.flatMap(($1) => $1?.names || []);
4278  undeclaredIdentifiers.filter((x, i, a) => {
4279    if (!hasDec(x))
4280      return a.indexOf(x) === i;
4281    return;
4282  }).forEach(pushVar);
4283  const fnNodes = gatherNodes(statements, isFunction);
4284  const forNodes = gatherNodes(statements, (s) => s.type === "ForStatement");
4285  const blockNodes = new Set(gatherNodes(statements, (s) => s.type === "BlockStatement"));
4286  fnNodes.forEach(({ block: block2 }) => blockNodes.delete(block2));
4287  forNodes.forEach(({ block: block2 }) => blockNodes.delete(block2));
4288  blockNodes.forEach((block2) => {
4289    return createVarDecs(block2, scopes, pushVar);
4290  });
4291  forNodes.forEach(({ block: block2, declaration }) => {
4292    scopes.push(new Set(declaration.names));
4293    createVarDecs(block2, scopes, pushVar);
4294    return scopes.pop();
4295  });
4296  fnNodes.forEach(({ block: block2, parameters }) => {
4297    scopes.push(new Set(parameters.names));
4298    createVarDecs(block2, scopes);
4299    return scopes.pop();
4300  });
4301  if (varIds.length) {
4302    const indent = getIndent(statements[0]);
4303    let delimiter = ";";
4304    if (statements[0][1]?.parent?.root) {
4305      delimiter = ";\n";
4306    }
4307    braceBlock(block);
4308    statements.unshift([indent, {
4309      type: "Declaration",
4310      children: ["var ", varIds.join(", ")]
4311    }, delimiter]);
4312  }
4313  scopes.pop();
4314}
4315
4316// source/parser/comptime.civet
4317var import_node_path = {};
4318var import_node_module = {};
4319var import_node_vm = {};
4320
4321// source/generate.civet
4322function stringify(node) {
4323  try {
4324    return JSON.stringify(removeParentPointers(node));
4325  } catch (e) {
4326    return `${node}`;
4327  }
4328}
4329function gen(root, options) {
4330  const updateSourceMap = options?.sourceMap?.updateSourceMap;
4331  return recurse(root);
4332  function recurse(node) {
4333    if (!(node != null)) {
4334      return "";
4335    }
4336    if (typeof node === "string") {
4337      updateSourceMap?.(node);
4338      return node;
4339    }
4340    if (Array.isArray(node)) {
4341      return node.map(recurse).join("");
4342    }
4343    if (typeof node === "object") {
4344      if (options.js && node.ts) {
4345        return "";
4346      }
4347      if (!options.js && node.js) {
4348        return "";
4349      }
4350      if (node.type === "Error") {
4351        const filename2 = options?.filename ?? "unknown";
4352        let line = "?";
4353        let column = "?";
4354        let offset;
4355        if (options && typeof options === "object" && "sourceMap" in options) {
4356          const { sourceMap } = options;
4357          line = sourceMap.data.srcLine + 1;
4358          column = sourceMap.data.srcColumn + 1;
4359          offset = sourceMap.data.srcOffset;
4360        }
4361        options.errors ??= [];
4362        options.errors.push(new import_lib3.ParseError(
4363          node.message,
4364          void 0,
4365          // body
4366          filename2,
4367          line,
4368          column,
4369          offset
4370        ));
4371        return "";
4372      }
4373      if (node.$loc != null) {
4374        const { token, $loc } = node;
4375        updateSourceMap?.(token, $loc.pos);
4376        return token;
4377      }
4378      if (!node.children) {
4379        switch (node.type) {
4380          case "Ref": {
4381            throw new Error(`Unpopulated ref ${stringify(node)}`);
4382          }
4383        }
4384        throw new Error(`Unknown node ${stringify(node)}`);
4385      }
4386      return recurse(node.children);
4387    }
4388    throw new Error(`Unknown node ${stringify(node)}`);
4389  }
4390}
4391var generate_default = gen;
4392function prune(node) {
4393  if (!(node != null)) {
4394    return;
4395  }
4396  if (typeof node === "string" && node.length === 0) {
4397    return;
4398  }
4399  if (node.parent != null) {
4400    delete node.parent;
4401  }
4402  if (Array.isArray(node)) {
4403    const a = node.map(prune).filter(($) => $);
4404    if (a.length > 1) {
4405      return a;
4406    }
4407    if (a.length === 1) {
4408      return a[0];
4409    }
4410    return;
4411  }
4412  if (node.children != null) {
4413    node.children = prune(node.children) || [];
4414    return node;
4415  }
4416  return node;
4417}
4418
4419// source/parser/comptime.civet
4420function processComptime(statements) {
4421  if (!getInitialConfig()?.comptime) {
4422    return;
4423  }
4424  const promises = runComptime(statements);
4425  if (getSync()) {
4426    return;
4427  } else {
4428    return (async () => {
4429      {
4430        await Promise.all(promises);
4431      }
4432    })();
4433  }
4434}
4435function runComptime(statements) {
4436  const sync2 = getSync();
4437  return gatherRecursive(
4438    statements,
4439    (node) => {
4440      return node.type === "ComptimeStatement" || node.type === "ComptimeExpression";
4441    }
4442  ).map((exp) => {
4443    let content = exp.type === "ComptimeStatement" ? exp.block : exp.expression;
4444    content = [
4445      ...extractPreludeFor(content),
4446      content
4447    ];
4448    const options = { js: true };
4449    let js = generate_default(prune(content), options);
4450    js = `"use strict";${js}`;
4451    if (options.errors != null) {
4452      return;
4453    }
4454    let output, context, contextGlobal;
4455    try {
4456      context = import_node_vm.default.createContext?.() ?? globalThis;
4457      const filename2 = context.__filename = (0, import_node_path.resolve)(getFilename() ?? "");
4458      context.__dirname = (0, import_node_path.dirname)(filename2);
4459      context.require = (0, import_node_module.createRequire)(filename2);
4460      if (import_node_vm.default.runInContext != null) {
4461        contextGlobal = import_node_vm.default.runInContext("globalThis", context);
4462        const builtins = new Set(Object.getOwnPropertyNames(contextGlobal));
4463        for (const name of Object.getOwnPropertyNames(globalThis)) {
4464          if (builtins.has(name)) {
4465            continue;
4466          }
4467          Object.defineProperty(contextGlobal, name, {
4468            __proto__: null,
4469            ...Object.getOwnPropertyDescriptor(globalThis, name)
4470          });
4471        }
4472        output = import_node_vm.default.runInContext(js, context, {
4473          filename: filename2,
4474          importModuleDynamically: import_node_vm.default.constants?.USE_MAIN_CONTEXT_DEFAULT_LOADER
4475        });
4476      } else {
4477        output = eval?.(js);
4478      }
4479    } catch (e) {
4480      exp.children = [
4481        {
4482          type: "Error",
4483          message: `comptime block failed to execute: ${e}
4484${js}`
4485        }
4486      ];
4487      return;
4488    }
4489    let promise;
4490    if (exp.type === "ComptimeExpression") {
4491      const finish = () => {
4492        let string;
4493        try {
4494          string = serialize(output, contextGlobal);
4495        } catch (e) {
4496          exp.children = [
4497            {
4498              type: "Error",
4499              message: `comptime result ${output} not serializable: ${e}`
4500            }
4501          ];
4502          return;
4503        }
4504        return exp.children = [string];
4505      };
4506      if (sync2) {
4507        finish();
4508      } else {
4509        promise = (async () => {
4510          {
4511            output = await output;
4512            return finish();
4513          }
4514        })();
4515      }
4516    } else {
4517      promise = output;
4518      exp.children = [];
4519    }
4520    return promise;
4521  });
4522}
4523function serialize(value, context) {
4524  const stack = /* @__PURE__ */ new Set();
4525  function recurse(val) {
4526    if (typeof val === "string") {
4527      return JSON.stringify(val);
4528    } else if (typeof val === "number") {
4529      if (Object.is(-0, val))
4530        return "-0";
4531      else
4532        return val.toString();
4533    } else if (typeof val === "boolean" || val == null) {
4534      return String(val);
4535    } else if (typeof val === "bigint") {
4536      return `${val}n`;
4537    } else if (typeof val === "function") {
4538      let string = Function.prototype.toString.call(val);
4539      if (/\{\s+\[native code]\s+\}$/.test(string)) {
4540        throw new TypeError("cannot serialize native function");
4541      }
4542      if (/^class[\s{]/u.test(string)) {
4543        return string;
4544      }
4545      if (stack.has(val)) {
4546        throw new Error("circular reference detected");
4547      }
4548      stack.add(val);
4549      if (/^(?:async\s*)?(?:\*\s*|[gs]et\s+)?\[/.test(string)) {
4550        throw new Error("cannot serialize method with computed name");
4551      }
4552      const protoHasProps = !(val.prototype === void 0 || Object.prototype === Object.getPrototypeOf(val.prototype) && Object.getOwnPropertyNames(val.prototype).length <= 1 && // constructor
4553      Object.getOwnPropertySymbols(val.prototype).length === 0 && [val, void 0].includes(val.prototype.constructor));
4554      const isGenerator = /^(?:async\s*)?(?:function\s*)?\*/u.test(string);
4555      if (protoHasProps && !isGenerator) {
4556        throw new TypeError("cannot serialize function with modified prototype");
4557      }
4558      if (!/^(?:async\s+)?(?:(function|class)(?!\p{ID_Continue})|\(|(?:\p{ID_Start}|[_$])(?:\p{ID_Continue}|[\u200C\u200D$])*\s*=>)/u.test(string)) {
4559        string = string.replace(/^(async\s+)?(?:[gs]et\s+(?=\p{ID_Start}))?/u, (_2, maybeAsync = "") => maybeAsync + "function ");
4560      }
4561      const defaultProps = ["length", "name", "arguments", "caller", "prototype"];
4562      const hasProps = !(Object.getOwnPropertyNames(val).every(($) => defaultProps.includes($)) && Object.getOwnPropertySymbols(val).length === 0);
4563      if (hasProps) {
4564        const props = Object.getOwnPropertyDescriptors(val);
4565        for (const prop of defaultProps) {
4566          delete props[prop];
4567        }
4568        string = `Object.defineProperties(${string},${recurse(props)})`;
4569      }
4570      stack.delete(val);
4571      return string;
4572    } else if (typeof val === "symbol") {
4573      let ref;
4574      if ((ref = Symbol.keyFor(val)) != null) {
4575        const key = ref;
4576        return `Symbol.for(${JSON.stringify(key)})`;
4577      }
4578      for (const name of Object.getOwnPropertyNames(Symbol)) {
4579        const sym = Symbol[name];
4580        if (val === sym) {
4581          return `Symbol.${name}`;
4582        }
4583      }
4584      throw new TypeError("cannot serialize unique symbol");
4585    } else if (typeof val === "object") {
4586      if (stack.has(val)) {
4587        throw new Error("circular reference detected");
4588      }
4589      stack.add(val);
4590      let ref1;
4591      switch (Object.getPrototypeOf(val)) {
4592        case RegExp.prototype:
4593        case context?.RegExp.prototype: {
4594          const re = val;
4595          ref1 = `/${re.source}/${re.flags}`;
4596          break;
4597        }
4598        case Date.prototype:
4599        case context?.Date.prototype: {
4600          ref1 = `new Date(${val.getTime()})`;
4601          break;
4602        }
4603        case Set.prototype:
4604        case context?.Set.prototype: {
4605          ref1 = "new Set([" + (() => {
4606            const results = [];
4607            for (const item of val) {
4608              results.push(recurse(item));
4609            }
4610            return results;
4611          })().join(",") + "])";
4612          break;
4613        }
4614        case Map.prototype:
4615        case context?.Map.prototype: {
4616          ref1 = "new Map([" + (() => {
4617            const results1 = [];
4618            for (const [key, value2] of val) {
4619              results1.push(`[${recurse(key)},${recurse(value2)}]`);
4620            }
4621            return results1;
4622          })().join(",") + "])";
4623          break;
4624        }
4625        case Object.prototype:
4626        case context?.Object.prototype: {
4627          let objStr = "{";
4628          let descStr = "";
4629          for (let ref2 = Object.getOwnPropertyNames(val).concat(Object.getOwnPropertySymbols(val)), i = 0, len3 = ref2.length; i < len3; i++) {
4630            const prop = ref2[i];
4631            const desc = Object.getOwnPropertyDescriptor(val, prop);
4632            if (desc.enumerable && desc.configurable && desc.writable) {
4633              if (typeof prop === "symbol") {
4634                objStr += `[${recurse(prop)}]`;
4635              } else {
4636                objStr += JSON.stringify(prop);
4637              }
4638              objStr += `:${recurse(desc.value)},`;
4639            } else {
4640              if (typeof prop === "symbol") {
4641                descStr += `[${recurse(prop)}]`;
4642              } else {
4643                descStr += JSON.stringify(prop);
4644              }
4645              descStr += `:${recurse(desc)},`;
4646            }
4647          }
4648          if (objStr.length > 1) {
4649            objStr = objStr.slice(0, -1);
4650          }
4651          objStr += "}";
4652          if (descStr !== "") {
4653            objStr = `Object.defineProperties(${objStr},{${descStr.slice(0, -1)}})`;
4654          }
4655          if (!Object.isExtensible(val)) {
4656            objStr = `Object.preventExtensions(${objStr})`;
4657          }
4658          ref1 = objStr;
4659          break;
4660        }
4661        case URL.prototype:
4662        case context?.URL.prototype: {
4663          ref1 = `new URL(${JSON.stringify(val.href)})`;
4664          break;
4665        }
4666        case null: {
4667          ref1 = `Object.create(null,${recurse(Object.getOwnPropertyDescriptors(val))})`;
4668          break;
4669        }
4670        case Int8Array.prototype:
4671        case Uint8Array.prototype:
4672        case Int16Array.prototype:
4673        case Uint16Array.prototype:
4674        case Int32Array.prototype:
4675        case Uint32Array.prototype:
4676        case Float32Array.prototype:
4677        case Float64Array.prototype:
4678        case Uint8ClampedArray.prototype:
4679        case context?.Int8Array.prototype:
4680        case context?.Uint8Array.prototype:
4681        case context?.Int16Array.prototype:
4682        case context?.Uint16Array.prototype:
4683        case context?.Int32Array.prototype:
4684        case context?.Uint32Array.prototype:
4685        case context?.Float32Array.prototype:
4686        case context?.Float64Array.prototype:
4687        case context?.Uint8ClampedArray.prototype: {
4688          ref1 = `new ${val.constructor.name}([${val.join(",")}])`;
4689          break;
4690        }
4691        case BigInt64Array.prototype:
4692        case BigUint64Array.prototype:
4693        case context?.BigInt64Array.prototype:
4694        case context?.BigUint64Array.prototype: {
4695          ref1 = `new ${val.constructor.name}([${Array.from(val, ($1) => `${$1}n`).join(",")}])`;
4696          break;
4697        }
4698        case globalThis.Buffer?.prototype:
4699        case context?.Buffer?.prototype: {
4700          ref1 = `Buffer.from([${val.join(",")}])`;
4701          break;
4702        }
4703        default: {
4704          if (Array.isArray(val)) {
4705            ref1 = `[${val.map(recurse).join(",")}]`;
4706          } else {
4707            throw new TypeError(`cannot serialize object with prototype ${val.constructor?.name ?? Object.getPrototypeOf(val)}`);
4708          }
4709        }
4710      }
4711      ;
4712      const str = ref1;
4713      stack.delete(val);
4714      return str;
4715    } else {
4716      throw new TypeError(`cannot serialize ${typeof val} value`);
4717    }
4718  }
4719  return recurse(value);
4720}
4721
4722// source/parser/string.civet
4723function getIndentLevel(str, tab) {
4724  if (tab != null && tab != 1) {
4725    const tabs = str.match(/\t/g);
4726    const numTabs = tabs ? tabs.length : 0;
4727    return numTabs * tab + /*spaces*/
4728    (str.length - numTabs);
4729  } else {
4730    return str.length;
4731  }
4732}
4733function reduceIndentLevel(str, dedent, tab) {
4734  if (tab != null && tab != 1) {
4735    for (let i1 = 0, len3 = str.length; i1 < len3; i1++) {
4736      const i = i1;
4737      const char = str[i1];
4738      if (!dedent) {
4739        return str.slice(i);
4740      }
4741      if (char == "	") {
4742        dedent -= tab;
4743        if (dedent < 0) {
4744          return "".padStart(-dedent, " ") + str.slice(i + 1);
4745        }
4746      } else {
4747        dedent--;
4748      }
4749    }
4750    return "";
4751  } else {
4752    return str.slice(dedent);
4753  }
4754}
4755var indentRe = /\n([ \t]*)(?![ \t]|\r?\n|$)/g;
4756function getIndentOfBlockString(str, tab) {
4757  let minLevel = Infinity;
4758  let ref;
4759  while (ref = indentRe.exec(str)) {
4760    const match = ref;
4761    const level = getIndentLevel(match[1], tab);
4762    if (level < minLevel) {
4763      minLevel = level;
4764    }
4765  }
4766  if (minLevel === Infinity) {
4767    minLevel = 0;
4768  }
4769  return minLevel;
4770}
4771function dedentBlockString({ $loc, token: str }, tab, dedent, trimStart = true, trimEnd = true) {
4772  if (dedent == null && /^[ \t]*\r?\n/.test(str)) {
4773    dedent = getIndentOfBlockString(str, tab);
4774  }
4775  if (dedent) {
4776    str = str.replace(/(\n)([ \t]*)/g, (_2, newline, indent) => {
4777      return newline + reduceIndentLevel(indent, dedent, tab);
4778    });
4779  }
4780  if (trimStart) {
4781    str = str.replace(/^[ \t]*\r?\n/, "");
4782  }
4783  if (trimEnd) {
4784    str = str.replace(/(\r?\n|\n)[ \t]*$/, "");
4785  }
4786  str = str.replace(/(\\.|`|\$\{)/g, (s) => {
4787    if (s[0] === "\\") {
4788      return s;
4789    } else {
4790      return `\\${s}`;
4791    }
4792  });
4793  return { $loc, token: str };
4794}
4795function dedentBlockSubstitutions($0, tab) {
4796  const [s, strWithSubstitutions, e] = $0;
4797  if (!strWithSubstitutions.length) {
4798    return $0;
4799  }
4800  const stringPart = (() => {
4801    const results1 = [];
4802    for (let i2 = 0, len1 = strWithSubstitutions.length; i2 < len1; i2++) {
4803      const part = strWithSubstitutions[i2];
4804      results1.push(part.token ?? "s");
4805    }
4806    return results1;
4807  })().join("");
4808  let ref1;
4809  if (/^[ \t]*\r?\n/.test(stringPart)) {
4810    ref1 = getIndentOfBlockString(stringPart, tab);
4811  } else {
4812    ref1 = void 0;
4813  }
4814  ;
4815  const dedent = ref1;
4816  let results = [s];
4817  for (let i3 = 0, len22 = strWithSubstitutions.length; i3 < len22; i3++) {
4818    const i = i3;
4819    let part = strWithSubstitutions[i3];
4820    if (part.token != null) {
4821      part = dedentBlockString(
4822        part,
4823        tab,
4824        dedent,
4825        i === 0,
4826        i === strWithSubstitutions.length - 1
4827      );
4828    }
4829    results.push(part);
4830  }
4831  results.push(e);
4832  return {
4833    type: "TemplateLiteral",
4834    children: results
4835  };
4836}
4837function processCoffeeInterpolation(s, parts, e, $loc) {
4838  if (parts.length === 0) {
4839    return {
4840      type: "StringLiteral",
4841      token: '""',
4842      $loc
4843    };
4844  }
4845  if (parts.length === 1) {
4846    let ref2;
4847    if ((ref2 = parts[0]) && typeof ref2 === "object" && "token" in ref2) {
4848      const { token } = ref2;
4849      return {
4850        type: "StringLiteral",
4851        token: `"${modifyString(token)}"`,
4852        $loc
4853      };
4854    }
4855  }
4856  const results2 = [];
4857  for (let i4 = 0, len3 = parts.length; i4 < len3; i4++) {
4858    const part = parts[i4];
4859    if ("token" in part) {
4860      const token = modifyString(part.token.replace(/(`|\$\{)/g, "\\$1"));
4861      results2.push({
4862        ...part,
4863        token
4864      });
4865    } else {
4866      results2.push(part);
4867    }
4868  }
4869  ;
4870  parts = results2;
4871  s.token = e.token = "`";
4872  return {
4873    type: "TemplateLiteral",
4874    children: [s, parts, e]
4875  };
4876}
4877function modifyString(str) {
4878  return str.replace(/((?:\\.|[^\r\n])*)(\r\n|\n|\r)?/gsu, function(_2, chars, nl) {
4879    if (nl) {
4880      return chars + "\\n";
4881    } else {
4882      return chars;
4883    }
4884  });
4885}
4886function quoteString(str) {
4887  return JSON.stringify(str);
4888}
4889
4890// source/parser/lib.civet
4891var xor = (a, b) => a ? !b && a : b;
4892function addPostfixStatement(statement, ws, post) {
4893  const expressions = [
4894    ...post.blockPrefix || [],
4895    ["", statement]
4896  ];
4897  const block = makeNode({
4898    type: "BlockStatement",
4899    children: [" { ", expressions, " }"],
4900    expressions
4901  });
4902  const children = [...post.children, block];
4903  if (!isWhitespaceOrEmpty(ws))
4904    children.push(ws);
4905  post = makeNode({ ...post, children, block });
4906  if (post.type === "IfStatement") {
4907    post.then = block;
4908  }
4909  return post;
4910}
4911function adjustIndexAccess(dot) {
4912  if (dot.optional) {
4913    return {
4914      ...dot,
4915      children: [...dot.children, "["]
4916    };
4917  } else {
4918    dot = replaceNodes(
4919      deepCopy(dot),
4920      (node) => node.token === ".",
4921      (node) => ({ ...node, token: "[" })
4922    );
4923  }
4924  return dot;
4925}
4926function negateCondition(condition) {
4927  let { expression } = condition;
4928  const children = condition.children.slice();
4929  const i = children.indexOf(expression);
4930  if (i < 0) {
4931    throw new Error(`Could not find expression in condition`);
4932  }
4933  children[i] = expression = {
4934    type: "UnaryExpression",
4935    children: [
4936      "!",
4937      makeLeftHandSideExpression(expression)
4938    ]
4939  };
4940  return { ...condition, expression, children };
4941}
4942function isExpression(node) {
4943  if (Array.isArray(node)) {
4944    return node.every(isExpression);
4945  }
4946  if (typeof node === "string") {
4947    return true;
4948  }
4949  switch (node?.type) {
4950    case "BlockStatement":
4951    case "DebuggerStatement":
4952    case "Declaration":
4953    case "ForStatement":
4954    case "IfStatement":
4955    case "IterationStatement":
4956    case "ReturnStatement":
4957    case "SwitchStatement":
4958    case "ThrowStatement":
4959    case "TryStatement":
4960      return false;
4961  }
4962  return true;
4963}
4964function expressionizeBlock(blockOrExpression) {
4965  if (blockOrExpression && typeof blockOrExpression === "object" && "expressions" in blockOrExpression) {
4966    const { expressions } = blockOrExpression;
4967    const l = expressions.length;
4968    const results = [];
4969    let i1 = 0;
4970    for (const [ws, s, _delim] of expressions) {
4971      const i = i1++;
4972      if (!isExpression(s))
4973        return;
4974      const wrapped = makeLeftHandSideExpression(s);
4975      if (i === l - 1) {
4976        results.push([ws, wrapped]);
4977      } else {
4978        results.push([ws, wrapped, ","]);
4979      }
4980    }
4981    if (results.length > 1) {
4982      return makeLeftHandSideExpression(results);
4983    } else if (results.length) {
4984      return results;
4985    } else {
4986      return ["void 0"];
4987    }
4988  } else {
4989    return blockOrExpression;
4990  }
4991}
4992function expressionizeIfStatement(statement) {
4993  const { condition, then: b, else: e } = statement;
4994  const [...condRest] = condition.children, [closeParen] = condRest.splice(-1);
4995  const expressionizedBlock = expressionizeBlock(b);
4996  if (!expressionizedBlock) {
4997    return wrapIIFE([["", statement]]);
4998  }
4999  const children = [
5000    ...condRest,
5001    "?",
5002    expressionizedBlock
5003  ];
5004  if (e) {
5005    const e2 = expressionizeBlock(e.block);
5006    if (!e2) {
5007      return wrapIIFE([["", statement]]);
5008    }
5009    children.push(e.children[0], ":", e2, ...e.children.slice(3));
5010  } else {
5011    children.push(":void 0");
5012  }
5013  children.push(closeParen);
5014  return makeNode({
5015    type: "IfExpression",
5016    children
5017  });
5018}
5019function expressionizeTypeIf([ws, ifOp, condition, t, e]) {
5020  const children = [
5021    ws,
5022    "(",
5023    insertTrimmingSpace(condition, ""),
5024    "?"
5025  ];
5026  if (!xor(ifOp.negated, condition.negated)) {
5027    children.push(t);
5028    if (e) {
5029      children.push(e[0], ":", ...e.slice(2));
5030    } else {
5031      children.push(":never");
5032    }
5033  } else {
5034    if (e) {
5035      children.push(...e.slice(2), e[0], ":");
5036    } else {
5037      children.push("never:");
5038    }
5039    children.push(t);
5040  }
5041  children.push(")");
5042  return children;
5043}
5044function handleThisPrivateShorthands(value) {
5045  if (value.privateShorthand) {
5046    value = value.children[1].children[1];
5047    return [value, false];
5048  }
5049  if (value.type === "MemberExpression" || value.type === "CallExpression") {
5050    let suppressPrefix = value.thisShorthand;
5051    value = {
5052      ...value,
5053      children: value.children.map((c, i) => {
5054        if (i === 0) {
5055          let s;
5056          [c, s] = handleThisPrivateShorthands(c);
5057          suppressPrefix ||= s;
5058        }
5059        return c;
5060      })
5061    };
5062    return [value, suppressPrefix];
5063  }
5064  return [value, value.thisShorthand];
5065}
5066function processTryBlock($0) {
5067  let [t, , b, c, e, f] = $0;
5068  if (!c && (e || !f)) {
5069    const emptyCatchBlock = makeEmptyBlock();
5070    c = {
5071      type: "CatchClause",
5072      children: [" ", "catch(e) ", emptyCatchBlock],
5073      block: emptyCatchBlock
5074    };
5075  }
5076  let hoistDec;
5077  if (e) {
5078    c = c;
5079    const ok = makeRef("ok");
5080    hoistDec = {
5081      type: "Declaration",
5082      children: ["let ", ok, " = true"],
5083      names: []
5084    };
5085    replaceNode(
5086      c.block,
5087      blockWithPrefix([["", "ok = false"]], c.block),
5088      c
5089    );
5090    const condition = {
5091      type: "ParenthesizedExpression",
5092      children: ["(", ok, ")"],
5093      expression: ok
5094    };
5095    const i = makeNode({
5096      type: "IfStatement",
5097      children: ["if", condition, e.block],
5098      condition,
5099      then: e.block,
5100      else: void 0
5101    });
5102    if (!f) {
5103      const emptyFinallyBlock = makeEmptyBlock();
5104      f = {
5105        type: "FinallyClause",
5106        children: [" ", "finally ", emptyFinallyBlock],
5107        block: emptyFinallyBlock
5108      };
5109    }
5110    replaceNode(
5111      f.block,
5112      blockWithPrefix([["", i]], f.block),
5113      f
5114    );
5115  }
5116  const blocks = [b];
5117  if (c) {
5118    blocks.push(c.block);
5119  }
5120  return {
5121    type: "TryStatement",
5122    blocks,
5123    children: [t, b, c, f],
5124    hoistDec
5125  };
5126}
5127function processCallMemberExpression(node) {
5128  const { children } = node;
5129  if (Array.isArray(children) && children.length >= 2 && typeof children[0] === "object" && children[0] != null && "parenthesizedOp" in children[0] && typeof children[0].parenthesizedOp === "object" && children[0].parenthesizedOp != null && "token" in children[0].parenthesizedOp && typeof children[1] === "object" && children[1] != null && "type" in children[1] && children[1].type === "Call") {
5130    const op = children[0].parenthesizedOp;
5131    let call = children[1];
5132    const args = [...call.args];
5133    call = {
5134      ...call,
5135      args,
5136      children: call.children.map((x) => x === call.args ? args : x)
5137    };
5138    if (isComma(args[args.length - 1])) {
5139      args[args.length - 1] = deepCopy(args[args.length - 1]);
5140      isComma(args[args.length - 1]).token = "";
5141    }
5142    let commaCount = 0;
5143    for (let i2 = 0, len1 = args.length; i2 < len1; i2++) {
5144      const i = i2;
5145      let arg = args[i2];
5146      if (isComma(arg)) {
5147        arg = args[i] = deepCopy(arg);
5148        isComma(arg).token = `)${op.token}(`;
5149        commaCount++;
5150      }
5151    }
5152    if (args.length) {
5153      children.splice(
5154        0,
5155        2,
5156        commaCount ? {
5157          type: "ParenthesizedExpression",
5158          children: ["(", ...call.children, ")"]
5159        } : { ...call, type: "ParenthesizedExpression" }
5160      );
5161    }
5162  }
5163  for (let i = 0; i < children.length; i++) {
5164    const glob = children[i];
5165    if (glob?.type === "PropertyGlob") {
5166      let prefix = children.slice(0, i);
5167      const parts = [];
5168      let hoistDec, refAssignmentComma;
5169      if (prefix.length > 1) {
5170        const ref = makeRef();
5171        ({ hoistDec, refAssignmentComma } = makeRefAssignment(ref, prefix));
5172        prefix = [ref];
5173      }
5174      prefix = prefix.concat(glob.dot);
5175      for (const part of glob.object.properties) {
5176        if (part.type === "Error") {
5177          parts.push(part);
5178          continue;
5179        }
5180        if (part.type === "MethodDefinition") {
5181          parts.push({
5182            type: "Error",
5183            message: "Glob pattern cannot have method definition"
5184          });
5185          continue;
5186        }
5187        if (part.value && !["CallExpression", "MemberExpression", "Identifier"].includes(part.value.type)) {
5188          parts.push({
5189            type: "Error",
5190            message: `Glob pattern must have call or member expression value, found ${JSON.stringify(part.value)}`
5191          });
5192          continue;
5193        }
5194        let suppressPrefix = false;
5195        let name = part.name;
5196        let value = part.value ?? name;
5197        const wValue = getTrimmingSpace(part.value);
5198        [value, suppressPrefix] = handleThisPrivateShorthands(value);
5199        if (glob.reversed) {
5200          [name, value] = [value, name];
5201        }
5202        if (!suppressPrefix) {
5203          value = prefix.concat(insertTrimmingSpace(value, ""));
5204        }
5205        if (wValue)
5206          value.unshift(wValue);
5207        if (part.type === "SpreadProperty") {
5208          parts.push({
5209            type: part.type,
5210            value,
5211            dots: part.dots,
5212            delim: part.delim,
5213            names: part.names,
5214            children: part.children.slice(0, 2).concat(value, part.delim)
5215          });
5216        } else {
5217          parts.push({
5218            type: part.type === "Identifier" ? "Property" : part.type,
5219            name,
5220            value,
5221            delim: part.delim,
5222            names: part.names,
5223            children: [
5224              isWhitespaceOrEmpty(part.children[0]) && part.children[0],
5225              name,
5226              isWhitespaceOrEmpty(part.children[2]) && part.children[2],
5227              part.children[3]?.token === ":" ? part.children[3] : ":",
5228              value,
5229              part.delim
5230              // comma delimiter
5231            ]
5232          });
5233        }
5234      }
5235      let ref1;
5236      let object = {
5237        type: "ObjectExpression",
5238        children: [
5239          glob.object.children[0],
5240          // {
5241          ...parts,
5242          (ref1 = glob.object.children)[ref1.length - 1]
5243          // whitespace and }
5244        ],
5245        properties: parts,
5246        hoistDec
5247      };
5248      if (refAssignmentComma) {
5249        object = {
5250          type: "ParenthesizedExpression",
5251          children: ["(", ...refAssignmentComma, object, ")"],
5252          expression: object
5253        };
5254      }
5255      if (i === children.length - 1)
5256        return object;
5257      return processCallMemberExpression({
5258        // in case there are more
5259        ...node,
5260        children: [object, ...children.slice(i + 1)]
5261      });
5262    } else if (glob?.type === "PropertyBind") {
5263      const prefix = children.slice(0, i);
5264      return processCallMemberExpression({
5265        // in case there are more
5266        ...node,
5267        children: [
5268          prefix,
5269          {
5270            ...glob,
5271            type: "PropertyAccess",
5272            children: [
5273              ...glob.children,
5274              ".bind(",
5275              prefix,
5276              ...glob.args.length > 0 ? [", "] : [],
5277              ...glob.args,
5278              ")"
5279            ]
5280          },
5281          ...children.slice(i + 1)
5282        ]
5283      });
5284    }
5285  }
5286  return node;
5287}
5288function replaceNode(node, newNode, parent) {
5289  parent ??= node.parent;
5290  if (!(parent != null)) {
5291    throw new Error("replaceNode failed: node has no parent");
5292  }
5293  function recurse(children) {
5294    for (let i3 = 0, len22 = children.length; i3 < len22; i3++) {
5295      const i = i3;
5296      const child = children[i3];
5297      if (child === node) {
5298        children[i] = newNode;
5299        return true;
5300      } else if (Array.isArray(child)) {
5301        if (recurse(child)) {
5302          return true;
5303        }
5304      }
5305    }
5306    return false;
5307  }
5308  if (!recurse(parent.children)) {
5309    throw new Error("replaceNode failed: didn't find child node in parent");
5310  }
5311  for (const key in parent) {
5312    const value = parent[key];
5313    if (value === node) {
5314      parent[key] = newNode;
5315    }
5316  }
5317  if (isASTNodeObject(newNode)) {
5318    newNode.parent = parent;
5319  }
5320}
5321function makeExpressionStatement(expression) {
5322  if (Array.isArray(expression) && expression[1]?.[0]?.[0]?.[1]?.token === ",") {
5323    return [
5324      makeExpressionStatement(expression[0]),
5325      expression[1].map(([comma, exp]) => {
5326        return [comma, makeExpressionStatement(exp)];
5327      })
5328    ];
5329  } else if (expression?.type === "ObjectExpression" || expression?.type === "FunctionExpression" && !expression.id) {
5330    return makeLeftHandSideExpression(expression);
5331  } else {
5332    return expression;
5333  }
5334}
5335function lastAccessInCallExpression(exp) {
5336  if (exp.type === "Identifier") {
5337    return exp;
5338  }
5339  let children, i;
5340  do {
5341    if (!(exp.children != null)) {
5342      return;
5343    }
5344    ;
5345    ({ children } = exp);
5346    i = children.length - 1;
5347    while (i >= 0 && (children[i].type === "Call" || children[i].type === "NonNullAssertion" || children[i].type === "Optional"))
5348      i--;
5349    if (i < 0)
5350      return;
5351  } while (children[i].type === "MemberExpression" && (exp = children[i]));
5352  return children[i];
5353}
5354function convertMethodToFunction(method) {
5355  const { signature, block } = method;
5356  let { modifier, optional } = signature;
5357  if (optional)
5358    return;
5359  if (modifier) {
5360    if (modifier.get || modifier.set) {
5361      return;
5362    } else if (modifier.async) {
5363      modifier = [modifier.children[0][0], " function ", ...modifier.children.slice(1)];
5364    } else {
5365      modifier = ["function ", ...modifier.children || []];
5366    }
5367  } else {
5368    modifier = "function ";
5369  }
5370  return {
5371    ...signature,
5372    id: signature.name,
5373    signature,
5374    type: "FunctionExpression",
5375    children: [
5376      [modifier, ...signature.children.slice(1)],
5377      block
5378    ],
5379    block
5380  };
5381}
5382function convertNamedImportsToObject(node, pattern) {
5383  const properties = node.specifiers.map((specifier) => {
5384    if (specifier.ts) {
5385      return { type: "Error", message: "cannot use `type` in dynamic import" };
5386    } else {
5387      const { source, binding } = specifier;
5388      let ref2;
5389      const delim = (ref2 = specifier.children)[ref2.length - 1];
5390      return {
5391        type: pattern ? "BindingProperty" : "Property",
5392        name: source,
5393        value: !(source === binding) ? binding : void 0,
5394        delim,
5395        children: source === binding ? [source, delim] : [source, ":", binding, delim]
5396      };
5397    }
5398  });
5399  let ref3;
5400  return {
5401    type: pattern ? "ObjectBindingPattern" : "ObjectExpression",
5402    names: node.names,
5403    properties,
5404    children: [
5405      node.children[0],
5406      // {
5407      properties,
5408      (ref3 = node.children)[ref3.length - 1]
5409      // }
5410    ]
5411  };
5412}
5413function convertObjectToJSXAttributes(obj) {
5414  const { properties } = obj;
5415  const parts = [];
5416  const rest = [];
5417  for (let i = 0; i < properties.length; i++) {
5418    if (i > 0)
5419      parts.push(" ");
5420    const part = properties[i];
5421    switch (part.type) {
5422      case "Identifier":
5423        parts.push([part.name, "={", part.name, "}"]);
5424        break;
5425      case "Property":
5426        if (part.name.type === "ComputedPropertyName") {
5427          rest.push(part);
5428        } else {
5429          parts.push([part.name, "={", insertTrimmingSpace(part.value, ""), "}"]);
5430        }
5431        break;
5432      case "SpreadProperty":
5433        parts.push(["{", part.dots, part.value, "}"]);
5434        break;
5435      case "MethodDefinition":
5436        const func = convertMethodToFunction(part);
5437        if (func) {
5438          parts.push([part.name, "={", convertMethodToFunction(part), "}"]);
5439        } else {
5440          rest.push(part);
5441        }
5442        break;
5443      default:
5444        throw new Error(`invalid object literal type in JSX attribute: ${part.type}`);
5445    }
5446  }
5447  if (rest.length) {
5448    parts.push(["{...{", ...rest, "}}"]);
5449  }
5450  return parts;
5451}
5452function makeGetterMethod(name, ws, value, returnType, block, kind = { token: "get" }, autoReturn = true) {
5453  const { token } = kind;
5454  ws = insertTrimmingSpace(ws, "");
5455  let setVal;
5456  const parameters = token === "get" ? {
5457    type: "Parameters",
5458    children: ["()"],
5459    names: [],
5460    implicit: true
5461  } : {
5462    type: "Parameters",
5463    children: ["(", setVal = makeRef("value"), ")"],
5464    names: [],
5465    implicit: false
5466  };
5467  let expressions;
5468  if (block) {
5469    block = duplicateBlock(block);
5470    expressions = block.expressions;
5471  } else {
5472    expressions = [];
5473    block = {
5474      type: "BlockStatement",
5475      expressions,
5476      children: ["{ ", expressions, " }"]
5477    };
5478  }
5479  if (autoReturn) {
5480    const finalStatement = token === "get" ? [[expressions[0]?.[0] || "", ws], wrapWithReturn(value)] : [[expressions[0]?.[0] || "", ws], [value, " = ", setVal]];
5481    expressions.push(finalStatement);
5482  }
5483  const children = [kind, " ", name, parameters, returnType, block];
5484  return {
5485    type: "MethodDefinition",
5486    children,
5487    name,
5488    signature: {
5489      type: "MethodSignature",
5490      modifier: {
5491        get: token === "get",
5492        set: token === "set",
5493        async: false
5494      },
5495      name,
5496      returnType
5497    },
5498    block,
5499    parameters
5500  };
5501}
5502function processBindingPatternLHS(lhs, tail) {
5503  adjustAtBindings(lhs, true);
5504  const [splices, thisAssignments] = gatherBindingCode(lhs);
5505  tail.push(...splices.map((s) => [", ", s]), ...thisAssignments.map((a) => [", ", a]));
5506}
5507function processAssignments(statements) {
5508  gatherRecursiveAll(statements, (n) => n.type === "AssignmentExpression" || n.type === "UpdateExpression").forEach((exp) => {
5509    function extractAssignment(lhs) {
5510      let expr = lhs;
5511      while (expr.type === "ParenthesizedExpression") {
5512        expr = expr.expression;
5513      }
5514      let m;
5515      if (m = expr.type, m === "AssignmentExpression" || m === "UpdateExpression") {
5516        if (expr.type === "UpdateExpression" && expr.children[0] === expr.assigned) {
5517          pre.push("(");
5518          post.push([", ", lhs, ")"]);
5519        } else {
5520          pre.push(["(", lhs, ", "]);
5521          post.push(")");
5522        }
5523        return expr.assigned;
5524      }
5525      ;
5526      return;
5527    }
5528    const pre = [], post = [];
5529    let ref4;
5530    switch (exp.type) {
5531      case "AssignmentExpression": {
5532        if (!exp.lhs)
5533          return;
5534        exp.lhs.forEach((lhsPart, i) => {
5535          let ref5;
5536          if (ref5 = extractAssignment(lhsPart[1])) {
5537            const newLhs = ref5;
5538            return lhsPart[1] = newLhs;
5539          }
5540          ;
5541          return;
5542        });
5543        break;
5544      }
5545      case "UpdateExpression": {
5546        if (ref4 = extractAssignment(exp.assigned)) {
5547          const newLhs = ref4;
5548          const i = exp.children.indexOf(exp.assigned);
5549          exp.assigned = exp.children[i] = newLhs;
5550        }
5551        ;
5552        break;
5553      }
5554    }
5555    if (pre.length)
5556      exp.children.unshift(...pre);
5557    if (post.length)
5558      exp.children.push(...post);
5559    if (exp.type === "UpdateExpression") {
5560      const { assigned } = exp;
5561      const ref = makeRef();
5562      const newMemberExp = unchainOptionalMemberExpression(assigned, ref, (children) => {
5563        return exp.children.map(($) => $ === assigned ? children : $);
5564      });
5565      if (newMemberExp !== assigned) {
5566        if (newMemberExp.usesRef) {
5567          newMemberExp.hoistDec = {
5568            type: "Declaration",
5569            children: ["let ", ref],
5570            names: []
5571          };
5572        }
5573        return replaceNode(exp, newMemberExp);
5574      }
5575      ;
5576      return;
5577    }
5578    ;
5579    return;
5580  });
5581  replaceNodesRecursive(
5582    statements,
5583    (n) => n.type === "AssignmentExpression" && n.names === null,
5584    (exp) => {
5585      let { lhs: $1, expression: $2 } = exp, tail = [], len3 = $1.length;
5586      let block;
5587      let ref6;
5588      if (exp.parent?.type === "BlockStatement" && !(ref6 = $1[$1.length - 1])?.[ref6.length - 1]?.special) {
5589        block = makeBlockFragment();
5590        let ref7;
5591        if (ref7 = prependStatementExpressionBlock(
5592          { type: "Initializer", expression: $2, children: [void 0, void 0, $2] },
5593          block
5594        )) {
5595          const ref = ref7;
5596          exp.children = exp.children.map(($3) => $3 === $2 ? ref : $3);
5597          $2 = ref;
5598        } else {
5599          block = void 0;
5600        }
5601      }
5602      let ref8;
5603      if ($1.some(($4) => (ref8 = $4)[ref8.length - 1].special)) {
5604        if ($1.length !== 1)
5605          throw new Error("Only one assignment with id= is allowed");
5606        const [, lhs, , op] = $1[0];
5607        const { call, omitLhs } = op;
5608        const index = exp.children.indexOf($2);
5609        if (index < 0)
5610          throw new Error("Assertion error: exp not in AssignmentExpression");
5611        exp.children.splice(
5612          index,
5613          1,
5614          exp.expression = $2 = [call, "(", lhs, ", ", $2, ")"]
5615        );
5616        if (omitLhs) {
5617          return $2;
5618        }
5619      }
5620      let wrapped = false;
5621      let i = 0;
5622      while (i < len3) {
5623        const lastAssignment = $1[i++];
5624        const [, lhs, , op] = lastAssignment;
5625        if (!(op.token === "=")) {
5626          continue;
5627        }
5628        let m1;
5629        if (m1 = lhs.type, m1 === "ObjectExpression" || m1 === "ObjectBindingPattern") {
5630          if (!wrapped) {
5631            wrapped = true;
5632            lhs.children.splice(0, 0, "(");
5633            tail.push(")");
5634          }
5635        }
5636      }
5637      const refsToDeclare = /* @__PURE__ */ new Set();
5638      i = len3 - 1;
5639      while (i >= 0) {
5640        const lastAssignment = $1[i];
5641        if (lastAssignment[3].token === "=") {
5642          const lhs = lastAssignment[1];
5643          let m2;
5644          if (lhs.type === "MemberExpression") {
5645            const members = lhs.children;
5646            const lastMember = members[members.length - 1];
5647            if (lastMember.type === "SliceExpression") {
5648              const { start, end, children: c } = lastMember;
5649              c[0].token = ".splice(";
5650              c[1] = start;
5651              c[2] = ", ";
5652              if (end) {
5653                c[3] = [end, " - ", start];
5654              } else {
5655                c[3] = ["1/0"];
5656              }
5657              c[4] = [", ...", $2];
5658              c[5] = ")";
5659              lastAssignment.pop();
5660              if (isWhitespaceOrEmpty(lastAssignment[2]))
5661                lastAssignment.pop();
5662              if ($1.length > 1) {
5663                throw new Error("Not implemented yet! TODO: Handle multiple splice assignments");
5664              }
5665              exp.children = [$1];
5666              exp.names = [];
5667              break;
5668            }
5669          } else if (m2 = lhs.type, m2 === "ObjectBindingPattern" || m2 === "ArrayBindingPattern") {
5670            processBindingPatternLHS(lhs, tail);
5671            gatherRecursiveAll(lhs, ($5) => $5.type === "Ref").forEach(refsToDeclare.add.bind(refsToDeclare));
5672          }
5673        }
5674        i--;
5675      }
5676      i = len3 - 1;
5677      const optionalChainRef = makeRef();
5678      while (i >= 0) {
5679        const assignment = $1[i];
5680        const [ws1, lhs, ws2, op] = assignment;
5681        if (lhs.type === "MemberExpression" || lhs.type === "CallExpression") {
5682          const newMemberExp = unchainOptionalMemberExpression(lhs, optionalChainRef, (children) => {
5683            const assigns = $1.splice(i + 1, len3 - 1 - i);
5684            $1.pop();
5685            return [ws1, ...children, ws2, op, ...assigns, $2];
5686          });
5687          if (newMemberExp !== lhs) {
5688            if (newMemberExp.usesRef) {
5689              exp.hoistDec = {
5690                type: "Declaration",
5691                children: ["let ", optionalChainRef],
5692                names: []
5693              };
5694            }
5695            replaceNode($2, newMemberExp);
5696            newMemberExp.parent = exp;
5697            $2 = newMemberExp;
5698          }
5699        }
5700        i--;
5701      }
5702      if (refsToDeclare.size) {
5703        if (exp.hoistDec) {
5704          exp.hoistDec.children.push([...refsToDeclare].map(($6) => [",", $6]));
5705        } else {
5706          exp.hoistDec = {
5707            type: "Declaration",
5708            children: ["let ", [...refsToDeclare].map((r, i2) => i2 ? [",", r] : r)],
5709            names: []
5710          };
5711        }
5712      }
5713      exp.names = $1.flatMap(([, l]) => l.names || []);
5714      if (tail.length) {
5715        const index = exp.children.indexOf($2);
5716        if (index < 0)
5717          throw new Error("Assertion error: exp not in AssignmentExpression");
5718        exp.children.splice(index + 1, 0, ...tail);
5719      }
5720      if (block) {
5721        block.parent = exp.parent;
5722        block.expressions.push(["", exp]);
5723        exp.parent = block;
5724        return block;
5725      }
5726      return exp;
5727    }
5728  );
5729}
5730function unchainOptionalMemberExpression(exp, ref, innerExp) {
5731  let j = 0;
5732  const { children } = exp;
5733  let usesRef = false;
5734  const conditions = [];
5735  while (j < children.length) {
5736    const child = children[j];
5737    const type = child?.type;
5738    let hasOptional = false;
5739    switch (type) {
5740      case "PropertyAccess": {
5741        if (child.dot?.optional) {
5742          hasOptional = true;
5743          child.dot.children.shift();
5744          child.dot.optional = false;
5745        }
5746        ;
5747        break;
5748      }
5749      case "Call":
5750      case "Index": {
5751        if (child.optional) {
5752          hasOptional = true;
5753          child.children.shift();
5754          child.optional = void 0;
5755        }
5756        ;
5757        break;
5758      }
5759    }
5760    if (hasOptional) {
5761      let base;
5762      if (j > 1 || needsRef(children[0])) {
5763        usesRef = true;
5764        base = makeLeftHandSideExpression({
5765          type: "AssignmentExpression",
5766          children: [ref, " = ", children.splice(0, j)]
5767        });
5768        base.parent = child;
5769        children.unshift(ref);
5770        j = 0;
5771      } else {
5772        base = children[0];
5773      }
5774      conditions.push([base, " != null"]);
5775    }
5776    j++;
5777  }
5778  let ref9;
5779  if (ref9 = conditions.length) {
5780    const l = ref9;
5781    const cs = flatJoin(conditions, " && ");
5782    return {
5783      ...exp,
5784      children: [...cs, " ? ", innerExp(children), " : void 0"],
5785      usesRef
5786    };
5787  } else {
5788    return exp;
5789  }
5790}
5791function attachPostfixStatementAsExpression(exp, post) {
5792  const postfixStatement = post[1];
5793  switch (postfixStatement.type) {
5794    case "ForStatement":
5795    case "IterationStatement":
5796    case "DoStatement": {
5797      const statement = addPostfixStatement(exp, ...post);
5798      return {
5799        type: "IterationExpression",
5800        children: [statement],
5801        block: statement.block,
5802        statement
5803      };
5804    }
5805    case "IfStatement": {
5806      return expressionizeIfStatement({ ...postfixStatement, then: exp });
5807    }
5808    default: {
5809      throw new Error("Unknown postfix statement");
5810    }
5811  }
5812}
5813function processTypes(node) {
5814  return gatherRecursiveAll(node, (n) => n.type === "UnaryType").forEach((unary) => {
5815    let last;
5816    let count = 0;
5817    let ref10;
5818    while (unary.suffix.length && (ref10 = unary.suffix)[ref10.length - 1]?.token === "?") {
5819      last = unary.suffix.pop();
5820      count++;
5821    }
5822    if (!count) {
5823      return;
5824    }
5825    if (unary.parent?.type === "TypeTuple") {
5826      if (count === 1) {
5827        unary.suffix.push(last);
5828        return;
5829      }
5830      replaceNode(unary, [
5831        getTrimmingSpace(unary),
5832        "(",
5833        parenthesizeType(insertTrimmingSpace(unary, "")),
5834        " | null)",
5835        last
5836      ]);
5837    } else {
5838      replaceNode(unary, [
5839        getTrimmingSpace(unary),
5840        "(",
5841        parenthesizeType(insertTrimmingSpace(unary, "")),
5842        count === 1 ? " | undefined" : " | undefined | null",
5843        ")"
5844      ]);
5845    }
5846  });
5847}
5848function processStatementExpressions(statements) {
5849  gatherRecursiveAll(statements, ($7) => $7.type === "StatementExpression").forEach((_exp) => {
5850    const exp = _exp;
5851    const { statement } = exp;
5852    let ref11;
5853    switch (statement.type) {
5854      case "IfStatement": {
5855        if (ref11 = expressionizeIfStatement(statement)) {
5856          const expression = ref11;
5857          return replaceNode(statement, expression, exp);
5858        } else {
5859          return replaceNode(statement, wrapIIFE([["", statement]]), exp);
5860        }
5861      }
5862      case "IterationExpression": {
5863        if (statement.subtype === "ComptimeStatement") {
5864          const { expressions } = statement.statement.block;
5865          const expression = wrapIIFE(expressions, hasAwait(expressions));
5866          return replaceNode(statement, makeNode({
5867            type: "ComptimeExpression",
5868            expression,
5869            children: [expression]
5870          }), exp);
5871        }
5872        ;
5873        return;
5874      }
5875      default: {
5876        return replaceNode(statement, wrapIIFE([["", statement]]), exp);
5877      }
5878    }
5879  });
5880}
5881function processNegativeIndexAccess(statements) {
5882  gatherRecursiveAll(statements, (n) => n.type === "NegativeIndex").forEach((exp) => {
5883    const { children } = exp.parent;
5884    let start = 0;
5885    while (start < children.length && isWhitespaceOrEmpty(children[start])) {
5886      start++;
5887    }
5888    const index = children.indexOf(exp);
5889    let ref, subexp;
5890    if (index === start + 1) {
5891      const child = children[start];
5892      ref = maybeRef(child);
5893      if (ref !== child) {
5894        subexp = children.splice(start, 1);
5895      }
5896    } else if (index > start + 1) {
5897      ref = makeRef();
5898      subexp = children.splice(start, index - start);
5899    } else {
5900      throw new Error("Invalid parse tree for negative index access");
5901    }
5902    if (subexp) {
5903      const { hoistDec, refAssignment } = makeRefAssignment(ref, subexp);
5904      exp.hoistDec = hoistDec;
5905      children.splice(start, 0, makeLeftHandSideExpression(refAssignment));
5906    }
5907    exp.len.children = [
5908      ref,
5909      ".length"
5910    ];
5911  });
5912}
5913function processProgram(root) {
5914  const state2 = getState();
5915  const config2 = getConfig();
5916  assert.equal(state2.forbidBracedApplication.length, 1, "forbidBracedApplication");
5917  assert.equal(state2.forbidClassImplicitCall.length, 1, "forbidClassImplicitCall");
5918  assert.equal(state2.forbidIndentedApplication.length, 1, "forbidIndentedApplication");
5919  assert.equal(state2.forbidNewlineBinaryOp.length, 1, "forbidNewlineBinaryOp");
5920  assert.equal(state2.forbidTrailingMemberProperty.length, 1, "forbidTrailingMemberProperty");
5921  assert.equal(state2.JSXTagStack.length, 1, "JSXTagStack");
5922  addParentPointers(root);
5923  const { expressions: statements } = root;
5924  processPlaceholders(statements);
5925  processNegativeIndexAccess(statements);
5926  processTypes(statements);
5927  processDeclarationConditions(statements);
5928  processPipelineExpressions(statements);
5929  processDeclarations(statements);
5930  processAssignments(statements);
5931  processStatementExpressions(statements);
5932  processPatternMatching(statements);
5933  gatherRecursiveAll(statements, (n) => n.type === "IterationExpression").forEach((e) => expressionizeIteration(e));
5934  hoistRefDecs(statements);
5935  processFunctions(statements, config2);
5936  statements.unshift(...state2.prelude);
5937  if (config2.autoLet) {
5938    createConstLetDecs(statements, [], "let");
5939  } else if (config2.autoConst) {
5940    createConstLetDecs(statements, [], "const");
5941  } else if (config2.autoVar) {
5942    createVarDecs(root, []);
5943  }
5944  processBlocks(statements);
5945  populateRefs(statements);
5946  adjustAtBindings(statements);
5947  if (getSync()) {
5948    processComptime(statements);
5949  }
5950}
5951async function processProgramAsync(root) {
5952  const { expressions: statements } = root;
5953  await processComptime(statements);
5954}
5955function populateRefs(statements) {
5956  const refNodes = gatherRecursive(statements, ({ type }) => type === "Ref");
5957  if (refNodes.length) {
5958    const ids = gatherRecursive(statements, (s) => s.type === "Identifier");
5959    const names = new Set(ids.flatMap(({ names: names2 }) => names2 || []));
5960    refNodes.forEach((ref) => {
5961      const { type, base } = ref;
5962      if (type !== "Ref")
5963        return;
5964      ref.type = "Identifier";
5965      let n = 0;
5966      let name = base;
5967      while (names.has(name)) {
5968        n++;
5969        name = `${base}${n}`;
5970      }
5971      names.add(name);
5972      return ref.children = ref.names = [name];
5973    });
5974  }
5975}
5976function processPlaceholders(statements) {
5977  const placeholderMap = /* @__PURE__ */ new Map();
5978  const liftedIfs = /* @__PURE__ */ new Set();
5979  gatherRecursiveAll(statements, ($8) => $8.type === "Placeholder").forEach((_exp) => {
5980    const exp = _exp;
5981    let ancestor;
5982    if (exp.subtype === ".") {
5983      ({ ancestor } = findAncestor(exp, ($9) => $9.type === "Call"));
5984      ancestor = ancestor?.parent;
5985      while (ancestor?.parent?.type === "UnaryExpression" || ancestor?.parent?.type === "NewExpression") {
5986        ancestor = ancestor.parent;
5987      }
5988      if (!ancestor) {
5989        replaceNode(exp, {
5990          type: "Error",
5991          message: "Partial placeholder . outside of call expression"
5992        });
5993        return;
5994      }
5995    } else {
5996      let child;
5997      ({ ancestor, child } = findAncestor(exp, (ancestor2, child2) => {
5998        const { type } = ancestor2;
5999        if (type === "IfStatement") {
6000          liftedIfs.add(ancestor2);
6001        }
6002        let m3;
6003        let m4;
6004        return type === "Call" || // Block, except for if/else blocks when condition already lifted
6005        type === "BlockStatement" && !((m3 = ancestor2.parent, typeof m3 === "object" && m3 != null && "type" in m3 && m3.type === "IfStatement") && liftedIfs.has(ancestor2.parent)) && !((m4 = ancestor2.parent, typeof m4 === "object" && m4 != null && "type" in m4 && m4.type === "ElseClause" && "parent" in m4 && typeof m4.parent === "object" && m4.parent != null && "type" in m4.parent && m4.parent.type === "IfStatement") && liftedIfs.has(ancestor2.parent.parent)) || type === "PipelineExpression" || // Declaration
6006        type === "Initializer" || // Right-hand side of assignment
6007        type === "AssignmentExpression" && findChildIndex(ancestor2, child2) === ancestor2.children.indexOf(ancestor2.expression) || type === "ReturnStatement" || type === "YieldExpression";
6008      }));
6009      switch (ancestor?.type) {
6010        case "Call": {
6011          const i = findChildIndex(ancestor.args, child);
6012          if (i >= 0) {
6013            ancestor.args[i] = maybeWrap(ancestor.args[i], ancestor);
6014            ancestor = ancestor.args[i];
6015          } else {
6016            ancestor = void 0;
6017          }
6018          ;
6019          break;
6020        }
6021        case "BlockStatement": {
6022          const i = findChildIndex(ancestor.expressions, child);
6023          if (i >= 0) {
6024            ancestor.expressions[i][1] = maybeWrap(ancestor.expressions[i][1], ancestor);
6025            ancestor = ancestor.expressions[i][1];
6026          } else {
6027            ancestor = void 0;
6028          }
6029          ;
6030          break;
6031        }
6032        case "PipelineExpression": {
6033          const i = findChildIndex(ancestor, child);
6034          if (i === 1) {
6035            ancestor = ancestor;
6036          } else if (i === 2) {
6037            const j = findChildIndex(ancestor.children[i], child);
6038            ancestor.children[i][j][3] = maybeWrap(ancestor.children[i][j][3], ancestor);
6039            ancestor = ancestor.children[i][j][3];
6040          } else {
6041            ancestor = void 0;
6042          }
6043          ;
6044          break;
6045        }
6046        case "AssignmentExpression":
6047        case "Initializer":
6048        case "ReturnStatement":
6049        case "YieldExpression": {
6050          const i = findChildIndex(ancestor, child);
6051          if (i >= 0 && ancestor.expression === ancestor.children[i]) {
6052            ancestor.expression = ancestor.children[i] = maybeWrap(ancestor.expression, ancestor);
6053            ancestor = ancestor.expression;
6054          } else {
6055            ancestor = void 0;
6056          }
6057          ;
6058          break;
6059        }
6060      }
6061      if (!ancestor) {
6062        replaceNode(exp, {
6063          type: "Error",
6064          message: "Ampersand placeholder & outside of block"
6065        });
6066      }
6067    }
6068    if (ancestor != null) {
6069      if (placeholderMap.has(ancestor)) {
6070        return placeholderMap.get(ancestor).push(exp);
6071      } else {
6072        return placeholderMap.set(ancestor, [exp]);
6073      }
6074    }
6075    ;
6076    return;
6077  });
6078  for (const [ancestor, placeholders] of placeholderMap) {
6079    let ref = makeRef("$");
6080    let typeSuffix;
6081    for (let i4 = 0, len3 = placeholders.length; i4 < len3; i4++) {
6082      const placeholder = placeholders[i4];
6083      typeSuffix ??= placeholder.typeSuffix;
6084      let ref12;
6085      replaceNode((ref12 = placeholder.children)[ref12.length - 1], ref);
6086    }
6087    const { parent } = ancestor;
6088    const body = maybeUnwrap(ancestor);
6089    let fnExp = makeAmpersandFunction({ ref, typeSuffix, body });
6090    let outer;
6091    switch (parent?.type) {
6092      case "Call": {
6093        outer = ancestor === parent.args[findChildIndex(parent.args, ancestor)];
6094        break;
6095      }
6096      case "BlockStatement": {
6097        outer = ancestor === parent.expressions[findChildIndex(parent.expressions, ancestor)][1];
6098        break;
6099      }
6100      case "PipelineExpression": {
6101        outer = ancestor === parent.children[2][findChildIndex(parent.children[2], ancestor)][3];
6102        break;
6103      }
6104      case "AssignmentExpression":
6105      case "Initializer":
6106      case "ReturnStatement":
6107      case "YieldExpression": {
6108        outer = ancestor === parent.expression;
6109        break;
6110      }
6111    }
6112    if (!outer) {
6113      fnExp = makeLeftHandSideExpression(fnExp);
6114    }
6115    replaceNode(ancestor, fnExp, parent);
6116    let ref13;
6117    if (ref13 = getTrimmingSpace(body)) {
6118      const ws = ref13;
6119      inplaceInsertTrimmingSpace(body, "");
6120      inplacePrepend(ws, fnExp);
6121    }
6122  }
6123  return;
6124}
6125function reorderBindingRestProperty(props) {
6126  const names = props.flatMap((p) => p.names);
6127  let restIndex = -1;
6128  let restCount = 0;
6129  props.forEach(({ type }, i) => {
6130    if (type === "BindingRestProperty") {
6131      if (restIndex < 0)
6132        restIndex = i;
6133      return restCount++;
6134    }
6135    ;
6136    return;
6137  });
6138  if (restCount === 0) {
6139    return {
6140      children: props,
6141      names
6142    };
6143  }
6144  let after = props.slice(restIndex + 1);
6145  let rest = props[restIndex];
6146  props = props.slice(0, restIndex);
6147  if (after.length) {
6148    const { delim: restDelim } = rest, lastAfterProp = after[after.length - 1], { delim: lastDelim, children: lastAfterChildren } = lastAfterProp;
6149    rest = {
6150      ...rest,
6151      delim: lastDelim,
6152      children: [...rest.children.slice(0, -1), lastDelim]
6153    };
6154    after = [
6155      ...after.slice(0, -1),
6156      {
6157        ...lastAfterProp,
6158        delim: restDelim,
6159        children: [...lastAfterChildren.slice(0, -1), restDelim]
6160      }
6161    ];
6162  }
6163  let ref14;
6164  if (Array.isArray(rest.delim) && (ref14 = rest.delim)[ref14.length - 1]?.token === ",") {
6165    rest.delim = rest.delim.slice(0, -1);
6166    rest.children = [...rest.children.slice(0, -1), rest.delim];
6167  }
6168  const children = [...props, ...after, rest];
6169  if (restCount > 1) {
6170    children.push({
6171      type: "Error",
6172      message: "Multiple rest properties in object pattern"
6173    });
6174  }
6175  return { children, names };
6176}
6177function replaceNodes(root, predicate, replacer) {
6178  if (!(root != null)) {
6179    return root;
6180  }
6181  const array = Array.isArray(root) ? root : root.children;
6182  if (!array) {
6183    if (predicate(root)) {
6184      return replacer(root, root);
6185    } else {
6186      return root;
6187    }
6188  }
6189  for (let i5 = 0, len4 = array.length; i5 < len4; i5++) {
6190    const i = i5;
6191    const node = array[i5];
6192    if (!(node != null)) {
6193      return;
6194    }
6195    if (predicate(node)) {
6196      array[i] = replacer(node, root);
6197    } else {
6198      replaceNodes(node, predicate, replacer);
6199    }
6200  }
6201  return root;
6202}
6203function replaceNodesRecursive(root, predicate, replacer) {
6204  if (!(root != null)) {
6205    return root;
6206  }
6207  const array = Array.isArray(root) ? root : root.children;
6208  if (!array) {
6209    if (predicate(root)) {
6210      return replacer(root, root);
6211    } else {
6212      return root;
6213    }
6214  }
6215  for (let i6 = 0, len5 = array.length; i6 < len5; i6++) {
6216    const i = i6;
6217    const node = array[i6];
6218    if (!(node != null)) {
6219      continue;
6220    }
6221    if (predicate(node)) {
6222      const ret = replacer(node, root);
6223      replaceNodesRecursive(ret, predicate, replacer);
6224      array[i] = ret;
6225    } else {
6226      replaceNodesRecursive(node, predicate, replacer);
6227    }
6228  }
6229  return root;
6230}
6231function typeOfJSX(node, config2) {
6232  switch (node.type) {
6233    case "JSXElement":
6234      return typeOfJSXElement(node, config2);
6235    case "JSXFragment":
6236      return typeOfJSXFragment(node, config2);
6237  }
6238}
6239function typeOfJSXElement(node, config2) {
6240  if (config2.solid) {
6241    if (config2.server && !config2.client) {
6242      return ["string"];
6243    }
6244    let { tag } = node;
6245    const clientType = tag[0] === tag[0].toLowerCase() ? [getHelperRef("IntrinsicElements"), '<"', tag, '">'] : ["ReturnType<typeof ", tag, ">"];
6246    if (config2.server) {
6247      return ["string", " | ", clientType];
6248    } else {
6249      return clientType;
6250    }
6251  }
6252  ;
6253  return;
6254}
6255function typeOfJSXFragment(node, config2) {
6256  if (config2.solid) {
6257    let type = [];
6258    let lastType;
6259    for (let child of node.jsxChildren) {
6260      switch (child.type) {
6261        case "JSXText":
6262          if (lastType !== "JSXText") {
6263            type.push("string");
6264          }
6265          break;
6266        case "JSXElement":
6267          type.push(typeOfJSXElement(child, config2));
6268          break;
6269        case "JSXFragment":
6270          type.push(...typeOfJSXFragment(child, config2));
6271          break;
6272        case "JSXChildExpression":
6273          if (child.expression) {
6274            type.push(["typeof ", child.expression]);
6275          }
6276          break;
6277        default:
6278          throw new Error(`unknown child in JSXFragment: ${JSON.stringify(child)}`);
6279      }
6280      lastType = child.type;
6281    }
6282    if (type.length === 1) {
6283      return type[0];
6284    } else {
6285      type = type.flatMap((t) => [t, ", "]);
6286      type.pop();
6287      return ["[", type, "]"];
6288    }
6289  }
6290  ;
6291  return;
6292}
6293
6294// source/parser.hera
6295var grammar = {
6296  Program,
6297  TopLevelStatements,
6298  NestedTopLevelStatements,
6299  TopLevelSingleLineStatements,
6300  TopLevelStatement,
6301  ExtendedCommaExpression,
6302  ExtendedExpression,
6303  SingleLineExtendedExpression,
6304  NonPipelineExtendedExpression,
6305  NonAssignmentExtendedExpression,
6306  NestedNonAssignmentExtendedExpression,
6307  ExpressionizedStatementWithTrailingCallExpressions,
6308  ExpressionizedStatement,
6309  StatementExpression,
6310  CommaExpression,
6311  Arguments,
6312  ImplicitArguments,
6313  ExplicitArguments,
6314  ApplicationStart,
6315  ForbiddenImplicitCalls,
6316  ReservedBinary,
6317  ArgumentsWithTrailingMemberExpressions,
6318  TrailingMemberExpressions,
6319  AllowedTrailingMemberExpressions,
6320  TrailingCallExpressions,
6321  AllowedTrailingCallExpressions,
6322  CommaDelimiter,
6323  ArgumentList,
6324  NonPipelineArgumentList,
6325  NestedArgumentList,
6326  NestedArgument,
6327  SingleLineArgumentExpressions,
6328  ArgumentPart,
6329  NonPipelineArgumentPart,
6330  BinaryOpExpression,
6331  BinaryOpRHS,
6332  IsLike,
6333  WRHS,
6334  SingleLineBinaryOpRHS,
6335  RHS,
6336  UnaryExpression,
6337  UnaryWithoutParenthesizedAssignment,
6338  UnaryBody,
6339  UnaryWithoutParenthesizedAssignmentBody,
6340  ParenthesizedAssignment,
6341  UnaryPostfix,
6342  TypePostfix,
6343  Tuple,
6344  NWTypePostfix,
6345  UpdateExpression,
6346  UpdateExpressionSymbol,
6347  AssignmentExpression,
6348  NonPipelineAssignmentExpression,
6349  SingleLineAssignmentExpression,
6350  NonPipelineSingleLineAssignmentExpression,
6351  AssignmentExpressionTail,
6352  NonPipelineAssignmentExpressionTail,
6353  ActualAssignment,
6354  NonPipelineActualAssignment,
6355  YieldExpression,
6356  ArrowFunction,
6357  FatArrow,
6358  FatArrowToken,
6359  TrailingDeclaration,
6360  TrailingPipe,
6361  FatArrowBody,
6362  ConditionalExpression,
6363  TernaryRest,
6364  NestedTernaryRest,
6365  ShortCircuitExpression,
6366  PipelineExpression,
6367  PipelineHeadItem,
6368  PipelineTailItem,
6369  PrimaryExpression,
6370  ParenthesizedExpression,
6371  Placeholder,
6372  PlaceholderTypeSuffix,
6373  ClassDeclaration,
6374  ClassExpression,
6375  ClassBinding,
6376  ClassHeritage,
6377  ExtendsClause,
6378  WithClause,
6379  ExtendsToken,
6380  ExtendsShorthand,
6381  NotExtendsToken,
6382  OmittedNegation,
6383  ExtendsTarget,
6384  ImplementsClause,
6385  ImplementsToken,
6386  ImplementsShorthand,
6387  ImplementsTarget,
6388  ClassBody,
6389  NestedClassElements,
6390  NestedClassElement,
6391  ClassElement,
6392  ClassElementDefinition,
6393  ClassSignature,
6394  ClassSignatureBody,
6395  NestedClassSignatureElements,
6396  NestedClassSignatureElement,
6397  ClassSignatureElement,
6398  AccessModifier,
6399  FieldDefinition,
6400  ThisLiteral,
6401  HashThis,
6402  LengthShorthand,
6403  AtThis,
6404  LeftHandSideExpression,
6405  CallExpression,
6406  CallExpressionRest,
6407  OptionalShorthand,
6408  OptionalDot,
6409  NonNullAssertion,
6410  MemberExpression,
6411  ActualMemberExpression,
6412  MemberBase,
6413  MemberExpressionRest,
6414  MemberExpressionRestBody,
6415  MemberBracketContent,
6416  SliceParameters,
6417  AccessStart,
6418  ImplicitAccessStart,
6419  PropertyAccessModifier,
6420  PropertyAccess,
6421  PropertyGlob,
6422  PropertyBind,
6423  SuperProperty,
6424  MetaProperty,
6425  ReturnValue,
6426  AfterReturnShorthand,
6427  Parameters,
6428  ShortArrowParameters,
6429  ArrowParameters,
6430  NonEmptyParameters,
6431  ParameterList,
6432  NestedParameterList,
6433  NestedParameter,
6434  Parameter,
6435  FunctionRestParameter,
6436  ParameterElement,
6437  ParameterElementDelimiter,
6438  BindingIdentifier,
6439  NWBindingIdentifier,
6440  AtIdentifierRef,
6441  PinPattern,
6442  BindingPattern,
6443  ObjectBindingPattern,
6444  ObjectBindingPatternContent,
6445  BindingPropertyList,
6446  ArrayBindingPattern,
6447  ArrayBindingPatternContent,
6448  BindingElementList,
6449  NestedBindingElementList,
6450  Elision,
6451  NestedBindingProperties,
6452  NestedBindingPropertyList,
6453  BindingProperty,
6454  BindingRestProperty,
6455  NestedBindingElements,
6456  BindingElement,
6457  BindingRestElement,
6458  EmptyBindingPattern,
6459  FunctionDeclaration,
6460  FunctionSignature,
6461  FunctionExpression,
6462  OperatorDeclaration,
6463  OperatorSignature,
6464  OperatorBehavior,
6465  OperatorPrecedence,
6466  OperatorAssociativity,
6467  ThinArrowFunction,
6468  Arrow,
6469  ExplicitBlock,
6470  ImplicitNestedBlock,
6471  Block,
6472  BareNestedBlock,
6473  BareBlock,
6474  ThenClause,
6475  BracedThenClause,
6476  BracedOrEmptyBlock,
6477  NoCommaBracedOrEmptyBlock,
6478  NoPostfixBracedOrEmptyBlock,
6479  EmptyBlock,
6480  BlockOrEmptyStatement,
6481  BlockOrEmpty,
6482  EmptyStatementBareBlock,
6483  EmptyBareBlock,
6484  NoBlock,
6485  BracedBlock,
6486  NoPostfixBracedBlock,
6487  NoCommaBracedBlock,
6488  NonSingleBracedBlock,
6489  DeclarationOrStatement,
6490  SingleLineStatements,
6491  PostfixedSingleLineStatements,
6492  PostfixedSingleLineNoCommaStatements,
6493  BracedContent,
6494  NestedBlockStatements,
6495  NestedBlockStatement,
6496  BlockStatementPart,
6497  Literal,
6498  LiteralContent,
6499  NullLiteral,
6500  BooleanLiteral,
6501  _BooleanLiteral,
6502  CoffeeScriptBooleanLiteral,
6503  Identifier,
6504  IdentifierName,
6505  IdentifierReference,
6506  UpcomingAssignment,
6507  ArrayLiteral,
6508  _ArrayLiteral,
6509  RangeExpression,
6510  ArrayLiteralContent,
6511  NestedElementList,
6512  NestedElement,
6513  ArrayElementDelimiter,
6514  ElementListWithIndentedApplicationForbidden,
6515  ElementList,
6516  ElementListRest,
6517  ArrayElementExpression,
6518  ObjectLiteral,
6519  BracedObjectLiteral,
6520  BracedObjectLiteralContent,
6521  NestedImplicitObjectLiteral,
6522  NestedImplicitPropertyDefinitions,
6523  NestedImplicitPropertyDefinition,
6524  NestedPropertyDefinitions,
6525  NestedPropertyDefinition,
6526  ImplicitObjectLiteral,
6527  ImplicitObjectPropertyDelimiter,
6528  InlineObjectLiteral,
6529  InlineObjectPropertyDelimiter,
6530  ObjectPropertyDelimiter,
6531  PropertyDefinition,
6532  NamedProperty,
6533  SnugNamedProperty,
6534  PropertyName,
6535  ComputedPropertyName,
6536  Decorator,
6537  Decorators,
6538  MethodDefinition,
6539  MethodModifier,
6540  MethodSignature,
6541  ClassElementName,
6542  PrivateIdentifier,
6543  WAssignmentOp,
6544  AssignmentOp,
6545  OperatorAssignmentOp,
6546  AssignmentOpSymbol,
6547  CoffeeWordAssignmentOp,
6548  NotDedentedBinaryOp,
6549  IdentifierBinaryOp,
6550  BinaryOp,
6551  _BinaryOp,
6552  BinaryOpSymbol,
6553  ActualIn,
6554  CoffeeOfOp,
6555  NotOp,
6556  Xor,
6557  Xnor,
6558  UnaryOp,
6559  AwaitOp,
6560  ModuleItem,
6561  StatementListItem,
6562  PostfixedStatement,
6563  NoCommaStatementListItem,
6564  PostfixedNoCommaStatement,
6565  PostfixedExpression,
6566  PostfixedCommaExpression,
6567  NonPipelinePostfixedExpression,
6568  PostfixStatement,
6569  _PostfixStatement,
6570  Statement,
6571  NoCommaStatement,
6572  EmptyStatement,
6573  InsertEmptyStatement,
6574  BlockStatement,
6575  LabelledStatement,
6576  Label,
6577  LabelledItem,
6578  IfStatement,
6579  ElseClause,
6580  IfClause,
6581  IterationStatement,
6582  _IterationStatement,
6583  IterationExpression,
6584  LoopStatement,
6585  LoopClause,
6586  DoWhileStatement,
6587  DoStatement,
6588  ComptimeStatement,
6589  WhileStatement,
6590  WhileClause,
6591  ForStatement,
6592  ForClause,
6593  ForStatementControl,
6594  WhenCondition,
6595  CoffeeForStatementParameters,
6596  CoffeeForIndex,
6597  CoffeeForDeclaration,
6598  ForStatementParameters,
6599  ForRangeParameters,
6600  ForInOfDeclaration,
6601  ForDeclaration,
6602  ForBinding,
6603  SwitchStatement,
6604  EmptyCondition,
6605  CaseBlock,
6606  NestedCaseClauses,
6607  NestedCaseClause,
6608  CaseClause,
6609  PatternExpressionList,
6610  PatternExpression,
6611  CaseExpressionList,
6612  CaseExpression,
6613  ImpliedColon,
6614  IgnoreColon,
6615  TryStatement,
6616  CatchClause,
6617  CatchBind,
6618  FinallyClause,
6619  CatchParameter,
6620  Condition,
6621  DeclarationCondition,
6622  ExpressionWithIndentedApplicationForbidden,
6623  SingleLineExpressionWithIndentedApplicationForbidden,
6624  ExpressionWithObjectApplicationForbidden,
6625  LeftHandSideExpressionWithObjectApplicationForbidden,
6626  ForbidClassImplicitCall,
6627  AllowClassImplicitCall,
6628  RestoreClassImplicitCall,
6629  ClassImplicitCallForbidden,
6630  ForbidBracedApplication,
6631  AllowBracedApplication,
6632  RestoreBracedApplication,
6633  BracedApplicationAllowed,
6634  ForbidIndentedApplication,
6635  AllowIndentedApplication,
6636  RestoreIndentedApplication,
6637  IndentedApplicationAllowed,
6638  ForbidTrailingMemberProperty,
6639  AllowTrailingMemberProperty,
6640  RestoreTrailingMemberProperty,
6641  TrailingMemberPropertyAllowed,
6642  AllowNewlineBinaryOp,
6643  ForbidNewlineBinaryOp,
6644  RestoreNewlineBinaryOp,
6645  NewlineBinaryOpAllowed,
6646  AllowAll,
6647  RestoreAll,
6648  CommaExpressionStatement,
6649  ExpressionStatement,
6650  KeywordStatement,
6651  DebuggerStatement,
6652  ThrowStatement,
6653  Break,
6654  Continue,
6655  Debugger,
6656  MaybeNestedNonPipelineExtendedExpression,
6657  MaybeNestedPostfixedExpression,
6658  MaybeNestedExtendedExpression,
6659  MaybeParenNestedExtendedExpression,
6660  ImportDeclaration,
6661  ImpliedImport,
6662  ImportClause,
6663  NameSpaceImport,
6664  NamedImports,
6665  FromClause,
6666  ImportAssertion,
6667  TypeAndImportSpecifier,
6668  ImportSpecifier,
6669  OperatorImportSpecifier,
6670  ImportAsToken,
6671  ModuleExportName,
6672  ModuleSpecifier,
6673  UnprocessedModuleSpecifier,
6674  UnquotedSpecifier,
6675  ImportedBinding,
6676  ExportDeclaration,
6677  ExportVarDec,
6678  ExportFromClause,
6679  TypeAndNamedExports,
6680  NamedExports,
6681  ExportSpecifier,
6682  ImplicitExportSpecifier,
6683  Declaration,
6684  HoistableDeclaration,
6685  LexicalDeclaration,
6686  ConstAssignment,
6687  LetAssignment,
6688  TypeAssignment,
6689  LexicalBinding,
6690  Initializer,
6691  VariableStatement,
6692  VariableDeclarationList,
6693  NumericLiteral,
6694  NumericLiteralKind,
6695  DecimalBigIntegerLiteral,
6696  DecimalLiteral,
6697  ExponentPart,
6698  BinaryIntegerLiteral,
6699  OctalIntegerLiteral,
6700  HexIntegerLiteral,
6701  IntegerLiteral,
6702  IntegerLiteralKind,
6703  DecimalIntegerLiteral,
6704  StringLiteral,
6705  DoubleStringCharacters,
6706  SingleStringCharacters,
6707  TripleDoubleStringCharacters,
6708  TripleSingleStringCharacters,
6709  CoffeeStringSubstitution,
6710  CoffeeInterpolatedDoubleQuotedString,
6711  CoffeeDoubleQuotedStringCharacters,
6712  RegularExpressionLiteral,
6713  RegularExpressionClass,
6714  RegularExpressionClassCharacters,
6715  HeregexLiteral,
6716  HeregexBody,
6717  HeregexPart,
6718  HeregexComment,
6719  RegularExpressionBody,
6720  RegExpPart,
6721  RegExpCharacter,
6722  RegularExpressionFlags,
6723  TemplateLiteral,
6724  _TemplateLiteral,
6725  TemplateSubstitution,
6726  TemplateCharacters,
6727  TemplateBlockCharacters,
6728  ReservedWord,
6729  Comment,
6730  _Comment,
6731  SingleLineComment,
6732  JSSingleLineComment,
6733  MultiLineComment,
6734  JSMultiLineComment,
6735  CoffeeSingleLineComment,
6736  CoffeeMultiLineComment,
6737  CoffeeHereCommentStart,
6738  InlineComment,
6739  RestOfLine,
6740  TrailingComment,
6741  _,
6742  NonNewlineWhitespace,
6743  Trimmed_,
6744  __,
6745  Whitespace,
6746  ExpressionDelimiter,
6747  SimpleStatementDelimiter,
6748  StatementDelimiter,
6749  SemicolonDelimiter,
6750  NonIdContinue,
6751  Loc,
6752  Abstract,
6753  Ampersand,
6754  As,
6755  At,
6756  AtAt,
6757  Async,
6758  Await,
6759  Backtick,
6760  By,
6761  Caret,
6762  Case,
6763  Catch,
6764  Class,
6765  CloseAngleBracket,
6766  CloseBrace,
6767  CloseBracket,
6768  CloseParen,
6769  CoffeeSubstitutionStart,
6770  Colon,
6771  Comma,
6772  Comptime,
6773  ConstructorShorthand,
6774  Declare,
6775  Default,
6776  Delete,
6777  Do,
6778  Dot,
6779  DotDot,
6780  DotDotDot,
6781  DoubleColon,
6782  DoubleQuote,
6783  Each,
6784  Else,
6785  Equals,
6786  ExclamationPoint,
6787  Export,
6788  Extends,
6789  Finally,
6790  For,
6791  From,
6792  Function: Function2,
6793  GetOrSet,
6794  Hash,
6795  If,
6796  Import,
6797  In,
6798  Infer,
6799  LetOrConst,
6800  Const,
6801  Is,
6802  LetOrConstOrVar,
6803  Like,
6804  Loop,
6805  New,
6806  Not,
6807  Of,
6808  OpenAngleBracket,
6809  OpenBrace,
6810  OpenBracket,
6811  OpenParen,
6812  Operator,
6813  Override,
6814  Own,
6815  Public,
6816  Private,
6817  Protected,
6818  Pipe,
6819  QuestionMark,
6820  Readonly,
6821  Return,
6822  Satisfies,
6823  Semicolon,
6824  SingleQuote,
6825  Star,
6826  Static,
6827  SubstitutionStart,
6828  Super,
6829  Switch,
6830  Target,
6831  Then,
6832  This,
6833  Throw,
6834  TripleDoubleQuote,
6835  TripleSingleQuote,
6836  TripleSlash,
6837  TripleTick,
6838  Try,
6839  Typeof,
6840  Undefined,
6841  Unless,
6842  Until,
6843  Using,
6844  Var,
6845  Void,
6846  When,
6847  While,
6848  With,
6849  Yield,
6850  JSXImplicitFragment,
6851  JSXTag,
6852  _JSXTag,
6853  JSXElement,
6854  JSXSelfClosingElement,
6855  PushJSXOpeningElement,
6856  PopJSXStack,
6857  JSXOpeningElement,
6858  JSXOptionalClosingElement,
6859  JSXClosingElement,
6860  JSXFragment,
6861  PushJSXOpeningFragment,
6862  JSXOptionalClosingFragment,
6863  JSXClosingFragment,
6864  JSXElementName,
6865  JSXIdentifierName,
6866  JSXAttributes,
6867  JSXAttribute,
6868  JSXAttributeSpace,
6869  JSXShorthandString,
6870  JSXAttributeName,
6871  JSXAttributeInitializer,
6872  JSXAttributeValue,
6873  InlineJSXAttributeValue,
6874  InlineJSXBinaryOpRHS,
6875  InlineJSXUnaryExpression,
6876  InlineJSXUnaryOp,
6877  InlineJSXUnaryPostfix,
6878  InlineJSXUpdateExpression,
6879  InlineJSXCallExpression,
6880  InlineJSXCallExpressionRest,
6881  InlineJSXMemberExpression,
6882  InlineJSXMemberExpressionRest,
6883  InlineJSXPrimaryExpression,
6884  JSXMixedChildren,
6885  JSXChildren,
6886  JSXNestedChildren,
6887  JSXEOS,
6888  JSXNested,
6889  JSXChild,
6890  JSXComment,
6891  JSXCommentContent,
6892  JSXText,
6893  JSXChildExpression,
6894  IndentedJSXChildExpression,
6895  NestedJSXChildExpression,
6896  UsingDeclaration,
6897  UsingBinding,
6898  UsingJSModeError,
6899  TypeDeclaration,
6900  TypeDeclarationRest,
6901  TypeAliasDeclaration,
6902  InterfaceDeclaration,
6903  NamespaceDeclaration,
6904  OptionalEquals,
6905  TypeLexicalDeclaration,
6906  TypeDeclarationBinding,
6907  InterfaceExtendsClause,
6908  InterfaceExtendsTarget,
6909  TypeKeyword,
6910  Enum,
6911  Interface,
6912  Global,
6913  Module,
6914  Namespace,
6915  InterfaceBlock,
6916  NestedInterfaceBlock,
6917  NestedInterfaceProperties,
6918  NestedInterfaceProperty,
6919  InterfaceProperty,
6920  BasicInterfaceProperty,
6921  InterfacePropertyDelimiter,
6922  ModuleBlock,
6923  NestedModuleItems,
6924  NestedModuleItem,
6925  DeclareBlock,
6926  NestedDeclareElements,
6927  NestedDeclareElement,
6928  DeclareElement,
6929  EnumDeclaration,
6930  EnumBlock,
6931  NestedEnumProperties,
6932  NestedEnumPropertyLine,
6933  EnumProperty,
6934  TypeProperty,
6935  TypeIndexSignature,
6936  TypeIndex,
6937  TypeSuffix,
6938  MaybeNestedType,
6939  ReturnTypeSuffix,
6940  ReturnType,
6941  TypePredicate,
6942  Type,
6943  TypeBinary,
6944  TypeUnary,
6945  TypeUnarySuffix,
6946  TypeUnaryOp,
6947  TypeIndexedAccess,
6948  UnknownAlias,
6949  TypePrimary,
6950  ImportType,
6951  TypeTuple,
6952  TypeList,
6953  TypeElement,
6954  NestedTypeList,
6955  NestedType,
6956  TypeConditional,
6957  TypeCondition,
6958  TypeIfThenElse,
6959  TypeElse,
6960  TypeBlock,
6961  TypeTemplateSubstitution,
6962  TypeTemplateLiteral,
6963  CoffeeStringTypeSubstitution,
6964  CoffeeInterpolatedDoubleQuotedTypeLiteral,
6965  TypeLiteral,
6966  InlineInterfaceLiteral,
6967  InlineBasicInterfaceProperty,
6968  InlineInterfacePropertyDelimiter,
6969  TypeBinaryOp,
6970  TypeFunction,
6971  TypeArrowFunction,
6972  TypeArguments,
6973  TypeArgument,
6974  TypeArgumentDelimiter,
6975  TypeParameters,
6976  TypeParameter,
6977  TypeConstraint,
6978  TypeInitializer,
6979  TypeParameterDelimiter,
6980  ThisType,
6981  Shebang,
6982  CivetPrologue,
6983  CivetPrologueContent,
6984  CivetOption,
6985  UnknownPrologue,
6986  TripleSlashDirective,
6987  DirectivePrologue,
6988  PrologueString,
6989  EOS,
6990  EOL,
6991  DebugHere,
6992  InsertColon,
6993  InsertSemicolon,
6994  InsertOpenParen,
6995  InsertCloseParen,
6996  InsertOpenBrace,
6997  InsertInlineOpenBrace,
6998  InsertCloseBrace,
6999  InsertOpenBracket,
7000  InsertCloseBracket,
7001  InsertComma,
7002  InsertSpaceEquals,
7003  InsertConst,
7004  InsertLet,
7005  InsertReadonly,
7006  InsertNewline,
7007  InsertIndent,
7008  InsertSpace,
7009  InsertDot,
7010  InsertBreak,
7011  InsertVar,
7012  InsertType,
7013  CoffeeBinaryExistentialEnabled,
7014  CoffeeBooleansEnabled,
7015  CoffeeClassesEnabled,
7016  CoffeeCommentEnabled,
7017  CoffeeDoEnabled,
7018  CoffeeForLoopsEnabled,
7019  CoffeeInterpolationEnabled,
7020  CoffeeIsntEnabled,
7021  CoffeeJSXEnabled,
7022  CoffeeLineContinuationEnabled,
7023  CoffeeNotEnabled,
7024  CoffeeOfEnabled,
7025  CoffeePrototypeEnabled,
7026  ObjectIsEnabled,
7027  Reset,
7028  Init,
7029  Prologue,
7030  ProloguePrefix,
7031  Indent,
7032  TrackIndented,
7033  PushIndent,
7034  PopIndent,
7035  Nested,
7036  IndentedFurther,
7037  IndentedAtLeast,
7038  NotDedented,
7039  Dedented
7040};
7041var $L0 = (0, import_lib3.$L)("");
7042var $L1 = (0, import_lib3.$L)("{");
7043var $L2 = (0, import_lib3.$L)("/ ");
7044var $L3 = (0, import_lib3.$L)("=");
7045var $L4 = (0, import_lib3.$L)("(");
7046var $L5 = (0, import_lib3.$L)("... ");
7047var $L6 = (0, import_lib3.$L)("?");
7048var $L7 = (0, import_lib3.$L)(".");
7049var $L8 = (0, import_lib3.$L)("tuple");
7050var $L9 = (0, import_lib3.$L)("++");
7051var $L10 = (0, import_lib3.$L)("--");
7052var $L11 = (0, import_lib3.$L)("\u29FA");
7053var $L12 = (0, import_lib3.$L)("\u2014");
7054var $L13 = (0, import_lib3.$L)("=>");
7055var $L14 = (0, import_lib3.$L)("\u21D2");
7056var $L15 = (0, import_lib3.$L)("import");
7057var $L16 = (0, import_lib3.$L)(":");
7058var $L17 = (0, import_lib3.$L)(",");
7059var $L18 = (0, import_lib3.$L)(" ");
7060var $L19 = (0, import_lib3.$L)("<");
7061var $L20 = (0, import_lib3.$L)("implements");
7062var $L21 = (0, import_lib3.$L)("<:");
7063var $L22 = (0, import_lib3.$L)("^");
7064var $L23 = (0, import_lib3.$L)("-");
7065var $L24 = (0, import_lib3.$L)("import.meta");
7066var $L25 = (0, import_lib3.$L)("return.value");
7067var $L26 = (0, import_lib3.$L)("tighter");
7068var $L27 = (0, import_lib3.$L)("looser");
7069var $L28 = (0, import_lib3.$L)("same");
7070var $L29 = (0, import_lib3.$L)("left");
7071var $L30 = (0, import_lib3.$L)("right");
7072var $L31 = (0, import_lib3.$L)("non");
7073var $L32 = (0, import_lib3.$L)("relational");
7074var $L33 = (0, import_lib3.$L)("arguments");
7075var $L34 = (0, import_lib3.$L)("->");
7076var $L35 = (0, import_lib3.$L)("\u2192");
7077var $L36 = (0, import_lib3.$L)("}");
7078var $L37 = (0, import_lib3.$L)("null");
7079var $L38 = (0, import_lib3.$L)("true");
7080var $L39 = (0, import_lib3.$L)("false");
7081var $L40 = (0, import_lib3.$L)("yes");
7082var $L41 = (0, import_lib3.$L)("on");
7083var $L42 = (0, import_lib3.$L)("no");
7084var $L43 = (0, import_lib3.$L)("off");
7085var $L44 = (0, import_lib3.$L)(">");
7086var $L45 = (0, import_lib3.$L)("]");
7087var $L46 = (0, import_lib3.$L)("**=");
7088var $L47 = (0, import_lib3.$L)("*=");
7089var $L48 = (0, import_lib3.$L)("/=");
7090var $L49 = (0, import_lib3.$L)("%=");
7091var $L50 = (0, import_lib3.$L)("+=");
7092var $L51 = (0, import_lib3.$L)("-=");
7093var $L52 = (0, import_lib3.$L)("<<=");
7094var $L53 = (0, import_lib3.$L)(">>>=");
7095var $L54 = (0, import_lib3.$L)(">>=");
7096var $L55 = (0, import_lib3.$L)("&&=");
7097var $L56 = (0, import_lib3.$L)("&=");
7098var $L57 = (0, import_lib3.$L)("^=");
7099var $L58 = (0, import_lib3.$L)("||=");
7100var $L59 = (0, import_lib3.$L)("|=");
7101var $L60 = (0, import_lib3.$L)("??=");
7102var $L61 = (0, import_lib3.$L)("?=");
7103var $L62 = (0, import_lib3.$L)("and=");
7104var $L63 = (0, import_lib3.$L)("or=");
7105var $L64 = (0, import_lib3.$L)("*");
7106var $L65 = (0, import_lib3.$L)("**");
7107var $L66 = (0, import_lib3.$L)("/");
7108var $L67 = (0, import_lib3.$L)("%%");
7109var $L68 = (0, import_lib3.$L)("%");
7110var $L69 = (0, import_lib3.$L)("+");
7111var $L70 = (0, import_lib3.$L)("<=");
7112var $L71 = (0, import_lib3.$L)("\u2264");
7113var $L72 = (0, import_lib3.$L)(">=");
7114var $L73 = (0, import_lib3.$L)("\u2265");
7115var $L74 = (0, import_lib3.$L)("<?");
7116var $L75 = (0, import_lib3.$L)("!<?");
7117var $L76 = (0, import_lib3.$L)("<<");
7118var $L77 = (0, import_lib3.$L)("\xAB");
7119var $L78 = (0, import_lib3.$L)(">>>");
7120var $L79 = (0, import_lib3.$L)("\u22D9");
7121var $L80 = (0, import_lib3.$L)(">>");
7122var $L81 = (0, import_lib3.$L)("\xBB");
7123var $L82 = (0, import_lib3.$L)("!==");
7124var $L83 = (0, import_lib3.$L)("\u2262");
7125var $L84 = (0, import_lib3.$L)("!=");
7126var $L85 = (0, import_lib3.$L)("\u2260");
7127var $L86 = (0, import_lib3.$L)("isnt");
7128var $L87 = (0, import_lib3.$L)("===");
7129var $L88 = (0, import_lib3.$L)("\u2263");
7130var $L89 = (0, import_lib3.$L)("\u2A76");
7131var $L90 = (0, import_lib3.$L)("==");
7132var $L91 = (0, import_lib3.$L)("\u2261");
7133var $L92 = (0, import_lib3.$L)("\u2A75");
7134var $L93 = (0, import_lib3.$L)("and");
7135var $L94 = (0, import_lib3.$L)("&&");
7136var $L95 = (0, import_lib3.$L)("or");
7137var $L96 = (0, import_lib3.$L)("||");
7138var $L97 = (0, import_lib3.$L)("\u2016");
7139var $L98 = (0, import_lib3.$L)("^^");
7140var $L99 = (0, import_lib3.$L)("xor");
7141var $L100 = (0, import_lib3.$L)("xnor");
7142var $L101 = (0, import_lib3.$L)("??");
7143var $L102 = (0, import_lib3.$L)("\u2047");
7144var $L103 = (0, import_lib3.$L)("instanceof");
7145var $L104 = (0, import_lib3.$L)("\u2208");
7146var $L105 = (0, import_lib3.$L)("\u220B");
7147var $L106 = (0, import_lib3.$L)("\u220C");
7148var $L107 = (0, import_lib3.$L)("\u2209");
7149var $L108 = (0, import_lib3.$L)("&");
7150var $L109 = (0, import_lib3.$L)("|");
7151var $L110 = (0, import_lib3.$L)("$:");
7152var $L111 = (0, import_lib3.$L)(";");
7153var $L112 = (0, import_lib3.$L)("break");
7154var $L113 = (0, import_lib3.$L)("continue");
7155var $L114 = (0, import_lib3.$L)("debugger");
7156var $L115 = (0, import_lib3.$L)("require");
7157var $L116 = (0, import_lib3.$L)("with");
7158var $L117 = (0, import_lib3.$L)("assert");
7159var $L118 = (0, import_lib3.$L)(":=");
7160var $L119 = (0, import_lib3.$L)("\u2254");
7161var $L120 = (0, import_lib3.$L)(".=");
7162var $L121 = (0, import_lib3.$L)("::=");
7163var $L122 = (0, import_lib3.$L)("/*");
7164var $L123 = (0, import_lib3.$L)("*/");
7165var $L124 = (0, import_lib3.$L)("\\");
7166var $L125 = (0, import_lib3.$L)(")");
7167var $L126 = (0, import_lib3.$L)("abstract");
7168var $L127 = (0, import_lib3.$L)("as");
7169var $L128 = (0, import_lib3.$L)("@");
7170var $L129 = (0, import_lib3.$L)("@@");
7171var $L130 = (0, import_lib3.$L)("async");
7172var $L131 = (0, import_lib3.$L)("await");
7173var $L132 = (0, import_lib3.$L)("`");
7174var $L133 = (0, import_lib3.$L)("by");
7175var $L134 = (0, import_lib3.$L)("case");
7176var $L135 = (0, import_lib3.$L)("catch");
7177var $L136 = (0, import_lib3.$L)("class");
7178var $L137 = (0, import_lib3.$L)("\#{");
7179var $L138 = (0, import_lib3.$L)("comptime");
7180var $L139 = (0, import_lib3.$L)("declare");
7181var $L140 = (0, import_lib3.$L)("default");
7182var $L141 = (0, import_lib3.$L)("delete");
7183var $L142 = (0, import_lib3.$L)("do");
7184var $L143 = (0, import_lib3.$L)("..");
7185var $L144 = (0, import_lib3.$L)("\\u2025");
7186var $L145 = (0, import_lib3.$L)("...");
7187var $L146 = (0, import_lib3.$L)("\\u2026");
7188var $L147 = (0, import_lib3.$L)("::");
7189var $L148 = (0, import_lib3.$L)('\"');
7190var $L149 = (0, import_lib3.$L)("each");
7191var $L150 = (0, import_lib3.$L)("else");
7192var $L151 = (0, import_lib3.$L)("!");
7193var $L152 = (0, import_lib3.$L)("export");
7194var $L153 = (0, import_lib3.$L)("extends");
7195var $L154 = (0, import_lib3.$L)("finally");
7196var $L155 = (0, import_lib3.$L)("for");
7197var $L156 = (0, import_lib3.$L)("from");
7198var $L157 = (0, import_lib3.$L)("function");
7199var $L158 = (0, import_lib3.$L)("get");
7200var $L159 = (0, import_lib3.$L)("set");
7201var $L160 = (0, import_lib3.$L)("\#");
7202var $L161 = (0, import_lib3.$L)("if");
7203var $L162 = (0, import_lib3.$L)("in");
7204var $L163 = (0, import_lib3.$L)("infer");
7205var $L164 = (0, import_lib3.$L)("let");
7206var $L165 = (0, import_lib3.$L)("const");
7207var $L166 = (0, import_lib3.$L)("is");
7208var $L167 = (0, import_lib3.$L)("like");
7209var $L168 = (0, import_lib3.$L)("loop");
7210var $L169 = (0, import_lib3.$L)("new");
7211var $L170 = (0, import_lib3.$L)("not");
7212var $L171 = (0, import_lib3.$L)("of");
7213var $L172 = (0, import_lib3.$L)("[");
7214var $L173 = (0, import_lib3.$L)("operator");
7215var $L174 = (0, import_lib3.$L)("override");
7216var $L175 = (0, import_lib3.$L)("own");
7217var $L176 = (0, import_lib3.$L)("public");
7218var $L177 = (0, import_lib3.$L)("private");
7219var $L178 = (0, import_lib3.$L)("protected");
7220var $L179 = (0, import_lib3.$L)("||>");
7221var $L180 = (0, import_lib3.$L)("|\u25B7");
7222var $L181 = (0, import_lib3.$L)("|>=");
7223var $L182 = (0, import_lib3.$L)("\u25B7=");
7224var $L183 = (0, import_lib3.$L)("|>");
7225var $L184 = (0, import_lib3.$L)("\u25B7");
7226var $L185 = (0, import_lib3.$L)("readonly");
7227var $L186 = (0, import_lib3.$L)("return");
7228var $L187 = (0, import_lib3.$L)("satisfies");
7229var $L188 = (0, import_lib3.$L)("'");
7230var $L189 = (0, import_lib3.$L)("static");
7231var $L190 = (0, import_lib3.$L)("${");
7232var $L191 = (0, import_lib3.$L)("super");
7233var $L192 = (0, import_lib3.$L)("switch");
7234var $L193 = (0, import_lib3.$L)("target");
7235var $L194 = (0, import_lib3.$L)("then");
7236var $L195 = (0, import_lib3.$L)("this");
7237var $L196 = (0, import_lib3.$L)("throw");
7238var $L197 = (0, import_lib3.$L)('"""');
7239var $L198 = (0, import_lib3.$L)("'''");
7240var $L199 = (0, import_lib3.$L)("///");
7241var $L200 = (0, import_lib3.$L)("```");
7242var $L201 = (0, import_lib3.$L)("try");
7243var $L202 = (0, import_lib3.$L)("typeof");
7244var $L203 = (0, import_lib3.$L)("undefined");
7245var $L204 = (0, import_lib3.$L)("unless");
7246var $L205 = (0, import_lib3.$L)("until");
7247var $L206 = (0, import_lib3.$L)("using");
7248var $L207 = (0, import_lib3.$L)("var");
7249var $L208 = (0, import_lib3.$L)("void");
7250var $L209 = (0, import_lib3.$L)("when");
7251var $L210 = (0, import_lib3.$L)("while");
7252var $L211 = (0, import_lib3.$L)("yield");
7253var $L212 = (0, import_lib3.$L)("/>");
7254var $L213 = (0, import_lib3.$L)("</");
7255var $L214 = (0, import_lib3.$L)("<>");
7256var $L215 = (0, import_lib3.$L)("</>");
7257var $L216 = (0, import_lib3.$L)("<!--");
7258var $L217 = (0, import_lib3.$L)("-->");
7259var $L218 = (0, import_lib3.$L)("type");
7260var $L219 = (0, import_lib3.$L)("enum");
7261var $L220 = (0, import_lib3.$L)("interface");
7262var $L221 = (0, import_lib3.$L)("global");
7263var $L222 = (0, import_lib3.$L)("module");
7264var $L223 = (0, import_lib3.$L)("namespace");
7265var $L224 = (0, import_lib3.$L)("asserts");
7266var $L225 = (0, import_lib3.$L)("keyof");
7267var $L226 = (0, import_lib3.$L)("???");
7268var $L227 = (0, import_lib3.$L)("unique");
7269var $L228 = (0, import_lib3.$L)("symbol");
7270var $L229 = (0, import_lib3.$L)("[]");
7271var $L230 = (0, import_lib3.$L)("civet");
7272var $R0 = (0, import_lib3.$R)(new RegExp("(?=async|debugger|if|unless|comptime|do|for|loop|until|while|switch|throw|try)", "suy"));
7273var $R1 = (0, import_lib3.$R)(new RegExp("&(?=\\s)", "suy"));
7274var $R2 = (0, import_lib3.$R)(new RegExp("(as|of|satisfies|then|when|implements|xor|xnor)(?!\\p{ID_Continue}|[\\u200C\\u200D$])", "suy"));
7275var $R3 = (0, import_lib3.$R)(new RegExp("[0-9]", "suy"));
7276var $R4 = (0, import_lib3.$R)(new RegExp("(?!\\p{ID_Start}|[_$0-9(\\[{])", "suy"));
7277var $R5 = (0, import_lib3.$R)(new RegExp("[ \\t]", "suy"));
7278var $R6 = (0, import_lib3.$R)(new RegExp("(?:\\p{ID_Continue}|[\\u200C\\u200D$.#])", "suy"));
7279var $R7 = (0, import_lib3.$R)(new RegExp("[&=]", "suy"));
7280var $R8 = (0, import_lib3.$R)(new RegExp("(?=['\"`])", "suy"));
7281var $R9 = (0, import_lib3.$R)(new RegExp("(?=[\\/?])", "suy"));
7282var $R10 = (0, import_lib3.$R)(new RegExp("(?=[\\/\\[{?.!@#'\u2019:])", "suy"));
7283var $R11 = (0, import_lib3.$R)(new RegExp("[)}]", "suy"));
7284var $R12 = (0, import_lib3.$R)(new RegExp("[+-]", "suy"));
7285var $R13 = (0, import_lib3.$R)(new RegExp("\\+\\+|--|[\\+\\-&]\\S", "suy"));
7286var $R14 = (0, import_lib3.$R)(new RegExp(`(?=[0-9.'"tfyno])`, "suy"));
7287var $R15 = (0, import_lib3.$R)(new RegExp("(?=true|false|yes|no|on|off)", "suy"));
7288var $R16 = (0, import_lib3.$R)(new RegExp("(?=\\p{ID_Start}|[_$])", "suy"));
7289var $R17 = (0, import_lib3.$R)(new RegExp("(?:\\p{ID_Start}|[_$])(?:\\p{ID_Continue}|[\\u200C\\u200D$])*", "suy"));
7290var $R18 = (0, import_lib3.$R)(new RegExp("(?=\\[)", "suy"));
7291var $R19 = (0, import_lib3.$R)(new RegExp("[!+-]?", "suy"));
7292var $R20 = (0, import_lib3.$R)(new RegExp("(?=\\p{ID_Start}|[_$^\xAB\xBB\u22D9\u2264\u2265\u2208\u220B\u2209\u220C\u2263\u2261\u2262\u2260=\u2A76\u2A75\u2016\u2047&|*\\/!?%<>\u29FA+-])", "suy"));
7293var $R21 = (0, import_lib3.$R)(new RegExp("!\\^\\^?", "suy"));
7294var $R22 = (0, import_lib3.$R)(new RegExp("(?!\\+\\+|--)[!~+-](?!\\s)", "suy"));
7295var $R23 = (0, import_lib3.$R)(new RegExp("[:.]", "suy"));
7296var $R24 = (0, import_lib3.$R)(new RegExp("(?=for|if|loop|unless|until|while)", "suy"));
7297var $R25 = (0, import_lib3.$R)(new RegExp("(?=loop|comptime|do|for|until|while)", "suy"));
7298var $R26 = (0, import_lib3.$R)(new RegExp("(?=[\\s\\),])", "suy"));
7299var $R27 = (0, import_lib3.$R)(new RegExp('[^;"\\s]+', "suy"));
7300var $R28 = (0, import_lib3.$R)(new RegExp("(?=[0-9.])", "suy"));
7301var $R29 = (0, import_lib3.$R)(new RegExp("(?:0|[1-9](?:_[0-9]|[0-9])*)n", "suy"));
7302var $R30 = (0, import_lib3.$R)(new RegExp("(?:0|[1-9](?:_[0-9]|[0-9])*)(?=\\.(?:\\p{ID_Start}|[_$]))", "suy"));
7303var $R31 = (0, import_lib3.$R)(new RegExp("(?:0|[1-9](?:_[0-9]|[0-9])*)(?:\\.(?:[0-9](?:_[0-9]|[0-9])*))?", "suy"));
7304var $R32 = (0, import_lib3.$R)(new RegExp("(?:\\.[0-9](?:_[0-9]|[0-9])*)", "suy"));
7305var $R33 = (0, import_lib3.$R)(new RegExp("(?:[eE][+-]?[0-9]+(?:_[0-9]|[0-9])*)", "suy"));
7306var $R34 = (0, import_lib3.$R)(new RegExp("0[bB][01](?:[01]|_[01])*n?", "suy"));
7307var $R35 = (0, import_lib3.$R)(new RegExp("0[oO][0-7](?:[0-7]|_[0-7])*n?", "suy"));
7308var $R36 = (0, import_lib3.$R)(new RegExp("0[xX][0-9a-fA-F](?:[0-9a-fA-F]|_[0-9a-fA-F])*n?", "suy"));
7309var $R37 = (0, import_lib3.$R)(new RegExp("(?=[0-9])", "suy"));
7310var $R38 = (0, import_lib3.$R)(new RegExp("(?:0|[1-9](?:_[0-9]|[0-9])*)", "suy"));
7311var $R39 = (0, import_lib3.$R)(new RegExp('(?:\\\\.|[^"])*', "suy"));
7312var $R40 = (0, import_lib3.$R)(new RegExp("(?:\\\\.|[^'])*", "suy"));
7313var $R41 = (0, import_lib3.$R)(new RegExp('(?:"(?!"")|#(?!\\{)|\\\\.|[^#"])+', "suy"));
7314var $R42 = (0, import_lib3.$R)(new RegExp("(?:'(?!'')|\\\\.|[^'])*", "suy"));
7315var $R43 = (0, import_lib3.$R)(new RegExp('(?:\\\\.|#(?!\\{)|[^"\#])+', "suy"));
7316var $R44 = (0, import_lib3.$R)(new RegExp("(?:\\\\.|[^\\]])*", "suy"));
7317var $R45 = (0, import_lib3.$R)(new RegExp("(?:\\\\.)", "suy"));
7318var $R46 = (0, import_lib3.$R)(new RegExp("[\\s]+", "suy"));
7319var $R47 = (0, import_lib3.$R)(new RegExp("\\/(?!\\/\\/)", "suy"));
7320var $R48 = (0, import_lib3.$R)(new RegExp("[^[\\/\\s#\\\\]+", "suy"));
7321var $R49 = (0, import_lib3.$R)(new RegExp("[*\\/\\r\\n]", "suy"));
7322var $R50 = (0, import_lib3.$R)(new RegExp("(?:\\\\.|[^[\\/\\r\\n])+", "suy"));
7323var $R51 = (0, import_lib3.$R)(new RegExp("(?:\\p{ID_Continue}|[\\u200C\\u200D$])*", "suy"));
7324var $R52 = (0, import_lib3.$R)(new RegExp("(?=[`'\"])", "suy"));
7325var $R53 = (0, import_lib3.$R)(new RegExp("(?:\\$(?!\\{)|\\\\.|[^$`])+", "suy"));
7326var $R54 = (0, import_lib3.$R)(new RegExp("(?:\\$(?!\\{)|`(?!``)|\\\\.|[^$`])+", "suy"));
7327var $R55 = (0, import_lib3.$R)(new RegExp("(?:on|off|yes|no)(?!\\p{ID_Continue})", "suy"));
7328var $R56 = (0, import_lib3.$R)(new RegExp("(?:isnt)(?!\\p{ID_Continue})", "suy"));
7329var $R57 = (0, import_lib3.$R)(new RegExp("(?:by)(?!\\p{ID_Continue})", "suy"));
7330var $R58 = (0, import_lib3.$R)(new RegExp("(?:of)(?!\\p{ID_Continue})", "suy"));
7331var $R59 = (0, import_lib3.$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"));
7332var $R60 = (0, import_lib3.$R)(new RegExp("(?=\\/|#)", "suy"));
7333var $R61 = (0, import_lib3.$R)(new RegExp("\\/\\/(?!\\/)[^\\r\\n]*", "suy"));
7334var $R62 = (0, import_lib3.$R)(new RegExp(".", "suy"));
7335var $R63 = (0, import_lib3.$R)(new RegExp("\#(?!##(?!#))([^\\r\\n]*)", "suy"));
7336var $R64 = (0, import_lib3.$R)(new RegExp("[^]*?###", "suy"));
7337var $R65 = (0, import_lib3.$R)(new RegExp("\###(?!#)", "suy"));
7338var $R66 = (0, import_lib3.$R)(new RegExp("\\/\\*(?:(?!\\*\\/)[^\\r\\n])*\\*\\/", "suy"));
7339var $R67 = (0, import_lib3.$R)(new RegExp("(?=[ \\t\\/\\\\])", "suy"));
7340var $R68 = (0, import_lib3.$R)(new RegExp("[ \\t]+", "suy"));
7341var $R69 = (0, import_lib3.$R)(new RegExp("(?=\\s|\\/|#)", "suy"));
7342var $R70 = (0, import_lib3.$R)(new RegExp("(?!\\p{ID_Continue})", "suy"));
7343var $R71 = (0, import_lib3.$R)(new RegExp("[=:]", "suy"));
7344var $R72 = (0, import_lib3.$R)(new RegExp("['\u2019]s", "suy"));
7345var $R73 = (0, import_lib3.$R)(new RegExp("\\s", "suy"));
7346var $R74 = (0, import_lib3.$R)(new RegExp("(?=[<])", "suy"));
7347var $R75 = (0, import_lib3.$R)(new RegExp("(?:\\p{ID_Start}|[_$])(?:\\p{ID_Continue}|[\\u200C\\u200D$-])*", "suy"));
7348var $R76 = (0, import_lib3.$R)(new RegExp("[!+-]", "suy"));
7349var $R77 = (0, import_lib3.$R)(new RegExp("[\\s>]|\\/>", "suy"));
7350var $R78 = (0, import_lib3.$R)(new RegExp("(?:[\\w\\-:]+|\\([^()]*\\)|\\[[^\\[\\]]*\\])+", "suy"));
7351var $R79 = (0, import_lib3.$R)(new RegExp(`"[^"]*"|'[^']*'`, "suy"));
7352var $R80 = (0, import_lib3.$R)(new RegExp("[<>]", "suy"));
7353var $R81 = (0, import_lib3.$R)(new RegExp("[!~+-](?!\\s|[!~+-]*&)", "suy"));
7354var $R82 = (0, import_lib3.$R)(new RegExp("(?:-[^-]|[^-]*)*", "suy"));
7355var $R83 = (0, import_lib3.$R)(new RegExp("[^{}<>\\r\\n]+", "suy"));
7356var $R84 = (0, import_lib3.$R)(new RegExp("[+-]?", "suy"));
7357var $R85 = (0, import_lib3.$R)(new RegExp("(?=if|unless)", "suy"));
7358var $R86 = (0, import_lib3.$R)(new RegExp("\#![^\\r\\n]*", "suy"));
7359var $R87 = (0, import_lib3.$R)(new RegExp("[\\t ]*", "suy"));
7360var $R88 = (0, import_lib3.$R)(new RegExp("[ \\t]*", "suy"));
7361var $R89 = (0, import_lib3.$R)(new RegExp("[\\s]*", "suy"));
7362var $R90 = (0, import_lib3.$R)(new RegExp("\\s+([+-]?)([a-zA-Z0-9-]+)(\\s*=\\s*([a-zA-Z0-9.+-]*))?", "suy"));
7363var $R91 = (0, import_lib3.$R)(new RegExp("\\/\\/\\/[^\\r\\n]*", "suy"));
7364var $R92 = (0, import_lib3.$R)(new RegExp("(?=[ \\t\\r\\n\\/#]|$)", "suy"));
7365var $R93 = (0, import_lib3.$R)(new RegExp("\\r\\n|\\n|\\r|$", "suy"));
7366var $R94 = (0, import_lib3.$R)(new RegExp("[^]*", "suy"));
7367var Program$0 = (0, import_lib3.$TS)((0, import_lib3.$S)(Reset, Init, (0, import_lib3.$E)(EOS), TopLevelStatements, __), function($skip, $loc, $0, $1, $2, $3, $4, $5) {
7368  var reset = $1;
7369  var init = $2;
7370  var ws1 = $3;
7371  var statements = $4;
7372  var ws2 = $5;
7373  const program = {
7374    type: "BlockStatement",
7375    expressions: statements,
7376    children: [reset, init, ws1, statements, ws2],
7377    bare: true,
7378    root: true
7379  };
7380  processProgram(program);
7381  return program;
7382});
7383function Program(ctx, state2) {
7384  return (0, import_lib3.$EVENT)(ctx, state2, "Program", Program$0);
7385}
7386var TopLevelStatements$0 = (0, import_lib3.$TS)((0, import_lib3.$S)(TrackIndented, TopLevelSingleLineStatements, (0, import_lib3.$Q)(NestedTopLevelStatements), PopIndent), function($skip, $loc, $0, $1, $2, $3, $4) {
7387  var indent = $1;
7388  var first = $2;
7389  var rest = $3;
7390  return [
7391    [indent, ...first[0]],
7392    ...first.slice(1).map((s) => ["", ...s]),
7393    ...rest.flat()
7394  ];
7395});
7396var TopLevelStatements$1 = (0, import_lib3.$TS)((0, import_lib3.$S)(TopLevelSingleLineStatements, (0, import_lib3.$Q)(NestedTopLevelStatements)), function($skip, $loc, $0, $1, $2) {
7397  var first = $1;
7398  var rest = $2;
7399  return [
7400    ...first.map((s) => ["", ...s]),
7401    ...rest.flat()
7402  ];
7403});
7404var TopLevelStatements$2 = (0, import_lib3.$T)((0, import_lib3.$EXPECT)($L0, 'TopLevelStatements ""'), function(value) {
7405  return [];
7406});
7407var TopLevelStatements$$ = [TopLevelStatements$0, TopLevelStatements$1, TopLevelStatements$2];
7408function TopLevelStatements(ctx, state2) {
7409  return (0, import_lib3.$EVENT_C)(ctx, state2, "TopLevelStatements", TopLevelStatements$$);
7410}
7411var NestedTopLevelStatements$0 = (0, import_lib3.$TS)((0, import_lib3.$S)(Nested, TopLevelSingleLineStatements), function($skip, $loc, $0, $1, $2) {
7412  var nested = $1;
7413  var statements = $2;
7414  return [
7415    [nested, ...statements[0]],
7416    ...statements.slice(1).map((s) => ["", ...s])
7417  ];
7418});
7419function NestedTopLevelStatements(ctx, state2) {
7420  return (0, import_lib3.$EVENT)(ctx, state2, "NestedTopLevelStatements", NestedTopLevelStatements$0);
7421}
7422var TopLevelSingleLineStatements$0 = (0, import_lib3.$P)(TopLevelStatement);
7423function TopLevelSingleLineStatements(ctx, state2) {
7424  return (0, import_lib3.$EVENT)(ctx, state2, "TopLevelSingleLineStatements", TopLevelSingleLineStatements$0);
7425}
7426var TopLevelStatement$0 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$N)(EOS), (0, import_lib3.$E)(_), ModuleItem, StatementDelimiter), function($skip, $loc, $0, $1, $2, $3, $4) {
7427  var ws = $2;
7428  var statement = $3;
7429  var delimiter = $4;
7430  statement = prepend(ws, statement);
7431  return [statement, delimiter];
7432});
7433function TopLevelStatement(ctx, state2) {
7434  return (0, import_lib3.$EVENT)(ctx, state2, "TopLevelStatement", TopLevelStatement$0);
7435}
7436var ExtendedCommaExpression$0 = NonAssignmentExtendedExpression;
7437var ExtendedCommaExpression$1 = CommaExpression;
7438var ExtendedCommaExpression$$ = [ExtendedCommaExpression$0, ExtendedCommaExpression$1];
7439function ExtendedCommaExpression(ctx, state2) {
7440  return (0, import_lib3.$EVENT_C)(ctx, state2, "ExtendedCommaExpression", ExtendedCommaExpression$$);
7441}
7442var ExtendedExpression$0 = NonAssignmentExtendedExpression;
7443var ExtendedExpression$1 = AssignmentExpression;
7444var ExtendedExpression$$ = [ExtendedExpression$0, ExtendedExpression$1];
7445function ExtendedExpression(ctx, state2) {
7446  return (0, import_lib3.$EVENT_C)(ctx, state2, "ExtendedExpression", ExtendedExpression$$);
7447}
7448var SingleLineExtendedExpression$0 = NonAssignmentExtendedExpression;
7449var SingleLineExtendedExpression$1 = SingleLineAssignmentExpression;
7450var SingleLineExtendedExpression$$ = [SingleLineExtendedExpression$0, SingleLineExtendedExpression$1];
7451function SingleLineExtendedExpression(ctx, state2) {
7452  return (0, import_lib3.$EVENT_C)(ctx, state2, "SingleLineExtendedExpression", SingleLineExtendedExpression$$);
7453}
7454var NonPipelineExtendedExpression$0 = NonAssignmentExtendedExpression;
7455var NonPipelineExtendedExpression$1 = NonPipelineAssignmentExpression;
7456var NonPipelineExtendedExpression$$ = [NonPipelineExtendedExpression$0, NonPipelineExtendedExpression$1];
7457function NonPipelineExtendedExpression(ctx, state2) {
7458  return (0, import_lib3.$EVENT_C)(ctx, state2, "NonPipelineExtendedExpression", NonPipelineExtendedExpression$$);
7459}
7460var NonAssignmentExtendedExpression$0 = NestedNonAssignmentExtendedExpression;
7461var NonAssignmentExtendedExpression$1 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$E)(_), ExpressionizedStatementWithTrailingCallExpressions), function($skip, $loc, $0, $1, $2) {
7462  return prepend($1, $2);
7463});
7464var NonAssignmentExtendedExpression$$ = [NonAssignmentExtendedExpression$0, NonAssignmentExtendedExpression$1];
7465function NonAssignmentExtendedExpression(ctx, state2) {
7466  return (0, import_lib3.$EVENT_C)(ctx, state2, "NonAssignmentExtendedExpression", NonAssignmentExtendedExpression$$);
7467}
7468var NestedNonAssignmentExtendedExpression$0 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$Y)(EOS), PushIndent, (0, import_lib3.$E)((0, import_lib3.$S)(Nested, ExpressionizedStatementWithTrailingCallExpressions)), PopIndent, (0, import_lib3.$E)(AllowedTrailingCallExpressions)), function($skip, $loc, $0, $1, $2, $3, $4, $5) {
7469  var expression = $3;
7470  var trailing = $5;
7471  if (!expression)
7472    return $skip;
7473  if (!trailing)
7474    return expression;
7475  return {
7476    type: "CallExpression",
7477    children: [expression, ...trailing.flat()]
7478  };
7479});
7480function NestedNonAssignmentExtendedExpression(ctx, state2) {
7481  return (0, import_lib3.$EVENT)(ctx, state2, "NestedNonAssignmentExtendedExpression", NestedNonAssignmentExtendedExpression$0);
7482}
7483var ExpressionizedStatementWithTrailingCallExpressions$0 = (0, import_lib3.$TS)((0, import_lib3.$S)(ExpressionizedStatement, (0, import_lib3.$E)(AllowedTrailingCallExpressions)), function($skip, $loc, $0, $1, $2) {
7484  if (!$2)
7485    return $1;
7486  return {
7487    type: "CallExpression",
7488    children: [
7489      makeLeftHandSideExpression($1),
7490      $2
7491    ]
7492  };
7493});
7494function ExpressionizedStatementWithTrailingCallExpressions(ctx, state2) {
7495  return (0, import_lib3.$EVENT)(ctx, state2, "ExpressionizedStatementWithTrailingCallExpressions", ExpressionizedStatementWithTrailingCallExpressions$0);
7496}
7497var ExpressionizedStatement$0 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$EXPECT)($R0, "ExpressionizedStatement /(?=async|debugger|if|unless|comptime|do|for|loop|until|while|switch|throw|try)/"), StatementExpression), function($skip, $loc, $0, $1, $2) {
7498  var statement = $2;
7499  return {
7500    type: "StatementExpression",
7501    statement,
7502    children: [statement]
7503  };
7504});
7505function ExpressionizedStatement(ctx, state2) {
7506  return (0, import_lib3.$EVENT)(ctx, state2, "ExpressionizedStatement", ExpressionizedStatement$0);
7507}
7508var StatementExpression$0 = DebuggerStatement;
7509var StatementExpression$1 = (0, import_lib3.$TS)((0, import_lib3.$S)(IfStatement), function($skip, $loc, $0, $1) {
7510  if (!$1.else && $1.then.implicit)
7511    return $skip;
7512  return $1;
7513});
7514var StatementExpression$2 = (0, import_lib3.$TS)((0, import_lib3.$S)(IterationExpression), function($skip, $loc, $0, $1) {
7515  if ($1.block.implicit && $1.subtype !== "DoStatement" && $1.subtype !== "ComptimeStatement") {
7516    return $skip;
7517  }
7518  return $1;
7519});
7520var StatementExpression$3 = SwitchStatement;
7521var StatementExpression$4 = ThrowStatement;
7522var StatementExpression$5 = TryStatement;
7523var StatementExpression$$ = [StatementExpression$0, StatementExpression$1, StatementExpression$2, StatementExpression$3, StatementExpression$4, StatementExpression$5];
7524function StatementExpression(ctx, state2) {
7525  return (0, import_lib3.$EVENT_C)(ctx, state2, "StatementExpression", StatementExpression$$);
7526}
7527var CommaExpression$0 = (0, import_lib3.$TS)((0, import_lib3.$S)(AssignmentExpression, (0, import_lib3.$Q)((0, import_lib3.$S)(CommaDelimiter, AssignmentExpression))), function($skip, $loc, $0, $1, $2) {
7528  if ($2.length == 0)
7529    return $1;
7530  return $0;
7531});
7532function CommaExpression(ctx, state2) {
7533  return (0, import_lib3.$EVENT)(ctx, state2, "CommaExpression", CommaExpression$0);
7534}
7535var Arguments$0 = ExplicitArguments;
7536var Arguments$1 = (0, import_lib3.$TS)((0, import_lib3.$S)(ForbidTrailingMemberProperty, (0, import_lib3.$E)(ImplicitArguments), RestoreTrailingMemberProperty), function($skip, $loc, $0, $1, $2, $3) {
7537  var args = $2;
7538  if (args)
7539    return args;
7540  return $skip;
7541});
7542var Arguments$$ = [Arguments$0, Arguments$1];
7543function Arguments(ctx, state2) {
7544  return (0, import_lib3.$EVENT_C)(ctx, state2, "Arguments", Arguments$$);
7545}
7546var ImplicitArguments$0 = (0, import_lib3.$TS)((0, import_lib3.$S)(ApplicationStart, InsertOpenParen, (0, import_lib3.$E)(Trimmed_), NonPipelineArgumentList, InsertCloseParen), function($skip, $loc, $0, $1, $2, $3, $4, $5) {
7547  var open = $2;
7548  var ws = $3;
7549  var args = $4;
7550  var close = $5;
7551  if (skipImplicitArguments(args))
7552    return $skip;
7553  return {
7554    type: "Call",
7555    args,
7556    children: [open, ws, args, close]
7557  };
7558});
7559function ImplicitArguments(ctx, state2) {
7560  return (0, import_lib3.$EVENT)(ctx, state2, "ImplicitArguments", ImplicitArguments$0);
7561}
7562var ExplicitArguments$0 = (0, import_lib3.$TS)((0, import_lib3.$S)(OpenParen, (0, import_lib3.$E)((0, import_lib3.$S)(ArgumentList, (0, import_lib3.$E)((0, import_lib3.$S)(__, Comma)))), __, CloseParen), function($skip, $loc, $0, $1, $2, $3, $4) {
7563  var open = $1;
7564  var args = $2;
7565  var ws = $3;
7566  var close = $4;
7567  if (args) {
7568    if (args[1]) {
7569      args = [...args[0], args[1]];
7570    } else {
7571      args = args[0];
7572    }
7573  } else {
7574    args = [];
7575  }
7576  return {
7577    type: "Call",
7578    args,
7579    children: [open, args, ws, close]
7580  };
7581});
7582function ExplicitArguments(ctx, state2) {
7583  return (0, import_lib3.$EVENT)(ctx, state2, "ExplicitArguments", ExplicitArguments$0);
7584}
7585var ApplicationStart$0 = (0, import_lib3.$S)(IndentedApplicationAllowed, (0, import_lib3.$Y)((0, import_lib3.$S)(IndentedFurther, (0, import_lib3.$N)(IdentifierBinaryOp), (0, import_lib3.$N)(AccessStart))));
7586var ApplicationStart$1 = (0, import_lib3.$S)((0, import_lib3.$N)(EOS), (0, import_lib3.$Y)((0, import_lib3.$S)(_, (0, import_lib3.$C)(BracedApplicationAllowed, (0, import_lib3.$N)((0, import_lib3.$EXPECT)($L1, 'ApplicationStart "{"'))), (0, import_lib3.$N)(ForbiddenImplicitCalls))));
7587var ApplicationStart$$ = [ApplicationStart$0, ApplicationStart$1];
7588function ApplicationStart(ctx, state2) {
7589  return (0, import_lib3.$EVENT_C)(ctx, state2, "ApplicationStart", ApplicationStart$$);
7590}
7591var ForbiddenImplicitCalls$0 = ReservedBinary;
7592var ForbiddenImplicitCalls$1 = (0, import_lib3.$EXPECT)($L2, 'ForbiddenImplicitCalls "/ "');
7593var ForbiddenImplicitCalls$2 = (0, import_lib3.$S)((0, import_lib3.$Y)((0, import_lib3.$S)((0, import_lib3.$R$0)((0, import_lib3.$EXPECT)($R1, "ForbiddenImplicitCalls /&(?=\\s)/")), (0, import_lib3.$N)((0, import_lib3.$S)(NotDedented, (0, import_lib3.$C)(Ampersand, ReservedBinary))), (0, import_lib3.$C)(IndentedFurther, (0, import_lib3.$N)(EOS)))), BinaryOpRHS);
7594var ForbiddenImplicitCalls$3 = (0, import_lib3.$S)(ClassImplicitCallForbidden, (0, import_lib3.$C)(Class, AtAt));
7595var ForbiddenImplicitCalls$4 = (0, import_lib3.$S)(Identifier, (0, import_lib3.$EXPECT)($L3, 'ForbiddenImplicitCalls "="'), Whitespace);
7596var ForbiddenImplicitCalls$5 = (0, import_lib3.$TS)((0, import_lib3.$S)(Identifier, (0, import_lib3.$N)((0, import_lib3.$EXPECT)($L4, 'ForbiddenImplicitCalls "("'))), function($skip, $loc, $0, $1, $2) {
7597  var id = $1;
7598  if (state.operators.has(id.name))
7599    return $0;
7600  return $skip;
7601});
7602var ForbiddenImplicitCalls$6 = (0, import_lib3.$TS)((0, import_lib3.$S)(OmittedNegation, (0, import_lib3.$E)(_), Identifier), function($skip, $loc, $0, $1, $2, $3) {
7603  var id = $3;
7604  if (state.operators.has(id.name))
7605    return $0;
7606  return $skip;
7607});
7608var ForbiddenImplicitCalls$7 = (0, import_lib3.$S)(PostfixStatement, NoBlock);
7609var ForbiddenImplicitCalls$8 = (0, import_lib3.$EXPECT)($L5, 'ForbiddenImplicitCalls "... "');
7610var ForbiddenImplicitCalls$$ = [ForbiddenImplicitCalls$0, ForbiddenImplicitCalls$1, ForbiddenImplicitCalls$2, ForbiddenImplicitCalls$3, ForbiddenImplicitCalls$4, ForbiddenImplicitCalls$5, ForbiddenImplicitCalls$6, ForbiddenImplicitCalls$7, ForbiddenImplicitCalls$8];
7611function ForbiddenImplicitCalls(ctx, state2) {
7612  return (0, import_lib3.$EVENT_C)(ctx, state2, "ForbiddenImplicitCalls", ForbiddenImplicitCalls$$);
7613}
7614var ReservedBinary$0 = (0, import_lib3.$R$0)((0, import_lib3.$EXPECT)($R2, "ReservedBinary /(as|of|satisfies|then|when|implements|xor|xnor)(?!\\p{ID_Continue}|[\\u200C\\u200D$])/"));
7615function ReservedBinary(ctx, state2) {
7616  return (0, import_lib3.$EVENT)(ctx, state2, "ReservedBinary", ReservedBinary$0);
7617}
7618var ArgumentsWithTrailingMemberExpressions$0 = (0, import_lib3.$TS)((0, import_lib3.$S)(Arguments, AllowedTrailingMemberExpressions), function($skip, $loc, $0, $1, $2) {
7619  var args = $1;
7620  var trailing = $2;
7621  return [args, ...trailing];
7622});
7623function ArgumentsWithTrailingMemberExpressions(ctx, state2) {
7624  return (0, import_lib3.$EVENT)(ctx, state2, "ArgumentsWithTrailingMemberExpressions", ArgumentsWithTrailingMemberExpressions$0);
7625}
7626var TrailingMemberExpressions$0 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$Q)(MemberExpressionRest), (0, import_lib3.$Q)((0, import_lib3.$S)(IndentedAtLeast, (0, import_lib3.$Y)((0, import_lib3.$S)((0, import_lib3.$E)((0, import_lib3.$EXPECT)($L6, 'TrailingMemberExpressions "?"')), (0, import_lib3.$EXPECT)($L7, 'TrailingMemberExpressions "."'), (0, import_lib3.$N)((0, import_lib3.$EXPECT)($R3, "TrailingMemberExpressions /[0-9]/")))), MemberExpressionRest))), function($skip, $loc, $0, $1, $2) {
7627  return $1.concat($2.map(([ws, , memberExpressionRest]) => {
7628    if (Array.isArray(memberExpressionRest)) {
7629      return [ws, ...memberExpressionRest];
7630    }
7631    return {
7632      ...memberExpressionRest,
7633      children: [ws, ...memberExpressionRest.children]
7634    };
7635  }));
7636});
7637function TrailingMemberExpressions(ctx, state2) {
7638  return (0, import_lib3.$EVENT)(ctx, state2, "TrailingMemberExpressions", TrailingMemberExpressions$0);
7639}
7640var AllowedTrailingMemberExpressions$0 = (0, import_lib3.$T)((0, import_lib3.$S)(TrailingMemberPropertyAllowed, TrailingMemberExpressions), function(value) {
7641  return value[1];
7642});
7643var AllowedTrailingMemberExpressions$1 = (0, import_lib3.$Q)(MemberExpressionRest);
7644var AllowedTrailingMemberExpressions$$ = [AllowedTrailingMemberExpressions$0, AllowedTrailingMemberExpressions$1];
7645function AllowedTrailingMemberExpressions(ctx, state2) {
7646  return (0, import_lib3.$EVENT_C)(ctx, state2, "AllowedTrailingMemberExpressions", AllowedTrailingMemberExpressions$$);
7647}
7648var TrailingCallExpressions$0 = (0, import_lib3.$P)((0, import_lib3.$S)(IndentedAtLeast, (0, import_lib3.$Y)((0, import_lib3.$S)((0, import_lib3.$E)((0, import_lib3.$EXPECT)($L6, 'TrailingCallExpressions "?"')), (0, import_lib3.$EXPECT)($L7, 'TrailingCallExpressions "."'), (0, import_lib3.$N)((0, import_lib3.$R$0)((0, import_lib3.$EXPECT)($R3, "TrailingCallExpressions /[0-9]/"))))), (0, import_lib3.$P)(CallExpressionRest)));
7649function TrailingCallExpressions(ctx, state2) {
7650  return (0, import_lib3.$EVENT)(ctx, state2, "TrailingCallExpressions", TrailingCallExpressions$0);
7651}
7652var AllowedTrailingCallExpressions$0 = (0, import_lib3.$T)((0, import_lib3.$S)(TrailingMemberPropertyAllowed, TrailingCallExpressions), function(value) {
7653  return value[1];
7654});
7655function AllowedTrailingCallExpressions(ctx, state2) {
7656  return (0, import_lib3.$EVENT)(ctx, state2, "AllowedTrailingCallExpressions", AllowedTrailingCallExpressions$0);
7657}
7658var CommaDelimiter$0 = (0, import_lib3.$S)(NotDedented, Comma);
7659function CommaDelimiter(ctx, state2) {
7660  return (0, import_lib3.$EVENT)(ctx, state2, "CommaDelimiter", CommaDelimiter$0);
7661}
7662var ArgumentList$0 = (0, import_lib3.$TS)((0, import_lib3.$S)(ArgumentPart, (0, import_lib3.$Q)((0, import_lib3.$S)(CommaDelimiter, (0, import_lib3.$N)(EOS), (0, import_lib3.$E)(_), ArgumentPart)), (0, import_lib3.$P)((0, import_lib3.$S)(CommaDelimiter, (0, import_lib3.$C)(NestedImplicitObjectLiteral, NestedArgumentList)))), function($skip, $loc, $0, $1, $2, $3) {
7663  return [
7664    $1,
7665    ...$2.flatMap(([comma, eos, ws, arg]) => [comma, prepend(ws, arg)]),
7666    ...$3.flatMap(
7667      ([comma, args]) => Array.isArray(args) ? [comma, ...args] : [comma, args]
7668    )
7669  ];
7670});
7671var ArgumentList$1 = (0, import_lib3.$TS)((0, import_lib3.$S)(NestedImplicitObjectLiteral), function($skip, $loc, $0, $1) {
7672  return [insertTrimmingSpace($1, "")];
7673});
7674var ArgumentList$2 = NestedArgumentList;
7675var ArgumentList$3 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$E)(_), ArgumentPart, (0, import_lib3.$Q)((0, import_lib3.$S)(CommaDelimiter, (0, import_lib3.$E)(_), ArgumentPart))), function($skip, $loc, $0, $1, $2, $3) {
7676  return [
7677    prepend($1, $2),
7678    ...$3.flatMap(([comma, ws, arg]) => [comma, prepend(ws, arg)])
7679  ];
7680});
7681var ArgumentList$$ = [ArgumentList$0, ArgumentList$1, ArgumentList$2, ArgumentList$3];
7682function ArgumentList(ctx, state2) {
7683  return (0, import_lib3.$EVENT_C)(ctx, state2, "ArgumentList", ArgumentList$$);
7684}
7685var NonPipelineArgumentList$0 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$N)(EOS), NonPipelineArgumentPart, (0, import_lib3.$Q)((0, import_lib3.$S)(CommaDelimiter, (0, import_lib3.$N)(EOS), (0, import_lib3.$E)(_), NonPipelineArgumentPart)), (0, import_lib3.$P)((0, import_lib3.$S)(CommaDelimiter, (0, import_lib3.$C)(NestedImplicitObjectLiteral, NestedArgumentList)))), function($skip, $loc, $0, $1, $2, $3, $4) {
7686  return [
7687    $2,
7688    ...$3.flatMap(([comma, eos, ws, arg]) => [comma, prepend(ws, arg)]),
7689    ...$4.flatMap(
7690      ([comma, args]) => Array.isArray(args) ? [comma, ...args] : [comma, args]
7691    )
7692  ];
7693});
7694var NonPipelineArgumentList$1 = (0, import_lib3.$TS)((0, import_lib3.$S)(NestedImplicitObjectLiteral, (0, import_lib3.$Q)((0, import_lib3.$S)(CommaDelimiter, (0, import_lib3.$C)(NestedImplicitObjectLiteral, NestedArgumentList)))), function($skip, $loc, $0, $1, $2) {
7695  return [
7696    insertTrimmingSpace($1, ""),
7697    ...$2.flatMap(
7698      ([comma, args]) => Array.isArray(args) ? [comma, ...args] : [comma, args]
7699    )
7700  ];
7701});
7702var NonPipelineArgumentList$2 = NestedArgumentList;
7703var NonPipelineArgumentList$3 = (0, import_lib3.$TS)((0, import_lib3.$S)(NonPipelineArgumentPart, (0, import_lib3.$Q)((0, import_lib3.$S)(CommaDelimiter, (0, import_lib3.$E)(_), NonPipelineArgumentPart))), function($skip, $loc, $0, $1, $2) {
7704  return [
7705    $1,
7706    ...$2.flatMap(([comma, ws, arg]) => [comma, prepend(ws, arg)])
7707  ];
7708});
7709var NonPipelineArgumentList$$ = [NonPipelineArgumentList$0, NonPipelineArgumentList$1, NonPipelineArgumentList$2, NonPipelineArgumentList$3];
7710function NonPipelineArgumentList(ctx, state2) {
7711  return (0, import_lib3.$EVENT_C)(ctx, state2, "NonPipelineArgumentList", NonPipelineArgumentList$$);
7712}
7713var NestedArgumentList$0 = (0, import_lib3.$TS)((0, import_lib3.$S)(PushIndent, (0, import_lib3.$Q)(NestedArgument), PopIndent), function($skip, $loc, $0, $1, $2, $3) {
7714  var args = $2;
7715  if (!args.length)
7716    return $skip;
7717  return args.flat();
7718});
7719function NestedArgumentList(ctx, state2) {
7720  return (0, import_lib3.$EVENT)(ctx, state2, "NestedArgumentList", NestedArgumentList$0);
7721}
7722var NestedArgument$0 = (0, import_lib3.$TS)((0, import_lib3.$S)(Nested, SingleLineArgumentExpressions, ParameterElementDelimiter), function($skip, $loc, $0, $1, $2, $3) {
7723  var indent = $1;
7724  var args = $2;
7725  var comma = $3;
7726  let [arg0, ...rest] = args;
7727  arg0 = [indent, ...arg0];
7728  return [arg0, ...rest, comma];
7729});
7730function NestedArgument(ctx, state2) {
7731  return (0, import_lib3.$EVENT)(ctx, state2, "NestedArgument", NestedArgument$0);
7732}
7733var SingleLineArgumentExpressions$0 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$S)((0, import_lib3.$E)(_), ArgumentPart), (0, import_lib3.$Q)((0, import_lib3.$S)((0, import_lib3.$S)((0, import_lib3.$E)(_), Comma), (0, import_lib3.$S)((0, import_lib3.$E)(_), ArgumentPart)))), function($skip, $loc, $0, $1, $2) {
7734  return [$1, ...$2.flat()];
7735});
7736function SingleLineArgumentExpressions(ctx, state2) {
7737  return (0, import_lib3.$EVENT)(ctx, state2, "SingleLineArgumentExpressions", SingleLineArgumentExpressions$0);
7738}
7739var ArgumentPart$0 = (0, import_lib3.$S)(DotDotDot, ExtendedExpression);
7740var ArgumentPart$1 = (0, import_lib3.$TS)((0, import_lib3.$S)(ExtendedExpression, (0, import_lib3.$E)(DotDotDot)), function($skip, $loc, $0, $1, $2) {
7741  if ($2) {
7742    return [$2, $1];
7743  }
7744  return $1;
7745});
7746var ArgumentPart$$ = [ArgumentPart$0, ArgumentPart$1];
7747function ArgumentPart(ctx, state2) {
7748  return (0, import_lib3.$EVENT_C)(ctx, state2, "ArgumentPart", ArgumentPart$$);
7749}
7750var NonPipelineArgumentPart$0 = (0, import_lib3.$S)(DotDotDot, NonPipelineExtendedExpression);
7751var NonPipelineArgumentPart$1 = (0, import_lib3.$TS)((0, import_lib3.$S)(NonPipelineExtendedExpression, (0, import_lib3.$E)(DotDotDot)), function($skip, $loc, $0, $1, $2) {
7752  if ($2) {
7753    return [$2, $1];
7754  }
7755  return $1;
7756});
7757var NonPipelineArgumentPart$$ = [NonPipelineArgumentPart$0, NonPipelineArgumentPart$1];
7758function NonPipelineArgumentPart(ctx, state2) {
7759  return (0, import_lib3.$EVENT_C)(ctx, state2, "NonPipelineArgumentPart", NonPipelineArgumentPart$$);
7760}
7761var BinaryOpExpression$0 = (0, import_lib3.$TS)((0, import_lib3.$S)(UnaryExpression, (0, import_lib3.$Q)(BinaryOpRHS)), function($skip, $loc, $0, $1, $2) {
7762  if (!$2.length)
7763    return $1;
7764  return processBinaryOpExpression($0);
7765});
7766function BinaryOpExpression(ctx, state2) {
7767  return (0, import_lib3.$EVENT)(ctx, state2, "BinaryOpExpression", BinaryOpExpression$0);
7768}
7769var BinaryOpRHS$0 = (0, import_lib3.$TS)((0, import_lib3.$S)(NotDedented, IsLike, (0, import_lib3.$E)(_), PatternExpressionList), function($skip, $loc, $0, $1, $2, $3, $4) {
7770  var ws1 = $1;
7771  var op = $2;
7772  var ws2 = $3;
7773  var patterns = $4;
7774  return [ws1, op, ws2, patterns];
7775});
7776var BinaryOpRHS$1 = (0, import_lib3.$TS)((0, import_lib3.$S)(BinaryOp, RHS), function($skip, $loc, $0, $1, $2) {
7777  var op = $1;
7778  var rhs = $2;
7779  return [[], op, [], rhs];
7780});
7781var BinaryOpRHS$2 = (0, import_lib3.$TS)((0, import_lib3.$S)(NewlineBinaryOpAllowed, NotDedentedBinaryOp, WRHS), function($skip, $loc, $0, $1, $2, $3) {
7782  var op = $2;
7783  var rhs = $3;
7784  return [...op, ...rhs];
7785});
7786var BinaryOpRHS$3 = (0, import_lib3.$T)((0, import_lib3.$S)((0, import_lib3.$N)(NewlineBinaryOpAllowed), SingleLineBinaryOpRHS), function(value) {
7787  return value[1];
7788});
7789var BinaryOpRHS$$ = [BinaryOpRHS$0, BinaryOpRHS$1, BinaryOpRHS$2, BinaryOpRHS$3];
7790function BinaryOpRHS(ctx, state2) {
7791  return (0, import_lib3.$EVENT_C)(ctx, state2, "BinaryOpRHS", BinaryOpRHS$$);
7792}
7793var IsLike$0 = (0, import_lib3.$TS)((0, import_lib3.$S)(Is, (0, import_lib3.$E)(_), (0, import_lib3.$E)((0, import_lib3.$S)(OmittedNegation, (0, import_lib3.$E)(_))), Like), function($skip, $loc, $0, $1, $2, $3, $4) {
7794  var not = $3;
7795  return {
7796    type: "PatternTest",
7797    children: $0,
7798    special: true,
7799    negated: !!not
7800  };
7801});
7802function IsLike(ctx, state2) {
7803  return (0, import_lib3.$EVENT)(ctx, state2, "IsLike", IsLike$0);
7804}
7805var WRHS$0 = (0, import_lib3.$TS)((0, import_lib3.$S)(PushIndent, (0, import_lib3.$E)((0, import_lib3.$S)((0, import_lib3.$S)(Nested, (0, import_lib3.$E)(_)), RHS)), PopIndent), function($skip, $loc, $0, $1, $2, $3) {
7806  var wrhs = $2;
7807  if (!wrhs)
7808    return $skip;
7809  return wrhs;
7810});
7811var WRHS$1 = (0, import_lib3.$S)((0, import_lib3.$C)((0, import_lib3.$S)(EOS, __), _), RHS);
7812var WRHS$$ = [WRHS$0, WRHS$1];
7813function WRHS(ctx, state2) {
7814  return (0, import_lib3.$EVENT_C)(ctx, state2, "WRHS", WRHS$$);
7815}
7816var SingleLineBinaryOpRHS$0 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$E)(_), BinaryOp, (0, import_lib3.$C)((0, import_lib3.$S)(EOS, __), _), RHS), function($skip, $loc, $0, $1, $2, $3, $4) {
7817  var ws1 = $1;
7818  var op = $2;
7819  var ws2 = $3;
7820  var rhs = $4;
7821  return [ws1 || [], op, ws2, rhs];
7822});
7823function SingleLineBinaryOpRHS(ctx, state2) {
7824  return (0, import_lib3.$EVENT)(ctx, state2, "SingleLineBinaryOpRHS", SingleLineBinaryOpRHS$0);
7825}
7826var RHS$0 = ExpressionizedStatementWithTrailingCallExpressions;
7827var RHS$1 = UnaryExpression;
7828var RHS$$ = [RHS$0, RHS$1];
7829function RHS(ctx, state2) {
7830  return (0, import_lib3.$EVENT_C)(ctx, state2, "RHS", RHS$$);
7831}
7832var UnaryExpression$0 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$Q)(UnaryOp), UnaryBody, (0, import_lib3.$E)(UnaryPostfix)), function($skip, $loc, $0, $1, $2, $3) {
7833  var pre = $1;
7834  var exp = $2;
7835  var post = $3;
7836  return processUnaryExpression(pre, exp, post);
7837});
7838var UnaryExpression$1 = (0, import_lib3.$TS)((0, import_lib3.$S)(CoffeeDoEnabled, Do, __, (0, import_lib3.$C)(ArrowFunction, (0, import_lib3.$S)(LeftHandSideExpression, (0, import_lib3.$N)((0, import_lib3.$S)(__, AssignmentOpSymbol))), ExtendedExpression)), function($skip, $loc, $0, $1, $2, $3, $4) {
7839  var ws = $3;
7840  var exp = $4;
7841  return processCoffeeDo(ws, exp);
7842});
7843var UnaryExpression$$ = [UnaryExpression$0, UnaryExpression$1];
7844function UnaryExpression(ctx, state2) {
7845  return (0, import_lib3.$EVENT_C)(ctx, state2, "UnaryExpression", UnaryExpression$$);
7846}
7847var UnaryWithoutParenthesizedAssignment$0 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$Q)(UnaryOp), UnaryWithoutParenthesizedAssignmentBody, (0, import_lib3.$E)(UnaryPostfix)), function($skip, $loc, $0, $1, $2, $3) {
7848  var pre = $1;
7849  var exp = $2;
7850  var post = $3;
7851  return processUnaryExpression(pre, exp, post);
7852});
7853function UnaryWithoutParenthesizedAssignment(ctx, state2) {
7854  return (0, import_lib3.$EVENT)(ctx, state2, "UnaryWithoutParenthesizedAssignment", UnaryWithoutParenthesizedAssignment$0);
7855}
7856var UnaryBody$0 = ParenthesizedAssignment;
7857var UnaryBody$1 = UpdateExpression;
7858var UnaryBody$2 = ExpressionizedStatementWithTrailingCallExpressions;
7859var UnaryBody$3 = NestedNonAssignmentExtendedExpression;
7860var UnaryBody$$ = [UnaryBody$0, UnaryBody$1, UnaryBody$2, UnaryBody$3];
7861function UnaryBody(ctx, state2) {
7862  return (0, import_lib3.$EVENT_C)(ctx, state2, "UnaryBody", UnaryBody$$);
7863}
7864var UnaryWithoutParenthesizedAssignmentBody$0 = UpdateExpression;
7865var UnaryWithoutParenthesizedAssignmentBody$1 = ExpressionizedStatementWithTrailingCallExpressions;
7866var UnaryWithoutParenthesizedAssignmentBody$2 = NestedNonAssignmentExtendedExpression;
7867var UnaryWithoutParenthesizedAssignmentBody$$ = [UnaryWithoutParenthesizedAssignmentBody$0, UnaryWithoutParenthesizedAssignmentBody$1, UnaryWithoutParenthesizedAssignmentBody$2];
7868function UnaryWithoutParenthesizedAssignmentBody(ctx, state2) {
7869  return (0, import_lib3.$EVENT_C)(ctx, state2, "UnaryWithoutParenthesizedAssignmentBody", UnaryWithoutParenthesizedAssignmentBody$$);
7870}
7871var ParenthesizedAssignment$0 = (0, import_lib3.$S)(InsertOpenParen, (0, import_lib3.$C)(ActualAssignment, ArrowFunction), InsertCloseParen);
7872function ParenthesizedAssignment(ctx, state2) {
7873  return (0, import_lib3.$EVENT)(ctx, state2, "ParenthesizedAssignment", ParenthesizedAssignment$0);
7874}
7875var UnaryPostfix$0 = QuestionMark;
7876var UnaryPostfix$1 = (0, import_lib3.$P)(TypePostfix);
7877var UnaryPostfix$$ = [UnaryPostfix$0, UnaryPostfix$1];
7878function UnaryPostfix(ctx, state2) {
7879  return (0, import_lib3.$EVENT_C)(ctx, state2, "UnaryPostfix", UnaryPostfix$$);
7880}
7881var TypePostfix$0 = (0, import_lib3.$TS)((0, import_lib3.$S)(_, NWTypePostfix), function($skip, $loc, $0, $1, $2) {
7882  var ws = $1;
7883  var postfix = $2;
7884  return prepend(ws, postfix);
7885});
7886function TypePostfix(ctx, state2) {
7887  return (0, import_lib3.$EVENT)(ctx, state2, "TypePostfix", TypePostfix$0);
7888}
7889var Tuple$0 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$EXPECT)($L8, 'Tuple "tuple"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
7890  return {
7891    $loc,
7892    token: "readonly unknown[] | []"
7893  };
7894});
7895function Tuple(ctx, state2) {
7896  return (0, import_lib3.$EVENT)(ctx, state2, "Tuple", Tuple$0);
7897}
7898var NWTypePostfix$0 = (0, import_lib3.$TS)((0, import_lib3.$S)(As, _, Tuple), function($skip, $loc, $0, $1, $2, $3) {
7899  return {
7900    ts: true,
7901    children: [{ $loc: $1.$loc, token: "satisfies" }, $2, $3]
7902  };
7903});
7904var NWTypePostfix$1 = (0, import_lib3.$TS)((0, import_lib3.$S)(As, (0, import_lib3.$E)(ExclamationPoint), Type), function($skip, $loc, $0, $1, $2, $3) {
7905  var as = $1;
7906  var ex = $2;
7907  var type = $3;
7908  let children;
7909  if (ex) {
7910    children = [{ $loc: ex.$loc, token: "as unknown " }, as, type];
7911  } else {
7912    children = [as, type];
7913  }
7914  return { ts: true, children };
7915});
7916var NWTypePostfix$2 = (0, import_lib3.$TS)((0, import_lib3.$S)(Satisfies, Type), function($skip, $loc, $0, $1, $2) {
7917  return { ts: true, children: $0 };
7918});
7919var NWTypePostfix$$ = [NWTypePostfix$0, NWTypePostfix$1, NWTypePostfix$2];
7920function NWTypePostfix(ctx, state2) {
7921  return (0, import_lib3.$EVENT_C)(ctx, state2, "NWTypePostfix", NWTypePostfix$$);
7922}
7923var UpdateExpression$0 = (0, import_lib3.$TS)((0, import_lib3.$S)(UpdateExpressionSymbol, UnaryWithoutParenthesizedAssignment), function($skip, $loc, $0, $1, $2) {
7924  return {
7925    type: "UpdateExpression",
7926    assigned: $2,
7927    children: $0
7928  };
7929});
7930var UpdateExpression$1 = (0, import_lib3.$TS)((0, import_lib3.$S)(LeftHandSideExpression, (0, import_lib3.$E)((0, import_lib3.$S)(UpdateExpressionSymbol, (0, import_lib3.$EXPECT)($R4, "UpdateExpression /(?!\\p{ID_Start}|[_$0-9(\\[{])/")))), function($skip, $loc, $0, $1, $2) {
7931  if (!$2)
7932    return $1;
7933  return {
7934    type: "UpdateExpression",
7935    assigned: $1,
7936    children: [$1, $2[0]]
7937  };
7938});
7939var UpdateExpression$$ = [UpdateExpression$0, UpdateExpression$1];
7940function UpdateExpression(ctx, state2) {
7941  return (0, import_lib3.$EVENT_C)(ctx, state2, "UpdateExpression", UpdateExpression$$);
7942}
7943var UpdateExpressionSymbol$0 = (0, import_lib3.$TV)((0, import_lib3.$C)((0, import_lib3.$EXPECT)($L9, 'UpdateExpressionSymbol "++"'), (0, import_lib3.$EXPECT)($L10, 'UpdateExpressionSymbol "--"')), function($skip, $loc, $0, $1) {
7944  return { $loc, token: $1 };
7945});
7946var UpdateExpressionSymbol$1 = (0, import_lib3.$TV)((0, import_lib3.$EXPECT)($L11, 'UpdateExpressionSymbol "\u29FA"'), function($skip, $loc, $0, $1) {
7947  return { $loc, token: "++" };
7948});
7949var UpdateExpressionSymbol$2 = (0, import_lib3.$TV)((0, import_lib3.$EXPECT)($L12, 'UpdateExpressionSymbol "\u2014"'), function($skip, $loc, $0, $1) {
7950  return { $loc, token: "--" };
7951});
7952var UpdateExpressionSymbol$$ = [UpdateExpressionSymbol$0, UpdateExpressionSymbol$1, UpdateExpressionSymbol$2];
7953function UpdateExpressionSymbol(ctx, state2) {
7954  return (0, import_lib3.$EVENT_C)(ctx, state2, "UpdateExpressionSymbol", UpdateExpressionSymbol$$);
7955}
7956var AssignmentExpression$0 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$E)(_), ActualAssignment), function($skip, $loc, $0, $1, $2) {
7957  var ws = $1;
7958  var assign = $2;
7959  return prepend(ws, assign);
7960});
7961var AssignmentExpression$1 = PipelineExpression;
7962var AssignmentExpression$2 = SingleLineAssignmentExpression;
7963var AssignmentExpression$3 = (0, import_lib3.$S)((0, import_lib3.$S)(EOS, (0, import_lib3.$E)(_)), AssignmentExpressionTail);
7964var AssignmentExpression$$ = [AssignmentExpression$0, AssignmentExpression$1, AssignmentExpression$2, AssignmentExpression$3];
7965function AssignmentExpression(ctx, state2) {
7966  return (0, import_lib3.$EVENT_C)(ctx, state2, "AssignmentExpression", AssignmentExpression$$);
7967}
7968var NonPipelineAssignmentExpression$0 = NonPipelineSingleLineAssignmentExpression;
7969var NonPipelineAssignmentExpression$1 = (0, import_lib3.$S)((0, import_lib3.$S)(EOS, (0, import_lib3.$E)(_)), NonPipelineAssignmentExpressionTail);
7970var NonPipelineAssignmentExpression$$ = [NonPipelineAssignmentExpression$0, NonPipelineAssignmentExpression$1];
7971function NonPipelineAssignmentExpression(ctx, state2) {
7972  return (0, import_lib3.$EVENT_C)(ctx, state2, "NonPipelineAssignmentExpression", NonPipelineAssignmentExpression$$);
7973}
7974var SingleLineAssignmentExpression$0 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$E)(_), AssignmentExpressionTail), function($skip, $loc, $0, $1, $2) {
7975  var ws = $1;
7976  var tail = $2;
7977  return prepend(ws, tail);
7978});
7979function SingleLineAssignmentExpression(ctx, state2) {
7980  return (0, import_lib3.$EVENT)(ctx, state2, "SingleLineAssignmentExpression", SingleLineAssignmentExpression$0);
7981}
7982var NonPipelineSingleLineAssignmentExpression$0 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$E)(_), NonPipelineAssignmentExpressionTail), function($skip, $loc, $0, $1, $2) {
7983  var ws = $1;
7984  var tail = $2;
7985  return prepend(ws, tail);
7986});
7987function NonPipelineSingleLineAssignmentExpression(ctx, state2) {
7988  return (0, import_lib3.$EVENT)(ctx, state2, "NonPipelineSingleLineAssignmentExpression", NonPipelineSingleLineAssignmentExpression$0);
7989}
7990var AssignmentExpressionTail$0 = YieldExpression;
7991var AssignmentExpressionTail$1 = ArrowFunction;
7992var AssignmentExpressionTail$2 = ActualAssignment;
7993var AssignmentExpressionTail$3 = ConditionalExpression;
7994var AssignmentExpressionTail$$ = [AssignmentExpressionTail$0, AssignmentExpressionTail$1, AssignmentExpressionTail$2, AssignmentExpressionTail$3];
7995function AssignmentExpressionTail(ctx, state2) {
7996  return (0, import_lib3.$EVENT_C)(ctx, state2, "AssignmentExpressionTail", AssignmentExpressionTail$$);
7997}
7998var NonPipelineAssignmentExpressionTail$0 = YieldExpression;
7999var NonPipelineAssignmentExpressionTail$1 = ArrowFunction;
8000var NonPipelineAssignmentExpressionTail$2 = NonPipelineActualAssignment;
8001var NonPipelineAssignmentExpressionTail$3 = ConditionalExpression;
8002var NonPipelineAssignmentExpressionTail$$ = [NonPipelineAssignmentExpressionTail$0, NonPipelineAssignmentExpressionTail$1, NonPipelineAssignmentExpressionTail$2, NonPipelineAssignmentExpressionTail$3];
8003function NonPipelineAssignmentExpressionTail(ctx, state2) {
8004  return (0, import_lib3.$EVENT_C)(ctx, state2, "NonPipelineAssignmentExpressionTail", NonPipelineAssignmentExpressionTail$$);
8005}
8006var ActualAssignment$0 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$P)((0, import_lib3.$S)(NotDedented, UpdateExpression, WAssignmentOp)), MaybeNestedExtendedExpression), function($skip, $loc, $0, $1, $2) {
8007  $1 = $1.map((x) => [x[0], x[1], ...x[2]]);
8008  $0 = [$1, $2];
8009  return {
8010    type: "AssignmentExpression",
8011    children: $0,
8012    // NOTE: This null marks the assignment for later processing to distinguish it
8013    // from fake assignments that only add a name to a scope
8014    names: null,
8015    lhs: $1,
8016    assigned: $1[0][1],
8017    expression: $2
8018  };
8019});
8020function ActualAssignment(ctx, state2) {
8021  return (0, import_lib3.$EVENT)(ctx, state2, "ActualAssignment", ActualAssignment$0);
8022}
8023var NonPipelineActualAssignment$0 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$P)((0, import_lib3.$S)(NotDedented, UpdateExpression, WAssignmentOp)), MaybeNestedNonPipelineExtendedExpression), function($skip, $loc, $0, $1, $2) {
8024  $1 = $1.map((x) => [x[0], x[1], ...x[2]]);
8025  $0 = [$1, $2];
8026  return {
8027    type: "AssignmentExpression",
8028    children: $0,
8029    // NOTE: This null marks the assignment for later processing to distinguish it
8030    // from fake assignments that only add a name to a scope
8031    names: null,
8032    lhs: $1,
8033    assigned: $1[0][1],
8034    expression: $2
8035  };
8036});
8037function NonPipelineActualAssignment(ctx, state2) {
8038  return (0, import_lib3.$EVENT)(ctx, state2, "NonPipelineActualAssignment", NonPipelineActualAssignment$0);
8039}
8040var YieldExpression$0 = (0, import_lib3.$TS)((0, import_lib3.$S)(Yield, (0, import_lib3.$E)((0, import_lib3.$S)((0, import_lib3.$E)((0, import_lib3.$S)((0, import_lib3.$E)(_), Star)), MaybeParenNestedExtendedExpression))), function($skip, $loc, $0, $1, $2) {
8041  if ($2) {
8042    const [star, expression] = $2;
8043    return {
8044      type: "YieldExpression",
8045      star,
8046      expression,
8047      children: [$1, star, expression]
8048    };
8049  }
8050  return {
8051    type: "YieldExpression",
8052    children: [$1]
8053  };
8054});
8055function YieldExpression(ctx, state2) {
8056  return (0, import_lib3.$EVENT)(ctx, state2, "YieldExpression", YieldExpression$0);
8057}
8058var ArrowFunction$0 = ThinArrowFunction;
8059var ArrowFunction$1 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$E)((0, import_lib3.$S)(Async, _)), ArrowParameters, (0, import_lib3.$E)(ReturnTypeSuffix), FatArrow, FatArrowBody), function($skip, $loc, $0, $1, $2, $3, $4, $5) {
8060  var async = $1;
8061  var parameters = $2;
8062  var suffix = $3;
8063  var arrow = $4;
8064  var expOrBlock = $5;
8065  if (!async)
8066    async = [];
8067  return {
8068    type: "ArrowFunction",
8069    signature: {
8070      modifier: {
8071        async: !!async.length
8072      },
8073      returnType: suffix
8074    },
8075    parameters,
8076    returnType: suffix,
8077    async,
8078    block: expOrBlock,
8079    children: [async, parameters, suffix, arrow, expOrBlock]
8080  };
8081});
8082var ArrowFunction$$ = [ArrowFunction$0, ArrowFunction$1];
8083function ArrowFunction(ctx, state2) {
8084  return (0, import_lib3.$EVENT_C)(ctx, state2, "ArrowFunction", ArrowFunction$$);
8085}
8086var FatArrow$0 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$E)(_), FatArrowToken), function($skip, $loc, $0, $1, $2) {
8087  var ws = $1;
8088  var arrow = $2;
8089  if (!ws)
8090    ws = " ";
8091  return [ws, arrow];
8092});
8093function FatArrow(ctx, state2) {
8094  return (0, import_lib3.$EVENT)(ctx, state2, "FatArrow", FatArrow$0);
8095}
8096var FatArrowToken$0 = (0, import_lib3.$TV)((0, import_lib3.$C)((0, import_lib3.$EXPECT)($L13, 'FatArrowToken "=>"'), (0, import_lib3.$EXPECT)($L14, 'FatArrowToken "\u21D2"')), function($skip, $loc, $0, $1) {
8097  return { $loc, token: "=>" };
8098});
8099function FatArrowToken(ctx, state2) {
8100  return (0, import_lib3.$EVENT)(ctx, state2, "FatArrowToken", FatArrowToken$0);
8101}
8102var TrailingDeclaration$0 = (0, import_lib3.$S)((0, import_lib3.$E)(_), (0, import_lib3.$C)(ConstAssignment, LetAssignment));
8103function TrailingDeclaration(ctx, state2) {
8104  return (0, import_lib3.$EVENT)(ctx, state2, "TrailingDeclaration", TrailingDeclaration$0);
8105}
8106var TrailingPipe$0 = (0, import_lib3.$S)((0, import_lib3.$E)(_), Pipe);
8107function TrailingPipe(ctx, state2) {
8108  return (0, import_lib3.$EVENT)(ctx, state2, "TrailingPipe", TrailingPipe$0);
8109}
8110var FatArrowBody$0 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$N)(EOS), (0, import_lib3.$N)((0, import_lib3.$S)((0, import_lib3.$E)(_), ExpressionizedStatement)), NonPipelinePostfixedExpression, (0, import_lib3.$N)(TrailingDeclaration), (0, import_lib3.$N)(TrailingPipe), (0, import_lib3.$N)(SemicolonDelimiter)), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6) {
8111  var exp = $3;
8112  if (exp.type === "ObjectExpression") {
8113    exp = makeLeftHandSideExpression(exp);
8114  }
8115  const expressions = [["", exp]];
8116  return {
8117    type: "BlockStatement",
8118    bare: true,
8119    expressions,
8120    children: [expressions],
8121    implicitlyReturned: true
8122  };
8123});
8124var FatArrowBody$1 = NoCommaBracedOrEmptyBlock;
8125var FatArrowBody$$ = [FatArrowBody$0, FatArrowBody$1];
8126function FatArrowBody(ctx, state2) {
8127  return (0, import_lib3.$EVENT_C)(ctx, state2, "FatArrowBody", FatArrowBody$$);
8128}
8129var ConditionalExpression$0 = (0, import_lib3.$TS)((0, import_lib3.$S)(ShortCircuitExpression, (0, import_lib3.$E)(TernaryRest)), function($skip, $loc, $0, $1, $2) {
8130  if ($2) {
8131    return [$1, ...$2];
8132  }
8133  return $1;
8134});
8135function ConditionalExpression(ctx, state2) {
8136  return (0, import_lib3.$EVENT)(ctx, state2, "ConditionalExpression", ConditionalExpression$0);
8137}
8138var TernaryRest$0 = NestedTernaryRest;
8139var TernaryRest$1 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$N)(CoffeeBinaryExistentialEnabled), (0, import_lib3.$Y)((0, import_lib3.$EXPECT)($R5, "TernaryRest /[ \\t]/")), _, QuestionMark, MaybeNestedExtendedExpression, __, Colon, MaybeNestedExtendedExpression), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7, $8) {
8140  return $0.slice(2);
8141});
8142var TernaryRest$$ = [TernaryRest$0, TernaryRest$1];
8143function TernaryRest(ctx, state2) {
8144  return (0, import_lib3.$EVENT_C)(ctx, state2, "TernaryRest", TernaryRest$$);
8145}
8146var NestedTernaryRest$0 = (0, import_lib3.$S)(Nested, QuestionMark, MaybeNestedExtendedExpression, Nested, Colon, MaybeNestedExtendedExpression);
8147var NestedTernaryRest$1 = (0, import_lib3.$TS)((0, import_lib3.$S)(PushIndent, (0, import_lib3.$E)((0, import_lib3.$S)(Nested, QuestionMark, MaybeNestedExtendedExpression, Nested, Colon, MaybeNestedExtendedExpression)), PopIndent), function($skip, $loc, $0, $1, $2, $3) {
8148  if ($2)
8149    return $2;
8150  return $skip;
8151});
8152var NestedTernaryRest$$ = [NestedTernaryRest$0, NestedTernaryRest$1];
8153function NestedTernaryRest(ctx, state2) {
8154  return (0, import_lib3.$EVENT_C)(ctx, state2, "NestedTernaryRest", NestedTernaryRest$$);
8155}
8156var ShortCircuitExpression$0 = BinaryOpExpression;
8157function ShortCircuitExpression(ctx, state2) {
8158  return (0, import_lib3.$EVENT)(ctx, state2, "ShortCircuitExpression", ShortCircuitExpression$0);
8159}
8160var PipelineExpression$0 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$E)(_), PipelineHeadItem, (0, import_lib3.$P)((0, import_lib3.$S)(NotDedented, Pipe, __, PipelineTailItem))), function($skip, $loc, $0, $1, $2, $3) {
8161  var ws = $1;
8162  var head = $2;
8163  var body = $3;
8164  if (head.type === "ArrowFunction" && head.ampersandBlock) {
8165    const expressions = [{
8166      type: "PipelineExpression",
8167      children: [ws, head.block.expressions[0], body]
8168    }];
8169    const block = { ...head.block, expressions, children: [expressions] };
8170    return {
8171      ...head,
8172      block,
8173      body: expressions,
8174      children: [...head.children.slice(0, -1), block]
8175    };
8176  }
8177  return {
8178    type: "PipelineExpression",
8179    children: [ws, head, body]
8180  };
8181});
8182function PipelineExpression(ctx, state2) {
8183  return (0, import_lib3.$EVENT)(ctx, state2, "PipelineExpression", PipelineExpression$0);
8184}
8185var PipelineHeadItem$0 = NonPipelineExtendedExpression;
8186var PipelineHeadItem$1 = ParenthesizedExpression;
8187var PipelineHeadItem$$ = [PipelineHeadItem$0, PipelineHeadItem$1];
8188function PipelineHeadItem(ctx, state2) {
8189  return (0, import_lib3.$EVENT_C)(ctx, state2, "PipelineHeadItem", PipelineHeadItem$$);
8190}
8191var PipelineTailItem$0 = (0, import_lib3.$T)((0, import_lib3.$S)((0, import_lib3.$C)(AwaitOp, Yield, Return), (0, import_lib3.$N)(AccessStart)), function(value) {
8192  return value[0];
8193});
8194var PipelineTailItem$1 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$EXPECT)($L15, 'PipelineTailItem "import"'), (0, import_lib3.$N)(AccessStart)), function($skip, $loc, $0, $1, $2) {
8195  return {
8196    type: "Identifier",
8197    children: [$1]
8198  };
8199});
8200var PipelineTailItem$2 = (0, import_lib3.$TS)((0, import_lib3.$S)(NWTypePostfix, (0, import_lib3.$Q)(TypePostfix)), function($skip, $loc, $0, $1, $2) {
8201  return makeAmpersandFunction({
8202    body: [" ", $1, ...$2]
8203  });
8204});
8205var PipelineTailItem$3 = (0, import_lib3.$T)((0, import_lib3.$S)(PipelineHeadItem), function(value) {
8206  return value[0];
8207});
8208var PipelineTailItem$$ = [PipelineTailItem$0, PipelineTailItem$1, PipelineTailItem$2, PipelineTailItem$3];
8209function PipelineTailItem(ctx, state2) {
8210  return (0, import_lib3.$EVENT_C)(ctx, state2, "PipelineTailItem", PipelineTailItem$$);
8211}
8212var PrimaryExpression$0 = ObjectLiteral;
8213var PrimaryExpression$1 = ThisLiteral;
8214var PrimaryExpression$2 = TemplateLiteral;
8215var PrimaryExpression$3 = Literal;
8216var PrimaryExpression$4 = ArrayLiteral;
8217var PrimaryExpression$5 = FunctionExpression;
8218var PrimaryExpression$6 = IdentifierReference;
8219var PrimaryExpression$7 = ClassExpression;
8220var PrimaryExpression$8 = RegularExpressionLiteral;
8221var PrimaryExpression$9 = ParenthesizedExpression;
8222var PrimaryExpression$10 = Placeholder;
8223var PrimaryExpression$11 = JSXImplicitFragment;
8224var 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];
8225function PrimaryExpression(ctx, state2) {
8226  return (0, import_lib3.$EVENT_C)(ctx, state2, "PrimaryExpression", PrimaryExpression$$);
8227}
8228var ParenthesizedExpression$0 = (0, import_lib3.$TS)((0, import_lib3.$S)(OpenParen, AllowAll, (0, import_lib3.$E)((0, import_lib3.$S)(PostfixedCommaExpression, __, CloseParen)), RestoreAll), function($skip, $loc, $0, $1, $2, $3, $4) {
8229  var open = $1;
8230  if (!$3)
8231    return $skip;
8232  const [exp, ws, close] = $3;
8233  switch (exp.type) {
8234    case "StatementExpression":
8235      if (exp.statement.type !== "IterationExpression")
8236        break;
8237    case "IterationExpression":
8238      return exp;
8239    case "ParenthesizedExpression":
8240      if (exp.implicit) {
8241        return {
8242          ...exp,
8243          children: [open, exp.expression, ws, close],
8244          implicit: false
8245        };
8246      }
8247      break;
8248  }
8249  return {
8250    type: "ParenthesizedExpression",
8251    children: [open, exp, ws, close],
8252    expression: exp
8253  };
8254});
8255function ParenthesizedExpression(ctx, state2) {
8256  return (0, import_lib3.$EVENT)(ctx, state2, "ParenthesizedExpression", ParenthesizedExpression$0);
8257}
8258var Placeholder$0 = (0, import_lib3.$TS)((0, import_lib3.$S)(Dot, (0, import_lib3.$N)((0, import_lib3.$EXPECT)($R6, "Placeholder /(?:\\p{ID_Continue}|[\\u200C\\u200D$.#])/")), (0, import_lib3.$E)(PlaceholderTypeSuffix)), function($skip, $loc, $0, $1, $2, $3) {
8259  var dot = $1;
8260  var typeSuffix = $3;
8261  return {
8262    type: "Placeholder",
8263    subtype: ".",
8264    typeSuffix,
8265    children: [dot]
8266  };
8267});
8268var Placeholder$1 = (0, import_lib3.$TS)((0, import_lib3.$S)(Ampersand, (0, import_lib3.$N)((0, import_lib3.$EXPECT)($R7, "Placeholder /[&=]/")), (0, import_lib3.$E)(PlaceholderTypeSuffix)), function($skip, $loc, $0, $1, $2, $3) {
8269  var amp = $1;
8270  var typeSuffix = $3;
8271  return {
8272    type: "Placeholder",
8273    subtype: "&",
8274    typeSuffix,
8275    children: [amp]
8276  };
8277});
8278var Placeholder$2 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$Y)(AccessStart), (0, import_lib3.$Y)(PropertyAccess), (0, import_lib3.$N)(NumericLiteral)), function($skip, $loc, $0, $1, $2, $3) {
8279  return {
8280    type: "Placeholder",
8281    subtype: "&",
8282    children: [{ token: "&" }]
8283  };
8284});
8285var Placeholder$$ = [Placeholder$0, Placeholder$1, Placeholder$2];
8286function Placeholder(ctx, state2) {
8287  return (0, import_lib3.$EVENT_C)(ctx, state2, "Placeholder", Placeholder$$);
8288}
8289var PlaceholderTypeSuffix$0 = (0, import_lib3.$T)((0, import_lib3.$S)((0, import_lib3.$Y)((0, import_lib3.$S)((0, import_lib3.$E)(QuestionMark), Colon)), TypeSuffix), function(value) {
8290  return value[1];
8291});
8292function PlaceholderTypeSuffix(ctx, state2) {
8293  return (0, import_lib3.$EVENT)(ctx, state2, "PlaceholderTypeSuffix", PlaceholderTypeSuffix$0);
8294}
8295var ClassDeclaration$0 = (0, import_lib3.$TS)((0, import_lib3.$S)(ClassExpression), function($skip, $loc, $0, $1) {
8296  if ($1.id)
8297    return $1;
8298  return makeLeftHandSideExpression($1);
8299});
8300function ClassDeclaration(ctx, state2) {
8301  return (0, import_lib3.$EVENT)(ctx, state2, "ClassDeclaration", ClassDeclaration$0);
8302}
8303var ClassExpression$0 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$E)(Decorators), (0, import_lib3.$E)((0, import_lib3.$S)(Abstract, __)), Class, (0, import_lib3.$N)((0, import_lib3.$EXPECT)($L16, 'ClassExpression ":"')), (0, import_lib3.$E)(ClassBinding), (0, import_lib3.$E)(ClassHeritage), ClassBody), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7) {
8304  var decorators = $1;
8305  var abstract = $2;
8306  var binding = $5;
8307  var heritage = $6;
8308  var body = $7;
8309  return {
8310    decorators,
8311    abstract,
8312    binding,
8313    id: binding?.[0],
8314    heritage,
8315    body,
8316    children: $0
8317  };
8318});
8319function ClassExpression(ctx, state2) {
8320  return (0, import_lib3.$EVENT)(ctx, state2, "ClassExpression", ClassExpression$0);
8321}
8322var ClassBinding$0 = (0, import_lib3.$T)((0, import_lib3.$S)((0, import_lib3.$N)(EOS), BindingIdentifier, (0, import_lib3.$E)(TypeParameters)), function(value) {
8323  return [value[1], value[2]];
8324});
8325function ClassBinding(ctx, state2) {
8326  return (0, import_lib3.$EVENT)(ctx, state2, "ClassBinding", ClassBinding$0);
8327}
8328var ClassHeritage$0 = (0, import_lib3.$TS)((0, import_lib3.$S)(ExtendsClause, (0, import_lib3.$E)(WithClause), (0, import_lib3.$E)(ImplementsClause)), function($skip, $loc, $0, $1, $2, $3) {
8329  var extendsClause = $1;
8330  var withClause = $2;
8331  var implementsClause = $3;
8332  if (withClause) {
8333    extendsClause = convertWithClause(withClause, extendsClause);
8334  }
8335  return [extendsClause, implementsClause];
8336});
8337var ClassHeritage$1 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$E)(WithClause), (0, import_lib3.$E)(ImplementsClause)), function($skip, $loc, $0, $1, $2) {
8338  var withClause = $1;
8339  var implementsClause = $2;
8340  if (withClause)
8341    return [convertWithClause(withClause), implementsClause];
8342  if (implementsClause)
8343    return implementsClause;
8344  return $skip;
8345});
8346var ClassHeritage$$ = [ClassHeritage$0, ClassHeritage$1];
8347function ClassHeritage(ctx, state2) {
8348  return (0, import_lib3.$EVENT_C)(ctx, state2, "ClassHeritage", ClassHeritage$$);
8349}
8350var ExtendsClause$0 = (0, import_lib3.$S)(ExtendsToken, __, ExtendsTarget);
8351function ExtendsClause(ctx, state2) {
8352  return (0, import_lib3.$EVENT)(ctx, state2, "ExtendsClause", ExtendsClause$0);
8353}
8354var WithClause$0 = (0, import_lib3.$TS)((0, import_lib3.$S)(__, With, __, ExtendsTarget, (0, import_lib3.$Q)((0, import_lib3.$S)((0, import_lib3.$EXPECT)($L17, 'WithClause ","'), __, ExtendsTarget))), function($skip, $loc, $0, $1, $2, $3, $4, $5) {
8355  var ws = $3;
8356  var t = $4;
8357  var rest = $5;
8358  return {
8359    type: "WithClause",
8360    children: $0,
8361    targets: [[ws, t], ...rest.map(([_comma, ws2, target]) => [ws2, target])]
8362  };
8363});
8364function WithClause(ctx, state2) {
8365  return (0, import_lib3.$EVENT)(ctx, state2, "WithClause", WithClause$0);
8366}
8367var ExtendsToken$0 = (0, import_lib3.$TS)((0, import_lib3.$S)(Loc, (0, import_lib3.$E)(_), ExtendsShorthand, (0, import_lib3.$E)((0, import_lib3.$EXPECT)($L18, 'ExtendsToken " "'))), function($skip, $loc, $0, $1, $2, $3, $4) {
8368  var l = $1;
8369  var ws = $2;
8370  var t = $3;
8371  return {
8372    type: "Extends",
8373    children: [
8374      ws || { $loc: l.$loc, token: " " },
8375      t
8376    ]
8377  };
8378});
8379var ExtendsToken$1 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$E)(_), Extends), function($skip, $loc, $0, $1, $2) {
8380  return {
8381    type: "Extends",
8382    children: $0
8383  };
8384});
8385var ExtendsToken$$ = [ExtendsToken$0, ExtendsToken$1];
8386function ExtendsToken(ctx, state2) {
8387  return (0, import_lib3.$EVENT_C)(ctx, state2, "ExtendsToken", ExtendsToken$$);
8388}
8389var ExtendsShorthand$0 = (0, import_lib3.$TV)((0, import_lib3.$EXPECT)($L19, 'ExtendsShorthand "<"'), function($skip, $loc, $0, $1) {
8390  return { $loc, token: "extends " };
8391});
8392function ExtendsShorthand(ctx, state2) {
8393  return (0, import_lib3.$EVENT)(ctx, state2, "ExtendsShorthand", ExtendsShorthand$0);
8394}
8395var NotExtendsToken$0 = (0, import_lib3.$TS)((0, import_lib3.$S)(Loc, (0, import_lib3.$E)(_), OmittedNegation, ExtendsShorthand, (0, import_lib3.$E)((0, import_lib3.$EXPECT)($L18, 'NotExtendsToken " "'))), function($skip, $loc, $0, $1, $2, $3, $4, $5) {
8396  var l = $1;
8397  var ws1 = $2;
8398  var ws2 = $3;
8399  var t = $4;
8400  const ws = ws1 && ws2 ? [ws1, ws2] : ws1 || ws2 || { $loc: l.$loc, token: " " };
8401  return {
8402    type: "Extends",
8403    negated: true,
8404    children: [ws, t]
8405  };
8406});
8407var NotExtendsToken$1 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$E)(_), OmittedNegation, Extends), function($skip, $loc, $0, $1, $2, $3) {
8408  return {
8409    type: "Extends",
8410    negated: true,
8411    children: $0
8412  };
8413});
8414var NotExtendsToken$$ = [NotExtendsToken$0, NotExtendsToken$1];
8415function NotExtendsToken(ctx, state2) {
8416  return (0, import_lib3.$EVENT_C)(ctx, state2, "NotExtendsToken", NotExtendsToken$$);
8417}
8418var OmittedNegation$0 = (0, import_lib3.$T)((0, import_lib3.$S)(ExclamationPoint), function(value) {
8419  return "";
8420});
8421var OmittedNegation$1 = (0, import_lib3.$T)((0, import_lib3.$S)(Not, (0, import_lib3.$E)((0, import_lib3.$EXPECT)($L18, 'OmittedNegation " "')), (0, import_lib3.$E)(_)), function(value) {
8422  return value[2];
8423});
8424var OmittedNegation$$ = [OmittedNegation$0, OmittedNegation$1];
8425function OmittedNegation(ctx, state2) {
8426  return (0, import_lib3.$EVENT_C)(ctx, state2, "OmittedNegation", OmittedNegation$$);
8427}
8428var ExtendsTarget$0 = (0, import_lib3.$TV)(LeftHandSideExpressionWithObjectApplicationForbidden, function($skip, $loc, $0, $1) {
8429  var exp = $0;
8430  return makeLeftHandSideExpression(exp);
8431});
8432function ExtendsTarget(ctx, state2) {
8433  return (0, import_lib3.$EVENT)(ctx, state2, "ExtendsTarget", ExtendsTarget$0);
8434}
8435var ImplementsClause$0 = (0, import_lib3.$TS)((0, import_lib3.$S)(ImplementsToken, ImplementsTarget, (0, import_lib3.$Q)((0, import_lib3.$S)(Comma, ImplementsTarget))), function($skip, $loc, $0, $1, $2, $3) {
8436  return {
8437    ts: true,
8438    children: $0
8439  };
8440});
8441function ImplementsClause(ctx, state2) {
8442  return (0, import_lib3.$EVENT)(ctx, state2, "ImplementsClause", ImplementsClause$0);
8443}
8444var ImplementsToken$0 = (0, import_lib3.$TS)((0, import_lib3.$S)(Loc, __, ImplementsShorthand, (0, import_lib3.$E)((0, import_lib3.$EXPECT)($L18, 'ImplementsToken " "'))), function($skip, $loc, $0, $1, $2, $3, $4) {
8445  var l = $1;
8446  var ws = $2;
8447  var token = $3;
8448  const children = [...ws, token];
8449  if (!ws.length) {
8450    children.unshift({ $loc: l.$loc, token: " " });
8451  }
8452  return { children };
8453});
8454var ImplementsToken$1 = (0, import_lib3.$TS)((0, import_lib3.$S)(__, (0, import_lib3.$EXPECT)($L20, 'ImplementsToken "implements"'), NonIdContinue), function($skip, $loc, $0, $1, $2, $3) {
8455  $2 = { $loc, token: $2 };
8456  return [$1, $2];
8457});
8458var ImplementsToken$$ = [ImplementsToken$0, ImplementsToken$1];
8459function ImplementsToken(ctx, state2) {
8460  return (0, import_lib3.$EVENT_C)(ctx, state2, "ImplementsToken", ImplementsToken$$);
8461}
8462var ImplementsShorthand$0 = (0, import_lib3.$TV)((0, import_lib3.$EXPECT)($L21, 'ImplementsShorthand "<:"'), function($skip, $loc, $0, $1) {
8463  return { $loc, token: "implements " };
8464});
8465function ImplementsShorthand(ctx, state2) {
8466  return (0, import_lib3.$EVENT)(ctx, state2, "ImplementsShorthand", ImplementsShorthand$0);
8467}
8468var ImplementsTarget$0 = (0, import_lib3.$S)(__, IdentifierName, (0, import_lib3.$Q)((0, import_lib3.$S)(Dot, IdentifierName)), (0, import_lib3.$E)(TypeArguments));
8469function ImplementsTarget(ctx, state2) {
8470  return (0, import_lib3.$EVENT)(ctx, state2, "ImplementsTarget", ImplementsTarget$0);
8471}
8472var ClassBody$0 = (0, import_lib3.$TS)((0, import_lib3.$S)(__, OpenBrace, (0, import_lib3.$E)(NestedClassElements), __, CloseBrace), function($skip, $loc, $0, $1, $2, $3, $4, $5) {
8473  var expressions = $3;
8474  if (!expressions)
8475    expressions = $0[2] = [];
8476  return {
8477    type: "BlockStatement",
8478    subtype: "ClassBody",
8479    children: $0,
8480    expressions
8481  };
8482});
8483var ClassBody$1 = (0, import_lib3.$TS)((0, import_lib3.$S)(InsertOpenBrace, (0, import_lib3.$E)(NestedClassElements), InsertNewline, InsertIndent, InsertCloseBrace), function($skip, $loc, $0, $1, $2, $3, $4, $5) {
8484  var expressions = $2;
8485  if (!expressions)
8486    expressions = $0[1] = [];
8487  return {
8488    type: "BlockStatement",
8489    subtype: "ClassBody",
8490    children: $0,
8491    expressions
8492  };
8493});
8494var ClassBody$$ = [ClassBody$0, ClassBody$1];
8495function ClassBody(ctx, state2) {
8496  return (0, import_lib3.$EVENT_C)(ctx, state2, "ClassBody", ClassBody$$);
8497}
8498var NestedClassElements$0 = (0, import_lib3.$TS)((0, import_lib3.$S)(PushIndent, (0, import_lib3.$Q)(NestedClassElement), PopIndent), function($skip, $loc, $0, $1, $2, $3) {
8499  var elements = $2;
8500  if (!elements.length)
8501    return $skip;
8502  return elements;
8503});
8504function NestedClassElements(ctx, state2) {
8505  return (0, import_lib3.$EVENT)(ctx, state2, "NestedClassElements", NestedClassElements$0);
8506}
8507var NestedClassElement$0 = (0, import_lib3.$S)(Nested, ClassElement, StatementDelimiter);
8508function NestedClassElement(ctx, state2) {
8509  return (0, import_lib3.$EVENT)(ctx, state2, "NestedClassElement", NestedClassElement$0);
8510}
8511var ClassElement$0 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$E)(Decorators), (0, import_lib3.$E)(AccessModifier), (0, import_lib3.$E)((0, import_lib3.$S)(Static, (0, import_lib3.$E)(_))), (0, import_lib3.$E)((0, import_lib3.$S)(Override, (0, import_lib3.$E)(_))), ClassElementDefinition), function($skip, $loc, $0, $1, $2, $3, $4, $5) {
8512  var decorators = $1;
8513  var definition = $5;
8514  if (definition.type === "MultiMethodDefinition") {
8515    return {
8516      ...definition,
8517      children: definition.children.map((c) => {
8518        return {
8519          ...c,
8520          children: [decorators, ...c.children]
8521        };
8522      })
8523    };
8524  }
8525  return {
8526    ...definition,
8527    children: [decorators, $2, $3, $4, ...definition.children]
8528  };
8529});
8530var ClassElement$1 = (0, import_lib3.$TS)((0, import_lib3.$S)(Static, BracedBlock), function($skip, $loc, $0, $1, $2) {
8531  return {
8532    type: "ClassStaticBlock",
8533    children: $0
8534  };
8535});
8536var ClassElement$2 = EmptyStatement;
8537var ClassElement$$ = [ClassElement$0, ClassElement$1, ClassElement$2];
8538function ClassElement(ctx, state2) {
8539  return (0, import_lib3.$EVENT_C)(ctx, state2, "ClassElement", ClassElement$$);
8540}
8541var ClassElementDefinition$0 = MethodDefinition;
8542var ClassElementDefinition$1 = FieldDefinition;
8543var ClassElementDefinition$$ = [ClassElementDefinition$0, ClassElementDefinition$1];
8544function ClassElementDefinition(ctx, state2) {
8545  return (0, import_lib3.$EVENT_C)(ctx, state2, "ClassElementDefinition", ClassElementDefinition$$);
8546}
8547var ClassSignature$0 = (0, import_lib3.$S)((0, import_lib3.$E)(Decorators), (0, import_lib3.$E)((0, import_lib3.$S)(Abstract, __)), Class, (0, import_lib3.$E)(ClassBinding), (0, import_lib3.$E)(ClassHeritage), ClassSignatureBody);
8548function ClassSignature(ctx, state2) {
8549  return (0, import_lib3.$EVENT)(ctx, state2, "ClassSignature", ClassSignature$0);
8550}
8551var ClassSignatureBody$0 = (0, import_lib3.$S)(__, OpenBrace, (0, import_lib3.$E)(NestedClassSignatureElements), __, CloseBrace);
8552var ClassSignatureBody$1 = (0, import_lib3.$S)(InsertOpenBrace, (0, import_lib3.$E)(NestedClassSignatureElements), InsertNewline, InsertIndent, InsertCloseBrace);
8553var ClassSignatureBody$$ = [ClassSignatureBody$0, ClassSignatureBody$1];
8554function ClassSignatureBody(ctx, state2) {
8555  return (0, import_lib3.$EVENT_C)(ctx, state2, "ClassSignatureBody", ClassSignatureBody$$);
8556}
8557var NestedClassSignatureElements$0 = (0, import_lib3.$TS)((0, import_lib3.$S)(PushIndent, (0, import_lib3.$Q)(NestedClassSignatureElement), PopIndent), function($skip, $loc, $0, $1, $2, $3) {
8558  var elements = $2;
8559  if (!elements.length)
8560    return $skip;
8561  return elements;
8562});
8563function NestedClassSignatureElements(ctx, state2) {
8564  return (0, import_lib3.$EVENT)(ctx, state2, "NestedClassSignatureElements", NestedClassSignatureElements$0);
8565}
8566var NestedClassSignatureElement$0 = (0, import_lib3.$S)(Nested, ClassSignatureElement, StatementDelimiter);
8567function NestedClassSignatureElement(ctx, state2) {
8568  return (0, import_lib3.$EVENT)(ctx, state2, "NestedClassSignatureElement", NestedClassSignatureElement$0);
8569}
8570var ClassSignatureElement$0 = (0, import_lib3.$S)((0, import_lib3.$E)(Decorators), (0, import_lib3.$E)(AccessModifier), (0, import_lib3.$E)((0, import_lib3.$S)(Static, (0, import_lib3.$E)(_))), (0, import_lib3.$E)((0, import_lib3.$S)(Override, (0, import_lib3.$E)(_))), (0, import_lib3.$C)(MethodSignature, FieldDefinition));
8571var ClassSignatureElement$1 = (0, import_lib3.$S)(Static, ClassSignatureBody);
8572var ClassSignatureElement$$ = [ClassSignatureElement$0, ClassSignatureElement$1];
8573function ClassSignatureElement(ctx, state2) {
8574  return (0, import_lib3.$EVENT_C)(ctx, state2, "ClassSignatureElement", ClassSignatureElement$$);
8575}
8576var AccessModifier$0 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$E)((0, import_lib3.$S)((0, import_lib3.$C)(Public, Private, Protected), NotDedented)), (0, import_lib3.$E)((0, import_lib3.$S)(Readonly, NotDedented))), function($skip, $loc, $0, $1, $2) {
8577  if (!($1 || $2))
8578    return $skip;
8579  return {
8580    ts: true,
8581    children: $0
8582  };
8583});
8584function AccessModifier(ctx, state2) {
8585  return (0, import_lib3.$EVENT)(ctx, state2, "AccessModifier", AccessModifier$0);
8586}
8587var FieldDefinition$0 = (0, import_lib3.$TS)((0, import_lib3.$S)(CoffeeClassesEnabled, ClassElementName, (0, import_lib3.$E)(_), Colon, __, AssignmentExpression), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6) {
8588  var id = $2;
8589  var exp = $6;
8590  switch (exp.type) {
8591    case "FunctionExpression":
8592      const fnTokenIndex = exp.children.findIndex((c) => c?.token?.startsWith("function"));
8593      const children = exp.children.slice();
8594      if (exp.generator) {
8595        children.splice(fnTokenIndex, 2, children[fnTokenIndex + 1], id);
8596      } else {
8597        children.splice(fnTokenIndex, 1, id);
8598      }
8599      return {
8600        ...exp,
8601        children
8602      };
8603    default:
8604      return {
8605        type: "FieldDefinition",
8606        children: [id, " = ", exp]
8607      };
8608  }
8609});
8610var FieldDefinition$1 = (0, import_lib3.$TS)((0, import_lib3.$S)(InsertReadonly, ClassElementName, (0, import_lib3.$E)(TypeSuffix), __, ConstAssignment, MaybeNestedExtendedExpression), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6) {
8611  var r = $1;
8612  var ca = $5;
8613  r.children[0].$loc = {
8614    pos: ca.$loc.pos - 1,
8615    length: ca.$loc.length + 1
8616  };
8617  return {
8618    type: "FieldDefinition",
8619    children: $0
8620  };
8621});
8622var FieldDefinition$2 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$E)((0, import_lib3.$S)(Abstract, (0, import_lib3.$E)(_))), (0, import_lib3.$E)((0, import_lib3.$S)(Readonly, (0, import_lib3.$E)(_))), ClassElementName, (0, import_lib3.$E)(TypeSuffix), (0, import_lib3.$E)(Initializer)), function($skip, $loc, $0, $1, $2, $3, $4, $5) {
8623  if ($1)
8624    return { children: $0, ts: true };
8625  return {
8626    type: "FieldDefinition",
8627    children: $0
8628  };
8629});
8630var FieldDefinition$$ = [FieldDefinition$0, FieldDefinition$1, FieldDefinition$2];
8631function FieldDefinition(ctx, state2) {
8632  return (0, import_lib3.$EVENT_C)(ctx, state2, "FieldDefinition", FieldDefinition$$);
8633}
8634var ThisLiteral$0 = This;
8635var ThisLiteral$1 = HashThis;
8636var ThisLiteral$2 = (0, import_lib3.$TS)((0, import_lib3.$S)(AtThis, (0, import_lib3.$TEXT)((0, import_lib3.$S)((0, import_lib3.$E)(Hash), IdentifierName))), function($skip, $loc, $0, $1, $2) {
8637  var at = $1;
8638  var id = $2;
8639  return {
8640    type: "MemberExpression",
8641    children: [at, {
8642      type: "PropertyAccess",
8643      name: id,
8644      children: [".", {
8645        $loc: {
8646          pos: $loc.pos + 1,
8647          length: $loc.length - 1
8648        },
8649        token: id
8650      }]
8651    }],
8652    thisShorthand: true
8653  };
8654});
8655var ThisLiteral$3 = AtThis;
8656var ThisLiteral$$ = [ThisLiteral$0, ThisLiteral$1, ThisLiteral$2, ThisLiteral$3];
8657function ThisLiteral(ctx, state2) {
8658  return (0, import_lib3.$EVENT_C)(ctx, state2, "ThisLiteral", ThisLiteral$$);
8659}
8660var HashThis$0 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$E)(AtThis), LengthShorthand, (0, import_lib3.$E)((0, import_lib3.$S)((0, import_lib3.$Y)((0, import_lib3.$S)(_, (0, import_lib3.$E)((0, import_lib3.$S)(Not, __)), ActualIn)), (0, import_lib3.$EXPECT)($L0, 'HashThis ""')))), function($skip, $loc, $0, $1, $2, $3) {
8661  var at = $1;
8662  var id = $2;
8663  var beforeIn = $3;
8664  if (beforeIn != null && at == null)
8665    return ['"', id.name, '"'];
8666  return {
8667    type: "MemberExpression",
8668    children: [at ?? "this", {
8669      type: "PropertyAccess",
8670      name: id.name,
8671      children: [".", id]
8672    }],
8673    thisShorthand: true
8674  };
8675});
8676var HashThis$1 = (0, import_lib3.$TS)((0, import_lib3.$S)(PrivateIdentifier, (0, import_lib3.$Y)((0, import_lib3.$S)(_, (0, import_lib3.$E)((0, import_lib3.$S)(Not, __)), ActualIn))), function($skip, $loc, $0, $1, $2) {
8677  var id = $1;
8678  return id;
8679});
8680var HashThis$2 = (0, import_lib3.$TV)(PrivateIdentifier, function($skip, $loc, $0, $1) {
8681  var id = $0;
8682  return {
8683    type: "MemberExpression",
8684    children: ["this", {
8685      type: "PropertyAccess",
8686      name: id.name,
8687      children: [".", id]
8688    }],
8689    privateShorthand: true,
8690    privateId: id
8691  };
8692});
8693var HashThis$$ = [HashThis$0, HashThis$1, HashThis$2];
8694function HashThis(ctx, state2) {
8695  return (0, import_lib3.$EVENT_C)(ctx, state2, "HashThis", HashThis$$);
8696}
8697var LengthShorthand$0 = (0, import_lib3.$TS)((0, import_lib3.$S)(Hash, NonIdContinue), function($skip, $loc, $0, $1, $2) {
8698  const id = "length";
8699  return {
8700    type: "Identifier",
8701    name: id,
8702    names: [id],
8703    children: [{
8704      $loc,
8705      token: id
8706    }]
8707  };
8708});
8709function LengthShorthand(ctx, state2) {
8710  return (0, import_lib3.$EVENT)(ctx, state2, "LengthShorthand", LengthShorthand$0);
8711}
8712var AtThis$0 = (0, import_lib3.$TV)(At, function($skip, $loc, $0, $1) {
8713  var at = $0;
8714  return { ...at, token: "this" };
8715});
8716function AtThis(ctx, state2) {
8717  return (0, import_lib3.$EVENT)(ctx, state2, "AtThis", AtThis$0);
8718}
8719var LeftHandSideExpression$0 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$P)((0, import_lib3.$S)(New, (0, import_lib3.$N)((0, import_lib3.$C)((0, import_lib3.$EXPECT)($L7, 'LeftHandSideExpression "."'), (0, import_lib3.$EXPECT)($L16, 'LeftHandSideExpression ":"'))), __)), CallExpression), function($skip, $loc, $0, $1, $2) {
8720  var expression = $2;
8721  return {
8722    type: "NewExpression",
8723    children: $0,
8724    expression
8725  };
8726});
8727var LeftHandSideExpression$1 = CallExpression;
8728var LeftHandSideExpression$$ = [LeftHandSideExpression$0, LeftHandSideExpression$1];
8729function LeftHandSideExpression(ctx, state2) {
8730  return (0, import_lib3.$EVENT_C)(ctx, state2, "LeftHandSideExpression", LeftHandSideExpression$$);
8731}
8732var CallExpression$0 = (0, import_lib3.$TS)((0, import_lib3.$S)(Super, ArgumentsWithTrailingMemberExpressions, (0, import_lib3.$Q)(CallExpressionRest)), function($skip, $loc, $0, $1, $2, $3) {
8733  var rest = $3;
8734  return processCallMemberExpression({
8735    type: "CallExpression",
8736    children: [$1, ...$2, ...rest.flat()]
8737  });
8738});
8739var CallExpression$1 = (0, import_lib3.$TS)((0, import_lib3.$S)(Import, _, NamedImports, __, FromClause), function($skip, $loc, $0, $1, $2, $3, $4, $5) {
8740  return dynamizeImportDeclarationExpression($0);
8741});
8742var CallExpression$2 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$EXPECT)($L15, 'CallExpression "import"'), ArgumentsWithTrailingMemberExpressions, (0, import_lib3.$Q)(CallExpressionRest)), function($skip, $loc, $0, $1, $2, $3) {
8743  var rest = $3;
8744  return processCallMemberExpression({
8745    type: "CallExpression",
8746    children: [$1, ...$2, ...rest.flat()]
8747  });
8748});
8749var CallExpression$3 = (0, import_lib3.$TS)((0, import_lib3.$S)(MemberExpression, AllowedTrailingMemberExpressions, (0, import_lib3.$Q)(CallExpressionRest)), function($skip, $loc, $0, $1, $2, $3) {
8750  var member = $1;
8751  var trailing = $2;
8752  var rest = $3;
8753  if (rest.length || trailing.length) {
8754    rest = rest.flat();
8755    return processCallMemberExpression({
8756      type: "CallExpression",
8757      children: [member, ...trailing, ...rest]
8758    });
8759  }
8760  return member;
8761});
8762var CallExpression$$ = [CallExpression$0, CallExpression$1, CallExpression$2, CallExpression$3];
8763function CallExpression(ctx, state2) {
8764  return (0, import_lib3.$EVENT_C)(ctx, state2, "CallExpression", CallExpression$$);
8765}
8766var CallExpressionRest$0 = MemberExpressionRest;
8767var CallExpressionRest$1 = (0, import_lib3.$T)((0, import_lib3.$S)(TypeArguments, (0, import_lib3.$N)((0, import_lib3.$C)(IdentifierName, NumericLiteral))), function(value) {
8768  return value[0];
8769});
8770var CallExpressionRest$2 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$EXPECT)($R8, "CallExpressionRest /(?=['\"`])/"), (0, import_lib3.$C)(TemplateLiteral, StringLiteral)), function($skip, $loc, $0, $1, $2) {
8771  var literal = $2;
8772  if (literal.type === "StringLiteral") {
8773    literal = "`" + literal.token.slice(1, -1).replace(/(`|\$\{)/g, "\\$1") + "`";
8774  }
8775  return literal;
8776});
8777var CallExpressionRest$3 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$E)(OptionalShorthand), ArgumentsWithTrailingMemberExpressions), function($skip, $loc, $0, $1, $2) {
8778  var optional = $1;
8779  var argsWithTrailing = $2;
8780  if (!optional)
8781    return argsWithTrailing;
8782  const call = argsWithTrailing[0];
8783  return [{
8784    ...call,
8785    children: [optional, ...call.children],
8786    optional
8787  }, ...argsWithTrailing.slice(1)];
8788});
8789var CallExpressionRest$$ = [CallExpressionRest$0, CallExpressionRest$1, CallExpressionRest$2, CallExpressionRest$3];
8790function CallExpressionRest(ctx, state2) {
8791  return (0, import_lib3.$EVENT_C)(ctx, state2, "CallExpressionRest", CallExpressionRest$$);
8792}
8793var OptionalShorthand$0 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$EXPECT)($R9, "OptionalShorthand /(?=[\\/?])/"), (0, import_lib3.$Q)(InlineComment), QuestionMark, OptionalDot), function($skip, $loc, $0, $1, $2, $3, $4) {
8794  var comments = $2;
8795  var q = $3;
8796  var d = $4;
8797  return {
8798    type: "Optional",
8799    children: [...comments, q, d]
8800  };
8801});
8802function OptionalShorthand(ctx, state2) {
8803  return (0, import_lib3.$EVENT)(ctx, state2, "OptionalShorthand", OptionalShorthand$0);
8804}
8805var OptionalDot$0 = (0, import_lib3.$S)((0, import_lib3.$Q)(InlineComment), Dot);
8806var OptionalDot$1 = InsertDot;
8807var OptionalDot$$ = [OptionalDot$0, OptionalDot$1];
8808function OptionalDot(ctx, state2) {
8809  return (0, import_lib3.$EVENT_C)(ctx, state2, "OptionalDot", OptionalDot$$);
8810}
8811var NonNullAssertion$0 = (0, import_lib3.$T)((0, import_lib3.$S)(ExclamationPoint, (0, import_lib3.$N)((0, import_lib3.$EXPECT)($L22, 'NonNullAssertion "^"'))), function(value) {
8812  return { "type": "NonNullAssertion", "ts": true, "children": [value[0]] };
8813});
8814function NonNullAssertion(ctx, state2) {
8815  return (0, import_lib3.$EVENT)(ctx, state2, "NonNullAssertion", NonNullAssertion$0);
8816}
8817var MemberExpression$0 = (0, import_lib3.$TS)((0, import_lib3.$S)(MemberBase, (0, import_lib3.$Q)(MemberExpressionRest)), function($skip, $loc, $0, $1, $2) {
8818  var rest = $2;
8819  if (rest.length || Array.isArray($1)) {
8820    return processCallMemberExpression({
8821      type: "MemberExpression",
8822      children: [$1, ...rest].flat()
8823    });
8824  }
8825  return $1;
8826});
8827function MemberExpression(ctx, state2) {
8828  return (0, import_lib3.$EVENT)(ctx, state2, "MemberExpression", MemberExpression$0);
8829}
8830var ActualMemberExpression$0 = (0, import_lib3.$TS)((0, import_lib3.$S)(MemberBase, (0, import_lib3.$P)(MemberExpressionRest)), function($skip, $loc, $0, $1, $2) {
8831  var rest = $2;
8832  return processCallMemberExpression({
8833    type: "MemberExpression",
8834    children: [$1, ...rest].flat()
8835  });
8836});
8837function ActualMemberExpression(ctx, state2) {
8838  return (0, import_lib3.$EVENT)(ctx, state2, "ActualMemberExpression", ActualMemberExpression$0);
8839}
8840var MemberBase$0 = PrimaryExpression;
8841var MemberBase$1 = SuperProperty;
8842var MemberBase$2 = MetaProperty;
8843var MemberBase$$ = [MemberBase$0, MemberBase$1, MemberBase$2];
8844function MemberBase(ctx, state2) {
8845  return (0, import_lib3.$EVENT_C)(ctx, state2, "MemberBase", MemberBase$$);
8846}
8847var MemberExpressionRest$0 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$EXPECT)($R10, "MemberExpressionRest /(?=[\\/\\[{?.!@#'\u2019:])/"), (0, import_lib3.$Q)(InlineComment), MemberExpressionRestBody), function($skip, $loc, $0, $1, $2, $3) {
8848  var comments = $2;
8849  var body = $3;
8850  if (Array.isArray(body))
8851    return [...comments, ...body];
8852  return {
8853    ...body,
8854    children: [...comments, ...body.children]
8855  };
8856});
8857function MemberExpressionRest(ctx, state2) {
8858  return (0, import_lib3.$EVENT)(ctx, state2, "MemberExpressionRest", MemberExpressionRest$0);
8859}
8860var MemberExpressionRestBody$0 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$E)(OptionalShorthand), (0, import_lib3.$Q)(InlineComment), MemberBracketContent), function($skip, $loc, $0, $1, $2, $3) {
8861  var dot = $1;
8862  var comments = $2;
8863  var content = $3;
8864  if (!dot && !comments.length)
8865    return content;
8866  if (dot) {
8867    if (dot.type === "Optional" && content.type === "SliceExpression") {
8868      return [...dot.children.slice(0, -1), ...comments, content];
8869    }
8870    return {
8871      ...content,
8872      children: [dot, ...comments, ...content.children],
8873      optional: dot
8874    };
8875  }
8876  return [...comments, content];
8877});
8878var MemberExpressionRestBody$1 = PropertyAccess;
8879var MemberExpressionRestBody$2 = PropertyGlob;
8880var MemberExpressionRestBody$3 = PropertyBind;
8881var MemberExpressionRestBody$4 = NonNullAssertion;
8882var MemberExpressionRestBody$$ = [MemberExpressionRestBody$0, MemberExpressionRestBody$1, MemberExpressionRestBody$2, MemberExpressionRestBody$3, MemberExpressionRestBody$4];
8883function MemberExpressionRestBody(ctx, state2) {
8884  return (0, import_lib3.$EVENT_C)(ctx, state2, "MemberExpressionRestBody", MemberExpressionRestBody$$);
8885}
8886var MemberBracketContent$0 = (0, import_lib3.$TS)((0, import_lib3.$S)(OpenBracket, (0, import_lib3.$C)(SliceParameters, PostfixedExpression), __, CloseBracket), function($skip, $loc, $0, $1, $2, $3, $4) {
8887  var open = $1;
8888  var expression = $2;
8889  var ws = $3;
8890  var close = $4;
8891  if (expression.type === "SliceParameters") {
8892    const { start, end, children } = expression;
8893    return {
8894      type: "SliceExpression",
8895      start,
8896      end,
8897      children: [
8898        { ...open, token: ".slice(" },
8899        ...children,
8900        [...ws, { ...close, token: ")" }]
8901      ]
8902    };
8903  }
8904  return {
8905    type: "Index",
8906    children: $0,
8907    expression
8908  };
8909});
8910function MemberBracketContent(ctx, state2) {
8911  return (0, import_lib3.$EVENT)(ctx, state2, "MemberBracketContent", MemberBracketContent$0);
8912}
8913var SliceParameters$0 = (0, import_lib3.$TS)((0, import_lib3.$S)(ExtendedExpression, __, (0, import_lib3.$C)(DotDotDot, DotDot), (0, import_lib3.$E)(ExtendedExpression)), function($skip, $loc, $0, $1, $2, $3, $4) {
8914  var start = $1;
8915  var ws = $2;
8916  var sep = $3;
8917  var end = $4;
8918  const inclusive = sep.token === "..";
8919  let children;
8920  if (end) {
8921    const inc = [];
8922    if (inclusive) {
8923      end = ["1 + ", end];
8924      inc.push(" || 1/0");
8925    }
8926    children = [start, [...ws, { ...sep, token: ", " }], [end, ...inc]];
8927  } else {
8928    children = [start, ws];
8929  }
8930  return {
8931    type: "SliceParameters",
8932    start,
8933    end,
8934    children
8935  };
8936});
8937var SliceParameters$1 = (0, import_lib3.$TS)((0, import_lib3.$S)(Loc, __, (0, import_lib3.$C)(DotDotDot, DotDot), ExtendedExpression), function($skip, $loc, $0, $1, $2, $3, $4) {
8938  var l = $1;
8939  var ws = $2;
8940  var sep = $3;
8941  var end = $4;
8942  const inclusive = sep.token === "..";
8943  const inc = [];
8944  if (inclusive) {
8945    end = ["1 + ", end];
8946    inc.push(" || 1/0");
8947  }
8948  const start = {
8949    $loc: l.$loc,
8950    token: "0"
8951  };
8952  return {
8953    type: "SliceParameters",
8954    start,
8955    end,
8956    children: [start, [...ws, { ...sep, token: ", " }], [end, ...inc]]
8957  };
8958});
8959var SliceParameters$2 = (0, import_lib3.$TS)((0, import_lib3.$S)(Loc, __, (0, import_lib3.$C)(DotDot, DotDotDot), (0, import_lib3.$Y)((0, import_lib3.$S)(__, CloseBracket))), function($skip, $loc, $0, $1, $2, $3, $4) {
8960  var l = $1;
8961  var ws = $2;
8962  const start = {
8963    $loc: l.$loc,
8964    token: "0"
8965  };
8966  return {
8967    type: "SliceParameters",
8968    start,
8969    end: void 0,
8970    children: [start, ws]
8971  };
8972});
8973var SliceParameters$$ = [SliceParameters$0, SliceParameters$1, SliceParameters$2];
8974function SliceParameters(ctx, state2) {
8975  return (0, import_lib3.$EVENT_C)(ctx, state2, "SliceParameters", SliceParameters$$);
8976}
8977var AccessStart$0 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$E)(PropertyAccessModifier), Dot, (0, import_lib3.$N)(Dot)), function($skip, $loc, $0, $1, $2, $3) {
8978  var modifier = $1;
8979  var dot = $2;
8980  return {
8981    type: "AccessStart",
8982    children: modifier ? [modifier, dot] : [dot],
8983    optional: modifier?.token === "?"
8984  };
8985});
8986function AccessStart(ctx, state2) {
8987  return (0, import_lib3.$EVENT)(ctx, state2, "AccessStart", AccessStart$0);
8988}
8989var ImplicitAccessStart$0 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$E)(PropertyAccessModifier), InsertDot, (0, import_lib3.$N)(Dot)), function($skip, $loc, $0, $1, $2, $3) {
8990  var modifier = $1;
8991  var dot = $2;
8992  return {
8993    type: "AccessStart",
8994    children: modifier ? [modifier, dot] : [dot],
8995    optional: modifier?.token === "?"
8996  };
8997});
8998function ImplicitAccessStart(ctx, state2) {
8999  return (0, import_lib3.$EVENT)(ctx, state2, "ImplicitAccessStart", ImplicitAccessStart$0);
9000}
9001var PropertyAccessModifier$0 = QuestionMark;
9002var PropertyAccessModifier$1 = NonNullAssertion;
9003var PropertyAccessModifier$$ = [PropertyAccessModifier$0, PropertyAccessModifier$1];
9004function PropertyAccessModifier(ctx, state2) {
9005  return (0, import_lib3.$EVENT_C)(ctx, state2, "PropertyAccessModifier", PropertyAccessModifier$$);
9006}
9007var PropertyAccess$0 = (0, import_lib3.$TS)((0, import_lib3.$S)(AccessStart, (0, import_lib3.$C)(TemplateLiteral, StringLiteral, IntegerLiteral)), function($skip, $loc, $0, $1, $2) {
9008  var dot = $1;
9009  var literal = $2;
9010  return {
9011    type: "Index",
9012    children: [
9013      adjustIndexAccess(dot),
9014      literal,
9015      "]"
9016    ]
9017  };
9018});
9019var PropertyAccess$1 = (0, import_lib3.$TS)((0, import_lib3.$S)(AccessStart, (0, import_lib3.$EXPECT)($L23, 'PropertyAccess "-"'), IntegerLiteral), function($skip, $loc, $0, $1, $2, $3) {
9020  var dot = $1;
9021  var neg = $2;
9022  var num = $3;
9023  const len3 = {
9024    children: []
9025  }, children = [
9026    adjustIndexAccess(dot),
9027    len3,
9028    neg,
9029    num,
9030    "]"
9031  ];
9032  return {
9033    type: "NegativeIndex",
9034    children,
9035    len: len3
9036  };
9037});
9038var PropertyAccess$2 = (0, import_lib3.$TS)((0, import_lib3.$S)(AccessStart, (0, import_lib3.$Q)(InlineComment), (0, import_lib3.$C)(IdentifierName, PrivateIdentifier, LengthShorthand)), function($skip, $loc, $0, $1, $2, $3) {
9039  var dot = $1;
9040  var comments = $2;
9041  var id = $3;
9042  return {
9043    type: "PropertyAccess",
9044    name: id.name,
9045    dot,
9046    children: [dot, ...comments, ...id.children]
9047  };
9048});
9049var PropertyAccess$3 = (0, import_lib3.$TS)((0, import_lib3.$S)(ImplicitAccessStart, (0, import_lib3.$C)(PrivateIdentifier, LengthShorthand)), function($skip, $loc, $0, $1, $2) {
9050  var dot = $1;
9051  var id = $2;
9052  return {
9053    type: "PropertyAccess",
9054    name: id.name,
9055    dot,
9056    children: [dot, ...id.children]
9057  };
9058});
9059var PropertyAccess$4 = (0, import_lib3.$TS)((0, import_lib3.$S)(CoffeePrototypeEnabled, (0, import_lib3.$E)(PropertyAccessModifier), DoubleColon, (0, import_lib3.$E)(IdentifierName)), function($skip, $loc, $0, $1, $2, $3, $4) {
9060  var modifier = $2;
9061  var p = $3;
9062  var id = $4;
9063  const dot = { token: ".", $loc: p.$loc };
9064  const start = {
9065    type: "AccessStart",
9066    children: modifier ? [modifier, dot] : [dot],
9067    optional: modifier?.token === "?"
9068  };
9069  if (id) {
9070    return {
9071      type: "PropertyAccess",
9072      name: id.name,
9073      dot: start,
9074      children: [start, "prototype.", id]
9075    };
9076  } else {
9077    return {
9078      type: "PropertyAccess",
9079      name: "prototype",
9080      dot: start,
9081      children: [start, "prototype"]
9082    };
9083  }
9084});
9085var PropertyAccess$$ = [PropertyAccess$0, PropertyAccess$1, PropertyAccess$2, PropertyAccess$3, PropertyAccess$4];
9086function PropertyAccess(ctx, state2) {
9087  return (0, import_lib3.$EVENT_C)(ctx, state2, "PropertyAccess", PropertyAccess$$);
9088}
9089var PropertyGlob$0 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$S)((0, import_lib3.$E)(PropertyAccessModifier), OptionalDot), (0, import_lib3.$Q)(InlineComment), BracedObjectLiteral), function($skip, $loc, $0, $1, $2, $3) {
9090  var dot = $1;
9091  var object = $3;
9092  return {
9093    type: "PropertyGlob",
9094    dot,
9095    object,
9096    children: $0
9097  };
9098});
9099function PropertyGlob(ctx, state2) {
9100  return (0, import_lib3.$EVENT)(ctx, state2, "PropertyGlob", PropertyGlob$0);
9101}
9102var PropertyBind$0 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$E)(PropertyAccessModifier), At, OptionalDot, (0, import_lib3.$C)(IdentifierName, PrivateIdentifier), (0, import_lib3.$E)(Arguments)), function($skip, $loc, $0, $1, $2, $3, $4, $5) {
9103  var modifier = $1;
9104  var dot = $3;
9105  var id = $4;
9106  var args = $5;
9107  return {
9108    type: "PropertyBind",
9109    name: id.name,
9110    children: [modifier, dot, id],
9111    // omit `@` from children
9112    args: args?.children.slice(1, -1) ?? []
9113    // remove the parens from the arg list, or give an empty list
9114  };
9115});
9116function PropertyBind(ctx, state2) {
9117  return (0, import_lib3.$EVENT)(ctx, state2, "PropertyBind", PropertyBind$0);
9118}
9119var SuperProperty$0 = (0, import_lib3.$S)(Super, MemberBracketContent);
9120var SuperProperty$1 = (0, import_lib3.$S)(Super, (0, import_lib3.$N)(PropertyAccessModifier), PropertyAccess);
9121var SuperProperty$$ = [SuperProperty$0, SuperProperty$1];
9122function SuperProperty(ctx, state2) {
9123  return (0, import_lib3.$EVENT_C)(ctx, state2, "SuperProperty", SuperProperty$$);
9124}
9125var MetaProperty$0 = (0, import_lib3.$S)(New, Dot, Target);
9126var MetaProperty$1 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$EXPECT)($L24, 'MetaProperty "import.meta"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
9127  return { $loc, token: $1 };
9128});
9129var MetaProperty$2 = ReturnValue;
9130var MetaProperty$$ = [MetaProperty$0, MetaProperty$1, MetaProperty$2];
9131function MetaProperty(ctx, state2) {
9132  return (0, import_lib3.$EVENT_C)(ctx, state2, "MetaProperty", MetaProperty$$);
9133}
9134var ReturnValue$0 = (0, import_lib3.$TV)((0, import_lib3.$C)((0, import_lib3.$S)((0, import_lib3.$EXPECT)($L25, 'ReturnValue "return.value"'), NonIdContinue), (0, import_lib3.$S)(Return, (0, import_lib3.$Y)(AfterReturnShorthand))), function($skip, $loc, $0, $1) {
9135  return { type: "ReturnValue", children: [$1[0]] };
9136});
9137function ReturnValue(ctx, state2) {
9138  return (0, import_lib3.$EVENT)(ctx, state2, "ReturnValue", ReturnValue$0);
9139}
9140var AfterReturnShorthand$0 = WAssignmentOp;
9141var AfterReturnShorthand$1 = UpdateExpressionSymbol;
9142var AfterReturnShorthand$2 = TypeSuffix;
9143var AfterReturnShorthand$3 = (0, import_lib3.$S)(__, LetAssignment);
9144var AfterReturnShorthand$4 = (0, import_lib3.$S)(__, ConstAssignment);
9145var AfterReturnShorthand$$ = [AfterReturnShorthand$0, AfterReturnShorthand$1, AfterReturnShorthand$2, AfterReturnShorthand$3, AfterReturnShorthand$4];
9146function AfterReturnShorthand(ctx, state2) {
9147  return (0, import_lib3.$EVENT_C)(ctx, state2, "AfterReturnShorthand", AfterReturnShorthand$$);
9148}
9149var Parameters$0 = NonEmptyParameters;
9150var Parameters$1 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$E)(TypeParameters), Loc), function($skip, $loc, $0, $1, $2) {
9151  var tp = $1;
9152  var p = $2;
9153  return {
9154    type: "Parameters",
9155    children: [tp, { $loc: p.$loc, token: "()" }],
9156    tp,
9157    names: [],
9158    implicit: true
9159  };
9160});
9161var Parameters$$ = [Parameters$0, Parameters$1];
9162function Parameters(ctx, state2) {
9163  return (0, import_lib3.$EVENT_C)(ctx, state2, "Parameters", Parameters$$);
9164}
9165var ShortArrowParameters$0 = ObjectBindingPattern;
9166var ShortArrowParameters$1 = ArrayBindingPattern;
9167var ShortArrowParameters$$ = [ShortArrowParameters$0, ShortArrowParameters$1];
9168function ShortArrowParameters(ctx, state2) {
9169  return (0, import_lib3.$EVENT_C)(ctx, state2, "ShortArrowParameters", ShortArrowParameters$$);
9170}
9171var ArrowParameters$0 = (0, import_lib3.$TS)((0, import_lib3.$S)(ShortArrowParameters), function($skip, $loc, $0, $1) {
9172  return {
9173    type: "Parameters",
9174    children: ["(", $0, ")"],
9175    names: $0.names
9176  };
9177});
9178var ArrowParameters$1 = Parameters;
9179var ArrowParameters$$ = [ArrowParameters$0, ArrowParameters$1];
9180function ArrowParameters(ctx, state2) {
9181  return (0, import_lib3.$EVENT_C)(ctx, state2, "ArrowParameters", ArrowParameters$$);
9182}
9183var NonEmptyParameters$0 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$E)(TypeParameters), OpenParen, ParameterList, (0, import_lib3.$S)(__, CloseParen)), function($skip, $loc, $0, $1, $2, $3, $4) {
9184  var tp = $1;
9185  var open = $2;
9186  var params = $3;
9187  var close = $4;
9188  let tt, before = [], rest, after = [], errors = [];
9189  function append(p) {
9190    (rest ? after : before).push(p);
9191  }
9192  for (const param of params) {
9193    switch (param.type) {
9194      case "ThisType":
9195        if (tt) {
9196          append({
9197            type: "Error",
9198            message: "Only one typed this parameter is allowed"
9199          });
9200          append(param);
9201        } else {
9202          tt = insertTrimmingSpace(param, "");
9203          if (before.length || rest) {
9204            let delim = tt.children.at(-1);
9205            if (Array.isArray(delim))
9206              delim = delim.at(-1);
9207            if (delim?.token !== ",") {
9208              tt = {
9209                ...tt,
9210                children: [...tt.children, ", "]
9211              };
9212            }
9213          }
9214        }
9215        break;
9216      case "FunctionRestParameter":
9217        if (rest) {
9218          append({
9219            type: "Error",
9220            message: "Only one rest parameter is allowed"
9221          });
9222          append(param);
9223        } else {
9224          rest = param;
9225        }
9226        break;
9227      default:
9228        append(param);
9229    }
9230  }
9231  const names = before.flatMap((p) => p.names);
9232  if (rest) {
9233    const restIdentifier = rest.binding.ref || rest.binding;
9234    names.push(...rest.names || []);
9235    let blockPrefix;
9236    if (after.length) {
9237      blockPrefix = {
9238        children: ["[", insertTrimmingSpace(after, ""), "] = ", restIdentifier, ".splice(-", after.length.toString(), ")"],
9239        names: after.flatMap((p) => p.names)
9240      };
9241    }
9242    return {
9243      type: "Parameters",
9244      children: [
9245        tp,
9246        open,
9247        tt,
9248        ...before,
9249        // Remove delimiter
9250        { ...rest, children: rest.children.slice(0, -1) },
9251        close
9252      ],
9253      tp,
9254      names,
9255      blockPrefix
9256    };
9257  }
9258  return {
9259    type: "Parameters",
9260    children: [tp, open, tt, ...before, close],
9261    names,
9262    tp
9263  };
9264});
9265function NonEmptyParameters(ctx, state2) {
9266  return (0, import_lib3.$EVENT)(ctx, state2, "NonEmptyParameters", NonEmptyParameters$0);
9267}
9268var ParameterList$0 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$Q)(Parameter), NestedParameterList), function($skip, $loc, $0, $1, $2) {
9269  return [...$1, ...$2];
9270});
9271var ParameterList$1 = (0, import_lib3.$TV)((0, import_lib3.$Q)((0, import_lib3.$S)(__, Parameter)), function($skip, $loc, $0, $1) {
9272  return $1.map(([eos, p]) => ({
9273    ...p,
9274    children: [eos, ...p.children]
9275  }));
9276});
9277var ParameterList$$ = [ParameterList$0, ParameterList$1];
9278function ParameterList(ctx, state2) {
9279  return (0, import_lib3.$EVENT_C)(ctx, state2, "ParameterList", ParameterList$$);
9280}
9281var NestedParameterList$0 = (0, import_lib3.$TS)((0, import_lib3.$S)(PushIndent, (0, import_lib3.$Q)(NestedParameter), PopIndent), function($skip, $loc, $0, $1, $2, $3) {
9282  var params = $2;
9283  if (!params.length)
9284    return $skip;
9285  return params;
9286});
9287function NestedParameterList(ctx, state2) {
9288  return (0, import_lib3.$EVENT)(ctx, state2, "NestedParameterList", NestedParameterList$0);
9289}
9290var NestedParameter$0 = (0, import_lib3.$TS)((0, import_lib3.$S)(Nested, (0, import_lib3.$P)(Parameter)), function($skip, $loc, $0, $1, $2) {
9291  var ws = $1;
9292  var params = $2;
9293  params = [...params];
9294  params[0] = prepend(ws, params[0]);
9295  return params;
9296});
9297function NestedParameter(ctx, state2) {
9298  return (0, import_lib3.$EVENT)(ctx, state2, "NestedParameter", NestedParameter$0);
9299}
9300var Parameter$0 = ThisType;
9301var Parameter$1 = ParameterElement;
9302var Parameter$2 = FunctionRestParameter;
9303var Parameter$$ = [Parameter$0, Parameter$1, Parameter$2];
9304function Parameter(ctx, state2) {
9305  return (0, import_lib3.$EVENT_C)(ctx, state2, "Parameter", Parameter$$);
9306}
9307var FunctionRestParameter$0 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$N)(EOS), BindingRestElement, (0, import_lib3.$E)(TypeSuffix), ParameterElementDelimiter), function($skip, $loc, $0, $1, $2, $3, $4) {
9308  var id = $2;
9309  return {
9310    type: "FunctionRestParameter",
9311    children: $0.slice(1),
9312    names: id.names,
9313    binding: id.binding
9314  };
9315});
9316function FunctionRestParameter(ctx, state2) {
9317  return (0, import_lib3.$EVENT)(ctx, state2, "FunctionRestParameter", FunctionRestParameter$0);
9318}
9319var ParameterElement$0 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$E)(_), (0, import_lib3.$E)(AccessModifier), (0, import_lib3.$E)(_), (0, import_lib3.$C)(NWBindingIdentifier, BindingPattern), (0, import_lib3.$E)(TypeSuffix), (0, import_lib3.$E)(Initializer), ParameterElementDelimiter), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7) {
9320  var accessModifier = $2;
9321  var binding = $4;
9322  var typeSuffix = $5;
9323  var initializer = $6;
9324  var delim = $7;
9325  return {
9326    type: "Parameter",
9327    children: $0,
9328    names: binding.names,
9329    typeSuffix,
9330    accessModifier,
9331    initializer,
9332    delim
9333  };
9334});
9335function ParameterElement(ctx, state2) {
9336  return (0, import_lib3.$EVENT)(ctx, state2, "ParameterElement", ParameterElement$0);
9337}
9338var ParameterElementDelimiter$0 = (0, import_lib3.$S)((0, import_lib3.$E)(_), Comma);
9339var ParameterElementDelimiter$1 = (0, import_lib3.$Y)((0, import_lib3.$S)(__, (0, import_lib3.$R$0)((0, import_lib3.$EXPECT)($R11, "ParameterElementDelimiter /[)}]/"))));
9340var ParameterElementDelimiter$2 = (0, import_lib3.$T)((0, import_lib3.$S)((0, import_lib3.$Y)(EOS), InsertComma), function(value) {
9341  return value[1];
9342});
9343var ParameterElementDelimiter$$ = [ParameterElementDelimiter$0, ParameterElementDelimiter$1, ParameterElementDelimiter$2];
9344function ParameterElementDelimiter(ctx, state2) {
9345  return (0, import_lib3.$EVENT_C)(ctx, state2, "ParameterElementDelimiter", ParameterElementDelimiter$$);
9346}
9347var BindingIdentifier$0 = (0, import_lib3.$TS)((0, import_lib3.$S)(__, NWBindingIdentifier), function($skip, $loc, $0, $1, $2) {
9348  var ws = $1;
9349  var identifier = $2;
9350  return prepend(ws, identifier);
9351});
9352function BindingIdentifier(ctx, state2) {
9353  return (0, import_lib3.$EVENT)(ctx, state2, "BindingIdentifier", BindingIdentifier$0);
9354}
9355var NWBindingIdentifier$0 = (0, import_lib3.$TS)((0, import_lib3.$S)(At, AtIdentifierRef), function($skip, $loc, $0, $1, $2) {
9356  var ref = $2;
9357  return {
9358    type: "AtBinding",
9359    children: [ref],
9360    ref
9361  };
9362});
9363var NWBindingIdentifier$1 = (0, import_lib3.$TS)((0, import_lib3.$S)(Hash, AtIdentifierRef), function($skip, $loc, $0, $1, $2) {
9364  var ref = $2;
9365  ref = { ...ref, id: `#${ref.id}` };
9366  return {
9367    type: "AtBinding",
9368    children: [ref],
9369    ref
9370  };
9371});
9372var NWBindingIdentifier$2 = Identifier;
9373var NWBindingIdentifier$3 = (0, import_lib3.$TS)((0, import_lib3.$S)(ReturnValue), function($skip, $loc, $0, $1) {
9374  return { children: [$1], names: [] };
9375});
9376var NWBindingIdentifier$$ = [NWBindingIdentifier$0, NWBindingIdentifier$1, NWBindingIdentifier$2, NWBindingIdentifier$3];
9377function NWBindingIdentifier(ctx, state2) {
9378  return (0, import_lib3.$EVENT_C)(ctx, state2, "NWBindingIdentifier", NWBindingIdentifier$$);
9379}
9380var AtIdentifierRef$0 = (0, import_lib3.$TV)(ReservedWord, function($skip, $loc, $0, $1) {
9381  var r = $0;
9382  return makeRef(`_${r}`, r);
9383});
9384var AtIdentifierRef$1 = (0, import_lib3.$TV)(IdentifierName, function($skip, $loc, $0, $1) {
9385  var id = $0;
9386  return makeRef(id.name);
9387});
9388var AtIdentifierRef$$ = [AtIdentifierRef$0, AtIdentifierRef$1];
9389function AtIdentifierRef(ctx, state2) {
9390  return (0, import_lib3.$EVENT_C)(ctx, state2, "AtIdentifierRef", AtIdentifierRef$$);
9391}
9392var PinPattern$0 = (0, import_lib3.$TS)((0, import_lib3.$S)(Caret, SingleLineExpressionWithIndentedApplicationForbidden), function($skip, $loc, $0, $1, $2) {
9393  var expression = $2;
9394  return {
9395    type: "PinPattern",
9396    children: $0,
9397    expression
9398  };
9399});
9400var PinPattern$1 = (0, import_lib3.$TV)(ActualMemberExpression, function($skip, $loc, $0, $1) {
9401  var expression = $0;
9402  return {
9403    type: "PinPattern",
9404    children: [expression],
9405    expression
9406  };
9407});
9408var PinPattern$2 = (0, import_lib3.$TV)((0, import_lib3.$S)((0, import_lib3.$EXPECT)($R12, "PinPattern /[+-]/"), NumericLiteral), function($skip, $loc, $0, $1) {
9409  var expression = $0;
9410  return {
9411    type: "PinPattern",
9412    children: [expression],
9413    expression
9414  };
9415});
9416var PinPattern$3 = (0, import_lib3.$TV)(Undefined, function($skip, $loc, $0, $1) {
9417  var expression = $0;
9418  return {
9419    type: "PinPattern",
9420    children: [expression],
9421    expression
9422  };
9423});
9424var PinPattern$$ = [PinPattern$0, PinPattern$1, PinPattern$2, PinPattern$3];
9425function PinPattern(ctx, state2) {
9426  return (0, import_lib3.$EVENT_C)(ctx, state2, "PinPattern", PinPattern$$);
9427}
9428var BindingPattern$0 = ObjectBindingPattern;
9429var BindingPattern$1 = ArrayBindingPattern;
9430var BindingPattern$2 = PinPattern;
9431var BindingPattern$3 = Literal;
9432var BindingPattern$4 = RegularExpressionLiteral;
9433var BindingPattern$$ = [BindingPattern$0, BindingPattern$1, BindingPattern$2, BindingPattern$3, BindingPattern$4];
9434function BindingPattern(ctx, state2) {
9435  return (0, import_lib3.$EVENT_C)(ctx, state2, "BindingPattern", BindingPattern$$);
9436}
9437var ObjectBindingPattern$0 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$E)(_), OpenBrace, ObjectBindingPatternContent, __, CloseBrace), function($skip, $loc, $0, $1, $2, $3, $4, $5) {
9438  var ws1 = $1;
9439  var open = $2;
9440  var c = $3;
9441  var ws2 = $4;
9442  var close = $5;
9443  return {
9444    type: "ObjectBindingPattern",
9445    children: [ws1, open, c.children, ws2, close],
9446    names: c.names,
9447    properties: c.children
9448  };
9449});
9450function ObjectBindingPattern(ctx, state2) {
9451  return (0, import_lib3.$EVENT)(ctx, state2, "ObjectBindingPattern", ObjectBindingPattern$0);
9452}
9453var ObjectBindingPatternContent$0 = NestedBindingProperties;
9454var ObjectBindingPatternContent$1 = (0, import_lib3.$TV)((0, import_lib3.$E)(BindingPropertyList), function($skip, $loc, $0, $1) {
9455  var props = $0;
9456  if (!props)
9457    return { children: [], names: [] };
9458  return reorderBindingRestProperty(props);
9459});
9460var ObjectBindingPatternContent$$ = [ObjectBindingPatternContent$0, ObjectBindingPatternContent$1];
9461function ObjectBindingPatternContent(ctx, state2) {
9462  return (0, import_lib3.$EVENT_C)(ctx, state2, "ObjectBindingPatternContent", ObjectBindingPatternContent$$);
9463}
9464var BindingPropertyList$0 = (0, import_lib3.$TV)((0, import_lib3.$P)((0, import_lib3.$S)(BindingProperty, ObjectPropertyDelimiter)), function($skip, $loc, $0, $1) {
9465  var props = $0;
9466  return props.map(([prop, delim]) => {
9467    return {
9468      ...prop,
9469      delim,
9470      children: [...prop.children, delim]
9471    };
9472  });
9473});
9474function BindingPropertyList(ctx, state2) {
9475  return (0, import_lib3.$EVENT)(ctx, state2, "BindingPropertyList", BindingPropertyList$0);
9476}
9477var ArrayBindingPattern$0 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$E)(_), OpenBracket, ArrayBindingPatternContent, __, CloseBracket), function($skip, $loc, $0, $1, $2, $3, $4, $5) {
9478  var ws1 = $1;
9479  var open = $2;
9480  var c = $3;
9481  var ws2 = $4;
9482  var close = $5;
9483  return {
9484    ...c,
9485    // names, blockPrefix, length
9486    type: "ArrayBindingPattern",
9487    elements: c.children,
9488    children: [ws1, open, c.children, ws2, close]
9489  };
9490});
9491function ArrayBindingPattern(ctx, state2) {
9492  return (0, import_lib3.$EVENT)(ctx, state2, "ArrayBindingPattern", ArrayBindingPattern$0);
9493}
9494var ArrayBindingPatternContent$0 = NestedBindingElements;
9495var ArrayBindingPatternContent$1 = (0, import_lib3.$TV)((0, import_lib3.$E)(BindingElementList), function($skip, $loc, $0, $1) {
9496  var elements = $0;
9497  if (!elements)
9498    return { children: [], names: [], length: 0 };
9499  return adjustBindingElements(elements);
9500});
9501var ArrayBindingPatternContent$$ = [ArrayBindingPatternContent$0, ArrayBindingPatternContent$1];
9502function ArrayBindingPatternContent(ctx, state2) {
9503  return (0, import_lib3.$EVENT_C)(ctx, state2, "ArrayBindingPatternContent", ArrayBindingPatternContent$$);
9504}
9505var BindingElementList$0 = (0, import_lib3.$TV)((0, import_lib3.$P)((0, import_lib3.$S)(BindingElement, ArrayElementDelimiter)), function($skip, $loc, $0, $1) {
9506  var elements = $0;
9507  return elements.map(([element, delim]) => {
9508    return {
9509      ...element,
9510      // BindingElement.children is a tuple of the form [ws, element]
9511      children: [...element.children, delim]
9512    };
9513  });
9514});
9515function BindingElementList(ctx, state2) {
9516  return (0, import_lib3.$EVENT)(ctx, state2, "BindingElementList", BindingElementList$0);
9517}
9518var NestedBindingElementList$0 = (0, import_lib3.$TS)((0, import_lib3.$S)(Nested, BindingElementList), function($skip, $loc, $0, $1, $2) {
9519  var indent = $1;
9520  var elements = $2;
9521  return elements.map((element, i) => {
9522    if (i > 0)
9523      return element;
9524    return {
9525      ...element,
9526      children: [indent, ...element.children.slice(1)]
9527      // replace ws wth indent
9528    };
9529  });
9530});
9531function NestedBindingElementList(ctx, state2) {
9532  return (0, import_lib3.$EVENT)(ctx, state2, "NestedBindingElementList", NestedBindingElementList$0);
9533}
9534var Elision$0 = (0, import_lib3.$S)(__, Comma);
9535function Elision(ctx, state2) {
9536  return (0, import_lib3.$EVENT)(ctx, state2, "Elision", Elision$0);
9537}
9538var NestedBindingProperties$0 = (0, import_lib3.$TS)((0, import_lib3.$S)(PushIndent, (0, import_lib3.$Q)(NestedBindingPropertyList), PopIndent), function($skip, $loc, $0, $1, $2, $3) {
9539  var props = $2;
9540  if (!props.length)
9541    return $skip;
9542  return reorderBindingRestProperty(props.flat());
9543});
9544function NestedBindingProperties(ctx, state2) {
9545  return (0, import_lib3.$EVENT)(ctx, state2, "NestedBindingProperties", NestedBindingProperties$0);
9546}
9547var NestedBindingPropertyList$0 = (0, import_lib3.$TS)((0, import_lib3.$S)(Nested, BindingPropertyList), function($skip, $loc, $0, $1, $2) {
9548  var ws = $1;
9549  var props = $2;
9550  return props.map((prop, i) => {
9551    if (i > 0)
9552      return prop;
9553    return prepend(ws, prop);
9554  });
9555});
9556function NestedBindingPropertyList(ctx, state2) {
9557  return (0, import_lib3.$EVENT)(ctx, state2, "NestedBindingPropertyList", NestedBindingPropertyList$0);
9558}
9559var BindingProperty$0 = BindingRestProperty;
9560var BindingProperty$1 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$E)(_), PropertyName, (0, import_lib3.$E)(_), Colon, (0, import_lib3.$E)(_), (0, import_lib3.$C)(BindingIdentifier, BindingPattern), (0, import_lib3.$E)(Initializer)), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7) {
9561  var name = $2;
9562  var value = $6;
9563  var initializer = $7;
9564  return {
9565    type: "BindingProperty",
9566    children: $0,
9567    name,
9568    value,
9569    initializer,
9570    names: value.names
9571  };
9572});
9573var BindingProperty$2 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$E)(_), (0, import_lib3.$E)(Caret), BindingIdentifier, (0, import_lib3.$E)(Initializer)), function($skip, $loc, $0, $1, $2, $3, $4) {
9574  var ws = $1;
9575  var pin = $2;
9576  var binding = $3;
9577  var initializer = $4;
9578  if (binding.type === "AtBinding") {
9579    return {
9580      type: "AtBindingProperty",
9581      children: $0,
9582      binding,
9583      ref: binding.ref,
9584      initializer,
9585      names: []
9586    };
9587  }
9588  if (pin) {
9589    return {
9590      type: "PinProperty",
9591      children: [ws, binding],
9592      name: binding,
9593      value: {
9594        type: "PinPattern",
9595        expression: binding
9596      }
9597    };
9598  }
9599  return {
9600    type: "BindingProperty",
9601    children: $0,
9602    name: binding,
9603    value: void 0,
9604    initializer,
9605    names: binding.names,
9606    identifier: binding
9607  };
9608});
9609var BindingProperty$$ = [BindingProperty$0, BindingProperty$1, BindingProperty$2];
9610function BindingProperty(ctx, state2) {
9611  return (0, import_lib3.$EVENT_C)(ctx, state2, "BindingProperty", BindingProperty$$);
9612}
9613var BindingRestProperty$0 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$E)(_), DotDotDot, BindingIdentifier), function($skip, $loc, $0, $1, $2, $3) {
9614  var ws = $1;
9615  var dots = $2;
9616  var id = $3;
9617  return {
9618    ...id,
9619    type: "BindingRestProperty",
9620    children: [...ws || [], dots, ...id.children]
9621  };
9622});
9623var BindingRestProperty$1 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$E)(_), BindingIdentifier, DotDotDot), function($skip, $loc, $0, $1, $2, $3) {
9624  var ws = $1;
9625  var id = $2;
9626  var dots = $3;
9627  return {
9628    ...id,
9629    type: "BindingRestProperty",
9630    children: [...ws || [], dots, ...id.children]
9631  };
9632});
9633var BindingRestProperty$$ = [BindingRestProperty$0, BindingRestProperty$1];
9634function BindingRestProperty(ctx, state2) {
9635  return (0, import_lib3.$EVENT_C)(ctx, state2, "BindingRestProperty", BindingRestProperty$$);
9636}
9637var NestedBindingElements$0 = (0, import_lib3.$TS)((0, import_lib3.$S)(PushIndent, (0, import_lib3.$Q)(NestedBindingElementList), PopIndent), function($skip, $loc, $0, $1, $2, $3) {
9638  var elements = $2;
9639  if (!elements.length)
9640    return $skip;
9641  return adjustBindingElements(elements.flat());
9642});
9643function NestedBindingElements(ctx, state2) {
9644  return (0, import_lib3.$EVENT)(ctx, state2, "NestedBindingElements", NestedBindingElements$0);
9645}
9646var BindingElement$0 = BindingRestElement;
9647var BindingElement$1 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$E)(_), (0, import_lib3.$C)(BindingIdentifier, BindingPattern), (0, import_lib3.$E)(Initializer)), function($skip, $loc, $0, $1, $2, $3) {
9648  var ws = $1;
9649  var binding = $2;
9650  var initializer = $3;
9651  if (binding.children) {
9652    binding = {
9653      ...binding,
9654      initializer,
9655      children: [...binding.children, initializer]
9656    };
9657  }
9658  return {
9659    names: binding.names,
9660    children: [ws, binding]
9661  };
9662});
9663var BindingElement$2 = (0, import_lib3.$TV)((0, import_lib3.$Y)((0, import_lib3.$S)((0, import_lib3.$E)(_), (0, import_lib3.$EXPECT)($L17, 'BindingElement ","'))), function($skip, $loc, $0, $1) {
9664  return {
9665    children: [{
9666      type: "ElisionElement",
9667      children: [""]
9668    }],
9669    names: []
9670  };
9671});
9672var BindingElement$$ = [BindingElement$0, BindingElement$1, BindingElement$2];
9673function BindingElement(ctx, state2) {
9674  return (0, import_lib3.$EVENT_C)(ctx, state2, "BindingElement", BindingElement$$);
9675}
9676var BindingRestElement$0 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$E)(_), DotDotDot, (0, import_lib3.$C)(BindingIdentifier, BindingPattern, EmptyBindingPattern)), function($skip, $loc, $0, $1, $2, $3) {
9677  var ws = $1;
9678  var dots = $2;
9679  var binding = $3;
9680  return {
9681    type: "BindingRestElement",
9682    children: [ws, [dots, binding]],
9683    binding,
9684    name: binding.name,
9685    names: binding.names,
9686    rest: true
9687  };
9688});
9689var BindingRestElement$1 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$E)(_), (0, import_lib3.$C)(BindingIdentifier, BindingPattern), DotDotDot), function($skip, $loc, $0, $1, $2, $3) {
9690  var ws = $1;
9691  var binding = $2;
9692  var dots = $3;
9693  return {
9694    type: "BindingRestElement",
9695    children: [...ws || [], dots, binding],
9696    binding,
9697    name: binding.name,
9698    names: binding.names,
9699    rest: true
9700  };
9701});
9702var BindingRestElement$$ = [BindingRestElement$0, BindingRestElement$1];
9703function BindingRestElement(ctx, state2) {
9704  return (0, import_lib3.$EVENT_C)(ctx, state2, "BindingRestElement", BindingRestElement$$);
9705}
9706var EmptyBindingPattern$0 = (0, import_lib3.$TV)((0, import_lib3.$EXPECT)($L0, 'EmptyBindingPattern ""'), function($skip, $loc, $0, $1) {
9707  const ref = makeRef();
9708  return {
9709    type: "EmptyBinding",
9710    children: [ref],
9711    names: [],
9712    ref
9713  };
9714});
9715function EmptyBindingPattern(ctx, state2) {
9716  return (0, import_lib3.$EVENT)(ctx, state2, "EmptyBindingPattern", EmptyBindingPattern$0);
9717}
9718var FunctionDeclaration$0 = (0, import_lib3.$TS)((0, import_lib3.$S)(FunctionExpression), function($skip, $loc, $0, $1) {
9719  if ($1.type !== "FunctionExpression")
9720    return $skip;
9721  if ($1.id)
9722    return $1;
9723  return makeLeftHandSideExpression($1);
9724});
9725function FunctionDeclaration(ctx, state2) {
9726  return (0, import_lib3.$EVENT)(ctx, state2, "FunctionDeclaration", FunctionDeclaration$0);
9727}
9728var FunctionSignature$0 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$E)((0, import_lib3.$S)(Async, _)), Function2, (0, import_lib3.$E)((0, import_lib3.$S)((0, import_lib3.$E)(_), Star)), (0, import_lib3.$E)((0, import_lib3.$S)((0, import_lib3.$E)(_), NWBindingIdentifier)), (0, import_lib3.$E)(_), Parameters, (0, import_lib3.$E)(ReturnTypeSuffix)), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7) {
9729  var async = $1;
9730  var func = $2;
9731  var generator = $3;
9732  var wid = $4;
9733  var w = $5;
9734  var parameters = $6;
9735  var suffix = $7;
9736  if (!async)
9737    async = [];
9738  if (!generator)
9739    generator = [];
9740  const id = wid?.[1];
9741  return {
9742    type: "FunctionSignature",
9743    id,
9744    name: id?.name,
9745    parameters,
9746    returnType: suffix,
9747    async,
9748    generator,
9749    modifier: {
9750      async: !!async.length,
9751      generator: !!generator.length
9752    },
9753    block: null,
9754    children: !parameters.implicit ? [async, func, generator, wid, w, parameters, suffix] : [async, func, generator, wid, parameters, w, suffix]
9755    // move whitespace w to after implicit () in parameters
9756  };
9757});
9758function FunctionSignature(ctx, state2) {
9759  return (0, import_lib3.$EVENT)(ctx, state2, "FunctionSignature", FunctionSignature$0);
9760}
9761var FunctionExpression$0 = (0, import_lib3.$TS)((0, import_lib3.$S)(FunctionSignature, (0, import_lib3.$E)(BracedBlock)), function($skip, $loc, $0, $1, $2) {
9762  var signature = $1;
9763  var block = $2;
9764  if (!block) {
9765    return {
9766      ...signature,
9767      type: "FunctionExpression",
9768      signature,
9769      ts: true
9770    };
9771  }
9772  return {
9773    ...signature,
9774    type: "FunctionExpression",
9775    signature,
9776    children: [...signature.children, block],
9777    block
9778  };
9779});
9780var FunctionExpression$1 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$N)(ArrowFunction), OpenParen, BinaryOp, CloseParen), function($skip, $loc, $0, $1, $2, $3, $4) {
9781  var open = $2;
9782  var op = $3;
9783  var close = $4;
9784  if (op.special && op.call && !op.negated)
9785    return op.call;
9786  const refA = makeRef("a"), refB = makeRef("b"), body = processBinaryOpExpression([refA, [
9787    [[], op, [], refB]
9788    // BinaryOpRHS
9789  ]]);
9790  const parameters = {
9791    type: "Parameters",
9792    children: ["(", refA, ",", refB, ")"],
9793    names: []
9794  };
9795  const block = {
9796    expressions: [body]
9797  };
9798  return {
9799    type: "ArrowFunction",
9800    signature: {
9801      modifier: {}
9802    },
9803    children: [open, parameters, " => ", body, close],
9804    body,
9805    parenthesized: true,
9806    parenthesizedOp: op,
9807    block,
9808    parameters
9809  };
9810});
9811var FunctionExpression$2 = (0, import_lib3.$TS)((0, import_lib3.$S)(OpenParen, NonPipelineAssignmentExpression, __, BinaryOp, __, CloseParen), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6) {
9812  var open = $1;
9813  var lhs = $2;
9814  var ws1 = $3;
9815  var op = $4;
9816  var ws2 = $5;
9817  var close = $6;
9818  const refB = makeRef("b");
9819  const fn = makeAmpersandFunction({
9820    ref: refB,
9821    body: processBinaryOpExpression([lhs, [
9822      [ws1, op, ws2, refB]
9823      // BinaryOpRHS
9824    ]])
9825  });
9826  return {
9827    type: "ParenthesizedExpression",
9828    children: [open, fn, close],
9829    expression: fn
9830  };
9831});
9832var FunctionExpression$3 = (0, import_lib3.$TS)((0, import_lib3.$S)(OpenParen, (0, import_lib3.$P)((0, import_lib3.$S)(NotDedented, UpdateExpression, WAssignmentOp)), __, CloseParen), function($skip, $loc, $0, $1, $2, $3, $4) {
9833  var open = $1;
9834  var lhs = $2;
9835  var ws2 = $3;
9836  var close = $4;
9837  lhs = lhs.map((x) => [x[0], x[1], ...x[2]]);
9838  const refB = makeRef("b");
9839  const fn = makeAmpersandFunction({
9840    ref: refB,
9841    body: {
9842      type: "AssignmentExpression",
9843      children: [lhs, ws2, refB],
9844      names: null,
9845      lhs,
9846      assigned: lhs[0][1],
9847      expression: refB
9848    }
9849  });
9850  return {
9851    type: "ParenthesizedExpression",
9852    children: [open, fn, close],
9853    expression: fn
9854  };
9855});
9856var FunctionExpression$4 = (0, import_lib3.$TS)((0, import_lib3.$S)(OpenParen, __, IsLike, __, PatternExpressionList, CloseParen), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6) {
9857  var open = $1;
9858  var ws1 = $2;
9859  var op = $3;
9860  var ws2 = $4;
9861  var rhs = $5;
9862  var close = $6;
9863  const refA = makeRef("a");
9864  const fn = makeAmpersandFunction({
9865    ref: refA,
9866    body: processBinaryOpExpression([refA, [
9867      [ws1, op, ws2, rhs]
9868      // BinaryOpRHS
9869    ]])
9870  });
9871  return {
9872    type: "ParenthesizedExpression",
9873    children: [open, fn, close],
9874    expression: fn
9875  };
9876});
9877var FunctionExpression$5 = (0, import_lib3.$TS)((0, import_lib3.$S)(OpenParen, __, (0, import_lib3.$N)((0, import_lib3.$EXPECT)($R13, "FunctionExpression /\\+\\+|--|[\\+\\-&]\\S/")), BinaryOp, __, NonPipelineAssignmentExpression, CloseParen), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7) {
9878  var open = $1;
9879  var ws1 = $2;
9880  var op = $4;
9881  var ws2 = $5;
9882  var rhs = $6;
9883  var close = $7;
9884  const refA = makeRef("a");
9885  const fn = makeAmpersandFunction({
9886    ref: refA,
9887    body: processBinaryOpExpression([refA, [
9888      [ws1, op, ws2, rhs]
9889      // BinaryOpRHS
9890    ]])
9891  });
9892  return {
9893    type: "ParenthesizedExpression",
9894    children: [open, fn, close],
9895    expression: fn
9896  };
9897});
9898var FunctionExpression$$ = [FunctionExpression$0, FunctionExpression$1, FunctionExpression$2, FunctionExpression$3, FunctionExpression$4, FunctionExpression$5];
9899function FunctionExpression(ctx, state2) {
9900  return (0, import_lib3.$EVENT_C)(ctx, state2, "FunctionExpression", FunctionExpression$$);
9901}
9902var OperatorDeclaration$0 = (0, import_lib3.$TS)((0, import_lib3.$S)(Operator, (0, import_lib3.$E)(OperatorBehavior), _, LexicalDeclaration), function($skip, $loc, $0, $1, $2, $3, $4) {
9903  var op = $1;
9904  var behavior = $2;
9905  var w = $3;
9906  var decl = $4;
9907  decl.names.forEach((name) => state.operators.set(name, behavior));
9908  return {
9909    ...decl,
9910    children: [insertTrimmingSpace(w, ""), ...decl.children]
9911  };
9912});
9913var OperatorDeclaration$1 = (0, import_lib3.$TS)((0, import_lib3.$S)(OperatorSignature, BracedBlock), function($skip, $loc, $0, $1, $2) {
9914  var signature = $1;
9915  var block = $2;
9916  state.operators.set(signature.id.name, signature.behavior);
9917  return {
9918    ...signature,
9919    type: "FunctionExpression",
9920    signature,
9921    children: [...signature.children, block],
9922    block,
9923    operator: true
9924  };
9925});
9926var OperatorDeclaration$2 = (0, import_lib3.$TS)((0, import_lib3.$S)(Operator, _, Identifier, (0, import_lib3.$E)(OperatorBehavior), (0, import_lib3.$Q)((0, import_lib3.$S)(CommaDelimiter, (0, import_lib3.$E)(_), Identifier, (0, import_lib3.$E)(OperatorBehavior)))), function($skip, $loc, $0, $1, $2, $3, $4, $5) {
9927  var op = $1;
9928  var w1 = $2;
9929  var id = $3;
9930  var behavior = $4;
9931  var ids = $5;
9932  state.operators.set(id.name, behavior);
9933  ids.forEach(([, , id2, behavior2]) => state.operators.set(id2.name, behavior2));
9934  return {
9935    id,
9936    children: []
9937  };
9938});
9939var OperatorDeclaration$$ = [OperatorDeclaration$0, OperatorDeclaration$1, OperatorDeclaration$2];
9940function OperatorDeclaration(ctx, state2) {
9941  return (0, import_lib3.$EVENT_C)(ctx, state2, "OperatorDeclaration", OperatorDeclaration$$);
9942}
9943var OperatorSignature$0 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$E)((0, import_lib3.$S)(Async, _)), Operator, (0, import_lib3.$E)((0, import_lib3.$S)(_, Function2)), (0, import_lib3.$E)((0, import_lib3.$S)((0, import_lib3.$E)(_), Star)), _, Identifier, (0, import_lib3.$E)(OperatorBehavior), (0, import_lib3.$E)(_), NonEmptyParameters, (0, import_lib3.$E)(ReturnTypeSuffix)), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7, $8, $9, $10) {
9944  var async = $1;
9945  var op = $2;
9946  var func = $3;
9947  var generator = $4;
9948  var w1 = $5;
9949  var id = $6;
9950  var behavior = $7;
9951  var w2 = $8;
9952  var parameters = $9;
9953  var suffix = $10;
9954  if (!async)
9955    async = [];
9956  if (!generator)
9957    generator = [];
9958  if (!func) {
9959    func = { $loc: op.$loc, token: "function" };
9960  } else {
9961    func = [insertTrimmingSpace(func[0], ""), func[1]];
9962  }
9963  return {
9964    type: "FunctionSignature",
9965    id,
9966    name: id.name,
9967    parameters,
9968    returnType: suffix,
9969    async,
9970    generator,
9971    modifier: {
9972      async: !!async.length,
9973      generator: !!generator.length
9974    },
9975    block: null,
9976    children: [async, func, generator, w1, id, w2, parameters, suffix],
9977    behavior
9978  };
9979});
9980function OperatorSignature(ctx, state2) {
9981  return (0, import_lib3.$EVENT)(ctx, state2, "OperatorSignature", OperatorSignature$0);
9982}
9983var OperatorBehavior$0 = (0, import_lib3.$TS)((0, import_lib3.$S)(OperatorPrecedence, (0, import_lib3.$E)(OperatorAssociativity)), function($skip, $loc, $0, $1, $2) {
9984  return { ...$1, ...$2 };
9985});
9986var OperatorBehavior$1 = (0, import_lib3.$TS)((0, import_lib3.$S)(OperatorAssociativity, (0, import_lib3.$E)(OperatorPrecedence)), function($skip, $loc, $0, $1, $2) {
9987  return { ...$1, ...$2 };
9988});
9989var OperatorBehavior$$ = [OperatorBehavior$0, OperatorBehavior$1];
9990function OperatorBehavior(ctx, state2) {
9991  return (0, import_lib3.$EVENT_C)(ctx, state2, "OperatorBehavior", OperatorBehavior$$);
9992}
9993var OperatorPrecedence$0 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$E)(_), (0, import_lib3.$C)((0, import_lib3.$EXPECT)($L26, 'OperatorPrecedence "tighter"'), (0, import_lib3.$EXPECT)($L27, 'OperatorPrecedence "looser"'), (0, import_lib3.$EXPECT)($L28, 'OperatorPrecedence "same"')), NonIdContinue, (0, import_lib3.$E)(_), (0, import_lib3.$C)(Identifier, (0, import_lib3.$S)(OpenParen, BinaryOp, CloseParen))), function($skip, $loc, $0, $1, $2, $3, $4, $5) {
9994  var mod = $2;
9995  var op = $5;
9996  let prec = op.type === "Identifier" ? state.operators.get(op.name).prec : getPrecedence(op[1]);
9997  switch (mod) {
9998    case "tighter":
9999      prec += 1 / 64;
10000      break;
10001    case "looser":
10002      prec -= 1 / 64;
10003      break;
10004  }
10005  return { prec };
10006});
10007function OperatorPrecedence(ctx, state2) {
10008  return (0, import_lib3.$EVENT)(ctx, state2, "OperatorPrecedence", OperatorPrecedence$0);
10009}
10010var OperatorAssociativity$0 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$E)(_), (0, import_lib3.$C)((0, import_lib3.$EXPECT)($L29, 'OperatorAssociativity "left"'), (0, import_lib3.$EXPECT)($L30, 'OperatorAssociativity "right"'), (0, import_lib3.$EXPECT)($L31, 'OperatorAssociativity "non"'), (0, import_lib3.$EXPECT)($L32, 'OperatorAssociativity "relational"'), (0, import_lib3.$EXPECT)($L33, 'OperatorAssociativity "arguments"')), NonIdContinue), function($skip, $loc, $0, $1, $2, $3) {
10011  var assoc = $2;
10012  if (assoc === "relational") {
10013    return { relational: true, assoc: "non" };
10014  }
10015  return { assoc };
10016});
10017function OperatorAssociativity(ctx, state2) {
10018  return (0, import_lib3.$EVENT)(ctx, state2, "OperatorAssociativity", OperatorAssociativity$0);
10019}
10020var ThinArrowFunction$0 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$E)((0, import_lib3.$S)(Async, _)), ArrowParameters, (0, import_lib3.$E)(ReturnTypeSuffix), (0, import_lib3.$E)(_), Arrow, NoCommaBracedOrEmptyBlock), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6) {
10021  var async = $1;
10022  var parameters = $2;
10023  var suffix = $3;
10024  var arrow = $5;
10025  var block = $6;
10026  if (!async)
10027    async = [];
10028  const generator = [];
10029  return {
10030    type: "FunctionExpression",
10031    id: void 0,
10032    parameters,
10033    returnType: suffix,
10034    async,
10035    generator,
10036    block,
10037    signature: {
10038      name: void 0,
10039      async,
10040      generator,
10041      modifier: {
10042        async: !!async.length,
10043        generator: !!generator.length
10044      },
10045      returnType: suffix
10046    },
10047    children: [
10048      async,
10049      { $loc: arrow.$loc, token: "function" },
10050      generator,
10051      parameters,
10052      suffix,
10053      block
10054    ]
10055  };
10056});
10057function ThinArrowFunction(ctx, state2) {
10058  return (0, import_lib3.$EVENT)(ctx, state2, "ThinArrowFunction", ThinArrowFunction$0);
10059}
10060var Arrow$0 = (0, import_lib3.$TV)((0, import_lib3.$C)((0, import_lib3.$EXPECT)($L34, 'Arrow "->"'), (0, import_lib3.$EXPECT)($L35, 'Arrow "\u2192"')), function($skip, $loc, $0, $1) {
10061  return { $loc, token: "->" };
10062});
10063function Arrow(ctx, state2) {
10064  return (0, import_lib3.$EVENT)(ctx, state2, "Arrow", Arrow$0);
10065}
10066var ExplicitBlock$0 = (0, import_lib3.$TS)((0, import_lib3.$S)(__, OpenBrace, __, CloseBrace), function($skip, $loc, $0, $1, $2, $3, $4) {
10067  const expressions = [];
10068  return {
10069    type: "BlockStatement",
10070    expressions,
10071    children: [$1, $2, expressions, $3, $4],
10072    bare: false,
10073    empty: true
10074  };
10075});
10076var ExplicitBlock$1 = (0, import_lib3.$TS)((0, import_lib3.$S)(__, OpenBrace, NestedBlockStatements, __, CloseBrace), function($skip, $loc, $0, $1, $2, $3, $4, $5) {
10077  var block = $3;
10078  return {
10079    ...block,
10080    children: [$1, $2, ...block.children, $4, $5],
10081    bare: false
10082  };
10083});
10084var ExplicitBlock$$ = [ExplicitBlock$0, ExplicitBlock$1];
10085function ExplicitBlock(ctx, state2) {
10086  return (0, import_lib3.$EVENT_C)(ctx, state2, "ExplicitBlock", ExplicitBlock$$);
10087}
10088var ImplicitNestedBlock$0 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$Y)(EOS), InsertOpenBrace, AllowAll, (0, import_lib3.$E)((0, import_lib3.$S)(NestedBlockStatements, InsertNewline, InsertIndent, InsertCloseBrace)), RestoreAll), function($skip, $loc, $0, $1, $2, $3, $4, $5) {
10089  var open = $2;
10090  if (!$4)
10091    return $skip;
10092  const [block, ...tail] = $4;
10093  return {
10094    ...block,
10095    children: [open, ...block.children, ...tail],
10096    bare: false
10097  };
10098});
10099function ImplicitNestedBlock(ctx, state2) {
10100  return (0, import_lib3.$EVENT)(ctx, state2, "ImplicitNestedBlock", ImplicitNestedBlock$0);
10101}
10102var Block$0 = ImplicitNestedBlock;
10103var Block$1 = ExplicitBlock;
10104var Block$2 = ThenClause;
10105var Block$3 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$E)(_), (0, import_lib3.$N)(EOS), Statement), function($skip, $loc, $0, $1, $2, $3) {
10106  var ws = $1;
10107  var s = $3;
10108  const expressions = [[ws, s]];
10109  return {
10110    type: "BlockStatement",
10111    expressions,
10112    children: [expressions],
10113    bare: true
10114  };
10115});
10116var Block$$ = [Block$0, Block$1, Block$2, Block$3];
10117function Block(ctx, state2) {
10118  return (0, import_lib3.$EVENT_C)(ctx, state2, "Block", Block$$);
10119}
10120var BareNestedBlock$0 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$Y)(EOS), AllowAll, (0, import_lib3.$E)(NestedBlockStatements), RestoreAll), function($skip, $loc, $0, $1, $2, $3, $4) {
10121  if (!$3)
10122    return $skip;
10123  return $3;
10124});
10125function BareNestedBlock(ctx, state2) {
10126  return (0, import_lib3.$EVENT)(ctx, state2, "BareNestedBlock", BareNestedBlock$0);
10127}
10128var BareBlock$0 = BareNestedBlock;
10129var BareBlock$1 = ExplicitBlock;
10130var BareBlock$2 = ThenClause;
10131var BareBlock$3 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$E)(_), (0, import_lib3.$N)(EOS), Statement), function($skip, $loc, $0, $1, $2, $3) {
10132  var ws = $1;
10133  var s = $3;
10134  const expressions = [[ws, s]];
10135  return {
10136    type: "BlockStatement",
10137    expressions,
10138    children: [expressions],
10139    bare: true
10140  };
10141});
10142var BareBlock$4 = EmptyBareBlock;
10143var BareBlock$$ = [BareBlock$0, BareBlock$1, BareBlock$2, BareBlock$3, BareBlock$4];
10144function BareBlock(ctx, state2) {
10145  return (0, import_lib3.$EVENT_C)(ctx, state2, "BareBlock", BareBlock$$);
10146}
10147var ThenClause$0 = (0, import_lib3.$T)((0, import_lib3.$S)(Then, SingleLineStatements), function(value) {
10148  return value[1];
10149});
10150function ThenClause(ctx, state2) {
10151  return (0, import_lib3.$EVENT)(ctx, state2, "ThenClause", ThenClause$0);
10152}
10153var BracedThenClause$0 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$Y)(Then), InsertOpenBrace, ThenClause, InsertCloseBrace), function($skip, $loc, $0, $1, $2, $3, $4) {
10154  var open = $2;
10155  var exp = $3;
10156  var close = $4;
10157  const expressions = [exp];
10158  return {
10159    type: "BlockStatement",
10160    expressions,
10161    children: [open, expressions, " ", close],
10162    bare: false
10163  };
10164});
10165function BracedThenClause(ctx, state2) {
10166  return (0, import_lib3.$EVENT)(ctx, state2, "BracedThenClause", BracedThenClause$0);
10167}
10168var BracedOrEmptyBlock$0 = BracedBlock;
10169var BracedOrEmptyBlock$1 = EmptyBlock;
10170var BracedOrEmptyBlock$$ = [BracedOrEmptyBlock$0, BracedOrEmptyBlock$1];
10171function BracedOrEmptyBlock(ctx, state2) {
10172  return (0, import_lib3.$EVENT_C)(ctx, state2, "BracedOrEmptyBlock", BracedOrEmptyBlock$$);
10173}
10174var NoCommaBracedOrEmptyBlock$0 = NoCommaBracedBlock;
10175var NoCommaBracedOrEmptyBlock$1 = EmptyBlock;
10176var NoCommaBracedOrEmptyBlock$$ = [NoCommaBracedOrEmptyBlock$0, NoCommaBracedOrEmptyBlock$1];
10177function NoCommaBracedOrEmptyBlock(ctx, state2) {
10178  return (0, import_lib3.$EVENT_C)(ctx, state2, "NoCommaBracedOrEmptyBlock", NoCommaBracedOrEmptyBlock$$);
10179}
10180var NoPostfixBracedOrEmptyBlock$0 = NoPostfixBracedBlock;
10181var NoPostfixBracedOrEmptyBlock$1 = EmptyBlock;
10182var NoPostfixBracedOrEmptyBlock$$ = [NoPostfixBracedOrEmptyBlock$0, NoPostfixBracedOrEmptyBlock$1];
10183function NoPostfixBracedOrEmptyBlock(ctx, state2) {
10184  return (0, import_lib3.$EVENT_C)(ctx, state2, "NoPostfixBracedOrEmptyBlock", NoPostfixBracedOrEmptyBlock$$);
10185}
10186var EmptyBlock$0 = (0, import_lib3.$TS)((0, import_lib3.$S)(InsertOpenBrace, InsertCloseBrace), function($skip, $loc, $0, $1, $2) {
10187  const expressions = [];
10188  return {
10189    type: "BlockStatement",
10190    expressions,
10191    children: [$1, expressions, $2],
10192    bare: false,
10193    empty: true,
10194    implicit: true
10195  };
10196});
10197function EmptyBlock(ctx, state2) {
10198  return (0, import_lib3.$EVENT)(ctx, state2, "EmptyBlock", EmptyBlock$0);
10199}
10200var BlockOrEmptyStatement$0 = Block;
10201var BlockOrEmptyStatement$1 = (0, import_lib3.$T)((0, import_lib3.$S)(NoBlock, EmptyStatementBareBlock), function(value) {
10202  return value[1];
10203});
10204var BlockOrEmptyStatement$$ = [BlockOrEmptyStatement$0, BlockOrEmptyStatement$1];
10205function BlockOrEmptyStatement(ctx, state2) {
10206  return (0, import_lib3.$EVENT_C)(ctx, state2, "BlockOrEmptyStatement", BlockOrEmptyStatement$$);
10207}
10208var BlockOrEmpty$0 = Block;
10209var BlockOrEmpty$1 = (0, import_lib3.$T)((0, import_lib3.$S)(NoBlock, EmptyBlock), function(value) {
10210  return value[1];
10211});
10212var BlockOrEmpty$$ = [BlockOrEmpty$0, BlockOrEmpty$1];
10213function BlockOrEmpty(ctx, state2) {
10214  return (0, import_lib3.$EVENT_C)(ctx, state2, "BlockOrEmpty", BlockOrEmpty$$);
10215}
10216var EmptyStatementBareBlock$0 = (0, import_lib3.$TV)(InsertEmptyStatement, function($skip, $loc, $0, $1) {
10217  var s = $0;
10218  const expressions = [["", s]];
10219  return {
10220    type: "BlockStatement",
10221    expressions,
10222    children: [expressions],
10223    bare: true,
10224    empty: true,
10225    implicit: true,
10226    semicolon: s.children[0]
10227  };
10228});
10229function EmptyStatementBareBlock(ctx, state2) {
10230  return (0, import_lib3.$EVENT)(ctx, state2, "EmptyStatementBareBlock", EmptyStatementBareBlock$0);
10231}
10232var EmptyBareBlock$0 = (0, import_lib3.$TV)((0, import_lib3.$EXPECT)($L0, 'EmptyBareBlock ""'), function($skip, $loc, $0, $1) {
10233  const expressions = [];
10234  return {
10235    type: "BlockStatement",
10236    expressions,
10237    children: [expressions],
10238    bare: true,
10239    empty: true,
10240    implicit: true
10241  };
10242});
10243function EmptyBareBlock(ctx, state2) {
10244  return (0, import_lib3.$EVENT)(ctx, state2, "EmptyBareBlock", EmptyBareBlock$0);
10245}
10246var NoBlock$0 = (0, import_lib3.$S)((0, import_lib3.$Y)(EOS), (0, import_lib3.$N)(IndentedFurther));
10247function NoBlock(ctx, state2) {
10248  return (0, import_lib3.$EVENT)(ctx, state2, "NoBlock", NoBlock$0);
10249}
10250var BracedBlock$0 = NonSingleBracedBlock;
10251var BracedBlock$1 = (0, import_lib3.$TS)((0, import_lib3.$S)(InsertOpenBrace, (0, import_lib3.$N)(EOS), PostfixedSingleLineStatements, InsertSpace, InsertCloseBrace), function($skip, $loc, $0, $1, $2, $3, $4, $5) {
10252  var o = $1;
10253  var s = $3;
10254  var ws = $4;
10255  var c = $5;
10256  if (!s.children.length)
10257    return $skip;
10258  return {
10259    type: "BlockStatement",
10260    expressions: s.expressions,
10261    // Remove !EOS assertion
10262    children: [o, s.children, ws, c]
10263  };
10264});
10265var BracedBlock$$ = [BracedBlock$0, BracedBlock$1];
10266function BracedBlock(ctx, state2) {
10267  return (0, import_lib3.$EVENT_C)(ctx, state2, "BracedBlock", BracedBlock$$);
10268}
10269var NoPostfixBracedBlock$0 = NonSingleBracedBlock;
10270var NoPostfixBracedBlock$1 = (0, import_lib3.$TS)((0, import_lib3.$S)(InsertOpenBrace, (0, import_lib3.$N)(EOS), SingleLineStatements, InsertSpace, InsertCloseBrace), function($skip, $loc, $0, $1, $2, $3, $4, $5) {
10271  var o = $1;
10272  var s = $3;
10273  var ws = $4;
10274  var c = $5;
10275  if (!s.expressions.length)
10276    return $skip;
10277  return {
10278    type: "BlockStatement",
10279    expressions: s.expressions,
10280    // Remove !EOS assertion
10281    children: [o, s.children, ws, c]
10282  };
10283});
10284var NoPostfixBracedBlock$$ = [NoPostfixBracedBlock$0, NoPostfixBracedBlock$1];
10285function NoPostfixBracedBlock(ctx, state2) {
10286  return (0, import_lib3.$EVENT_C)(ctx, state2, "NoPostfixBracedBlock", NoPostfixBracedBlock$$);
10287}
10288var NoCommaBracedBlock$0 = NonSingleBracedBlock;
10289var NoCommaBracedBlock$1 = (0, import_lib3.$TS)((0, import_lib3.$S)(InsertOpenBrace, (0, import_lib3.$N)(EOS), PostfixedSingleLineNoCommaStatements, InsertSpace, InsertCloseBrace), function($skip, $loc, $0, $1, $2, $3, $4, $5) {
10290  var o = $1;
10291  var s = $3;
10292  var ws = $4;
10293  var c = $5;
10294  if (!s.children.length)
10295    return $skip;
10296  return {
10297    type: "BlockStatement",
10298    expressions: s.expressions,
10299    // Remove !EOS assertion
10300    children: [o, s.children, ws, c]
10301  };
10302});
10303var NoCommaBracedBlock$$ = [NoCommaBracedBlock$0, NoCommaBracedBlock$1];
10304function NoCommaBracedBlock(ctx, state2) {
10305  return (0, import_lib3.$EVENT_C)(ctx, state2, "NoCommaBracedBlock", NoCommaBracedBlock$$);
10306}
10307var NonSingleBracedBlock$0 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$E)(_), OpenBrace, AllowAll, (0, import_lib3.$E)((0, import_lib3.$S)(BracedContent, __, CloseBrace)), RestoreAll), function($skip, $loc, $0, $1, $2, $3, $4, $5) {
10308  var ws1 = $1;
10309  var open = $2;
10310  if (!$4)
10311    return $skip;
10312  const [block, ws2, close] = $4;
10313  return {
10314    type: "BlockStatement",
10315    expressions: block.expressions,
10316    children: [ws1, open, ...block.children, ws2, close],
10317    bare: false
10318  };
10319  return block;
10320});
10321var NonSingleBracedBlock$1 = ImplicitNestedBlock;
10322var NonSingleBracedBlock$2 = (0, import_lib3.$TS)((0, import_lib3.$S)(InsertOpenBrace, NestedImplicitObjectLiteral, InsertCloseBrace), function($skip, $loc, $0, $1, $2, $3) {
10323  var o = $1;
10324  var s = $2;
10325  var c = $3;
10326  const expressions = [s];
10327  return {
10328    type: "BlockStatement",
10329    expressions,
10330    children: [o, expressions, c]
10331  };
10332});
10333var NonSingleBracedBlock$$ = [NonSingleBracedBlock$0, NonSingleBracedBlock$1, NonSingleBracedBlock$2];
10334function NonSingleBracedBlock(ctx, state2) {
10335  return (0, import_lib3.$EVENT_C)(ctx, state2, "NonSingleBracedBlock", NonSingleBracedBlock$$);
10336}
10337var DeclarationOrStatement$0 = Declaration;
10338var DeclarationOrStatement$1 = Statement;
10339var DeclarationOrStatement$$ = [DeclarationOrStatement$0, DeclarationOrStatement$1];
10340function DeclarationOrStatement(ctx, state2) {
10341  return (0, import_lib3.$EVENT_C)(ctx, state2, "DeclarationOrStatement", DeclarationOrStatement$$);
10342}
10343var SingleLineStatements$0 = (0, import_lib3.$TS)((0, import_lib3.$S)(ForbidNewlineBinaryOp, (0, import_lib3.$Q)((0, import_lib3.$S)((0, import_lib3.$S)((0, import_lib3.$E)(_), (0, import_lib3.$N)(EOS)), DeclarationOrStatement, SemicolonDelimiter)), (0, import_lib3.$E)((0, import_lib3.$S)((0, import_lib3.$S)((0, import_lib3.$E)(_), (0, import_lib3.$N)(EOS)), DeclarationOrStatement, (0, import_lib3.$E)(SemicolonDelimiter))), RestoreNewlineBinaryOp), function($skip, $loc, $0, $1, $2, $3, $4) {
10344  var stmts = $2;
10345  var last = $3;
10346  const expressions = [...stmts];
10347  if (last)
10348    expressions.push(last);
10349  const maybeComment = expressions.at(-1)?.[2]?.children?.[2]?.at(-1);
10350  let hasTrailingComment = false;
10351  if (maybeComment?.type === "Comment" && maybeComment.token.startsWith("//")) {
10352    hasTrailingComment = true;
10353  }
10354  const children = [expressions];
10355  if (hasTrailingComment) {
10356    children.push("\n");
10357  }
10358  return {
10359    type: "BlockStatement",
10360    expressions,
10361    children,
10362    bare: true
10363  };
10364});
10365function SingleLineStatements(ctx, state2) {
10366  return (0, import_lib3.$EVENT)(ctx, state2, "SingleLineStatements", SingleLineStatements$0);
10367}
10368var PostfixedSingleLineStatements$0 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$Q)((0, import_lib3.$S)((0, import_lib3.$S)((0, import_lib3.$E)(_), (0, import_lib3.$N)(EOS)), StatementListItem, SemicolonDelimiter)), (0, import_lib3.$E)((0, import_lib3.$S)((0, import_lib3.$S)((0, import_lib3.$E)(_), (0, import_lib3.$N)(EOS)), StatementListItem, (0, import_lib3.$E)(SemicolonDelimiter)))), function($skip, $loc, $0, $1, $2) {
10369  var stmts = $1;
10370  var last = $2;
10371  const children = [...stmts];
10372  if (last)
10373    children.push(last);
10374  return {
10375    type: "BlockStatement",
10376    expressions: children,
10377    children,
10378    bare: true
10379  };
10380});
10381function PostfixedSingleLineStatements(ctx, state2) {
10382  return (0, import_lib3.$EVENT)(ctx, state2, "PostfixedSingleLineStatements", PostfixedSingleLineStatements$0);
10383}
10384var PostfixedSingleLineNoCommaStatements$0 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$Q)((0, import_lib3.$S)((0, import_lib3.$S)((0, import_lib3.$E)(_), (0, import_lib3.$N)(EOS)), NoCommaStatementListItem, SemicolonDelimiter)), (0, import_lib3.$E)((0, import_lib3.$S)((0, import_lib3.$S)((0, import_lib3.$E)(_), (0, import_lib3.$N)(EOS)), NoCommaStatementListItem, (0, import_lib3.$E)(SemicolonDelimiter)))), function($skip, $loc, $0, $1, $2) {
10385  var stmts = $1;
10386  var last = $2;
10387  const children = [...stmts];
10388  if (last)
10389    children.push(last);
10390  return {
10391    type: "BlockStatement",
10392    expressions: children,
10393    children,
10394    bare: true
10395  };
10396});
10397function PostfixedSingleLineNoCommaStatements(ctx, state2) {
10398  return (0, import_lib3.$EVENT)(ctx, state2, "PostfixedSingleLineNoCommaStatements", PostfixedSingleLineNoCommaStatements$0);
10399}
10400var BracedContent$0 = NestedBlockStatements;
10401var BracedContent$1 = SingleLineStatements;
10402var BracedContent$2 = (0, import_lib3.$TV)((0, import_lib3.$Y)((0, import_lib3.$S)(__, (0, import_lib3.$EXPECT)($L36, 'BracedContent "}"'))), function($skip, $loc, $0, $1) {
10403  const expressions = [];
10404  return {
10405    type: "BlockStatement",
10406    expressions,
10407    children: [expressions]
10408  };
10409});
10410var BracedContent$$ = [BracedContent$0, BracedContent$1, BracedContent$2];
10411function BracedContent(ctx, state2) {
10412  return (0, import_lib3.$EVENT_C)(ctx, state2, "BracedContent", BracedContent$$);
10413}
10414var NestedBlockStatements$0 = (0, import_lib3.$TS)((0, import_lib3.$S)(PushIndent, (0, import_lib3.$Q)(NestedBlockStatement), PopIndent), function($skip, $loc, $0, $1, $2, $3) {
10415  var statements = $2;
10416  if (!statements.length)
10417    return $skip;
10418  statements = statements.flat();
10419  return {
10420    type: "BlockStatement",
10421    expressions: statements,
10422    children: [statements],
10423    bare: true
10424  };
10425});
10426function NestedBlockStatements(ctx, state2) {
10427  return (0, import_lib3.$EVENT)(ctx, state2, "NestedBlockStatements", NestedBlockStatements$0);
10428}
10429var NestedBlockStatement$0 = (0, import_lib3.$TS)((0, import_lib3.$S)(Nested, (0, import_lib3.$P)(BlockStatementPart)), function($skip, $loc, $0, $1, $2) {
10430  var nested = $1;
10431  var statements = $2;
10432  return [
10433    [nested, ...statements[0]],
10434    ...statements.slice(1).map((s) => ["", ...s])
10435  ];
10436});
10437function NestedBlockStatement(ctx, state2) {
10438  return (0, import_lib3.$EVENT)(ctx, state2, "NestedBlockStatement", NestedBlockStatement$0);
10439}
10440var BlockStatementPart$0 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$N)(EOS), (0, import_lib3.$E)(_), StatementListItem, StatementDelimiter), function($skip, $loc, $0, $1, $2, $3, $4) {
10441  var ws = $2;
10442  var statement = $3;
10443  var delimiter = $4;
10444  if (ws)
10445    statement = prepend(ws, statement);
10446  return [statement, delimiter];
10447});
10448function BlockStatementPart(ctx, state2) {
10449  return (0, import_lib3.$EVENT)(ctx, state2, "BlockStatementPart", BlockStatementPart$0);
10450}
10451var Literal$0 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$EXPECT)($R14, `Literal /(?=[0-9.'"tfyno])/`), LiteralContent), function($skip, $loc, $0, $1, $2) {
10452  var literal = $2;
10453  return {
10454    type: "Literal",
10455    subtype: literal.type,
10456    children: [literal],
10457    raw: literal.token
10458  };
10459});
10460function Literal(ctx, state2) {
10461  return (0, import_lib3.$EVENT)(ctx, state2, "Literal", Literal$0);
10462}
10463var LiteralContent$0 = NullLiteral;
10464var LiteralContent$1 = BooleanLiteral;
10465var LiteralContent$2 = NumericLiteral;
10466var LiteralContent$3 = StringLiteral;
10467var LiteralContent$$ = [LiteralContent$0, LiteralContent$1, LiteralContent$2, LiteralContent$3];
10468function LiteralContent(ctx, state2) {
10469  return (0, import_lib3.$EVENT_C)(ctx, state2, "LiteralContent", LiteralContent$$);
10470}
10471var NullLiteral$0 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$EXPECT)($L37, 'NullLiteral "null"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
10472  return { $loc, token: $1 };
10473});
10474function NullLiteral(ctx, state2) {
10475  return (0, import_lib3.$EVENT)(ctx, state2, "NullLiteral", NullLiteral$0);
10476}
10477var BooleanLiteral$0 = (0, import_lib3.$T)((0, import_lib3.$S)((0, import_lib3.$EXPECT)($R15, "BooleanLiteral /(?=true|false|yes|no|on|off)/"), _BooleanLiteral), function(value) {
10478  return value[1];
10479});
10480function BooleanLiteral(ctx, state2) {
10481  return (0, import_lib3.$EVENT)(ctx, state2, "BooleanLiteral", BooleanLiteral$0);
10482}
10483var _BooleanLiteral$0 = (0, import_lib3.$T)((0, import_lib3.$S)(CoffeeBooleansEnabled, CoffeeScriptBooleanLiteral), function(value) {
10484  return value[1];
10485});
10486var _BooleanLiteral$1 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$C)((0, import_lib3.$EXPECT)($L38, '_BooleanLiteral "true"'), (0, import_lib3.$EXPECT)($L39, '_BooleanLiteral "false"')), NonIdContinue), function($skip, $loc, $0, $1, $2) {
10487  return { $loc, token: $1 };
10488});
10489var _BooleanLiteral$$ = [_BooleanLiteral$0, _BooleanLiteral$1];
10490function _BooleanLiteral(ctx, state2) {
10491  return (0, import_lib3.$EVENT_C)(ctx, state2, "_BooleanLiteral", _BooleanLiteral$$);
10492}
10493var CoffeeScriptBooleanLiteral$0 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$C)((0, import_lib3.$EXPECT)($L40, 'CoffeeScriptBooleanLiteral "yes"'), (0, import_lib3.$EXPECT)($L41, 'CoffeeScriptBooleanLiteral "on"')), NonIdContinue), function($skip, $loc, $0, $1, $2) {
10494  return { $loc, token: "true" };
10495});
10496var CoffeeScriptBooleanLiteral$1 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$C)((0, import_lib3.$EXPECT)($L42, 'CoffeeScriptBooleanLiteral "no"'), (0, import_lib3.$EXPECT)($L43, 'CoffeeScriptBooleanLiteral "off"')), NonIdContinue), function($skip, $loc, $0, $1, $2) {
10497  return { $loc, token: "false" };
10498});
10499var CoffeeScriptBooleanLiteral$$ = [CoffeeScriptBooleanLiteral$0, CoffeeScriptBooleanLiteral$1];
10500function CoffeeScriptBooleanLiteral(ctx, state2) {
10501  return (0, import_lib3.$EVENT_C)(ctx, state2, "CoffeeScriptBooleanLiteral", CoffeeScriptBooleanLiteral$$);
10502}
10503var Identifier$0 = (0, import_lib3.$T)((0, import_lib3.$S)((0, import_lib3.$EXPECT)($R16, "Identifier /(?=\\p{ID_Start}|[_$])/"), (0, import_lib3.$N)(ReservedWord), IdentifierName), function(value) {
10504  var id = value[2];
10505  return id;
10506});
10507function Identifier(ctx, state2) {
10508  return (0, import_lib3.$EVENT)(ctx, state2, "Identifier", Identifier$0);
10509}
10510var IdentifierName$0 = (0, import_lib3.$TR)((0, import_lib3.$EXPECT)($R17, "IdentifierName /(?:\\p{ID_Start}|[_$])(?:\\p{ID_Continue}|[\\u200C\\u200D$])*/"), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7, $8, $9) {
10511  return {
10512    type: "Identifier",
10513    name: $0,
10514    names: [$0],
10515    children: [{
10516      $loc,
10517      token: $0
10518    }]
10519  };
10520});
10521function IdentifierName(ctx, state2) {
10522  return (0, import_lib3.$EVENT)(ctx, state2, "IdentifierName", IdentifierName$0);
10523}
10524var IdentifierReference$0 = Identifier;
10525function IdentifierReference(ctx, state2) {
10526  return (0, import_lib3.$EVENT)(ctx, state2, "IdentifierReference", IdentifierReference$0);
10527}
10528var UpcomingAssignment$0 = (0, import_lib3.$Y)((0, import_lib3.$S)(__, (0, import_lib3.$EXPECT)($L3, 'UpcomingAssignment "="'), (0, import_lib3.$N)((0, import_lib3.$C)((0, import_lib3.$EXPECT)($L3, 'UpcomingAssignment "="'), (0, import_lib3.$EXPECT)($L44, 'UpcomingAssignment ">"')))));
10529function UpcomingAssignment(ctx, state2) {
10530  return (0, import_lib3.$EVENT)(ctx, state2, "UpcomingAssignment", UpcomingAssignment$0);
10531}
10532var ArrayLiteral$0 = (0, import_lib3.$T)((0, import_lib3.$S)((0, import_lib3.$EXPECT)($R18, "ArrayLiteral /(?=\\[)/"), _ArrayLiteral), function(value) {
10533  return value[1];
10534});
10535function ArrayLiteral(ctx, state2) {
10536  return (0, import_lib3.$EVENT)(ctx, state2, "ArrayLiteral", ArrayLiteral$0);
10537}
10538var _ArrayLiteral$0 = (0, import_lib3.$T)((0, import_lib3.$S)(ArrayBindingPattern, UpcomingAssignment), function(value) {
10539  return value[0];
10540});
10541var _ArrayLiteral$1 = (0, import_lib3.$TS)((0, import_lib3.$S)(OpenBracket, AllowAll, (0, import_lib3.$E)((0, import_lib3.$S)(ArrayLiteralContent, __, CloseBracket)), RestoreAll), function($skip, $loc, $0, $1, $2, $3, $4) {
10542  var open = $1;
10543  if (!$3)
10544    return $skip;
10545  const [content, ws, close] = $3;
10546  if (content.type === "RangeExpression") {
10547    return prepend(ws, content);
10548  }
10549  let children;
10550  if (Array.isArray(content)) {
10551    children = [open, ...content, ...ws, close];
10552  } else {
10553    children = [open, content, ...ws, close];
10554  }
10555  const names = children.flatMap((c) => c?.names || []);
10556  return {
10557    type: "ArrayExpression",
10558    children,
10559    names
10560  };
10561});
10562var _ArrayLiteral$$ = [_ArrayLiteral$0, _ArrayLiteral$1];
10563function _ArrayLiteral(ctx, state2) {
10564  return (0, import_lib3.$EVENT_C)(ctx, state2, "_ArrayLiteral", _ArrayLiteral$$);
10565}
10566var RangeExpression$0 = (0, import_lib3.$TS)((0, import_lib3.$S)(ExtendedExpression, __, (0, import_lib3.$C)(DotDotDot, DotDot), ExtendedExpression), function($skip, $loc, $0, $1, $2, $3, $4) {
10567  var s = $1;
10568  var ws = $2;
10569  var range = $3;
10570  var e = $4;
10571  const inclusive = range.token === "..";
10572  range.token = ",";
10573  if (s.type === "Literal" && e.type === "Literal") {
10574    const start = literalValue(s);
10575    const end = literalValue(e);
10576    if (typeof start !== typeof end) {
10577      throw new Error("Range start and end must be of the same type");
10578    }
10579    if (typeof start === "string") {
10580      if (start.length !== 1 || end.length !== 1) {
10581        throw new Error("String range start and end must be a single character");
10582      }
10583      const startCode = start.charCodeAt(0);
10584      const endCode = end.charCodeAt(0);
10585      const step = startCode < endCode ? 1 : -1;
10586      const length = Math.abs(endCode - startCode) + (inclusive ? 1 : 0);
10587      if (length <= 26) {
10588        return {
10589          type: "RangeExpression",
10590          children: ["[", Array.from({ length }, (_2, i) => JSON.stringify(String.fromCharCode(startCode + i * step))).join(", "), "]"],
10591          inclusive,
10592          start: s,
10593          end: e
10594        };
10595      } else {
10596        const inclusiveAdjust2 = inclusive ? " + 1" : "";
10597        const children2 = ["((s, e) => {let step = e > s ? 1 : -1; return Array.from({length: Math.abs(e - s)", inclusiveAdjust2, "}, (_, i) => String.fromCharCode(s + i * step))})(", startCode.toString(), ws, range, endCode.toString(), ")"];
10598        return {
10599          type: "RangeExpression",
10600          children: children2,
10601          inclusive,
10602          start: s,
10603          end: e
10604        };
10605      }
10606    } else if (typeof start === "number") {
10607      const step = end > start ? 1 : -1;
10608      const length = Math.abs(end - start) + (inclusive ? 1 : 0);
10609      if (length <= 20) {
10610        return {
10611          type: "RangeExpression",
10612          children: ["[", Array.from({ length }, (_2, i) => start + i * step).join(", "), "]"],
10613          inclusive,
10614          start: s,
10615          end: e
10616        };
10617      }
10618    }
10619  }
10620  const inclusiveAdjust = inclusive ? " + 1" : "";
10621  const children = ["((s, e) => {let step = e > s ? 1 : -1; return Array.from({length: Math.abs(e - s)", inclusiveAdjust, "}, (_, i) => s + i * step)})(", s, ws, range, e, ")"];
10622  return {
10623    type: "RangeExpression",
10624    children,
10625    inclusive,
10626    start: s,
10627    end: e
10628  };
10629});
10630var RangeExpression$1 = (0, import_lib3.$TS)((0, import_lib3.$S)(ExtendedExpression, __, DotDot, (0, import_lib3.$Y)((0, import_lib3.$S)(__, CloseBracket))), function($skip, $loc, $0, $1, $2, $3, $4) {
10631  var s = $1;
10632  var ws = $2;
10633  return {
10634    type: "RangeExpression",
10635    children: ["[]", {
10636      type: "Error",
10637      message: "Infinite range [x..] is only valid in for loops"
10638    }],
10639    start: s,
10640    end: {
10641      type: "Identifier",
10642      name: "Infinity",
10643      children: ["Infinity"]
10644    }
10645  };
10646});
10647var RangeExpression$$ = [RangeExpression$0, RangeExpression$1];
10648function RangeExpression(ctx, state2) {
10649  return (0, import_lib3.$EVENT_C)(ctx, state2, "RangeExpression", RangeExpression$$);
10650}
10651var ArrayLiteralContent$0 = RangeExpression;
10652var ArrayLiteralContent$1 = (0, import_lib3.$S)(NestedElementList, (0, import_lib3.$Y)((0, import_lib3.$S)(__, CloseBracket)));
10653var ArrayLiteralContent$2 = (0, import_lib3.$TS)((0, import_lib3.$S)(ElementListWithIndentedApplicationForbidden, ArrayElementDelimiter, (0, import_lib3.$E)(NestedElementList), (0, import_lib3.$Y)((0, import_lib3.$S)(__, CloseBracket))), function($skip, $loc, $0, $1, $2, $3, $4) {
10654  var list = $1;
10655  var delimiter = $2;
10656  var nested = $3;
10657  if (!nested)
10658    return list;
10659  return [...list, delimiter, ...nested];
10660});
10661var ArrayLiteralContent$3 = (0, import_lib3.$TV)((0, import_lib3.$Q)((0, import_lib3.$S)(__, ElementListWithIndentedApplicationForbidden, ArrayElementDelimiter)), function($skip, $loc, $0, $1) {
10662  return $1.flat();
10663});
10664var ArrayLiteralContent$$ = [ArrayLiteralContent$0, ArrayLiteralContent$1, ArrayLiteralContent$2, ArrayLiteralContent$3];
10665function ArrayLiteralContent(ctx, state2) {
10666  return (0, import_lib3.$EVENT_C)(ctx, state2, "ArrayLiteralContent", ArrayLiteralContent$$);
10667}
10668var NestedElementList$0 = (0, import_lib3.$TS)((0, import_lib3.$S)(PushIndent, (0, import_lib3.$Q)(NestedElement), PopIndent), function($skip, $loc, $0, $1, $2, $3) {
10669  var elements = $2;
10670  if (elements.length)
10671    return elements.flat();
10672  return $skip;
10673});
10674function NestedElementList(ctx, state2) {
10675  return (0, import_lib3.$EVENT)(ctx, state2, "NestedElementList", NestedElementList$0);
10676}
10677var NestedElement$0 = (0, import_lib3.$TS)((0, import_lib3.$S)(Nested, ElementList, ArrayElementDelimiter), function($skip, $loc, $0, $1, $2, $3) {
10678  var indent = $1;
10679  var list = $2;
10680  var delimiter = $3;
10681  const { length } = list;
10682  if (length) {
10683    return list.map((e, i) => {
10684      if (i === 0 && i === length - 1) {
10685        return { ...e, children: [indent, ...e.children, delimiter] };
10686      }
10687      if (i === 0) {
10688        return { ...e, children: [indent, ...e.children] };
10689      }
10690      if (i === length - 1) {
10691        return { ...e, children: [...e.children, delimiter] };
10692      }
10693      return e;
10694    });
10695  }
10696});
10697function NestedElement(ctx, state2) {
10698  return (0, import_lib3.$EVENT)(ctx, state2, "NestedElement", NestedElement$0);
10699}
10700var ArrayElementDelimiter$0 = (0, import_lib3.$S)(__, Comma);
10701var ArrayElementDelimiter$1 = (0, import_lib3.$Y)((0, import_lib3.$S)(__, (0, import_lib3.$EXPECT)($L45, 'ArrayElementDelimiter "]"')));
10702var ArrayElementDelimiter$2 = (0, import_lib3.$T)((0, import_lib3.$S)((0, import_lib3.$Y)(EOS), InsertComma), function(value) {
10703  return value[1];
10704});
10705var ArrayElementDelimiter$$ = [ArrayElementDelimiter$0, ArrayElementDelimiter$1, ArrayElementDelimiter$2];
10706function ArrayElementDelimiter(ctx, state2) {
10707  return (0, import_lib3.$EVENT_C)(ctx, state2, "ArrayElementDelimiter", ArrayElementDelimiter$$);
10708}
10709var ElementListWithIndentedApplicationForbidden$0 = (0, import_lib3.$TS)((0, import_lib3.$S)(ForbidIndentedApplication, (0, import_lib3.$E)(ElementList), RestoreIndentedApplication), function($skip, $loc, $0, $1, $2, $3) {
10710  if ($2)
10711    return $2;
10712  return $skip;
10713});
10714function ElementListWithIndentedApplicationForbidden(ctx, state2) {
10715  return (0, import_lib3.$EVENT)(ctx, state2, "ElementListWithIndentedApplicationForbidden", ElementListWithIndentedApplicationForbidden$0);
10716}
10717var ElementList$0 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$N)(EOS), ArrayElementExpression, (0, import_lib3.$Q)(ElementListRest)), function($skip, $loc, $0, $1, $2, $3) {
10718  var first = $2;
10719  var rest = $3;
10720  if (rest.length) {
10721    return [{
10722      ...first,
10723      children: [...first.children, rest[0][0]]
10724    }].concat(rest.map(([_2, e], i) => {
10725      const delim = rest[i + 1]?.[0];
10726      return {
10727        ...e,
10728        children: [...e.children, delim]
10729      };
10730    }));
10731  }
10732  return [first];
10733});
10734function ElementList(ctx, state2) {
10735  return (0, import_lib3.$EVENT)(ctx, state2, "ElementList", ElementList$0);
10736}
10737var ElementListRest$0 = (0, import_lib3.$S)((0, import_lib3.$S)((0, import_lib3.$E)(_), Comma, (0, import_lib3.$N)(EOS)), ArrayElementExpression);
10738function ElementListRest(ctx, state2) {
10739  return (0, import_lib3.$EVENT)(ctx, state2, "ElementListRest", ElementListRest$0);
10740}
10741var ArrayElementExpression$0 = JSXTag;
10742var ArrayElementExpression$1 = (0, import_lib3.$T)((0, import_lib3.$S)(ImplicitObjectLiteral, (0, import_lib3.$Y)(ArrayElementDelimiter)), function(value) {
10743  return value[0];
10744});
10745var ArrayElementExpression$2 = (0, import_lib3.$TS)((0, import_lib3.$S)(ExtendedExpression, (0, import_lib3.$E)(_), DotDotDot, (0, import_lib3.$Y)(ArrayElementDelimiter)), function($skip, $loc, $0, $1, $2, $3, $4) {
10746  var exp = $1;
10747  var ws = $2;
10748  var dots = $3;
10749  if (!exp) {
10750    exp = { ...makeRef(), names: [] };
10751  }
10752  return {
10753    type: "SpreadElement",
10754    children: [ws, dots, exp],
10755    names: exp.names
10756  };
10757});
10758var ArrayElementExpression$3 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$E)((0, import_lib3.$S)((0, import_lib3.$E)((0, import_lib3.$S)(__, DotDotDot, __)), PostfixedExpression)), (0, import_lib3.$Y)(ArrayElementDelimiter)), function($skip, $loc, $0, $1, $2) {
10759  var expMaybeSpread = $1;
10760  if (expMaybeSpread) {
10761    const [spread, exp] = expMaybeSpread;
10762    if (!spread) {
10763      return {
10764        type: "ArrayElement",
10765        children: [exp],
10766        names: exp.names
10767      };
10768    } else {
10769      return {
10770        type: "SpreadElement",
10771        children: [...spread, exp],
10772        names: exp.names
10773      };
10774    }
10775  }
10776  return {
10777    type: "ElisionElement",
10778    children: []
10779  };
10780});
10781var ArrayElementExpression$$ = [ArrayElementExpression$0, ArrayElementExpression$1, ArrayElementExpression$2, ArrayElementExpression$3];
10782function ArrayElementExpression(ctx, state2) {
10783  return (0, import_lib3.$EVENT_C)(ctx, state2, "ArrayElementExpression", ArrayElementExpression$$);
10784}
10785var ObjectLiteral$0 = (0, import_lib3.$T)((0, import_lib3.$S)(ObjectBindingPattern, UpcomingAssignment), function(value) {
10786  return value[0];
10787});
10788var ObjectLiteral$1 = BracedObjectLiteral;
10789var ObjectLiteral$2 = NestedImplicitObjectLiteral;
10790var ObjectLiteral$3 = InlineObjectLiteral;
10791var ObjectLiteral$$ = [ObjectLiteral$0, ObjectLiteral$1, ObjectLiteral$2, ObjectLiteral$3];
10792function ObjectLiteral(ctx, state2) {
10793  return (0, import_lib3.$EVENT_C)(ctx, state2, "ObjectLiteral", ObjectLiteral$$);
10794}
10795var BracedObjectLiteral$0 = (0, import_lib3.$TS)((0, import_lib3.$S)(OpenBrace, AllowAll, (0, import_lib3.$E)((0, import_lib3.$S)(BracedObjectLiteralContent, __, CloseBrace)), RestoreAll), function($skip, $loc, $0, $1, $2, $3, $4) {
10796  var open = $1;
10797  if (!$3)
10798    return $skip;
10799  const [properties, ...close] = $3;
10800  return {
10801    type: "ObjectExpression",
10802    children: [open, properties, close],
10803    names: properties.flatMap((c) => c.names || []),
10804    properties
10805  };
10806});
10807function BracedObjectLiteral(ctx, state2) {
10808  return (0, import_lib3.$EVENT)(ctx, state2, "BracedObjectLiteral", BracedObjectLiteral$0);
10809}
10810var BracedObjectLiteralContent$0 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$Q)((0, import_lib3.$S)(PropertyDefinition, ObjectPropertyDelimiter)), (0, import_lib3.$E)(NestedPropertyDefinitions)), function($skip, $loc, $0, $1, $2) {
10811  var line = $1;
10812  var nested = $2;
10813  line = line.flatMap(([prop, delim]) => {
10814    prop = Array.isArray(prop) ? prop : [prop];
10815    let last = prop[prop.length - 1];
10816    if (!last)
10817      return [];
10818    last = {
10819      ...last,
10820      delim,
10821      children: [...last.children, delim]
10822    };
10823    return [...prop.slice(0, prop.length - 1), last];
10824  });
10825  return line.concat(nested || []);
10826});
10827var BracedObjectLiteralContent$1 = (0, import_lib3.$TV)((0, import_lib3.$P)((0, import_lib3.$S)(__, PropertyDefinition, ObjectPropertyDelimiter)), function($skip, $loc, $0, $1) {
10828  return $0.flatMap(([ws, prop, delim]) => {
10829    prop = Array.isArray(prop) ? prop : [prop];
10830    let last = prop[prop.length - 1];
10831    last = {
10832      ...last,
10833      delim,
10834      // __ will consume all whitespace that _? in PropertyDefinition could,
10835      // so replace _? (via slice) with __
10836      children: [ws, ...last.children.slice(1), delim]
10837    };
10838    return [...prop.slice(0, prop.length - 1), last];
10839  });
10840});
10841var BracedObjectLiteralContent$$ = [BracedObjectLiteralContent$0, BracedObjectLiteralContent$1];
10842function BracedObjectLiteralContent(ctx, state2) {
10843  return (0, import_lib3.$EVENT_C)(ctx, state2, "BracedObjectLiteralContent", BracedObjectLiteralContent$$);
10844}
10845var NestedImplicitObjectLiteral$0 = (0, import_lib3.$TS)((0, import_lib3.$S)(InsertOpenBrace, PushIndent, (0, import_lib3.$E)(NestedImplicitPropertyDefinitions), PopIndent, InsertNewline, InsertIndent, InsertCloseBrace), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7) {
10846  var properties = $3;
10847  if (!properties)
10848    return $skip;
10849  return {
10850    type: "ObjectExpression",
10851    properties,
10852    children: $0
10853  };
10854});
10855function NestedImplicitObjectLiteral(ctx, state2) {
10856  return (0, import_lib3.$EVENT)(ctx, state2, "NestedImplicitObjectLiteral", NestedImplicitObjectLiteral$0);
10857}
10858var NestedImplicitPropertyDefinitions$0 = (0, import_lib3.$TV)((0, import_lib3.$P)(NestedImplicitPropertyDefinition), function($skip, $loc, $0, $1) {
10859  var defs = $0;
10860  return defs.flat();
10861});
10862function NestedImplicitPropertyDefinitions(ctx, state2) {
10863  return (0, import_lib3.$EVENT)(ctx, state2, "NestedImplicitPropertyDefinitions", NestedImplicitPropertyDefinitions$0);
10864}
10865var NestedImplicitPropertyDefinition$0 = (0, import_lib3.$TS)((0, import_lib3.$S)(Nested, (0, import_lib3.$P)((0, import_lib3.$S)((0, import_lib3.$E)(_), NamedProperty, ObjectPropertyDelimiter))), function($skip, $loc, $0, $1, $2) {
10866  var indent = $1;
10867  var props = $2;
10868  return props.map(([ws, prop, delimiter], i) => ({
10869    ...prop,
10870    children: [
10871      ...i === 0 ? [indent, ws] : [ws],
10872      ...prop.children,
10873      delimiter
10874    ]
10875  }));
10876});
10877function NestedImplicitPropertyDefinition(ctx, state2) {
10878  return (0, import_lib3.$EVENT)(ctx, state2, "NestedImplicitPropertyDefinition", NestedImplicitPropertyDefinition$0);
10879}
10880var NestedPropertyDefinitions$0 = (0, import_lib3.$TS)((0, import_lib3.$S)(PushIndent, (0, import_lib3.$Q)(NestedPropertyDefinition), PopIndent), function($skip, $loc, $0, $1, $2, $3) {
10881  var defs = $2;
10882  if (!defs.length)
10883    return $skip;
10884  return defs.flat();
10885});
10886function NestedPropertyDefinitions(ctx, state2) {
10887  return (0, import_lib3.$EVENT)(ctx, state2, "NestedPropertyDefinitions", NestedPropertyDefinitions$0);
10888}
10889var NestedPropertyDefinition$0 = (0, import_lib3.$TS)((0, import_lib3.$S)(Nested, (0, import_lib3.$P)((0, import_lib3.$S)(PropertyDefinition, ObjectPropertyDelimiter))), function($skip, $loc, $0, $1, $2) {
10890  var ws = $1;
10891  var inlineProps = $2;
10892  return inlineProps.flatMap(([prop, delim], i) => {
10893    if (!Array.isArray(prop))
10894      prop = [prop];
10895    if (i === 0) {
10896      const [first, ...rest] = prop;
10897      prop = [prepend(ws, first), ...rest];
10898    }
10899    const last = prop[prop.length - 1];
10900    prop = [
10901      ...prop.slice(0, prop.length - 1),
10902      {
10903        ...last,
10904        delim,
10905        children: [...last.children, delim]
10906      }
10907    ];
10908    return prop;
10909  });
10910});
10911function NestedPropertyDefinition(ctx, state2) {
10912  return (0, import_lib3.$EVENT)(ctx, state2, "NestedPropertyDefinition", NestedPropertyDefinition$0);
10913}
10914var ImplicitObjectLiteral$0 = (0, import_lib3.$TS)((0, import_lib3.$S)(InsertInlineOpenBrace, SnugNamedProperty, (0, import_lib3.$Q)((0, import_lib3.$S)(ImplicitObjectPropertyDelimiter, NamedProperty)), (0, import_lib3.$E)((0, import_lib3.$S)((0, import_lib3.$E)(_), Comma)), InsertCloseBrace), function($skip, $loc, $0, $1, $2, $3, $4, $5) {
10915  var open = $1;
10916  var first = $2;
10917  var rest = $3;
10918  var trailing = $4;
10919  var close = $5;
10920  return {
10921    type: "ObjectExpression",
10922    children: [open, first, ...rest, trailing, close]
10923  };
10924});
10925function ImplicitObjectLiteral(ctx, state2) {
10926  return (0, import_lib3.$EVENT)(ctx, state2, "ImplicitObjectLiteral", ImplicitObjectLiteral$0);
10927}
10928var ImplicitObjectPropertyDelimiter$0 = (0, import_lib3.$S)((0, import_lib3.$E)(_), Comma, (0, import_lib3.$C)(NotDedented, (0, import_lib3.$E)(_)));
10929var ImplicitObjectPropertyDelimiter$1 = (0, import_lib3.$T)((0, import_lib3.$S)((0, import_lib3.$Y)((0, import_lib3.$S)(Nested, NamedProperty)), InsertComma, Nested), function(value) {
10930  return [value[1], value[2]];
10931});
10932var ImplicitObjectPropertyDelimiter$$ = [ImplicitObjectPropertyDelimiter$0, ImplicitObjectPropertyDelimiter$1];
10933function ImplicitObjectPropertyDelimiter(ctx, state2) {
10934  return (0, import_lib3.$EVENT_C)(ctx, state2, "ImplicitObjectPropertyDelimiter", ImplicitObjectPropertyDelimiter$$);
10935}
10936var InlineObjectLiteral$0 = (0, import_lib3.$TS)((0, import_lib3.$S)(InsertInlineOpenBrace, SnugNamedProperty, (0, import_lib3.$Q)((0, import_lib3.$S)(InlineObjectPropertyDelimiter, NamedProperty)), (0, import_lib3.$E)((0, import_lib3.$S)((0, import_lib3.$E)(_), Comma, (0, import_lib3.$Y)(Dedented))), InsertCloseBrace), function($skip, $loc, $0, $1, $2, $3, $4, $5) {
10937  var open = $1;
10938  var first = $2;
10939  var rest = $3;
10940  var trailing = $4;
10941  var close = $5;
10942  return {
10943    type: "ObjectExpression",
10944    children: [open, first, ...rest, trailing, close]
10945  };
10946});
10947function InlineObjectLiteral(ctx, state2) {
10948  return (0, import_lib3.$EVENT)(ctx, state2, "InlineObjectLiteral", InlineObjectLiteral$0);
10949}
10950var InlineObjectPropertyDelimiter$0 = (0, import_lib3.$S)((0, import_lib3.$E)(_), Comma, (0, import_lib3.$C)(NotDedented, (0, import_lib3.$E)(_)));
10951function InlineObjectPropertyDelimiter(ctx, state2) {
10952  return (0, import_lib3.$EVENT)(ctx, state2, "InlineObjectPropertyDelimiter", InlineObjectPropertyDelimiter$0);
10953}
10954var ObjectPropertyDelimiter$0 = (0, import_lib3.$S)((0, import_lib3.$E)(_), Comma);
10955var ObjectPropertyDelimiter$1 = (0, import_lib3.$Y)((0, import_lib3.$S)(__, (0, import_lib3.$EXPECT)($L36, 'ObjectPropertyDelimiter "}"')));
10956var ObjectPropertyDelimiter$2 = (0, import_lib3.$T)((0, import_lib3.$S)((0, import_lib3.$Y)(EOS), InsertComma), function(value) {
10957  return value[1];
10958});
10959var ObjectPropertyDelimiter$$ = [ObjectPropertyDelimiter$0, ObjectPropertyDelimiter$1, ObjectPropertyDelimiter$2];
10960function ObjectPropertyDelimiter(ctx, state2) {
10961  return (0, import_lib3.$EVENT_C)(ctx, state2, "ObjectPropertyDelimiter", ObjectPropertyDelimiter$$);
10962}
10963var PropertyDefinition$0 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$E)(_), NamedProperty), function($skip, $loc, $0, $1, $2) {
10964  var ws = $1;
10965  var prop = $2;
10966  return prepend(ws, prop);
10967});
10968var PropertyDefinition$1 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$E)(_), (0, import_lib3.$TEXT)((0, import_lib3.$EXPECT)($R19, "PropertyDefinition /[!+-]?/")), PropertyName, (0, import_lib3.$Y)(ObjectPropertyDelimiter)), function($skip, $loc, $0, $1, $2, $3, $4) {
10969  var ws = $1;
10970  var toggle = $2;
10971  var id = $3;
10972  if (toggle) {
10973    const value = toggle === "+" ? "true" : "false";
10974    return {
10975      type: "Property",
10976      children: [ws, id, ": ", value],
10977      name: id,
10978      names: id.names,
10979      value
10980    };
10981  }
10982  return {
10983    type: "Property",
10984    children: [ws, id],
10985    name: id,
10986    names: id.names,
10987    value: id
10988  };
10989});
10990var PropertyDefinition$2 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$E)(_), MethodDefinition), function($skip, $loc, $0, $1, $2) {
10991  var ws = $1;
10992  var def = $2;
10993  if (def.type === "MultiMethodDefinition") {
10994    return {
10995      children: def.children.flatMap((c, i) => i ? [",", c] : [c])
10996    };
10997  }
10998  if (!def.block || def.block.empty)
10999    return $skip;
11000  return prepend(ws, def);
11001});
11002var PropertyDefinition$3 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$E)(_), DotDotDot, ExtendedExpression), function($skip, $loc, $0, $1, $2, $3) {
11003  var ws = $1;
11004  var dots = $2;
11005  var exp = $3;
11006  return {
11007    type: "SpreadProperty",
11008    children: [ws, dots, exp],
11009    names: exp.names,
11010    dots,
11011    value: exp
11012  };
11013});
11014var PropertyDefinition$4 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$E)(_), (0, import_lib3.$N)((0, import_lib3.$C)(EOS, (0, import_lib3.$EXPECT)($L7, 'PropertyDefinition "."'))), (0, import_lib3.$Q)(UnaryOp), CallExpression, (0, import_lib3.$E)(UnaryPostfix)), function($skip, $loc, $0, $1, $2, $3, $4, $5) {
11015  var ws = $1;
11016  var pre = $3;
11017  var value = $4;
11018  var post = $5;
11019  if (!pre.length && !post) {
11020    switch (value.type) {
11021      case "Identifier":
11022        return prepend(ws, value);
11023      case "ObjectExpression":
11024        let first = value.properties[0];
11025        if (first) {
11026          first = {
11027            ...first,
11028            children: [ws, ...first.children],
11029            hoistDec: value.hoistDec
11030          };
11031        }
11032        return [first, ...value.properties.slice(1)];
11033    }
11034  }
11035  const last = lastAccessInCallExpression(value);
11036  if (!last)
11037    return $skip;
11038  let name, hoistDec, ref, refAssignment;
11039  const { expression, type } = last;
11040  if (type === "Index") {
11041    ({ ref, hoistDec, refAssignment } = maybeRefAssignment(expression));
11042    if (refAssignment) {
11043      name = {
11044        type: "ComputedPropertyName",
11045        children: [last.children[0], "(", refAssignment, ",", ref, ")", ...last.children.slice(-2)]
11046      };
11047      value = {
11048        ...value,
11049        children: value.children.map((c) => {
11050          if (c === last)
11051            return {
11052              type: "Index",
11053              children: ["[", ref, "]"]
11054            };
11055          return c;
11056        })
11057      };
11058    } else {
11059      name = {
11060        type: "ComputedPropertyName",
11061        children: last.children
11062      };
11063    }
11064  } else {
11065    ({ name } = last);
11066    if (!name)
11067      return $skip;
11068  }
11069  if (name[0] === "\#")
11070    name = name.slice(1);
11071  return {
11072    type: "Property",
11073    children: [ws, name, ": ", processUnaryExpression(pre, value, post)],
11074    name,
11075    names: [],
11076    value,
11077    hoistDec
11078  };
11079});
11080var PropertyDefinition$$ = [PropertyDefinition$0, PropertyDefinition$1, PropertyDefinition$2, PropertyDefinition$3, PropertyDefinition$4];
11081function PropertyDefinition(ctx, state2) {
11082  return (0, import_lib3.$EVENT_C)(ctx, state2, "PropertyDefinition", PropertyDefinition$$);
11083}
11084var NamedProperty$0 = (0, import_lib3.$TS)((0, import_lib3.$S)(PropertyName, (0, import_lib3.$E)(_), Colon, PostfixedExpression), function($skip, $loc, $0, $1, $2, $3, $4) {
11085  var name = $1;
11086  var exp = $4;
11087  return {
11088    type: "Property",
11089    children: $0,
11090    name,
11091    names: exp.names || [],
11092    value: exp
11093  };
11094});
11095function NamedProperty(ctx, state2) {
11096  return (0, import_lib3.$EVENT)(ctx, state2, "NamedProperty", NamedProperty$0);
11097}
11098var SnugNamedProperty$0 = (0, import_lib3.$TS)((0, import_lib3.$S)(PropertyName, Colon, MaybeNestedExtendedExpression, (0, import_lib3.$E)((0, import_lib3.$S)((0, import_lib3.$S)((0, import_lib3.$E)(_), PostfixStatement), (0, import_lib3.$Y)((0, import_lib3.$S)(Nested, NamedProperty))))), function($skip, $loc, $0, $1, $2, $3, $4) {
11099  var name = $1;
11100  var colon = $2;
11101  var expression = $3;
11102  var post = $4;
11103  if (post) {
11104    expression = attachPostfixStatementAsExpression(expression, post[0]);
11105  }
11106  return {
11107    type: "Property",
11108    children: [name, colon, expression],
11109    names: expression.names || []
11110  };
11111});
11112function SnugNamedProperty(ctx, state2) {
11113  return (0, import_lib3.$EVENT)(ctx, state2, "SnugNamedProperty", SnugNamedProperty$0);
11114}
11115var PropertyName$0 = NumericLiteral;
11116var PropertyName$1 = ComputedPropertyName;
11117var PropertyName$2 = StringLiteral;
11118var PropertyName$3 = IdentifierName;
11119var PropertyName$$ = [PropertyName$0, PropertyName$1, PropertyName$2, PropertyName$3];
11120function PropertyName(ctx, state2) {
11121  return (0, import_lib3.$EVENT_C)(ctx, state2, "PropertyName", PropertyName$$);
11122}
11123var ComputedPropertyName$0 = (0, import_lib3.$TS)((0, import_lib3.$S)(OpenBracket, PostfixedExpression, __, CloseBracket), function($skip, $loc, $0, $1, $2, $3, $4) {
11124  var expression = $2;
11125  return {
11126    type: "ComputedPropertyName",
11127    children: $0,
11128    expression
11129  };
11130});
11131var ComputedPropertyName$1 = (0, import_lib3.$TS)((0, import_lib3.$S)(InsertOpenBracket, TemplateLiteral, InsertCloseBracket), function($skip, $loc, $0, $1, $2, $3) {
11132  var expression = $2;
11133  if ($2.type === "StringLiteral")
11134    return $2;
11135  return {
11136    type: "ComputedPropertyName",
11137    children: $0,
11138    expression,
11139    implicit: true
11140  };
11141});
11142var ComputedPropertyName$2 = (0, import_lib3.$TS)((0, import_lib3.$S)(InsertOpenBracket, (0, import_lib3.$EXPECT)($R12, "ComputedPropertyName /[+-]/"), NumericLiteral, InsertCloseBracket), function($skip, $loc, $0, $1, $2, $3, $4) {
11143  const expression = [$2, $3];
11144  return {
11145    type: "ComputedPropertyName",
11146    expression,
11147    children: [$1, expression, $4],
11148    implicit: true
11149  };
11150});
11151var ComputedPropertyName$$ = [ComputedPropertyName$0, ComputedPropertyName$1, ComputedPropertyName$2];
11152function ComputedPropertyName(ctx, state2) {
11153  return (0, import_lib3.$EVENT_C)(ctx, state2, "ComputedPropertyName", ComputedPropertyName$$);
11154}
11155var Decorator$0 = (0, import_lib3.$S)(AtAt, CallExpression);
11156function Decorator(ctx, state2) {
11157  return (0, import_lib3.$EVENT)(ctx, state2, "Decorator", Decorator$0);
11158}
11159var Decorators$0 = (0, import_lib3.$TS)((0, import_lib3.$S)(ForbidClassImplicitCall, (0, import_lib3.$Q)((0, import_lib3.$S)(__, Decorator)), __, RestoreClassImplicitCall), function($skip, $loc, $0, $1, $2, $3, $4) {
11160  var decorators = $2;
11161  if (!decorators.length)
11162    return $skip;
11163  return $0;
11164});
11165function Decorators(ctx, state2) {
11166  return (0, import_lib3.$EVENT)(ctx, state2, "Decorators", Decorators$0);
11167}
11168var MethodDefinition$0 = (0, import_lib3.$TS)((0, import_lib3.$S)(Abstract, __, MethodSignature), function($skip, $loc, $0, $1, $2, $3) {
11169  var signature = $3;
11170  return {
11171    type: "MethodDefinition",
11172    children: $0,
11173    name: signature.name,
11174    abstract: true,
11175    signature,
11176    parameters: signature.parameters,
11177    ts: true
11178  };
11179});
11180var MethodDefinition$1 = (0, import_lib3.$TS)((0, import_lib3.$S)(MethodSignature, (0, import_lib3.$N)((0, import_lib3.$C)(PropertyAccess, UnaryPostfix, NonNullAssertion)), (0, import_lib3.$E)(BracedBlock)), function($skip, $loc, $0, $1, $2, $3) {
11181  var signature = $1;
11182  var block = $3;
11183  let children = $0;
11184  let generatorPos = 0;
11185  let { modifier } = signature;
11186  if (hasAwait(block)) {
11187    generatorPos++;
11188    children = children.slice();
11189    if (modifier?.get || modifier?.set) {
11190      children.push({
11191        type: "Error",
11192        message: "Getters and setters cannot be async"
11193      });
11194    } else if (modifier?.async) {
11195    } else {
11196      children.unshift("async ");
11197      modifier = { ...modifier, async: true };
11198      signature = { ...signature, modifier };
11199    }
11200  }
11201  if (hasYield(block)) {
11202    if (children === $0)
11203      children = children.slice();
11204    if (modifier?.get || modifier?.set) {
11205      children.push({
11206        type: "Error",
11207        message: "Getters and setters cannot be generators"
11208      });
11209    } else if (modifier?.generator) {
11210    } else {
11211      children.splice(generatorPos, 0, "*");
11212      modifier = { ...modifier, generator: true };
11213      signature = { ...signature, modifier };
11214    }
11215  }
11216  return {
11217    type: "MethodDefinition",
11218    children,
11219    name: signature.name,
11220    signature,
11221    block,
11222    parameters: signature.parameters
11223  };
11224});
11225var MethodDefinition$2 = (0, import_lib3.$TS)((0, import_lib3.$S)(GetOrSet, (0, import_lib3.$E)(_), ForbidIndentedApplication, (0, import_lib3.$E)((0, import_lib3.$S)(MemberBase, (0, import_lib3.$Q)(CallExpressionRest), (0, import_lib3.$E)(ReturnTypeSuffix))), RestoreIndentedApplication, (0, import_lib3.$E)(BracedBlock)), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6) {
11226  var kind = $1;
11227  var ws = $2;
11228  var content = $4;
11229  var block = $6;
11230  if (!content)
11231    return $skip;
11232  const [base, rest, returnType] = content;
11233  const value = [base, rest];
11234  if (!rest.length) {
11235    let name2;
11236    if (base.type === "MemberExpression") {
11237      const lastAccess2 = lastAccessInCallExpression(base);
11238      if (lastAccess2) {
11239        ({ name: name2 } = lastAccess2);
11240      }
11241    }
11242    if (!name2)
11243      ({ name: name2 } = base);
11244    if (!name2)
11245      return $skip;
11246    if (name2[0] === "\#")
11247      name2 = name2.slice(1);
11248    const autoReturn = !block || base.type !== "Identifier";
11249    return makeGetterMethod(name2, ws, base, returnType, block, kind, autoReturn);
11250  }
11251  let last = rest[rest.length - 1];
11252  while (Array.isArray(last)) {
11253    last = last[last.length - 1];
11254  }
11255  switch (last.type) {
11256    case "Call":
11257      return $skip;
11258    case "PropertyAccess":
11259      const { name: name2 } = last;
11260      return makeGetterMethod(name2, ws, value, returnType, block, kind);
11261    case "PropertyGlob":
11262      return {
11263        type: "MultiMethodDefinition",
11264        children: last.object.properties.map((p) => {
11265          const { name: name3, type } = p;
11266          let v;
11267          switch (type) {
11268            case "Identifier":
11269              v = insertTrimmingSpace(p, "");
11270              break;
11271            case "Property":
11272              const { value: value2 } = p;
11273              if (value2.privateShorthand) {
11274                v = value2.privateId;
11275              } else {
11276                v = insertTrimmingSpace(value2, "");
11277              }
11278              break;
11279          }
11280          const exp = processCallMemberExpression({
11281            type: "CallExpression",
11282            children: [base, ...rest.slice(0, -1), {
11283              type: "PropertyAccess",
11284              children: [last.dot, {
11285                ...v,
11286                children: [v.children.slice(0, 2)]
11287                // Remove potential delimiter
11288              }]
11289            }]
11290          });
11291          return makeGetterMethod(name3, ws, exp, returnType, block, kind);
11292        })
11293      };
11294  }
11295  const lastAccess = lastAccessInCallExpression({ children: rest });
11296  const { name } = lastAccess;
11297  return makeGetterMethod(name, ws, value, returnType, block, kind);
11298});
11299var MethodDefinition$$ = [MethodDefinition$0, MethodDefinition$1, MethodDefinition$2];
11300function MethodDefinition(ctx, state2) {
11301  return (0, import_lib3.$EVENT_C)(ctx, state2, "MethodDefinition", MethodDefinition$$);
11302}
11303var MethodModifier$0 = (0, import_lib3.$TS)((0, import_lib3.$S)(GetOrSet, (0, import_lib3.$E)(_), (0, import_lib3.$Y)(ClassElementName)), function($skip, $loc, $0, $1, $2, $3) {
11304  var kind = $1;
11305  return {
11306    type: "MethodModifier",
11307    async: false,
11308    generator: false,
11309    get: kind.token === "get",
11310    set: kind.token === "set",
11311    children: $0
11312  };
11313});
11314var MethodModifier$1 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$S)(Async, __), (0, import_lib3.$E)((0, import_lib3.$S)(Star, __))), function($skip, $loc, $0, $1, $2) {
11315  return {
11316    type: "MethodModifier",
11317    async: true,
11318    get: false,
11319    set: false,
11320    generator: !!$2,
11321    children: $0
11322  };
11323});
11324var MethodModifier$2 = (0, import_lib3.$TS)((0, import_lib3.$S)(Star, __), function($skip, $loc, $0, $1, $2) {
11325  return {
11326    type: "MethodModifier",
11327    async: false,
11328    get: false,
11329    set: false,
11330    generator: true,
11331    children: $0
11332  };
11333});
11334var MethodModifier$$ = [MethodModifier$0, MethodModifier$1, MethodModifier$2];
11335function MethodModifier(ctx, state2) {
11336  return (0, import_lib3.$EVENT_C)(ctx, state2, "MethodModifier", MethodModifier$$);
11337}
11338var MethodSignature$0 = (0, import_lib3.$TS)((0, import_lib3.$S)(ConstructorShorthand, NonEmptyParameters), function($skip, $loc, $0, $1, $2) {
11339  var parameters = $2;
11340  return {
11341    type: "MethodSignature",
11342    children: $0,
11343    name: $1.token,
11344    modifier: {},
11345    returnType: void 0,
11346    parameters
11347  };
11348});
11349var MethodSignature$1 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$E)(MethodModifier), ClassElementName, (0, import_lib3.$E)(_), (0, import_lib3.$E)(QuestionMark), (0, import_lib3.$E)(_), NonEmptyParameters, (0, import_lib3.$E)(ReturnTypeSuffix)), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7) {
11350  var modifier = $1;
11351  var name = $2;
11352  var optional = $4;
11353  var parameters = $6;
11354  var returnType = $7;
11355  if (name.name) {
11356    name = name.name;
11357  } else if (name.token) {
11358    name = name.token.match(/^(?:"|')/) ? name.token.slice(1, -1) : name.token;
11359  }
11360  if (optional)
11361    $0[3] = optional = { ...optional, ts: true };
11362  modifier = modifier || {};
11363  return {
11364    type: "MethodSignature",
11365    children: $0,
11366    name,
11367    optional,
11368    modifier,
11369    // get/set/async/generator
11370    returnType,
11371    parameters
11372  };
11373});
11374var MethodSignature$$ = [MethodSignature$0, MethodSignature$1];
11375function MethodSignature(ctx, state2) {
11376  return (0, import_lib3.$EVENT_C)(ctx, state2, "MethodSignature", MethodSignature$$);
11377}
11378var ClassElementName$0 = PropertyName;
11379var ClassElementName$1 = LengthShorthand;
11380var ClassElementName$2 = PrivateIdentifier;
11381var ClassElementName$$ = [ClassElementName$0, ClassElementName$1, ClassElementName$2];
11382function ClassElementName(ctx, state2) {
11383  return (0, import_lib3.$EVENT_C)(ctx, state2, "ClassElementName", ClassElementName$$);
11384}
11385var PrivateIdentifier$0 = (0, import_lib3.$TV)((0, import_lib3.$TEXT)((0, import_lib3.$S)(Hash, IdentifierName)), function($skip, $loc, $0, $1) {
11386  var id = $0;
11387  return {
11388    type: "Identifier",
11389    name: id,
11390    names: [id],
11391    children: [{
11392      $loc,
11393      token: id
11394    }]
11395  };
11396});
11397function PrivateIdentifier(ctx, state2) {
11398  return (0, import_lib3.$EVENT)(ctx, state2, "PrivateIdentifier", PrivateIdentifier$0);
11399}
11400var WAssignmentOp$0 = (0, import_lib3.$S)(__, AssignmentOp);
11401var WAssignmentOp$1 = (0, import_lib3.$S)((0, import_lib3.$E)(_), OperatorAssignmentOp);
11402var WAssignmentOp$$ = [WAssignmentOp$0, WAssignmentOp$1];
11403function WAssignmentOp(ctx, state2) {
11404  return (0, import_lib3.$EVENT_C)(ctx, state2, "WAssignmentOp", WAssignmentOp$$);
11405}
11406var AssignmentOp$0 = (0, import_lib3.$TS)((0, import_lib3.$S)(AssignmentOpSymbol, (0, import_lib3.$E)(_)), function($skip, $loc, $0, $1, $2) {
11407  if ($2?.length) {
11408    if (typeof $1 !== "string") {
11409      return { ...$1, children: [...$1.children, $2] };
11410    }
11411    return {
11412      token: $1,
11413      children: [$1, ...$2]
11414    };
11415  }
11416  if (typeof $1 !== "string")
11417    return $1;
11418  return { $loc, token: $1 };
11419});
11420function AssignmentOp(ctx, state2) {
11421  return (0, import_lib3.$EVENT)(ctx, state2, "AssignmentOp", AssignmentOp$0);
11422}
11423var OperatorAssignmentOp$0 = (0, import_lib3.$TS)((0, import_lib3.$S)(Xor, (0, import_lib3.$EXPECT)($L3, 'OperatorAssignmentOp "="'), (0, import_lib3.$E)(_)), function($skip, $loc, $0, $1, $2, $3) {
11424  return {
11425    special: true,
11426    call: getHelperRef("xor"),
11427    children: [$2, ...$3 || []]
11428  };
11429});
11430var OperatorAssignmentOp$1 = (0, import_lib3.$TS)((0, import_lib3.$S)(Xnor, (0, import_lib3.$EXPECT)($L3, 'OperatorAssignmentOp "="'), (0, import_lib3.$E)(_)), function($skip, $loc, $0, $1, $2, $3) {
11431  return {
11432    special: true,
11433    call: getHelperRef("xnor"),
11434    children: [$2, ...$3 || []]
11435  };
11436});
11437var OperatorAssignmentOp$2 = (0, import_lib3.$TS)((0, import_lib3.$S)(Identifier, (0, import_lib3.$EXPECT)($L3, 'OperatorAssignmentOp "="'), (0, import_lib3.$E)(_)), function($skip, $loc, $0, $1, $2, $3) {
11438  return {
11439    special: true,
11440    call: $1,
11441    children: [$2, ...$3 || []]
11442  };
11443});
11444var OperatorAssignmentOp$$ = [OperatorAssignmentOp$0, OperatorAssignmentOp$1, OperatorAssignmentOp$2];
11445function OperatorAssignmentOp(ctx, state2) {
11446  return (0, import_lib3.$EVENT_C)(ctx, state2, "OperatorAssignmentOp", OperatorAssignmentOp$$);
11447}
11448var AssignmentOpSymbol$0 = (0, import_lib3.$EXPECT)($L46, 'AssignmentOpSymbol "**="');
11449var AssignmentOpSymbol$1 = (0, import_lib3.$EXPECT)($L47, 'AssignmentOpSymbol "*="');
11450var AssignmentOpSymbol$2 = (0, import_lib3.$EXPECT)($L48, 'AssignmentOpSymbol "/="');
11451var AssignmentOpSymbol$3 = (0, import_lib3.$EXPECT)($L49, 'AssignmentOpSymbol "%="');
11452var AssignmentOpSymbol$4 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$C)((0, import_lib3.$EXPECT)($L9, 'AssignmentOpSymbol "++"'), (0, import_lib3.$EXPECT)($L11, 'AssignmentOpSymbol "\u29FA"')), Equals), function($skip, $loc, $0, $1, $2) {
11453  return {
11454    special: true,
11455    call: getHelperRef("concatAssign"),
11456    omitLhs: true,
11457    children: [$2]
11458  };
11459});
11460var AssignmentOpSymbol$5 = (0, import_lib3.$EXPECT)($L50, 'AssignmentOpSymbol "+="');
11461var AssignmentOpSymbol$6 = (0, import_lib3.$EXPECT)($L51, 'AssignmentOpSymbol "-="');
11462var AssignmentOpSymbol$7 = (0, import_lib3.$EXPECT)($L52, 'AssignmentOpSymbol "<<="');
11463var AssignmentOpSymbol$8 = (0, import_lib3.$EXPECT)($L53, 'AssignmentOpSymbol ">>>="');
11464var AssignmentOpSymbol$9 = (0, import_lib3.$EXPECT)($L54, 'AssignmentOpSymbol ">>="');
11465var AssignmentOpSymbol$10 = (0, import_lib3.$EXPECT)($L55, 'AssignmentOpSymbol "&&="');
11466var AssignmentOpSymbol$11 = (0, import_lib3.$EXPECT)($L56, 'AssignmentOpSymbol "&="');
11467var AssignmentOpSymbol$12 = (0, import_lib3.$EXPECT)($L57, 'AssignmentOpSymbol "^="');
11468var AssignmentOpSymbol$13 = (0, import_lib3.$EXPECT)($L58, 'AssignmentOpSymbol "||="');
11469var AssignmentOpSymbol$14 = (0, import_lib3.$EXPECT)($L59, 'AssignmentOpSymbol "|="');
11470var AssignmentOpSymbol$15 = (0, import_lib3.$EXPECT)($L60, 'AssignmentOpSymbol "??="');
11471var AssignmentOpSymbol$16 = (0, import_lib3.$T)((0, import_lib3.$EXPECT)($L61, 'AssignmentOpSymbol "?="'), function(value) {
11472  return "??=";
11473});
11474var AssignmentOpSymbol$17 = (0, import_lib3.$T)((0, import_lib3.$S)((0, import_lib3.$EXPECT)($L3, 'AssignmentOpSymbol "="'), (0, import_lib3.$N)((0, import_lib3.$EXPECT)($L3, 'AssignmentOpSymbol "="'))), function(value) {
11475  return value[0];
11476});
11477var AssignmentOpSymbol$18 = (0, import_lib3.$T)((0, import_lib3.$S)(CoffeeWordAssignmentOp), function(value) {
11478  return value[0];
11479});
11480var AssignmentOpSymbol$$ = [AssignmentOpSymbol$0, AssignmentOpSymbol$1, AssignmentOpSymbol$2, AssignmentOpSymbol$3, AssignmentOpSymbol$4, AssignmentOpSymbol$5, AssignmentOpSymbol$6, AssignmentOpSymbol$7, AssignmentOpSymbol$8, AssignmentOpSymbol$9, AssignmentOpSymbol$10, AssignmentOpSymbol$11, AssignmentOpSymbol$12, AssignmentOpSymbol$13, AssignmentOpSymbol$14, AssignmentOpSymbol$15, AssignmentOpSymbol$16, AssignmentOpSymbol$17, AssignmentOpSymbol$18];
11481function AssignmentOpSymbol(ctx, state2) {
11482  return (0, import_lib3.$EVENT_C)(ctx, state2, "AssignmentOpSymbol", AssignmentOpSymbol$$);
11483}
11484var CoffeeWordAssignmentOp$0 = (0, import_lib3.$T)((0, import_lib3.$EXPECT)($L62, 'CoffeeWordAssignmentOp "and="'), function(value) {
11485  return "&&=";
11486});
11487var CoffeeWordAssignmentOp$1 = (0, import_lib3.$T)((0, import_lib3.$EXPECT)($L63, 'CoffeeWordAssignmentOp "or="'), function(value) {
11488  return "||=";
11489});
11490var CoffeeWordAssignmentOp$$ = [CoffeeWordAssignmentOp$0, CoffeeWordAssignmentOp$1];
11491function CoffeeWordAssignmentOp(ctx, state2) {
11492  return (0, import_lib3.$EVENT_C)(ctx, state2, "CoffeeWordAssignmentOp", CoffeeWordAssignmentOp$$);
11493}
11494var NotDedentedBinaryOp$0 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$E)(IndentedFurther), (0, import_lib3.$E)(_), BinaryOp), function($skip, $loc, $0, $1, $2, $3) {
11495  const ws = [];
11496  if ($1)
11497    ws.push(...$1);
11498  if ($2)
11499    ws.push(...$2);
11500  return [ws, $3];
11501});
11502var NotDedentedBinaryOp$1 = (0, import_lib3.$TS)((0, import_lib3.$S)(Nested, (0, import_lib3.$E)(_), (0, import_lib3.$N)(Identifier), (0, import_lib3.$C)((0, import_lib3.$N)((0, import_lib3.$EXPECT)($L64, 'NotDedentedBinaryOp "*"')), (0, import_lib3.$N)(ImportDeclaration)), BinaryOp), function($skip, $loc, $0, $1, $2, $3, $4, $5) {
11503  var op = $5;
11504  const ws = [...$1];
11505  if ($2)
11506    ws.push(...$2);
11507  return [ws, op];
11508});
11509var NotDedentedBinaryOp$$ = [NotDedentedBinaryOp$0, NotDedentedBinaryOp$1];
11510function NotDedentedBinaryOp(ctx, state2) {
11511  return (0, import_lib3.$EVENT_C)(ctx, state2, "NotDedentedBinaryOp", NotDedentedBinaryOp$$);
11512}
11513var IdentifierBinaryOp$0 = (0, import_lib3.$TV)(Identifier, function($skip, $loc, $0, $1) {
11514  var id = $0;
11515  if (state.operators.has(id.name))
11516    return id;
11517  return $skip;
11518});
11519function IdentifierBinaryOp(ctx, state2) {
11520  return (0, import_lib3.$EVENT)(ctx, state2, "IdentifierBinaryOp", IdentifierBinaryOp$0);
11521}
11522var BinaryOp$0 = (0, import_lib3.$T)((0, import_lib3.$S)((0, import_lib3.$EXPECT)($R20, "BinaryOp /(?=\\p{ID_Start}|[_$^\xAB\xBB\u22D9\u2264\u2265\u2208\u220B\u2209\u220C\u2263\u2261\u2262\u2260=\u2A76\u2A75\u2016\u2047&|*\\/!?%<>\u29FA+-])/"), _BinaryOp), function(value) {
11523  var op = value[1];
11524  return op;
11525});
11526function BinaryOp(ctx, state2) {
11527  return (0, import_lib3.$EVENT)(ctx, state2, "BinaryOp", BinaryOp$0);
11528}
11529var _BinaryOp$0 = (0, import_lib3.$TS)((0, import_lib3.$S)(BinaryOpSymbol), function($skip, $loc, $0, $1) {
11530  if (typeof $1 === "string")
11531    return { $loc, token: $1 };
11532  return $1;
11533});
11534var _BinaryOp$1 = (0, import_lib3.$TV)(Identifier, function($skip, $loc, $0, $1) {
11535  var id = $0;
11536  if (!state.operators.has(id.name))
11537    return $skip;
11538  return {
11539    token: id.name,
11540    call: id,
11541    special: true,
11542    ...state.operators.get(id.name)
11543  };
11544});
11545var _BinaryOp$2 = (0, import_lib3.$TS)((0, import_lib3.$S)(OmittedNegation, __, Identifier), function($skip, $loc, $0, $1, $2, $3) {
11546  var id = $3;
11547  if (!state.operators.has(id.name))
11548    return $skip;
11549  return {
11550    token: id.name,
11551    call: id,
11552    special: true,
11553    negated: true,
11554    ...state.operators.get(id.name)
11555  };
11556});
11557var _BinaryOp$$ = [_BinaryOp$0, _BinaryOp$1, _BinaryOp$2];
11558function _BinaryOp(ctx, state2) {
11559  return (0, import_lib3.$EVENT_C)(ctx, state2, "_BinaryOp", _BinaryOp$$);
11560}
11561var BinaryOpSymbol$0 = (0, import_lib3.$EXPECT)($L65, 'BinaryOpSymbol "**"');
11562var BinaryOpSymbol$1 = (0, import_lib3.$EXPECT)($L64, 'BinaryOpSymbol "*"');
11563var BinaryOpSymbol$2 = (0, import_lib3.$EXPECT)($L66, 'BinaryOpSymbol "/"');
11564var BinaryOpSymbol$3 = (0, import_lib3.$TV)((0, import_lib3.$EXPECT)($L67, 'BinaryOpSymbol "%%"'), function($skip, $loc, $0, $1) {
11565  return {
11566    call: getHelperRef("modulo"),
11567    special: true
11568  };
11569});
11570var BinaryOpSymbol$4 = (0, import_lib3.$EXPECT)($L68, 'BinaryOpSymbol "%"');
11571var BinaryOpSymbol$5 = (0, import_lib3.$TV)((0, import_lib3.$C)((0, import_lib3.$EXPECT)($L9, 'BinaryOpSymbol "++"'), (0, import_lib3.$EXPECT)($L11, 'BinaryOpSymbol "\u29FA"')), function($skip, $loc, $0, $1) {
11572  return {
11573    method: "concat",
11574    special: true
11575  };
11576});
11577var BinaryOpSymbol$6 = (0, import_lib3.$EXPECT)($L69, 'BinaryOpSymbol "+"');
11578var BinaryOpSymbol$7 = (0, import_lib3.$EXPECT)($L23, 'BinaryOpSymbol "-"');
11579var BinaryOpSymbol$8 = (0, import_lib3.$EXPECT)($L70, 'BinaryOpSymbol "<="');
11580var BinaryOpSymbol$9 = (0, import_lib3.$T)((0, import_lib3.$EXPECT)($L71, 'BinaryOpSymbol "\u2264"'), function(value) {
11581  return "<=";
11582});
11583var BinaryOpSymbol$10 = (0, import_lib3.$EXPECT)($L72, 'BinaryOpSymbol ">="');
11584var BinaryOpSymbol$11 = (0, import_lib3.$T)((0, import_lib3.$EXPECT)($L73, 'BinaryOpSymbol "\u2265"'), function(value) {
11585  return ">=";
11586});
11587var BinaryOpSymbol$12 = (0, import_lib3.$TV)((0, import_lib3.$EXPECT)($L74, 'BinaryOpSymbol "<?"'), function($skip, $loc, $0, $1) {
11588  return {
11589    $loc,
11590    token: "instanceof",
11591    relational: true,
11592    special: true
11593  };
11594});
11595var BinaryOpSymbol$13 = (0, import_lib3.$TV)((0, import_lib3.$EXPECT)($L75, 'BinaryOpSymbol "!<?"'), function($skip, $loc, $0, $1) {
11596  return {
11597    $loc,
11598    token: "instanceof",
11599    relational: true,
11600    special: true,
11601    negated: true
11602  };
11603});
11604var BinaryOpSymbol$14 = (0, import_lib3.$EXPECT)($L76, 'BinaryOpSymbol "<<"');
11605var BinaryOpSymbol$15 = (0, import_lib3.$T)((0, import_lib3.$EXPECT)($L77, 'BinaryOpSymbol "\xAB"'), function(value) {
11606  return "<<";
11607});
11608var BinaryOpSymbol$16 = (0, import_lib3.$EXPECT)($L19, 'BinaryOpSymbol "<"');
11609var BinaryOpSymbol$17 = (0, import_lib3.$EXPECT)($L78, 'BinaryOpSymbol ">>>"');
11610var BinaryOpSymbol$18 = (0, import_lib3.$T)((0, import_lib3.$EXPECT)($L79, 'BinaryOpSymbol "\u22D9"'), function(value) {
11611  return ">>>";
11612});
11613var BinaryOpSymbol$19 = (0, import_lib3.$EXPECT)($L80, 'BinaryOpSymbol ">>"');
11614var BinaryOpSymbol$20 = (0, import_lib3.$T)((0, import_lib3.$EXPECT)($L81, 'BinaryOpSymbol "\xBB"'), function(value) {
11615  return ">>";
11616});
11617var BinaryOpSymbol$21 = (0, import_lib3.$EXPECT)($L44, 'BinaryOpSymbol ">"');
11618var BinaryOpSymbol$22 = (0, import_lib3.$EXPECT)($L82, 'BinaryOpSymbol "!=="');
11619var BinaryOpSymbol$23 = (0, import_lib3.$T)((0, import_lib3.$EXPECT)($L83, 'BinaryOpSymbol "\u2262"'), function(value) {
11620  return "!==";
11621});
11622var BinaryOpSymbol$24 = (0, import_lib3.$TV)((0, import_lib3.$C)((0, import_lib3.$EXPECT)($L84, 'BinaryOpSymbol "!="'), (0, import_lib3.$EXPECT)($L85, 'BinaryOpSymbol "\u2260"')), function($skip, $loc, $0, $1) {
11623  if (config.coffeeEq)
11624    return "!==";
11625  return "!=";
11626});
11627var BinaryOpSymbol$25 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$EXPECT)($L86, 'BinaryOpSymbol "isnt"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
11628  if (config.coffeeIsnt)
11629    return "!==";
11630  return $skip;
11631});
11632var BinaryOpSymbol$26 = (0, import_lib3.$EXPECT)($L87, 'BinaryOpSymbol "==="');
11633var BinaryOpSymbol$27 = (0, import_lib3.$T)((0, import_lib3.$C)((0, import_lib3.$EXPECT)($L88, 'BinaryOpSymbol "\u2263"'), (0, import_lib3.$EXPECT)($L89, 'BinaryOpSymbol "\u2A76"')), function(value) {
11634  return "===";
11635});
11636var BinaryOpSymbol$28 = (0, import_lib3.$TV)((0, import_lib3.$C)((0, import_lib3.$EXPECT)($L90, 'BinaryOpSymbol "=="'), (0, import_lib3.$EXPECT)($L91, 'BinaryOpSymbol "\u2261"'), (0, import_lib3.$EXPECT)($L92, 'BinaryOpSymbol "\u2A75"')), function($skip, $loc, $0, $1) {
11637  if (config.coffeeEq)
11638    return "===";
11639  return "==";
11640});
11641var BinaryOpSymbol$29 = (0, import_lib3.$T)((0, import_lib3.$S)((0, import_lib3.$EXPECT)($L93, 'BinaryOpSymbol "and"'), NonIdContinue), function(value) {
11642  return "&&";
11643});
11644var BinaryOpSymbol$30 = (0, import_lib3.$EXPECT)($L94, 'BinaryOpSymbol "&&"');
11645var BinaryOpSymbol$31 = (0, import_lib3.$T)((0, import_lib3.$S)((0, import_lib3.$EXPECT)($L95, 'BinaryOpSymbol "or"'), NonIdContinue), function(value) {
11646  return "||";
11647});
11648var BinaryOpSymbol$32 = (0, import_lib3.$EXPECT)($L96, 'BinaryOpSymbol "||"');
11649var BinaryOpSymbol$33 = (0, import_lib3.$T)((0, import_lib3.$EXPECT)($L97, 'BinaryOpSymbol "\u2016"'), function(value) {
11650  return "||";
11651});
11652var BinaryOpSymbol$34 = (0, import_lib3.$TV)((0, import_lib3.$C)((0, import_lib3.$EXPECT)($L98, 'BinaryOpSymbol "^^"'), (0, import_lib3.$S)((0, import_lib3.$EXPECT)($L99, 'BinaryOpSymbol "xor"'), NonIdContinue)), function($skip, $loc, $0, $1) {
11653  return {
11654    call: getHelperRef("xor"),
11655    special: true,
11656    prec: "^^"
11657  };
11658});
11659var BinaryOpSymbol$35 = (0, import_lib3.$TV)((0, import_lib3.$C)((0, import_lib3.$EXPECT)($R21, "BinaryOpSymbol /!\\^\\^?/"), (0, import_lib3.$S)((0, import_lib3.$EXPECT)($L100, 'BinaryOpSymbol "xnor"'), NonIdContinue)), function($skip, $loc, $0, $1) {
11660  return {
11661    call: getHelperRef("xnor"),
11662    special: true,
11663    prec: "^^"
11664  };
11665});
11666var BinaryOpSymbol$36 = (0, import_lib3.$EXPECT)($L101, 'BinaryOpSymbol "??"');
11667var BinaryOpSymbol$37 = (0, import_lib3.$T)((0, import_lib3.$EXPECT)($L102, 'BinaryOpSymbol "\u2047"'), function(value) {
11668  return "??";
11669});
11670var BinaryOpSymbol$38 = (0, import_lib3.$T)((0, import_lib3.$S)((0, import_lib3.$EXPECT)($L6, 'BinaryOpSymbol "?"'), CoffeeBinaryExistentialEnabled), function(value) {
11671  return "??";
11672});
11673var BinaryOpSymbol$39 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$EXPECT)($L103, 'BinaryOpSymbol "instanceof"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
11674  return {
11675    $loc,
11676    token: $1,
11677    relational: true,
11678    special: true
11679    // for typeof shorthand
11680  };
11681});
11682var BinaryOpSymbol$40 = (0, import_lib3.$T)((0, import_lib3.$S)(CoffeeOfEnabled, CoffeeOfOp), function(value) {
11683  var op = value[1];
11684  return op;
11685});
11686var BinaryOpSymbol$41 = (0, import_lib3.$TS)((0, import_lib3.$S)(OmittedNegation, __, NotOp), function($skip, $loc, $0, $1, $2, $3) {
11687  var op = $3;
11688  return { ...op, $loc };
11689});
11690var BinaryOpSymbol$42 = (0, import_lib3.$TV)((0, import_lib3.$C)((0, import_lib3.$S)(Is, __, In), (0, import_lib3.$EXPECT)($L104, 'BinaryOpSymbol "\u2208"')), function($skip, $loc, $0, $1) {
11691  return {
11692    method: "includes",
11693    relational: true,
11694    reversed: true,
11695    special: true
11696  };
11697});
11698var BinaryOpSymbol$43 = (0, import_lib3.$TV)((0, import_lib3.$EXPECT)($L105, 'BinaryOpSymbol "\u220B"'), function($skip, $loc, $0, $1) {
11699  return {
11700    method: "includes",
11701    relational: true,
11702    special: true
11703  };
11704});
11705var BinaryOpSymbol$44 = (0, import_lib3.$TV)((0, import_lib3.$EXPECT)($L106, 'BinaryOpSymbol "\u220C"'), function($skip, $loc, $0, $1) {
11706  return {
11707    method: "includes",
11708    relational: true,
11709    special: true,
11710    negated: true
11711  };
11712});
11713var BinaryOpSymbol$45 = (0, import_lib3.$TV)((0, import_lib3.$C)((0, import_lib3.$S)(Is, __, OmittedNegation, __, In), (0, import_lib3.$EXPECT)($L107, 'BinaryOpSymbol "\u2209"')), function($skip, $loc, $0, $1) {
11714  return {
11715    method: "includes",
11716    relational: true,
11717    reversed: true,
11718    special: true,
11719    negated: true
11720  };
11721});
11722var BinaryOpSymbol$46 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$N)(CoffeeNotEnabled), Is, __, Not), function($skip, $loc, $0, $1, $2, $3, $4) {
11723  if (config.objectIs) {
11724    return {
11725      call: getHelperRef("is"),
11726      relational: true,
11727      special: true,
11728      asConst: true,
11729      negated: true
11730    };
11731  }
11732  return "!==";
11733});
11734var BinaryOpSymbol$47 = (0, import_lib3.$TS)((0, import_lib3.$S)(Is), function($skip, $loc, $0, $1) {
11735  if (config.objectIs) {
11736    return {
11737      call: getHelperRef("is"),
11738      relational: true,
11739      special: true,
11740      asConst: true
11741    };
11742  }
11743  return "===";
11744});
11745var BinaryOpSymbol$48 = In;
11746var BinaryOpSymbol$49 = (0, import_lib3.$EXPECT)($L108, 'BinaryOpSymbol "&"');
11747var BinaryOpSymbol$50 = (0, import_lib3.$EXPECT)($L22, 'BinaryOpSymbol "^"');
11748var BinaryOpSymbol$51 = (0, import_lib3.$EXPECT)($L109, 'BinaryOpSymbol "|"');
11749var BinaryOpSymbol$$ = [BinaryOpSymbol$0, BinaryOpSymbol$1, BinaryOpSymbol$2, BinaryOpSymbol$3, BinaryOpSymbol$4, BinaryOpSymbol$5, BinaryOpSymbol$6, BinaryOpSymbol$7, BinaryOpSymbol$8, BinaryOpSymbol$9, BinaryOpSymbol$10, BinaryOpSymbol$11, BinaryOpSymbol$12, BinaryOpSymbol$13, BinaryOpSymbol$14, BinaryOpSymbol$15, BinaryOpSymbol$16, BinaryOpSymbol$17, BinaryOpSymbol$18, BinaryOpSymbol$19, BinaryOpSymbol$20, BinaryOpSymbol$21, BinaryOpSymbol$22, BinaryOpSymbol$23, BinaryOpSymbol$24, BinaryOpSymbol$25, BinaryOpSymbol$26, BinaryOpSymbol$27, BinaryOpSymbol$28, BinaryOpSymbol$29, BinaryOpSymbol$30, BinaryOpSymbol$31, BinaryOpSymbol$32, BinaryOpSymbol$33, BinaryOpSymbol$34, BinaryOpSymbol$35, BinaryOpSymbol$36, BinaryOpSymbol$37, BinaryOpSymbol$38, BinaryOpSymbol$39, BinaryOpSymbol$40, BinaryOpSymbol$41, BinaryOpSymbol$42, BinaryOpSymbol$43, BinaryOpSymbol$44, BinaryOpSymbol$45, BinaryOpSymbol$46, BinaryOpSymbol$47, BinaryOpSymbol$48, BinaryOpSymbol$49, BinaryOpSymbol$50, BinaryOpSymbol$51];
11750function BinaryOpSymbol(ctx, state2) {
11751  return (0, import_lib3.$EVENT_C)(ctx, state2, "BinaryOpSymbol", BinaryOpSymbol$$);
11752}
11753var ActualIn$0 = (0, import_lib3.$T)((0, import_lib3.$S)(CoffeeOfEnabled, Of), function(value) {
11754  return value[1];
11755});
11756var ActualIn$1 = (0, import_lib3.$T)((0, import_lib3.$S)((0, import_lib3.$N)(CoffeeOfEnabled), In), function(value) {
11757  return value[1];
11758});
11759var ActualIn$$ = [ActualIn$0, ActualIn$1];
11760function ActualIn(ctx, state2) {
11761  return (0, import_lib3.$EVENT_C)(ctx, state2, "ActualIn", ActualIn$$);
11762}
11763var CoffeeOfOp$0 = (0, import_lib3.$T)((0, import_lib3.$S)(Of), function(value) {
11764  return "in";
11765});
11766var CoffeeOfOp$1 = (0, import_lib3.$TS)((0, import_lib3.$S)(In), function($skip, $loc, $0, $1) {
11767  return {
11768    call: [getHelperRef("indexOf"), ".call"],
11769    relational: true,
11770    reversed: true,
11771    suffix: " >= 0",
11772    special: true
11773  };
11774});
11775var CoffeeOfOp$2 = (0, import_lib3.$TS)((0, import_lib3.$S)(OmittedNegation, __, Of, NonIdContinue), function($skip, $loc, $0, $1, $2, $3, $4) {
11776  return {
11777    $loc,
11778    token: "in",
11779    special: true,
11780    negated: true
11781  };
11782});
11783var CoffeeOfOp$3 = (0, import_lib3.$TS)((0, import_lib3.$S)(OmittedNegation, __, In), function($skip, $loc, $0, $1, $2, $3) {
11784  return {
11785    call: [getHelperRef("indexOf"), ".call"],
11786    relational: true,
11787    reversed: true,
11788    suffix: " < 0",
11789    special: true
11790  };
11791});
11792var CoffeeOfOp$$ = [CoffeeOfOp$0, CoffeeOfOp$1, CoffeeOfOp$2, CoffeeOfOp$3];
11793function CoffeeOfOp(ctx, state2) {
11794  return (0, import_lib3.$EVENT_C)(ctx, state2, "CoffeeOfOp", CoffeeOfOp$$);
11795}
11796var NotOp$0 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$EXPECT)($L103, 'NotOp "instanceof"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
11797  return {
11798    $loc,
11799    token: "instanceof",
11800    relational: true,
11801    special: true,
11802    negated: true
11803  };
11804});
11805var NotOp$1 = (0, import_lib3.$TS)((0, import_lib3.$S)(In), function($skip, $loc, $0, $1) {
11806  return {
11807    $loc,
11808    token: "in",
11809    special: true,
11810    negated: true
11811  };
11812});
11813var NotOp$$ = [NotOp$0, NotOp$1];
11814function NotOp(ctx, state2) {
11815  return (0, import_lib3.$EVENT_C)(ctx, state2, "NotOp", NotOp$$);
11816}
11817var Xor$0 = (0, import_lib3.$EXPECT)($L98, 'Xor "^^"');
11818var Xor$1 = (0, import_lib3.$S)((0, import_lib3.$EXPECT)($L99, 'Xor "xor"'), NonIdContinue);
11819var Xor$$ = [Xor$0, Xor$1];
11820function Xor(ctx, state2) {
11821  return (0, import_lib3.$EVENT_C)(ctx, state2, "Xor", Xor$$);
11822}
11823var Xnor$0 = (0, import_lib3.$R$0)((0, import_lib3.$EXPECT)($R21, "Xnor /!\\^\\^?/"));
11824var Xnor$1 = (0, import_lib3.$EXPECT)($L100, 'Xnor "xnor"');
11825var Xnor$$ = [Xnor$0, Xnor$1];
11826function Xnor(ctx, state2) {
11827  return (0, import_lib3.$EVENT_C)(ctx, state2, "Xnor", Xnor$$);
11828}
11829var UnaryOp$0 = (0, import_lib3.$TR)((0, import_lib3.$EXPECT)($R22, "UnaryOp /(?!\\+\\+|--)[!~+-](?!\\s)/"), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7, $8, $9) {
11830  return { $loc, token: $0 };
11831});
11832var UnaryOp$1 = AwaitOp;
11833var UnaryOp$2 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$C)(Delete, Void, Typeof), (0, import_lib3.$N)((0, import_lib3.$EXPECT)($R23, "UnaryOp /[:.]/")), (0, import_lib3.$E)(_)), function($skip, $loc, $0, $1, $2, $3) {
11834  var op = $1;
11835  var ws = $3;
11836  if (!ws)
11837    return [op, [" "]];
11838  return [op, ws];
11839});
11840var UnaryOp$3 = (0, import_lib3.$T)((0, import_lib3.$S)(Not, (0, import_lib3.$N)((0, import_lib3.$EXPECT)($R23, "UnaryOp /[:.]/")), (0, import_lib3.$E)((0, import_lib3.$EXPECT)($L18, 'UnaryOp " "')), (0, import_lib3.$E)(_)), function(value) {
11841  return [value[0], value[3]];
11842});
11843var UnaryOp$$ = [UnaryOp$0, UnaryOp$1, UnaryOp$2, UnaryOp$3];
11844function UnaryOp(ctx, state2) {
11845  return (0, import_lib3.$EVENT_C)(ctx, state2, "UnaryOp", UnaryOp$$);
11846}
11847var AwaitOp$0 = (0, import_lib3.$TS)((0, import_lib3.$S)(Await, (0, import_lib3.$E)((0, import_lib3.$S)(Dot, IdentifierName)), (0, import_lib3.$E)(_)), function($skip, $loc, $0, $1, $2, $3) {
11848  var a = $1;
11849  var op = $2;
11850  var ws = $3;
11851  return {
11852    ...a,
11853    op,
11854    children: [a, ...ws || [" "]]
11855  };
11856});
11857function AwaitOp(ctx, state2) {
11858  return (0, import_lib3.$EVENT)(ctx, state2, "AwaitOp", AwaitOp$0);
11859}
11860var ModuleItem$0 = ImportDeclaration;
11861var ModuleItem$1 = ExportDeclaration;
11862var ModuleItem$2 = StatementListItem;
11863var ModuleItem$$ = [ModuleItem$0, ModuleItem$1, ModuleItem$2];
11864function ModuleItem(ctx, state2) {
11865  return (0, import_lib3.$EVENT_C)(ctx, state2, "ModuleItem", ModuleItem$$);
11866}
11867var StatementListItem$0 = Declaration;
11868var StatementListItem$1 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$N)((0, import_lib3.$EXPECT)($L110, 'StatementListItem "$:"')), ImplicitObjectLiteral), function($skip, $loc, $0, $1, $2) {
11869  return makeLeftHandSideExpression($2);
11870});
11871var StatementListItem$2 = PostfixedStatement;
11872var StatementListItem$$ = [StatementListItem$0, StatementListItem$1, StatementListItem$2];
11873function StatementListItem(ctx, state2) {
11874  return (0, import_lib3.$EVENT_C)(ctx, state2, "StatementListItem", StatementListItem$$);
11875}
11876var PostfixedStatement$0 = (0, import_lib3.$TS)((0, import_lib3.$S)(Statement, (0, import_lib3.$E)((0, import_lib3.$S)((0, import_lib3.$E)(_), PostfixStatement))), function($skip, $loc, $0, $1, $2) {
11877  var statement = $1;
11878  var post = $2;
11879  if (post)
11880    return addPostfixStatement(statement, ...post);
11881  return statement;
11882});
11883function PostfixedStatement(ctx, state2) {
11884  return (0, import_lib3.$EVENT)(ctx, state2, "PostfixedStatement", PostfixedStatement$0);
11885}
11886var NoCommaStatementListItem$0 = Declaration;
11887var NoCommaStatementListItem$1 = PostfixedNoCommaStatement;
11888var NoCommaStatementListItem$$ = [NoCommaStatementListItem$0, NoCommaStatementListItem$1];
11889function NoCommaStatementListItem(ctx, state2) {
11890  return (0, import_lib3.$EVENT_C)(ctx, state2, "NoCommaStatementListItem", NoCommaStatementListItem$$);
11891}
11892var PostfixedNoCommaStatement$0 = (0, import_lib3.$TS)((0, import_lib3.$S)(NoCommaStatement, (0, import_lib3.$E)((0, import_lib3.$S)((0, import_lib3.$E)(_), PostfixStatement))), function($skip, $loc, $0, $1, $2) {
11893  var statement = $1;
11894  var post = $2;
11895  if (post)
11896    return addPostfixStatement(statement, ...post);
11897  return statement;
11898});
11899function PostfixedNoCommaStatement(ctx, state2) {
11900  return (0, import_lib3.$EVENT)(ctx, state2, "PostfixedNoCommaStatement", PostfixedNoCommaStatement$0);
11901}
11902var PostfixedExpression$0 = (0, import_lib3.$TS)((0, import_lib3.$S)(ExtendedExpression, (0, import_lib3.$E)((0, import_lib3.$S)((0, import_lib3.$E)(_), PostfixStatement))), function($skip, $loc, $0, $1, $2) {
11903  var expression = $1;
11904  var post = $2;
11905  if (post)
11906    return attachPostfixStatementAsExpression(expression, post);
11907  return expression;
11908});
11909function PostfixedExpression(ctx, state2) {
11910  return (0, import_lib3.$EVENT)(ctx, state2, "PostfixedExpression", PostfixedExpression$0);
11911}
11912var PostfixedCommaExpression$0 = (0, import_lib3.$TS)((0, import_lib3.$S)(PostfixedExpression, (0, import_lib3.$C)((0, import_lib3.$S)((0, import_lib3.$E)(_), PostfixStatement), (0, import_lib3.$Q)((0, import_lib3.$S)(CommaDelimiter, AssignmentExpression)))), function($skip, $loc, $0, $1, $2) {
11913  var expression = $1;
11914  var post = $2;
11915  if (!post.length)
11916    return $1;
11917  if (post.length === 2 && !Array.isArray(post[1])) {
11918    return attachPostfixStatementAsExpression(expression, post);
11919  }
11920  return $0;
11921});
11922function PostfixedCommaExpression(ctx, state2) {
11923  return (0, import_lib3.$EVENT)(ctx, state2, "PostfixedCommaExpression", PostfixedCommaExpression$0);
11924}
11925var NonPipelinePostfixedExpression$0 = (0, import_lib3.$TS)((0, import_lib3.$S)(NonPipelineExtendedExpression, (0, import_lib3.$E)((0, import_lib3.$S)((0, import_lib3.$E)(_), PostfixStatement))), function($skip, $loc, $0, $1, $2) {
11926  var expression = $1;
11927  var post = $2;
11928  if (post)
11929    return attachPostfixStatementAsExpression(expression, post);
11930  return expression;
11931});
11932function NonPipelinePostfixedExpression(ctx, state2) {
11933  return (0, import_lib3.$EVENT)(ctx, state2, "NonPipelinePostfixedExpression", NonPipelinePostfixedExpression$0);
11934}
11935var PostfixStatement$0 = (0, import_lib3.$T)((0, import_lib3.$S)((0, import_lib3.$EXPECT)($R24, "PostfixStatement /(?=for|if|loop|unless|until|while)/"), _PostfixStatement), function(value) {
11936  return value[1];
11937});
11938function PostfixStatement(ctx, state2) {
11939  return (0, import_lib3.$EVENT)(ctx, state2, "PostfixStatement", PostfixStatement$0);
11940}
11941var _PostfixStatement$0 = ForClause;
11942var _PostfixStatement$1 = IfClause;
11943var _PostfixStatement$2 = LoopClause;
11944var _PostfixStatement$3 = WhileClause;
11945var _PostfixStatement$$ = [_PostfixStatement$0, _PostfixStatement$1, _PostfixStatement$2, _PostfixStatement$3];
11946function _PostfixStatement(ctx, state2) {
11947  return (0, import_lib3.$EVENT_C)(ctx, state2, "_PostfixStatement", _PostfixStatement$$);
11948}
11949var Statement$0 = KeywordStatement;
11950var Statement$1 = VariableStatement;
11951var Statement$2 = IfStatement;
11952var Statement$3 = IterationStatement;
11953var Statement$4 = SwitchStatement;
11954var Statement$5 = TryStatement;
11955var Statement$6 = EmptyStatement;
11956var Statement$7 = LabelledStatement;
11957var Statement$8 = CommaExpressionStatement;
11958var Statement$9 = BlockStatement;
11959var Statement$$ = [Statement$0, Statement$1, Statement$2, Statement$3, Statement$4, Statement$5, Statement$6, Statement$7, Statement$8, Statement$9];
11960function Statement(ctx, state2) {
11961  return (0, import_lib3.$EVENT_C)(ctx, state2, "Statement", Statement$$);
11962}
11963var NoCommaStatement$0 = KeywordStatement;
11964var NoCommaStatement$1 = VariableStatement;
11965var NoCommaStatement$2 = IfStatement;
11966var NoCommaStatement$3 = IterationStatement;
11967var NoCommaStatement$4 = SwitchStatement;
11968var NoCommaStatement$5 = TryStatement;
11969var NoCommaStatement$6 = EmptyStatement;
11970var NoCommaStatement$7 = LabelledStatement;
11971var NoCommaStatement$8 = ExpressionStatement;
11972var NoCommaStatement$9 = BlockStatement;
11973var NoCommaStatement$$ = [NoCommaStatement$0, NoCommaStatement$1, NoCommaStatement$2, NoCommaStatement$3, NoCommaStatement$4, NoCommaStatement$5, NoCommaStatement$6, NoCommaStatement$7, NoCommaStatement$8, NoCommaStatement$9];
11974function NoCommaStatement(ctx, state2) {
11975  return (0, import_lib3.$EVENT_C)(ctx, state2, "NoCommaStatement", NoCommaStatement$$);
11976}
11977var EmptyStatement$0 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$E)(_), (0, import_lib3.$Y)((0, import_lib3.$EXPECT)($L111, 'EmptyStatement ";"'))), function($skip, $loc, $0, $1, $2) {
11978  return { type: "EmptyStatement", children: $1 || [] };
11979});
11980function EmptyStatement(ctx, state2) {
11981  return (0, import_lib3.$EVENT)(ctx, state2, "EmptyStatement", EmptyStatement$0);
11982}
11983var InsertEmptyStatement$0 = (0, import_lib3.$TS)((0, import_lib3.$S)(InsertSemicolon), function($skip, $loc, $0, $1) {
11984  return { type: "EmptyStatement", children: [$1] };
11985});
11986function InsertEmptyStatement(ctx, state2) {
11987  return (0, import_lib3.$EVENT)(ctx, state2, "InsertEmptyStatement", InsertEmptyStatement$0);
11988}
11989var BlockStatement$0 = (0, import_lib3.$T)((0, import_lib3.$S)(ExplicitBlock, (0, import_lib3.$N)((0, import_lib3.$S)(__, (0, import_lib3.$EXPECT)($L3, 'BlockStatement "="')))), function(value) {
11990  return value[0];
11991});
11992function BlockStatement(ctx, state2) {
11993  return (0, import_lib3.$EVENT)(ctx, state2, "BlockStatement", BlockStatement$0);
11994}
11995var LabelledStatement$0 = (0, import_lib3.$TS)((0, import_lib3.$S)(Label, LabelledItem), function($skip, $loc, $0, $1, $2) {
11996  var label = $1;
11997  var statement = $2;
11998  return {
11999    type: "LabelledStatement",
12000    label,
12001    statement,
12002    children: $0
12003  };
12004});
12005function LabelledStatement(ctx, state2) {
12006  return (0, import_lib3.$EVENT)(ctx, state2, "LabelledStatement", LabelledStatement$0);
12007}
12008var Label$0 = (0, import_lib3.$TS)((0, import_lib3.$S)(Colon, Identifier, Whitespace), function($skip, $loc, $0, $1, $2, $3) {
12009  var colon = $1;
12010  var id = $2;
12011  var w = $3;
12012  return [id, colon, w];
12013});
12014var Label$1 = (0, import_lib3.$S)((0, import_lib3.$EXPECT)($L110, 'Label "$:"'), Whitespace);
12015var Label$$ = [Label$0, Label$1];
12016function Label(ctx, state2) {
12017  return (0, import_lib3.$EVENT_C)(ctx, state2, "Label", Label$$);
12018}
12019var LabelledItem$0 = Statement;
12020var LabelledItem$1 = FunctionDeclaration;
12021var LabelledItem$$ = [LabelledItem$0, LabelledItem$1];
12022function LabelledItem(ctx, state2) {
12023  return (0, import_lib3.$EVENT_C)(ctx, state2, "LabelledItem", LabelledItem$$);
12024}
12025var IfStatement$0 = (0, import_lib3.$TS)((0, import_lib3.$S)(IfClause, BlockOrEmpty, (0, import_lib3.$E)(ElseClause)), function($skip, $loc, $0, $1, $2, $3) {
12026  var clause = $1;
12027  var block = $2;
12028  var e = $3;
12029  return {
12030    type: "IfStatement",
12031    children: [...clause.children, block, e],
12032    condition: clause.condition,
12033    negated: clause.negated,
12034    then: block,
12035    else: e
12036  };
12037});
12038function IfStatement(ctx, state2) {
12039  return (0, import_lib3.$EVENT)(ctx, state2, "IfStatement", IfStatement$0);
12040}
12041var ElseClause$0 = (0, import_lib3.$T)((0, import_lib3.$S)((0, import_lib3.$C)(Nested, (0, import_lib3.$E)(_)), Else, BlockOrEmpty), function(value) {
12042  var block = value[2];
12043  return { "type": "ElseClause", "children": value, "block": block };
12044});
12045function ElseClause(ctx, state2) {
12046  return (0, import_lib3.$EVENT)(ctx, state2, "ElseClause", ElseClause$0);
12047}
12048var IfClause$0 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$C)(If, Unless), (0, import_lib3.$E)(_), Condition), function($skip, $loc, $0, $1, $2, $3) {
12049  var kind = $1;
12050  var ws = $2;
12051  var condition = $3;
12052  if (kind.negated) {
12053    kind = { ...kind, token: "if" };
12054    condition = negateCondition(condition);
12055  }
12056  return {
12057    type: "IfStatement",
12058    children: [kind, ws, condition],
12059    condition,
12060    negated: kind.negated
12061  };
12062});
12063function IfClause(ctx, state2) {
12064  return (0, import_lib3.$EVENT)(ctx, state2, "IfClause", IfClause$0);
12065}
12066var IterationStatement$0 = (0, import_lib3.$T)((0, import_lib3.$S)((0, import_lib3.$EXPECT)($R25, "IterationStatement /(?=loop|comptime|do|for|until|while)/"), _IterationStatement), function(value) {
12067  return value[1];
12068});
12069function IterationStatement(ctx, state2) {
12070  return (0, import_lib3.$EVENT)(ctx, state2, "IterationStatement", IterationStatement$0);
12071}
12072var _IterationStatement$0 = LoopStatement;
12073var _IterationStatement$1 = (0, import_lib3.$T)((0, import_lib3.$S)((0, import_lib3.$N)(CoffeeDoEnabled), DoWhileStatement), function(value) {
12074  return value[1];
12075});
12076var _IterationStatement$2 = (0, import_lib3.$T)((0, import_lib3.$S)((0, import_lib3.$N)(CoffeeDoEnabled), DoStatement), function(value) {
12077  return value[1];
12078});
12079var _IterationStatement$3 = ComptimeStatement;
12080var _IterationStatement$4 = WhileStatement;
12081var _IterationStatement$5 = ForStatement;
12082var _IterationStatement$$ = [_IterationStatement$0, _IterationStatement$1, _IterationStatement$2, _IterationStatement$3, _IterationStatement$4, _IterationStatement$5];
12083function _IterationStatement(ctx, state2) {
12084  return (0, import_lib3.$EVENT_C)(ctx, state2, "_IterationStatement", _IterationStatement$$);
12085}
12086var IterationExpression$0 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$E)((0, import_lib3.$S)(Async, __)), IterationStatement), function($skip, $loc, $0, $1, $2) {
12087  var async = $1;
12088  var statement = $2;
12089  return {
12090    type: "IterationExpression",
12091    subtype: statement.type,
12092    children: [statement],
12093    block: statement.block,
12094    statement,
12095    async
12096  };
12097});
12098function IterationExpression(ctx, state2) {
12099  return (0, import_lib3.$EVENT)(ctx, state2, "IterationExpression", IterationExpression$0);
12100}
12101var LoopStatement$0 = (0, import_lib3.$TS)((0, import_lib3.$S)(LoopClause, BlockOrEmptyStatement), function($skip, $loc, $0, $1, $2) {
12102  var clause = $1;
12103  var block = $2;
12104  return {
12105    ...clause,
12106    type: "IterationStatement",
12107    children: [...clause.children, block],
12108    block
12109  };
12110});
12111function LoopStatement(ctx, state2) {
12112  return (0, import_lib3.$EVENT)(ctx, state2, "LoopStatement", LoopStatement$0);
12113}
12114var LoopClause$0 = (0, import_lib3.$TV)(Loop, function($skip, $loc, $0, $1) {
12115  var kind = $0;
12116  const expression = {
12117    type: "Literal",
12118    children: ["true"],
12119    raw: "true"
12120  };
12121  const condition = {
12122    type: "ParenthesizedExpression",
12123    children: ["(", expression, ")"],
12124    expression
12125  };
12126  return {
12127    type: "IterationStatement",
12128    subtype: kind.token,
12129    children: [kind, condition],
12130    condition
12131  };
12132});
12133function LoopClause(ctx, state2) {
12134  return (0, import_lib3.$EVENT)(ctx, state2, "LoopClause", LoopClause$0);
12135}
12136var DoWhileStatement$0 = (0, import_lib3.$TS)((0, import_lib3.$S)(Do, NoPostfixBracedOrEmptyBlock, __, WhileClause), function($skip, $loc, $0, $1, $2, $3, $4) {
12137  var block = $2;
12138  var clause = $4;
12139  return {
12140    ...clause,
12141    type: "IterationStatement",
12142    subtype: "do-while",
12143    children: $0,
12144    block
12145  };
12146});
12147function DoWhileStatement(ctx, state2) {
12148  return (0, import_lib3.$EVENT)(ctx, state2, "DoWhileStatement", DoWhileStatement$0);
12149}
12150var DoStatement$0 = (0, import_lib3.$TS)((0, import_lib3.$S)(Do, NoPostfixBracedOrEmptyBlock), function($skip, $loc, $0, $1, $2) {
12151  var block = $2;
12152  block = insertTrimmingSpace(block, "");
12153  return {
12154    type: "DoStatement",
12155    children: [block],
12156    block
12157  };
12158});
12159function DoStatement(ctx, state2) {
12160  return (0, import_lib3.$EVENT)(ctx, state2, "DoStatement", DoStatement$0);
12161}
12162var ComptimeStatement$0 = (0, import_lib3.$TS)((0, import_lib3.$S)(Comptime, NoPostfixBracedOrEmptyBlock, (0, import_lib3.$E)(ElseClause)), function($skip, $loc, $0, $1, $2, $3) {
12163  var t = $2;
12164  var e = $3;
12165  let block = !initialConfig.comptime && e?.block || t;
12166  block = insertTrimmingSpace(block, "");
12167  return {
12168    type: "ComptimeStatement",
12169    children: [block],
12170    block,
12171    // In case we want access to the original blocks:
12172    then: t,
12173    else: e
12174  };
12175});
12176function ComptimeStatement(ctx, state2) {
12177  return (0, import_lib3.$EVENT)(ctx, state2, "ComptimeStatement", ComptimeStatement$0);
12178}
12179var WhileStatement$0 = (0, import_lib3.$TS)((0, import_lib3.$S)(WhileClause, BlockOrEmptyStatement), function($skip, $loc, $0, $1, $2) {
12180  var clause = $1;
12181  var block = $2;
12182  return {
12183    ...clause,
12184    children: [...clause.children, block],
12185    block
12186  };
12187});
12188function WhileStatement(ctx, state2) {
12189  return (0, import_lib3.$EVENT)(ctx, state2, "WhileStatement", WhileStatement$0);
12190}
12191var WhileClause$0 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$C)(While, Until), (0, import_lib3.$E)(_), Condition), function($skip, $loc, $0, $1, $2, $3) {
12192  var kind = $1;
12193  var ws = $2;
12194  var condition = $3;
12195  if (kind.negated) {
12196    kind = { ...kind, token: "while" };
12197    condition = negateCondition(condition);
12198  }
12199  return {
12200    type: "IterationStatement",
12201    subtype: kind.token,
12202    children: [kind, ws, condition],
12203    condition,
12204    negated: kind.negated
12205  };
12206});
12207function WhileClause(ctx, state2) {
12208  return (0, import_lib3.$EVENT)(ctx, state2, "WhileClause", WhileClause$0);
12209}
12210var ForStatement$0 = (0, import_lib3.$TS)((0, import_lib3.$S)(ForClause, BlockOrEmptyStatement), function($skip, $loc, $0, $1, $2) {
12211  var clause = $1;
12212  var block = $2;
12213  block = blockWithPrefix(clause.blockPrefix, block);
12214  return {
12215    ...clause,
12216    children: [...clause.children, block],
12217    block
12218  };
12219});
12220function ForStatement(ctx, state2) {
12221  return (0, import_lib3.$EVENT)(ctx, state2, "ForStatement", ForStatement$0);
12222}
12223var ForClause$0 = (0, import_lib3.$TS)((0, import_lib3.$S)(For, __, ForStatementControl), function($skip, $loc, $0, $1, $2, $3) {
12224  var c = $3;
12225  const { children, declaration } = c;
12226  return {
12227    type: "ForStatement",
12228    children: [$1, ...$2, ...children],
12229    declaration,
12230    block: null,
12231    blockPrefix: c.blockPrefix,
12232    hoistDec: c.hoistDec
12233  };
12234});
12235function ForClause(ctx, state2) {
12236  return (0, import_lib3.$EVENT)(ctx, state2, "ForClause", ForClause$0);
12237}
12238var ForStatementControl$0 = (0, import_lib3.$T)((0, import_lib3.$S)((0, import_lib3.$N)(CoffeeForLoopsEnabled), ForStatementParameters), function(value) {
12239  return value[1];
12240});
12241var ForStatementControl$1 = (0, import_lib3.$TS)((0, import_lib3.$S)(CoffeeForLoopsEnabled, CoffeeForStatementParameters, (0, import_lib3.$E)(WhenCondition)), function($skip, $loc, $0, $1, $2, $3) {
12242  var condition = $3;
12243  if (condition) {
12244    const block = "continue";
12245    $2 = {
12246      ...$2,
12247      blockPrefix: [
12248        ...$2.blockPrefix,
12249        ["", {
12250          type: "IfStatement",
12251          then: block,
12252          children: ["if (!(", insertTrimmingSpace(condition, ""), ")) ", block]
12253        }, ";"]
12254      ]
12255    };
12256  }
12257  return $2;
12258});
12259var ForStatementControl$$ = [ForStatementControl$0, ForStatementControl$1];
12260function ForStatementControl(ctx, state2) {
12261  return (0, import_lib3.$EVENT_C)(ctx, state2, "ForStatementControl", ForStatementControl$$);
12262}
12263var WhenCondition$0 = (0, import_lib3.$T)((0, import_lib3.$S)(__, When, ExpressionWithObjectApplicationForbidden), function(value) {
12264  var exp = value[2];
12265  return exp;
12266});
12267function WhenCondition(ctx, state2) {
12268  return (0, import_lib3.$EVENT)(ctx, state2, "WhenCondition", WhenCondition$0);
12269}
12270var CoffeeForStatementParameters$0 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$E)((0, import_lib3.$S)(Await, __)), InsertOpenParen, CoffeeForDeclaration, (0, import_lib3.$E)(CoffeeForIndex), __, (0, import_lib3.$C)(In, Of, From), ExpressionWithObjectApplicationForbidden, (0, import_lib3.$E)((0, import_lib3.$S)((0, import_lib3.$E)(_), By, ExpressionWithObjectApplicationForbidden)), InsertCloseParen), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7, $8, $9) {
12271  var open = $2;
12272  var declaration = $3;
12273  var index = $4;
12274  var kind = $6;
12275  var exp = $7;
12276  var step = $8;
12277  var close = $9;
12278  let blockPrefix = [];
12279  exp = insertTrimmingSpace(exp, "");
12280  declaration = insertTrimmingSpace(declaration, "");
12281  if (kind.token === "from") {
12282    if (step) {
12283      throw new Error("Can't use 'by' with 'from' in CoffeeScript for loops");
12284    }
12285    kind = { ...kind, token: "of" };
12286  } else if (kind.token === "of") {
12287    if (step) {
12288      throw new Error("Can't use 'by' with 'of' in CoffeeScript for loops");
12289    }
12290    if (declaration.own) {
12291      const hasPropRef = getHelperRef("hasProp");
12292      blockPrefix.push(["", ["if (!", hasPropRef, "(", exp, ", ", declaration, ")) continue"], ";"]);
12293    }
12294    if (index) {
12295      blockPrefix.push(["", {
12296        type: "AssignmentExpression",
12297        children: [index, " = ", exp, "[", declaration, "]"],
12298        names: index.names
12299      }, ";"]);
12300    }
12301    kind.token = "in";
12302  } else if (kind.token === "in") {
12303    const counterRef = makeRef("i");
12304    const lenRef = makeRef("len");
12305    if (exp.type === "RangeExpression") {
12306      return forRange(open, declaration, exp, step?.[2], close);
12307    }
12308    const expRef = maybeRef(exp);
12309    const varRef = declaration;
12310    let increment = "++", indexAssignment, assignmentNames = [...varRef.names];
12311    if (index) {
12312      index = insertTrimmingSpace(index, "");
12313      indexAssignment = [index, "="];
12314      assignmentNames.push(...index.names);
12315    }
12316    const expRefDec = expRef !== exp ? [expRef, " = ", insertTrimmingSpace(exp, ""), ", "] : [];
12317    blockPrefix.push(["", {
12318      type: "AssignmentExpression",
12319      children: [varRef, " = ", expRef, "[", indexAssignment, counterRef, "]"],
12320      names: assignmentNames
12321    }, ";"]);
12322    declaration = {
12323      type: "Declaration",
12324      children: ["let ", ...expRefDec, counterRef, " = 0, ", lenRef, " = ", expRef, ".length"],
12325      names: []
12326    };
12327    let condition = [counterRef, " < ", lenRef, "; "];
12328    if (step) {
12329      let [stepWs, , stepExp] = step;
12330      stepWs = insertTrimmingSpace(stepWs, "");
12331      if (stepExp.type === "Literal") {
12332        increment = [" +=", ...stepWs, stepExp];
12333        if (stepExp.raw[0] === "-") {
12334          declaration = {
12335            type: "Declaration",
12336            children: ["let ", ...expRefDec, counterRef, " = ", expRef, ".length - 1"],
12337            names: []
12338          };
12339          condition = [counterRef, " >= 0; "];
12340        }
12341      } else {
12342        throw new Error("TODO: Support non-literal step in CoffeeScript for loops");
12343      }
12344      return {
12345        declaration,
12346        children: [$1, open, declaration, "; ", ...condition, counterRef, increment, close],
12347        blockPrefix
12348      };
12349    }
12350    return {
12351      declaration,
12352      children: [$1, open, declaration, "; ", ...condition, counterRef, increment, close],
12353      blockPrefix
12354    };
12355  }
12356  return {
12357    declaration,
12358    children: [$1, open, declaration, $5, kind, " ", exp, close],
12359    blockPrefix
12360  };
12361});
12362var CoffeeForStatementParameters$1 = ForRangeParameters;
12363var CoffeeForStatementParameters$$ = [CoffeeForStatementParameters$0, CoffeeForStatementParameters$1];
12364function CoffeeForStatementParameters(ctx, state2) {
12365  return (0, import_lib3.$EVENT_C)(ctx, state2, "CoffeeForStatementParameters", CoffeeForStatementParameters$$);
12366}
12367var CoffeeForIndex$0 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$E)(_), Comma, (0, import_lib3.$E)(_), BindingIdentifier), function($skip, $loc, $0, $1, $2, $3, $4) {
12368  var ws1 = $1;
12369  var ws2 = $3;
12370  var id = $4;
12371  ws2 = insertTrimmingSpace(ws1, "");
12372  return {
12373    ...id,
12374    children: [...ws1 || [], ...ws2 || [], ...id.children]
12375  };
12376});
12377function CoffeeForIndex(ctx, state2) {
12378  return (0, import_lib3.$EVENT)(ctx, state2, "CoffeeForIndex", CoffeeForIndex$0);
12379}
12380var CoffeeForDeclaration$0 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$E)((0, import_lib3.$S)(__, Own)), ForBinding), function($skip, $loc, $0, $1, $2) {
12381  var own = $1;
12382  var binding = $2;
12383  return {
12384    type: "AssignmentExpression",
12385    own: Boolean(own),
12386    children: [$2],
12387    names: $2.names
12388  };
12389});
12390function CoffeeForDeclaration(ctx, state2) {
12391  return (0, import_lib3.$EVENT)(ctx, state2, "CoffeeForDeclaration", CoffeeForDeclaration$0);
12392}
12393var ForStatementParameters$0 = (0, import_lib3.$TS)((0, import_lib3.$S)(OpenParen, __, (0, import_lib3.$C)(LexicalDeclaration, VariableStatement, (0, import_lib3.$E)(CommaExpression)), __, Semicolon, (0, import_lib3.$E)(CommaExpression), Semicolon, (0, import_lib3.$E)(CommaExpression), __, CloseParen), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7, $8, $9, $10) {
12394  var declaration = $3;
12395  return {
12396    declaration,
12397    children: $0
12398  };
12399});
12400var ForStatementParameters$1 = (0, import_lib3.$TS)((0, import_lib3.$S)(InsertOpenParen, __, (0, import_lib3.$C)(LexicalDeclaration, VariableStatement, (0, import_lib3.$E)(CommaExpression)), __, Semicolon, (0, import_lib3.$E)(CommaExpression), Semicolon, (0, import_lib3.$E)((0, import_lib3.$S)((0, import_lib3.$N)(EOS), ExpressionWithIndentedApplicationForbidden)), InsertCloseParen), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7, $8, $9) {
12401  var declaration = $3;
12402  return {
12403    declaration,
12404    children: $0
12405  };
12406});
12407var ForStatementParameters$2 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$E)((0, import_lib3.$S)(Await, __)), (0, import_lib3.$E)((0, import_lib3.$S)((0, import_lib3.$C)(Each, Own), __)), (0, import_lib3.$S)(OpenParen, __), ForInOfDeclaration, (0, import_lib3.$E)((0, import_lib3.$S)(__, Comma, __, ForInOfDeclaration)), __, (0, import_lib3.$C)(In, Of), ExpressionWithObjectApplicationForbidden, (0, import_lib3.$E)((0, import_lib3.$S)(__, By, ExpressionWithObjectApplicationForbidden)), (0, import_lib3.$S)(__, CloseParen)), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7, $8, $9, $10) {
12408  return processForInOf($0, getHelperRef);
12409});
12410var ForStatementParameters$3 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$E)((0, import_lib3.$S)(Await, __)), (0, import_lib3.$E)((0, import_lib3.$S)((0, import_lib3.$C)(Each, Own), __)), InsertOpenParen, ForInOfDeclaration, (0, import_lib3.$E)((0, import_lib3.$S)(__, Comma, __, ForInOfDeclaration)), __, (0, import_lib3.$C)(In, Of), ExpressionWithObjectApplicationForbidden, (0, import_lib3.$E)((0, import_lib3.$S)(__, By, ExpressionWithObjectApplicationForbidden)), InsertCloseParen), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7, $8, $9, $10) {
12411  return processForInOf($0, getHelperRef);
12412});
12413var ForStatementParameters$4 = ForRangeParameters;
12414var ForStatementParameters$$ = [ForStatementParameters$0, ForStatementParameters$1, ForStatementParameters$2, ForStatementParameters$3, ForStatementParameters$4];
12415function ForStatementParameters(ctx, state2) {
12416  return (0, import_lib3.$EVENT_C)(ctx, state2, "ForStatementParameters", ForStatementParameters$$);
12417}
12418var ForRangeParameters$0 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$E)((0, import_lib3.$S)(Await, __)), OpenParen, OpenBracket, RangeExpression, CloseBracket, (0, import_lib3.$E)((0, import_lib3.$S)(__, By, ExpressionWithObjectApplicationForbidden)), CloseParen), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7) {
12419  var open = $2;
12420  var exp = $4;
12421  var step = $6;
12422  var close = $7;
12423  return forRange(open, null, exp, step, close);
12424});
12425var ForRangeParameters$1 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$E)((0, import_lib3.$S)(Await, __)), InsertOpenParen, OpenBracket, RangeExpression, CloseBracket, (0, import_lib3.$E)((0, import_lib3.$S)(__, By, ExpressionWithObjectApplicationForbidden)), InsertCloseParen), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7) {
12426  var open = $2;
12427  var exp = $4;
12428  var step = $6;
12429  var close = $7;
12430  return forRange(open, null, exp, step, close);
12431});
12432var ForRangeParameters$$ = [ForRangeParameters$0, ForRangeParameters$1];
12433function ForRangeParameters(ctx, state2) {
12434  return (0, import_lib3.$EVENT_C)(ctx, state2, "ForRangeParameters", ForRangeParameters$$);
12435}
12436var ForInOfDeclaration$0 = (0, import_lib3.$TS)((0, import_lib3.$S)(Var, ForBinding), function($skip, $loc, $0, $1, $2) {
12437  var binding = $2;
12438  return {
12439    type: "ForDeclaration",
12440    children: $0,
12441    declare: $1,
12442    binding,
12443    names: binding.names
12444  };
12445});
12446var ForInOfDeclaration$1 = ForDeclaration;
12447var ForInOfDeclaration$2 = LeftHandSideExpression;
12448var ForInOfDeclaration$$ = [ForInOfDeclaration$0, ForInOfDeclaration$1, ForInOfDeclaration$2];
12449function ForInOfDeclaration(ctx, state2) {
12450  return (0, import_lib3.$EVENT_C)(ctx, state2, "ForInOfDeclaration", ForInOfDeclaration$$);
12451}
12452var ForDeclaration$0 = (0, import_lib3.$TS)((0, import_lib3.$S)(LetOrConst, ForBinding), function($skip, $loc, $0, $1, $2) {
12453  var c = $1;
12454  var binding = $2;
12455  return {
12456    type: "ForDeclaration",
12457    children: [c, binding],
12458    declare: c,
12459    binding,
12460    names: binding.names
12461  };
12462});
12463var ForDeclaration$1 = (0, import_lib3.$TS)((0, import_lib3.$S)(InsertConst, ForBinding, (0, import_lib3.$EXPECT)($R26, "ForDeclaration /(?=[\\s\\),])/")), function($skip, $loc, $0, $1, $2, $3) {
12464  var c = $1;
12465  var binding = $2;
12466  return {
12467    type: "ForDeclaration",
12468    children: [c, binding],
12469    declare: c,
12470    binding,
12471    names: binding.names
12472  };
12473});
12474var ForDeclaration$$ = [ForDeclaration$0, ForDeclaration$1];
12475function ForDeclaration(ctx, state2) {
12476  return (0, import_lib3.$EVENT_C)(ctx, state2, "ForDeclaration", ForDeclaration$$);
12477}
12478var ForBinding$0 = BindingIdentifier;
12479var ForBinding$1 = BindingPattern;
12480var ForBinding$$ = [ForBinding$0, ForBinding$1];
12481function ForBinding(ctx, state2) {
12482  return (0, import_lib3.$EVENT_C)(ctx, state2, "ForBinding", ForBinding$$);
12483}
12484var SwitchStatement$0 = (0, import_lib3.$TS)((0, import_lib3.$S)(Switch, (0, import_lib3.$C)(EmptyCondition, Condition), CaseBlock), function($skip, $loc, $0, $1, $2, $3) {
12485  var condition = $2;
12486  var caseBlock = $3;
12487  if (condition.type === "EmptyCondition") {
12488    caseBlock.clauses.forEach(({ cases }) => {
12489      if (cases) {
12490        cases.forEach((c) => {
12491          const exp = c[1];
12492          switch (exp.type) {
12493            case "Identifier":
12494            case "Literal":
12495              c.splice(1, 0, "!");
12496              break;
12497            default:
12498              c.splice(1, 1, "!(", exp, ")");
12499          }
12500        });
12501      }
12502    });
12503  }
12504  return {
12505    type: "SwitchStatement",
12506    children: $0,
12507    condition,
12508    caseBlock
12509  };
12510});
12511function SwitchStatement(ctx, state2) {
12512  return (0, import_lib3.$EVENT)(ctx, state2, "SwitchStatement", SwitchStatement$0);
12513}
12514var EmptyCondition$0 = (0, import_lib3.$TV)((0, import_lib3.$Y)(EOS), function($skip, $loc, $0, $1) {
12515  return {
12516    type: "EmptyCondition",
12517    children: [{
12518      $loc,
12519      token: " (false)"
12520    }]
12521  };
12522});
12523function EmptyCondition(ctx, state2) {
12524  return (0, import_lib3.$EVENT)(ctx, state2, "EmptyCondition", EmptyCondition$0);
12525}
12526var CaseBlock$0 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$E)((0, import_lib3.$C)(Nested, _)), OpenBrace, NestedCaseClauses, __, CloseBrace), function($skip, $loc, $0, $1, $2, $3, $4, $5) {
12527  var clauses = $3;
12528  return {
12529    type: "CaseBlock",
12530    clauses,
12531    children: $0
12532  };
12533});
12534var CaseBlock$1 = (0, import_lib3.$TS)((0, import_lib3.$S)(InsertOpenBrace, NestedCaseClauses, InsertNewline, InsertIndent, InsertCloseBrace), function($skip, $loc, $0, $1, $2, $3, $4, $5) {
12535  var clauses = $2;
12536  return {
12537    type: "CaseBlock",
12538    clauses,
12539    children: $0
12540  };
12541});
12542var CaseBlock$$ = [CaseBlock$0, CaseBlock$1];
12543function CaseBlock(ctx, state2) {
12544  return (0, import_lib3.$EVENT_C)(ctx, state2, "CaseBlock", CaseBlock$$);
12545}
12546var NestedCaseClauses$0 = (0, import_lib3.$TS)((0, import_lib3.$S)(PushIndent, (0, import_lib3.$Q)(NestedCaseClause), PopIndent), function($skip, $loc, $0, $1, $2, $3) {
12547  var clauses = $2;
12548  if (clauses.length)
12549    return clauses;
12550  return $skip;
12551});
12552function NestedCaseClauses(ctx, state2) {
12553  return (0, import_lib3.$EVENT)(ctx, state2, "NestedCaseClauses", NestedCaseClauses$0);
12554}
12555var NestedCaseClause$0 = (0, import_lib3.$TS)((0, import_lib3.$S)(Nested, CaseClause), function($skip, $loc, $0, $1, $2) {
12556  var indent = $1;
12557  var clause = $2;
12558  return {
12559    ...clause,
12560    // Bring the indent into the clause
12561    children: [indent, ...clause.children]
12562  };
12563});
12564function NestedCaseClause(ctx, state2) {
12565  return (0, import_lib3.$EVENT)(ctx, state2, "NestedCaseClause", NestedCaseClause$0);
12566}
12567var CaseClause$0 = (0, import_lib3.$TS)((0, import_lib3.$S)(PatternExpressionList, (0, import_lib3.$C)(ThenClause, BareBlock)), function($skip, $loc, $0, $1, $2) {
12568  var patterns = $1;
12569  var block = $2;
12570  return {
12571    type: "PatternClause",
12572    children: $0,
12573    patterns,
12574    block
12575  };
12576});
12577var CaseClause$1 = (0, import_lib3.$T)((0, import_lib3.$S)(Case, CaseExpressionList, IgnoreColon, (0, import_lib3.$C)(ThenClause, BareBlock)), function(value) {
12578  var cases = value[1];
12579  var block = value[3];
12580  return { "type": "CaseClause", "children": value, "cases": cases, "block": block };
12581});
12582var CaseClause$2 = (0, import_lib3.$TS)((0, import_lib3.$S)(When, CaseExpressionList, IgnoreColon, InsertOpenBrace, (0, import_lib3.$C)(ThenClause, BareBlock), InsertBreak, InsertNewline, InsertIndent, InsertCloseBrace), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7, $8, $9) {
12583  var cases = $2;
12584  var block = $5;
12585  var b = $6;
12586  return {
12587    type: "WhenClause",
12588    children: $0,
12589    cases,
12590    block,
12591    break: b
12592  };
12593});
12594var CaseClause$3 = (0, import_lib3.$TS)((0, import_lib3.$S)(Default, ImpliedColon, (0, import_lib3.$C)(ThenClause, BareBlock)), function($skip, $loc, $0, $1, $2, $3) {
12595  var block = $3;
12596  return {
12597    type: "DefaultClause",
12598    block,
12599    children: $0
12600  };
12601});
12602var CaseClause$4 = (0, import_lib3.$TS)((0, import_lib3.$S)(Else, ImpliedColon, (0, import_lib3.$C)(ThenClause, BracedBlock, EmptyBlock)), function($skip, $loc, $0, $1, $2, $3) {
12603  var block = $3;
12604  $1.token = "default";
12605  return {
12606    type: "DefaultClause",
12607    block,
12608    children: $0
12609  };
12610});
12611var CaseClause$$ = [CaseClause$0, CaseClause$1, CaseClause$2, CaseClause$3, CaseClause$4];
12612function CaseClause(ctx, state2) {
12613  return (0, import_lib3.$EVENT_C)(ctx, state2, "CaseClause", CaseClause$$);
12614}
12615var PatternExpressionList$0 = (0, import_lib3.$TS)((0, import_lib3.$S)(PatternExpression, (0, import_lib3.$Q)((0, import_lib3.$S)((0, import_lib3.$E)(_), Comma, (0, import_lib3.$E)((0, import_lib3.$C)(Nested, _)), PatternExpression))), function($skip, $loc, $0, $1, $2) {
12616  var first = $1;
12617  var rest = $2;
12618  return [first, ...rest.map(([, , , p]) => p)];
12619});
12620function PatternExpressionList(ctx, state2) {
12621  return (0, import_lib3.$EVENT)(ctx, state2, "PatternExpressionList", PatternExpressionList$0);
12622}
12623var PatternExpression$0 = BindingPattern;
12624var PatternExpression$1 = (0, import_lib3.$TS)((0, import_lib3.$S)(ForbidIndentedApplication, (0, import_lib3.$E)((0, import_lib3.$P)(SingleLineBinaryOpRHS)), RestoreIndentedApplication), function($skip, $loc, $0, $1, $2, $3) {
12625  var pattern = $2;
12626  if (!pattern)
12627    return $skip;
12628  return {
12629    type: "ConditionFragment",
12630    children: pattern
12631  };
12632});
12633var PatternExpression$$ = [PatternExpression$0, PatternExpression$1];
12634function PatternExpression(ctx, state2) {
12635  return (0, import_lib3.$EVENT_C)(ctx, state2, "PatternExpression", PatternExpression$$);
12636}
12637var CaseExpressionList$0 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$S)((0, import_lib3.$E)(_), CaseExpression, InsertColon), (0, import_lib3.$Q)((0, import_lib3.$S)(__, Comma, CaseExpression, InsertColon))), function($skip, $loc, $0, $1, $2) {
12638  var first = $1;
12639  var rest = $2;
12640  const result = rest.map(([ws, _comma, exp, col]) => {
12641    exp = insertTrimmingSpace(exp, "");
12642    if (ws.length)
12643      return [insertTrimmingSpace("case ", ws), exp, col];
12644    return ["case ", exp, col];
12645  });
12646  result.unshift(first);
12647  return result;
12648});
12649function CaseExpressionList(ctx, state2) {
12650  return (0, import_lib3.$EVENT)(ctx, state2, "CaseExpressionList", CaseExpressionList$0);
12651}
12652var CaseExpression$0 = (0, import_lib3.$TS)((0, import_lib3.$S)(PropertyName, (0, import_lib3.$Y)((0, import_lib3.$S)((0, import_lib3.$E)(_), Colon))), function($skip, $loc, $0, $1, $2) {
12653  var value = $1;
12654  if (value.type === "ComputedPropertyName") {
12655    if (value.implicit)
12656      return value.expression;
12657    return { ...value, type: "ArrayExpression" };
12658  }
12659  return value;
12660});
12661var CaseExpression$1 = ExpressionWithObjectApplicationForbidden;
12662var CaseExpression$$ = [CaseExpression$0, CaseExpression$1];
12663function CaseExpression(ctx, state2) {
12664  return (0, import_lib3.$EVENT_C)(ctx, state2, "CaseExpression", CaseExpression$$);
12665}
12666var ImpliedColon$0 = (0, import_lib3.$S)((0, import_lib3.$E)(_), Colon);
12667var ImpliedColon$1 = InsertColon;
12668var ImpliedColon$$ = [ImpliedColon$0, ImpliedColon$1];
12669function ImpliedColon(ctx, state2) {
12670  return (0, import_lib3.$EVENT_C)(ctx, state2, "ImpliedColon", ImpliedColon$$);
12671}
12672var IgnoreColon$0 = (0, import_lib3.$TV)((0, import_lib3.$E)((0, import_lib3.$S)((0, import_lib3.$E)(_), Colon)), function($skip, $loc, $0, $1) {
12673  if ($1)
12674    return $1[0];
12675});
12676function IgnoreColon(ctx, state2) {
12677  return (0, import_lib3.$EVENT)(ctx, state2, "IgnoreColon", IgnoreColon$0);
12678}
12679var TryStatement$0 = (0, import_lib3.$TS)((0, import_lib3.$S)(Try, (0, import_lib3.$N)((0, import_lib3.$EXPECT)($L16, 'TryStatement ":"')), NoPostfixBracedOrEmptyBlock, (0, import_lib3.$E)(CatchClause), (0, import_lib3.$E)(ElseClause), (0, import_lib3.$E)(FinallyClause)), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6) {
12680  return processTryBlock($0);
12681});
12682function TryStatement(ctx, state2) {
12683  return (0, import_lib3.$EVENT)(ctx, state2, "TryStatement", TryStatement$0);
12684}
12685var CatchClause$0 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$C)(Nested, _), Catch, (0, import_lib3.$E)(CatchBind), (0, import_lib3.$C)(BracedThenClause, BracedOrEmptyBlock)), function($skip, $loc, $0, $1, $2, $3, $4) {
12686  var block = $4;
12687  return {
12688    type: "CatchClause",
12689    children: $0,
12690    block
12691  };
12692});
12693function CatchClause(ctx, state2) {
12694  return (0, import_lib3.$EVENT)(ctx, state2, "CatchClause", CatchClause$0);
12695}
12696var CatchBind$0 = (0, import_lib3.$S)((0, import_lib3.$E)(_), OpenParen, __, CatchParameter, __, CloseParen);
12697var CatchBind$1 = (0, import_lib3.$S)(_, InsertOpenParen, (0, import_lib3.$N)(EOS), CatchParameter, InsertCloseParen);
12698var CatchBind$$ = [CatchBind$0, CatchBind$1];
12699function CatchBind(ctx, state2) {
12700  return (0, import_lib3.$EVENT_C)(ctx, state2, "CatchBind", CatchBind$$);
12701}
12702var FinallyClause$0 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$C)(Nested, _), Finally, (0, import_lib3.$C)(BracedThenClause, BracedOrEmptyBlock)), function($skip, $loc, $0, $1, $2, $3) {
12703  var block = $3;
12704  return {
12705    type: "FinallyClause",
12706    children: $0,
12707    block
12708  };
12709});
12710function FinallyClause(ctx, state2) {
12711  return (0, import_lib3.$EVENT)(ctx, state2, "FinallyClause", FinallyClause$0);
12712}
12713var CatchParameter$0 = (0, import_lib3.$S)(BindingIdentifier, (0, import_lib3.$E)(TypeSuffix));
12714var CatchParameter$1 = (0, import_lib3.$S)(BindingPattern, (0, import_lib3.$E)(TypeSuffix));
12715var CatchParameter$$ = [CatchParameter$0, CatchParameter$1];
12716function CatchParameter(ctx, state2) {
12717  return (0, import_lib3.$EVENT_C)(ctx, state2, "CatchParameter", CatchParameter$$);
12718}
12719var Condition$0 = (0, import_lib3.$TS)((0, import_lib3.$S)(OpenParen, (0, import_lib3.$E)(_), DeclarationCondition, CloseParen), function($skip, $loc, $0, $1, $2, $3, $4) {
12720  var open = $1;
12721  var ws = $2;
12722  var expression = $3;
12723  var close = $4;
12724  return {
12725    type: "ParenthesizedExpression",
12726    children: [open, ws, expression, close],
12727    expression
12728  };
12729});
12730var Condition$1 = (0, import_lib3.$T)((0, import_lib3.$S)(ParenthesizedExpression, (0, import_lib3.$N)((0, import_lib3.$S)((0, import_lib3.$E)(_), (0, import_lib3.$C)(BinaryOp, AssignmentOp, Dot, QuestionMark))), (0, import_lib3.$N)((0, import_lib3.$S)(_, OperatorAssignmentOp))), function(value) {
12731  return value[0];
12732});
12733var Condition$2 = (0, import_lib3.$TS)((0, import_lib3.$S)(InsertOpenParen, DeclarationCondition, InsertCloseParen), function($skip, $loc, $0, $1, $2, $3) {
12734  var open = $1;
12735  var expression = $2;
12736  var close = $3;
12737  return {
12738    type: "ParenthesizedExpression",
12739    children: [open, expression, close],
12740    expression
12741  };
12742});
12743var Condition$3 = (0, import_lib3.$TS)((0, import_lib3.$S)(InsertOpenParen, ExpressionWithObjectApplicationForbidden, InsertCloseParen), function($skip, $loc, $0, $1, $2, $3) {
12744  var open = $1;
12745  var expression = $2;
12746  var close = $3;
12747  if (expression.type === "ParenthesizedExpression")
12748    return expression;
12749  expression = insertTrimmingSpace(expression, "");
12750  return {
12751    type: "ParenthesizedExpression",
12752    children: [open, expression, close],
12753    expression
12754  };
12755});
12756var Condition$$ = [Condition$0, Condition$1, Condition$2, Condition$3];
12757function Condition(ctx, state2) {
12758  return (0, import_lib3.$EVENT_C)(ctx, state2, "Condition", Condition$$);
12759}
12760var DeclarationCondition$0 = (0, import_lib3.$TS)((0, import_lib3.$S)(ForbidBracedApplication, ForbidIndentedApplication, ForbidNewlineBinaryOp, (0, import_lib3.$E)(LexicalDeclaration), RestoreNewlineBinaryOp, RestoreBracedApplication, RestoreIndentedApplication), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7) {
12761  var declaration = $4;
12762  if (!declaration)
12763    return $skip;
12764  return {
12765    type: "DeclarationCondition",
12766    declaration,
12767    children: [declaration]
12768  };
12769});
12770function DeclarationCondition(ctx, state2) {
12771  return (0, import_lib3.$EVENT)(ctx, state2, "DeclarationCondition", DeclarationCondition$0);
12772}
12773var ExpressionWithIndentedApplicationForbidden$0 = (0, import_lib3.$TS)((0, import_lib3.$S)(ForbidIndentedApplication, ForbidNewlineBinaryOp, (0, import_lib3.$E)(ExtendedExpression), RestoreNewlineBinaryOp, RestoreIndentedApplication), function($skip, $loc, $0, $1, $2, $3, $4, $5) {
12774  var exp = $3;
12775  if (exp)
12776    return exp;
12777  return $skip;
12778});
12779function ExpressionWithIndentedApplicationForbidden(ctx, state2) {
12780  return (0, import_lib3.$EVENT)(ctx, state2, "ExpressionWithIndentedApplicationForbidden", ExpressionWithIndentedApplicationForbidden$0);
12781}
12782var SingleLineExpressionWithIndentedApplicationForbidden$0 = (0, import_lib3.$TS)((0, import_lib3.$S)(ForbidIndentedApplication, ForbidNewlineBinaryOp, (0, import_lib3.$E)(SingleLineAssignmentExpression), RestoreNewlineBinaryOp, RestoreIndentedApplication), function($skip, $loc, $0, $1, $2, $3, $4, $5) {
12783  var exp = $3;
12784  if (exp)
12785    return exp;
12786  return $skip;
12787});
12788function SingleLineExpressionWithIndentedApplicationForbidden(ctx, state2) {
12789  return (0, import_lib3.$EVENT)(ctx, state2, "SingleLineExpressionWithIndentedApplicationForbidden", SingleLineExpressionWithIndentedApplicationForbidden$0);
12790}
12791var ExpressionWithObjectApplicationForbidden$0 = (0, import_lib3.$TS)((0, import_lib3.$S)(ForbidBracedApplication, ForbidIndentedApplication, ForbidNewlineBinaryOp, (0, import_lib3.$E)(ExtendedExpression), RestoreNewlineBinaryOp, RestoreBracedApplication, RestoreIndentedApplication), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7) {
12792  var exp = $4;
12793  if (exp)
12794    return exp;
12795  return $skip;
12796});
12797function ExpressionWithObjectApplicationForbidden(ctx, state2) {
12798  return (0, import_lib3.$EVENT)(ctx, state2, "ExpressionWithObjectApplicationForbidden", ExpressionWithObjectApplicationForbidden$0);
12799}
12800var LeftHandSideExpressionWithObjectApplicationForbidden$0 = (0, import_lib3.$TS)((0, import_lib3.$S)(ForbidBracedApplication, ForbidIndentedApplication, ForbidNewlineBinaryOp, (0, import_lib3.$E)(LeftHandSideExpression), RestoreNewlineBinaryOp, RestoreBracedApplication, RestoreIndentedApplication), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7) {
12801  var exp = $4;
12802  if (exp)
12803    return exp;
12804  return $skip;
12805});
12806function LeftHandSideExpressionWithObjectApplicationForbidden(ctx, state2) {
12807  return (0, import_lib3.$EVENT)(ctx, state2, "LeftHandSideExpressionWithObjectApplicationForbidden", LeftHandSideExpressionWithObjectApplicationForbidden$0);
12808}
12809var ForbidClassImplicitCall$0 = (0, import_lib3.$TV)((0, import_lib3.$EXPECT)($L0, 'ForbidClassImplicitCall ""'), function($skip, $loc, $0, $1) {
12810  state.forbidClassImplicitCall.push(true);
12811});
12812function ForbidClassImplicitCall(ctx, state2) {
12813  return (0, import_lib3.$EVENT)(ctx, state2, "ForbidClassImplicitCall", ForbidClassImplicitCall$0);
12814}
12815var AllowClassImplicitCall$0 = (0, import_lib3.$TV)((0, import_lib3.$EXPECT)($L0, 'AllowClassImplicitCall ""'), function($skip, $loc, $0, $1) {
12816  state.forbidClassImplicitCall.push(false);
12817});
12818function AllowClassImplicitCall(ctx, state2) {
12819  return (0, import_lib3.$EVENT)(ctx, state2, "AllowClassImplicitCall", AllowClassImplicitCall$0);
12820}
12821var RestoreClassImplicitCall$0 = (0, import_lib3.$TV)((0, import_lib3.$EXPECT)($L0, 'RestoreClassImplicitCall ""'), function($skip, $loc, $0, $1) {
12822  state.forbidClassImplicitCall.pop();
12823});
12824function RestoreClassImplicitCall(ctx, state2) {
12825  return (0, import_lib3.$EVENT)(ctx, state2, "RestoreClassImplicitCall", RestoreClassImplicitCall$0);
12826}
12827var ClassImplicitCallForbidden$0 = (0, import_lib3.$TV)((0, import_lib3.$EXPECT)($L0, 'ClassImplicitCallForbidden ""'), function($skip, $loc, $0, $1) {
12828  if (!state.classImplicitCallForbidden)
12829    return $skip;
12830  return;
12831});
12832function ClassImplicitCallForbidden(ctx, state2) {
12833  return (0, import_lib3.$EVENT)(ctx, state2, "ClassImplicitCallForbidden", ClassImplicitCallForbidden$0);
12834}
12835var ForbidBracedApplication$0 = (0, import_lib3.$TV)((0, import_lib3.$EXPECT)($L0, 'ForbidBracedApplication ""'), function($skip, $loc, $0, $1) {
12836  state.forbidBracedApplication.push(true);
12837});
12838function ForbidBracedApplication(ctx, state2) {
12839  return (0, import_lib3.$EVENT)(ctx, state2, "ForbidBracedApplication", ForbidBracedApplication$0);
12840}
12841var AllowBracedApplication$0 = (0, import_lib3.$TV)((0, import_lib3.$EXPECT)($L0, 'AllowBracedApplication ""'), function($skip, $loc, $0, $1) {
12842  state.forbidBracedApplication.push(false);
12843});
12844function AllowBracedApplication(ctx, state2) {
12845  return (0, import_lib3.$EVENT)(ctx, state2, "AllowBracedApplication", AllowBracedApplication$0);
12846}
12847var RestoreBracedApplication$0 = (0, import_lib3.$TV)((0, import_lib3.$EXPECT)($L0, 'RestoreBracedApplication ""'), function($skip, $loc, $0, $1) {
12848  state.forbidBracedApplication.pop();
12849});
12850function RestoreBracedApplication(ctx, state2) {
12851  return (0, import_lib3.$EVENT)(ctx, state2, "RestoreBracedApplication", RestoreBracedApplication$0);
12852}
12853var BracedApplicationAllowed$0 = (0, import_lib3.$TV)((0, import_lib3.$EXPECT)($L0, 'BracedApplicationAllowed ""'), function($skip, $loc, $0, $1) {
12854  if (config.verbose) {
12855    console.log("forbidBracedApplication:", state.forbidBracedApplication);
12856  }
12857  if (state.bracedApplicationForbidden)
12858    return $skip;
12859  return;
12860});
12861function BracedApplicationAllowed(ctx, state2) {
12862  return (0, import_lib3.$EVENT)(ctx, state2, "BracedApplicationAllowed", BracedApplicationAllowed$0);
12863}
12864var ForbidIndentedApplication$0 = (0, import_lib3.$TV)((0, import_lib3.$EXPECT)($L0, 'ForbidIndentedApplication ""'), function($skip, $loc, $0, $1) {
12865  state.forbidIndentedApplication.push(true);
12866});
12867function ForbidIndentedApplication(ctx, state2) {
12868  return (0, import_lib3.$EVENT)(ctx, state2, "ForbidIndentedApplication", ForbidIndentedApplication$0);
12869}
12870var AllowIndentedApplication$0 = (0, import_lib3.$TV)((0, import_lib3.$EXPECT)($L0, 'AllowIndentedApplication ""'), function($skip, $loc, $0, $1) {
12871  state.forbidIndentedApplication.push(false);
12872});
12873function AllowIndentedApplication(ctx, state2) {
12874  return (0, import_lib3.$EVENT)(ctx, state2, "AllowIndentedApplication", AllowIndentedApplication$0);
12875}
12876var RestoreIndentedApplication$0 = (0, import_lib3.$TV)((0, import_lib3.$EXPECT)($L0, 'RestoreIndentedApplication ""'), function($skip, $loc, $0, $1) {
12877  state.forbidIndentedApplication.pop();
12878});
12879function RestoreIndentedApplication(ctx, state2) {
12880  return (0, import_lib3.$EVENT)(ctx, state2, "RestoreIndentedApplication", RestoreIndentedApplication$0);
12881}
12882var IndentedApplicationAllowed$0 = (0, import_lib3.$TV)((0, import_lib3.$EXPECT)($L0, 'IndentedApplicationAllowed ""'), function($skip, $loc, $0, $1) {
12883  if (config.verbose) {
12884    console.log("forbidIndentedApplication:", state.forbidIndentedApplication);
12885  }
12886  if (state.indentedApplicationForbidden)
12887    return $skip;
12888  return;
12889});
12890function IndentedApplicationAllowed(ctx, state2) {
12891  return (0, import_lib3.$EVENT)(ctx, state2, "IndentedApplicationAllowed", IndentedApplicationAllowed$0);
12892}
12893var ForbidTrailingMemberProperty$0 = (0, import_lib3.$TV)((0, import_lib3.$EXPECT)($L0, 'ForbidTrailingMemberProperty ""'), function($skip, $loc, $0, $1) {
12894  state.forbidTrailingMemberProperty.push(true);
12895});
12896function ForbidTrailingMemberProperty(ctx, state2) {
12897  return (0, import_lib3.$EVENT)(ctx, state2, "ForbidTrailingMemberProperty", ForbidTrailingMemberProperty$0);
12898}
12899var AllowTrailingMemberProperty$0 = (0, import_lib3.$TV)((0, import_lib3.$EXPECT)($L0, 'AllowTrailingMemberProperty ""'), function($skip, $loc, $0, $1) {
12900  state.forbidTrailingMemberProperty.push(false);
12901});
12902function AllowTrailingMemberProperty(ctx, state2) {
12903  return (0, import_lib3.$EVENT)(ctx, state2, "AllowTrailingMemberProperty", AllowTrailingMemberProperty$0);
12904}
12905var RestoreTrailingMemberProperty$0 = (0, import_lib3.$TV)((0, import_lib3.$EXPECT)($L0, 'RestoreTrailingMemberProperty ""'), function($skip, $loc, $0, $1) {
12906  state.forbidTrailingMemberProperty.pop();
12907});
12908function RestoreTrailingMemberProperty(ctx, state2) {
12909  return (0, import_lib3.$EVENT)(ctx, state2, "RestoreTrailingMemberProperty", RestoreTrailingMemberProperty$0);
12910}
12911var TrailingMemberPropertyAllowed$0 = (0, import_lib3.$TV)((0, import_lib3.$EXPECT)($L0, 'TrailingMemberPropertyAllowed ""'), function($skip, $loc, $0, $1) {
12912  if (config.verbose) {
12913    console.log("forbidTrailingMemberProperty:", state.forbidTrailingMemberProperty);
12914  }
12915  if (state.trailingMemberPropertyForbidden)
12916    return $skip;
12917});
12918function TrailingMemberPropertyAllowed(ctx, state2) {
12919  return (0, import_lib3.$EVENT)(ctx, state2, "TrailingMemberPropertyAllowed", TrailingMemberPropertyAllowed$0);
12920}
12921var AllowNewlineBinaryOp$0 = (0, import_lib3.$TV)((0, import_lib3.$EXPECT)($L0, 'AllowNewlineBinaryOp ""'), function($skip, $loc, $0, $1) {
12922  state.forbidNewlineBinaryOp.push(false);
12923});
12924function AllowNewlineBinaryOp(ctx, state2) {
12925  return (0, import_lib3.$EVENT)(ctx, state2, "AllowNewlineBinaryOp", AllowNewlineBinaryOp$0);
12926}
12927var ForbidNewlineBinaryOp$0 = (0, import_lib3.$TV)((0, import_lib3.$EXPECT)($L0, 'ForbidNewlineBinaryOp ""'), function($skip, $loc, $0, $1) {
12928  state.forbidNewlineBinaryOp.push(true);
12929});
12930function ForbidNewlineBinaryOp(ctx, state2) {
12931  return (0, import_lib3.$EVENT)(ctx, state2, "ForbidNewlineBinaryOp", ForbidNewlineBinaryOp$0);
12932}
12933var RestoreNewlineBinaryOp$0 = (0, import_lib3.$TV)((0, import_lib3.$EXPECT)($L0, 'RestoreNewlineBinaryOp ""'), function($skip, $loc, $0, $1) {
12934  state.forbidNewlineBinaryOp.pop();
12935});
12936function RestoreNewlineBinaryOp(ctx, state2) {
12937  return (0, import_lib3.$EVENT)(ctx, state2, "RestoreNewlineBinaryOp", RestoreNewlineBinaryOp$0);
12938}
12939var NewlineBinaryOpAllowed$0 = (0, import_lib3.$TV)((0, import_lib3.$EXPECT)($L0, 'NewlineBinaryOpAllowed ""'), function($skip, $loc, $0, $1) {
12940  if (config.verbose) {
12941    console.log("forbidNewlineBinaryOp:", state.forbidNewlineBinaryOp);
12942  }
12943  if (state.newlineBinaryOpForbidden)
12944    return $skip;
12945});
12946function NewlineBinaryOpAllowed(ctx, state2) {
12947  return (0, import_lib3.$EVENT)(ctx, state2, "NewlineBinaryOpAllowed", NewlineBinaryOpAllowed$0);
12948}
12949var AllowAll$0 = (0, import_lib3.$S)(AllowTrailingMemberProperty, AllowBracedApplication, AllowIndentedApplication, AllowClassImplicitCall, AllowNewlineBinaryOp);
12950function AllowAll(ctx, state2) {
12951  return (0, import_lib3.$EVENT)(ctx, state2, "AllowAll", AllowAll$0);
12952}
12953var RestoreAll$0 = (0, import_lib3.$S)(RestoreTrailingMemberProperty, RestoreBracedApplication, RestoreIndentedApplication, RestoreClassImplicitCall, RestoreNewlineBinaryOp);
12954function RestoreAll(ctx, state2) {
12955  return (0, import_lib3.$EVENT)(ctx, state2, "RestoreAll", RestoreAll$0);
12956}
12957var CommaExpressionStatement$0 = IterationExpression;
12958var CommaExpressionStatement$1 = (0, import_lib3.$TS)((0, import_lib3.$S)(CommaExpression), function($skip, $loc, $0, $1) {
12959  return makeExpressionStatement($1);
12960});
12961var CommaExpressionStatement$$ = [CommaExpressionStatement$0, CommaExpressionStatement$1];
12962function CommaExpressionStatement(ctx, state2) {
12963  return (0, import_lib3.$EVENT_C)(ctx, state2, "CommaExpressionStatement", CommaExpressionStatement$$);
12964}
12965var ExpressionStatement$0 = IterationExpression;
12966var ExpressionStatement$1 = (0, import_lib3.$TS)((0, import_lib3.$S)(AssignmentExpression), function($skip, $loc, $0, $1) {
12967  return makeExpressionStatement($1);
12968});
12969var ExpressionStatement$$ = [ExpressionStatement$0, ExpressionStatement$1];
12970function ExpressionStatement(ctx, state2) {
12971  return (0, import_lib3.$EVENT_C)(ctx, state2, "ExpressionStatement", ExpressionStatement$$);
12972}
12973var KeywordStatement$0 = (0, import_lib3.$TS)((0, import_lib3.$S)(Break, (0, import_lib3.$E)((0, import_lib3.$S)(_, (0, import_lib3.$E)(Colon), Identifier))), function($skip, $loc, $0, $1, $2) {
12974  return {
12975    type: "BreakStatement",
12976    children: $2 ? [$1, $2[0], $2[2]] : [$1]
12977    // omit colon
12978  };
12979});
12980var KeywordStatement$1 = (0, import_lib3.$TS)((0, import_lib3.$S)(Continue, (0, import_lib3.$E)((0, import_lib3.$S)(_, (0, import_lib3.$E)(Colon), Identifier))), function($skip, $loc, $0, $1, $2) {
12981  return {
12982    type: "ContinueStatement",
12983    children: $2 ? [$1, $2[0], $2[2]] : [$1]
12984    // omit colon
12985  };
12986});
12987var KeywordStatement$2 = DebuggerStatement;
12988var KeywordStatement$3 = (0, import_lib3.$T)((0, import_lib3.$S)(Return, (0, import_lib3.$N)((0, import_lib3.$C)((0, import_lib3.$EXPECT)($L16, 'KeywordStatement ":"'), (0, import_lib3.$EXPECT)($L7, 'KeywordStatement "."'), AfterReturnShorthand)), (0, import_lib3.$E)(MaybeParenNestedExtendedExpression)), function(value) {
12989  var expression = value[2];
12990  return { "type": "ReturnStatement", "expression": expression, "children": value };
12991});
12992var KeywordStatement$4 = ThrowStatement;
12993var KeywordStatement$$ = [KeywordStatement$0, KeywordStatement$1, KeywordStatement$2, KeywordStatement$3, KeywordStatement$4];
12994function KeywordStatement(ctx, state2) {
12995  return (0, import_lib3.$EVENT_C)(ctx, state2, "KeywordStatement", KeywordStatement$$);
12996}
12997var DebuggerStatement$0 = (0, import_lib3.$T)((0, import_lib3.$S)(Debugger), function(value) {
12998  return { "type": "DebuggerStatement", "children": value };
12999});
13000function DebuggerStatement(ctx, state2) {
13001  return (0, import_lib3.$EVENT)(ctx, state2, "DebuggerStatement", DebuggerStatement$0);
13002}
13003var ThrowStatement$0 = (0, import_lib3.$T)((0, import_lib3.$S)(Throw, MaybeParenNestedExtendedExpression), function(value) {
13004  return { "type": "ThrowStatement", "children": value };
13005});
13006function ThrowStatement(ctx, state2) {
13007  return (0, import_lib3.$EVENT)(ctx, state2, "ThrowStatement", ThrowStatement$0);
13008}
13009var Break$0 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$EXPECT)($L112, 'Break "break"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
13010  return { $loc, token: $1 };
13011});
13012function Break(ctx, state2) {
13013  return (0, import_lib3.$EVENT)(ctx, state2, "Break", Break$0);
13014}
13015var Continue$0 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$EXPECT)($L113, 'Continue "continue"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
13016  return { $loc, token: $1 };
13017});
13018function Continue(ctx, state2) {
13019  return (0, import_lib3.$EVENT)(ctx, state2, "Continue", Continue$0);
13020}
13021var Debugger$0 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$EXPECT)($L114, 'Debugger "debugger"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
13022  return { $loc, token: $1 };
13023});
13024function Debugger(ctx, state2) {
13025  return (0, import_lib3.$EVENT)(ctx, state2, "Debugger", Debugger$0);
13026}
13027var MaybeNestedNonPipelineExtendedExpression$0 = (0, import_lib3.$TS)((0, import_lib3.$S)(PushIndent, (0, import_lib3.$E)((0, import_lib3.$S)(Nested, NonPipelineExtendedExpression)), PopIndent), function($skip, $loc, $0, $1, $2, $3) {
13028  if ($3)
13029    return $3;
13030  return $skip;
13031});
13032var MaybeNestedNonPipelineExtendedExpression$1 = NonPipelineExtendedExpression;
13033var MaybeNestedNonPipelineExtendedExpression$$ = [MaybeNestedNonPipelineExtendedExpression$0, MaybeNestedNonPipelineExtendedExpression$1];
13034function MaybeNestedNonPipelineExtendedExpression(ctx, state2) {
13035  return (0, import_lib3.$EVENT_C)(ctx, state2, "MaybeNestedNonPipelineExtendedExpression", MaybeNestedNonPipelineExtendedExpression$$);
13036}
13037var MaybeNestedPostfixedExpression$0 = (0, import_lib3.$TS)((0, import_lib3.$S)(PushIndent, (0, import_lib3.$E)((0, import_lib3.$S)(Nested, PostfixedExpression)), PopIndent), function($skip, $loc, $0, $1, $2, $3) {
13038  if ($3)
13039    return $3;
13040  return $skip;
13041});
13042var MaybeNestedPostfixedExpression$1 = PostfixedExpression;
13043var MaybeNestedPostfixedExpression$$ = [MaybeNestedPostfixedExpression$0, MaybeNestedPostfixedExpression$1];
13044function MaybeNestedPostfixedExpression(ctx, state2) {
13045  return (0, import_lib3.$EVENT_C)(ctx, state2, "MaybeNestedPostfixedExpression", MaybeNestedPostfixedExpression$$);
13046}
13047var MaybeNestedExtendedExpression$0 = (0, import_lib3.$TS)((0, import_lib3.$S)(PushIndent, (0, import_lib3.$E)((0, import_lib3.$S)(Nested, ExtendedExpression)), PopIndent), function($skip, $loc, $0, $1, $2, $3) {
13048  if ($3)
13049    return $3;
13050  return $skip;
13051});
13052var MaybeNestedExtendedExpression$1 = ExtendedExpression;
13053var MaybeNestedExtendedExpression$$ = [MaybeNestedExtendedExpression$0, MaybeNestedExtendedExpression$1];
13054function MaybeNestedExtendedExpression(ctx, state2) {
13055  return (0, import_lib3.$EVENT_C)(ctx, state2, "MaybeNestedExtendedExpression", MaybeNestedExtendedExpression$$);
13056}
13057var MaybeParenNestedExtendedExpression$0 = (0, import_lib3.$T)((0, import_lib3.$S)((0, import_lib3.$N)(EOS), ExtendedExpression), function(value) {
13058  return value[1];
13059});
13060var MaybeParenNestedExtendedExpression$1 = (0, import_lib3.$T)((0, import_lib3.$S)((0, import_lib3.$Y)(EOS), ObjectLiteral), function(value) {
13061  return value[1];
13062});
13063var MaybeParenNestedExtendedExpression$2 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$Y)(EOS), InsertSpace, InsertOpenParen, PushIndent, (0, import_lib3.$S)(Nested, ExtendedExpression), PopIndent, InsertNewline, InsertIndent, InsertCloseParen), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7, $8, $9) {
13064  var exp = $5;
13065  if (!exp)
13066    return $skip;
13067  return $0.slice(1);
13068});
13069var MaybeParenNestedExtendedExpression$$ = [MaybeParenNestedExtendedExpression$0, MaybeParenNestedExtendedExpression$1, MaybeParenNestedExtendedExpression$2];
13070function MaybeParenNestedExtendedExpression(ctx, state2) {
13071  return (0, import_lib3.$EVENT_C)(ctx, state2, "MaybeParenNestedExtendedExpression", MaybeParenNestedExtendedExpression$$);
13072}
13073var ImportDeclaration$0 = (0, import_lib3.$TS)((0, import_lib3.$S)(Import, _, Identifier, (0, import_lib3.$E)(_), Equals, __, (0, import_lib3.$EXPECT)($L115, 'ImportDeclaration "require"'), NonIdContinue, Arguments), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7, $8, $9) {
13074  const imp = [
13075    { ...$1, ts: true },
13076    { ...$1, token: "const", js: true }
13077  ];
13078  return {
13079    type: "ImportDeclaration",
13080    children: [imp, $0.slice(1)]
13081  };
13082});
13083var ImportDeclaration$1 = (0, import_lib3.$T)((0, import_lib3.$S)(Import, __, TypeKeyword, __, ImportClause, __, FromClause), function(value) {
13084  var imports = value[4];
13085  var from = value[6];
13086  return { "type": "ImportDeclaration", "ts": true, "children": value, "imports": imports, "from": from };
13087});
13088var ImportDeclaration$2 = (0, import_lib3.$T)((0, import_lib3.$S)(Import, __, ImportClause, __, FromClause), function(value) {
13089  var imports = value[2];
13090  var from = value[4];
13091  return { "type": "ImportDeclaration", "children": value, "imports": imports, "from": from };
13092});
13093var ImportDeclaration$3 = (0, import_lib3.$T)((0, import_lib3.$S)(Import, __, ModuleSpecifier), function(value) {
13094  var module2 = value[2];
13095  return { "type": "ImportDeclaration", "children": value, "module": module2 };
13096});
13097var ImportDeclaration$4 = (0, import_lib3.$TS)((0, import_lib3.$S)(ImpliedImport, (0, import_lib3.$E)((0, import_lib3.$S)(TypeKeyword, __)), ImportClause, __, FromClause), function($skip, $loc, $0, $1, $2, $3, $4, $5) {
13098  var i = $1;
13099  var t = $2;
13100  var imports = $3;
13101  var w = $4;
13102  var from = $5;
13103  i.$loc = {
13104    pos: from[0].$loc.pos - 1,
13105    length: from[0].$loc.length + 1
13106  };
13107  const children = [i, t, imports, w, from];
13108  return { type: "ImportDeclaration", ts: !!t, children, imports, from };
13109});
13110var ImportDeclaration$$ = [ImportDeclaration$0, ImportDeclaration$1, ImportDeclaration$2, ImportDeclaration$3, ImportDeclaration$4];
13111function ImportDeclaration(ctx, state2) {
13112  return (0, import_lib3.$EVENT_C)(ctx, state2, "ImportDeclaration", ImportDeclaration$$);
13113}
13114var ImpliedImport$0 = (0, import_lib3.$TV)((0, import_lib3.$EXPECT)($L0, 'ImpliedImport ""'), function($skip, $loc, $0, $1) {
13115  return { $loc, token: "import " };
13116});
13117function ImpliedImport(ctx, state2) {
13118  return (0, import_lib3.$EVENT)(ctx, state2, "ImpliedImport", ImpliedImport$0);
13119}
13120var ImportClause$0 = (0, import_lib3.$TS)((0, import_lib3.$S)(ImportedBinding, (0, import_lib3.$E)((0, import_lib3.$S)(__, Comma, __, (0, import_lib3.$C)(NameSpaceImport, NamedImports)))), function($skip, $loc, $0, $1, $2) {
13121  var binding = $1;
13122  var rest = $2;
13123  if (rest) {
13124    return {
13125      type: "Declaration",
13126      children: [binding, ...rest],
13127      names: [...binding.names, ...rest[3].names],
13128      binding,
13129      specifiers: rest[3].specifiers
13130    };
13131  }
13132  return {
13133    type: "Declaration",
13134    children: [binding],
13135    names: binding.names,
13136    binding
13137  };
13138});
13139var ImportClause$1 = NameSpaceImport;
13140var ImportClause$2 = NamedImports;
13141var ImportClause$$ = [ImportClause$0, ImportClause$1, ImportClause$2];
13142function ImportClause(ctx, state2) {
13143  return (0, import_lib3.$EVENT_C)(ctx, state2, "ImportClause", ImportClause$$);
13144}
13145var NameSpaceImport$0 = (0, import_lib3.$TS)((0, import_lib3.$S)(Star, ImportAsToken, __, ImportedBinding), function($skip, $loc, $0, $1, $2, $3, $4) {
13146  var star = $1;
13147  var binding = $4;
13148  return {
13149    type: "Declaration",
13150    children: $0,
13151    names: binding.names,
13152    binding,
13153    star
13154  };
13155});
13156function NameSpaceImport(ctx, state2) {
13157  return (0, import_lib3.$EVENT)(ctx, state2, "NameSpaceImport", NameSpaceImport$0);
13158}
13159var NamedImports$0 = (0, import_lib3.$TS)((0, import_lib3.$S)(OpenBrace, (0, import_lib3.$Q)(TypeAndImportSpecifier), (0, import_lib3.$E)((0, import_lib3.$S)(__, Comma)), __, CloseBrace), function($skip, $loc, $0, $1, $2, $3, $4, $5) {
13160  var specifiers = $2;
13161  const names = specifiers.flatMap(({ binding }) => binding.names);
13162  return {
13163    type: "Declaration",
13164    children: $0,
13165    names,
13166    specifiers
13167  };
13168});
13169function NamedImports(ctx, state2) {
13170  return (0, import_lib3.$EVENT)(ctx, state2, "NamedImports", NamedImports$0);
13171}
13172var FromClause$0 = (0, import_lib3.$TS)((0, import_lib3.$S)(From, __, ModuleSpecifier), function($skip, $loc, $0, $1, $2, $3) {
13173  var module2 = $3;
13174  if (!Array.isArray(module2))
13175    return $0;
13176  return [$1, $2, ...module2];
13177});
13178function FromClause(ctx, state2) {
13179  return (0, import_lib3.$EVENT)(ctx, state2, "FromClause", FromClause$0);
13180}
13181var ImportAssertion$0 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$E)(_), (0, import_lib3.$C)((0, import_lib3.$EXPECT)($L116, 'ImportAssertion "with"'), (0, import_lib3.$EXPECT)($L117, 'ImportAssertion "assert"')), NonIdContinue, (0, import_lib3.$E)(_), ObjectLiteral), function($skip, $loc, $0, $1, $2, $3, $4, $5) {
13182  var keyword = $2;
13183  var object = $5;
13184  return {
13185    type: "ImportAssertion",
13186    keyword,
13187    object,
13188    children: $0
13189  };
13190});
13191function ImportAssertion(ctx, state2) {
13192  return (0, import_lib3.$EVENT)(ctx, state2, "ImportAssertion", ImportAssertion$0);
13193}
13194var TypeAndImportSpecifier$0 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$E)((0, import_lib3.$S)(__, TypeKeyword)), ImportSpecifier), function($skip, $loc, $0, $1, $2) {
13195  if (!$1)
13196    return $2;
13197  return { ts: true, children: $0, binding: $2.binding };
13198});
13199var TypeAndImportSpecifier$1 = (0, import_lib3.$TS)((0, import_lib3.$S)(__, Operator, OperatorImportSpecifier), function($skip, $loc, $0, $1, $2, $3) {
13200  var ws = $1;
13201  var spec = $3;
13202  if (spec.binding.type !== "Identifier") {
13203    throw new Error("Expected identifier after `operator`");
13204  }
13205  state.operators.set(spec.binding.name, spec.behavior);
13206  return {
13207    ...spec,
13208    children: [
13209      ws,
13210      insertTrimmingSpace(spec[0], ""),
13211      spec.children.slice(1)
13212    ]
13213  };
13214});
13215var TypeAndImportSpecifier$$ = [TypeAndImportSpecifier$0, TypeAndImportSpecifier$1];
13216function TypeAndImportSpecifier(ctx, state2) {
13217  return (0, import_lib3.$EVENT_C)(ctx, state2, "TypeAndImportSpecifier", TypeAndImportSpecifier$$);
13218}
13219var ImportSpecifier$0 = (0, import_lib3.$TS)((0, import_lib3.$S)(__, ModuleExportName, ImportAsToken, __, ImportedBinding, ObjectPropertyDelimiter), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6) {
13220  var source = $2;
13221  var binding = $5;
13222  return {
13223    source,
13224    binding,
13225    children: $0
13226  };
13227});
13228var ImportSpecifier$1 = (0, import_lib3.$TS)((0, import_lib3.$S)(__, ImportedBinding, ObjectPropertyDelimiter), function($skip, $loc, $0, $1, $2, $3) {
13229  var binding = $2;
13230  return {
13231    source: binding,
13232    binding,
13233    children: $0
13234  };
13235});
13236var ImportSpecifier$$ = [ImportSpecifier$0, ImportSpecifier$1];
13237function ImportSpecifier(ctx, state2) {
13238  return (0, import_lib3.$EVENT_C)(ctx, state2, "ImportSpecifier", ImportSpecifier$$);
13239}
13240var OperatorImportSpecifier$0 = (0, import_lib3.$TS)((0, import_lib3.$S)(__, ModuleExportName, (0, import_lib3.$E)(OperatorBehavior), ImportAsToken, __, ImportedBinding, ObjectPropertyDelimiter), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7) {
13241  var behavior = $3;
13242  var binding = $6;
13243  return {
13244    binding,
13245    behavior,
13246    children: [$1, $2, $4, $5, $6, $7]
13247  };
13248});
13249var OperatorImportSpecifier$1 = (0, import_lib3.$TS)((0, import_lib3.$S)(__, ImportedBinding, (0, import_lib3.$E)(OperatorBehavior), ObjectPropertyDelimiter), function($skip, $loc, $0, $1, $2, $3, $4) {
13250  var binding = $2;
13251  var behavior = $3;
13252  return {
13253    binding,
13254    behavior,
13255    children: [$1, $2, $4]
13256  };
13257});
13258var OperatorImportSpecifier$$ = [OperatorImportSpecifier$0, OperatorImportSpecifier$1];
13259function OperatorImportSpecifier(ctx, state2) {
13260  return (0, import_lib3.$EVENT_C)(ctx, state2, "OperatorImportSpecifier", OperatorImportSpecifier$$);
13261}
13262var ImportAsToken$0 = (0, import_lib3.$S)(__, As);
13263var ImportAsToken$1 = (0, import_lib3.$TS)((0, import_lib3.$S)(Loc, __, Colon, (0, import_lib3.$E)((0, import_lib3.$EXPECT)($L18, 'ImportAsToken " "'))), function($skip, $loc, $0, $1, $2, $3, $4) {
13264  var l = $1;
13265  var ws = $2;
13266  var c = $3;
13267  const children = [
13268    ...ws,
13269    { ...c, token: "as " }
13270  ];
13271  if (!ws.length) {
13272    children.unshift({ $loc: l.$loc, token: " " });
13273  }
13274  return {
13275    children
13276  };
13277});
13278var ImportAsToken$$ = [ImportAsToken$0, ImportAsToken$1];
13279function ImportAsToken(ctx, state2) {
13280  return (0, import_lib3.$EVENT_C)(ctx, state2, "ImportAsToken", ImportAsToken$$);
13281}
13282var ModuleExportName$0 = StringLiteral;
13283var ModuleExportName$1 = IdentifierName;
13284var ModuleExportName$$ = [ModuleExportName$0, ModuleExportName$1];
13285function ModuleExportName(ctx, state2) {
13286  return (0, import_lib3.$EVENT_C)(ctx, state2, "ModuleExportName", ModuleExportName$$);
13287}
13288var ModuleSpecifier$0 = (0, import_lib3.$TS)((0, import_lib3.$S)(UnprocessedModuleSpecifier, (0, import_lib3.$E)(ImportAssertion)), function($skip, $loc, $0, $1, $2) {
13289  var a = $2;
13290  let { token } = $1;
13291  if (config.rewriteTsImports) {
13292    token = token.replace(/\.([mc])?ts(['"])$/, ".$1js$2");
13293  }
13294  if (config.rewriteCivetImports) {
13295    token = token.replace(
13296      /\.civet(['"])$/,
13297      `${config.rewriteCivetImports.replace(/\$/g, "$$")}$1`
13298    );
13299  }
13300  if (a)
13301    return [{ ...$1, token }, a];
13302  return { ...$1, token };
13303});
13304function ModuleSpecifier(ctx, state2) {
13305  return (0, import_lib3.$EVENT)(ctx, state2, "ModuleSpecifier", ModuleSpecifier$0);
13306}
13307var UnprocessedModuleSpecifier$0 = StringLiteral;
13308var UnprocessedModuleSpecifier$1 = UnquotedSpecifier;
13309var UnprocessedModuleSpecifier$$ = [UnprocessedModuleSpecifier$0, UnprocessedModuleSpecifier$1];
13310function UnprocessedModuleSpecifier(ctx, state2) {
13311  return (0, import_lib3.$EVENT_C)(ctx, state2, "UnprocessedModuleSpecifier", UnprocessedModuleSpecifier$$);
13312}
13313var UnquotedSpecifier$0 = (0, import_lib3.$TV)((0, import_lib3.$EXPECT)($R27, 'UnquotedSpecifier /[^;"\\s]+/'), function($skip, $loc, $0, $1) {
13314  var spec = $0;
13315  return { $loc, token: `"${spec}"` };
13316});
13317function UnquotedSpecifier(ctx, state2) {
13318  return (0, import_lib3.$EVENT)(ctx, state2, "UnquotedSpecifier", UnquotedSpecifier$0);
13319}
13320var ImportedBinding$0 = BindingIdentifier;
13321function ImportedBinding(ctx, state2) {
13322  return (0, import_lib3.$EVENT)(ctx, state2, "ImportedBinding", ImportedBinding$0);
13323}
13324var ExportDeclaration$0 = (0, import_lib3.$TS)((0, import_lib3.$S)(Export, (0, import_lib3.$E)(_), Equals, MaybeNestedExtendedExpression), function($skip, $loc, $0, $1, $2, $3, $4) {
13325  const exp = [
13326    { ...$1, ts: true },
13327    { ...$1, token: "module.exports", js: true }
13328  ];
13329  return {
13330    type: "ExportDeclaration",
13331    children: [exp, $0.slice(1)]
13332  };
13333});
13334var ExportDeclaration$1 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$E)(Decorators), Export, __, Default, __, (0, import_lib3.$N)(FunctionDeclaration), (0, import_lib3.$C)(LexicalDeclaration, VariableStatement, TypeAliasDeclaration, NamespaceDeclaration, EnumDeclaration, OperatorDeclaration)), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7) {
13335  var declaration = $7;
13336  let id, error;
13337  if (declaration.id) {
13338    id = declaration.id;
13339  } else if (declaration.names) {
13340    if (declaration.names.length !== 1) {
13341      error = {
13342        type: "Error",
13343        message: `export default with ${declaration.names.length} variable declaration (should be 1)`
13344      };
13345    }
13346    id = declaration.names[0];
13347  } else {
13348    throw new Error("Could not find name of declaration in export default");
13349  }
13350  return [
13351    declaration,
13352    { children: [";"], ts: declaration.ts },
13353    error ?? {
13354      type: "ExportDeclaration",
13355      declaration: id,
13356      ts: declaration.ts,
13357      children: [...$0.slice(0, -2), id]
13358    }
13359  ];
13360});
13361var ExportDeclaration$2 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$E)(Decorators), Export, __, Default, __, (0, import_lib3.$C)(HoistableDeclaration, ClassDeclaration, InterfaceDeclaration, MaybeNestedExtendedExpression)), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6) {
13362  var declaration = $6;
13363  return { type: "ExportDeclaration", declaration, ts: declaration.ts, children: $0 };
13364});
13365var ExportDeclaration$3 = (0, import_lib3.$TS)((0, import_lib3.$S)(Export, __, ExportFromClause, __, FromClause), function($skip, $loc, $0, $1, $2, $3, $4, $5) {
13366  return { type: "ExportDeclaration", ts: $3.ts, children: $0 };
13367});
13368var ExportDeclaration$4 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$E)(Decorators), Export, __, (0, import_lib3.$C)(Declaration, VariableStatement, TypeAndNamedExports, ExportVarDec)), function($skip, $loc, $0, $1, $2, $3, $4) {
13369  var declaration = $4;
13370  return { type: "ExportDeclaration", declaration, ts: declaration.ts, children: $0 };
13371});
13372var ExportDeclaration$$ = [ExportDeclaration$0, ExportDeclaration$1, ExportDeclaration$2, ExportDeclaration$3, ExportDeclaration$4];
13373function ExportDeclaration(ctx, state2) {
13374  return (0, import_lib3.$EVENT_C)(ctx, state2, "ExportDeclaration", ExportDeclaration$$);
13375}
13376var ExportVarDec$0 = (0, import_lib3.$TS)((0, import_lib3.$S)(InsertVar, VariableDeclarationList), function($skip, $loc, $0, $1, $2) {
13377  return {
13378    ...$2,
13379    children: [$1, ...$2.children]
13380  };
13381});
13382function ExportVarDec(ctx, state2) {
13383  return (0, import_lib3.$EVENT)(ctx, state2, "ExportVarDec", ExportVarDec$0);
13384}
13385var ExportFromClause$0 = (0, import_lib3.$S)(Star, (0, import_lib3.$E)((0, import_lib3.$S)(__, As, __, ModuleExportName)));
13386var ExportFromClause$1 = TypeAndNamedExports;
13387var ExportFromClause$$ = [ExportFromClause$0, ExportFromClause$1];
13388function ExportFromClause(ctx, state2) {
13389  return (0, import_lib3.$EVENT_C)(ctx, state2, "ExportFromClause", ExportFromClause$$);
13390}
13391var TypeAndNamedExports$0 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$E)((0, import_lib3.$S)(TypeKeyword, __)), NamedExports), function($skip, $loc, $0, $1, $2) {
13392  if (!$1)
13393    return $2;
13394  return { ts: true, children: $0 };
13395});
13396function TypeAndNamedExports(ctx, state2) {
13397  return (0, import_lib3.$EVENT)(ctx, state2, "TypeAndNamedExports", TypeAndNamedExports$0);
13398}
13399var NamedExports$0 = (0, import_lib3.$S)(OpenBrace, (0, import_lib3.$Q)(ExportSpecifier), (0, import_lib3.$E)((0, import_lib3.$S)(__, Comma)), __, CloseBrace);
13400var NamedExports$1 = (0, import_lib3.$TS)((0, import_lib3.$S)(InsertInlineOpenBrace, ImplicitExportSpecifier, (0, import_lib3.$Q)((0, import_lib3.$S)(ImplicitObjectPropertyDelimiter, ImplicitExportSpecifier)), InsertCloseBrace, (0, import_lib3.$Y)((0, import_lib3.$C)(StatementDelimiter, (0, import_lib3.$S)(__, From)))), function($skip, $loc, $0, $1, $2, $3, $4, $5) {
13401  var open = $1;
13402  var first = $2;
13403  var rest = $3;
13404  var close = $4;
13405  return [open, first, ...rest, close];
13406});
13407var NamedExports$$ = [NamedExports$0, NamedExports$1];
13408function NamedExports(ctx, state2) {
13409  return (0, import_lib3.$EVENT_C)(ctx, state2, "NamedExports", NamedExports$$);
13410}
13411var ExportSpecifier$0 = (0, import_lib3.$TS)((0, import_lib3.$S)(__, (0, import_lib3.$E)((0, import_lib3.$S)(TypeKeyword, __)), ModuleExportName, (0, import_lib3.$E)((0, import_lib3.$S)(__, As, __, ModuleExportName)), ObjectPropertyDelimiter), function($skip, $loc, $0, $1, $2, $3, $4, $5) {
13412  if (!$2)
13413    return $0;
13414  return { ts: true, children: $0 };
13415});
13416function ExportSpecifier(ctx, state2) {
13417  return (0, import_lib3.$EVENT)(ctx, state2, "ExportSpecifier", ExportSpecifier$0);
13418}
13419var ImplicitExportSpecifier$0 = (0, import_lib3.$S)((0, import_lib3.$N)(Default), ModuleExportName, (0, import_lib3.$E)((0, import_lib3.$S)(__, As, __, ModuleExportName)));
13420function ImplicitExportSpecifier(ctx, state2) {
13421  return (0, import_lib3.$EVENT)(ctx, state2, "ImplicitExportSpecifier", ImplicitExportSpecifier$0);
13422}
13423var Declaration$0 = (0, import_lib3.$TV)(ImportDeclaration, function($skip, $loc, $0, $1) {
13424  var decl = $0;
13425  if (decl.ts || decl.module || !decl.imports || !decl.from)
13426    return $skip;
13427  const { imports } = decl;
13428  if (!imports.binding && !imports.specifiers)
13429    return $skip;
13430  return dynamizeImportDeclaration(decl);
13431});
13432var Declaration$1 = HoistableDeclaration;
13433var Declaration$2 = ClassDeclaration;
13434var Declaration$3 = (0, import_lib3.$TV)(LexicalDeclaration, function($skip, $loc, $0, $1) {
13435  var d = $0;
13436  if (d.thisAssignments?.length)
13437    return {
13438      ...d,
13439      children: [...d.children, ...d.splices, ";", ...d.thisAssignments]
13440    };
13441  if (d.splices?.length)
13442    return {
13443      ...d,
13444      children: [...d.children, ...d.splices]
13445    };
13446  return d;
13447});
13448var Declaration$4 = TypeDeclaration;
13449var Declaration$5 = EnumDeclaration;
13450var Declaration$6 = OperatorDeclaration;
13451var Declaration$7 = UsingDeclaration;
13452var Declaration$$ = [Declaration$0, Declaration$1, Declaration$2, Declaration$3, Declaration$4, Declaration$5, Declaration$6, Declaration$7];
13453function Declaration(ctx, state2) {
13454  return (0, import_lib3.$EVENT_C)(ctx, state2, "Declaration", Declaration$$);
13455}
13456var HoistableDeclaration$0 = FunctionDeclaration;
13457function HoistableDeclaration(ctx, state2) {
13458  return (0, import_lib3.$EVENT)(ctx, state2, "HoistableDeclaration", HoistableDeclaration$0);
13459}
13460var LexicalDeclaration$0 = (0, import_lib3.$TS)((0, import_lib3.$S)(LetOrConst, LexicalBinding, (0, import_lib3.$Q)((0, import_lib3.$S)(__, Comma, __, LexicalBinding))), function($skip, $loc, $0, $1, $2, $3) {
13461  var decl = $1;
13462  var binding = $2;
13463  var tail = $3;
13464  const bindings = [binding].concat(tail.map(([, , , b]) => b));
13465  return {
13466    type: "Declaration",
13467    children: $0,
13468    names: bindings.flatMap((b) => b.names),
13469    bindings,
13470    decl,
13471    splices: bindings.flatMap((b) => b.splices),
13472    thisAssignments: bindings.flatMap((b) => b.thisAssignments)
13473  };
13474});
13475var LexicalDeclaration$1 = (0, import_lib3.$TS)((0, import_lib3.$S)(Loc, (0, import_lib3.$C)(BindingPattern, BindingIdentifier), (0, import_lib3.$E)(TypeSuffix), __, (0, import_lib3.$C)(ConstAssignment, LetAssignment), MaybeNestedPostfixedExpression), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6) {
13476  var loc = $1;
13477  var assign = $5;
13478  return processAssignmentDeclaration(
13479    { $loc: loc, token: assign.decl },
13480    ...$0.slice(1)
13481  );
13482});
13483var LexicalDeclaration$$ = [LexicalDeclaration$0, LexicalDeclaration$1];
13484function LexicalDeclaration(ctx, state2) {
13485  return (0, import_lib3.$EVENT_C)(ctx, state2, "LexicalDeclaration", LexicalDeclaration$$);
13486}
13487var ConstAssignment$0 = (0, import_lib3.$TV)((0, import_lib3.$C)((0, import_lib3.$EXPECT)($L118, 'ConstAssignment ":="'), (0, import_lib3.$EXPECT)($L119, 'ConstAssignment "\u2254"')), function($skip, $loc, $0, $1) {
13488  return { $loc, token: "=", decl: "const " };
13489});
13490function ConstAssignment(ctx, state2) {
13491  return (0, import_lib3.$EVENT)(ctx, state2, "ConstAssignment", ConstAssignment$0);
13492}
13493var LetAssignment$0 = (0, import_lib3.$TV)((0, import_lib3.$EXPECT)($L120, 'LetAssignment ".="'), function($skip, $loc, $0, $1) {
13494  return { $loc, token: "=", decl: "let " };
13495});
13496function LetAssignment(ctx, state2) {
13497  return (0, import_lib3.$EVENT)(ctx, state2, "LetAssignment", LetAssignment$0);
13498}
13499var TypeAssignment$0 = (0, import_lib3.$TV)((0, import_lib3.$EXPECT)($L121, 'TypeAssignment "::="'), function($skip, $loc, $0, $1) {
13500  return { $loc, token: "=" };
13501});
13502function TypeAssignment(ctx, state2) {
13503  return (0, import_lib3.$EVENT)(ctx, state2, "TypeAssignment", TypeAssignment$0);
13504}
13505var LexicalBinding$0 = (0, import_lib3.$TS)((0, import_lib3.$S)(BindingPattern, (0, import_lib3.$E)(TypeSuffix), Initializer), function($skip, $loc, $0, $1, $2, $3) {
13506  var pattern = $1;
13507  var suffix = $2;
13508  var initializer = $3;
13509  const [splices, thisAssignments] = gatherBindingCode(pattern);
13510  return {
13511    type: "Binding",
13512    children: $0,
13513    names: pattern.names,
13514    pattern,
13515    suffix,
13516    initializer,
13517    splices: splices.map((s) => [",", s]),
13518    thisAssignments: thisAssignments.map((s) => ["", s, ";"])
13519  };
13520});
13521var LexicalBinding$1 = (0, import_lib3.$TS)((0, import_lib3.$S)(BindingIdentifier, (0, import_lib3.$E)(TypeSuffix), (0, import_lib3.$E)(Initializer)), function($skip, $loc, $0, $1, $2, $3) {
13522  var pattern = $1;
13523  var suffix = $2;
13524  var initializer = $3;
13525  return {
13526    type: "Binding",
13527    children: $0,
13528    names: pattern.names,
13529    pattern,
13530    suffix,
13531    initializer,
13532    splices: [],
13533    thisAssignments: []
13534  };
13535});
13536var LexicalBinding$$ = [LexicalBinding$0, LexicalBinding$1];
13537function LexicalBinding(ctx, state2) {
13538  return (0, import_lib3.$EVENT_C)(ctx, state2, "LexicalBinding", LexicalBinding$$);
13539}
13540var Initializer$0 = (0, import_lib3.$T)((0, import_lib3.$S)(__, Equals, MaybeNestedExtendedExpression), function(value) {
13541  var expression = value[2];
13542  return { "type": "Initializer", "expression": expression, "children": value };
13543});
13544function Initializer(ctx, state2) {
13545  return (0, import_lib3.$EVENT)(ctx, state2, "Initializer", Initializer$0);
13546}
13547var VariableStatement$0 = (0, import_lib3.$TS)((0, import_lib3.$S)(Var, __, VariableDeclarationList), function($skip, $loc, $0, $1, $2, $3) {
13548  return {
13549    ...$3,
13550    names: $3.names,
13551    children: [$1, ...$2, ...$3.children]
13552  };
13553});
13554function VariableStatement(ctx, state2) {
13555  return (0, import_lib3.$EVENT)(ctx, state2, "VariableStatement", VariableStatement$0);
13556}
13557var VariableDeclarationList$0 = (0, import_lib3.$TS)((0, import_lib3.$S)(LexicalBinding, (0, import_lib3.$Q)((0, import_lib3.$S)(__, Comma, __, LexicalBinding))), function($skip, $loc, $0, $1, $2) {
13558  var binding = $1;
13559  var tail = $2;
13560  const bindings = [binding].concat(tail.map(([, , , b]) => b));
13561  return {
13562    type: "Declaration",
13563    children: [binding, ...tail],
13564    bindings,
13565    names: bindings.flatMap((b) => b.names)
13566  };
13567});
13568function VariableDeclarationList(ctx, state2) {
13569  return (0, import_lib3.$EVENT)(ctx, state2, "VariableDeclarationList", VariableDeclarationList$0);
13570}
13571var NumericLiteral$0 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$EXPECT)($R28, "NumericLiteral /(?=[0-9.])/"), NumericLiteralKind), function($skip, $loc, $0, $1, $2) {
13572  var token = $2;
13573  return { type: "NumericLiteral", $loc, token };
13574});
13575function NumericLiteral(ctx, state2) {
13576  return (0, import_lib3.$EVENT)(ctx, state2, "NumericLiteral", NumericLiteral$0);
13577}
13578var NumericLiteralKind$0 = DecimalBigIntegerLiteral;
13579var NumericLiteralKind$1 = BinaryIntegerLiteral;
13580var NumericLiteralKind$2 = OctalIntegerLiteral;
13581var NumericLiteralKind$3 = HexIntegerLiteral;
13582var NumericLiteralKind$4 = DecimalLiteral;
13583var NumericLiteralKind$$ = [NumericLiteralKind$0, NumericLiteralKind$1, NumericLiteralKind$2, NumericLiteralKind$3, NumericLiteralKind$4];
13584function NumericLiteralKind(ctx, state2) {
13585  return (0, import_lib3.$EVENT_C)(ctx, state2, "NumericLiteralKind", NumericLiteralKind$$);
13586}
13587var DecimalBigIntegerLiteral$0 = (0, import_lib3.$R$0)((0, import_lib3.$EXPECT)($R29, "DecimalBigIntegerLiteral /(?:0|[1-9](?:_[0-9]|[0-9])*)n/"));
13588function DecimalBigIntegerLiteral(ctx, state2) {
13589  return (0, import_lib3.$EVENT)(ctx, state2, "DecimalBigIntegerLiteral", DecimalBigIntegerLiteral$0);
13590}
13591var DecimalLiteral$0 = (0, import_lib3.$TV)((0, import_lib3.$TEXT)((0, import_lib3.$EXPECT)($R30, "DecimalLiteral /(?:0|[1-9](?:_[0-9]|[0-9])*)(?=\\.(?:\\p{ID_Start}|[_$]))/")), function($skip, $loc, $0, $1) {
13592  return $1 + ".";
13593});
13594var DecimalLiteral$1 = (0, import_lib3.$TEXT)((0, import_lib3.$S)((0, import_lib3.$EXPECT)($R31, "DecimalLiteral /(?:0|[1-9](?:_[0-9]|[0-9])*)(?:\\.(?:[0-9](?:_[0-9]|[0-9])*))?/"), (0, import_lib3.$E)(ExponentPart)));
13595var DecimalLiteral$2 = (0, import_lib3.$TEXT)((0, import_lib3.$S)((0, import_lib3.$EXPECT)($R32, "DecimalLiteral /(?:\\.[0-9](?:_[0-9]|[0-9])*)/"), (0, import_lib3.$E)(ExponentPart)));
13596var DecimalLiteral$$ = [DecimalLiteral$0, DecimalLiteral$1, DecimalLiteral$2];
13597function DecimalLiteral(ctx, state2) {
13598  return (0, import_lib3.$EVENT_C)(ctx, state2, "DecimalLiteral", DecimalLiteral$$);
13599}
13600var ExponentPart$0 = (0, import_lib3.$R$0)((0, import_lib3.$EXPECT)($R33, "ExponentPart /(?:[eE][+-]?[0-9]+(?:_[0-9]|[0-9])*)/"));
13601function ExponentPart(ctx, state2) {
13602  return (0, import_lib3.$EVENT)(ctx, state2, "ExponentPart", ExponentPart$0);
13603}
13604var BinaryIntegerLiteral$0 = (0, import_lib3.$R$0)((0, import_lib3.$EXPECT)($R34, "BinaryIntegerLiteral /0[bB][01](?:[01]|_[01])*n?/"));
13605function BinaryIntegerLiteral(ctx, state2) {
13606  return (0, import_lib3.$EVENT)(ctx, state2, "BinaryIntegerLiteral", BinaryIntegerLiteral$0);
13607}
13608var OctalIntegerLiteral$0 = (0, import_lib3.$R$0)((0, import_lib3.$EXPECT)($R35, "OctalIntegerLiteral /0[oO][0-7](?:[0-7]|_[0-7])*n?/"));
13609function OctalIntegerLiteral(ctx, state2) {
13610  return (0, import_lib3.$EVENT)(ctx, state2, "OctalIntegerLiteral", OctalIntegerLiteral$0);
13611}
13612var HexIntegerLiteral$0 = (0, import_lib3.$R$0)((0, import_lib3.$EXPECT)($R36, "HexIntegerLiteral /0[xX][0-9a-fA-F](?:[0-9a-fA-F]|_[0-9a-fA-F])*n?/"));
13613function HexIntegerLiteral(ctx, state2) {
13614  return (0, import_lib3.$EVENT)(ctx, state2, "HexIntegerLiteral", HexIntegerLiteral$0);
13615}
13616var IntegerLiteral$0 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$EXPECT)($R37, "IntegerLiteral /(?=[0-9])/"), IntegerLiteralKind), function($skip, $loc, $0, $1, $2) {
13617  var token = $2;
13618  return { $loc, token };
13619});
13620function IntegerLiteral(ctx, state2) {
13621  return (0, import_lib3.$EVENT)(ctx, state2, "IntegerLiteral", IntegerLiteral$0);
13622}
13623var IntegerLiteralKind$0 = DecimalBigIntegerLiteral;
13624var IntegerLiteralKind$1 = BinaryIntegerLiteral;
13625var IntegerLiteralKind$2 = OctalIntegerLiteral;
13626var IntegerLiteralKind$3 = HexIntegerLiteral;
13627var IntegerLiteralKind$4 = DecimalIntegerLiteral;
13628var IntegerLiteralKind$$ = [IntegerLiteralKind$0, IntegerLiteralKind$1, IntegerLiteralKind$2, IntegerLiteralKind$3, IntegerLiteralKind$4];
13629function IntegerLiteralKind(ctx, state2) {
13630  return (0, import_lib3.$EVENT_C)(ctx, state2, "IntegerLiteralKind", IntegerLiteralKind$$);
13631}
13632var DecimalIntegerLiteral$0 = (0, import_lib3.$R$0)((0, import_lib3.$EXPECT)($R38, "DecimalIntegerLiteral /(?:0|[1-9](?:_[0-9]|[0-9])*)/"));
13633function DecimalIntegerLiteral(ctx, state2) {
13634  return (0, import_lib3.$EVENT)(ctx, state2, "DecimalIntegerLiteral", DecimalIntegerLiteral$0);
13635}
13636var StringLiteral$0 = (0, import_lib3.$TS)((0, import_lib3.$S)(DoubleQuote, DoubleStringCharacters, DoubleQuote), function($skip, $loc, $0, $1, $2, $3) {
13637  var str = $2;
13638  return {
13639    type: "StringLiteral",
13640    token: `"${modifyString(str.token)}"`,
13641    $loc
13642  };
13643});
13644var StringLiteral$1 = (0, import_lib3.$TS)((0, import_lib3.$S)(SingleQuote, SingleStringCharacters, SingleQuote), function($skip, $loc, $0, $1, $2, $3) {
13645  var str = $2;
13646  return {
13647    type: "StringLiteral",
13648    token: `'${modifyString(str.token)}'`,
13649    $loc
13650  };
13651});
13652var StringLiteral$$ = [StringLiteral$0, StringLiteral$1];
13653function StringLiteral(ctx, state2) {
13654  return (0, import_lib3.$EVENT_C)(ctx, state2, "StringLiteral", StringLiteral$$);
13655}
13656var DoubleStringCharacters$0 = (0, import_lib3.$TR)((0, import_lib3.$EXPECT)($R39, 'DoubleStringCharacters /(?:\\\\.|[^"])*/'), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7, $8, $9) {
13657  return { $loc, token: $0 };
13658});
13659function DoubleStringCharacters(ctx, state2) {
13660  return (0, import_lib3.$EVENT)(ctx, state2, "DoubleStringCharacters", DoubleStringCharacters$0);
13661}
13662var SingleStringCharacters$0 = (0, import_lib3.$TR)((0, import_lib3.$EXPECT)($R40, "SingleStringCharacters /(?:\\\\.|[^'])*/"), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7, $8, $9) {
13663  return { $loc, token: $0 };
13664});
13665function SingleStringCharacters(ctx, state2) {
13666  return (0, import_lib3.$EVENT)(ctx, state2, "SingleStringCharacters", SingleStringCharacters$0);
13667}
13668var TripleDoubleStringCharacters$0 = (0, import_lib3.$TR)((0, import_lib3.$EXPECT)($R41, 'TripleDoubleStringCharacters /(?:"(?!"")|#(?!\\{)|\\\\.|[^#"])+/'), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7, $8, $9) {
13669  return { $loc, token: $0 };
13670});
13671function TripleDoubleStringCharacters(ctx, state2) {
13672  return (0, import_lib3.$EVENT)(ctx, state2, "TripleDoubleStringCharacters", TripleDoubleStringCharacters$0);
13673}
13674var TripleSingleStringCharacters$0 = (0, import_lib3.$TR)((0, import_lib3.$EXPECT)($R42, "TripleSingleStringCharacters /(?:'(?!'')|\\\\.|[^'])*/"), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7, $8, $9) {
13675  return { $loc, token: $0 };
13676});
13677function TripleSingleStringCharacters(ctx, state2) {
13678  return (0, import_lib3.$EVENT)(ctx, state2, "TripleSingleStringCharacters", TripleSingleStringCharacters$0);
13679}
13680var CoffeeStringSubstitution$0 = (0, import_lib3.$TS)((0, import_lib3.$S)(CoffeeSubstitutionStart, AllowAll, (0, import_lib3.$E)((0, import_lib3.$S)(PostfixedExpression, __, CloseBrace)), RestoreAll), function($skip, $loc, $0, $1, $2, $3, $4) {
13681  if (!$3)
13682    return $skip;
13683  return [$1, ...$3];
13684});
13685function CoffeeStringSubstitution(ctx, state2) {
13686  return (0, import_lib3.$EVENT)(ctx, state2, "CoffeeStringSubstitution", CoffeeStringSubstitution$0);
13687}
13688var CoffeeInterpolatedDoubleQuotedString$0 = (0, import_lib3.$TS)((0, import_lib3.$S)(CoffeeInterpolationEnabled, DoubleQuote, (0, import_lib3.$Q)((0, import_lib3.$C)(CoffeeDoubleQuotedStringCharacters, CoffeeStringSubstitution)), DoubleQuote), function($skip, $loc, $0, $1, $2, $3, $4) {
13689  var s = $2;
13690  var parts = $3;
13691  var e = $4;
13692  return processCoffeeInterpolation(s, parts, e, $loc);
13693});
13694function CoffeeInterpolatedDoubleQuotedString(ctx, state2) {
13695  return (0, import_lib3.$EVENT)(ctx, state2, "CoffeeInterpolatedDoubleQuotedString", CoffeeInterpolatedDoubleQuotedString$0);
13696}
13697var CoffeeDoubleQuotedStringCharacters$0 = (0, import_lib3.$TR)((0, import_lib3.$EXPECT)($R43, 'CoffeeDoubleQuotedStringCharacters /(?:\\\\.|#(?!\\{)|[^"\#])+/'), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7, $8, $9) {
13698  return { $loc, token: $0 };
13699});
13700function CoffeeDoubleQuotedStringCharacters(ctx, state2) {
13701  return (0, import_lib3.$EVENT)(ctx, state2, "CoffeeDoubleQuotedStringCharacters", CoffeeDoubleQuotedStringCharacters$0);
13702}
13703var RegularExpressionLiteral$0 = HeregexLiteral;
13704var RegularExpressionLiteral$1 = (0, import_lib3.$TV)((0, import_lib3.$TEXT)((0, import_lib3.$S)((0, import_lib3.$EXPECT)($L66, 'RegularExpressionLiteral "/"'), RegularExpressionBody, (0, import_lib3.$EXPECT)($L66, 'RegularExpressionLiteral "/"'), RegularExpressionFlags)), function($skip, $loc, $0, $1) {
13705  return { type: "RegularExpressionLiteral", $loc, token: $1 };
13706});
13707var RegularExpressionLiteral$$ = [RegularExpressionLiteral$0, RegularExpressionLiteral$1];
13708function RegularExpressionLiteral(ctx, state2) {
13709  return (0, import_lib3.$EVENT_C)(ctx, state2, "RegularExpressionLiteral", RegularExpressionLiteral$$);
13710}
13711var RegularExpressionClass$0 = (0, import_lib3.$TV)((0, import_lib3.$TEXT)((0, import_lib3.$S)(OpenBracket, RegularExpressionClassCharacters, CloseBracket)), function($skip, $loc, $0, $1) {
13712  return { $loc, token: $1 };
13713});
13714function RegularExpressionClass(ctx, state2) {
13715  return (0, import_lib3.$EVENT)(ctx, state2, "RegularExpressionClass", RegularExpressionClass$0);
13716}
13717var RegularExpressionClassCharacters$0 = (0, import_lib3.$TR)((0, import_lib3.$EXPECT)($R44, "RegularExpressionClassCharacters /(?:\\\\.|[^\\]])*/"), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7, $8, $9) {
13718  return { $loc, token: $0 };
13719});
13720function RegularExpressionClassCharacters(ctx, state2) {
13721  return (0, import_lib3.$EVENT)(ctx, state2, "RegularExpressionClassCharacters", RegularExpressionClassCharacters$0);
13722}
13723var HeregexLiteral$0 = (0, import_lib3.$TS)((0, import_lib3.$S)(TripleSlash, HeregexBody, TripleSlash, RegularExpressionFlags), function($skip, $loc, $0, $1, $2, $3, $4) {
13724  var open = $1;
13725  var body = $2;
13726  var close = $3;
13727  var flags = $4;
13728  let hasSubstitutions = body.some((part) => part.type === "Substitution");
13729  if (hasSubstitutions) {
13730    const children = [
13731      { ...open, token: "RegExp(`" },
13732      // Escape backticks, backslashes, and '$' in the body text
13733      body.map(
13734        (e) => e.type === "Substitution" ? e : {
13735          ...e,
13736          token: e.token.replace(/`|\\|\$/g, "\\$&")
13737        }
13738      ),
13739      "`"
13740    ];
13741    if (flags.length) {
13742      children.push(
13743        ", ",
13744        JSON.stringify(flags)
13745      );
13746    }
13747    children.push({ ...close, token: ")" });
13748    return {
13749      type: "RegularExpressionLiteral",
13750      children
13751    };
13752  }
13753  return {
13754    type: "RegularExpressionLiteral",
13755    children: $0
13756  };
13757});
13758function HeregexLiteral(ctx, state2) {
13759  return (0, import_lib3.$EVENT)(ctx, state2, "HeregexLiteral", HeregexLiteral$0);
13760}
13761var HeregexBody$0 = (0, import_lib3.$T)((0, import_lib3.$S)((0, import_lib3.$N)(TripleSlash), (0, import_lib3.$Q)(HeregexPart)), function(value) {
13762  return value[1];
13763});
13764function HeregexBody(ctx, state2) {
13765  return (0, import_lib3.$EVENT)(ctx, state2, "HeregexBody", HeregexBody$0);
13766}
13767var HeregexPart$0 = RegularExpressionClass;
13768var HeregexPart$1 = (0, import_lib3.$T)((0, import_lib3.$S)(CoffeeStringSubstitution), function(value) {
13769  return { "type": "Substitution", "children": value[0] };
13770});
13771var HeregexPart$2 = (0, import_lib3.$T)((0, import_lib3.$S)(TemplateSubstitution), function(value) {
13772  return { "type": "Substitution", "children": value[0] };
13773});
13774var HeregexPart$3 = (0, import_lib3.$TR)((0, import_lib3.$EXPECT)($R45, "HeregexPart /(?:\\\\.)/"), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7, $8, $9) {
13775  let token = $0;
13776  switch ($0[1]) {
13777    case "\n":
13778      token = "\\n";
13779      break;
13780    case "\r":
13781      token = "\\r";
13782      break;
13783    case " ":
13784      token = " ";
13785      break;
13786  }
13787  return { $loc, token };
13788});
13789var HeregexPart$4 = (0, import_lib3.$TS)((0, import_lib3.$S)(HeregexComment), function($skip, $loc, $0, $1) {
13790  return { $loc, token: "" };
13791});
13792var HeregexPart$5 = (0, import_lib3.$TR)((0, import_lib3.$EXPECT)($R46, "HeregexPart /[\\s]+/"), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7, $8, $9) {
13793  return { $loc, token: "" };
13794});
13795var HeregexPart$6 = (0, import_lib3.$TR)((0, import_lib3.$EXPECT)($R47, "HeregexPart /\\/(?!\\/\\/)/"), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7, $8, $9) {
13796  return { $loc, token: "\\/" };
13797});
13798var HeregexPart$7 = (0, import_lib3.$TR)((0, import_lib3.$EXPECT)($R48, "HeregexPart /[^[\\/\\s#\\\\]+/"), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7, $8, $9) {
13799  return { $loc, token: $0 };
13800});
13801var HeregexPart$$ = [HeregexPart$0, HeregexPart$1, HeregexPart$2, HeregexPart$3, HeregexPart$4, HeregexPart$5, HeregexPart$6, HeregexPart$7];
13802function HeregexPart(ctx, state2) {
13803  return (0, import_lib3.$EVENT_C)(ctx, state2, "HeregexPart", HeregexPart$$);
13804}
13805var HeregexComment$0 = JSSingleLineComment;
13806var HeregexComment$1 = CoffeeSingleLineComment;
13807var HeregexComment$$ = [HeregexComment$0, HeregexComment$1];
13808function HeregexComment(ctx, state2) {
13809  return (0, import_lib3.$EVENT_C)(ctx, state2, "HeregexComment", HeregexComment$$);
13810}
13811var RegularExpressionBody$0 = (0, import_lib3.$S)((0, import_lib3.$N)((0, import_lib3.$R$0)((0, import_lib3.$EXPECT)($R49, "RegularExpressionBody /[*\\/\\r\\n]/"))), (0, import_lib3.$Q)(RegExpPart));
13812function RegularExpressionBody(ctx, state2) {
13813  return (0, import_lib3.$EVENT)(ctx, state2, "RegularExpressionBody", RegularExpressionBody$0);
13814}
13815var RegExpPart$0 = RegularExpressionClass;
13816var RegExpPart$1 = RegExpCharacter;
13817var RegExpPart$$ = [RegExpPart$0, RegExpPart$1];
13818function RegExpPart(ctx, state2) {
13819  return (0, import_lib3.$EVENT_C)(ctx, state2, "RegExpPart", RegExpPart$$);
13820}
13821var RegExpCharacter$0 = (0, import_lib3.$R$0)((0, import_lib3.$EXPECT)($R50, "RegExpCharacter /(?:\\\\.|[^[\\/\\r\\n])+/"));
13822function RegExpCharacter(ctx, state2) {
13823  return (0, import_lib3.$EVENT)(ctx, state2, "RegExpCharacter", RegExpCharacter$0);
13824}
13825var RegularExpressionFlags$0 = (0, import_lib3.$R$0)((0, import_lib3.$EXPECT)($R51, "RegularExpressionFlags /(?:\\p{ID_Continue}|[\\u200C\\u200D$])*/"));
13826function RegularExpressionFlags(ctx, state2) {
13827  return (0, import_lib3.$EVENT)(ctx, state2, "RegularExpressionFlags", RegularExpressionFlags$0);
13828}
13829var TemplateLiteral$0 = (0, import_lib3.$T)((0, import_lib3.$S)((0, import_lib3.$EXPECT)($R52, "TemplateLiteral /(?=[`'\"])/"), _TemplateLiteral), function(value) {
13830  return value[1];
13831});
13832function TemplateLiteral(ctx, state2) {
13833  return (0, import_lib3.$EVENT)(ctx, state2, "TemplateLiteral", TemplateLiteral$0);
13834}
13835var _TemplateLiteral$0 = (0, import_lib3.$TS)((0, import_lib3.$S)(TripleTick, (0, import_lib3.$Q)((0, import_lib3.$C)(TemplateBlockCharacters, TemplateSubstitution)), TripleTick), function($skip, $loc, $0, $1, $2, $3) {
13836  return dedentBlockSubstitutions($0, config.tab);
13837});
13838var _TemplateLiteral$1 = (0, import_lib3.$TS)((0, import_lib3.$S)(Backtick, (0, import_lib3.$Q)((0, import_lib3.$C)(TemplateCharacters, TemplateSubstitution)), Backtick), function($skip, $loc, $0, $1, $2, $3) {
13839  return {
13840    type: "TemplateLiteral",
13841    children: $0
13842  };
13843});
13844var _TemplateLiteral$2 = (0, import_lib3.$TS)((0, import_lib3.$S)(TripleDoubleQuote, (0, import_lib3.$Q)((0, import_lib3.$C)(TripleDoubleStringCharacters, CoffeeStringSubstitution)), TripleDoubleQuote), function($skip, $loc, $0, $1, $2, $3) {
13845  return dedentBlockSubstitutions($0, config.tab);
13846});
13847var _TemplateLiteral$3 = (0, import_lib3.$TS)((0, import_lib3.$S)(TripleSingleQuote, TripleSingleStringCharacters, TripleSingleQuote), function($skip, $loc, $0, $1, $2, $3) {
13848  var s = $1;
13849  var str = $2;
13850  var e = $3;
13851  return {
13852    type: "TemplateLiteral",
13853    children: [s, dedentBlockString(str, config.tab), e]
13854  };
13855});
13856var _TemplateLiteral$4 = CoffeeInterpolatedDoubleQuotedString;
13857var _TemplateLiteral$$ = [_TemplateLiteral$0, _TemplateLiteral$1, _TemplateLiteral$2, _TemplateLiteral$3, _TemplateLiteral$4];
13858function _TemplateLiteral(ctx, state2) {
13859  return (0, import_lib3.$EVENT_C)(ctx, state2, "_TemplateLiteral", _TemplateLiteral$$);
13860}
13861var TemplateSubstitution$0 = (0, import_lib3.$TS)((0, import_lib3.$S)(SubstitutionStart, AllowAll, (0, import_lib3.$E)((0, import_lib3.$S)(PostfixedExpression, __, CloseBrace)), RestoreAll), function($skip, $loc, $0, $1, $2, $3, $4) {
13862  if (!$3)
13863    return $skip;
13864  return [$1, ...$3];
13865});
13866function TemplateSubstitution(ctx, state2) {
13867  return (0, import_lib3.$EVENT)(ctx, state2, "TemplateSubstitution", TemplateSubstitution$0);
13868}
13869var TemplateCharacters$0 = (0, import_lib3.$TR)((0, import_lib3.$EXPECT)($R53, "TemplateCharacters /(?:\\$(?!\\{)|\\\\.|[^$`])+/"), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7, $8, $9) {
13870  return { $loc, token: $0 };
13871});
13872function TemplateCharacters(ctx, state2) {
13873  return (0, import_lib3.$EVENT)(ctx, state2, "TemplateCharacters", TemplateCharacters$0);
13874}
13875var TemplateBlockCharacters$0 = (0, import_lib3.$TR)((0, import_lib3.$EXPECT)($R54, "TemplateBlockCharacters /(?:\\$(?!\\{)|`(?!``)|\\\\.|[^$`])+/"), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7, $8, $9) {
13876  return { $loc, token: $0 };
13877});
13878function TemplateBlockCharacters(ctx, state2) {
13879  return (0, import_lib3.$EVENT)(ctx, state2, "TemplateBlockCharacters", TemplateBlockCharacters$0);
13880}
13881var ReservedWord$0 = (0, import_lib3.$S)((0, import_lib3.$R$0)((0, import_lib3.$EXPECT)($R55, "ReservedWord /(?:on|off|yes|no)(?!\\p{ID_Continue})/")), CoffeeBooleansEnabled);
13882var ReservedWord$1 = (0, import_lib3.$S)((0, import_lib3.$R$0)((0, import_lib3.$EXPECT)($R56, "ReservedWord /(?:isnt)(?!\\p{ID_Continue})/")), CoffeeIsntEnabled);
13883var ReservedWord$2 = (0, import_lib3.$S)((0, import_lib3.$R$0)((0, import_lib3.$EXPECT)($R57, "ReservedWord /(?:by)(?!\\p{ID_Continue})/")), CoffeeForLoopsEnabled);
13884var ReservedWord$3 = (0, import_lib3.$S)((0, import_lib3.$R$0)((0, import_lib3.$EXPECT)($R58, "ReservedWord /(?:of)(?!\\p{ID_Continue})/")), CoffeeOfEnabled);
13885var ReservedWord$4 = (0, import_lib3.$R$0)((0, import_lib3.$EXPECT)($R59, "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})/"));
13886var ReservedWord$$ = [ReservedWord$0, ReservedWord$1, ReservedWord$2, ReservedWord$3, ReservedWord$4];
13887function ReservedWord(ctx, state2) {
13888  return (0, import_lib3.$EVENT_C)(ctx, state2, "ReservedWord", ReservedWord$$);
13889}
13890var Comment$0 = (0, import_lib3.$T)((0, import_lib3.$S)((0, import_lib3.$EXPECT)($R60, "Comment /(?=\\/|#)/"), _Comment), function(value) {
13891  return value[1];
13892});
13893function Comment(ctx, state2) {
13894  return (0, import_lib3.$EVENT)(ctx, state2, "Comment", Comment$0);
13895}
13896var _Comment$0 = MultiLineComment;
13897var _Comment$1 = SingleLineComment;
13898var _Comment$$ = [_Comment$0, _Comment$1];
13899function _Comment(ctx, state2) {
13900  return (0, import_lib3.$EVENT_C)(ctx, state2, "_Comment", _Comment$$);
13901}
13902var SingleLineComment$0 = JSSingleLineComment;
13903var SingleLineComment$1 = (0, import_lib3.$S)(CoffeeCommentEnabled, CoffeeSingleLineComment);
13904var SingleLineComment$$ = [SingleLineComment$0, SingleLineComment$1];
13905function SingleLineComment(ctx, state2) {
13906  return (0, import_lib3.$EVENT_C)(ctx, state2, "SingleLineComment", SingleLineComment$$);
13907}
13908var JSSingleLineComment$0 = (0, import_lib3.$TR)((0, import_lib3.$EXPECT)($R61, "JSSingleLineComment /\\/\\/(?!\\/)[^\\r\\n]*/"), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7, $8, $9) {
13909  return { type: "Comment", $loc, token: $0 };
13910});
13911function JSSingleLineComment(ctx, state2) {
13912  return (0, import_lib3.$EVENT)(ctx, state2, "JSSingleLineComment", JSSingleLineComment$0);
13913}
13914var MultiLineComment$0 = JSMultiLineComment;
13915var MultiLineComment$1 = CoffeeMultiLineComment;
13916var MultiLineComment$$ = [MultiLineComment$0, MultiLineComment$1];
13917function MultiLineComment(ctx, state2) {
13918  return (0, import_lib3.$EVENT_C)(ctx, state2, "MultiLineComment", MultiLineComment$$);
13919}
13920var JSMultiLineComment$0 = (0, import_lib3.$TV)((0, import_lib3.$TEXT)((0, import_lib3.$S)((0, import_lib3.$EXPECT)($L122, 'JSMultiLineComment "/*"'), (0, import_lib3.$Q)((0, import_lib3.$S)((0, import_lib3.$N)((0, import_lib3.$EXPECT)($L123, 'JSMultiLineComment "*/"')), (0, import_lib3.$EXPECT)($R62, "JSMultiLineComment /./"))), (0, import_lib3.$EXPECT)($L123, 'JSMultiLineComment "*/"'))), function($skip, $loc, $0, $1) {
13921  return { type: "Comment", $loc, token: $1 };
13922});
13923function JSMultiLineComment(ctx, state2) {
13924  return (0, import_lib3.$EVENT)(ctx, state2, "JSMultiLineComment", JSMultiLineComment$0);
13925}
13926var CoffeeSingleLineComment$0 = (0, import_lib3.$TR)((0, import_lib3.$EXPECT)($R63, "CoffeeSingleLineComment /#(?!##(?!#))([^\\r\\n]*)/"), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7, $8, $9) {
13927  return { type: "Comment", $loc, token: `//${$1}` };
13928});
13929function CoffeeSingleLineComment(ctx, state2) {
13930  return (0, import_lib3.$EVENT)(ctx, state2, "CoffeeSingleLineComment", CoffeeSingleLineComment$0);
13931}
13932var CoffeeMultiLineComment$0 = (0, import_lib3.$TS)((0, import_lib3.$S)(CoffeeHereCommentStart, (0, import_lib3.$TEXT)((0, import_lib3.$EXPECT)($R64, "CoffeeMultiLineComment /[^]*?###/"))), function($skip, $loc, $0, $1, $2) {
13933  $2 = $2.slice(0, $2.length - 3).replace(/\*\//g, "* /");
13934  return { type: "Comment", $loc, token: `/*${$2}*/` };
13935});
13936function CoffeeMultiLineComment(ctx, state2) {
13937  return (0, import_lib3.$EVENT)(ctx, state2, "CoffeeMultiLineComment", CoffeeMultiLineComment$0);
13938}
13939var CoffeeHereCommentStart$0 = (0, import_lib3.$R$0)((0, import_lib3.$EXPECT)($R65, "CoffeeHereCommentStart /###(?!#)/"));
13940function CoffeeHereCommentStart(ctx, state2) {
13941  return (0, import_lib3.$EVENT)(ctx, state2, "CoffeeHereCommentStart", CoffeeHereCommentStart$0);
13942}
13943var InlineComment$0 = (0, import_lib3.$TR)((0, import_lib3.$EXPECT)($R66, "InlineComment /\\/\\*(?:(?!\\*\\/)[^\\r\\n])*\\*\\//"), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7, $8, $9) {
13944  return { $loc, token: $0 };
13945});
13946function InlineComment(ctx, state2) {
13947  return (0, import_lib3.$EVENT)(ctx, state2, "InlineComment", InlineComment$0);
13948}
13949var RestOfLine$0 = (0, import_lib3.$S)((0, import_lib3.$Q)((0, import_lib3.$C)(NonNewlineWhitespace, Comment)), EOL);
13950function RestOfLine(ctx, state2) {
13951  return (0, import_lib3.$EVENT)(ctx, state2, "RestOfLine", RestOfLine$0);
13952}
13953var TrailingComment$0 = (0, import_lib3.$S)((0, import_lib3.$E)(_), (0, import_lib3.$E)(SingleLineComment));
13954function TrailingComment(ctx, state2) {
13955  return (0, import_lib3.$EVENT)(ctx, state2, "TrailingComment", TrailingComment$0);
13956}
13957var _$0 = (0, import_lib3.$T)((0, import_lib3.$S)((0, import_lib3.$EXPECT)($R67, "_ /(?=[ \\t\\/\\\\])/"), (0, import_lib3.$P)((0, import_lib3.$C)(NonNewlineWhitespace, InlineComment))), function(value) {
13958  return value[1];
13959});
13960function _(ctx, state2) {
13961  return (0, import_lib3.$EVENT)(ctx, state2, "_", _$0);
13962}
13963var NonNewlineWhitespace$0 = (0, import_lib3.$TR)((0, import_lib3.$EXPECT)($R68, "NonNewlineWhitespace /[ \\t]+/"), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7, $8, $9) {
13964  return { $loc, token: $0 };
13965});
13966var NonNewlineWhitespace$1 = (0, import_lib3.$T)((0, import_lib3.$S)((0, import_lib3.$EXPECT)($L124, 'NonNewlineWhitespace "\\\\\\\\"'), CoffeeLineContinuationEnabled, EOL), function(value) {
13967  return " ";
13968});
13969var NonNewlineWhitespace$$ = [NonNewlineWhitespace$0, NonNewlineWhitespace$1];
13970function NonNewlineWhitespace(ctx, state2) {
13971  return (0, import_lib3.$EVENT_C)(ctx, state2, "NonNewlineWhitespace", NonNewlineWhitespace$$);
13972}
13973var Trimmed_$0 = (0, import_lib3.$TV)(_, function($skip, $loc, $0, $1) {
13974  var ws = $0;
13975  return insertTrimmingSpace(ws, "");
13976});
13977function Trimmed_(ctx, state2) {
13978  return (0, import_lib3.$EVENT)(ctx, state2, "Trimmed_", Trimmed_$0);
13979}
13980var __$0 = (0, import_lib3.$T)((0, import_lib3.$S)((0, import_lib3.$EXPECT)($R69, "__ /(?=\\s|\\/|#)/"), (0, import_lib3.$Q)((0, import_lib3.$C)(Whitespace, Comment))), function(value) {
13981  return value[1];
13982});
13983var __$1 = (0, import_lib3.$EXPECT)($L0, '__ ""');
13984var __$$ = [__$0, __$1];
13985function __(ctx, state2) {
13986  return (0, import_lib3.$EVENT_C)(ctx, state2, "__", __$$);
13987}
13988var Whitespace$0 = (0, import_lib3.$TR)((0, import_lib3.$EXPECT)($R46, "Whitespace /[\\s]+/"), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7, $8, $9) {
13989  return { $loc, token: $0 };
13990});
13991function Whitespace(ctx, state2) {
13992  return (0, import_lib3.$EVENT)(ctx, state2, "Whitespace", Whitespace$0);
13993}
13994var ExpressionDelimiter$0 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$E)(_), Semicolon, InsertComma, TrailingComment), function($skip, $loc, $0, $1, $2, $3, $4) {
13995  return [$1, $3, $4];
13996});
13997var ExpressionDelimiter$1 = (0, import_lib3.$T)((0, import_lib3.$S)((0, import_lib3.$Y)(EOS), InsertComma), function(value) {
13998  return value[1];
13999});
14000var ExpressionDelimiter$$ = [ExpressionDelimiter$0, ExpressionDelimiter$1];
14001function ExpressionDelimiter(ctx, state2) {
14002  return (0, import_lib3.$EVENT_C)(ctx, state2, "ExpressionDelimiter", ExpressionDelimiter$$);
14003}
14004var SimpleStatementDelimiter$0 = (0, import_lib3.$Y)(EOS);
14005var SimpleStatementDelimiter$1 = SemicolonDelimiter;
14006var SimpleStatementDelimiter$$ = [SimpleStatementDelimiter$0, SimpleStatementDelimiter$1];
14007function SimpleStatementDelimiter(ctx, state2) {
14008  return (0, import_lib3.$EVENT_C)(ctx, state2, "SimpleStatementDelimiter", SimpleStatementDelimiter$$);
14009}
14010var StatementDelimiter$0 = (0, import_lib3.$Y)(EOS);
14011var StatementDelimiter$1 = SemicolonDelimiter;
14012var StatementDelimiter$2 = (0, import_lib3.$Y)((0, import_lib3.$S)((0, import_lib3.$E)(_), (0, import_lib3.$C)((0, import_lib3.$EXPECT)($L36, 'StatementDelimiter "}"'), (0, import_lib3.$EXPECT)($L125, 'StatementDelimiter ")"'), (0, import_lib3.$EXPECT)($L45, 'StatementDelimiter "]"'))));
14013var StatementDelimiter$$ = [StatementDelimiter$0, StatementDelimiter$1, StatementDelimiter$2];
14014function StatementDelimiter(ctx, state2) {
14015  return (0, import_lib3.$EVENT_C)(ctx, state2, "StatementDelimiter", StatementDelimiter$$);
14016}
14017var SemicolonDelimiter$0 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$E)(_), Semicolon, TrailingComment), function($skip, $loc, $0, $1, $2, $3) {
14018  return {
14019    type: "SemicolonDelimiter",
14020    children: $0
14021  };
14022});
14023function SemicolonDelimiter(ctx, state2) {
14024  return (0, import_lib3.$EVENT)(ctx, state2, "SemicolonDelimiter", SemicolonDelimiter$0);
14025}
14026var NonIdContinue$0 = (0, import_lib3.$R$0)((0, import_lib3.$EXPECT)($R70, "NonIdContinue /(?!\\p{ID_Continue})/"));
14027function NonIdContinue(ctx, state2) {
14028  return (0, import_lib3.$EVENT)(ctx, state2, "NonIdContinue", NonIdContinue$0);
14029}
14030var Loc$0 = (0, import_lib3.$TV)((0, import_lib3.$EXPECT)($L0, 'Loc ""'), function($skip, $loc, $0, $1) {
14031  return { $loc, token: "" };
14032});
14033function Loc(ctx, state2) {
14034  return (0, import_lib3.$EVENT)(ctx, state2, "Loc", Loc$0);
14035}
14036var Abstract$0 = (0, import_lib3.$TV)((0, import_lib3.$TEXT)((0, import_lib3.$S)((0, import_lib3.$EXPECT)($L126, 'Abstract "abstract"'), NonIdContinue, (0, import_lib3.$E)((0, import_lib3.$EXPECT)($L18, 'Abstract " "')))), function($skip, $loc, $0, $1) {
14037  return { $loc, token: $1, ts: true };
14038});
14039function Abstract(ctx, state2) {
14040  return (0, import_lib3.$EVENT)(ctx, state2, "Abstract", Abstract$0);
14041}
14042var Ampersand$0 = (0, import_lib3.$TV)((0, import_lib3.$EXPECT)($L108, 'Ampersand "&"'), function($skip, $loc, $0, $1) {
14043  return { $loc, token: $1 };
14044});
14045function Ampersand(ctx, state2) {
14046  return (0, import_lib3.$EVENT)(ctx, state2, "Ampersand", Ampersand$0);
14047}
14048var As$0 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$EXPECT)($L127, 'As "as"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
14049  return { $loc, token: $1 };
14050});
14051function As(ctx, state2) {
14052  return (0, import_lib3.$EVENT)(ctx, state2, "As", As$0);
14053}
14054var At$0 = (0, import_lib3.$TV)((0, import_lib3.$EXPECT)($L128, 'At "@"'), function($skip, $loc, $0, $1) {
14055  return { $loc, token: $1 };
14056});
14057function At(ctx, state2) {
14058  return (0, import_lib3.$EVENT)(ctx, state2, "At", At$0);
14059}
14060var AtAt$0 = (0, import_lib3.$TV)((0, import_lib3.$EXPECT)($L129, 'AtAt "@@"'), function($skip, $loc, $0, $1) {
14061  return { $loc, token: "@" };
14062});
14063function AtAt(ctx, state2) {
14064  return (0, import_lib3.$EVENT)(ctx, state2, "AtAt", AtAt$0);
14065}
14066var Async$0 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$EXPECT)($L130, 'Async "async"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
14067  return { $loc, token: $1, type: "Async" };
14068});
14069function Async(ctx, state2) {
14070  return (0, import_lib3.$EVENT)(ctx, state2, "Async", Async$0);
14071}
14072var Await$0 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$EXPECT)($L131, 'Await "await"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
14073  return { $loc, token: $1, type: "Await" };
14074});
14075function Await(ctx, state2) {
14076  return (0, import_lib3.$EVENT)(ctx, state2, "Await", Await$0);
14077}
14078var Backtick$0 = (0, import_lib3.$TV)((0, import_lib3.$EXPECT)($L132, 'Backtick "`"'), function($skip, $loc, $0, $1) {
14079  return { $loc, token: $1 };
14080});
14081function Backtick(ctx, state2) {
14082  return (0, import_lib3.$EVENT)(ctx, state2, "Backtick", Backtick$0);
14083}
14084var By$0 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$EXPECT)($L133, 'By "by"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
14085  return { $loc, token: $1 };
14086});
14087function By(ctx, state2) {
14088  return (0, import_lib3.$EVENT)(ctx, state2, "By", By$0);
14089}
14090var Caret$0 = (0, import_lib3.$TV)((0, import_lib3.$EXPECT)($L22, 'Caret "^"'), function($skip, $loc, $0, $1) {
14091  return { $loc, token: $1 };
14092});
14093function Caret(ctx, state2) {
14094  return (0, import_lib3.$EVENT)(ctx, state2, "Caret", Caret$0);
14095}
14096var Case$0 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$EXPECT)($L134, 'Case "case"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
14097  return { $loc, token: $1 };
14098});
14099function Case(ctx, state2) {
14100  return (0, import_lib3.$EVENT)(ctx, state2, "Case", Case$0);
14101}
14102var Catch$0 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$EXPECT)($L135, 'Catch "catch"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
14103  return { $loc, token: $1 };
14104});
14105function Catch(ctx, state2) {
14106  return (0, import_lib3.$EVENT)(ctx, state2, "Catch", Catch$0);
14107}
14108var Class$0 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$EXPECT)($L136, 'Class "class"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
14109  return { $loc, token: $1 };
14110});
14111function Class(ctx, state2) {
14112  return (0, import_lib3.$EVENT)(ctx, state2, "Class", Class$0);
14113}
14114var CloseAngleBracket$0 = (0, import_lib3.$TV)((0, import_lib3.$EXPECT)($L44, 'CloseAngleBracket ">"'), function($skip, $loc, $0, $1) {
14115  return { $loc, token: $1 };
14116});
14117function CloseAngleBracket(ctx, state2) {
14118  return (0, import_lib3.$EVENT)(ctx, state2, "CloseAngleBracket", CloseAngleBracket$0);
14119}
14120var CloseBrace$0 = (0, import_lib3.$TV)((0, import_lib3.$EXPECT)($L36, 'CloseBrace "}"'), function($skip, $loc, $0, $1) {
14121  return { $loc, token: $1 };
14122});
14123function CloseBrace(ctx, state2) {
14124  return (0, import_lib3.$EVENT)(ctx, state2, "CloseBrace", CloseBrace$0);
14125}
14126var CloseBracket$0 = (0, import_lib3.$TV)((0, import_lib3.$EXPECT)($L45, 'CloseBracket "]"'), function($skip, $loc, $0, $1) {
14127  return { $loc, token: $1 };
14128});
14129function CloseBracket(ctx, state2) {
14130  return (0, import_lib3.$EVENT)(ctx, state2, "CloseBracket", CloseBracket$0);
14131}
14132var CloseParen$0 = (0, import_lib3.$TV)((0, import_lib3.$EXPECT)($L125, 'CloseParen ")"'), function($skip, $loc, $0, $1) {
14133  return { $loc, token: $1 };
14134});
14135function CloseParen(ctx, state2) {
14136  return (0, import_lib3.$EVENT)(ctx, state2, "CloseParen", CloseParen$0);
14137}
14138var CoffeeSubstitutionStart$0 = (0, import_lib3.$TV)((0, import_lib3.$EXPECT)($L137, 'CoffeeSubstitutionStart "\#{"'), function($skip, $loc, $0, $1) {
14139  return { $loc, token: "${" };
14140});
14141function CoffeeSubstitutionStart(ctx, state2) {
14142  return (0, import_lib3.$EVENT)(ctx, state2, "CoffeeSubstitutionStart", CoffeeSubstitutionStart$0);
14143}
14144var Colon$0 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$EXPECT)($L16, 'Colon ":"'), (0, import_lib3.$N)((0, import_lib3.$EXPECT)($R71, "Colon /[=:]/"))), function($skip, $loc, $0, $1, $2) {
14145  return { $loc, token: $1 };
14146});
14147function Colon(ctx, state2) {
14148  return (0, import_lib3.$EVENT)(ctx, state2, "Colon", Colon$0);
14149}
14150var Comma$0 = (0, import_lib3.$TV)((0, import_lib3.$EXPECT)($L17, 'Comma ","'), function($skip, $loc, $0, $1) {
14151  return { $loc, token: $1 };
14152});
14153function Comma(ctx, state2) {
14154  return (0, import_lib3.$EVENT)(ctx, state2, "Comma", Comma$0);
14155}
14156var Comptime$0 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$EXPECT)($L138, 'Comptime "comptime"'), NonIdContinue, (0, import_lib3.$N)((0, import_lib3.$EXPECT)($L16, 'Comptime ":"'))), function($skip, $loc, $0, $1, $2, $3) {
14157  return { $loc, token: $1 };
14158});
14159function Comptime(ctx, state2) {
14160  return (0, import_lib3.$EVENT)(ctx, state2, "Comptime", Comptime$0);
14161}
14162var ConstructorShorthand$0 = (0, import_lib3.$TV)((0, import_lib3.$EXPECT)($L128, 'ConstructorShorthand "@"'), function($skip, $loc, $0, $1) {
14163  return { $loc, token: "constructor" };
14164});
14165function ConstructorShorthand(ctx, state2) {
14166  return (0, import_lib3.$EVENT)(ctx, state2, "ConstructorShorthand", ConstructorShorthand$0);
14167}
14168var Declare$0 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$EXPECT)($L139, 'Declare "declare"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
14169  return { $loc, token: $1 };
14170});
14171function Declare(ctx, state2) {
14172  return (0, import_lib3.$EVENT)(ctx, state2, "Declare", Declare$0);
14173}
14174var Default$0 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$EXPECT)($L140, 'Default "default"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
14175  return { $loc, token: $1 };
14176});
14177function Default(ctx, state2) {
14178  return (0, import_lib3.$EVENT)(ctx, state2, "Default", Default$0);
14179}
14180var Delete$0 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$EXPECT)($L141, 'Delete "delete"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
14181  return { $loc, token: $1 };
14182});
14183function Delete(ctx, state2) {
14184  return (0, import_lib3.$EVENT)(ctx, state2, "Delete", Delete$0);
14185}
14186var Do$0 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$EXPECT)($L142, 'Do "do"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
14187  return { $loc, token: $1 };
14188});
14189function Do(ctx, state2) {
14190  return (0, import_lib3.$EVENT)(ctx, state2, "Do", Do$0);
14191}
14192var Dot$0 = (0, import_lib3.$TV)((0, import_lib3.$EXPECT)($L7, 'Dot "."'), function($skip, $loc, $0, $1) {
14193  return { $loc, token: $1 };
14194});
14195var Dot$1 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$EXPECT)($R72, "Dot /['\u2019]s/"), Trimmed_), function($skip, $loc, $0, $1, $2) {
14196  var ws = $2;
14197  return [
14198    { $loc, token: "." },
14199    ws
14200  ];
14201});
14202var Dot$$ = [Dot$0, Dot$1];
14203function Dot(ctx, state2) {
14204  return (0, import_lib3.$EVENT_C)(ctx, state2, "Dot", Dot$$);
14205}
14206var DotDot$0 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$EXPECT)($L143, 'DotDot ".."'), (0, import_lib3.$N)((0, import_lib3.$EXPECT)($L7, 'DotDot "."'))), function($skip, $loc, $0, $1, $2) {
14207  return { $loc, token: $1 };
14208});
14209var DotDot$1 = (0, import_lib3.$TV)((0, import_lib3.$EXPECT)($L144, 'DotDot "\u2025"'), function($skip, $loc, $0, $1) {
14210  return { $loc, token: ".." };
14211});
14212var DotDot$$ = [DotDot$0, DotDot$1];
14213function DotDot(ctx, state2) {
14214  return (0, import_lib3.$EVENT_C)(ctx, state2, "DotDot", DotDot$$);
14215}
14216var DotDotDot$0 = (0, import_lib3.$TV)((0, import_lib3.$EXPECT)($L145, 'DotDotDot "..."'), function($skip, $loc, $0, $1) {
14217  return { $loc, token: $1 };
14218});
14219var DotDotDot$1 = (0, import_lib3.$TV)((0, import_lib3.$EXPECT)($L146, 'DotDotDot "\u2026"'), function($skip, $loc, $0, $1) {
14220  return { $loc, token: "..." };
14221});
14222var DotDotDot$$ = [DotDotDot$0, DotDotDot$1];
14223function DotDotDot(ctx, state2) {
14224  return (0, import_lib3.$EVENT_C)(ctx, state2, "DotDotDot", DotDotDot$$);
14225}
14226var DoubleColon$0 = (0, import_lib3.$TV)((0, import_lib3.$EXPECT)($L147, 'DoubleColon "::"'), function($skip, $loc, $0, $1) {
14227  return { $loc, token: $1 };
14228});
14229function DoubleColon(ctx, state2) {
14230  return (0, import_lib3.$EVENT)(ctx, state2, "DoubleColon", DoubleColon$0);
14231}
14232var DoubleQuote$0 = (0, import_lib3.$TV)((0, import_lib3.$EXPECT)($L148, 'DoubleQuote "\\\\\\""'), function($skip, $loc, $0, $1) {
14233  return { $loc, token: $1 };
14234});
14235function DoubleQuote(ctx, state2) {
14236  return (0, import_lib3.$EVENT)(ctx, state2, "DoubleQuote", DoubleQuote$0);
14237}
14238var Each$0 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$EXPECT)($L149, 'Each "each"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
14239  return { $loc, token: $1 };
14240});
14241function Each(ctx, state2) {
14242  return (0, import_lib3.$EVENT)(ctx, state2, "Each", Each$0);
14243}
14244var Else$0 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$EXPECT)($L150, 'Else "else"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
14245  return { $loc, token: $1 };
14246});
14247function Else(ctx, state2) {
14248  return (0, import_lib3.$EVENT)(ctx, state2, "Else", Else$0);
14249}
14250var Equals$0 = (0, import_lib3.$TV)((0, import_lib3.$EXPECT)($L3, 'Equals "="'), function($skip, $loc, $0, $1) {
14251  return { $loc, token: $1 };
14252});
14253function Equals(ctx, state2) {
14254  return (0, import_lib3.$EVENT)(ctx, state2, "Equals", Equals$0);
14255}
14256var ExclamationPoint$0 = (0, import_lib3.$TV)((0, import_lib3.$EXPECT)($L151, 'ExclamationPoint "!"'), function($skip, $loc, $0, $1) {
14257  return { $loc, token: $1 };
14258});
14259function ExclamationPoint(ctx, state2) {
14260  return (0, import_lib3.$EVENT)(ctx, state2, "ExclamationPoint", ExclamationPoint$0);
14261}
14262var Export$0 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$EXPECT)($L152, 'Export "export"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
14263  return { $loc, token: $1 };
14264});
14265function Export(ctx, state2) {
14266  return (0, import_lib3.$EVENT)(ctx, state2, "Export", Export$0);
14267}
14268var Extends$0 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$EXPECT)($L153, 'Extends "extends"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
14269  return { $loc, token: $1 };
14270});
14271function Extends(ctx, state2) {
14272  return (0, import_lib3.$EVENT)(ctx, state2, "Extends", Extends$0);
14273}
14274var Finally$0 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$EXPECT)($L154, 'Finally "finally"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
14275  return { $loc, token: $1 };
14276});
14277function Finally(ctx, state2) {
14278  return (0, import_lib3.$EVENT)(ctx, state2, "Finally", Finally$0);
14279}
14280var For$0 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$EXPECT)($L155, 'For "for"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
14281  return { $loc, token: $1 };
14282});
14283function For(ctx, state2) {
14284  return (0, import_lib3.$EVENT)(ctx, state2, "For", For$0);
14285}
14286var From$0 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$EXPECT)($L156, 'From "from"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
14287  return { $loc, token: $1 };
14288});
14289function From(ctx, state2) {
14290  return (0, import_lib3.$EVENT)(ctx, state2, "From", From$0);
14291}
14292var Function$0 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$EXPECT)($L157, 'Function "function"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
14293  return { $loc, token: $1 };
14294});
14295function Function2(ctx, state2) {
14296  return (0, import_lib3.$EVENT)(ctx, state2, "Function", Function$0);
14297}
14298var GetOrSet$0 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$C)((0, import_lib3.$EXPECT)($L158, 'GetOrSet "get"'), (0, import_lib3.$EXPECT)($L159, 'GetOrSet "set"')), NonIdContinue), function($skip, $loc, $0, $1, $2) {
14299  return { $loc, token: $1, type: "GetOrSet" };
14300});
14301function GetOrSet(ctx, state2) {
14302  return (0, import_lib3.$EVENT)(ctx, state2, "GetOrSet", GetOrSet$0);
14303}
14304var Hash$0 = (0, import_lib3.$TV)((0, import_lib3.$EXPECT)($L160, 'Hash "\#"'), function($skip, $loc, $0, $1) {
14305  return { $loc, token: $1 };
14306});
14307function Hash(ctx, state2) {
14308  return (0, import_lib3.$EVENT)(ctx, state2, "Hash", Hash$0);
14309}
14310var If$0 = (0, import_lib3.$TV)((0, import_lib3.$TEXT)((0, import_lib3.$S)((0, import_lib3.$EXPECT)($L161, 'If "if"'), NonIdContinue, (0, import_lib3.$E)((0, import_lib3.$EXPECT)($L18, 'If " "')))), function($skip, $loc, $0, $1) {
14311  return { $loc, token: $1 };
14312});
14313function If(ctx, state2) {
14314  return (0, import_lib3.$EVENT)(ctx, state2, "If", If$0);
14315}
14316var Import$0 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$EXPECT)($L15, 'Import "import"'), (0, import_lib3.$Y)((0, import_lib3.$EXPECT)($R73, "Import /\\s/"))), function($skip, $loc, $0, $1, $2) {
14317  return { $loc, token: $1 };
14318});
14319function Import(ctx, state2) {
14320  return (0, import_lib3.$EVENT)(ctx, state2, "Import", Import$0);
14321}
14322var In$0 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$EXPECT)($L162, 'In "in"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
14323  return { $loc, token: $1 };
14324});
14325function In(ctx, state2) {
14326  return (0, import_lib3.$EVENT)(ctx, state2, "In", In$0);
14327}
14328var Infer$0 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$EXPECT)($L163, 'Infer "infer"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
14329  return { $loc, token: $1 };
14330});
14331function Infer(ctx, state2) {
14332  return (0, import_lib3.$EVENT)(ctx, state2, "Infer", Infer$0);
14333}
14334var LetOrConst$0 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$C)((0, import_lib3.$EXPECT)($L164, 'LetOrConst "let"'), (0, import_lib3.$EXPECT)($L165, 'LetOrConst "const"')), NonIdContinue), function($skip, $loc, $0, $1, $2) {
14335  return { $loc, token: $1 };
14336});
14337function LetOrConst(ctx, state2) {
14338  return (0, import_lib3.$EVENT)(ctx, state2, "LetOrConst", LetOrConst$0);
14339}
14340var Const$0 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$EXPECT)($L165, 'Const "const"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
14341  return { $loc, token: $1 };
14342});
14343function Const(ctx, state2) {
14344  return (0, import_lib3.$EVENT)(ctx, state2, "Const", Const$0);
14345}
14346var Is$0 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$EXPECT)($L166, 'Is "is"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
14347  return { $loc, token: $1 };
14348});
14349function Is(ctx, state2) {
14350  return (0, import_lib3.$EVENT)(ctx, state2, "Is", Is$0);
14351}
14352var LetOrConstOrVar$0 = LetOrConst;
14353var LetOrConstOrVar$1 = Var;
14354var LetOrConstOrVar$$ = [LetOrConstOrVar$0, LetOrConstOrVar$1];
14355function LetOrConstOrVar(ctx, state2) {
14356  return (0, import_lib3.$EVENT_C)(ctx, state2, "LetOrConstOrVar", LetOrConstOrVar$$);
14357}
14358var Like$0 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$EXPECT)($L167, 'Like "like"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
14359  return { $loc, token: $1 };
14360});
14361function Like(ctx, state2) {
14362  return (0, import_lib3.$EVENT)(ctx, state2, "Like", Like$0);
14363}
14364var Loop$0 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$EXPECT)($L168, 'Loop "loop"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
14365  return { $loc, token: "while" };
14366});
14367function Loop(ctx, state2) {
14368  return (0, import_lib3.$EVENT)(ctx, state2, "Loop", Loop$0);
14369}
14370var New$0 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$EXPECT)($L169, 'New "new"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
14371  return { $loc, token: $1 };
14372});
14373function New(ctx, state2) {
14374  return (0, import_lib3.$EVENT)(ctx, state2, "New", New$0);
14375}
14376var Not$0 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$EXPECT)($L170, 'Not "not"'), NonIdContinue, (0, import_lib3.$N)((0, import_lib3.$S)((0, import_lib3.$E)(_), (0, import_lib3.$EXPECT)($L16, 'Not ":"')))), function($skip, $loc, $0, $1, $2, $3) {
14377  return { $loc, token: "!" };
14378});
14379function Not(ctx, state2) {
14380  return (0, import_lib3.$EVENT)(ctx, state2, "Not", Not$0);
14381}
14382var Of$0 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$EXPECT)($L171, 'Of "of"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
14383  return { $loc, token: $1 };
14384});
14385function Of(ctx, state2) {
14386  return (0, import_lib3.$EVENT)(ctx, state2, "Of", Of$0);
14387}
14388var OpenAngleBracket$0 = (0, import_lib3.$TV)((0, import_lib3.$EXPECT)($L19, 'OpenAngleBracket "<"'), function($skip, $loc, $0, $1) {
14389  return { $loc, token: $1 };
14390});
14391function OpenAngleBracket(ctx, state2) {
14392  return (0, import_lib3.$EVENT)(ctx, state2, "OpenAngleBracket", OpenAngleBracket$0);
14393}
14394var OpenBrace$0 = (0, import_lib3.$TV)((0, import_lib3.$EXPECT)($L1, 'OpenBrace "{"'), function($skip, $loc, $0, $1) {
14395  return { $loc, token: $1 };
14396});
14397function OpenBrace(ctx, state2) {
14398  return (0, import_lib3.$EVENT)(ctx, state2, "OpenBrace", OpenBrace$0);
14399}
14400var OpenBracket$0 = (0, import_lib3.$TV)((0, import_lib3.$EXPECT)($L172, 'OpenBracket "["'), function($skip, $loc, $0, $1) {
14401  return { $loc, token: $1 };
14402});
14403function OpenBracket(ctx, state2) {
14404  return (0, import_lib3.$EVENT)(ctx, state2, "OpenBracket", OpenBracket$0);
14405}
14406var OpenParen$0 = (0, import_lib3.$TV)((0, import_lib3.$EXPECT)($L4, 'OpenParen "("'), function($skip, $loc, $0, $1) {
14407  return { $loc, token: $1 };
14408});
14409function OpenParen(ctx, state2) {
14410  return (0, import_lib3.$EVENT)(ctx, state2, "OpenParen", OpenParen$0);
14411}
14412var Operator$0 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$EXPECT)($L173, 'Operator "operator"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
14413  return { $loc, token: $1 };
14414});
14415function Operator(ctx, state2) {
14416  return (0, import_lib3.$EVENT)(ctx, state2, "Operator", Operator$0);
14417}
14418var Override$0 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$EXPECT)($L174, 'Override "override"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
14419  return { $loc, token: $1, ts: true };
14420});
14421function Override(ctx, state2) {
14422  return (0, import_lib3.$EVENT)(ctx, state2, "Override", Override$0);
14423}
14424var Own$0 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$EXPECT)($L175, 'Own "own"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
14425  return { $loc, token: $1 };
14426});
14427function Own(ctx, state2) {
14428  return (0, import_lib3.$EVENT)(ctx, state2, "Own", Own$0);
14429}
14430var Public$0 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$EXPECT)($L176, 'Public "public"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
14431  return { $loc, token: $1 };
14432});
14433function Public(ctx, state2) {
14434  return (0, import_lib3.$EVENT)(ctx, state2, "Public", Public$0);
14435}
14436var Private$0 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$EXPECT)($L177, 'Private "private"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
14437  return { $loc, token: $1 };
14438});
14439function Private(ctx, state2) {
14440  return (0, import_lib3.$EVENT)(ctx, state2, "Private", Private$0);
14441}
14442var Protected$0 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$EXPECT)($L178, 'Protected "protected"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
14443  return { $loc, token: $1 };
14444});
14445function Protected(ctx, state2) {
14446  return (0, import_lib3.$EVENT)(ctx, state2, "Protected", Protected$0);
14447}
14448var Pipe$0 = (0, import_lib3.$TV)((0, import_lib3.$C)((0, import_lib3.$EXPECT)($L179, 'Pipe "||>"'), (0, import_lib3.$EXPECT)($L180, 'Pipe "|\u25B7"')), function($skip, $loc, $0, $1) {
14449  return { $loc, token: "||>" };
14450});
14451var Pipe$1 = (0, import_lib3.$TV)((0, import_lib3.$C)((0, import_lib3.$EXPECT)($L181, 'Pipe "|>="'), (0, import_lib3.$EXPECT)($L182, 'Pipe "\u25B7="')), function($skip, $loc, $0, $1) {
14452  return { $loc, token: "|>=" };
14453});
14454var Pipe$2 = (0, import_lib3.$TV)((0, import_lib3.$C)((0, import_lib3.$EXPECT)($L183, 'Pipe "|>"'), (0, import_lib3.$EXPECT)($L184, 'Pipe "\u25B7"')), function($skip, $loc, $0, $1) {
14455  return { $loc, token: "|>" };
14456});
14457var Pipe$$ = [Pipe$0, Pipe$1, Pipe$2];
14458function Pipe(ctx, state2) {
14459  return (0, import_lib3.$EVENT_C)(ctx, state2, "Pipe", Pipe$$);
14460}
14461var QuestionMark$0 = (0, import_lib3.$TV)((0, import_lib3.$EXPECT)($L6, 'QuestionMark "?"'), function($skip, $loc, $0, $1) {
14462  return { $loc, token: $1 };
14463});
14464function QuestionMark(ctx, state2) {
14465  return (0, import_lib3.$EVENT)(ctx, state2, "QuestionMark", QuestionMark$0);
14466}
14467var Readonly$0 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$EXPECT)($L185, 'Readonly "readonly"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
14468  return { $loc, token: $1, ts: true };
14469});
14470function Readonly(ctx, state2) {
14471  return (0, import_lib3.$EVENT)(ctx, state2, "Readonly", Readonly$0);
14472}
14473var Return$0 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$EXPECT)($L186, 'Return "return"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
14474  return { $loc, token: $1 };
14475});
14476function Return(ctx, state2) {
14477  return (0, import_lib3.$EVENT)(ctx, state2, "Return", Return$0);
14478}
14479var Satisfies$0 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$EXPECT)($L187, 'Satisfies "satisfies"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
14480  return { $loc, token: $1 };
14481});
14482function Satisfies(ctx, state2) {
14483  return (0, import_lib3.$EVENT)(ctx, state2, "Satisfies", Satisfies$0);
14484}
14485var Semicolon$0 = (0, import_lib3.$TV)((0, import_lib3.$EXPECT)($L111, 'Semicolon ";"'), function($skip, $loc, $0, $1) {
14486  return { $loc, token: $1 };
14487});
14488function Semicolon(ctx, state2) {
14489  return (0, import_lib3.$EVENT)(ctx, state2, "Semicolon", Semicolon$0);
14490}
14491var SingleQuote$0 = (0, import_lib3.$TV)((0, import_lib3.$EXPECT)($L188, `SingleQuote "'"`), function($skip, $loc, $0, $1) {
14492  return { $loc, token: $1 };
14493});
14494function SingleQuote(ctx, state2) {
14495  return (0, import_lib3.$EVENT)(ctx, state2, "SingleQuote", SingleQuote$0);
14496}
14497var Star$0 = (0, import_lib3.$TV)((0, import_lib3.$EXPECT)($L64, 'Star "*"'), function($skip, $loc, $0, $1) {
14498  return { $loc, token: $1 };
14499});
14500function Star(ctx, state2) {
14501  return (0, import_lib3.$EVENT)(ctx, state2, "Star", Star$0);
14502}
14503var Static$0 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$EXPECT)($L189, 'Static "static"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
14504  return { $loc, token: $1 };
14505});
14506var Static$1 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$EXPECT)($L128, 'Static "@"'), (0, import_lib3.$N)((0, import_lib3.$C)((0, import_lib3.$EXPECT)($L4, 'Static "("'), (0, import_lib3.$EXPECT)($L128, 'Static "@"')))), function($skip, $loc, $0, $1, $2) {
14507  return { $loc, token: "static " };
14508});
14509var Static$$ = [Static$0, Static$1];
14510function Static(ctx, state2) {
14511  return (0, import_lib3.$EVENT_C)(ctx, state2, "Static", Static$$);
14512}
14513var SubstitutionStart$0 = (0, import_lib3.$TV)((0, import_lib3.$EXPECT)($L190, 'SubstitutionStart "${"'), function($skip, $loc, $0, $1) {
14514  return { $loc, token: $1 };
14515});
14516function SubstitutionStart(ctx, state2) {
14517  return (0, import_lib3.$EVENT)(ctx, state2, "SubstitutionStart", SubstitutionStart$0);
14518}
14519var Super$0 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$EXPECT)($L191, 'Super "super"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
14520  return { $loc, token: $1 };
14521});
14522function Super(ctx, state2) {
14523  return (0, import_lib3.$EVENT)(ctx, state2, "Super", Super$0);
14524}
14525var Switch$0 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$EXPECT)($L192, 'Switch "switch"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
14526  return { $loc, token: $1 };
14527});
14528function Switch(ctx, state2) {
14529  return (0, import_lib3.$EVENT)(ctx, state2, "Switch", Switch$0);
14530}
14531var Target$0 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$EXPECT)($L193, 'Target "target"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
14532  return { $loc, token: $1 };
14533});
14534function Target(ctx, state2) {
14535  return (0, import_lib3.$EVENT)(ctx, state2, "Target", Target$0);
14536}
14537var Then$0 = (0, import_lib3.$TS)((0, import_lib3.$S)(__, (0, import_lib3.$EXPECT)($L194, 'Then "then"'), NonIdContinue), function($skip, $loc, $0, $1, $2, $3) {
14538  return { $loc, token: "" };
14539});
14540function Then(ctx, state2) {
14541  return (0, import_lib3.$EVENT)(ctx, state2, "Then", Then$0);
14542}
14543var This$0 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$EXPECT)($L195, 'This "this"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
14544  return { $loc, token: $1 };
14545});
14546function This(ctx, state2) {
14547  return (0, import_lib3.$EVENT)(ctx, state2, "This", This$0);
14548}
14549var Throw$0 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$EXPECT)($L196, 'Throw "throw"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
14550  return { $loc, token: $1 };
14551});
14552function Throw(ctx, state2) {
14553  return (0, import_lib3.$EVENT)(ctx, state2, "Throw", Throw$0);
14554}
14555var TripleDoubleQuote$0 = (0, import_lib3.$TV)((0, import_lib3.$EXPECT)($L197, 'TripleDoubleQuote "\\\\\\"\\\\\\"\\\\\\""'), function($skip, $loc, $0, $1) {
14556  return { $loc, token: "`" };
14557});
14558function TripleDoubleQuote(ctx, state2) {
14559  return (0, import_lib3.$EVENT)(ctx, state2, "TripleDoubleQuote", TripleDoubleQuote$0);
14560}
14561var TripleSingleQuote$0 = (0, import_lib3.$TV)((0, import_lib3.$EXPECT)($L198, `TripleSingleQuote "'''"`), function($skip, $loc, $0, $1) {
14562  return { $loc, token: "`" };
14563});
14564function TripleSingleQuote(ctx, state2) {
14565  return (0, import_lib3.$EVENT)(ctx, state2, "TripleSingleQuote", TripleSingleQuote$0);
14566}
14567var TripleSlash$0 = (0, import_lib3.$TV)((0, import_lib3.$EXPECT)($L199, 'TripleSlash "///"'), function($skip, $loc, $0, $1) {
14568  return { $loc, token: "/" };
14569});
14570function TripleSlash(ctx, state2) {
14571  return (0, import_lib3.$EVENT)(ctx, state2, "TripleSlash", TripleSlash$0);
14572}
14573var TripleTick$0 = (0, import_lib3.$TV)((0, import_lib3.$EXPECT)($L200, 'TripleTick "```"'), function($skip, $loc, $0, $1) {
14574  return { $loc, token: "`" };
14575});
14576function TripleTick(ctx, state2) {
14577  return (0, import_lib3.$EVENT)(ctx, state2, "TripleTick", TripleTick$0);
14578}
14579var Try$0 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$EXPECT)($L201, 'Try "try"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
14580  return { $loc, token: $1 };
14581});
14582function Try(ctx, state2) {
14583  return (0, import_lib3.$EVENT)(ctx, state2, "Try", Try$0);
14584}
14585var Typeof$0 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$EXPECT)($L202, 'Typeof "typeof"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
14586  return { $loc, token: $1 };
14587});
14588function Typeof(ctx, state2) {
14589  return (0, import_lib3.$EVENT)(ctx, state2, "Typeof", Typeof$0);
14590}
14591var Undefined$0 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$EXPECT)($L203, 'Undefined "undefined"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
14592  return { $loc, token: $1 };
14593});
14594function Undefined(ctx, state2) {
14595  return (0, import_lib3.$EVENT)(ctx, state2, "Undefined", Undefined$0);
14596}
14597var Unless$0 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$EXPECT)($L204, 'Unless "unless"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
14598  return { $loc, token: $1, negated: true };
14599});
14600function Unless(ctx, state2) {
14601  return (0, import_lib3.$EVENT)(ctx, state2, "Unless", Unless$0);
14602}
14603var Until$0 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$EXPECT)($L205, 'Until "until"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
14604  return { $loc, token: $1, negated: true };
14605});
14606function Until(ctx, state2) {
14607  return (0, import_lib3.$EVENT)(ctx, state2, "Until", Until$0);
14608}
14609var Using$0 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$EXPECT)($L206, 'Using "using"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
14610  return { $loc, token: $1 };
14611});
14612function Using(ctx, state2) {
14613  return (0, import_lib3.$EVENT)(ctx, state2, "Using", Using$0);
14614}
14615var Var$0 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$EXPECT)($L207, 'Var "var"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
14616  return { $loc, token: $1 };
14617});
14618function Var(ctx, state2) {
14619  return (0, import_lib3.$EVENT)(ctx, state2, "Var", Var$0);
14620}
14621var Void$0 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$EXPECT)($L208, 'Void "void"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
14622  return { $loc, token: $1 };
14623});
14624function Void(ctx, state2) {
14625  return (0, import_lib3.$EVENT)(ctx, state2, "Void", Void$0);
14626}
14627var When$0 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$EXPECT)($L209, 'When "when"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
14628  return { $loc, token: "case" };
14629});
14630function When(ctx, state2) {
14631  return (0, import_lib3.$EVENT)(ctx, state2, "When", When$0);
14632}
14633var While$0 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$EXPECT)($L210, 'While "while"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
14634  return { $loc, token: $1 };
14635});
14636function While(ctx, state2) {
14637  return (0, import_lib3.$EVENT)(ctx, state2, "While", While$0);
14638}
14639var With$0 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$EXPECT)($L116, 'With "with"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
14640  return { $loc, token: $1 };
14641});
14642function With(ctx, state2) {
14643  return (0, import_lib3.$EVENT)(ctx, state2, "With", With$0);
14644}
14645var Yield$0 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$EXPECT)($L211, 'Yield "yield"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
14646  return { $loc, token: $1, type: "Yield" };
14647});
14648function Yield(ctx, state2) {
14649  return (0, import_lib3.$EVENT)(ctx, state2, "Yield", Yield$0);
14650}
14651var JSXImplicitFragment$0 = (0, import_lib3.$TS)((0, import_lib3.$S)(JSXTag, (0, import_lib3.$Q)((0, import_lib3.$S)(Nested, JSXTag))), function($skip, $loc, $0, $1, $2) {
14652  const jsx = $2.length === 0 ? $1 : {
14653    type: "JSXFragment",
14654    children: [
14655      "<>\n",
14656      state.currentIndent.token,
14657      ...$0,
14658      "\n",
14659      state.currentIndent.token,
14660      "</>"
14661    ],
14662    jsxChildren: [$1].concat($2.map(([, tag]) => tag))
14663  };
14664  const type = typeOfJSX(jsx, config, getHelperRef);
14665  return type ? [
14666    { ts: true, children: ["("] },
14667    jsx,
14668    { ts: true, children: [" as any as ", type, ")"] }
14669  ] : jsx;
14670});
14671function JSXImplicitFragment(ctx, state2) {
14672  return (0, import_lib3.$EVENT)(ctx, state2, "JSXImplicitFragment", JSXImplicitFragment$0);
14673}
14674var JSXTag$0 = (0, import_lib3.$T)((0, import_lib3.$S)((0, import_lib3.$EXPECT)($R74, "JSXTag /(?=[<])/"), _JSXTag), function(value) {
14675  return value[1];
14676});
14677function JSXTag(ctx, state2) {
14678  return (0, import_lib3.$EVENT)(ctx, state2, "JSXTag", JSXTag$0);
14679}
14680var _JSXTag$0 = JSXElement;
14681var _JSXTag$1 = JSXFragment;
14682var _JSXTag$2 = JSXComment;
14683var _JSXTag$$ = [_JSXTag$0, _JSXTag$1, _JSXTag$2];
14684function _JSXTag(ctx, state2) {
14685  return (0, import_lib3.$EVENT_C)(ctx, state2, "_JSXTag", _JSXTag$$);
14686}
14687var JSXElement$0 = JSXSelfClosingElement;
14688var JSXElement$1 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$N)(CoffeeJSXEnabled), PushJSXOpeningElement, (0, import_lib3.$E)(JSXMixedChildren), JSXOptionalClosingElement, PopJSXStack), function($skip, $loc, $0, $1, $2, $3, $4, $5) {
14689  var open = $2;
14690  var children = $3;
14691  var close = $4;
14692  if (!children)
14693    return $skip;
14694  let parts;
14695  $0 = $0.slice(1);
14696  if (close) {
14697    parts = $0;
14698  } else if (children.jsxChildren.length) {
14699    parts = [
14700      ...$0,
14701      "\n",
14702      // InsertNewline
14703      state.currentIndent.token,
14704      // InsertIndent
14705      ["</", open[1], ">"]
14706    ];
14707  } else {
14708    parts = [open.slice(0, -1), " />"];
14709  }
14710  return { type: "JSXElement", children: parts, tag: open[1] };
14711});
14712var JSXElement$2 = (0, import_lib3.$TS)((0, import_lib3.$S)(CoffeeJSXEnabled, JSXOpeningElement, (0, import_lib3.$E)(JSXChildren), (0, import_lib3.$E)(Whitespace), JSXClosingElement), function($skip, $loc, $0, $1, $2, $3, $4, $5) {
14713  var open = $2;
14714  var close = $5;
14715  $0 = $0.slice(1);
14716  if (open[1] !== close[2])
14717    return $skip;
14718  return { type: "JSXElement", children: $0, tag: open[1] };
14719});
14720var JSXElement$$ = [JSXElement$0, JSXElement$1, JSXElement$2];
14721function JSXElement(ctx, state2) {
14722  return (0, import_lib3.$EVENT_C)(ctx, state2, "JSXElement", JSXElement$$);
14723}
14724var JSXSelfClosingElement$0 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$EXPECT)($L19, 'JSXSelfClosingElement "<"'), JSXElementName, (0, import_lib3.$E)(TypeArguments), (0, import_lib3.$E)(JSXAttributes), (0, import_lib3.$E)(Whitespace), (0, import_lib3.$EXPECT)($L212, 'JSXSelfClosingElement "/>"')), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6) {
14725  return { type: "JSXElement", children: $0, tag: $2 };
14726});
14727function JSXSelfClosingElement(ctx, state2) {
14728  return (0, import_lib3.$EVENT)(ctx, state2, "JSXSelfClosingElement", JSXSelfClosingElement$0);
14729}
14730var PushJSXOpeningElement$0 = (0, import_lib3.$TS)((0, import_lib3.$S)(JSXOpeningElement), function($skip, $loc, $0, $1) {
14731  state.JSXTagStack.push($1[1]);
14732  return $1;
14733});
14734function PushJSXOpeningElement(ctx, state2) {
14735  return (0, import_lib3.$EVENT)(ctx, state2, "PushJSXOpeningElement", PushJSXOpeningElement$0);
14736}
14737var PopJSXStack$0 = (0, import_lib3.$TV)((0, import_lib3.$EXPECT)($L0, 'PopJSXStack ""'), function($skip, $loc, $0, $1) {
14738  state.JSXTagStack.pop();
14739});
14740function PopJSXStack(ctx, state2) {
14741  return (0, import_lib3.$EVENT)(ctx, state2, "PopJSXStack", PopJSXStack$0);
14742}
14743var JSXOpeningElement$0 = (0, import_lib3.$S)((0, import_lib3.$EXPECT)($L19, 'JSXOpeningElement "<"'), JSXElementName, (0, import_lib3.$E)(TypeArguments), (0, import_lib3.$E)(JSXAttributes), (0, import_lib3.$E)(Whitespace), (0, import_lib3.$EXPECT)($L44, 'JSXOpeningElement ">"'));
14744function JSXOpeningElement(ctx, state2) {
14745  return (0, import_lib3.$EVENT)(ctx, state2, "JSXOpeningElement", JSXOpeningElement$0);
14746}
14747var JSXOptionalClosingElement$0 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$E)(Whitespace), JSXClosingElement), function($skip, $loc, $0, $1, $2) {
14748  var close = $2;
14749  if (state.currentJSXTag !== close[2])
14750    return $skip;
14751  return $0;
14752});
14753var JSXOptionalClosingElement$1 = (0, import_lib3.$EXPECT)($L0, 'JSXOptionalClosingElement ""');
14754var JSXOptionalClosingElement$$ = [JSXOptionalClosingElement$0, JSXOptionalClosingElement$1];
14755function JSXOptionalClosingElement(ctx, state2) {
14756  return (0, import_lib3.$EVENT_C)(ctx, state2, "JSXOptionalClosingElement", JSXOptionalClosingElement$$);
14757}
14758var JSXClosingElement$0 = (0, import_lib3.$S)((0, import_lib3.$EXPECT)($L213, 'JSXClosingElement "</"'), (0, import_lib3.$E)(Whitespace), JSXElementName, (0, import_lib3.$E)(Whitespace), (0, import_lib3.$EXPECT)($L44, 'JSXClosingElement ">"'));
14759function JSXClosingElement(ctx, state2) {
14760  return (0, import_lib3.$EVENT)(ctx, state2, "JSXClosingElement", JSXClosingElement$0);
14761}
14762var JSXFragment$0 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$N)(CoffeeJSXEnabled), PushJSXOpeningFragment, (0, import_lib3.$E)(JSXMixedChildren), JSXOptionalClosingFragment, PopJSXStack), function($skip, $loc, $0, $1, $2, $3, $4, $5) {
14763  var open = $2;
14764  var children = $3;
14765  var close = $4;
14766  if (!children)
14767    return $skip;
14768  $0 = $0.slice(1);
14769  const parts = close ? $0 : [
14770    ...$0,
14771    "\n",
14772    // InsertNewline
14773    state.currentIndent.token,
14774    // InsertIndent
14775    "</>"
14776  ];
14777  return { type: "JSXFragment", children: parts, jsxChildren: children.jsxChildren };
14778});
14779var JSXFragment$1 = (0, import_lib3.$TS)((0, import_lib3.$S)(CoffeeJSXEnabled, (0, import_lib3.$EXPECT)($L214, 'JSXFragment "<>"'), (0, import_lib3.$E)(JSXChildren), (0, import_lib3.$E)(Whitespace), JSXClosingFragment), function($skip, $loc, $0, $1, $2, $3, $4, $5) {
14780  var children = $3;
14781  $0 = $0.slice(1);
14782  return {
14783    type: "JSXFragment",
14784    children: $0,
14785    jsxChildren: children ? children.jsxChildren : []
14786  };
14787});
14788var JSXFragment$$ = [JSXFragment$0, JSXFragment$1];
14789function JSXFragment(ctx, state2) {
14790  return (0, import_lib3.$EVENT_C)(ctx, state2, "JSXFragment", JSXFragment$$);
14791}
14792var PushJSXOpeningFragment$0 = (0, import_lib3.$TV)((0, import_lib3.$EXPECT)($L214, 'PushJSXOpeningFragment "<>"'), function($skip, $loc, $0, $1) {
14793  state.JSXTagStack.push("");
14794  return $1;
14795});
14796function PushJSXOpeningFragment(ctx, state2) {
14797  return (0, import_lib3.$EVENT)(ctx, state2, "PushJSXOpeningFragment", PushJSXOpeningFragment$0);
14798}
14799var JSXOptionalClosingFragment$0 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$E)(Whitespace), JSXClosingFragment), function($skip, $loc, $0, $1, $2) {
14800  if (state.currentJSXTag !== "")
14801    return $skip;
14802  return $0;
14803});
14804var JSXOptionalClosingFragment$1 = (0, import_lib3.$EXPECT)($L0, 'JSXOptionalClosingFragment ""');
14805var JSXOptionalClosingFragment$$ = [JSXOptionalClosingFragment$0, JSXOptionalClosingFragment$1];
14806function JSXOptionalClosingFragment(ctx, state2) {
14807  return (0, import_lib3.$EVENT_C)(ctx, state2, "JSXOptionalClosingFragment", JSXOptionalClosingFragment$$);
14808}
14809var JSXClosingFragment$0 = (0, import_lib3.$EXPECT)($L215, 'JSXClosingFragment "</>"');
14810function JSXClosingFragment(ctx, state2) {
14811  return (0, import_lib3.$EVENT)(ctx, state2, "JSXClosingFragment", JSXClosingFragment$0);
14812}
14813var JSXElementName$0 = (0, import_lib3.$TV)((0, import_lib3.$Y)((0, import_lib3.$S)((0, import_lib3.$C)((0, import_lib3.$EXPECT)($L160, 'JSXElementName "\#"'), Dot), JSXShorthandString)), function($skip, $loc, $0, $1) {
14814  return config.defaultElement;
14815});
14816var JSXElementName$1 = (0, import_lib3.$TEXT)((0, import_lib3.$S)(JSXIdentifierName, (0, import_lib3.$C)((0, import_lib3.$S)(Colon, JSXIdentifierName), (0, import_lib3.$Q)((0, import_lib3.$S)(Dot, JSXIdentifierName)))));
14817var JSXElementName$$ = [JSXElementName$0, JSXElementName$1];
14818function JSXElementName(ctx, state2) {
14819  return (0, import_lib3.$EVENT_C)(ctx, state2, "JSXElementName", JSXElementName$$);
14820}
14821var JSXIdentifierName$0 = (0, import_lib3.$R$0)((0, import_lib3.$EXPECT)($R75, "JSXIdentifierName /(?:\\p{ID_Start}|[_$])(?:\\p{ID_Continue}|[\\u200C\\u200D$-])*/"));
14822function JSXIdentifierName(ctx, state2) {
14823  return (0, import_lib3.$EVENT)(ctx, state2, "JSXIdentifierName", JSXIdentifierName$0);
14824}
14825var JSXAttributes$0 = (0, import_lib3.$TV)((0, import_lib3.$Q)((0, import_lib3.$S)((0, import_lib3.$E)(Whitespace), JSXAttribute)), function($skip, $loc, $0, $1) {
14826  const classes = [];
14827  let attrs = $0.filter((pair) => {
14828    const [, attr] = pair;
14829    if (attr.type === "JSXClass") {
14830      classes.push(attr.class);
14831      return false;
14832    }
14833    return true;
14834  });
14835  if (classes.length) {
14836    let isBraced2 = function(c) {
14837      return c[0] === "{" || c[0]?.token === "{";
14838    }, unbrace2 = function(c) {
14839      return c.slice(1, -1);
14840    }, parseClass2 = function(c) {
14841      c = c.token || c;
14842      if (c.startsWith("'")) {
14843        c = '"' + c.slice(1, -1).replace(/\\*"/g, (m) => m.length % 2 == 0 ? m : "\\" + m) + '"';
14844      }
14845      return JSON.parse(c);
14846    };
14847    var isBraced = isBraced2, unbrace = unbrace2, parseClass = parseClass2;
14848    let className = config.react ? "className" : "class";
14849    attrs = attrs.filter((pair) => {
14850      const [, attr] = pair;
14851      if ((attr[0][0] === "class" || attr[0][0] === "className") && !attr[0][1]) {
14852        className = attr[0][0];
14853        classes.push(attr[1][attr[1].length - 1]);
14854        return false;
14855      }
14856      return true;
14857    });
14858    const strings = [], exprs = [];
14859    classes.forEach((c) => {
14860      if (isBraced2(c)) {
14861        exprs.push(unbrace2(c));
14862        exprs.push(", ");
14863      } else {
14864        strings.push(parseClass2(c));
14865      }
14866    });
14867    const stringPart = strings.filter(Boolean).join(" ");
14868    let classValue;
14869    if (exprs.length) {
14870      exprs.pop();
14871      if (stringPart) {
14872        exprs.unshift(JSON.stringify(stringPart), ", ");
14873      }
14874      if (exprs.length === 1) {
14875        let root = exprs[0];
14876        while (root.length && isWhitespaceOrEmpty(root[root.length - 1])) {
14877          root = root.slice(0, -1);
14878        }
14879        while (root?.length === 1)
14880          root = root[0];
14881        if (root?.children)
14882          root = root.children;
14883        if (root?.[0]?.token === "`") {
14884          classValue = ["{", ...exprs, "}"];
14885        } else {
14886          classValue = ["{(", ...exprs, ') || ""}'];
14887        }
14888      } else {
14889        classValue = ["{[", ...exprs, '].filter(Boolean).join(" ")}'];
14890      }
14891    } else {
14892      if (!stringPart.includes("&") && !stringPart.includes('"')) {
14893        classValue = `"${stringPart}"`;
14894      } else if (!stringPart.includes("&") && !stringPart.includes("'")) {
14895        classValue = `'${stringPart}'`;
14896      } else {
14897        classValue = `{${JSON.stringify(stringPart)}}`;
14898      }
14899    }
14900    attrs.splice(0, 0, [" ", [className, ["=", classValue]]]);
14901  }
14902  return attrs.map((pair) => {
14903    const [space, attr] = pair;
14904    if (space && attr[0] === " ") {
14905      pair = [space, attr.slice(1)];
14906    }
14907    return pair;
14908  });
14909});
14910function JSXAttributes(ctx, state2) {
14911  return (0, import_lib3.$EVENT)(ctx, state2, "JSXAttributes", JSXAttributes$0);
14912}
14913var JSXAttribute$0 = (0, import_lib3.$TS)((0, import_lib3.$S)(BracedObjectLiteral), function($skip, $loc, $0, $1) {
14914  return convertObjectToJSXAttributes($1);
14915});
14916var JSXAttribute$1 = (0, import_lib3.$TS)((0, import_lib3.$S)(JSXAttributeName, (0, import_lib3.$C)(JSXAttributeInitializer, (0, import_lib3.$Y)(JSXAttributeSpace))), function($skip, $loc, $0, $1, $2) {
14917  var name = $1;
14918  var value = $2;
14919  if (name.type === "ComputedPropertyName") {
14920    if (value) {
14921      value = value[value.length - 1];
14922      if (value[0]?.token === "{" && value[value.length - 1]?.token === "}") {
14923        value = value.slice(1, -1);
14924      }
14925    } else {
14926      value = "true";
14927    }
14928    return ["{...{", name, ": ", value, "}}"];
14929  } else {
14930    return $0;
14931  }
14932});
14933var JSXAttribute$2 = (0, import_lib3.$S)(InsertInlineOpenBrace, DotDotDot, InlineJSXAttributeValue, InsertCloseBrace, (0, import_lib3.$Y)(JSXAttributeSpace));
14934var JSXAttribute$3 = (0, import_lib3.$TS)((0, import_lib3.$S)(AtThis, (0, import_lib3.$E)(Identifier), (0, import_lib3.$Q)(InlineJSXCallExpressionRest), (0, import_lib3.$Y)(JSXAttributeSpace)), function($skip, $loc, $0, $1, $2, $3, $4) {
14935  var at = $1;
14936  var id = $2;
14937  var rest = $3;
14938  const access = id && {
14939    type: "PropertyAccess",
14940    children: [".", id],
14941    name: id
14942  };
14943  const expr = processCallMemberExpression({
14944    type: "CallExpression",
14945    children: [at, access, ...rest.flat()]
14946  });
14947  const last = lastAccessInCallExpression(expr);
14948  if (!last)
14949    return $skip;
14950  let name;
14951  if (last.type === "Index") {
14952    return [
14953      "{...{",
14954      { ...last, type: "ComputedPropertyName" },
14955      ": ",
14956      expr,
14957      "}}"
14958    ];
14959  } else if (last.name) {
14960    return [last.name, "={", expr, "}"];
14961  }
14962  return $skip;
14963});
14964var JSXAttribute$4 = (0, import_lib3.$TS)((0, import_lib3.$S)(Identifier, (0, import_lib3.$P)(InlineJSXCallExpressionRest), (0, import_lib3.$Y)(JSXAttributeSpace)), function($skip, $loc, $0, $1, $2, $3) {
14965  var id = $1;
14966  var rest = $2;
14967  const expr = processCallMemberExpression({
14968    type: "CallExpression",
14969    children: [id, ...rest.flat()]
14970  });
14971  if (expr.type === "ObjectExpression") {
14972    return convertObjectToJSXAttributes(expr);
14973  }
14974  const last = lastAccessInCallExpression(expr);
14975  if (!last)
14976    return $skip;
14977  let name;
14978  if (last.type === "Index") {
14979    return [
14980      "{...{",
14981      { ...last, type: "ComputedPropertyName" },
14982      ": ",
14983      expr,
14984      "}}"
14985    ];
14986  } else if (last.name) {
14987    return [last.name, "={", expr, "}"];
14988  }
14989  return $skip;
14990});
14991var JSXAttribute$5 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$EXPECT)($L160, 'JSXAttribute "\#"'), JSXShorthandString), function($skip, $loc, $0, $1, $2) {
14992  return [" ", "id=", $2];
14993});
14994var JSXAttribute$6 = (0, import_lib3.$TS)((0, import_lib3.$S)(Dot, JSXShorthandString), function($skip, $loc, $0, $1, $2) {
14995  return {
14996    type: "JSXClass",
14997    class: $2
14998  };
14999});
15000var JSXAttribute$7 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$TEXT)((0, import_lib3.$EXPECT)($R76, "JSXAttribute /[!+-]/")), JSXAttributeName, (0, import_lib3.$Y)(JSXAttributeSpace)), function($skip, $loc, $0, $1, $2, $3) {
15001  var toggle = $1;
15002  var id = $2;
15003  const value = toggle === "+" ? "true" : "false";
15004  return [" ", id, "={", value, "}"];
15005});
15006var JSXAttribute$$ = [JSXAttribute$0, JSXAttribute$1, JSXAttribute$2, JSXAttribute$3, JSXAttribute$4, JSXAttribute$5, JSXAttribute$6, JSXAttribute$7];
15007function JSXAttribute(ctx, state2) {
15008  return (0, import_lib3.$EVENT_C)(ctx, state2, "JSXAttribute", JSXAttribute$$);
15009}
15010var JSXAttributeSpace$0 = (0, import_lib3.$R$0)((0, import_lib3.$EXPECT)($R77, "JSXAttributeSpace /[\\s>]|\\/>/"));
15011function JSXAttributeSpace(ctx, state2) {
15012  return (0, import_lib3.$EVENT)(ctx, state2, "JSXAttributeSpace", JSXAttributeSpace$0);
15013}
15014var JSXShorthandString$0 = (0, import_lib3.$TR)((0, import_lib3.$EXPECT)($R78, "JSXShorthandString /(?:[\\w\\-:]+|\\([^()]*\\)|\\[[^\\[\\]]*\\])+/"), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7, $8, $9) {
15015  return quoteString($0);
15016});
15017var JSXShorthandString$1 = (0, import_lib3.$TS)((0, import_lib3.$S)(TemplateLiteral), function($skip, $loc, $0, $1) {
15018  return ["{", $1, "}"];
15019});
15020var JSXShorthandString$2 = StringLiteral;
15021var JSXShorthandString$3 = (0, import_lib3.$S)(OpenBrace, PostfixedExpression, (0, import_lib3.$E)(Whitespace), CloseBrace);
15022var JSXShorthandString$$ = [JSXShorthandString$0, JSXShorthandString$1, JSXShorthandString$2, JSXShorthandString$3];
15023function JSXShorthandString(ctx, state2) {
15024  return (0, import_lib3.$EVENT_C)(ctx, state2, "JSXShorthandString", JSXShorthandString$$);
15025}
15026var JSXAttributeName$0 = (0, import_lib3.$S)(JSXIdentifierName, (0, import_lib3.$E)((0, import_lib3.$S)(Colon, JSXIdentifierName)));
15027var JSXAttributeName$1 = ComputedPropertyName;
15028var JSXAttributeName$$ = [JSXAttributeName$0, JSXAttributeName$1];
15029function JSXAttributeName(ctx, state2) {
15030  return (0, import_lib3.$EVENT_C)(ctx, state2, "JSXAttributeName", JSXAttributeName$$);
15031}
15032var JSXAttributeInitializer$0 = (0, import_lib3.$S)((0, import_lib3.$E)(Whitespace), Equals, (0, import_lib3.$E)(Whitespace), JSXAttributeValue);
15033function JSXAttributeInitializer(ctx, state2) {
15034  return (0, import_lib3.$EVENT)(ctx, state2, "JSXAttributeInitializer", JSXAttributeInitializer$0);
15035}
15036var JSXAttributeValue$0 = (0, import_lib3.$S)(OpenBrace, PostfixedExpression, (0, import_lib3.$E)(Whitespace), CloseBrace);
15037var JSXAttributeValue$1 = JSXElement;
15038var JSXAttributeValue$2 = JSXFragment;
15039var JSXAttributeValue$3 = (0, import_lib3.$TS)((0, import_lib3.$S)(InsertInlineOpenBrace, InlineJSXAttributeValue, InsertCloseBrace, (0, import_lib3.$Y)(JSXAttributeSpace)), function($skip, $loc, $0, $1, $2, $3, $4) {
15040  var open = $1;
15041  var value = $2;
15042  var close = $3;
15043  if (value.type === "StringLiteral") {
15044    return $skip;
15045  }
15046  return [open, value, close];
15047});
15048var JSXAttributeValue$4 = (0, import_lib3.$R$0)((0, import_lib3.$EXPECT)($R79, `JSXAttributeValue /"[^"]*"|'[^']*'/`));
15049var JSXAttributeValue$$ = [JSXAttributeValue$0, JSXAttributeValue$1, JSXAttributeValue$2, JSXAttributeValue$3, JSXAttributeValue$4];
15050function JSXAttributeValue(ctx, state2) {
15051  return (0, import_lib3.$EVENT_C)(ctx, state2, "JSXAttributeValue", JSXAttributeValue$$);
15052}
15053var InlineJSXAttributeValue$0 = (0, import_lib3.$TS)((0, import_lib3.$S)(InlineJSXUnaryExpression, (0, import_lib3.$Q)(InlineJSXBinaryOpRHS)), function($skip, $loc, $0, $1, $2) {
15054  if ($2.length)
15055    return processBinaryOpExpression($0);
15056  return $1;
15057});
15058function InlineJSXAttributeValue(ctx, state2) {
15059  return (0, import_lib3.$EVENT)(ctx, state2, "InlineJSXAttributeValue", InlineJSXAttributeValue$0);
15060}
15061var InlineJSXBinaryOpRHS$0 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$N)((0, import_lib3.$EXPECT)($R80, "InlineJSXBinaryOpRHS /[<>]/")), BinaryOp, InlineJSXUnaryExpression), function($skip, $loc, $0, $1, $2, $3) {
15062  var op = $2;
15063  var rhs = $3;
15064  return [[], op, [], rhs];
15065});
15066function InlineJSXBinaryOpRHS(ctx, state2) {
15067  return (0, import_lib3.$EVENT)(ctx, state2, "InlineJSXBinaryOpRHS", InlineJSXBinaryOpRHS$0);
15068}
15069var InlineJSXUnaryExpression$0 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$Q)(InlineJSXUnaryOp), InlineJSXUpdateExpression, (0, import_lib3.$E)(InlineJSXUnaryPostfix)), function($skip, $loc, $0, $1, $2, $3) {
15070  var pre = $1;
15071  var exp = $2;
15072  var post = $3;
15073  return processUnaryExpression(pre, exp, post);
15074});
15075function InlineJSXUnaryExpression(ctx, state2) {
15076  return (0, import_lib3.$EVENT)(ctx, state2, "InlineJSXUnaryExpression", InlineJSXUnaryExpression$0);
15077}
15078var InlineJSXUnaryOp$0 = (0, import_lib3.$TR)((0, import_lib3.$EXPECT)($R81, "InlineJSXUnaryOp /[!~+-](?!\\s|[!~+-]*&)/"), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7, $8, $9) {
15079  return { $loc, token: $0 };
15080});
15081function InlineJSXUnaryOp(ctx, state2) {
15082  return (0, import_lib3.$EVENT)(ctx, state2, "InlineJSXUnaryOp", InlineJSXUnaryOp$0);
15083}
15084var InlineJSXUnaryPostfix$0 = QuestionMark;
15085function InlineJSXUnaryPostfix(ctx, state2) {
15086  return (0, import_lib3.$EVENT)(ctx, state2, "InlineJSXUnaryPostfix", InlineJSXUnaryPostfix$0);
15087}
15088var InlineJSXUpdateExpression$0 = (0, import_lib3.$S)(UpdateExpressionSymbol, UnaryExpression);
15089var InlineJSXUpdateExpression$1 = (0, import_lib3.$TS)((0, import_lib3.$S)(InlineJSXCallExpression, (0, import_lib3.$E)(UpdateExpressionSymbol)), function($skip, $loc, $0, $1, $2) {
15090  if ($2)
15091    return $0;
15092  return $1;
15093});
15094var InlineJSXUpdateExpression$$ = [InlineJSXUpdateExpression$0, InlineJSXUpdateExpression$1];
15095function InlineJSXUpdateExpression(ctx, state2) {
15096  return (0, import_lib3.$EVENT_C)(ctx, state2, "InlineJSXUpdateExpression", InlineJSXUpdateExpression$$);
15097}
15098var InlineJSXCallExpression$0 = (0, import_lib3.$TS)((0, import_lib3.$S)(Super, ExplicitArguments, (0, import_lib3.$Q)(InlineJSXCallExpressionRest)), function($skip, $loc, $0, $1, $2, $3) {
15099  var args = $2;
15100  var rest = $3;
15101  return processCallMemberExpression({
15102    type: "CallExpression",
15103    children: [
15104      $1,
15105      args,
15106      ...rest.flat()
15107    ]
15108  });
15109});
15110var InlineJSXCallExpression$1 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$EXPECT)($L15, 'InlineJSXCallExpression "import"'), ExplicitArguments, (0, import_lib3.$Q)(InlineJSXCallExpressionRest)), function($skip, $loc, $0, $1, $2, $3) {
15111  var args = $2;
15112  var rest = $3;
15113  return processCallMemberExpression({
15114    type: "CallExpression",
15115    children: [
15116      $1,
15117      args,
15118      ...rest.flat()
15119    ]
15120  });
15121});
15122var InlineJSXCallExpression$2 = (0, import_lib3.$TS)((0, import_lib3.$S)(InlineJSXMemberExpression, (0, import_lib3.$Q)(InlineJSXCallExpressionRest)), function($skip, $loc, $0, $1, $2) {
15123  var member = $1;
15124  var rest = $2;
15125  if (rest.length) {
15126    rest = rest.flat();
15127    return processCallMemberExpression({
15128      type: "CallExpression",
15129      children: [member, ...rest]
15130    });
15131  }
15132  return member;
15133});
15134var InlineJSXCallExpression$$ = [InlineJSXCallExpression$0, InlineJSXCallExpression$1, InlineJSXCallExpression$2];
15135function InlineJSXCallExpression(ctx, state2) {
15136  return (0, import_lib3.$EVENT_C)(ctx, state2, "InlineJSXCallExpression", InlineJSXCallExpression$$);
15137}
15138var InlineJSXCallExpressionRest$0 = InlineJSXMemberExpressionRest;
15139var InlineJSXCallExpressionRest$1 = (0, import_lib3.$TV)((0, import_lib3.$C)(TemplateLiteral, StringLiteral), function($skip, $loc, $0, $1) {
15140  if ($1.type === "StringLiteral") {
15141    return "`" + $1.token.slice(1, -1).replace(/(`|\$\{)/g, "\\$1") + "`";
15142  }
15143  return $1;
15144});
15145var InlineJSXCallExpressionRest$2 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$E)(OptionalShorthand), ExplicitArguments), function($skip, $loc, $0, $1, $2) {
15146  var args = $2;
15147  if (!$1)
15148    return args;
15149  return [$1, args];
15150});
15151var InlineJSXCallExpressionRest$$ = [InlineJSXCallExpressionRest$0, InlineJSXCallExpressionRest$1, InlineJSXCallExpressionRest$2];
15152function InlineJSXCallExpressionRest(ctx, state2) {
15153  return (0, import_lib3.$EVENT_C)(ctx, state2, "InlineJSXCallExpressionRest", InlineJSXCallExpressionRest$$);
15154}
15155var InlineJSXMemberExpression$0 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$C)(InlineJSXPrimaryExpression, SuperProperty, MetaProperty), (0, import_lib3.$Q)(InlineJSXMemberExpressionRest)), function($skip, $loc, $0, $1, $2) {
15156  var rest = $2;
15157  if (rest.length || Array.isArray($1)) {
15158    return processCallMemberExpression({
15159      type: "MemberExpression",
15160      children: [$1, ...rest].flat()
15161    });
15162  }
15163  return $1;
15164});
15165function InlineJSXMemberExpression(ctx, state2) {
15166  return (0, import_lib3.$EVENT)(ctx, state2, "InlineJSXMemberExpression", InlineJSXMemberExpression$0);
15167}
15168var InlineJSXMemberExpressionRest$0 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$E)(OptionalShorthand), (0, import_lib3.$Q)(InlineComment), MemberBracketContent), function($skip, $loc, $0, $1, $2, $3) {
15169  var dot = $1;
15170  var comments = $2;
15171  var content = $3;
15172  if (!dot && !comments.length)
15173    return content;
15174  if (dot) {
15175    if (dot.type === "Optional" && content.type === "SliceExpression") {
15176      return [...dot.children.slice(0, -1), ...comments, content];
15177    }
15178    return [dot, ...comments, content];
15179  }
15180  return [...comments, content];
15181});
15182var InlineJSXMemberExpressionRest$1 = PropertyAccess;
15183var InlineJSXMemberExpressionRest$2 = PropertyGlob;
15184var InlineJSXMemberExpressionRest$3 = PropertyBind;
15185var InlineJSXMemberExpressionRest$4 = NonNullAssertion;
15186var InlineJSXMemberExpressionRest$$ = [InlineJSXMemberExpressionRest$0, InlineJSXMemberExpressionRest$1, InlineJSXMemberExpressionRest$2, InlineJSXMemberExpressionRest$3, InlineJSXMemberExpressionRest$4];
15187function InlineJSXMemberExpressionRest(ctx, state2) {
15188  return (0, import_lib3.$EVENT_C)(ctx, state2, "InlineJSXMemberExpressionRest", InlineJSXMemberExpressionRest$$);
15189}
15190var InlineJSXPrimaryExpression$0 = NullLiteral;
15191var InlineJSXPrimaryExpression$1 = BooleanLiteral;
15192var InlineJSXPrimaryExpression$2 = NumericLiteral;
15193var InlineJSXPrimaryExpression$3 = TemplateLiteral;
15194var InlineJSXPrimaryExpression$4 = ThisLiteral;
15195var InlineJSXPrimaryExpression$5 = ArrayLiteral;
15196var InlineJSXPrimaryExpression$6 = BracedObjectLiteral;
15197var InlineJSXPrimaryExpression$7 = IdentifierReference;
15198var InlineJSXPrimaryExpression$8 = RegularExpressionLiteral;
15199var InlineJSXPrimaryExpression$9 = ParenthesizedExpression;
15200var InlineJSXPrimaryExpression$$ = [InlineJSXPrimaryExpression$0, InlineJSXPrimaryExpression$1, InlineJSXPrimaryExpression$2, InlineJSXPrimaryExpression$3, InlineJSXPrimaryExpression$4, InlineJSXPrimaryExpression$5, InlineJSXPrimaryExpression$6, InlineJSXPrimaryExpression$7, InlineJSXPrimaryExpression$8, InlineJSXPrimaryExpression$9];
15201function InlineJSXPrimaryExpression(ctx, state2) {
15202  return (0, import_lib3.$EVENT_C)(ctx, state2, "InlineJSXPrimaryExpression", InlineJSXPrimaryExpression$$);
15203}
15204var JSXMixedChildren$0 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$Q)(JSXChild), JSXNestedChildren), function($skip, $loc, $0, $1, $2) {
15205  var c1 = $1;
15206  var c2 = $2;
15207  return {
15208    children: c1.concat(c2),
15209    jsxChildren: c1.concat(c2.jsxChildren)
15210  };
15211});
15212function JSXMixedChildren(ctx, state2) {
15213  return (0, import_lib3.$EVENT)(ctx, state2, "JSXMixedChildren", JSXMixedChildren$0);
15214}
15215var JSXChildren$0 = (0, import_lib3.$TV)((0, import_lib3.$Q)((0, import_lib3.$S)((0, import_lib3.$Q)((0, import_lib3.$S)((0, import_lib3.$E)(NonNewlineWhitespace), EOL, (0, import_lib3.$E)(NonNewlineWhitespace))), JSXChild)), function($skip, $loc, $0, $1) {
15216  return {
15217    children: $1,
15218    jsxChildren: $1.map((children) => children[1])
15219  };
15220});
15221function JSXChildren(ctx, state2) {
15222  return (0, import_lib3.$EVENT)(ctx, state2, "JSXChildren", JSXChildren$0);
15223}
15224var JSXNestedChildren$0 = (0, import_lib3.$TS)((0, import_lib3.$S)(PushIndent, (0, import_lib3.$Q)((0, import_lib3.$S)(JSXNested, (0, import_lib3.$P)(JSXChild))), PopIndent), function($skip, $loc, $0, $1, $2, $3) {
15225  if ($2.length) {
15226    return {
15227      children: $2,
15228      jsxChildren: [].concat(...$2.map((nestedChildren) => nestedChildren[1]))
15229    };
15230  }
15231  return $skip;
15232});
15233var JSXNestedChildren$1 = (0, import_lib3.$TV)((0, import_lib3.$Y)((0, import_lib3.$C)(JSXEOS, (0, import_lib3.$EXPECT)($L36, 'JSXNestedChildren "}"'), JSXClosingElement, JSXClosingFragment)), function($skip, $loc, $0, $1) {
15234  return { children: [], jsxChildren: [] };
15235});
15236var JSXNestedChildren$$ = [JSXNestedChildren$0, JSXNestedChildren$1];
15237function JSXNestedChildren(ctx, state2) {
15238  return (0, import_lib3.$EVENT_C)(ctx, state2, "JSXNestedChildren", JSXNestedChildren$$);
15239}
15240var JSXEOS$0 = (0, import_lib3.$P)((0, import_lib3.$S)((0, import_lib3.$E)(NonNewlineWhitespace), EOL));
15241function JSXEOS(ctx, state2) {
15242  return (0, import_lib3.$EVENT)(ctx, state2, "JSXEOS", JSXEOS$0);
15243}
15244var JSXNested$0 = (0, import_lib3.$TS)((0, import_lib3.$S)(JSXEOS, Indent), function($skip, $loc, $0, $1, $2) {
15245  var eos = $1;
15246  var indent = $2;
15247  const { level } = indent;
15248  const currentIndent = state.currentIndent;
15249  if (level !== currentIndent.level)
15250    return $skip;
15251  return $0;
15252});
15253function JSXNested(ctx, state2) {
15254  return (0, import_lib3.$EVENT)(ctx, state2, "JSXNested", JSXNested$0);
15255}
15256var JSXChild$0 = JSXElement;
15257var JSXChild$1 = JSXFragment;
15258var JSXChild$2 = JSXComment;
15259var JSXChild$3 = (0, import_lib3.$TS)((0, import_lib3.$S)(OpenBrace, IndentedJSXChildExpression, __, CloseBrace), function($skip, $loc, $0, $1, $2, $3, $4) {
15260  var expression = $2;
15261  return {
15262    type: "JSXChildExpression",
15263    children: $0,
15264    expression
15265  };
15266});
15267var JSXChild$4 = (0, import_lib3.$TS)((0, import_lib3.$S)(OpenBrace, (0, import_lib3.$E)(JSXChildExpression), __, CloseBrace), function($skip, $loc, $0, $1, $2, $3, $4) {
15268  var expression = $2;
15269  return {
15270    type: "JSXChildExpression",
15271    children: $0,
15272    expression
15273  };
15274});
15275var JSXChild$5 = (0, import_lib3.$TS)((0, import_lib3.$S)(InsertInlineOpenBrace, ArrowFunction, InsertCloseBrace), function($skip, $loc, $0, $1, $2, $3) {
15276  var expression = $2;
15277  return {
15278    type: "JSXChildExpression",
15279    children: $0,
15280    expression
15281  };
15282});
15283var JSXChild$6 = JSXText;
15284var JSXChild$$ = [JSXChild$0, JSXChild$1, JSXChild$2, JSXChild$3, JSXChild$4, JSXChild$5, JSXChild$6];
15285function JSXChild(ctx, state2) {
15286  return (0, import_lib3.$EVENT_C)(ctx, state2, "JSXChild", JSXChild$$);
15287}
15288var JSXComment$0 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$EXPECT)($L216, 'JSXComment "<!--"'), JSXCommentContent, (0, import_lib3.$EXPECT)($L217, 'JSXComment "-->"')), function($skip, $loc, $0, $1, $2, $3) {
15289  return ["{/*", $2, "*/}"];
15290});
15291function JSXComment(ctx, state2) {
15292  return (0, import_lib3.$EVENT)(ctx, state2, "JSXComment", JSXComment$0);
15293}
15294var JSXCommentContent$0 = (0, import_lib3.$TR)((0, import_lib3.$EXPECT)($R82, "JSXCommentContent /(?:-[^-]|[^-]*)*/"), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7, $8, $9) {
15295  return { $loc, token: $0.replace(/\*\//g, "* /") };
15296});
15297function JSXCommentContent(ctx, state2) {
15298  return (0, import_lib3.$EVENT)(ctx, state2, "JSXCommentContent", JSXCommentContent$0);
15299}
15300var JSXText$0 = (0, import_lib3.$TR)((0, import_lib3.$EXPECT)($R83, "JSXText /[^{}<>\\r\\n]+/"), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7, $8, $9) {
15301  return {
15302    type: "JSXText",
15303    token: $0,
15304    $loc
15305  };
15306});
15307function JSXText(ctx, state2) {
15308  return (0, import_lib3.$EVENT)(ctx, state2, "JSXText", JSXText$0);
15309}
15310var JSXChildExpression$0 = (0, import_lib3.$S)((0, import_lib3.$E)(Whitespace), (0, import_lib3.$E)((0, import_lib3.$S)(DotDotDot, (0, import_lib3.$E)(Whitespace))), PostfixedExpression);
15311function JSXChildExpression(ctx, state2) {
15312  return (0, import_lib3.$EVENT)(ctx, state2, "JSXChildExpression", JSXChildExpression$0);
15313}
15314var IndentedJSXChildExpression$0 = (0, import_lib3.$TS)((0, import_lib3.$S)(PushIndent, (0, import_lib3.$E)(NestedJSXChildExpression), PopIndent), function($skip, $loc, $0, $1, $2, $3) {
15315  if (!$2)
15316    return $skip;
15317  return $2;
15318});
15319function IndentedJSXChildExpression(ctx, state2) {
15320  return (0, import_lib3.$EVENT)(ctx, state2, "IndentedJSXChildExpression", IndentedJSXChildExpression$0);
15321}
15322var NestedJSXChildExpression$0 = (0, import_lib3.$S)(JSXNested, JSXChildExpression);
15323function NestedJSXChildExpression(ctx, state2) {
15324  return (0, import_lib3.$EVENT)(ctx, state2, "NestedJSXChildExpression", NestedJSXChildExpression$0);
15325}
15326var UsingDeclaration$0 = (0, import_lib3.$TS)((0, import_lib3.$S)(Using, (0, import_lib3.$E)(_), UsingBinding, (0, import_lib3.$Q)((0, import_lib3.$S)(__, Comma, __, UsingBinding)), UsingJSModeError), function($skip, $loc, $0, $1, $2, $3, $4, $5) {
15327  var decl = $1;
15328  var binding = $3;
15329  var tail = $4;
15330  const bindings = [binding].concat(tail.map(([, , , b]) => b));
15331  return {
15332    type: "Declaration",
15333    children: $0,
15334    names: bindings.flatMap((b) => b.names),
15335    bindings,
15336    decl,
15337    splices: bindings.flatMap((b) => b.splices),
15338    thisAssignments: bindings.flatMap((b) => b.thisAssignments)
15339  };
15340});
15341function UsingDeclaration(ctx, state2) {
15342  return (0, import_lib3.$EVENT)(ctx, state2, "UsingDeclaration", UsingDeclaration$0);
15343}
15344var UsingBinding$0 = (0, import_lib3.$TS)((0, import_lib3.$S)(BindingIdentifier, (0, import_lib3.$E)(TypeSuffix), Initializer), function($skip, $loc, $0, $1, $2, $3) {
15345  var pattern = $1;
15346  var suffix = $2;
15347  var initializer = $3;
15348  return {
15349    type: "Binding",
15350    children: $0,
15351    names: pattern.names,
15352    pattern,
15353    suffix,
15354    initializer,
15355    splices: [],
15356    thisAssignments: []
15357  };
15358});
15359function UsingBinding(ctx, state2) {
15360  return (0, import_lib3.$EVENT)(ctx, state2, "UsingBinding", UsingBinding$0);
15361}
15362var UsingJSModeError$0 = (0, import_lib3.$TV)((0, import_lib3.$EXPECT)($L0, 'UsingJSModeError ""'), function($skip, $loc, $0, $1) {
15363  return {
15364    type: "Error",
15365    js: true,
15366    message: "`using` is not currently transpiled in JS mode."
15367  };
15368});
15369function UsingJSModeError(ctx, state2) {
15370  return (0, import_lib3.$EVENT)(ctx, state2, "UsingJSModeError", UsingJSModeError$0);
15371}
15372var TypeDeclaration$0 = (0, import_lib3.$T)((0, import_lib3.$S)((0, import_lib3.$E)((0, import_lib3.$S)(Export, (0, import_lib3.$E)(_))), (0, import_lib3.$S)(Declare, (0, import_lib3.$E)(_)), TypeLexicalDeclaration), function(value) {
15373  return { "ts": true, "children": value };
15374});
15375var TypeDeclaration$1 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$E)((0, import_lib3.$S)(Export, (0, import_lib3.$E)(_))), (0, import_lib3.$E)((0, import_lib3.$S)(Declare, (0, import_lib3.$E)(_))), TypeDeclarationRest), function($skip, $loc, $0, $1, $2, $3) {
15376  var export_ = $1;
15377  var declare = $2;
15378  var t = $3;
15379  return {
15380    ...t,
15381    ts: true,
15382    export: export_,
15383    declare,
15384    children: [export_, declare, ...t.children]
15385  };
15386});
15387var TypeDeclaration$$ = [TypeDeclaration$0, TypeDeclaration$1];
15388function TypeDeclaration(ctx, state2) {
15389  return (0, import_lib3.$EVENT_C)(ctx, state2, "TypeDeclaration", TypeDeclaration$$);
15390}
15391var TypeDeclarationRest$0 = TypeAliasDeclaration;
15392var TypeDeclarationRest$1 = InterfaceDeclaration;
15393var TypeDeclarationRest$2 = NamespaceDeclaration;
15394var TypeDeclarationRest$3 = FunctionSignature;
15395var TypeDeclarationRest$$ = [TypeDeclarationRest$0, TypeDeclarationRest$1, TypeDeclarationRest$2, TypeDeclarationRest$3];
15396function TypeDeclarationRest(ctx, state2) {
15397  return (0, import_lib3.$EVENT_C)(ctx, state2, "TypeDeclarationRest", TypeDeclarationRest$$);
15398}
15399var TypeAliasDeclaration$0 = (0, import_lib3.$TS)((0, import_lib3.$S)(TypeKeyword, (0, import_lib3.$E)(_), IdentifierName, (0, import_lib3.$E)(TypeParameters), OptionalEquals, (0, import_lib3.$C)(MaybeNestedType, (0, import_lib3.$S)(__, Type))), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6) {
15400  var id = $3;
15401  return {
15402    type: "TypeDeclaration",
15403    id,
15404    children: $0,
15405    ts: true
15406  };
15407});
15408var TypeAliasDeclaration$1 = (0, import_lib3.$TS)((0, import_lib3.$S)(InsertType, IdentifierName, (0, import_lib3.$E)(TypeParameters), __, TypeAssignment, (0, import_lib3.$C)(MaybeNestedType, (0, import_lib3.$S)(__, Type))), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6) {
15409  var id = $2;
15410  return {
15411    type: "TypeDeclaration",
15412    id,
15413    children: $0,
15414    ts: true
15415  };
15416});
15417var TypeAliasDeclaration$$ = [TypeAliasDeclaration$0, TypeAliasDeclaration$1];
15418function TypeAliasDeclaration(ctx, state2) {
15419  return (0, import_lib3.$EVENT_C)(ctx, state2, "TypeAliasDeclaration", TypeAliasDeclaration$$);
15420}
15421var InterfaceDeclaration$0 = (0, import_lib3.$TS)((0, import_lib3.$S)(Interface, (0, import_lib3.$E)(_), IdentifierName, (0, import_lib3.$E)(TypeParameters), (0, import_lib3.$E)(InterfaceExtendsClause), InterfaceBlock), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6) {
15422  var id = $3;
15423  return {
15424    type: "InterfaceDeclaration",
15425    id,
15426    children: $0,
15427    ts: true
15428  };
15429});
15430function InterfaceDeclaration(ctx, state2) {
15431  return (0, import_lib3.$EVENT)(ctx, state2, "InterfaceDeclaration", InterfaceDeclaration$0);
15432}
15433var NamespaceDeclaration$0 = (0, import_lib3.$TS)((0, import_lib3.$S)(Namespace, (0, import_lib3.$E)(_), IdentifierName, ModuleBlock), function($skip, $loc, $0, $1, $2, $3, $4) {
15434  var id = $3;
15435  return {
15436    type: "NamespaceDeclaration",
15437    id,
15438    children: $0,
15439    ts: true
15440  };
15441});
15442function NamespaceDeclaration(ctx, state2) {
15443  return (0, import_lib3.$EVENT)(ctx, state2, "NamespaceDeclaration", NamespaceDeclaration$0);
15444}
15445var OptionalEquals$0 = (0, import_lib3.$S)(__, Equals);
15446var OptionalEquals$1 = (0, import_lib3.$T)((0, import_lib3.$S)((0, import_lib3.$Y)(IndentedFurther), InsertSpaceEquals), function(value) {
15447  return value[1];
15448});
15449var OptionalEquals$$ = [OptionalEquals$0, OptionalEquals$1];
15450function OptionalEquals(ctx, state2) {
15451  return (0, import_lib3.$EVENT_C)(ctx, state2, "OptionalEquals", OptionalEquals$$);
15452}
15453var TypeLexicalDeclaration$0 = (0, import_lib3.$S)(__, LetOrConstOrVar, TypeDeclarationBinding, (0, import_lib3.$Q)((0, import_lib3.$S)(CommaDelimiter, __, TypeDeclarationBinding)));
15454var TypeLexicalDeclaration$1 = (0, import_lib3.$S)(__, EnumDeclaration);
15455var TypeLexicalDeclaration$2 = ClassSignature;
15456var TypeLexicalDeclaration$3 = (0, import_lib3.$S)(Namespace, (0, import_lib3.$E)(_), IdentifierName, DeclareBlock);
15457var TypeLexicalDeclaration$4 = (0, import_lib3.$S)(Module, _, StringLiteral, (0, import_lib3.$E)(DeclareBlock));
15458var TypeLexicalDeclaration$5 = (0, import_lib3.$S)(Global, (0, import_lib3.$E)(DeclareBlock));
15459var TypeLexicalDeclaration$$ = [TypeLexicalDeclaration$0, TypeLexicalDeclaration$1, TypeLexicalDeclaration$2, TypeLexicalDeclaration$3, TypeLexicalDeclaration$4, TypeLexicalDeclaration$5];
15460function TypeLexicalDeclaration(ctx, state2) {
15461  return (0, import_lib3.$EVENT_C)(ctx, state2, "TypeLexicalDeclaration", TypeLexicalDeclaration$$);
15462}
15463var TypeDeclarationBinding$0 = (0, import_lib3.$S)((0, import_lib3.$C)(BindingPattern, BindingIdentifier), (0, import_lib3.$E)(TypeSuffix));
15464function TypeDeclarationBinding(ctx, state2) {
15465  return (0, import_lib3.$EVENT)(ctx, state2, "TypeDeclarationBinding", TypeDeclarationBinding$0);
15466}
15467var InterfaceExtendsClause$0 = (0, import_lib3.$S)(ExtendsToken, InterfaceExtendsTarget, (0, import_lib3.$Q)((0, import_lib3.$S)(Comma, InterfaceExtendsTarget)));
15468function InterfaceExtendsClause(ctx, state2) {
15469  return (0, import_lib3.$EVENT)(ctx, state2, "InterfaceExtendsClause", InterfaceExtendsClause$0);
15470}
15471var InterfaceExtendsTarget$0 = ImplementsTarget;
15472function InterfaceExtendsTarget(ctx, state2) {
15473  return (0, import_lib3.$EVENT)(ctx, state2, "InterfaceExtendsTarget", InterfaceExtendsTarget$0);
15474}
15475var TypeKeyword$0 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$EXPECT)($L218, 'TypeKeyword "type"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
15476  return { $loc, token: $1 };
15477});
15478function TypeKeyword(ctx, state2) {
15479  return (0, import_lib3.$EVENT)(ctx, state2, "TypeKeyword", TypeKeyword$0);
15480}
15481var Enum$0 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$EXPECT)($L219, 'Enum "enum"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
15482  return { $loc, token: $1 };
15483});
15484function Enum(ctx, state2) {
15485  return (0, import_lib3.$EVENT)(ctx, state2, "Enum", Enum$0);
15486}
15487var Interface$0 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$EXPECT)($L220, 'Interface "interface"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
15488  return { $loc, token: $1 };
15489});
15490function Interface(ctx, state2) {
15491  return (0, import_lib3.$EVENT)(ctx, state2, "Interface", Interface$0);
15492}
15493var Global$0 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$EXPECT)($L221, 'Global "global"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
15494  return { $loc, token: $1 };
15495});
15496function Global(ctx, state2) {
15497  return (0, import_lib3.$EVENT)(ctx, state2, "Global", Global$0);
15498}
15499var Module$0 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$EXPECT)($L222, 'Module "module"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
15500  return { $loc, token: $1 };
15501});
15502function Module(ctx, state2) {
15503  return (0, import_lib3.$EVENT)(ctx, state2, "Module", Module$0);
15504}
15505var Namespace$0 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$EXPECT)($L223, 'Namespace "namespace"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
15506  return { $loc, token: $1 };
15507});
15508function Namespace(ctx, state2) {
15509  return (0, import_lib3.$EVENT)(ctx, state2, "Namespace", Namespace$0);
15510}
15511var InterfaceBlock$0 = (0, import_lib3.$S)(__, OpenBrace, NestedInterfaceProperties, __, CloseBrace);
15512var InterfaceBlock$1 = (0, import_lib3.$S)(__, OpenBrace, (0, import_lib3.$Q)((0, import_lib3.$S)(__, InterfaceProperty)), __, CloseBrace);
15513var InterfaceBlock$2 = NestedInterfaceBlock;
15514var InterfaceBlock$$ = [InterfaceBlock$0, InterfaceBlock$1, InterfaceBlock$2];
15515function InterfaceBlock(ctx, state2) {
15516  return (0, import_lib3.$EVENT_C)(ctx, state2, "InterfaceBlock", InterfaceBlock$$);
15517}
15518var NestedInterfaceBlock$0 = (0, import_lib3.$S)(InsertOpenBrace, NestedInterfaceProperties, InsertNewline, InsertIndent, InsertCloseBrace);
15519function NestedInterfaceBlock(ctx, state2) {
15520  return (0, import_lib3.$EVENT)(ctx, state2, "NestedInterfaceBlock", NestedInterfaceBlock$0);
15521}
15522var NestedInterfaceProperties$0 = (0, import_lib3.$TS)((0, import_lib3.$S)(PushIndent, (0, import_lib3.$Q)(NestedInterfaceProperty), PopIndent), function($skip, $loc, $0, $1, $2, $3) {
15523  var props = $2;
15524  if (props.length)
15525    return props;
15526  return $skip;
15527});
15528function NestedInterfaceProperties(ctx, state2) {
15529  return (0, import_lib3.$EVENT)(ctx, state2, "NestedInterfaceProperties", NestedInterfaceProperties$0);
15530}
15531var NestedInterfaceProperty$0 = (0, import_lib3.$S)(Nested, InterfaceProperty);
15532function NestedInterfaceProperty(ctx, state2) {
15533  return (0, import_lib3.$EVENT)(ctx, state2, "NestedInterfaceProperty", NestedInterfaceProperty$0);
15534}
15535var InterfaceProperty$0 = BasicInterfaceProperty;
15536var InterfaceProperty$1 = (0, import_lib3.$S)(NonEmptyParameters, TypeSuffix, InterfacePropertyDelimiter);
15537var InterfaceProperty$2 = (0, import_lib3.$S)(MethodSignature, InterfacePropertyDelimiter);
15538var InterfaceProperty$$ = [InterfaceProperty$0, InterfaceProperty$1, InterfaceProperty$2];
15539function InterfaceProperty(ctx, state2) {
15540  return (0, import_lib3.$EVENT_C)(ctx, state2, "InterfaceProperty", InterfaceProperty$$);
15541}
15542var BasicInterfaceProperty$0 = (0, import_lib3.$S)((0, import_lib3.$C)(TypeIndexSignature, TypeProperty), (0, import_lib3.$E)(_), TypeSuffix, InterfacePropertyDelimiter);
15543function BasicInterfaceProperty(ctx, state2) {
15544  return (0, import_lib3.$EVENT)(ctx, state2, "BasicInterfaceProperty", BasicInterfaceProperty$0);
15545}
15546var InterfacePropertyDelimiter$0 = (0, import_lib3.$S)((0, import_lib3.$E)(_), (0, import_lib3.$C)(Semicolon, Comma));
15547var InterfacePropertyDelimiter$1 = (0, import_lib3.$Y)((0, import_lib3.$S)(__, CloseBrace));
15548var InterfacePropertyDelimiter$2 = (0, import_lib3.$Y)(EOS);
15549var InterfacePropertyDelimiter$$ = [InterfacePropertyDelimiter$0, InterfacePropertyDelimiter$1, InterfacePropertyDelimiter$2];
15550function InterfacePropertyDelimiter(ctx, state2) {
15551  return (0, import_lib3.$EVENT_C)(ctx, state2, "InterfacePropertyDelimiter", InterfacePropertyDelimiter$$);
15552}
15553var ModuleBlock$0 = (0, import_lib3.$S)(__, OpenBrace, NestedModuleItems, __, CloseBrace);
15554var ModuleBlock$1 = (0, import_lib3.$S)(InsertOpenBrace, NestedModuleItems, InsertNewline, InsertIndent, InsertCloseBrace);
15555var ModuleBlock$$ = [ModuleBlock$0, ModuleBlock$1];
15556function ModuleBlock(ctx, state2) {
15557  return (0, import_lib3.$EVENT_C)(ctx, state2, "ModuleBlock", ModuleBlock$$);
15558}
15559var NestedModuleItems$0 = (0, import_lib3.$TS)((0, import_lib3.$S)(PushIndent, (0, import_lib3.$Q)(NestedModuleItem), PopIndent), function($skip, $loc, $0, $1, $2, $3) {
15560  var items = $2;
15561  if (items.length)
15562    return items;
15563  return $skip;
15564});
15565function NestedModuleItems(ctx, state2) {
15566  return (0, import_lib3.$EVENT)(ctx, state2, "NestedModuleItems", NestedModuleItems$0);
15567}
15568var NestedModuleItem$0 = (0, import_lib3.$S)(Nested, ModuleItem, StatementDelimiter);
15569function NestedModuleItem(ctx, state2) {
15570  return (0, import_lib3.$EVENT)(ctx, state2, "NestedModuleItem", NestedModuleItem$0);
15571}
15572var DeclareBlock$0 = (0, import_lib3.$S)(__, OpenBrace, NestedDeclareElements, __, CloseBrace);
15573var DeclareBlock$1 = (0, import_lib3.$S)(__, OpenBrace, (0, import_lib3.$Q)((0, import_lib3.$S)(__, DeclareElement, InterfacePropertyDelimiter)), __, CloseBrace);
15574var DeclareBlock$2 = (0, import_lib3.$S)(InsertOpenBrace, NestedDeclareElements, InsertNewline, InsertIndent, InsertCloseBrace);
15575var DeclareBlock$$ = [DeclareBlock$0, DeclareBlock$1, DeclareBlock$2];
15576function DeclareBlock(ctx, state2) {
15577  return (0, import_lib3.$EVENT_C)(ctx, state2, "DeclareBlock", DeclareBlock$$);
15578}
15579var NestedDeclareElements$0 = (0, import_lib3.$TS)((0, import_lib3.$S)(PushIndent, (0, import_lib3.$Q)(NestedDeclareElement), PopIndent), function($skip, $loc, $0, $1, $2, $3) {
15580  var decs = $2;
15581  if (decs.length)
15582    return decs;
15583  return $skip;
15584});
15585function NestedDeclareElements(ctx, state2) {
15586  return (0, import_lib3.$EVENT)(ctx, state2, "NestedDeclareElements", NestedDeclareElements$0);
15587}
15588var NestedDeclareElement$0 = (0, import_lib3.$S)(Nested, DeclareElement, InterfacePropertyDelimiter);
15589function NestedDeclareElement(ctx, state2) {
15590  return (0, import_lib3.$EVENT)(ctx, state2, "NestedDeclareElement", NestedDeclareElement$0);
15591}
15592var DeclareElement$0 = (0, import_lib3.$T)((0, import_lib3.$S)((0, import_lib3.$E)(Decorators), (0, import_lib3.$E)((0, import_lib3.$S)(Export, (0, import_lib3.$E)(_))), TypeLexicalDeclaration), function(value) {
15593  return { "ts": true, "children": value };
15594});
15595var DeclareElement$1 = (0, import_lib3.$T)((0, import_lib3.$S)((0, import_lib3.$E)((0, import_lib3.$S)(Export, (0, import_lib3.$E)(_))), TypeDeclarationRest), function(value) {
15596  return { "ts": true, "children": value };
15597});
15598var DeclareElement$$ = [DeclareElement$0, DeclareElement$1];
15599function DeclareElement(ctx, state2) {
15600  return (0, import_lib3.$EVENT_C)(ctx, state2, "DeclareElement", DeclareElement$$);
15601}
15602var EnumDeclaration$0 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$E)((0, import_lib3.$S)(Const, _)), Enum, (0, import_lib3.$E)(_), IdentifierName, EnumBlock), function($skip, $loc, $0, $1, $2, $3, $4, $5) {
15603  var isConst = $1;
15604  var id = $4;
15605  var block = $5;
15606  const ts2 = {
15607    ts: true,
15608    children: $0
15609  };
15610  const names = new Set(block.properties.map((p) => p.name.name));
15611  return {
15612    type: "EnumDeclaration",
15613    id,
15614    children: [ts2, {
15615      js: true,
15616      children: [
15617        ["let ", id, " = {};\n"],
15618        ...block.properties.map((property, i) => {
15619          let init, isString;
15620          if (property.initializer) {
15621            init = replaceNodes(
15622              deepCopy(property.initializer),
15623              (n) => n.type === "Identifier" && names.has(n.name),
15624              (n) => [id, '["', n.name, '"]']
15625            );
15626            const value = init[init.length - 1];
15627            isString = value.type === "TemplateLiteral" || value.type === "Literal" && value.subtype === "StringLiteral";
15628          } else {
15629            init = i === 0 ? " = 0" : [" = ", id, '["', block.properties[i - 1].name, '"] + 1'];
15630          }
15631          if (isString) {
15632            return [
15633              id,
15634              '["',
15635              property.name,
15636              '"]',
15637              init,
15638              ";\n"
15639            ];
15640          } else {
15641            return [
15642              id,
15643              "[",
15644              id,
15645              '["',
15646              property.name,
15647              '"]',
15648              init,
15649              '] = "',
15650              property.name,
15651              '";\n'
15652            ];
15653          }
15654        })
15655      ]
15656    }]
15657  };
15658});
15659function EnumDeclaration(ctx, state2) {
15660  return (0, import_lib3.$EVENT)(ctx, state2, "EnumDeclaration", EnumDeclaration$0);
15661}
15662var EnumBlock$0 = (0, import_lib3.$TS)((0, import_lib3.$S)(__, OpenBrace, NestedEnumProperties, __, CloseBrace), function($skip, $loc, $0, $1, $2, $3, $4, $5) {
15663  var props = $3;
15664  return {
15665    properties: props.properties,
15666    children: $0
15667  };
15668});
15669var EnumBlock$1 = (0, import_lib3.$TS)((0, import_lib3.$S)(__, OpenBrace, (0, import_lib3.$Q)((0, import_lib3.$S)(__, EnumProperty)), __, CloseBrace), function($skip, $loc, $0, $1, $2, $3, $4, $5) {
15670  var props = $3;
15671  return {
15672    properties: props.map((p) => p[1]),
15673    children: $0
15674  };
15675});
15676var EnumBlock$2 = (0, import_lib3.$TS)((0, import_lib3.$S)(InsertOpenBrace, NestedEnumProperties, InsertNewline, InsertIndent, InsertCloseBrace), function($skip, $loc, $0, $1, $2, $3, $4, $5) {
15677  var props = $2;
15678  return {
15679    properties: props.properties,
15680    children: $0
15681  };
15682});
15683var EnumBlock$$ = [EnumBlock$0, EnumBlock$1, EnumBlock$2];
15684function EnumBlock(ctx, state2) {
15685  return (0, import_lib3.$EVENT_C)(ctx, state2, "EnumBlock", EnumBlock$$);
15686}
15687var NestedEnumProperties$0 = (0, import_lib3.$TS)((0, import_lib3.$S)(PushIndent, (0, import_lib3.$Q)(NestedEnumPropertyLine), PopIndent), function($skip, $loc, $0, $1, $2, $3) {
15688  var props = $2;
15689  if (!props.length)
15690    return $skip;
15691  return {
15692    properties: props.flat().map((p) => p.property),
15693    children: $0
15694  };
15695});
15696function NestedEnumProperties(ctx, state2) {
15697  return (0, import_lib3.$EVENT)(ctx, state2, "NestedEnumProperties", NestedEnumProperties$0);
15698}
15699var NestedEnumPropertyLine$0 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$S)(Nested, EnumProperty), (0, import_lib3.$Q)((0, import_lib3.$S)((0, import_lib3.$E)(_), EnumProperty))), function($skip, $loc, $0, $1, $2) {
15700  return [$1, ...$2].map((pair) => ({
15701    property: pair[1],
15702    children: pair
15703  }));
15704});
15705function NestedEnumPropertyLine(ctx, state2) {
15706  return (0, import_lib3.$EVENT)(ctx, state2, "NestedEnumPropertyLine", NestedEnumPropertyLine$0);
15707}
15708var EnumProperty$0 = (0, import_lib3.$TS)((0, import_lib3.$S)(Identifier, (0, import_lib3.$E)((0, import_lib3.$S)(__, Equals, MaybeNestedExtendedExpression)), ObjectPropertyDelimiter), function($skip, $loc, $0, $1, $2, $3) {
15709  var name = $1;
15710  var initializer = $2;
15711  return {
15712    type: "EnumProperty",
15713    name,
15714    initializer,
15715    children: $0
15716  };
15717});
15718function EnumProperty(ctx, state2) {
15719  return (0, import_lib3.$EVENT)(ctx, state2, "EnumProperty", EnumProperty$0);
15720}
15721var TypeProperty$0 = (0, import_lib3.$S)((0, import_lib3.$E)((0, import_lib3.$S)(Readonly, NotDedented)), PropertyName);
15722function TypeProperty(ctx, state2) {
15723  return (0, import_lib3.$EVENT)(ctx, state2, "TypeProperty", TypeProperty$0);
15724}
15725var TypeIndexSignature$0 = (0, import_lib3.$S)((0, import_lib3.$E)((0, import_lib3.$S)((0, import_lib3.$R$0)((0, import_lib3.$EXPECT)($R84, "TypeIndexSignature /[+-]?/")), Readonly, NotDedented)), OpenBracket, TypeIndex, CloseBracket, (0, import_lib3.$E)((0, import_lib3.$S)(__, (0, import_lib3.$R$0)((0, import_lib3.$EXPECT)($R12, "TypeIndexSignature /[+-]/")), (0, import_lib3.$Y)((0, import_lib3.$S)((0, import_lib3.$E)(_), QuestionMark)))));
15726function TypeIndexSignature(ctx, state2) {
15727  return (0, import_lib3.$EVENT)(ctx, state2, "TypeIndexSignature", TypeIndexSignature$0);
15728}
15729var TypeIndex$0 = (0, import_lib3.$S)(__, Identifier, TypeSuffix);
15730var TypeIndex$1 = (0, import_lib3.$S)(__, PropertyName, __, In, Type, (0, import_lib3.$E)((0, import_lib3.$S)(__, As, Type)));
15731var TypeIndex$$ = [TypeIndex$0, TypeIndex$1];
15732function TypeIndex(ctx, state2) {
15733  return (0, import_lib3.$EVENT_C)(ctx, state2, "TypeIndex", TypeIndex$$);
15734}
15735var TypeSuffix$0 = (0, import_lib3.$T)((0, import_lib3.$S)((0, import_lib3.$E)(_), (0, import_lib3.$E)(QuestionMark), (0, import_lib3.$E)(_), Colon, MaybeNestedType), function(value) {
15736  var optional = value[1];
15737  var t = value[4];
15738  return { "type": "TypeSuffix", "ts": true, "optional": optional, "t": t, "children": value };
15739});
15740var TypeSuffix$1 = (0, import_lib3.$T)((0, import_lib3.$S)((0, import_lib3.$E)(_), QuestionMark, (0, import_lib3.$E)(_)), function(value) {
15741  var optional = value[1];
15742  return { "type": "TypeSuffix", "ts": true, "optional": optional, "children": value };
15743});
15744var TypeSuffix$2 = (0, import_lib3.$TS)((0, import_lib3.$S)(NonNullAssertion, (0, import_lib3.$E)(_), (0, import_lib3.$E)((0, import_lib3.$S)(Colon, MaybeNestedType))), function($skip, $loc, $0, $1, $2, $3) {
15745  var nonnull = $1;
15746  var ct = $3;
15747  const [colon, t] = ct ?? [];
15748  return {
15749    type: "TypeSuffix",
15750    ts: true,
15751    nonnull,
15752    t,
15753    children: [$1, $2, colon, t]
15754  };
15755});
15756var TypeSuffix$$ = [TypeSuffix$0, TypeSuffix$1, TypeSuffix$2];
15757function TypeSuffix(ctx, state2) {
15758  return (0, import_lib3.$EVENT_C)(ctx, state2, "TypeSuffix", TypeSuffix$$);
15759}
15760var MaybeNestedType$0 = NestedInterfaceBlock;
15761var MaybeNestedType$1 = (0, import_lib3.$TS)((0, import_lib3.$S)(PushIndent, (0, import_lib3.$E)((0, import_lib3.$S)(Nested, Type)), PopIndent), function($skip, $loc, $0, $1, $2, $3) {
15762  if (!$2)
15763    return $skip;
15764  return $2;
15765});
15766var MaybeNestedType$2 = Type;
15767var MaybeNestedType$$ = [MaybeNestedType$0, MaybeNestedType$1, MaybeNestedType$2];
15768function MaybeNestedType(ctx, state2) {
15769  return (0, import_lib3.$EVENT_C)(ctx, state2, "MaybeNestedType", MaybeNestedType$$);
15770}
15771var ReturnTypeSuffix$0 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$E)(_), (0, import_lib3.$E)(QuestionMark), (0, import_lib3.$E)(_), Colon, ReturnType), function($skip, $loc, $0, $1, $2, $3, $4, $5) {
15772  var optional = $2;
15773  var t = $5;
15774  return {
15775    ...t,
15776    optional,
15777    children: [$1, optional, $3, $4, ...t.children]
15778  };
15779});
15780function ReturnTypeSuffix(ctx, state2) {
15781  return (0, import_lib3.$EVENT)(ctx, state2, "ReturnTypeSuffix", ReturnTypeSuffix$0);
15782}
15783var ReturnType$0 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$E)((0, import_lib3.$S)(__, (0, import_lib3.$EXPECT)($L224, 'ReturnType "asserts"'), NonIdContinue)), TypePredicate), function($skip, $loc, $0, $1, $2) {
15784  var asserts = $1;
15785  var t = $2;
15786  if (asserts) {
15787    t = {
15788      type: "AssertsType",
15789      t,
15790      children: [asserts[0], asserts[1], t],
15791      ts: true
15792    };
15793  }
15794  return {
15795    type: "ReturnTypeAnnotation",
15796    children: [t],
15797    t,
15798    ts: true
15799  };
15800});
15801function ReturnType(ctx, state2) {
15802  return (0, import_lib3.$EVENT)(ctx, state2, "ReturnType", ReturnType$0);
15803}
15804var TypePredicate$0 = (0, import_lib3.$TS)((0, import_lib3.$S)(Type, (0, import_lib3.$E)((0, import_lib3.$S)(__, (0, import_lib3.$EXPECT)($L166, 'TypePredicate "is"'), NonIdContinue, Type))), function($skip, $loc, $0, $1, $2) {
15805  var lhs = $1;
15806  var rhs = $2;
15807  if (!rhs)
15808    return lhs;
15809  return {
15810    type: "TypePredicate",
15811    lhs,
15812    rhs: rhs[3],
15813    children: [lhs, ...rhs]
15814  };
15815});
15816function TypePredicate(ctx, state2) {
15817  return (0, import_lib3.$EVENT)(ctx, state2, "TypePredicate", TypePredicate$0);
15818}
15819var Type$0 = TypeConditional;
15820function Type(ctx, state2) {
15821  return (0, import_lib3.$EVENT)(ctx, state2, "Type", Type$0);
15822}
15823var TypeBinary$0 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$E)((0, import_lib3.$S)(__, TypeBinaryOp, __)), TypeUnary, (0, import_lib3.$Q)((0, import_lib3.$S)(__, TypeBinaryOp, __, TypeUnary))), function($skip, $loc, $0, $1, $2, $3) {
15824  var optionalPrefix = $1;
15825  var t = $2;
15826  var ops = $3;
15827  if (!ops.length && !optionalPrefix)
15828    return t;
15829  if (!ops.length)
15830    return [optionalPrefix, t];
15831  if (!optionalPrefix)
15832    return [t, ...ops];
15833  return [optionalPrefix, t, ops];
15834});
15835function TypeBinary(ctx, state2) {
15836  return (0, import_lib3.$EVENT)(ctx, state2, "TypeBinary", TypeBinary$0);
15837}
15838var TypeUnary$0 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$Q)((0, import_lib3.$S)(__, TypeUnaryOp)), TypePrimary, (0, import_lib3.$Q)(TypeUnarySuffix)), function($skip, $loc, $0, $1, $2, $3) {
15839  var prefix = $1;
15840  var t = $2;
15841  var suffix = $3;
15842  if (!prefix.length && !suffix.length)
15843    return t;
15844  return {
15845    type: "UnaryType",
15846    prefix,
15847    suffix,
15848    t,
15849    // omit empty prefix for trimming space
15850    children: prefix.length ? $0 : [t, suffix]
15851  };
15852});
15853function TypeUnary(ctx, state2) {
15854  return (0, import_lib3.$EVENT)(ctx, state2, "TypeUnary", TypeUnary$0);
15855}
15856var TypeUnarySuffix$0 = TypeIndexedAccess;
15857var TypeUnarySuffix$1 = QuestionMark;
15858var TypeUnarySuffix$$ = [TypeUnarySuffix$0, TypeUnarySuffix$1];
15859function TypeUnarySuffix(ctx, state2) {
15860  return (0, import_lib3.$EVENT_C)(ctx, state2, "TypeUnarySuffix", TypeUnarySuffix$$);
15861}
15862var TypeUnaryOp$0 = (0, import_lib3.$S)((0, import_lib3.$EXPECT)($L225, 'TypeUnaryOp "keyof"'), NonIdContinue);
15863var TypeUnaryOp$1 = (0, import_lib3.$S)((0, import_lib3.$EXPECT)($L185, 'TypeUnaryOp "readonly"'), NonIdContinue);
15864var TypeUnaryOp$$ = [TypeUnaryOp$0, TypeUnaryOp$1];
15865function TypeUnaryOp(ctx, state2) {
15866  return (0, import_lib3.$EVENT_C)(ctx, state2, "TypeUnaryOp", TypeUnaryOp$$);
15867}
15868var TypeIndexedAccess$0 = (0, import_lib3.$S)(OpenBracket, (0, import_lib3.$E)(Type), __, CloseBracket);
15869var TypeIndexedAccess$1 = (0, import_lib3.$TS)((0, import_lib3.$S)(Dot, (0, import_lib3.$C)(TemplateLiteral, StringLiteral, IntegerLiteral)), function($skip, $loc, $0, $1, $2) {
15870  var dot = $1;
15871  var literal = $2;
15872  const open = { ...dot, token: "[" };
15873  return [
15874    open,
15875    literal,
15876    "]"
15877  ];
15878});
15879var TypeIndexedAccess$2 = (0, import_lib3.$TS)((0, import_lib3.$S)(CoffeePrototypeEnabled, DoubleColon, (0, import_lib3.$E)((0, import_lib3.$C)(IdentifierName, LengthShorthand))), function($skip, $loc, $0, $1, $2, $3) {
15880  var p = $2;
15881  var id = $3;
15882  const open = { ...p, token: '["' };
15883  return [
15884    open,
15885    id,
15886    '"]'
15887  ];
15888});
15889var TypeIndexedAccess$$ = [TypeIndexedAccess$0, TypeIndexedAccess$1, TypeIndexedAccess$2];
15890function TypeIndexedAccess(ctx, state2) {
15891  return (0, import_lib3.$EVENT_C)(ctx, state2, "TypeIndexedAccess", TypeIndexedAccess$$);
15892}
15893var UnknownAlias$0 = (0, import_lib3.$TV)((0, import_lib3.$EXPECT)($L226, 'UnknownAlias "???"'), function($skip, $loc, $0, $1) {
15894  return { $loc, token: "unknown" };
15895});
15896function UnknownAlias(ctx, state2) {
15897  return (0, import_lib3.$EVENT)(ctx, state2, "UnknownAlias", UnknownAlias$0);
15898}
15899var TypePrimary$0 = (0, import_lib3.$S)((0, import_lib3.$E)(_), Infer, (0, import_lib3.$E)(_), IdentifierName, (0, import_lib3.$E)((0, import_lib3.$S)(NotDedented, ExtendsToken, Type)));
15900var TypePrimary$1 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$E)(_), Typeof, (0, import_lib3.$E)(_), UnaryExpression), function($skip, $loc, $0, $1, $2, $3, $4) {
15901  return {
15902    type: "TypeofType",
15903    children: $0
15904  };
15905});
15906var TypePrimary$2 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$E)(_), TypeTuple), function($skip, $loc, $0, $1, $2) {
15907  return { ...$2, children: [$1, ...$2.children] };
15908});
15909var TypePrimary$3 = InterfaceBlock;
15910var TypePrimary$4 = (0, import_lib3.$S)((0, import_lib3.$E)(_), TypeFunction);
15911var TypePrimary$5 = (0, import_lib3.$S)((0, import_lib3.$E)(_), InlineInterfaceLiteral);
15912var TypePrimary$6 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$E)(_), ImportType), function($skip, $loc, $0, $1, $2) {
15913  var t = $2;
15914  return {
15915    type: "ImportType",
15916    t,
15917    children: $0
15918  };
15919});
15920var TypePrimary$7 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$E)(_), TypeLiteral), function($skip, $loc, $0, $1, $2) {
15921  var t = $2;
15922  return {
15923    type: "LiteralType",
15924    t,
15925    children: $0
15926  };
15927});
15928var TypePrimary$8 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$E)(_), UnknownAlias), function($skip, $loc, $0, $1, $2) {
15929  return {
15930    type: "IdentifierType",
15931    children: $0,
15932    raw: $2.token,
15933    args: void 0
15934  };
15935});
15936var TypePrimary$9 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$E)(_), IdentifierName, (0, import_lib3.$Q)((0, import_lib3.$S)(Dot, IdentifierName)), (0, import_lib3.$E)(TypeArguments)), function($skip, $loc, $0, $1, $2, $3, $4) {
15937  var args = $4;
15938  return {
15939    type: "IdentifierType",
15940    children: $0,
15941    raw: [$2.name, ...$3.map(([dot, id]) => dot.token + id.name)].join(""),
15942    args
15943  };
15944});
15945var TypePrimary$10 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$E)(_), OpenParen, (0, import_lib3.$C)(Type, (0, import_lib3.$S)(EOS, Type)), __, CloseParen), function($skip, $loc, $0, $1, $2, $3, $4, $5) {
15946  return {
15947    type: "ParenthesizedType",
15948    children: $0
15949  };
15950});
15951var TypePrimary$$ = [TypePrimary$0, TypePrimary$1, TypePrimary$2, TypePrimary$3, TypePrimary$4, TypePrimary$5, TypePrimary$6, TypePrimary$7, TypePrimary$8, TypePrimary$9, TypePrimary$10];
15952function TypePrimary(ctx, state2) {
15953  return (0, import_lib3.$EVENT_C)(ctx, state2, "TypePrimary", TypePrimary$$);
15954}
15955var ImportType$0 = (0, import_lib3.$S)((0, import_lib3.$EXPECT)($L15, 'ImportType "import"'), OpenParen, __, StringLiteral, __, CloseParen, (0, import_lib3.$E)((0, import_lib3.$S)(Dot, IdentifierName)), (0, import_lib3.$E)(TypeArguments));
15956var ImportType$1 = (0, import_lib3.$S)((0, import_lib3.$EXPECT)($L15, 'ImportType "import"'), InsertOpenParen, (0, import_lib3.$E)(Trimmed_), StringLiteral, InsertCloseParen);
15957var ImportType$$ = [ImportType$0, ImportType$1];
15958function ImportType(ctx, state2) {
15959  return (0, import_lib3.$EVENT_C)(ctx, state2, "ImportType", ImportType$$);
15960}
15961var TypeTuple$0 = (0, import_lib3.$TS)((0, import_lib3.$S)(OpenBracket, (0, import_lib3.$C)(NestedTypeList, (0, import_lib3.$E)(TypeList)), __, CloseBracket), function($skip, $loc, $0, $1, $2, $3, $4) {
15962  return {
15963    type: "TypeTuple",
15964    children: $0
15965  };
15966});
15967function TypeTuple(ctx, state2) {
15968  return (0, import_lib3.$EVENT)(ctx, state2, "TypeTuple", TypeTuple$0);
15969}
15970var TypeList$0 = (0, import_lib3.$S)(TypeElement, (0, import_lib3.$Q)((0, import_lib3.$S)(__, Comma, TypeElement)));
15971function TypeList(ctx, state2) {
15972  return (0, import_lib3.$EVENT)(ctx, state2, "TypeList", TypeList$0);
15973}
15974var TypeElement$0 = (0, import_lib3.$TS)((0, import_lib3.$S)(__, (0, import_lib3.$E)((0, import_lib3.$S)(DotDotDot, __)), IdentifierName, (0, import_lib3.$E)((0, import_lib3.$S)((0, import_lib3.$E)(_), DotDotDot)), (0, import_lib3.$S)(__, (0, import_lib3.$E)((0, import_lib3.$S)(QuestionMark, (0, import_lib3.$E)(_))), Colon, __), Type), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6) {
15975  var ws = $1;
15976  var dots1 = $2;
15977  var name = $3;
15978  var dots2 = $4;
15979  var colon = $5;
15980  var type = $6;
15981  let dots = dots1 || dots2 && [dots2[1], dots2[0]];
15982  if (dots1 && dots2) {
15983    dots = [dots, {
15984      type: "Error",
15985      message: "... both before and after identifier"
15986    }];
15987  }
15988  return [ws, dots, name, colon, type];
15989});
15990var TypeElement$1 = (0, import_lib3.$S)(__, DotDotDot, __, Type);
15991var TypeElement$2 = (0, import_lib3.$TS)((0, import_lib3.$S)(Type, (0, import_lib3.$E)((0, import_lib3.$S)((0, import_lib3.$E)(_), DotDotDot))), function($skip, $loc, $0, $1, $2) {
15992  var type = $1;
15993  var spaceDots = $2;
15994  if (!spaceDots)
15995    return type;
15996  const [space, dots] = spaceDots;
15997  const ws = getTrimmingSpace(type);
15998  if (!ws)
15999    return [dots, space, type];
16000  return [ws, dots, space, insertTrimmingSpace(type, "")];
16001});
16002var TypeElement$$ = [TypeElement$0, TypeElement$1, TypeElement$2];
16003function TypeElement(ctx, state2) {
16004  return (0, import_lib3.$EVENT_C)(ctx, state2, "TypeElement", TypeElement$$);
16005}
16006var NestedTypeList$0 = (0, import_lib3.$TS)((0, import_lib3.$S)(PushIndent, (0, import_lib3.$Q)(NestedType), PopIndent), function($skip, $loc, $0, $1, $2, $3) {
16007  var types = $2;
16008  if (types.length)
16009    return types;
16010  return $skip;
16011});
16012function NestedTypeList(ctx, state2) {
16013  return (0, import_lib3.$EVENT)(ctx, state2, "NestedTypeList", NestedTypeList$0);
16014}
16015var NestedType$0 = (0, import_lib3.$S)(Nested, TypeElement, ArrayElementDelimiter);
16016function NestedType(ctx, state2) {
16017  return (0, import_lib3.$EVENT)(ctx, state2, "NestedType", NestedType$0);
16018}
16019var TypeConditional$0 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$E)(_), (0, import_lib3.$EXPECT)($R85, "TypeConditional /(?=if|unless)/"), TypeIfThenElse), function($skip, $loc, $0, $1, $2, $3) {
16020  return [$1, expressionizeTypeIf($3)];
16021});
16022var TypeConditional$1 = (0, import_lib3.$TS)((0, import_lib3.$S)(TypeCondition, NotDedented, QuestionMark, __, Type, __, Colon, __, Type), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7, $8, $9) {
16023  if ($1.negated)
16024    return [$1, $2, $3, $4, $9, $6, $7, $8, $5];
16025  return $0;
16026});
16027var TypeConditional$2 = TypeBinary;
16028var TypeConditional$$ = [TypeConditional$0, TypeConditional$1, TypeConditional$2];
16029function TypeConditional(ctx, state2) {
16030  return (0, import_lib3.$EVENT_C)(ctx, state2, "TypeConditional", TypeConditional$$);
16031}
16032var TypeCondition$0 = (0, import_lib3.$TS)((0, import_lib3.$S)(TypeBinary, (0, import_lib3.$E)(IndentedFurther), (0, import_lib3.$C)(ExtendsToken, NotExtendsToken), Type), function($skip, $loc, $0, $1, $2, $3, $4) {
16033  return {
16034    type: "TypeCondition",
16035    negated: $3.negated,
16036    children: $0
16037  };
16038});
16039function TypeCondition(ctx, state2) {
16040  return (0, import_lib3.$EVENT)(ctx, state2, "TypeCondition", TypeCondition$0);
16041}
16042var TypeIfThenElse$0 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$E)(_), (0, import_lib3.$C)(If, Unless), (0, import_lib3.$S)(OpenParen, TypeCondition, CloseParen), TypeBlock, (0, import_lib3.$E)(TypeElse)), function($skip, $loc, $0, $1, $2, $3, $4, $5) {
16043  return [$1, $2, $3[1], $4, $5];
16044});
16045var TypeIfThenElse$1 = (0, import_lib3.$S)((0, import_lib3.$E)(_), (0, import_lib3.$C)(If, Unless), TypeCondition, TypeBlock, (0, import_lib3.$E)(TypeElse));
16046var TypeIfThenElse$$ = [TypeIfThenElse$0, TypeIfThenElse$1];
16047function TypeIfThenElse(ctx, state2) {
16048  return (0, import_lib3.$EVENT_C)(ctx, state2, "TypeIfThenElse", TypeIfThenElse$$);
16049}
16050var TypeElse$0 = (0, import_lib3.$S)(NotDedented, Else, TypeBlock);
16051function TypeElse(ctx, state2) {
16052  return (0, import_lib3.$EVENT)(ctx, state2, "TypeElse", TypeElse$0);
16053}
16054var TypeBlock$0 = (0, import_lib3.$T)((0, import_lib3.$S)(Then, Type), function(value) {
16055  return value[1];
16056});
16057var TypeBlock$1 = (0, import_lib3.$T)((0, import_lib3.$S)((0, import_lib3.$N)(EOS), Type), function(value) {
16058  return value[1];
16059});
16060var TypeBlock$2 = NestedInterfaceBlock;
16061var TypeBlock$3 = (0, import_lib3.$TS)((0, import_lib3.$S)(PushIndent, (0, import_lib3.$E)((0, import_lib3.$S)(Nested, Type)), PopIndent), function($skip, $loc, $0, $1, $2, $3) {
16062  if (!$2)
16063    return $skip;
16064  return $2;
16065});
16066var TypeBlock$$ = [TypeBlock$0, TypeBlock$1, TypeBlock$2, TypeBlock$3];
16067function TypeBlock(ctx, state2) {
16068  return (0, import_lib3.$EVENT_C)(ctx, state2, "TypeBlock", TypeBlock$$);
16069}
16070var TypeTemplateSubstitution$0 = (0, import_lib3.$S)(SubstitutionStart, Type, __, CloseBrace);
16071function TypeTemplateSubstitution(ctx, state2) {
16072  return (0, import_lib3.$EVENT)(ctx, state2, "TypeTemplateSubstitution", TypeTemplateSubstitution$0);
16073}
16074var TypeTemplateLiteral$0 = (0, import_lib3.$TS)((0, import_lib3.$S)(Backtick, (0, import_lib3.$Q)((0, import_lib3.$C)(TemplateCharacters, TypeTemplateSubstitution)), Backtick), function($skip, $loc, $0, $1, $2, $3) {
16075  return {
16076    type: "TemplateLiteral",
16077    children: $0
16078  };
16079});
16080var TypeTemplateLiteral$1 = CoffeeInterpolatedDoubleQuotedTypeLiteral;
16081var TypeTemplateLiteral$$ = [TypeTemplateLiteral$0, TypeTemplateLiteral$1];
16082function TypeTemplateLiteral(ctx, state2) {
16083  return (0, import_lib3.$EVENT_C)(ctx, state2, "TypeTemplateLiteral", TypeTemplateLiteral$$);
16084}
16085var CoffeeStringTypeSubstitution$0 = (0, import_lib3.$S)(CoffeeSubstitutionStart, Type, __, CloseBrace);
16086function CoffeeStringTypeSubstitution(ctx, state2) {
16087  return (0, import_lib3.$EVENT)(ctx, state2, "CoffeeStringTypeSubstitution", CoffeeStringTypeSubstitution$0);
16088}
16089var CoffeeInterpolatedDoubleQuotedTypeLiteral$0 = (0, import_lib3.$TS)((0, import_lib3.$S)(CoffeeInterpolationEnabled, DoubleQuote, (0, import_lib3.$Q)((0, import_lib3.$C)(CoffeeDoubleQuotedStringCharacters, CoffeeStringTypeSubstitution)), DoubleQuote), function($skip, $loc, $0, $1, $2, $3, $4) {
16090  var s = $2;
16091  var parts = $3;
16092  var e = $4;
16093  return processCoffeeInterpolation(s, parts, e, $loc);
16094});
16095function CoffeeInterpolatedDoubleQuotedTypeLiteral(ctx, state2) {
16096  return (0, import_lib3.$EVENT)(ctx, state2, "CoffeeInterpolatedDoubleQuotedTypeLiteral", CoffeeInterpolatedDoubleQuotedTypeLiteral$0);
16097}
16098var TypeLiteral$0 = TypeTemplateLiteral;
16099var TypeLiteral$1 = Literal;
16100var TypeLiteral$2 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$EXPECT)($R12, "TypeLiteral /[+-]/"), NumericLiteral), function($skip, $loc, $0, $1, $2) {
16101  var sign = $1;
16102  var num = $2;
16103  if (sign[0] === "+")
16104    return num;
16105  return $0;
16106});
16107var TypeLiteral$3 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$EXPECT)($L208, 'TypeLiteral "void"'), NonIdContinue), function($skip, $loc, $0, $1, $2) {
16108  return { type: "VoidType", $loc, token: $1 };
16109});
16110var TypeLiteral$4 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$EXPECT)($L227, 'TypeLiteral "unique"'), _, (0, import_lib3.$EXPECT)($L228, 'TypeLiteral "symbol"'), NonIdContinue), function($skip, $loc, $0, $1, $2, $3, $4) {
16111  return { type: "UniqueSymbolType", children: $0 };
16112});
16113var TypeLiteral$5 = (0, import_lib3.$TV)((0, import_lib3.$EXPECT)($L229, 'TypeLiteral "[]"'), function($skip, $loc, $0, $1) {
16114  return { $loc, token: "[]" };
16115});
16116var TypeLiteral$$ = [TypeLiteral$0, TypeLiteral$1, TypeLiteral$2, TypeLiteral$3, TypeLiteral$4, TypeLiteral$5];
16117function TypeLiteral(ctx, state2) {
16118  return (0, import_lib3.$EVENT_C)(ctx, state2, "TypeLiteral", TypeLiteral$$);
16119}
16120var InlineInterfaceLiteral$0 = (0, import_lib3.$S)(InsertInlineOpenBrace, InlineBasicInterfaceProperty, (0, import_lib3.$Q)((0, import_lib3.$S)((0, import_lib3.$C)(IndentedFurther, (0, import_lib3.$E)(_)), InlineBasicInterfaceProperty)), InsertCloseBrace);
16121function InlineInterfaceLiteral(ctx, state2) {
16122  return (0, import_lib3.$EVENT)(ctx, state2, "InlineInterfaceLiteral", InlineInterfaceLiteral$0);
16123}
16124var InlineBasicInterfaceProperty$0 = (0, import_lib3.$S)((0, import_lib3.$C)(TypeIndexSignature, TypeProperty), (0, import_lib3.$E)(QuestionMark), Colon, Type, InlineInterfacePropertyDelimiter);
16125function InlineBasicInterfaceProperty(ctx, state2) {
16126  return (0, import_lib3.$EVENT)(ctx, state2, "InlineBasicInterfaceProperty", InlineBasicInterfaceProperty$0);
16127}
16128var InlineInterfacePropertyDelimiter$0 = (0, import_lib3.$C)((0, import_lib3.$S)((0, import_lib3.$E)(_), Semicolon), CommaDelimiter);
16129var InlineInterfacePropertyDelimiter$1 = (0, import_lib3.$T)((0, import_lib3.$S)((0, import_lib3.$Y)((0, import_lib3.$S)((0, import_lib3.$C)(IndentedFurther, (0, import_lib3.$E)(_)), InlineBasicInterfaceProperty)), InsertComma), function(value) {
16130  return value[1];
16131});
16132var InlineInterfacePropertyDelimiter$2 = (0, import_lib3.$Y)((0, import_lib3.$S)(__, (0, import_lib3.$C)((0, import_lib3.$EXPECT)($L16, 'InlineInterfacePropertyDelimiter ":"'), (0, import_lib3.$EXPECT)($L125, 'InlineInterfacePropertyDelimiter ")"'), (0, import_lib3.$EXPECT)($L45, 'InlineInterfacePropertyDelimiter "]"'), (0, import_lib3.$EXPECT)($L36, 'InlineInterfacePropertyDelimiter "}"'))));
16133var InlineInterfacePropertyDelimiter$3 = (0, import_lib3.$Y)(EOS);
16134var InlineInterfacePropertyDelimiter$$ = [InlineInterfacePropertyDelimiter$0, InlineInterfacePropertyDelimiter$1, InlineInterfacePropertyDelimiter$2, InlineInterfacePropertyDelimiter$3];
16135function InlineInterfacePropertyDelimiter(ctx, state2) {
16136  return (0, import_lib3.$EVENT_C)(ctx, state2, "InlineInterfacePropertyDelimiter", InlineInterfacePropertyDelimiter$$);
16137}
16138var TypeBinaryOp$0 = (0, import_lib3.$TV)((0, import_lib3.$EXPECT)($L109, 'TypeBinaryOp "|"'), function($skip, $loc, $0, $1) {
16139  return { $loc, token: "|" };
16140});
16141var TypeBinaryOp$1 = (0, import_lib3.$TV)((0, import_lib3.$EXPECT)($L108, 'TypeBinaryOp "&"'), function($skip, $loc, $0, $1) {
16142  return { $loc, token: "&" };
16143});
16144var TypeBinaryOp$$ = [TypeBinaryOp$0, TypeBinaryOp$1];
16145function TypeBinaryOp(ctx, state2) {
16146  return (0, import_lib3.$EVENT_C)(ctx, state2, "TypeBinaryOp", TypeBinaryOp$$);
16147}
16148var TypeFunction$0 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$E)((0, import_lib3.$S)((0, import_lib3.$E)((0, import_lib3.$S)(Abstract, (0, import_lib3.$E)(_))), New, (0, import_lib3.$E)(_))), Parameters, __, TypeArrowFunction, (0, import_lib3.$E)(ReturnType)), function($skip, $loc, $0, $1, $2, $3, $4, $5) {
16149  var type = $5;
16150  if (type) {
16151    return $0;
16152  }
16153  return [...$0, "void"];
16154});
16155function TypeFunction(ctx, state2) {
16156  return (0, import_lib3.$EVENT)(ctx, state2, "TypeFunction", TypeFunction$0);
16157}
16158var TypeArrowFunction$0 = (0, import_lib3.$TV)((0, import_lib3.$C)((0, import_lib3.$EXPECT)($L13, 'TypeArrowFunction "=>"'), (0, import_lib3.$EXPECT)($L14, 'TypeArrowFunction "\u21D2"'), (0, import_lib3.$EXPECT)($L34, 'TypeArrowFunction "->"'), (0, import_lib3.$EXPECT)($L35, 'TypeArrowFunction "\u2192"')), function($skip, $loc, $0, $1) {
16159  return { $loc, token: "=>" };
16160});
16161function TypeArrowFunction(ctx, state2) {
16162  return (0, import_lib3.$EVENT)(ctx, state2, "TypeArrowFunction", TypeArrowFunction$0);
16163}
16164var TypeArguments$0 = (0, import_lib3.$TS)((0, import_lib3.$S)(OpenAngleBracket, (0, import_lib3.$P)(TypeArgument), __, CloseAngleBracket), function($skip, $loc, $0, $1, $2, $3, $4) {
16165  var args = $2;
16166  return {
16167    type: "TypeArguments",
16168    ts: true,
16169    types: args.map(([, t]) => t),
16170    children: $0
16171  };
16172});
16173function TypeArguments(ctx, state2) {
16174  return (0, import_lib3.$EVENT)(ctx, state2, "TypeArguments", TypeArguments$0);
16175}
16176var TypeArgument$0 = (0, import_lib3.$S)(__, Type, TypeArgumentDelimiter);
16177function TypeArgument(ctx, state2) {
16178  return (0, import_lib3.$EVENT)(ctx, state2, "TypeArgument", TypeArgument$0);
16179}
16180var TypeArgumentDelimiter$0 = TypeParameterDelimiter;
16181function TypeArgumentDelimiter(ctx, state2) {
16182  return (0, import_lib3.$EVENT)(ctx, state2, "TypeArgumentDelimiter", TypeArgumentDelimiter$0);
16183}
16184var TypeParameters$0 = (0, import_lib3.$TS)((0, import_lib3.$S)(OpenAngleBracket, (0, import_lib3.$P)(TypeParameter), __, CloseAngleBracket), function($skip, $loc, $0, $1, $2, $3, $4) {
16185  var parameters = $2;
16186  return {
16187    type: "TypeParameters",
16188    parameters,
16189    ts: true,
16190    children: $0
16191  };
16192});
16193function TypeParameters(ctx, state2) {
16194  return (0, import_lib3.$EVENT)(ctx, state2, "TypeParameters", TypeParameters$0);
16195}
16196var TypeParameter$0 = (0, import_lib3.$S)(__, (0, import_lib3.$E)((0, import_lib3.$S)((0, import_lib3.$EXPECT)($L165, 'TypeParameter "const"'), (0, import_lib3.$E)(_))), Identifier, (0, import_lib3.$E)(TypeConstraint), (0, import_lib3.$E)(TypeInitializer), TypeParameterDelimiter);
16197function TypeParameter(ctx, state2) {
16198  return (0, import_lib3.$EVENT)(ctx, state2, "TypeParameter", TypeParameter$0);
16199}
16200var TypeConstraint$0 = (0, import_lib3.$S)(__, ExtendsToken, Type);
16201function TypeConstraint(ctx, state2) {
16202  return (0, import_lib3.$EVENT)(ctx, state2, "TypeConstraint", TypeConstraint$0);
16203}
16204var TypeInitializer$0 = (0, import_lib3.$S)(__, (0, import_lib3.$EXPECT)($L3, 'TypeInitializer "="'), Type);
16205function TypeInitializer(ctx, state2) {
16206  return (0, import_lib3.$EVENT)(ctx, state2, "TypeInitializer", TypeInitializer$0);
16207}
16208var TypeParameterDelimiter$0 = (0, import_lib3.$S)((0, import_lib3.$E)(_), Comma);
16209var TypeParameterDelimiter$1 = (0, import_lib3.$Y)((0, import_lib3.$S)(__, (0, import_lib3.$EXPECT)($L44, 'TypeParameterDelimiter ">"')));
16210var TypeParameterDelimiter$2 = (0, import_lib3.$T)((0, import_lib3.$S)((0, import_lib3.$Y)(EOS), InsertComma), function(value) {
16211  return value[1];
16212});
16213var TypeParameterDelimiter$$ = [TypeParameterDelimiter$0, TypeParameterDelimiter$1, TypeParameterDelimiter$2];
16214function TypeParameterDelimiter(ctx, state2) {
16215  return (0, import_lib3.$EVENT_C)(ctx, state2, "TypeParameterDelimiter", TypeParameterDelimiter$$);
16216}
16217var ThisType$0 = (0, import_lib3.$T)((0, import_lib3.$S)((0, import_lib3.$E)(_), (0, import_lib3.$C)(This, AtThis), Colon, Type, ParameterElementDelimiter), function(value) {
16218  return { "type": "ThisType", "ts": true, "children": value };
16219});
16220function ThisType(ctx, state2) {
16221  return (0, import_lib3.$EVENT)(ctx, state2, "ThisType", ThisType$0);
16222}
16223var Shebang$0 = (0, import_lib3.$S)((0, import_lib3.$R$0)((0, import_lib3.$EXPECT)($R86, "Shebang /#![^\\r\\n]*/")), EOL);
16224function Shebang(ctx, state2) {
16225  return (0, import_lib3.$EVENT)(ctx, state2, "Shebang", Shebang$0);
16226}
16227var CivetPrologue$0 = (0, import_lib3.$T)((0, import_lib3.$S)((0, import_lib3.$EXPECT)($R87, "CivetPrologue /[\\t ]*/"), DoubleQuote, CivetPrologueContent, DoubleQuote, SimpleStatementDelimiter, (0, import_lib3.$EXPECT)($R88, "CivetPrologue /[ \\t]*/"), (0, import_lib3.$C)(EOL, (0, import_lib3.$Y)(RestOfLine))), function(value) {
16228  var content = value[2];
16229  return content;
16230});
16231var CivetPrologue$1 = (0, import_lib3.$T)((0, import_lib3.$S)((0, import_lib3.$EXPECT)($R87, "CivetPrologue /[\\t ]*/"), SingleQuote, CivetPrologueContent, SingleQuote, SimpleStatementDelimiter, (0, import_lib3.$EXPECT)($R88, "CivetPrologue /[ \\t]*/"), (0, import_lib3.$C)(EOL, (0, import_lib3.$Y)(RestOfLine))), function(value) {
16232  var content = value[2];
16233  return content;
16234});
16235var CivetPrologue$$ = [CivetPrologue$0, CivetPrologue$1];
16236function CivetPrologue(ctx, state2) {
16237  return (0, import_lib3.$EVENT_C)(ctx, state2, "CivetPrologue", CivetPrologue$$);
16238}
16239var CivetPrologueContent$0 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$EXPECT)($L230, 'CivetPrologueContent "civet"'), NonIdContinue, (0, import_lib3.$Q)(CivetOption), (0, import_lib3.$EXPECT)($R89, "CivetPrologueContent /[\\s]*/")), function($skip, $loc, $0, $1, $2, $3, $4) {
16240  var options = $3;
16241  return {
16242    type: "CivetPrologue",
16243    children: [],
16244    config: Object.fromEntries(options)
16245  };
16246});
16247function CivetPrologueContent(ctx, state2) {
16248  return (0, import_lib3.$EVENT)(ctx, state2, "CivetPrologueContent", CivetPrologueContent$0);
16249}
16250var CivetOption$0 = (0, import_lib3.$TR)((0, import_lib3.$EXPECT)($R90, "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) {
16251  const optionName = $2.replace(/-+([a-z]?)/g, (_2, l) => {
16252    if (l)
16253      return l.toUpperCase();
16254    return "";
16255  });
16256  let value = $3 ? $4 : $1 === "-" ? false : true;
16257  if (optionName === "tab") {
16258    value = parseFloat(value);
16259    if (isNaN(value))
16260      value = 0;
16261  }
16262  return [optionName, value];
16263});
16264function CivetOption(ctx, state2) {
16265  return (0, import_lib3.$EVENT)(ctx, state2, "CivetOption", CivetOption$0);
16266}
16267var UnknownPrologue$0 = (0, import_lib3.$S)((0, import_lib3.$R$0)((0, import_lib3.$EXPECT)($R87, "UnknownPrologue /[\\t ]*/")), StringLiteral, (0, import_lib3.$TEXT)(SimpleStatementDelimiter), EOS);
16268function UnknownPrologue(ctx, state2) {
16269  return (0, import_lib3.$EVENT)(ctx, state2, "UnknownPrologue", UnknownPrologue$0);
16270}
16271var TripleSlashDirective$0 = (0, import_lib3.$S)((0, import_lib3.$R$0)((0, import_lib3.$EXPECT)($R91, "TripleSlashDirective /\\/\\/\\/[^\\r\\n]*/")), (0, import_lib3.$E)(EOS));
16272function TripleSlashDirective(ctx, state2) {
16273  return (0, import_lib3.$EVENT)(ctx, state2, "TripleSlashDirective", TripleSlashDirective$0);
16274}
16275var DirectivePrologue$0 = (0, import_lib3.$T)((0, import_lib3.$S)(PrologueString, (0, import_lib3.$N)((0, import_lib3.$S)(__, (0, import_lib3.$C)(AccessStart, Pipe)))), function(value) {
16276  return value[0];
16277});
16278function DirectivePrologue(ctx, state2) {
16279  return (0, import_lib3.$EVENT)(ctx, state2, "DirectivePrologue", DirectivePrologue$0);
16280}
16281var PrologueString$0 = CivetPrologue;
16282var PrologueString$1 = UnknownPrologue;
16283var PrologueString$$ = [PrologueString$0, PrologueString$1];
16284function PrologueString(ctx, state2) {
16285  return (0, import_lib3.$EVENT_C)(ctx, state2, "PrologueString", PrologueString$$);
16286}
16287var EOS$0 = (0, import_lib3.$T)((0, import_lib3.$S)((0, import_lib3.$EXPECT)($R92, "EOS /(?=[ \\t\\r\\n\\/#]|$)/"), (0, import_lib3.$P)(RestOfLine)), function(value) {
16288  return value[1];
16289});
16290function EOS(ctx, state2) {
16291  return (0, import_lib3.$EVENT)(ctx, state2, "EOS", EOS$0);
16292}
16293var EOL$0 = (0, import_lib3.$TR)((0, import_lib3.$EXPECT)($R93, "EOL /\\r\\n|\\n|\\r|$/"), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7, $8, $9) {
16294  return { $loc, token: $0 };
16295});
16296function EOL(ctx, state2) {
16297  return (0, import_lib3.$EVENT)(ctx, state2, "EOL", EOL$0);
16298}
16299var DebugHere$0 = (0, import_lib3.$TV)((0, import_lib3.$EXPECT)($L0, 'DebugHere ""'), function($skip, $loc, $0, $1) {
16300  
16301});
16302function DebugHere(ctx, state2) {
16303  return (0, import_lib3.$EVENT)(ctx, state2, "DebugHere", DebugHere$0);
16304}
16305var InsertColon$0 = (0, import_lib3.$TV)((0, import_lib3.$EXPECT)($L0, 'InsertColon ""'), function($skip, $loc, $0, $1) {
16306  return { $loc, token: ":" };
16307});
16308function InsertColon(ctx, state2) {
16309  return (0, import_lib3.$EVENT)(ctx, state2, "InsertColon", InsertColon$0);
16310}
16311var InsertSemicolon$0 = (0, import_lib3.$TV)((0, import_lib3.$EXPECT)($L0, 'InsertSemicolon ""'), function($skip, $loc, $0, $1) {
16312  return { $loc, token: ";" };
16313});
16314function InsertSemicolon(ctx, state2) {
16315  return (0, import_lib3.$EVENT)(ctx, state2, "InsertSemicolon", InsertSemicolon$0);
16316}
16317var InsertOpenParen$0 = (0, import_lib3.$TV)((0, import_lib3.$EXPECT)($L0, 'InsertOpenParen ""'), function($skip, $loc, $0, $1) {
16318  return { $loc, token: "(" };
16319});
16320function InsertOpenParen(ctx, state2) {
16321  return (0, import_lib3.$EVENT)(ctx, state2, "InsertOpenParen", InsertOpenParen$0);
16322}
16323var InsertCloseParen$0 = (0, import_lib3.$TV)((0, import_lib3.$EXPECT)($L0, 'InsertCloseParen ""'), function($skip, $loc, $0, $1) {
16324  return { $loc, token: ")" };
16325});
16326function InsertCloseParen(ctx, state2) {
16327  return (0, import_lib3.$EVENT)(ctx, state2, "InsertCloseParen", InsertCloseParen$0);
16328}
16329var InsertOpenBrace$0 = (0, import_lib3.$TV)((0, import_lib3.$EXPECT)($L0, 'InsertOpenBrace ""'), function($skip, $loc, $0, $1) {
16330  return [{ $loc, token: " " }, { $loc, token: "{" }];
16331});
16332function InsertOpenBrace(ctx, state2) {
16333  return (0, import_lib3.$EVENT)(ctx, state2, "InsertOpenBrace", InsertOpenBrace$0);
16334}
16335var InsertInlineOpenBrace$0 = (0, import_lib3.$TV)((0, import_lib3.$EXPECT)($L0, 'InsertInlineOpenBrace ""'), function($skip, $loc, $0, $1) {
16336  return { $loc, token: "{" };
16337});
16338function InsertInlineOpenBrace(ctx, state2) {
16339  return (0, import_lib3.$EVENT)(ctx, state2, "InsertInlineOpenBrace", InsertInlineOpenBrace$0);
16340}
16341var InsertCloseBrace$0 = (0, import_lib3.$TV)((0, import_lib3.$EXPECT)($L0, 'InsertCloseBrace ""'), function($skip, $loc, $0, $1) {
16342  return { $loc, token: "}" };
16343});
16344function InsertCloseBrace(ctx, state2) {
16345  return (0, import_lib3.$EVENT)(ctx, state2, "InsertCloseBrace", InsertCloseBrace$0);
16346}
16347var InsertOpenBracket$0 = (0, import_lib3.$TV)((0, import_lib3.$EXPECT)($L0, 'InsertOpenBracket ""'), function($skip, $loc, $0, $1) {
16348  return { $loc, token: "[" };
16349});
16350function InsertOpenBracket(ctx, state2) {
16351  return (0, import_lib3.$EVENT)(ctx, state2, "InsertOpenBracket", InsertOpenBracket$0);
16352}
16353var InsertCloseBracket$0 = (0, import_lib3.$TV)((0, import_lib3.$EXPECT)($L0, 'InsertCloseBracket ""'), function($skip, $loc, $0, $1) {
16354  return { $loc, token: "]" };
16355});
16356function InsertCloseBracket(ctx, state2) {
16357  return (0, import_lib3.$EVENT)(ctx, state2, "InsertCloseBracket", InsertCloseBracket$0);
16358}
16359var InsertComma$0 = (0, import_lib3.$TV)((0, import_lib3.$EXPECT)($L0, 'InsertComma ""'), function($skip, $loc, $0, $1) {
16360  return { $loc, token: "," };
16361});
16362function InsertComma(ctx, state2) {
16363  return (0, import_lib3.$EVENT)(ctx, state2, "InsertComma", InsertComma$0);
16364}
16365var InsertSpaceEquals$0 = (0, import_lib3.$TV)((0, import_lib3.$EXPECT)($L0, 'InsertSpaceEquals ""'), function($skip, $loc, $0, $1) {
16366  return { $loc, token: " =" };
16367});
16368function InsertSpaceEquals(ctx, state2) {
16369  return (0, import_lib3.$EVENT)(ctx, state2, "InsertSpaceEquals", InsertSpaceEquals$0);
16370}
16371var InsertConst$0 = (0, import_lib3.$TV)((0, import_lib3.$EXPECT)($L0, 'InsertConst ""'), function($skip, $loc, $0, $1) {
16372  return { $loc, token: "const " };
16373});
16374function InsertConst(ctx, state2) {
16375  return (0, import_lib3.$EVENT)(ctx, state2, "InsertConst", InsertConst$0);
16376}
16377var InsertLet$0 = (0, import_lib3.$TV)((0, import_lib3.$EXPECT)($L0, 'InsertLet ""'), function($skip, $loc, $0, $1) {
16378  return { $loc, token: "let " };
16379});
16380function InsertLet(ctx, state2) {
16381  return (0, import_lib3.$EVENT)(ctx, state2, "InsertLet", InsertLet$0);
16382}
16383var InsertReadonly$0 = (0, import_lib3.$TV)((0, import_lib3.$EXPECT)($L0, 'InsertReadonly ""'), function($skip, $loc, $0, $1) {
16384  return { ts: true, children: [{ $loc, token: "readonly " }] };
16385});
16386function InsertReadonly(ctx, state2) {
16387  return (0, import_lib3.$EVENT)(ctx, state2, "InsertReadonly", InsertReadonly$0);
16388}
16389var InsertNewline$0 = (0, import_lib3.$TV)((0, import_lib3.$EXPECT)($L0, 'InsertNewline ""'), function($skip, $loc, $0, $1) {
16390  return "\n";
16391});
16392function InsertNewline(ctx, state2) {
16393  return (0, import_lib3.$EVENT)(ctx, state2, "InsertNewline", InsertNewline$0);
16394}
16395var InsertIndent$0 = (0, import_lib3.$TV)((0, import_lib3.$EXPECT)($L0, 'InsertIndent ""'), function($skip, $loc, $0, $1) {
16396  return state.currentIndent.token;
16397});
16398function InsertIndent(ctx, state2) {
16399  return (0, import_lib3.$EVENT)(ctx, state2, "InsertIndent", InsertIndent$0);
16400}
16401var InsertSpace$0 = (0, import_lib3.$TV)((0, import_lib3.$EXPECT)($L0, 'InsertSpace ""'), function($skip, $loc, $0, $1) {
16402  return { $loc, token: " " };
16403});
16404function InsertSpace(ctx, state2) {
16405  return (0, import_lib3.$EVENT)(ctx, state2, "InsertSpace", InsertSpace$0);
16406}
16407var InsertDot$0 = (0, import_lib3.$TV)((0, import_lib3.$EXPECT)($L0, 'InsertDot ""'), function($skip, $loc, $0, $1) {
16408  return { $loc, token: "." };
16409});
16410function InsertDot(ctx, state2) {
16411  return (0, import_lib3.$EVENT)(ctx, state2, "InsertDot", InsertDot$0);
16412}
16413var InsertBreak$0 = (0, import_lib3.$TV)((0, import_lib3.$EXPECT)($L0, 'InsertBreak ""'), function($skip, $loc, $0, $1) {
16414  return { $loc, token: ";break;" };
16415});
16416function InsertBreak(ctx, state2) {
16417  return (0, import_lib3.$EVENT)(ctx, state2, "InsertBreak", InsertBreak$0);
16418}
16419var InsertVar$0 = (0, import_lib3.$TV)((0, import_lib3.$EXPECT)($L0, 'InsertVar ""'), function($skip, $loc, $0, $1) {
16420  return { $loc, token: "var " };
16421});
16422function InsertVar(ctx, state2) {
16423  return (0, import_lib3.$EVENT)(ctx, state2, "InsertVar", InsertVar$0);
16424}
16425var InsertType$0 = (0, import_lib3.$TV)((0, import_lib3.$EXPECT)($L0, 'InsertType ""'), function($skip, $loc, $0, $1) {
16426  return { $loc, token: "type " };
16427});
16428function InsertType(ctx, state2) {
16429  return (0, import_lib3.$EVENT)(ctx, state2, "InsertType", InsertType$0);
16430}
16431var CoffeeBinaryExistentialEnabled$0 = (0, import_lib3.$TV)((0, import_lib3.$EXPECT)($L0, 'CoffeeBinaryExistentialEnabled ""'), function($skip, $loc, $0, $1) {
16432  if (config.coffeeBinaryExistential)
16433    return;
16434  return $skip;
16435});
16436function CoffeeBinaryExistentialEnabled(ctx, state2) {
16437  return (0, import_lib3.$EVENT)(ctx, state2, "CoffeeBinaryExistentialEnabled", CoffeeBinaryExistentialEnabled$0);
16438}
16439var CoffeeBooleansEnabled$0 = (0, import_lib3.$TV)((0, import_lib3.$EXPECT)($L0, 'CoffeeBooleansEnabled ""'), function($skip, $loc, $0, $1) {
16440  if (config.coffeeBooleans)
16441    return;
16442  return $skip;
16443});
16444function CoffeeBooleansEnabled(ctx, state2) {
16445  return (0, import_lib3.$EVENT)(ctx, state2, "CoffeeBooleansEnabled", CoffeeBooleansEnabled$0);
16446}
16447var CoffeeClassesEnabled$0 = (0, import_lib3.$TV)((0, import_lib3.$EXPECT)($L0, 'CoffeeClassesEnabled ""'), function($skip, $loc, $0, $1) {
16448  if (config.coffeeClasses)
16449    return;
16450  return $skip;
16451});
16452function CoffeeClassesEnabled(ctx, state2) {
16453  return (0, import_lib3.$EVENT)(ctx, state2, "CoffeeClassesEnabled", CoffeeClassesEnabled$0);
16454}
16455var CoffeeCommentEnabled$0 = (0, import_lib3.$TV)((0, import_lib3.$EXPECT)($L0, 'CoffeeCommentEnabled ""'), function($skip, $loc, $0, $1) {
16456  if (config.coffeeComment)
16457    return;
16458  return $skip;
16459});
16460function CoffeeCommentEnabled(ctx, state2) {
16461  return (0, import_lib3.$EVENT)(ctx, state2, "CoffeeCommentEnabled", CoffeeCommentEnabled$0);
16462}
16463var CoffeeDoEnabled$0 = (0, import_lib3.$TV)((0, import_lib3.$EXPECT)($L0, 'CoffeeDoEnabled ""'), function($skip, $loc, $0, $1) {
16464  if (config.coffeeDo)
16465    return;
16466  return $skip;
16467});
16468function CoffeeDoEnabled(ctx, state2) {
16469  return (0, import_lib3.$EVENT)(ctx, state2, "CoffeeDoEnabled", CoffeeDoEnabled$0);
16470}
16471var CoffeeForLoopsEnabled$0 = (0, import_lib3.$TV)((0, import_lib3.$EXPECT)($L0, 'CoffeeForLoopsEnabled ""'), function($skip, $loc, $0, $1) {
16472  if (config.coffeeForLoops)
16473    return;
16474  return $skip;
16475});
16476function CoffeeForLoopsEnabled(ctx, state2) {
16477  return (0, import_lib3.$EVENT)(ctx, state2, "CoffeeForLoopsEnabled", CoffeeForLoopsEnabled$0);
16478}
16479var CoffeeInterpolationEnabled$0 = (0, import_lib3.$TV)((0, import_lib3.$EXPECT)($L0, 'CoffeeInterpolationEnabled ""'), function($skip, $loc, $0, $1) {
16480  if (config.coffeeInterpolation)
16481    return;
16482  return $skip;
16483});
16484function CoffeeInterpolationEnabled(ctx, state2) {
16485  return (0, import_lib3.$EVENT)(ctx, state2, "CoffeeInterpolationEnabled", CoffeeInterpolationEnabled$0);
16486}
16487var CoffeeIsntEnabled$0 = (0, import_lib3.$TV)((0, import_lib3.$EXPECT)($L0, 'CoffeeIsntEnabled ""'), function($skip, $loc, $0, $1) {
16488  if (config.coffeeIsnt)
16489    return;
16490  return $skip;
16491});
16492function CoffeeIsntEnabled(ctx, state2) {
16493  return (0, import_lib3.$EVENT)(ctx, state2, "CoffeeIsntEnabled", CoffeeIsntEnabled$0);
16494}
16495var CoffeeJSXEnabled$0 = (0, import_lib3.$TV)((0, import_lib3.$EXPECT)($L0, 'CoffeeJSXEnabled ""'), function($skip, $loc, $0, $1) {
16496  if (config.coffeeJSX)
16497    return;
16498  return $skip;
16499});
16500function CoffeeJSXEnabled(ctx, state2) {
16501  return (0, import_lib3.$EVENT)(ctx, state2, "CoffeeJSXEnabled", CoffeeJSXEnabled$0);
16502}
16503var CoffeeLineContinuationEnabled$0 = (0, import_lib3.$TV)((0, import_lib3.$EXPECT)($L0, 'CoffeeLineContinuationEnabled ""'), function($skip, $loc, $0, $1) {
16504  if (config.coffeeLineContinuation)
16505    return;
16506  return $skip;
16507});
16508function CoffeeLineContinuationEnabled(ctx, state2) {
16509  return (0, import_lib3.$EVENT)(ctx, state2, "CoffeeLineContinuationEnabled", CoffeeLineContinuationEnabled$0);
16510}
16511var CoffeeNotEnabled$0 = (0, import_lib3.$TV)((0, import_lib3.$EXPECT)($L0, 'CoffeeNotEnabled ""'), function($skip, $loc, $0, $1) {
16512  if (config.coffeeNot)
16513    return;
16514  return $skip;
16515});
16516function CoffeeNotEnabled(ctx, state2) {
16517  return (0, import_lib3.$EVENT)(ctx, state2, "CoffeeNotEnabled", CoffeeNotEnabled$0);
16518}
16519var CoffeeOfEnabled$0 = (0, import_lib3.$TV)((0, import_lib3.$EXPECT)($L0, 'CoffeeOfEnabled ""'), function($skip, $loc, $0, $1) {
16520  if (config.coffeeOf)
16521    return;
16522  return $skip;
16523});
16524function CoffeeOfEnabled(ctx, state2) {
16525  return (0, import_lib3.$EVENT)(ctx, state2, "CoffeeOfEnabled", CoffeeOfEnabled$0);
16526}
16527var CoffeePrototypeEnabled$0 = (0, import_lib3.$TV)((0, import_lib3.$EXPECT)($L0, 'CoffeePrototypeEnabled ""'), function($skip, $loc, $0, $1) {
16528  if (config.coffeePrototype)
16529    return;
16530  return $skip;
16531});
16532function CoffeePrototypeEnabled(ctx, state2) {
16533  return (0, import_lib3.$EVENT)(ctx, state2, "CoffeePrototypeEnabled", CoffeePrototypeEnabled$0);
16534}
16535var ObjectIsEnabled$0 = (0, import_lib3.$TV)((0, import_lib3.$EXPECT)($L0, 'ObjectIsEnabled ""'), function($skip, $loc, $0, $1) {
16536  if (config.objectIs)
16537    return;
16538  return $skip;
16539});
16540function ObjectIsEnabled(ctx, state2) {
16541  return (0, import_lib3.$EVENT)(ctx, state2, "ObjectIsEnabled", ObjectIsEnabled$0);
16542}
16543var Reset$0 = (0, import_lib3.$TV)((0, import_lib3.$EXPECT)($L0, 'Reset ""'), function($skip, $loc, $0, $1) {
16544  state.indentLevels = [{
16545    level: 0,
16546    token: ""
16547  }];
16548  state.forbidClassImplicitCall = [false];
16549  state.forbidIndentedApplication = [false];
16550  state.forbidBracedApplication = [false];
16551  state.forbidTrailingMemberProperty = [false];
16552  state.forbidNewlineBinaryOp = [false];
16553  state.JSXTagStack = [void 0];
16554  state.operators = /* @__PURE__ */ new Map();
16555  state.helperRefs = {};
16556  state.prelude = [];
16557  config = {
16558    autoConst: false,
16559    autoVar: false,
16560    autoLet: false,
16561    coffeeBinaryExistential: false,
16562    coffeeBooleans: false,
16563    coffeeClasses: false,
16564    coffeeComment: false,
16565    coffeeDo: false,
16566    coffeeEq: false,
16567    coffeeForLoops: false,
16568    coffeeInterpolation: false,
16569    coffeeIsnt: false,
16570    coffeeJSX: false,
16571    coffeeLineContinuation: false,
16572    coffeeNot: false,
16573    coffeeOf: false,
16574    coffeePrototype: false,
16575    defaultElement: "div",
16576    implicitReturns: true,
16577    objectIs: false,
16578    react: false,
16579    solid: false,
16580    client: false,
16581    // default behavior: client only
16582    rewriteTsImports: true,
16583    server: false,
16584    tab: void 0,
16585    // default behavior = same as space
16586    verbose: false
16587  };
16588  Object.defineProperty(config, "deno", {
16589    set(b) {
16590      config.rewriteTsImports = !b;
16591    }
16592  });
16593  config.deno = typeof Deno !== "undefined";
16594  Object.defineProperty(config, "coffeeCompat", {
16595    set(b) {
16596      for (const option of [
16597        "autoVar",
16598        "coffeeBinaryExistential",
16599        "coffeeBooleans",
16600        "coffeeClasses",
16601        "coffeeComment",
16602        "coffeeDo",
16603        "coffeeEq",
16604        "coffeeForLoops",
16605        "coffeeInterpolation",
16606        "coffeeIsnt",
16607        "coffeeJSX",
16608        "coffeeLineContinuation",
16609        "coffeeNot",
16610        "coffeeOf",
16611        "coffeePrototype"
16612      ]) {
16613        config[option] = b;
16614      }
16615      if (b) {
16616        config.objectIs = false;
16617      }
16618    }
16619  });
16620  Object.assign(config, initialConfig);
16621  return {
16622    type: "ParserMeta",
16623    children: [],
16624    getStateKey() {
16625      const stateInt = state.currentIndent.level % 256 << 8 | state.classImplicitCallForbidden << 7 | state.indentedApplicationForbidden << 6 | state.bracedApplicationForbidden << 5 | state.trailingMemberPropertyForbidden << 4 | state.newlineBinaryOpForbidden << 3 | // This is slightly different than the rest of the state,
16626      // since it is affected by the directive prologue and may be hit
16627      // by the EOL rule early in the parse. Later if we wanted to
16628      // allow block scoping of the compat directives we would need to
16629      // add them all here.
16630      config.coffeeComment << 2;
16631      return [stateInt, state.currentJSXTag];
16632    }
16633  };
16634});
16635function Reset(ctx, state2) {
16636  return (0, import_lib3.$EVENT)(ctx, state2, "Reset", Reset$0);
16637}
16638var Init$0 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$E)(Shebang), Prologue), function($skip, $loc, $0, $1, $2) {
16639  var directives = $2;
16640  directives.forEach((directive) => {
16641    if (directive.type === "CivetPrologue") {
16642      Object.assign(config, directive.config);
16643    }
16644  });
16645  return $0;
16646});
16647function Init(ctx, state2) {
16648  return (0, import_lib3.$EVENT)(ctx, state2, "Init", Init$0);
16649}
16650var Prologue$0 = (0, import_lib3.$Q)((0, import_lib3.$C)(TripleSlashDirective, (0, import_lib3.$S)((0, import_lib3.$C)(JSSingleLineComment, JSMultiLineComment), EOS), DirectivePrologue));
16651function Prologue(ctx, state2) {
16652  return (0, import_lib3.$EVENT)(ctx, state2, "Prologue", Prologue$0);
16653}
16654var ProloguePrefix$0 = (0, import_lib3.$S)(Prologue, (0, import_lib3.$R$0)((0, import_lib3.$EXPECT)($R94, "ProloguePrefix /[^]*/")));
16655function ProloguePrefix(ctx, state2) {
16656  return (0, import_lib3.$EVENT)(ctx, state2, "ProloguePrefix", ProloguePrefix$0);
16657}
16658var Indent$0 = (0, import_lib3.$TR)((0, import_lib3.$EXPECT)($R88, "Indent /[ \\t]*/"), function($skip, $loc, $0, $1, $2, $3, $4, $5, $6, $7, $8, $9) {
16659  const level = getIndentLevel($0, config.tab);
16660  return {
16661    $loc,
16662    token: $0,
16663    level
16664  };
16665});
16666function Indent(ctx, state2) {
16667  return (0, import_lib3.$EVENT)(ctx, state2, "Indent", Indent$0);
16668}
16669var TrackIndented$0 = (0, import_lib3.$TV)(Indent, function($skip, $loc, $0, $1) {
16670  var indent = $0;
16671  const { level } = indent;
16672  if (level <= state.currentIndent.level) {
16673    return $skip;
16674  }
16675  if (config.verbose) {
16676    console.log("pushing indent", indent);
16677  }
16678  state.indentLevels.push(indent);
16679  return $1;
16680});
16681function TrackIndented(ctx, state2) {
16682  return (0, import_lib3.$EVENT)(ctx, state2, "TrackIndented", TrackIndented$0);
16683}
16684var PushIndent$0 = (0, import_lib3.$Y)((0, import_lib3.$S)(EOS, TrackIndented));
16685function PushIndent(ctx, state2) {
16686  return (0, import_lib3.$EVENT)(ctx, state2, "PushIndent", PushIndent$0);
16687}
16688var PopIndent$0 = (0, import_lib3.$TV)((0, import_lib3.$EXPECT)($L0, 'PopIndent ""'), function($skip, $loc, $0, $1) {
16689  if (config.verbose) {
16690    console.log("popping indent", state.indentLevels[state.indentLevels.length - 1], "->", state.indentLevels[state.indentLevels.length - 2]);
16691  }
16692  state.indentLevels.pop();
16693});
16694function PopIndent(ctx, state2) {
16695  return (0, import_lib3.$EVENT)(ctx, state2, "PopIndent", PopIndent$0);
16696}
16697var Nested$0 = (0, import_lib3.$TS)((0, import_lib3.$S)(EOS, Indent), function($skip, $loc, $0, $1, $2) {
16698  var indent = $2;
16699  if (indent.level === state.currentIndent.level)
16700    return $0;
16701  if (config.verbose) {
16702    console.log(`failing Nested: ${indent.level} does not match current indent level ${state.currentIndent.level}`);
16703  }
16704  return $skip;
16705});
16706function Nested(ctx, state2) {
16707  return (0, import_lib3.$EVENT)(ctx, state2, "Nested", Nested$0);
16708}
16709var IndentedFurther$0 = (0, import_lib3.$TS)((0, import_lib3.$S)(EOS, Indent), function($skip, $loc, $0, $1, $2) {
16710  var indent = $2;
16711  if (indent.level > state.currentIndent.level)
16712    return $0;
16713  return $skip;
16714});
16715function IndentedFurther(ctx, state2) {
16716  return (0, import_lib3.$EVENT)(ctx, state2, "IndentedFurther", IndentedFurther$0);
16717}
16718var IndentedAtLeast$0 = (0, import_lib3.$TS)((0, import_lib3.$S)(EOS, Indent), function($skip, $loc, $0, $1, $2) {
16719  var indent = $2;
16720  if (indent.level >= state.currentIndent.level)
16721    return $0;
16722  return $skip;
16723});
16724function IndentedAtLeast(ctx, state2) {
16725  return (0, import_lib3.$EVENT)(ctx, state2, "IndentedAtLeast", IndentedAtLeast$0);
16726}
16727var NotDedented$0 = (0, import_lib3.$TS)((0, import_lib3.$S)((0, import_lib3.$E)(IndentedAtLeast), (0, import_lib3.$E)(_)), function($skip, $loc, $0, $1, $2) {
16728  const ws = [];
16729  if ($1)
16730    ws.push(...$1);
16731  if ($2)
16732    ws.push(...$2);
16733  return ws.flat(Infinity).filter(Boolean);
16734});
16735function NotDedented(ctx, state2) {
16736  return (0, import_lib3.$EVENT)(ctx, state2, "NotDedented", NotDedented$0);
16737}
16738var Dedented$0 = (0, import_lib3.$T)((0, import_lib3.$S)((0, import_lib3.$N)(IndentedAtLeast), EOS), function(value) {
16739  return value[1];
16740});
16741function Dedented(ctx, state2) {
16742  return (0, import_lib3.$EVENT)(ctx, state2, "Dedented", Dedented$0);
16743}
16744var parser = function() {
16745  const { fail, validate, reset } = (0, import_lib3.Validator)();
16746  let ctx = { expectation: "", fail };
16747  return {
16748    parse: (input, options = {}) => {
16749      if (typeof input !== "string")
16750        throw new Error("Input must be a string");
16751      const parser2 = options.startRule != null ? grammar[options.startRule] : Object.values(grammar)[0];
16752      if (!parser2)
16753        throw new Error(`Could not find rule with name '${options.startRule}'`);
16754      const filename2 = options.filename || "<anonymous>";
16755      reset();
16756      Object.assign(ctx, { ...options.events, tokenize: options.tokenize });
16757      return validate(input, parser2(ctx, {
16758        input,
16759        pos: 0
16760      }), {
16761        filename: filename2
16762      });
16763    }
16764  };
16765}();
16766var { parse } = parser;
16767var filename;
16768var initialConfig;
16769var config;
16770var sync;
16771var state = {};
16772var getState = () => state;
16773var getConfig = () => config;
16774var getInitialConfig = () => initialConfig;
16775var getFilename = () => filename;
16776var getSync = () => sync;
16777Object.defineProperties(state, {
16778  currentIndent: {
16779    get() {
16780      const { indentLevels: l } = state;
16781      return l[l.length - 1];
16782    }
16783  },
16784  classImplicitCallForbidden: {
16785    get() {
16786      const { forbidClassImplicitCall: s } = state;
16787      return s[s.length - 1];
16788    }
16789  },
16790  indentedApplicationForbidden: {
16791    get() {
16792      const { forbidIndentedApplication: s } = state;
16793      return s[s.length - 1];
16794    }
16795  },
16796  bracedApplicationForbidden: {
16797    get() {
16798      const { forbidBracedApplication: s } = state;
16799      return s[s.length - 1];
16800    }
16801  },
16802  trailingMemberPropertyForbidden: {
16803    get() {
16804      const { forbidTrailingMemberProperty: s } = state;
16805      return s[s.length - 1];
16806    }
16807  },
16808  newlineBinaryOpForbidden: {
16809    get() {
16810      const { forbidNewlineBinaryOp: s } = state;
16811      return s[s.length - 1];
16812    }
16813  },
16814  currentJSXTag: {
16815    get() {
16816      const { JSXTagStack: s } = state;
16817      return s[s.length - 1];
16818    }
16819  }
16820});
16821function parseProgram(input, options) {
16822  filename = options?.filename;
16823  initialConfig = options?.parseOptions;
16824  sync = options?.sync;
16825  const root = parse(input, options);
16826  if (sync) {
16827    filename = initialConfig = sync = null;
16828    return root;
16829  } else {
16830    return processProgramAsync(root).then(() => {
16831      filename = initialConfig = sync = null;
16832      return root;
16833    });
16834  }
16835}
16836
16837// source/sourcemap.civet
16838var sourcemap_exports = {};
16839__export(sourcemap_exports, {
16840  SourceMap: () => SourceMap,
16841  base64Encode: () => base64Encode,
16842  locationTable: () => locationTable,
16843  lookupLineColumn: () => lookupLineColumn
16844});
16845var locationTable = function(input) {
16846  const linesRe = /([^\r\n]*)(\r\n|\r|\n|$)/y;
16847  const lines = [];
16848  let line = 0;
16849  let pos = 0;
16850  let ref;
16851  while (ref = linesRe.exec(input)) {
16852    const result = ref;
16853    pos += result[0].length;
16854    lines[line++] = pos;
16855    if (pos === input.length) {
16856      break;
16857    }
16858  }
16859  return lines;
16860};
16861var lookupLineColumn = function(table, pos) {
16862  let l = 0;
16863  let prevEnd = 0;
16864  while (table[l] <= pos) {
16865    prevEnd = table[l++];
16866  }
16867  return [l, pos - prevEnd];
16868};
16869var SourceMap = function(sourceString) {
16870  const srcTable = locationTable(sourceString);
16871  const sm = {
16872    lines: [[]],
16873    line: 0,
16874    colOffset: 0,
16875    // relative to previous entry
16876    srcLine: 0,
16877    srcColumn: 0,
16878    srcOffset: 0,
16879    srcTable
16880  };
16881  const EOL2 = /\r?\n|\r/;
16882  return {
16883    data: sm,
16884    source: function() {
16885      return sourceString;
16886    },
16887    renderMappings: function() {
16888      let lastSourceLine = 0;
16889      let lastSourceColumn = 0;
16890      return sm.lines.map((line) => {
16891        return line.map((entry) => {
16892          if (entry.length === 4) {
16893            let [colDelta, sourceFileIndex, srcLine, srcCol] = entry;
16894            const lineDelta = srcLine - lastSourceLine;
16895            colDelta = srcCol - lastSourceColumn;
16896            lastSourceLine = srcLine;
16897            lastSourceColumn = srcCol;
16898            return `${encodeVlq(entry[0])}${encodeVlq(sourceFileIndex)}${encodeVlq(lineDelta)}${encodeVlq(colDelta)}`;
16899          } else {
16900            return encodeVlq(entry[0]);
16901          }
16902        }).join(",");
16903      }).join(";");
16904    },
16905    json: function(srcFileName, outFileName) {
16906      return {
16907        version: 3,
16908        file: outFileName,
16909        sources: [srcFileName],
16910        mappings: this.renderMappings(),
16911        names: [],
16912        sourcesContent: [sourceString],
16913        toString: function() {
16914          return JSON.stringify(this);
16915        }
16916      };
16917    },
16918    updateSourceMap: function(outputStr, inputPos, colOffset = 0) {
16919      const outLines = outputStr.split(EOL2);
16920      let srcLine, srcCol;
16921      if (inputPos != null) {
16922        [srcLine, srcCol] = lookupLineColumn(srcTable, inputPos);
16923        srcCol += colOffset;
16924        sm.srcLine = srcLine;
16925        sm.srcColumn = srcCol;
16926        sm.srcOffset = inputPos + outputStr.length;
16927      }
16928      for (let i1 = 0, len3 = outLines.length; i1 < len3; i1++) {
16929        const i = i1;
16930        const line = outLines[i1];
16931        if (i > 0) {
16932          sm.line++;
16933          sm.srcLine++;
16934          sm.colOffset = 0;
16935          sm.lines[sm.line] = [];
16936          sm.srcColumn = srcCol = colOffset;
16937        }
16938        const l = sm.colOffset;
16939        sm.colOffset = line.length;
16940        sm.srcColumn += line.length;
16941        if (inputPos != null) {
16942          sm.lines[sm.line].push([l, 0, srcLine + i, srcCol]);
16943        } else if (l != 0) {
16944          sm.lines[sm.line].push([l]);
16945        }
16946      }
16947      return;
16948    }
16949  };
16950};
16951var smRegexp = /\n\/\/# sourceMappingURL=data:application\/json;charset=utf-8;base64,([+a-zA-Z0-9\/]*=?=?)$/;
16952var remap = function(codeWithSourceMap, upstreamMap, sourcePath, targetPath) {
16953  let sourceMapText;
16954  const codeWithoutSourceMap = codeWithSourceMap.replace(smRegexp, (match, sm) => {
16955    sourceMapText = sm;
16956    return "";
16957  });
16958  if (sourceMapText) {
16959    const parsed = parseWithLines(sourceMapText);
16960    const composedLines = composeLines(upstreamMap.data.lines, parsed.lines);
16961    upstreamMap.data.lines = composedLines;
16962  }
16963  const remappedSourceMapJSON = upstreamMap.json(sourcePath, targetPath);
16964  const newSourceMap = `${"sourceMapping"}URL=data:application/json;charset=utf-8;base64,${base64Encode(JSON.stringify(remappedSourceMapJSON))}`;
16965  const remappedCodeWithSourceMap = `${codeWithoutSourceMap}
16966//# ${newSourceMap}`;
16967  return remappedCodeWithSourceMap;
16968};
16969var composeLines = function(upstreamMapping, lines) {
16970  return lines.map((line) => {
16971    return line.map((entry) => {
16972      if (entry.length === 1) {
16973        return entry;
16974      }
16975      const [colDelta, sourceFileIndex, srcLine, srcCol] = entry;
16976      const srcPos = remapPosition([srcLine, srcCol], upstreamMapping);
16977      if (!srcPos) {
16978        return [entry[0]];
16979      }
16980      const [upstreamLine, upstreamCol] = srcPos;
16981      if (entry.length === 4) {
16982        return [colDelta, sourceFileIndex, upstreamLine, upstreamCol];
16983      }
16984      return [colDelta, sourceFileIndex, upstreamLine, upstreamCol, entry[4]];
16985    });
16986  });
16987};
16988var parseWithLines = function(base64encodedJSONstr) {
16989  const json = JSON.parse(Buffer.from(base64encodedJSONstr, "base64").toString("utf8"));
16990  let sourceLine = 0;
16991  let sourceColumn = 0;
16992  const lines = json.mappings.split(";").map((line) => {
16993    if (line.length === 0) {
16994      return [];
16995    }
16996    return line.split(",").map((entry) => {
16997      const result = decodeVLQ(entry);
16998      switch (result.length) {
16999        case 1: {
17000          return [result[0]];
17001        }
17002        case 4: {
17003          return [result[0], result[1], sourceLine += result[2], sourceColumn += result[3]];
17004        }
17005        case 5: {
17006          return [result[0], result[1], sourceLine += result[2], sourceColumn += result[3], result[4]];
17007        }
17008        default: {
17009          throw new Error("Unknown source map entry", result);
17010        }
17011      }
17012    });
17013  });
17014  json.lines = lines;
17015  return json;
17016};
17017Object.assign(SourceMap, { remap, parseWithLines, composeLines });
17018var VLQ_SHIFT = 5;
17019var VLQ_CONTINUATION_BIT = 1 << VLQ_SHIFT;
17020var VLQ_VALUE_MASK = VLQ_CONTINUATION_BIT - 1;
17021var encodeVlq = function(value) {
17022  let answer = "";
17023  let ref1;
17024  if (value < 0)
17025    ref1 = 1;
17026  else
17027    ref1 = 0;
17028  const signBit = ref1;
17029  let valueToEncode = (Math.abs(value) << 1) + signBit;
17030  while (valueToEncode || !answer) {
17031    let nextChunk = valueToEncode & VLQ_VALUE_MASK;
17032    valueToEncode = valueToEncode >> VLQ_SHIFT;
17033    if (valueToEncode) {
17034      nextChunk |= VLQ_CONTINUATION_BIT;
17035    }
17036    answer += encodeBase64(nextChunk);
17037  }
17038  return answer;
17039};
17040var BASE64_CHARS = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
17041var encodeBase64 = function(value) {
17042  return BASE64_CHARS[value] || (() => {
17043    throw new Error("Cannot Base64 encode value: ${value}");
17044  })();
17045};
17046var base64Encode = function(src) {
17047  return Buffer.from(src).toString("base64");
17048};
17049var vlqTable = new Uint8Array(128);
17050var vlqChars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
17051{
17052  let i = 0;
17053  let l = vlqTable.length;
17054  while (i < l) {
17055    vlqTable[i] = 255;
17056    i++;
17057  }
17058  i = 0;
17059  l = vlqChars.length;
17060  while (i < l) {
17061    vlqTable[vlqChars.charCodeAt(i)] = i;
17062    i++;
17063  }
17064}
17065var decodeError = function(message) {
17066  throw new Error(message);
17067};
17068var decodeVLQ = function(mapping) {
17069  let i = 0;
17070  let l = mapping.length;
17071  let result = [];
17072  while (i < l) {
17073    let shift = 0;
17074    let vlq = 0;
17075    let v = 0;
17076    while (true) {
17077      if (i >= l) {
17078        decodeError("Unexpected early end of mapping data");
17079      }
17080      const c = mapping.charCodeAt(i);
17081      if ((c & 127) != c) {
17082        decodeError("Invalid mapping character: ${JSON.stringify(String.fromCharCode(c))}");
17083      }
17084      const index = vlqTable[c & 127];
17085      if (index === 255) {
17086        decodeError("Invalid mapping character: ${JSON.stringify(String.fromCharCode(c))}");
17087      }
17088      i++;
17089      vlq |= (index & 31) << shift;
17090      shift += 5;
17091      if ((index & 32) === 0) {
17092        break;
17093      }
17094    }
17095    if (vlq & 1) {
17096      v = -(vlq >> 1);
17097    } else {
17098      v = vlq >> 1;
17099    }
17100    result.push(v);
17101  }
17102  return result;
17103};
17104var remapPosition = function(position, sourcemapLines) {
17105  const [line, character] = position;
17106  const textLine = sourcemapLines[line];
17107  if (!textLine?.length) {
17108    return void 0;
17109  }
17110  let i = 0;
17111  let p = 0;
17112  const l = textLine.length;
17113  let lastMapping = void 0;
17114  let lastMappingPosition = 0;
17115  while (i < l) {
17116    const mapping = textLine[i];
17117    p += mapping[0];
17118    if (mapping.length === 4) {
17119      lastMapping = mapping;
17120      lastMappingPosition = p;
17121    }
17122    if (p >= character) {
17123      break;
17124    }
17125    i++;
17126  }
17127  if (character - lastMappingPosition != 0) {
17128    return void 0;
17129  }
17130  if (lastMapping) {
17131    return [lastMapping[2], lastMapping[3]];
17132  } else {
17133    return void 0;
17134  }
17135};
17136
17137// source/state-cache.civet
17138var StateCache = class {
17139  cache = /* @__PURE__ */ new Map();
17140  get(key) {
17141    return this.cache.get(key[0])?.get(key[1])?.get(key[2])?.get(key[3]);
17142  }
17143  /**
17144   * Check if this multi-layer cache has the given key.
17145   * Since the intermediate layers are always other maps we only need to check the last layer.
17146   */
17147  has(key) {
17148    return !!this.cache.get(key[0])?.get(key[1])?.get(key[2])?.has(key[3]);
17149  }
17150  set(key, value) {
17151    const cache0 = this.cache;
17152    let cache1;
17153    if (!cache0.has(key[0])) {
17154      cache1 = /* @__PURE__ */ new Map();
17155      this.cache.set(key[0], cache1);
17156    } else {
17157      cache1 = cache0.get(key[0]);
17158    }
17159    let cache2;
17160    if (!cache1?.has(key[1])) {
17161      cache2 = /* @__PURE__ */ new Map();
17162      cache1.set(key[1], cache2);
17163    } else {
17164      cache2 = cache1.get(key[1]);
17165    }
17166    let cache3;
17167    if (!cache2.has(key[2])) {
17168      cache3 = /* @__PURE__ */ new Map();
17169      cache2.set(key[2], cache3);
17170    } else {
17171      cache3 = cache2.get(key[2]);
17172    }
17173    cache3.set(key[3], value);
17174  }
17175};
17176
17177// source/main.civet
17178var { SourceMap: SourceMap2 } = sourcemap_exports;
17179var ParseErrors = class extends Error {
17180  name = "ParseErrors";
17181  errors;
17182  constructor(errors) {
17183    const message = errors.map(($) => $.message).join("\n");
17184    super(errors.map(($1) => $1.message).join("\n"));
17185    this.message = message;
17186    this.errors = errors;
17187  }
17188};
17189var uncacheable = /* @__PURE__ */ new Set([
17190  // Meta
17191  "DebugHere",
17192  "Init",
17193  "Program",
17194  "Reset",
17195  // Indentation
17196  // We need to no-cache the state modifying rules up to the point where they
17197  // balance within a parent so PushIndent needs to be marked no-cache even
17198  // though it only calls TrackIndented which does the actual work.
17199  "PushIndent",
17200  "PopIndent",
17201  "TrackIndented",
17202  // JSX
17203  "PushJSXOpeningElement",
17204  "PushJSXOpeningFragment",
17205  "PopJSXStack",
17206  // State
17207  "AllowAll",
17208  "AllowClassImplicitCall",
17209  "AllowBracedApplication",
17210  "AllowIndentedApplication",
17211  "AllowMultiLineImplicitObjectLiteral",
17212  "AllowNewlineBinaryOp",
17213  "AllowTrailingMemberProperty",
17214  "ForbidClassImplicitCall",
17215  "ForbidBracedApplication",
17216  "ForbidIndentedApplication",
17217  "ForbidMultiLineImplicitObjectLiteral",
17218  "ForbidNewlineBinaryOp",
17219  "ForbidTrailingMemberProperty",
17220  "RestoreAll",
17221  "RestoreClassImplicitCall",
17222  "RestoreMultiLineImplicitObjectLiteral",
17223  "RestoreBracedApplication",
17224  "RestoreIndentedApplication",
17225  "RestoreTrailingMemberProperty",
17226  "RestoreNewlineBinaryOp"
17227]);
17228function compile(src, options) {
17229  if (!options) {
17230    options = {};
17231  } else {
17232    options = { ...options };
17233  }
17234  options.parseOptions = { ...options.parseOptions };
17235  const filename2 = options.filename || "unknown";
17236  if (filename2.endsWith(".coffee") && !/^(#![^\r\n]*(\r\n|\n|\r))?\s*['"]civet/.test(src)) {
17237    options.parseOptions.coffeeCompat = true;
17238  }
17239  const { hits, trace, noCache } = options;
17240  let events;
17241  if (!noCache) {
17242    events = makeCache({
17243      hits: !!hits,
17244      trace: !!trace
17245    });
17246  }
17247  let ast;
17248  try {
17249    ast = parseProgram(src, {
17250      parseOptions: options.parseOptions,
17251      sync: options.sync,
17252      filename: filename2,
17253      events
17254    });
17255  } finally {}
17256  const throwOnErrors = options.errors == null;
17257  function rest(ast2) {
17258    options = options;
17259    if (!(options.ast === "raw")) {
17260      ast2 = prune(ast2);
17261    }
17262    if (options.ast) {
17263      return ast2;
17264    }
17265    function checkErrors() {
17266      if (!throwOnErrors) {
17267        return;
17268      }
17269      options = options;
17270      if (options.errors?.length) {
17271        throw new ParseErrors(options.errors);
17272      }
17273      ;
17274      return;
17275    }
17276    if (options.sourceMap || options.inlineMap) {
17277      options.sourceMap = SourceMap2(src);
17278      const code = generate_default(ast2, options);
17279      checkErrors();
17280      if (options.inlineMap) {
17281        return SourceMap2.remap(code, options.sourceMap, filename2, filename2 + ".tsx");
17282      } else {
17283        return {
17284          code,
17285          sourceMap: options.sourceMap
17286        };
17287      }
17288    }
17289    const result = generate_default(ast2, options);
17290    if (options.errors?.length) {
17291      delete options.errors;
17292      options.sourceMap = SourceMap2(src);
17293      generate_default(ast2, options);
17294      checkErrors();
17295    }
17296    return result;
17297  }
17298  if (ast.then != null) {
17299    return ast.then(rest);
17300  } else {
17301    return rest(ast);
17302  }
17303}
17304var makeCache = function({ hits, trace } = {}) {
17305  const meta = {};
17306  let hitCount;
17307  if (hits) {
17308    hitCount = /* @__PURE__ */ new Map();
17309    meta.hits = hitCount;
17310  }
17311  let logs;
17312  if (trace) {
17313    logs = [];
17314    meta.logs = logs;
17315  }
17316  const stateCache = new StateCache();
17317  let getStateKey = null;
17318  const stack = [];
17319  const events = {
17320    meta,
17321    enter: function(ruleName, state2) {
17322      if (hits) {
17323        hitCount.set(ruleName, (hitCount.get(ruleName) || 0) + 1);
17324      }
17325      if (uncacheable.has(ruleName)) {
17326        return;
17327      }
17328      const [stateKey, tagKey] = getStateKey();
17329      const key = [tagKey, stateKey, state2.pos, ruleName];
17330      if (stateCache.has(key)) {
17331        if (trace) {
17332          logs.push("".padStart(stack.length * 2, " ") + ruleName + ":" + state2.pos + "\u{1F4B0}");
17333        }
17334        const result = stateCache.get(key);
17335        return {
17336          cache: result ? { ...result } : void 0
17337        };
17338      }
17339      if (trace) {
17340        logs.push("".padStart(stack.length * 2, " ") + ruleName + ":" + state2.pos + "\u2192");
17341        stack.push(ruleName);
17342      }
17343      return;
17344    },
17345    exit: function(ruleName, state2, result) {
17346      if (ruleName === "Reset") {
17347        ({ getStateKey } = result.value);
17348      }
17349      if (!uncacheable.has(ruleName)) {
17350        const [stateKey, tagKey] = getStateKey();
17351        const key = [tagKey, stateKey, state2.pos, ruleName];
17352        stateCache.set(key, result);
17353      }
17354      if (getConfig().verbose && result) {
17355        console.log(`Parsed ${JSON.stringify(state2.input.slice(state2.pos, result.pos))} [pos ${state2.pos}-${result.pos}] as ${ruleName}`);
17356      }
17357      if (trace) {
17358        stack.pop();
17359        logs.push("".padStart(stack.length * 2, " ") + ruleName + ":" + state2.pos + " " + (result ? "\u2705" : "\u274C"));
17360      }
17361      return;
17362    }
17363  };
17364  return events;
17365};
17366var isCompileError = function(err) {
17367  return err instanceof import_lib3.ParseError || err instanceof ParseErrors;
17368};
17369var main_default = { parse, parseProgram, ParseError: import_lib3.ParseError, ParseErrors, generate: generate_default, sourcemap: sourcemap_exports, SourceMap: SourceMap2, compile, isCompileError };
17370
17371globalThis.compile = (...args) => {
17372    let compiled = compile(...args);
17373    if(typeof compiled === 'string') {
17374        return compiled;
17375    }
17376    return compiled;
17377};
17378
17379})();
17380  "#,
17381  )
17382}