xmlui 0.8.6 → 0.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (106) hide show
  1. package/dist/{apiInterceptorWorker-fLBfPj2T.mjs → apiInterceptorWorker-B1u6prJM.mjs} +1 -1
  2. package/dist/{index-wd8FRzuM.mjs → index-CVvazA5D.mjs} +5849 -6109
  3. package/dist/index.css +274 -301
  4. package/dist/language-server.mjs +25 -1
  5. package/dist/{lint-B18Ko6Sy.mjs → lint-gX2osbkz.mjs} +920 -1120
  6. package/dist/scripts/bin/build.js +2 -2
  7. package/dist/scripts/bin/start.js +3 -9
  8. package/dist/scripts/bin/vite-xmlui-plugin.js +2 -2
  9. package/dist/scripts/bin/viteConfig.js +89 -63
  10. package/dist/scripts/src/abstractions/scripting/ScriptingSourceTreeExp.js +1 -2
  11. package/dist/scripts/src/components/Accordion/Accordion.js +6 -16
  12. package/dist/scripts/src/components/App/AppNative.js +8 -0
  13. package/dist/scripts/src/components/AppHeader/AppHeader.js +1 -5
  14. package/dist/scripts/src/components/AppHeader/AppHeaderNative.js +10 -4
  15. package/dist/scripts/src/components/AutoComplete/AutoComplete.js +13 -19
  16. package/dist/scripts/src/components/AutoComplete/AutoCompleteContext.js +2 -0
  17. package/dist/scripts/src/components/AutoComplete/AutoCompleteNative.js +7 -3
  18. package/dist/scripts/src/components/Avatar/Avatar.js +2 -9
  19. package/dist/scripts/src/components/Badge/Badge.js +2 -8
  20. package/dist/scripts/src/components/Button/Button.js +28 -60
  21. package/dist/scripts/src/components/Card/Card.js +1 -6
  22. package/dist/scripts/src/components/Checkbox/Checkbox.js +4 -12
  23. package/dist/scripts/src/components/ComponentProvider.js +4 -0
  24. package/dist/scripts/src/components/DatePicker/DatePicker.js +3 -10
  25. package/dist/scripts/src/components/DropdownMenu/DropdownMenu.js +1 -1
  26. package/dist/scripts/src/components/Form/Form.js +12 -28
  27. package/dist/scripts/src/components/Form/FormNative.js +9 -0
  28. package/dist/scripts/src/components/FormItem/HelperText.js +1 -1
  29. package/dist/scripts/src/components/FormItem/ItemWithLabel.js +2 -2
  30. package/dist/scripts/src/components/Heading/HeadingNative.js +0 -1
  31. package/dist/scripts/src/components/HtmlTags/HtmlTags.js +4 -19
  32. package/dist/scripts/src/components/IconProvider.js +2 -2
  33. package/dist/scripts/src/components/Link/Link.js +2 -8
  34. package/dist/scripts/src/components/Markdown/MarkdownNative.js +4 -4
  35. package/dist/scripts/src/components/ModalDialog/ModalDialog.js +1 -3
  36. package/dist/scripts/src/components/NavGroup/NavGroup.js +34 -3
  37. package/dist/scripts/src/components/NavGroup/NavGroupNative.js +24 -12
  38. package/dist/scripts/src/components/NavLink/NavLink.js +4 -11
  39. package/dist/scripts/src/components/NavPanel/NavPanel.js +1 -6
  40. package/dist/scripts/src/components/ProgressBar/ProgressBar.js +2 -8
  41. package/dist/scripts/src/components/RadioGroup/RadioGroup.js +4 -12
  42. package/dist/scripts/src/components/Select/Select.js +5 -13
  43. package/dist/scripts/src/components/Select/SelectNative.js +7 -3
  44. package/dist/scripts/src/components/Slider/Slider.js +2 -8
  45. package/dist/scripts/src/components/Spinner/Spinner.js +1 -6
  46. package/dist/scripts/src/components/SubNavPanel/SubNavPanel.js +22 -0
  47. package/dist/scripts/src/components/SubNavPanel/SubNavPanelNative.js +9 -0
  48. package/dist/scripts/src/components/Switch/Switch.js +6 -16
  49. package/dist/scripts/src/components/Table/Table.js +8 -17
  50. package/dist/scripts/src/components/TableOfContents/TableOfContents.js +4 -12
  51. package/dist/scripts/src/components/Tabs/Tabs.js +3 -10
  52. package/dist/scripts/src/components/Text/Text.js +10 -24
  53. package/dist/scripts/src/components/TextBox/TextBoxNative.js +1 -1
  54. package/dist/scripts/src/components/Theme/ThemeNative.js +1 -1
  55. package/dist/scripts/src/components/ValidationSummary/ValidationSummary.js +3 -3
  56. package/dist/scripts/src/components-core/DevTools.js +5 -4
  57. package/dist/scripts/src/components-core/RestApiProxy.js +7 -3
  58. package/dist/scripts/src/components-core/action/APICall.js +2 -1
  59. package/dist/scripts/src/components-core/rendering/Container.js +15 -11
  60. package/dist/scripts/src/components-core/rendering/StateContainer.js +3 -2
  61. package/dist/scripts/src/components-core/script-runner/BindingTreeEvaluationContext.js +0 -2
  62. package/dist/scripts/src/components-core/script-runner/ParameterParser.js +1 -1
  63. package/dist/scripts/src/components-core/script-runner/asyncProxy.js +11 -64
  64. package/dist/scripts/src/components-core/script-runner/eval-tree-async.js +177 -175
  65. package/dist/scripts/src/components-core/script-runner/eval-tree-common.js +173 -231
  66. package/dist/scripts/src/components-core/script-runner/eval-tree-sync.js +129 -100
  67. package/dist/scripts/src/components-core/script-runner/process-statement-async.js +170 -175
  68. package/dist/scripts/src/components-core/script-runner/process-statement-common.js +48 -33
  69. package/dist/scripts/src/components-core/script-runner/process-statement-sync.js +164 -170
  70. package/dist/scripts/src/components-core/script-runner/statement-queue.js +5 -4
  71. package/dist/scripts/src/components-core/script-runner/visitors.js +124 -116
  72. package/dist/scripts/src/components-core/theming/themes/palette.js +1 -0
  73. package/dist/scripts/src/components-core/theming/themes/root.js +300 -154
  74. package/dist/scripts/src/components-core/theming/themes/theme-colors.js +510 -510
  75. package/dist/scripts/src/components-core/theming/themes/xmlui.js +0 -1
  76. package/dist/scripts/src/components-core/theming/transformThemeVars.js +11 -11
  77. package/dist/scripts/src/components-core/utils/misc.js +13 -0
  78. package/dist/scripts/src/components-core/utils/statementUtils.js +56 -53
  79. package/dist/scripts/src/components-core/xmlui-parser.js +1 -1
  80. package/dist/scripts/src/parsers/scripting-exp/Lexer.js +1092 -0
  81. package/dist/scripts/src/parsers/scripting-exp/Parser.js +2635 -0
  82. package/dist/scripts/src/parsers/scripting-exp/ParserError.js +47 -0
  83. package/dist/scripts/src/parsers/scripting-exp/TokenTrait.js +109 -0
  84. package/dist/scripts/src/parsers/scripting-exp/TokenType.js +2 -4
  85. package/dist/scripts/src/parsers/scripting-exp/code-behind-collect.js +101 -0
  86. package/dist/scripts/src/parsers/scripting-exp/modules.js +107 -0
  87. package/dist/scripts/src/parsers/{scripting → scripting-exp}/tree-visitor.js +103 -107
  88. package/dist/scripts/src/parsers/xmlui-parser/transform.js +12 -12
  89. package/dist/style.css +245 -286
  90. package/dist/xmlui-metadata.mjs +2741 -2211
  91. package/dist/xmlui-metadata.umd.js +2740 -2212
  92. package/dist/xmlui-parser.d.ts +320 -232
  93. package/dist/xmlui-parser.mjs +19 -19
  94. package/dist/xmlui-standalone.umd.js +6754 -7220
  95. package/dist/xmlui.d.ts +322 -230
  96. package/dist/xmlui.mjs +1 -1
  97. package/package.json +10 -6
  98. package/dist/_commonjsHelpers-CcAunmGO.mjs +0 -33
  99. package/dist/scripts/src/components-core/script-runner/ICustomOperations.js +0 -34
  100. package/dist/scripts/src/components-core/script-runner/custom-operations-registry.js +0 -40
  101. package/dist/scripts/src/components-core/script-runner/custom-ui-data.js +0 -40
  102. package/dist/scripts/src/components-core/script-runner/syncProxy.js +0 -31
  103. package/dist/scripts/src/parsers/scripting/code-behind-collect.js +0 -153
  104. package/dist/scripts/src/parsers/scripting/modules.js +0 -284
  105. /package/dist/scripts/src/abstractions/scripting/{LogicalThread.js → LogicalThreadExp.js} +0 -0
  106. /package/dist/scripts/src/abstractions/scripting/{TryScope.js → TryScopeExp.js} +0 -0
@@ -233,6 +233,98 @@ const httpMethodNames = [
233
233
  "trace",
234
234
  "connect"
235
235
  ];
236
+ const T_BLOCK_STATEMENT = 1;
237
+ const T_EMPTY_STATEMENT = 2;
238
+ const T_EXPRESSION_STATEMENT = 3;
239
+ const T_ARROW_EXPRESSION_STATEMENT = 4;
240
+ const T_LET_STATEMENT = 5;
241
+ const T_CONST_STATEMENT = 6;
242
+ const T_VAR_STATEMENT = 7;
243
+ const T_IF_STATEMENT = 8;
244
+ const T_RETURN_STATEMENT = 9;
245
+ const T_BREAK_STATEMENT = 10;
246
+ const T_CONTINUE_STATEMENT = 11;
247
+ const T_WHILE_STATEMENT = 12;
248
+ const T_DO_WHILE_STATEMENT = 13;
249
+ const T_FOR_STATEMENT = 14;
250
+ const T_FOR_IN_STATEMENT = 15;
251
+ const T_FOR_OF_STATEMENT = 16;
252
+ const T_THROW_STATEMENT = 17;
253
+ const T_TRY_STATEMENT = 18;
254
+ const T_SWITCH_STATEMENT = 19;
255
+ const T_FUNCTION_DECLARATION = 20;
256
+ const T_UNARY_EXPRESSION = 100;
257
+ const T_BINARY_EXPRESSION = 101;
258
+ const T_SEQUENCE_EXPRESSION = 102;
259
+ const T_CONDITIONAL_EXPRESSION = 103;
260
+ const T_FUNCTION_INVOCATION_EXPRESSION = 104;
261
+ const T_MEMBER_ACCESS_EXPRESSION = 105;
262
+ const T_CALCULATED_MEMBER_ACCESS_EXPRESSION = 106;
263
+ const T_IDENTIFIER = 107;
264
+ const T_TEMPLATE_LITERAL_EXPRESSION = 108;
265
+ const T_LITERAL = 109;
266
+ const T_ARRAY_LITERAL = 110;
267
+ const T_OBJECT_LITERAL = 111;
268
+ const T_SPREAD_EXPRESSION = 112;
269
+ const T_ASSIGNMENT_EXPRESSION = 113;
270
+ const T_NO_ARG_EXPRESSION = 114;
271
+ const T_ARROW_EXPRESSION = 115;
272
+ const T_PREFIX_OP_EXPRESSION = 116;
273
+ const T_POSTFIX_OP_EXPRESSION = 117;
274
+ const T_REACTIVE_VAR_DECLARATION = 118;
275
+ const T_VAR_DECLARATION = 200;
276
+ const T_DESTRUCTURE = 201;
277
+ const T_ARRAY_DESTRUCTURE = 202;
278
+ const T_OBJECT_DESTRUCTURE = 203;
279
+ const T_SWITCH_CASE = 204;
280
+ class InputStream {
281
+ // Creates a stream that uses the specified source code
282
+ constructor(source) {
283
+ this.source = source;
284
+ this._pos = 0;
285
+ this._line = 1;
286
+ this._column = 0;
287
+ }
288
+ // Gets the current position in the stream. Starts from 0.
289
+ get position() {
290
+ return this._pos;
291
+ }
292
+ // Gets the current line number. Starts from 1.
293
+ get line() {
294
+ return this._line;
295
+ }
296
+ // Gets the current column number. Starts from 0.
297
+ get column() {
298
+ return this._column;
299
+ }
300
+ // Peeks the next character in the stream. Returns null, if EOF; otherwise the current source code character
301
+ peek() {
302
+ return this.ahead(0);
303
+ }
304
+ // Looks ahead with `n` characters in the stream. Returns null, if EOF; otherwise the look-ahead character
305
+ ahead(n = 1) {
306
+ return this._pos + n > this.source.length - 1 ? null : this.source[this._pos + n];
307
+ }
308
+ // Gets the next character from the stream
309
+ get() {
310
+ if (this._pos >= this.source.length) {
311
+ return null;
312
+ }
313
+ const ch = this.source[this._pos++];
314
+ if (ch === "\n") {
315
+ this._line++;
316
+ this._column = 0;
317
+ } else {
318
+ this._column++;
319
+ }
320
+ return ch;
321
+ }
322
+ // Gets the tail of the input stream
323
+ getTail(start) {
324
+ var _a;
325
+ return ((_a = this.source) == null ? void 0 : _a.substring(start)) ?? "";
326
+ }
327
+ }
236
328
  var TokenType = /* @__PURE__ */ ((TokenType2) => {
237
329
  TokenType2[TokenType2["Eof"] = -1] = "Eof";
238
330
  TokenType2[TokenType2["Ws"] = -2] = "Ws";
@@ -334,166 +426,10 @@ var TokenType = /* @__PURE__ */ ((TokenType2) => {
334
426
  TokenType2[TokenType2["Default"] = 93] = "Default";
335
427
  TokenType2[TokenType2["Delete"] = 94] = "Delete";
336
428
  TokenType2[TokenType2["Function"] = 95] = "Function";
337
- TokenType2[TokenType2["Export"] = 96] = "Export";
338
- TokenType2[TokenType2["Import"] = 97] = "Import";
339
- TokenType2[TokenType2["As"] = 98] = "As";
340
- TokenType2[TokenType2["From"] = 99] = "From";
429
+ TokenType2[TokenType2["As"] = 96] = "As";
430
+ TokenType2[TokenType2["From"] = 97] = "From";
341
431
  return TokenType2;
342
432
  })(TokenType || {});
343
- class InputStream {
344
- // Creates a stream that uses the specified source code
345
- constructor(source) {
346
- this.source = source;
347
- this._pos = 0;
348
- this._line = 1;
349
- this._column = 0;
350
- }
351
- // Gets the current position in the stream. Starts from 0.
352
- get position() {
353
- return this._pos;
354
- }
355
- // Gets the current line number. Starts from 1.
356
- get line() {
357
- return this._line;
358
- }
359
- // Gets the current column number. Starts from 0.
360
- get column() {
361
- return this._column;
362
- }
363
- // Peeks the next character in the stream. Returns null, if EOF; otherwise the current source code character
364
- peek() {
365
- return this.ahead(0);
366
- }
367
- // Looks ahead with `n` characters in the stream. Returns null, if EOF; otherwise the look-ahead character
368
- ahead(n = 1) {
369
- return this._pos + n > this.source.length - 1 ? null : this.source[this._pos + n];
370
- }
371
- // Gets the next character from the stream
372
- get() {
373
- if (this._pos >= this.source.length) {
374
- return null;
375
- }
376
- const ch = this.source[this._pos++];
377
- if (ch === "\n") {
378
- this._line++;
379
- this._column = 0;
380
- } else {
381
- this._column++;
382
- }
383
- return ch;
384
- }
385
- // Gets the tail of the input stream
386
- getTail(start) {
387
- var _a;
388
- return ((_a = this.source) == null ? void 0 : _a.substring(start)) ?? "";
389
- }
390
- }
391
- const tokenTraits = {
392
- [TokenType.Eof]: {},
393
- [TokenType.Ws]: {},
394
- [TokenType.DollarLBrace]: {},
395
- [TokenType.Backtick]: { expressionStart: true },
396
- [TokenType.BlockComment]: {},
397
- [TokenType.EolComment]: {},
398
- [TokenType.Unknown]: {},
399
- [TokenType.LParent]: { expressionStart: true },
400
- [TokenType.RParent]: {},
401
- [TokenType.Identifier]: { expressionStart: true, keywordLike: true, isPropLiteral: true },
402
- [TokenType.Exponent]: {},
403
- [TokenType.Divide]: {},
404
- [TokenType.Multiply]: {},
405
- [TokenType.Remainder]: {},
406
- [TokenType.Plus]: { expressionStart: true, canBeUnary: true },
407
- [TokenType.Minus]: { expressionStart: true, canBeUnary: true },
408
- [TokenType.BitwiseXor]: {},
409
- [TokenType.BitwiseOr]: {},
410
- [TokenType.LogicalOr]: {},
411
- [TokenType.BitwiseAnd]: {},
412
- [TokenType.LogicalAnd]: {},
413
- [TokenType.Assignment]: { isAssignment: true },
414
- [TokenType.AddAssignment]: { isAssignment: true },
415
- [TokenType.SubtractAssignment]: { isAssignment: true },
416
- [TokenType.ExponentAssignment]: { isAssignment: true },
417
- [TokenType.MultiplyAssignment]: { isAssignment: true },
418
- [TokenType.DivideAssignment]: { isAssignment: true },
419
- [TokenType.RemainderAssignment]: { isAssignment: true },
420
- [TokenType.ShiftLeftAssignment]: { isAssignment: true },
421
- [TokenType.ShiftRightAssignment]: { isAssignment: true },
422
- [TokenType.SignedShiftRightAssignment]: { isAssignment: true },
423
- [TokenType.BitwiseAndAssignment]: { isAssignment: true },
424
- [TokenType.BitwiseXorAssignment]: { isAssignment: true },
425
- [TokenType.BitwiseOrAssignment]: { isAssignment: true },
426
- [TokenType.LogicalAndAssignment]: { isAssignment: true },
427
- [TokenType.LogicalOrAssignment]: { isAssignment: true },
428
- [TokenType.NullCoalesceAssignment]: { isAssignment: true },
429
- [TokenType.Semicolon]: {},
430
- [TokenType.Comma]: {},
431
- [TokenType.Colon]: {},
432
- [TokenType.LSquare]: { expressionStart: true },
433
- [TokenType.RSquare]: {},
434
- [TokenType.QuestionMark]: {},
435
- [TokenType.NullCoalesce]: {},
436
- [TokenType.OptionalChaining]: {},
437
- [TokenType.BinaryNot]: { expressionStart: true, canBeUnary: true },
438
- [TokenType.LBrace]: { expressionStart: true },
439
- [TokenType.RBrace]: {},
440
- [TokenType.Equal]: {},
441
- [TokenType.StrictEqual]: {},
442
- [TokenType.LogicalNot]: { expressionStart: true, canBeUnary: true },
443
- [TokenType.NotEqual]: {},
444
- [TokenType.StrictNotEqual]: {},
445
- [TokenType.LessThan]: {},
446
- [TokenType.LessThanOrEqual]: {},
447
- [TokenType.ShiftLeft]: {},
448
- [TokenType.GreaterThan]: {},
449
- [TokenType.GreaterThanOrEqual]: {},
450
- [TokenType.ShiftRight]: {},
451
- [TokenType.SignedShiftRight]: {},
452
- [TokenType.Dot]: {},
453
- [TokenType.Spread]: { expressionStart: true, isPropLiteral: true },
454
- [TokenType.Global]: { expressionStart: true },
455
- [TokenType.DecimalLiteral]: { expressionStart: true, isPropLiteral: true },
456
- [TokenType.HexadecimalLiteral]: { expressionStart: true, isPropLiteral: true },
457
- [TokenType.BinaryLiteral]: { expressionStart: true, isPropLiteral: true },
458
- [TokenType.RealLiteral]: { expressionStart: true, isPropLiteral: true },
459
- [TokenType.StringLiteral]: { expressionStart: true, isPropLiteral: true },
460
- [TokenType.IncOp]: { expressionStart: true },
461
- [TokenType.DecOp]: { expressionStart: true },
462
- [TokenType.Infinity]: { expressionStart: true, keywordLike: true },
463
- [TokenType.NaN]: { expressionStart: true, keywordLike: true },
464
- [TokenType.True]: { expressionStart: true, keywordLike: true, isPropLiteral: true },
465
- [TokenType.False]: { expressionStart: true, keywordLike: true, isPropLiteral: true },
466
- [TokenType.Typeof]: { expressionStart: true, canBeUnary: true, keywordLike: true },
467
- [TokenType.Null]: { expressionStart: true, keywordLike: true },
468
- [TokenType.Undefined]: { expressionStart: true, keywordLike: true },
469
- [TokenType.In]: { keywordLike: true },
470
- [TokenType.Let]: { keywordLike: true },
471
- [TokenType.Const]: { keywordLike: true },
472
- [TokenType.Var]: { keywordLike: true },
473
- [TokenType.If]: { keywordLike: true },
474
- [TokenType.Else]: { keywordLike: true },
475
- [TokenType.Arrow]: { keywordLike: true },
476
- [TokenType.Return]: { keywordLike: true },
477
- [TokenType.Break]: { keywordLike: true },
478
- [TokenType.Continue]: { keywordLike: true },
479
- [TokenType.Do]: { keywordLike: true },
480
- [TokenType.While]: { keywordLike: true },
481
- [TokenType.For]: { keywordLike: true },
482
- [TokenType.Of]: { keywordLike: true },
483
- [TokenType.Throw]: { keywordLike: true },
484
- [TokenType.Try]: { keywordLike: true },
485
- [TokenType.Catch]: { keywordLike: true },
486
- [TokenType.Finally]: { keywordLike: true },
487
- [TokenType.Switch]: { keywordLike: true },
488
- [TokenType.Case]: { keywordLike: true },
489
- [TokenType.Default]: { keywordLike: true },
490
- [TokenType.Delete]: { expressionStart: true, canBeUnary: true, keywordLike: true },
491
- [TokenType.Function]: { keywordLike: true, expressionStart: true },
492
- [TokenType.Export]: { keywordLike: true },
493
- [TokenType.Import]: { keywordLike: true },
494
- [TokenType.As]: { keywordLike: true },
495
- [TokenType.From]: { keywordLike: true }
496
- };
497
433
  class Lexer {
498
434
  /**
499
435
  * Initializes the tokenizer with the input stream
@@ -564,15 +500,14 @@ class Lexer {
564
500
  * Gets the remaining characters after the parsing phase
565
501
  */
566
502
  getTail() {
567
- return this._ahead.length > 0 ? this.input.getTail(this._ahead[0].location.startPosition) : this.input.getTail(this._lastFetchPosition);
503
+ return this._ahead.length > 0 ? this.input.getTail(this._ahead[0].startPosition) : this.input.getTail(this._lastFetchPosition);
568
504
  }
569
- /**
570
- * Parsing template literals requires a context sensitive lexer.
505
+ /** Parsing template literals requires a context sensitive lexer.
571
506
  * This method has to be called by the parser when the lexer needs to scan a string inside a template literal.
572
507
  * Call this after the first opening backing and after the parser is done with parsing a placeholder, after the right brace.
573
508
  */
574
509
  setStartingPhaseToTemplateLiteral() {
575
- this._phaseExternallySet = 33;
510
+ this._phaseExternallySet = 34;
576
511
  }
577
512
  /**
578
513
  * Fetches the next character from the input stream
@@ -728,17 +663,6 @@ class Lexer {
728
663
  break;
729
664
  }
730
665
  break;
731
- case 6:
732
- if (ch === "{") {
733
- return completeToken(TokenType.DollarLBrace);
734
- }
735
- phase = 17;
736
- useResolver = true;
737
- tokenType = TokenType.Identifier;
738
- if (!isIdContinuation(ch)) {
739
- makeToken();
740
- }
741
- break;
742
666
  case 1:
743
667
  if (ch !== " " && ch !== " " && ch !== "\r" && ch !== "\n") {
744
668
  return makeToken();
@@ -1012,8 +936,19 @@ class Lexer {
1012
936
  return makeToken();
1013
937
  }
1014
938
  break;
1015
- case 34: {
1016
- phase = 33;
939
+ case 6:
940
+ if (ch === "{") {
941
+ return completeToken(TokenType.DollarLBrace);
942
+ }
943
+ phase = 17;
944
+ useResolver = true;
945
+ tokenType = TokenType.Identifier;
946
+ if (!isIdContinuation(ch)) {
947
+ makeToken();
948
+ }
949
+ break;
950
+ case 33: {
951
+ phase = 34;
1017
952
  const charAhead12 = this.input.ahead(0);
1018
953
  const charAhead22 = this.input.ahead(1);
1019
954
  if (charAhead12 === "`" || charAhead12 === "$" && charAhead22 === "{") {
@@ -1021,10 +956,10 @@ class Lexer {
1021
956
  }
1022
957
  break;
1023
958
  }
1024
- case 33:
959
+ case 34:
1025
960
  switch (ch) {
1026
961
  case "\\":
1027
- phase = 34;
962
+ phase = 33;
1028
963
  tokenType = TokenType.Unknown;
1029
964
  break phaseSwitch;
1030
965
  case "`":
@@ -1205,14 +1140,12 @@ class Lexer {
1205
1140
  return {
1206
1141
  text,
1207
1142
  type: tokenType,
1208
- location: {
1209
- startPosition: startPos,
1210
- endPosition: lastEndPos,
1211
- startLine: line,
1212
- endLine: line,
1213
- startColumn,
1214
- endColumn: lastEndColumn
1215
- }
1143
+ startPosition: startPos,
1144
+ endPosition: lastEndPos,
1145
+ startLine: line,
1146
+ endLine: line,
1147
+ startColumn,
1148
+ endColumn: lastEndColumn
1216
1149
  };
1217
1150
  }
1218
1151
  function completeToken(suggestedType) {
@@ -1235,7 +1168,7 @@ class Lexer {
1235
1168
  * Fetches the next RegEx token from the input stream
1236
1169
  */
1237
1170
  fetchRegEx() {
1238
- const tailPosition = this._ahead.length > 0 ? this._ahead[0].location.startPosition : this._lastFetchPosition;
1171
+ const tailPosition = this._ahead.length > 0 ? this._ahead[0].startPosition : this._lastFetchPosition;
1239
1172
  const tail = this.input.getTail(tailPosition);
1240
1173
  try {
1241
1174
  const regexpResult = parseRegExpLiteral(tail);
@@ -1322,8 +1255,6 @@ resolverHash.set("case", TokenType.Case);
1322
1255
  resolverHash.set("default", TokenType.Default);
1323
1256
  resolverHash.set("delete", TokenType.Delete);
1324
1257
  resolverHash.set("function", TokenType.Function);
1325
- resolverHash.set("export", TokenType.Export);
1326
- resolverHash.set("import", TokenType.Import);
1327
1258
  resolverHash.set("as", TokenType.As);
1328
1259
  resolverHash.set("from", TokenType.From);
1329
1260
  function isEof(t) {
@@ -1381,24 +1312,138 @@ const errorMessages$1 = {
1381
1312
  W021: "'{0}' is already exported from the module",
1382
1313
  W022: "Cannot find module '{0}'",
1383
1314
  W023: "Module '{0}' does not export '{1}'",
1384
- W024: "'function' or 'const' expected",
1315
+ W024: "'function' expected",
1385
1316
  W025: "'from' expected",
1386
1317
  W026: "A string literal expected",
1387
- W027: "Variables can be declared only in the top level module",
1388
- W028: "Invalid statement used in a module",
1318
+ W027: "Cannot declare var ('{0}') in an imported module",
1319
+ W028: "Invalid statement used in a module.",
1389
1320
  W029: "An imported module can contain only exported functions",
1390
1321
  W030: "Nested declarations cannot be exported",
1391
1322
  W031: "An identifier in a declaration cannot start with '$'"
1392
1323
  };
1324
+ const tokenTraits = {
1325
+ [TokenType.Eof]: {},
1326
+ [TokenType.Ws]: {},
1327
+ [TokenType.DollarLBrace]: {},
1328
+ [TokenType.Backtick]: { expressionStart: true },
1329
+ [TokenType.BlockComment]: {},
1330
+ [TokenType.EolComment]: {},
1331
+ [TokenType.Unknown]: {},
1332
+ [TokenType.LParent]: { expressionStart: true },
1333
+ [TokenType.RParent]: {},
1334
+ [TokenType.Identifier]: { expressionStart: true, keywordLike: true, isPropLiteral: true },
1335
+ [TokenType.Exponent]: {},
1336
+ [TokenType.Divide]: {},
1337
+ [TokenType.Multiply]: {},
1338
+ [TokenType.Remainder]: {},
1339
+ [TokenType.Plus]: { expressionStart: true, canBeUnary: true },
1340
+ [TokenType.Minus]: { expressionStart: true, canBeUnary: true },
1341
+ [TokenType.BitwiseXor]: {},
1342
+ [TokenType.BitwiseOr]: {},
1343
+ [TokenType.LogicalOr]: {},
1344
+ [TokenType.BitwiseAnd]: {},
1345
+ [TokenType.LogicalAnd]: {},
1346
+ [TokenType.Assignment]: { isAssignment: true },
1347
+ [TokenType.AddAssignment]: { isAssignment: true },
1348
+ [TokenType.SubtractAssignment]: { isAssignment: true },
1349
+ [TokenType.ExponentAssignment]: { isAssignment: true },
1350
+ [TokenType.MultiplyAssignment]: { isAssignment: true },
1351
+ [TokenType.DivideAssignment]: { isAssignment: true },
1352
+ [TokenType.RemainderAssignment]: { isAssignment: true },
1353
+ [TokenType.ShiftLeftAssignment]: { isAssignment: true },
1354
+ [TokenType.ShiftRightAssignment]: { isAssignment: true },
1355
+ [TokenType.SignedShiftRightAssignment]: { isAssignment: true },
1356
+ [TokenType.BitwiseAndAssignment]: { isAssignment: true },
1357
+ [TokenType.BitwiseXorAssignment]: { isAssignment: true },
1358
+ [TokenType.BitwiseOrAssignment]: { isAssignment: true },
1359
+ [TokenType.LogicalAndAssignment]: { isAssignment: true },
1360
+ [TokenType.LogicalOrAssignment]: { isAssignment: true },
1361
+ [TokenType.NullCoalesceAssignment]: { isAssignment: true },
1362
+ [TokenType.Semicolon]: {},
1363
+ [TokenType.Comma]: {},
1364
+ [TokenType.Colon]: {},
1365
+ [TokenType.LSquare]: { expressionStart: true },
1366
+ [TokenType.RSquare]: {},
1367
+ [TokenType.QuestionMark]: {},
1368
+ [TokenType.NullCoalesce]: {},
1369
+ [TokenType.OptionalChaining]: {},
1370
+ [TokenType.BinaryNot]: { expressionStart: true, canBeUnary: true },
1371
+ [TokenType.LBrace]: { expressionStart: true },
1372
+ [TokenType.RBrace]: {},
1373
+ [TokenType.Equal]: {},
1374
+ [TokenType.StrictEqual]: {},
1375
+ [TokenType.LogicalNot]: { expressionStart: true, canBeUnary: true },
1376
+ [TokenType.NotEqual]: {},
1377
+ [TokenType.StrictNotEqual]: {},
1378
+ [TokenType.LessThan]: {},
1379
+ [TokenType.LessThanOrEqual]: {},
1380
+ [TokenType.ShiftLeft]: {},
1381
+ [TokenType.GreaterThan]: {},
1382
+ [TokenType.GreaterThanOrEqual]: {},
1383
+ [TokenType.ShiftRight]: {},
1384
+ [TokenType.SignedShiftRight]: {},
1385
+ [TokenType.Dot]: {},
1386
+ [TokenType.Spread]: { expressionStart: true, isPropLiteral: true },
1387
+ [TokenType.Global]: { expressionStart: true },
1388
+ [TokenType.DecimalLiteral]: { expressionStart: true, isPropLiteral: true },
1389
+ [TokenType.HexadecimalLiteral]: { expressionStart: true, isPropLiteral: true },
1390
+ [TokenType.BinaryLiteral]: { expressionStart: true, isPropLiteral: true },
1391
+ [TokenType.RealLiteral]: { expressionStart: true, isPropLiteral: true },
1392
+ [TokenType.StringLiteral]: { expressionStart: true, isPropLiteral: true },
1393
+ [TokenType.IncOp]: { expressionStart: true },
1394
+ [TokenType.DecOp]: { expressionStart: true },
1395
+ [TokenType.Infinity]: { expressionStart: true, keywordLike: true },
1396
+ [TokenType.NaN]: { expressionStart: true, keywordLike: true },
1397
+ [TokenType.True]: { expressionStart: true, keywordLike: true, isPropLiteral: true },
1398
+ [TokenType.False]: { expressionStart: true, keywordLike: true, isPropLiteral: true },
1399
+ [TokenType.Typeof]: { expressionStart: true, canBeUnary: true, keywordLike: true },
1400
+ [TokenType.Null]: { expressionStart: true, keywordLike: true },
1401
+ [TokenType.Undefined]: { expressionStart: true, keywordLike: true },
1402
+ [TokenType.In]: { keywordLike: true },
1403
+ [TokenType.Let]: { keywordLike: true },
1404
+ [TokenType.Const]: { keywordLike: true },
1405
+ [TokenType.Var]: { keywordLike: true },
1406
+ [TokenType.If]: { keywordLike: true },
1407
+ [TokenType.Else]: { keywordLike: true },
1408
+ [TokenType.Arrow]: { keywordLike: true },
1409
+ [TokenType.Return]: { keywordLike: true },
1410
+ [TokenType.Break]: { keywordLike: true },
1411
+ [TokenType.Continue]: { keywordLike: true },
1412
+ [TokenType.Do]: { keywordLike: true },
1413
+ [TokenType.While]: { keywordLike: true },
1414
+ [TokenType.For]: { keywordLike: true },
1415
+ [TokenType.Of]: { keywordLike: true },
1416
+ [TokenType.Throw]: { keywordLike: true },
1417
+ [TokenType.Try]: { keywordLike: true },
1418
+ [TokenType.Catch]: { keywordLike: true },
1419
+ [TokenType.Finally]: { keywordLike: true },
1420
+ [TokenType.Switch]: { keywordLike: true },
1421
+ [TokenType.Case]: { keywordLike: true },
1422
+ [TokenType.Default]: { keywordLike: true },
1423
+ [TokenType.Delete]: { expressionStart: true, canBeUnary: true, keywordLike: true },
1424
+ [TokenType.Function]: { keywordLike: true, expressionStart: true },
1425
+ [TokenType.As]: { keywordLike: true },
1426
+ [TokenType.From]: { keywordLike: true }
1427
+ };
1428
+ let lastNodeId = 0;
1429
+ function createXmlUiTreeNodeId() {
1430
+ return ++lastNodeId;
1431
+ }
1393
1432
  class Parser {
1394
1433
  /**
1395
1434
  * Initializes the parser with the specified source code
1396
1435
  * @param source Source code to parse
1397
1436
  */
1398
1437
  constructor(source) {
1399
- this.source = source;
1400
1438
  this._parseErrors = [];
1401
1439
  this._statementLevel = 0;
1440
+ this._lexer = new Lexer(new InputStream(source ?? ""));
1441
+ }
1442
+ /**
1443
+ * Sets the source code to parse
1444
+ * @param source Source code to parse
1445
+ */
1446
+ setSource(source) {
1402
1447
  this._lexer = new Lexer(new InputStream(source));
1403
1448
  }
1404
1449
  /**
@@ -1448,7 +1493,7 @@ class Parser {
1448
1493
  const statement = this.parseStatement();
1449
1494
  if (!statement) return null;
1450
1495
  statements.push(statement);
1451
- if (statement.type !== "EmptyS") {
1496
+ if (statement.type !== T_EMPTY_STATEMENT) {
1452
1497
  this.skipToken(TokenType.Semicolon);
1453
1498
  }
1454
1499
  }
@@ -1482,10 +1527,20 @@ class Parser {
1482
1527
  return this.parseReturnStatement();
1483
1528
  case TokenType.Break:
1484
1529
  this._lexer.get();
1485
- return this.createStatementNode("BrkS", {}, startToken, startToken);
1530
+ return this.createStatementNode(
1531
+ T_BREAK_STATEMENT,
1532
+ {},
1533
+ startToken,
1534
+ startToken
1535
+ );
1486
1536
  case TokenType.Continue:
1487
1537
  this._lexer.get();
1488
- return this.createStatementNode("ContS", {}, startToken, startToken);
1538
+ return this.createStatementNode(
1539
+ T_CONTINUE_STATEMENT,
1540
+ {},
1541
+ startToken,
1542
+ startToken
1543
+ );
1489
1544
  case TokenType.For:
1490
1545
  return this.parseForStatement();
1491
1546
  case TokenType.Throw:
@@ -1496,20 +1551,8 @@ class Parser {
1496
1551
  return this.parseSwitchStatement();
1497
1552
  case TokenType.Function:
1498
1553
  return this.parseFunctionDeclaration();
1499
- case TokenType.Export:
1500
- return this.parseExport();
1501
- case TokenType.Import:
1502
- return this.parseImport();
1503
1554
  default:
1504
- if (startToken.type === TokenType.Eof) {
1505
- this.reportError("W002", startToken, "EOF");
1506
- return null;
1507
- }
1508
- if (this.isExpressionStart(startToken)) {
1509
- return this.parseExpressionStatement(allowSequence);
1510
- }
1511
- this.reportError("W002", startToken, startToken.text);
1512
- return null;
1555
+ return this.isExpressionStart(startToken) ? this.parseExpressionStatement(allowSequence) : null;
1513
1556
  }
1514
1557
  } finally {
1515
1558
  this._statementLevel--;
@@ -1524,7 +1567,7 @@ class Parser {
1524
1567
  */
1525
1568
  parseEmptyStatement() {
1526
1569
  const startToken = this._lexer.get();
1527
- return this.createStatementNode("EmptyS", {}, startToken, startToken);
1570
+ return this.createStatementNode(T_EMPTY_STATEMENT, {}, startToken, startToken);
1528
1571
  }
1529
1572
  /**
1530
1573
  * Parses an expression statement
@@ -1535,14 +1578,14 @@ class Parser {
1535
1578
  */
1536
1579
  parseExpressionStatement(allowSequence = true) {
1537
1580
  const startToken = this._lexer.peek();
1538
- const expression = this.getExpression(allowSequence);
1539
- return expression ? this.createStatementNode(
1540
- "ExprS",
1581
+ const expr = this.getExpression(allowSequence);
1582
+ return expr ? this.createStatementNode(
1583
+ T_EXPRESSION_STATEMENT,
1541
1584
  {
1542
- expression
1585
+ expr
1543
1586
  },
1544
1587
  startToken,
1545
- expression.endToken
1588
+ expr.endToken
1546
1589
  ) : null;
1547
1590
  }
1548
1591
  /**
@@ -1555,26 +1598,26 @@ class Parser {
1555
1598
  parseLetStatement() {
1556
1599
  const startToken = this._lexer.get();
1557
1600
  let endToken = startToken;
1558
- const declarations = [];
1601
+ const decls = [];
1559
1602
  while (true) {
1560
1603
  const declStart = this._lexer.peek();
1561
1604
  let declarationProps = {};
1562
1605
  if (declStart.type === TokenType.LBrace) {
1563
1606
  endToken = this._lexer.ahead(1);
1564
- const objectDestruct = this.parseObjectDestructure();
1565
- if (objectDestruct === null) return null;
1607
+ const oDestr = this.parseObjectDestructure();
1608
+ if (oDestr === null) return null;
1566
1609
  declarationProps = {
1567
- objectDestruct
1610
+ oDestr
1568
1611
  };
1569
- endToken = objectDestruct.length > 0 ? objectDestruct[objectDestruct.length - 1].endToken : endToken;
1612
+ endToken = oDestr.length > 0 ? oDestr[oDestr.length - 1].endToken : endToken;
1570
1613
  } else if (declStart.type === TokenType.LSquare) {
1571
1614
  endToken = this._lexer.ahead(1);
1572
- const arrayDestruct = this.parseArrayDestructure();
1573
- if (arrayDestruct === null) return null;
1615
+ const aDestr = this.parseArrayDestructure();
1616
+ if (aDestr === null) return null;
1574
1617
  declarationProps = {
1575
- arrayDestruct
1618
+ aDestr
1576
1619
  };
1577
- endToken = arrayDestruct.length > 0 ? arrayDestruct[arrayDestruct.length - 1].endToken : endToken;
1620
+ endToken = aDestr.length > 0 ? aDestr[aDestr.length - 1].endToken : endToken;
1578
1621
  } else if (declStart.type === TokenType.Identifier) {
1579
1622
  if (declStart.text.startsWith("$")) {
1580
1623
  this.reportError("W031");
@@ -1589,27 +1632,32 @@ class Parser {
1589
1632
  return null;
1590
1633
  }
1591
1634
  const initToken = this._lexer.peek();
1592
- let expression = null;
1635
+ let expr = null;
1593
1636
  if (initToken.type === TokenType.Assignment) {
1594
1637
  this._lexer.get();
1595
- expression = this.getExpression(false);
1596
- if (expression === null) return null;
1597
- declarationProps.expression = expression;
1598
- endToken = expression.endToken;
1599
- } else if (declarationProps.arrayDestruct || declarationProps.objectDestruct) {
1638
+ expr = this.getExpression(false);
1639
+ if (expr === null) return null;
1640
+ declarationProps.expr = expr;
1641
+ endToken = expr.endToken;
1642
+ } else if (declarationProps.aDestr || declarationProps.oDestr) {
1600
1643
  this.reportError("W009", initToken);
1601
1644
  return null;
1602
1645
  }
1603
- declarations.push(
1604
- this.createExpressionNode("VarD", declarationProps, declStart, endToken)
1646
+ decls.push(
1647
+ this.createExpressionNode(
1648
+ T_VAR_DECLARATION,
1649
+ declarationProps,
1650
+ declStart,
1651
+ endToken
1652
+ )
1605
1653
  );
1606
1654
  if (this._lexer.peek().type !== TokenType.Comma) break;
1607
1655
  this._lexer.get();
1608
1656
  }
1609
1657
  return this.createStatementNode(
1610
- "LetS",
1658
+ T_LET_STATEMENT,
1611
1659
  {
1612
- declarations
1660
+ decls
1613
1661
  },
1614
1662
  startToken,
1615
1663
  endToken
@@ -1625,26 +1673,26 @@ class Parser {
1625
1673
  parseConstStatement() {
1626
1674
  const startToken = this._lexer.get();
1627
1675
  let endToken = startToken;
1628
- const declarations = [];
1676
+ const decls = [];
1629
1677
  while (true) {
1630
1678
  const declStart = this._lexer.peek();
1631
1679
  let declarationProps = {};
1632
1680
  if (declStart.type === TokenType.LBrace) {
1633
1681
  endToken = this._lexer.ahead(1);
1634
- const objectDestruct = this.parseObjectDestructure();
1635
- if (objectDestruct === null) return null;
1682
+ const oDestr = this.parseObjectDestructure();
1683
+ if (oDestr === null) return null;
1636
1684
  declarationProps = {
1637
- objectDestruct
1685
+ oDestr
1638
1686
  };
1639
- endToken = objectDestruct.length > 0 ? objectDestruct[objectDestruct.length - 1].endToken : endToken;
1687
+ endToken = oDestr.length > 0 ? oDestr[oDestr.length - 1].endToken : endToken;
1640
1688
  } else if (declStart.type === TokenType.LSquare) {
1641
1689
  endToken = this._lexer.ahead(1);
1642
- const arrayDestruct = this.parseArrayDestructure();
1643
- if (arrayDestruct === null) return null;
1690
+ const aDestr = this.parseArrayDestructure();
1691
+ if (aDestr === null) return null;
1644
1692
  declarationProps = {
1645
- arrayDestruct
1693
+ aDestr
1646
1694
  };
1647
- endToken = arrayDestruct.length > 0 ? arrayDestruct[arrayDestruct.length - 1].endToken : endToken;
1695
+ endToken = aDestr.length > 0 ? aDestr[aDestr.length - 1].endToken : endToken;
1648
1696
  } else if (declStart.type === TokenType.Identifier) {
1649
1697
  if (declStart.text.startsWith("$")) {
1650
1698
  this.reportError("W031");
@@ -1659,27 +1707,32 @@ class Parser {
1659
1707
  return null;
1660
1708
  }
1661
1709
  this.expectToken(TokenType.Assignment);
1662
- const expression = this.getExpression(false);
1663
- if (expression === null) return null;
1664
- declarationProps.expression = expression;
1665
- endToken = expression.endToken;
1666
- declarations.push(
1667
- this.createExpressionNode("VarD", declarationProps, declStart, endToken)
1710
+ const expr = this.getExpression(false);
1711
+ if (expr === null) return null;
1712
+ declarationProps.expr = expr;
1713
+ endToken = expr.endToken;
1714
+ decls.push(
1715
+ this.createExpressionNode(
1716
+ T_VAR_DECLARATION,
1717
+ declarationProps,
1718
+ declStart,
1719
+ endToken
1720
+ )
1668
1721
  );
1669
1722
  if (this._lexer.peek().type !== TokenType.Comma) break;
1670
1723
  this._lexer.get();
1671
1724
  }
1672
1725
  return this.createStatementNode(
1673
- "ConstS",
1726
+ T_CONST_STATEMENT,
1674
1727
  {
1675
- declarations
1728
+ decls
1676
1729
  },
1677
1730
  startToken,
1678
1731
  endToken
1679
1732
  );
1680
1733
  }
1681
1734
  /**
1682
- * Parses a const statement
1735
+ * Parses a var statement
1683
1736
  *
1684
1737
  * constStatement
1685
1738
  * : "var" id "=" expression
@@ -1688,7 +1741,7 @@ class Parser {
1688
1741
  parseVarStatement() {
1689
1742
  const startToken = this._lexer.get();
1690
1743
  let endToken = startToken;
1691
- const declarations = [];
1744
+ const decls = [];
1692
1745
  while (true) {
1693
1746
  const declStart = this._lexer.peek();
1694
1747
  let declarationProps = {};
@@ -1699,20 +1752,25 @@ class Parser {
1699
1752
  }
1700
1753
  endToken = this._lexer.get();
1701
1754
  declarationProps = {
1702
- id: declStart.text
1755
+ id: {
1756
+ type: T_IDENTIFIER,
1757
+ name: declStart.text,
1758
+ startToken: declStart,
1759
+ endToken
1760
+ }
1703
1761
  };
1704
1762
  } else {
1705
1763
  this.reportError("W003");
1706
1764
  return null;
1707
1765
  }
1708
1766
  this.expectToken(TokenType.Assignment);
1709
- const expression = this.getExpression(false);
1710
- if (expression === null) return null;
1711
- declarationProps.expression = expression;
1712
- endToken = expression.endToken;
1713
- declarations.push(
1767
+ const expr = this.getExpression(false);
1768
+ if (expr === null) return null;
1769
+ declarationProps.expr = expr;
1770
+ endToken = expr.endToken;
1771
+ decls.push(
1714
1772
  this.createExpressionNode(
1715
- "RVarD",
1773
+ T_REACTIVE_VAR_DECLARATION,
1716
1774
  declarationProps,
1717
1775
  declStart,
1718
1776
  endToken
@@ -1722,9 +1780,9 @@ class Parser {
1722
1780
  this._lexer.get();
1723
1781
  }
1724
1782
  return this.createStatementNode(
1725
- "VarS",
1783
+ T_VAR_STATEMENT,
1726
1784
  {
1727
- declarations
1785
+ decls
1728
1786
  },
1729
1787
  startToken,
1730
1788
  endToken
@@ -1745,8 +1803,8 @@ class Parser {
1745
1803
  return null;
1746
1804
  }
1747
1805
  let alias;
1748
- let arrayDestruct;
1749
- let objectDestruct;
1806
+ let aDestr;
1807
+ let oDestr;
1750
1808
  this._lexer.get();
1751
1809
  nextToken = this._lexer.peek();
1752
1810
  if (nextToken.type === TokenType.Colon) {
@@ -1757,21 +1815,21 @@ class Parser {
1757
1815
  endToken = nextToken;
1758
1816
  this._lexer.get();
1759
1817
  } else if (nextToken.type === TokenType.LSquare) {
1760
- arrayDestruct = this.parseArrayDestructure();
1761
- if (arrayDestruct === null) return null;
1762
- endToken = arrayDestruct[arrayDestruct.length - 1].endToken;
1818
+ aDestr = this.parseArrayDestructure();
1819
+ if (aDestr === null) return null;
1820
+ endToken = aDestr[aDestr.length - 1].endToken;
1763
1821
  } else if (nextToken.type === TokenType.LBrace) {
1764
- objectDestruct = this.parseObjectDestructure();
1765
- if (objectDestruct === null) return null;
1766
- endToken = objectDestruct[objectDestruct.length - 1].endToken;
1822
+ oDestr = this.parseObjectDestructure();
1823
+ if (oDestr === null) return null;
1824
+ endToken = oDestr[oDestr.length - 1].endToken;
1767
1825
  }
1768
1826
  }
1769
1827
  nextToken = this._lexer.peek();
1770
1828
  if (nextToken.type === TokenType.Comma || nextToken.type === TokenType.RBrace) {
1771
1829
  result.push(
1772
1830
  this.createExpressionNode(
1773
- "ODestr",
1774
- { id, alias, arrayDestruct, objectDestruct },
1831
+ T_OBJECT_DESTRUCTURE,
1832
+ { id, alias, aDestr, oDestr },
1775
1833
  startToken,
1776
1834
  endToken
1777
1835
  )
@@ -1792,8 +1850,8 @@ class Parser {
1792
1850
  do {
1793
1851
  let nextToken = this._lexer.peek();
1794
1852
  let id;
1795
- let arrayDestruct;
1796
- let objectDestruct;
1853
+ let aDestr;
1854
+ let oDestr;
1797
1855
  if (nextToken.type === TokenType.Identifier) {
1798
1856
  id = nextToken.text;
1799
1857
  if (id.startsWith("$")) {
@@ -1803,31 +1861,31 @@ class Parser {
1803
1861
  endToken = nextToken;
1804
1862
  nextToken = this._lexer.get();
1805
1863
  } else if (nextToken.type === TokenType.LSquare) {
1806
- arrayDestruct = this.parseArrayDestructure();
1807
- if (arrayDestruct === null) return null;
1808
- endToken = arrayDestruct[arrayDestruct.length - 1].endToken;
1864
+ aDestr = this.parseArrayDestructure();
1865
+ if (aDestr === null) return null;
1866
+ endToken = aDestr[aDestr.length - 1].endToken;
1809
1867
  } else if (nextToken.type === TokenType.LBrace) {
1810
- objectDestruct = this.parseObjectDestructure();
1811
- if (objectDestruct === null) return null;
1812
- endToken = objectDestruct[objectDestruct.length - 1].endToken;
1868
+ oDestr = this.parseObjectDestructure();
1869
+ if (oDestr === null) return null;
1870
+ endToken = oDestr[oDestr.length - 1].endToken;
1813
1871
  }
1814
1872
  nextToken = this._lexer.peek();
1815
1873
  if (nextToken.type === TokenType.Comma) {
1816
1874
  result.push(
1817
1875
  this.createExpressionNode(
1818
- "ADestr",
1819
- { id, arrayDestruct, objectDestruct },
1876
+ T_ARRAY_DESTRUCTURE,
1877
+ { id, aDestr, oDestr },
1820
1878
  startToken,
1821
1879
  endToken
1822
1880
  )
1823
1881
  );
1824
1882
  this._lexer.get();
1825
1883
  } else if (nextToken.type === TokenType.RSquare) {
1826
- if (id || arrayDestruct || objectDestruct) {
1884
+ if (id || aDestr || oDestr) {
1827
1885
  result.push(
1828
1886
  this.createExpressionNode(
1829
- "ADestr",
1830
- { id, arrayDestruct, objectDestruct },
1887
+ T_ARRAY_DESTRUCTURE,
1888
+ { id, aDestr, oDestr },
1831
1889
  startToken,
1832
1890
  endToken
1833
1891
  )
@@ -1851,17 +1909,22 @@ class Parser {
1851
1909
  */
1852
1910
  parseBlockStatement() {
1853
1911
  const startToken = this._lexer.get();
1854
- const statements = [];
1912
+ const stmts = [];
1855
1913
  while (this._lexer.peek().type !== TokenType.RBrace) {
1856
1914
  const statement = this.parseStatement();
1857
1915
  if (!statement) return null;
1858
- statements.push(statement);
1859
- if (statement.type !== "EmptyS") {
1916
+ stmts.push(statement);
1917
+ if (statement.type !== T_EMPTY_STATEMENT) {
1860
1918
  this.skipToken(TokenType.Semicolon);
1861
1919
  }
1862
1920
  }
1863
1921
  const endToken = this._lexer.get();
1864
- return this.createStatementNode("BlockS", { statements }, startToken, endToken);
1922
+ return this.createStatementNode(
1923
+ T_BLOCK_STATEMENT,
1924
+ { stmts },
1925
+ startToken,
1926
+ endToken
1927
+ );
1865
1928
  }
1866
1929
  /**
1867
1930
  * Parses an if statement
@@ -1874,33 +1937,33 @@ class Parser {
1874
1937
  const startToken = this._lexer.get();
1875
1938
  let endToken = startToken;
1876
1939
  this.expectToken(TokenType.LParent, "W014");
1877
- const condition = this.getExpression();
1878
- if (!condition) return null;
1940
+ const cond = this.getExpression();
1941
+ if (!cond) return null;
1879
1942
  this.expectToken(TokenType.RParent, "W006");
1880
- const thenBranch = this.parseStatement();
1881
- if (!thenBranch) return null;
1882
- endToken = thenBranch.endToken;
1943
+ const thenB = this.parseStatement();
1944
+ if (!thenB) return null;
1945
+ endToken = thenB.endToken;
1883
1946
  let elseCanFollow = true;
1884
- if (thenBranch.type !== "BlockS") {
1947
+ if (thenB.type !== T_BLOCK_STATEMENT) {
1885
1948
  if (this._lexer.peek().type === TokenType.Semicolon) {
1886
1949
  this._lexer.get();
1887
1950
  } else {
1888
1951
  elseCanFollow = false;
1889
1952
  }
1890
1953
  }
1891
- let elseBranch = null;
1954
+ let elseB = null;
1892
1955
  if (elseCanFollow && this._lexer.peek().type === TokenType.Else) {
1893
1956
  this._lexer.get();
1894
- elseBranch = this.parseStatement();
1895
- if (!elseBranch) return null;
1896
- endToken = elseBranch.endToken;
1957
+ elseB = this.parseStatement();
1958
+ if (!elseB) return null;
1959
+ endToken = elseB.endToken;
1897
1960
  }
1898
1961
  return this.createStatementNode(
1899
- "IfS",
1962
+ T_IF_STATEMENT,
1900
1963
  {
1901
- condition,
1902
- thenBranch,
1903
- elseBranch
1964
+ cond,
1965
+ thenB,
1966
+ elseB
1904
1967
  },
1905
1968
  startToken,
1906
1969
  endToken
@@ -1916,15 +1979,15 @@ class Parser {
1916
1979
  parseWhileStatement() {
1917
1980
  const startToken = this._lexer.get();
1918
1981
  this.expectToken(TokenType.LParent, "W014");
1919
- const condition = this.getExpression();
1920
- if (!condition) return null;
1982
+ const cond = this.getExpression();
1983
+ if (!cond) return null;
1921
1984
  this.expectToken(TokenType.RParent, "W006");
1922
1985
  const body = this.parseStatement();
1923
1986
  if (!body) return null;
1924
1987
  return this.createStatementNode(
1925
- "WhileS",
1988
+ T_WHILE_STATEMENT,
1926
1989
  {
1927
- condition,
1990
+ cond,
1928
1991
  body
1929
1992
  },
1930
1993
  startToken,
@@ -1942,19 +2005,19 @@ class Parser {
1942
2005
  const startToken = this._lexer.get();
1943
2006
  const body = this.parseStatement();
1944
2007
  if (!body) return null;
1945
- if (body.type !== "BlockS" && body.type !== "EmptyS") {
2008
+ if (body.type !== T_BLOCK_STATEMENT && body.type !== T_EMPTY_STATEMENT) {
1946
2009
  this.expectToken(TokenType.Semicolon);
1947
2010
  }
1948
2011
  this.expectToken(TokenType.While);
1949
2012
  this.expectToken(TokenType.LParent, "W014");
1950
- const condition = this.getExpression();
1951
- if (!condition) return null;
2013
+ const cond = this.getExpression();
2014
+ if (!cond) return null;
1952
2015
  const endToken = this._lexer.peek();
1953
2016
  this.expectToken(TokenType.RParent, "W006");
1954
2017
  return this.createStatementNode(
1955
- "DoWS",
2018
+ T_DO_WHILE_STATEMENT,
1956
2019
  {
1957
- condition,
2020
+ cond,
1958
2021
  body
1959
2022
  },
1960
2023
  startToken,
@@ -1971,16 +2034,16 @@ class Parser {
1971
2034
  parseReturnStatement() {
1972
2035
  const startToken = this._lexer.peek();
1973
2036
  let endToken = this._lexer.get();
1974
- let expression;
2037
+ let expr;
1975
2038
  if (tokenTraits[this._lexer.peek().type].expressionStart) {
1976
- expression = this.getExpression();
1977
- if (expression === null) return null;
1978
- endToken = expression.endToken;
2039
+ expr = this.getExpression();
2040
+ if (expr === null) return null;
2041
+ endToken = expr.endToken;
1979
2042
  }
1980
2043
  return this.createStatementNode(
1981
- "RetS",
2044
+ T_RETURN_STATEMENT,
1982
2045
  {
1983
- expression
2046
+ expr
1984
2047
  },
1985
2048
  startToken,
1986
2049
  endToken
@@ -1999,18 +2062,18 @@ class Parser {
1999
2062
  let nextToken = this._lexer.peek();
2000
2063
  if (nextToken.type === TokenType.Identifier) {
2001
2064
  if (this._lexer.ahead(1).type === TokenType.In) {
2002
- return this.parseForInOfStatement(startToken, "none", nextToken.text, "ForInS");
2065
+ return this.parseForInOfStatement(startToken, "none", nextToken, T_FOR_IN_STATEMENT);
2003
2066
  } else if (this._lexer.ahead(1).type === TokenType.Of) {
2004
- return this.parseForInOfStatement(startToken, "none", nextToken.text, "ForOfS");
2067
+ return this.parseForInOfStatement(startToken, "none", nextToken, T_FOR_OF_STATEMENT);
2005
2068
  }
2006
2069
  } else if (nextToken.type === TokenType.Let) {
2007
2070
  const idToken = this._lexer.ahead(1);
2008
2071
  if (idToken.type === TokenType.Identifier) {
2009
2072
  const inOfToken = this._lexer.ahead(2);
2010
2073
  if (inOfToken.type === TokenType.In) {
2011
- return this.parseForInOfStatement(startToken, "let", idToken.text, "ForInS");
2074
+ return this.parseForInOfStatement(startToken, "let", idToken, T_FOR_IN_STATEMENT);
2012
2075
  } else if (inOfToken.type === TokenType.Of) {
2013
- return this.parseForInOfStatement(startToken, "let", idToken.text, "ForOfS");
2076
+ return this.parseForInOfStatement(startToken, "let", idToken, T_FOR_OF_STATEMENT);
2014
2077
  }
2015
2078
  }
2016
2079
  } else if (nextToken.type === TokenType.Const) {
@@ -2018,9 +2081,9 @@ class Parser {
2018
2081
  if (idToken.type === TokenType.Identifier) {
2019
2082
  const inOfToken = this._lexer.ahead(2);
2020
2083
  if (inOfToken.type === TokenType.In) {
2021
- return this.parseForInOfStatement(startToken, "const", idToken.text, "ForInS");
2084
+ return this.parseForInOfStatement(startToken, "const", idToken, T_FOR_IN_STATEMENT);
2022
2085
  } else if (inOfToken.type === TokenType.Of) {
2023
- return this.parseForInOfStatement(startToken, "const", idToken.text, "ForOfS");
2086
+ return this.parseForInOfStatement(startToken, "const", idToken, T_FOR_OF_STATEMENT);
2024
2087
  }
2025
2088
  }
2026
2089
  }
@@ -2034,7 +2097,7 @@ class Parser {
2034
2097
  return null;
2035
2098
  }
2036
2099
  init = letStmt;
2037
- if (init.declarations.some((d) => !d.expression)) {
2100
+ if (init.decls.some((d) => !d.expr)) {
2038
2101
  this.reportError("W011");
2039
2102
  return null;
2040
2103
  }
@@ -2047,22 +2110,22 @@ class Parser {
2047
2110
  init = exprStmt;
2048
2111
  this.expectToken(TokenType.Semicolon);
2049
2112
  }
2050
- let condition;
2113
+ let cond;
2051
2114
  nextToken = this._lexer.peek();
2052
2115
  if (nextToken.type === TokenType.Semicolon) {
2053
2116
  this._lexer.get();
2054
2117
  } else {
2055
- condition = this.getExpression();
2056
- if (condition === null) {
2118
+ cond = this.getExpression();
2119
+ if (cond === null) {
2057
2120
  return null;
2058
2121
  }
2059
2122
  this.expectToken(TokenType.Semicolon);
2060
2123
  }
2061
- let update;
2124
+ let upd;
2062
2125
  nextToken = this._lexer.peek();
2063
2126
  if (nextToken.type !== TokenType.RParent) {
2064
- update = this.getExpression();
2065
- if (update === null) {
2127
+ upd = this.getExpression();
2128
+ if (upd === null) {
2066
2129
  return null;
2067
2130
  }
2068
2131
  }
@@ -2070,11 +2133,11 @@ class Parser {
2070
2133
  const body = this.parseStatement();
2071
2134
  if (!body) return null;
2072
2135
  return this.createStatementNode(
2073
- "ForS",
2136
+ T_FOR_STATEMENT,
2074
2137
  {
2075
2138
  init,
2076
- condition,
2077
- update,
2139
+ cond,
2140
+ upd,
2078
2141
  body
2079
2142
  },
2080
2143
  startToken,
@@ -2088,13 +2151,13 @@ class Parser {
2088
2151
  * ;
2089
2152
  *
2090
2153
  * @param startToken Statement start token
2091
- * @param varBinding Variable binding of the for..in/of statement
2154
+ * @param varB Variable binding of the for..in/of statement
2092
2155
  * @param id ID name
2093
2156
  * @param type Is it a for..in or a for..of?
2094
2157
  */
2095
- parseForInOfStatement(startToken, varBinding, id, type) {
2096
- if (varBinding !== "none") {
2097
- if (id.startsWith("$")) {
2158
+ parseForInOfStatement(startToken, varB, idToken, type) {
2159
+ if (varB !== "none") {
2160
+ if (idToken.text.startsWith("$")) {
2098
2161
  this.reportError("W031");
2099
2162
  return null;
2100
2163
  }
@@ -2102,26 +2165,36 @@ class Parser {
2102
2165
  }
2103
2166
  this._lexer.get();
2104
2167
  this._lexer.get();
2105
- const expression = this.getExpression(true);
2168
+ const expr = this.getExpression(true);
2106
2169
  this.expectToken(TokenType.RParent, "W006");
2107
2170
  const body = this.parseStatement();
2108
2171
  if (!body) return null;
2109
- return type === "ForInS" ? this.createStatementNode(
2110
- "ForInS",
2172
+ return type === T_FOR_IN_STATEMENT ? this.createStatementNode(
2173
+ T_FOR_IN_STATEMENT,
2111
2174
  {
2112
- varBinding,
2113
- id,
2114
- expression,
2175
+ varB,
2176
+ id: {
2177
+ type: T_IDENTIFIER,
2178
+ name: idToken.text,
2179
+ startToken: idToken,
2180
+ endToken: idToken
2181
+ },
2182
+ expr,
2115
2183
  body
2116
2184
  },
2117
2185
  startToken,
2118
2186
  body.endToken
2119
2187
  ) : this.createStatementNode(
2120
- "ForOfS",
2188
+ T_FOR_OF_STATEMENT,
2121
2189
  {
2122
- varBinding,
2123
- id,
2124
- expression,
2190
+ varB,
2191
+ id: {
2192
+ type: T_IDENTIFIER,
2193
+ name: idToken.text,
2194
+ startToken: idToken,
2195
+ endToken: idToken
2196
+ },
2197
+ expr,
2125
2198
  body
2126
2199
  },
2127
2200
  startToken,
@@ -2138,16 +2211,16 @@ class Parser {
2138
2211
  parseThrowStatement() {
2139
2212
  const startToken = this._lexer.peek();
2140
2213
  this._lexer.get();
2141
- let expression;
2142
- expression = this.getExpression();
2143
- if (expression === null) return null;
2214
+ let expr;
2215
+ expr = this.getExpression();
2216
+ if (expr === null) return null;
2144
2217
  return this.createStatementNode(
2145
- "ThrowS",
2218
+ T_THROW_STATEMENT,
2146
2219
  {
2147
- expression
2220
+ expr
2148
2221
  },
2149
2222
  startToken,
2150
- expression.endToken
2223
+ expr.endToken
2151
2224
  );
2152
2225
  }
2153
2226
  /**
@@ -2169,10 +2242,10 @@ class Parser {
2169
2242
  const startToken = this._lexer.peek();
2170
2243
  let endToken = this._lexer.get();
2171
2244
  const parser = this;
2172
- const tryBlock = getBlock();
2173
- let catchBlock;
2174
- let catchVariable;
2175
- let finallyBlock;
2245
+ const tryB = getBlock();
2246
+ let catchB;
2247
+ let catchV;
2248
+ let finallyB;
2176
2249
  let nextToken = this._lexer.peek();
2177
2250
  if (nextToken.type === TokenType.Catch) {
2178
2251
  this._lexer.get();
@@ -2184,32 +2257,38 @@ class Parser {
2184
2257
  this.reportError("W003", nextToken);
2185
2258
  return null;
2186
2259
  }
2187
- catchVariable = nextToken.text;
2260
+ catchV = {
2261
+ type: T_IDENTIFIER,
2262
+ nodeId: createXmlUiTreeNodeId(),
2263
+ name: nextToken.text,
2264
+ startToken: nextToken,
2265
+ endToken: nextToken
2266
+ };
2188
2267
  this._lexer.get();
2189
2268
  this.expectToken(TokenType.RParent, "W006");
2190
2269
  }
2191
- catchBlock = getBlock();
2192
- endToken = catchBlock.endToken;
2270
+ catchB = getBlock();
2271
+ endToken = catchB.endToken;
2193
2272
  if (this._lexer.peek().type === TokenType.Finally) {
2194
2273
  this._lexer.get();
2195
- finallyBlock = getBlock();
2196
- endToken = finallyBlock.endToken;
2274
+ finallyB = getBlock();
2275
+ endToken = finallyB.endToken;
2197
2276
  }
2198
2277
  } else if (nextToken.type === TokenType.Finally) {
2199
2278
  this._lexer.get();
2200
- finallyBlock = getBlock();
2201
- endToken = finallyBlock.endToken;
2279
+ finallyB = getBlock();
2280
+ endToken = finallyB.endToken;
2202
2281
  } else {
2203
2282
  this.reportError("W013", nextToken);
2204
2283
  return null;
2205
2284
  }
2206
2285
  return this.createStatementNode(
2207
- "TryS",
2286
+ T_TRY_STATEMENT,
2208
2287
  {
2209
- tryBlock,
2210
- catchBlock,
2211
- catchVariable,
2212
- finallyBlock
2288
+ tryB,
2289
+ catchB,
2290
+ catchV,
2291
+ finallyB
2213
2292
  },
2214
2293
  startToken,
2215
2294
  endToken
@@ -2238,19 +2317,19 @@ class Parser {
2238
2317
  parseSwitchStatement() {
2239
2318
  const startToken = this._lexer.get();
2240
2319
  this.expectToken(TokenType.LParent, "W014");
2241
- const expression = this.getExpression();
2242
- if (!expression) return null;
2320
+ const expr = this.getExpression();
2321
+ if (!expr) return null;
2243
2322
  this.expectToken(TokenType.RParent, "W006");
2244
2323
  this.expectToken(TokenType.LBrace, "W012");
2245
2324
  const cases = [];
2246
2325
  let defaultCaseFound = false;
2247
2326
  while (true) {
2248
2327
  let nextToken = this._lexer.peek();
2249
- let caseExpression;
2328
+ let caseE;
2250
2329
  if (nextToken.type === TokenType.Case) {
2251
2330
  this._lexer.get();
2252
- caseExpression = this.getExpression();
2253
- if (!caseExpression) return null;
2331
+ caseE = this.getExpression();
2332
+ if (!caseE) return null;
2254
2333
  } else if (nextToken.type === TokenType.Default) {
2255
2334
  if (defaultCaseFound) {
2256
2335
  this.reportError("W016");
@@ -2265,7 +2344,7 @@ class Parser {
2265
2344
  return null;
2266
2345
  }
2267
2346
  this.expectToken(TokenType.Colon, "W008");
2268
- let statements = [];
2347
+ let stmts = [];
2269
2348
  let collected = false;
2270
2349
  while (!collected) {
2271
2350
  const stmtToken = this._lexer.peek();
@@ -2281,18 +2360,18 @@ class Parser {
2281
2360
  collected = true;
2282
2361
  break;
2283
2362
  }
2284
- statements.push(stmt);
2285
- if (stmt.type !== "EmptyS") {
2363
+ stmts.push(stmt);
2364
+ if (stmt.type !== T_EMPTY_STATEMENT) {
2286
2365
  this.skipToken(TokenType.Semicolon);
2287
2366
  }
2288
2367
  }
2289
2368
  }
2290
2369
  cases.push(
2291
2370
  this.createNode(
2292
- "SwitchC",
2371
+ T_SWITCH_CASE,
2293
2372
  {
2294
- caseExpression,
2295
- statements
2373
+ caseE,
2374
+ stmts
2296
2375
  },
2297
2376
  startToken
2298
2377
  )
@@ -2301,9 +2380,9 @@ class Parser {
2301
2380
  const endToken = this._lexer.peek();
2302
2381
  this.expectToken(TokenType.RBrace, "W004");
2303
2382
  return this.createStatementNode(
2304
- "SwitchS",
2383
+ T_SWITCH_STATEMENT,
2305
2384
  {
2306
- expression,
2385
+ expr,
2307
2386
  cases
2308
2387
  },
2309
2388
  startToken,
@@ -2347,28 +2426,28 @@ class Parser {
2347
2426
  let isValid;
2348
2427
  const args = [];
2349
2428
  switch (exprList.type) {
2350
- case "NoArgE":
2429
+ case T_NO_ARG_EXPRESSION:
2351
2430
  isValid = true;
2352
2431
  break;
2353
- case "IdE":
2432
+ case T_IDENTIFIER:
2354
2433
  isValid = (exprList.parenthesized ?? 0) <= 1;
2355
2434
  args.push(exprList);
2356
2435
  break;
2357
- case "SeqE":
2436
+ case T_SEQUENCE_EXPRESSION:
2358
2437
  isValid = exprList.parenthesized === 1;
2359
2438
  let spreadFound = false;
2360
2439
  if (isValid) {
2361
- for (const expr of exprList.expressions) {
2440
+ for (const expr of exprList.exprs) {
2362
2441
  if (spreadFound) {
2363
2442
  isValid = false;
2364
2443
  break;
2365
2444
  }
2366
2445
  switch (expr.type) {
2367
- case "IdE":
2446
+ case T_IDENTIFIER:
2368
2447
  isValid = !expr.parenthesized;
2369
2448
  args.push(expr);
2370
2449
  break;
2371
- case "OLitE": {
2450
+ case T_OBJECT_LITERAL: {
2372
2451
  isValid = !expr.parenthesized;
2373
2452
  if (isValid) {
2374
2453
  const des = this.convertToObjectDestructure(expr);
@@ -2376,7 +2455,7 @@ class Parser {
2376
2455
  }
2377
2456
  break;
2378
2457
  }
2379
- case "ALitE": {
2458
+ case T_ARRAY_LITERAL: {
2380
2459
  isValid = !expr.parenthesized;
2381
2460
  if (isValid) {
2382
2461
  const des = this.convertToArrayDestructure(expr);
@@ -2384,9 +2463,9 @@ class Parser {
2384
2463
  }
2385
2464
  break;
2386
2465
  }
2387
- case "SpreadE": {
2466
+ case T_SPREAD_EXPRESSION: {
2388
2467
  spreadFound = true;
2389
- if (expr.operand.type !== "IdE") {
2468
+ if (expr.expr.type !== T_IDENTIFIER) {
2390
2469
  isValid = false;
2391
2470
  break;
2392
2471
  }
@@ -2400,22 +2479,22 @@ class Parser {
2400
2479
  }
2401
2480
  }
2402
2481
  break;
2403
- case "OLitE":
2482
+ case T_OBJECT_LITERAL:
2404
2483
  isValid = exprList.parenthesized === 1;
2405
2484
  if (isValid) {
2406
2485
  const des = this.convertToObjectDestructure(exprList);
2407
2486
  if (des) args.push(des);
2408
2487
  }
2409
2488
  break;
2410
- case "ALitE":
2489
+ case T_ARRAY_LITERAL:
2411
2490
  isValid = exprList.parenthesized === 1;
2412
2491
  if (isValid) {
2413
2492
  const des = this.convertToArrayDestructure(exprList);
2414
2493
  if (des) args.push(des);
2415
2494
  }
2416
2495
  break;
2417
- case "SpreadE":
2418
- if (exprList.operand.type !== "IdE") {
2496
+ case T_SPREAD_EXPRESSION:
2497
+ if (exprList.expr.type !== T_IDENTIFIER) {
2419
2498
  isValid = false;
2420
2499
  break;
2421
2500
  }
@@ -2433,114 +2512,17 @@ class Parser {
2433
2512
  this.reportError("W012", this._lexer.peek());
2434
2513
  return null;
2435
2514
  }
2436
- const body = this.parseBlockStatement();
2437
- if (!body) return null;
2515
+ const stmt = this.parseBlockStatement();
2516
+ if (!stmt) return null;
2438
2517
  return this.createStatementNode(
2439
- "FuncD",
2518
+ T_FUNCTION_DECLARATION,
2440
2519
  {
2441
- name: functionName,
2520
+ id: { type: T_IDENTIFIER, name: functionName },
2442
2521
  args,
2443
- statement: body
2444
- },
2445
- startToken,
2446
- body.endToken
2447
- );
2448
- }
2449
- /**
2450
- * Parses an export statement
2451
- *
2452
- * exportStatement
2453
- * : "export" (constStatement | functionDeclaration)
2454
- * ;
2455
- */
2456
- parseExport() {
2457
- this._lexer.get();
2458
- const nextToken = this._lexer.peek();
2459
- if (nextToken.type === TokenType.Const) {
2460
- if (this._statementLevel > 1) {
2461
- this.reportError("W030", nextToken);
2462
- return null;
2463
- }
2464
- const constStmt = this.parseConstStatement();
2465
- return constStmt === null ? null : { ...constStmt, isExported: true };
2466
- } else if (nextToken.type === TokenType.Function) {
2467
- if (this._statementLevel > 1) {
2468
- this.reportError("W030", nextToken);
2469
- return null;
2470
- }
2471
- const funcDecl = this.parseFunctionDeclaration();
2472
- return funcDecl === null ? null : { ...funcDecl, isExported: true };
2473
- }
2474
- this.reportError("W024", nextToken);
2475
- return null;
2476
- }
2477
- /**
2478
- * Parse an import declaration
2479
- *
2480
- * importDeclaration
2481
- * : "import" "{" importItem ("," importItem)* [ "," ] "}" from module
2482
- * ;
2483
- *
2484
- * importItem
2485
- * : identifier [ "as" identifier ]
2486
- * ;
2487
- */
2488
- parseImport() {
2489
- const startToken = this._lexer.get();
2490
- this.expectToken(TokenType.LBrace, "W012");
2491
- const imports = {};
2492
- let nextToken = this._lexer.peek();
2493
- while (nextToken.type !== TokenType.RBrace) {
2494
- if (nextToken.type !== TokenType.Identifier) {
2495
- this.reportError("W003", nextToken);
2496
- return null;
2497
- }
2498
- const id = nextToken.text;
2499
- this._lexer.get();
2500
- nextToken = this._lexer.peek();
2501
- if (nextToken.type === TokenType.As) {
2502
- this._lexer.get();
2503
- nextToken = this._lexer.peek();
2504
- if (nextToken.type !== TokenType.Identifier) {
2505
- this.reportError("W003", nextToken);
2506
- return null;
2507
- }
2508
- if (imports[nextToken.text]) {
2509
- this.reportError("W019", nextToken, nextToken.text);
2510
- return null;
2511
- }
2512
- imports[nextToken.text] = id;
2513
- this._lexer.get();
2514
- } else {
2515
- if (imports[id]) {
2516
- this.reportError("W019", nextToken, id);
2517
- return null;
2518
- }
2519
- imports[id] = id;
2520
- }
2521
- nextToken = this._lexer.peek();
2522
- if (nextToken.type === TokenType.Comma) {
2523
- this._lexer.get();
2524
- nextToken = this._lexer.peek();
2525
- }
2526
- }
2527
- this._lexer.get();
2528
- this.expectToken(TokenType.From, "W025");
2529
- const moduleToken = this._lexer.peek();
2530
- if (moduleToken.type !== TokenType.StringLiteral) {
2531
- this.reportError("W026", moduleToken);
2532
- return null;
2533
- }
2534
- this._lexer.get();
2535
- const literal = this.parseStringLiteral(moduleToken);
2536
- return this.createStatementNode(
2537
- "ImportD",
2538
- {
2539
- imports,
2540
- moduleFile: literal.value
2522
+ stmt
2541
2523
  },
2542
2524
  startToken,
2543
- moduleToken
2525
+ stmt.endToken
2544
2526
  );
2545
2527
  }
2546
2528
  // ==========================================================================
@@ -2567,16 +2549,16 @@ class Parser {
2567
2549
  return null;
2568
2550
  }
2569
2551
  endToken = leftExpr.endToken;
2570
- const expressions = [];
2552
+ const exprs = [];
2571
2553
  let loose = false;
2572
2554
  if (this._lexer.peek().type === TokenType.Comma) {
2573
- expressions.push(leftExpr);
2555
+ exprs.push(leftExpr);
2574
2556
  while (this.skipToken(TokenType.Comma)) {
2575
2557
  if (this._lexer.peek().type === TokenType.Comma) {
2576
2558
  loose = true;
2577
2559
  endToken = this._lexer.peek();
2578
- expressions.push(
2579
- this.createExpressionNode("NoArgE", {}, endToken, endToken)
2560
+ exprs.push(
2561
+ this.createExpressionNode(T_NO_ARG_EXPRESSION, {}, endToken, endToken)
2580
2562
  );
2581
2563
  } else {
2582
2564
  const nextExpr = this.parseCondOrSpreadOrAsgnOrArrowExpr();
@@ -2584,17 +2566,17 @@ class Parser {
2584
2566
  break;
2585
2567
  }
2586
2568
  endToken = nextExpr.endToken;
2587
- expressions.push(nextExpr);
2569
+ exprs.push(nextExpr);
2588
2570
  }
2589
2571
  }
2590
2572
  }
2591
- if (!expressions.length) {
2573
+ if (!exprs.length) {
2592
2574
  return leftExpr;
2593
2575
  }
2594
2576
  leftExpr = this.createExpressionNode(
2595
- "SeqE",
2577
+ T_SEQUENCE_EXPRESSION,
2596
2578
  {
2597
- expressions,
2579
+ exprs,
2598
2580
  loose
2599
2581
  },
2600
2582
  start,
@@ -2618,9 +2600,9 @@ class Parser {
2618
2600
  this._lexer.get();
2619
2601
  const spreadOperand = this.parseNullCoalescingExpr();
2620
2602
  return spreadOperand ? this.createExpressionNode(
2621
- "SpreadE",
2603
+ T_SPREAD_EXPRESSION,
2622
2604
  {
2623
- operand: spreadOperand
2605
+ expr: spreadOperand
2624
2606
  },
2625
2607
  startToken,
2626
2608
  spreadOperand.endToken
@@ -2629,11 +2611,11 @@ class Parser {
2629
2611
  if (startToken.type === TokenType.Function) {
2630
2612
  const funcDecl = this.parseFunctionDeclaration(true);
2631
2613
  return funcDecl ? this.createExpressionNode(
2632
- "ArrowE",
2614
+ T_ARROW_EXPRESSION,
2633
2615
  {
2634
- name: funcDecl.name,
2616
+ name: funcDecl.id.name,
2635
2617
  args: funcDecl.args,
2636
- statement: funcDecl.statement
2618
+ statement: funcDecl.stmt
2637
2619
  },
2638
2620
  startToken,
2639
2621
  funcDecl.endToken
@@ -2653,11 +2635,11 @@ class Parser {
2653
2635
  this.expectToken(TokenType.Colon);
2654
2636
  const falseExpr = this.getExpression(false);
2655
2637
  return this.createExpressionNode(
2656
- "CondE",
2638
+ T_CONDITIONAL_EXPRESSION,
2657
2639
  {
2658
- condition: otherExpr,
2659
- consequent: trueExpr,
2660
- alternate: falseExpr
2640
+ cond: otherExpr,
2641
+ thenE: trueExpr,
2642
+ elseE: falseExpr
2661
2643
  },
2662
2644
  startToken,
2663
2645
  falseExpr.endToken
@@ -2665,16 +2647,16 @@ class Parser {
2665
2647
  }
2666
2648
  if (tokenTraits[nextToken.type].isAssignment) {
2667
2649
  this._lexer.get();
2668
- const operand = this.getExpression();
2669
- return operand ? this.createExpressionNode(
2670
- "AsgnE",
2650
+ const expr = this.getExpression();
2651
+ return expr ? this.createExpressionNode(
2652
+ T_ASSIGNMENT_EXPRESSION,
2671
2653
  {
2672
2654
  leftValue: otherExpr,
2673
- operator: nextToken.text,
2674
- operand
2655
+ op: nextToken.text,
2656
+ expr
2675
2657
  },
2676
2658
  startToken,
2677
- operand.endToken
2659
+ expr.endToken
2678
2660
  ) : null;
2679
2661
  }
2680
2662
  return otherExpr;
@@ -2688,28 +2670,28 @@ class Parser {
2688
2670
  let isValid;
2689
2671
  const args = [];
2690
2672
  switch (left.type) {
2691
- case "NoArgE":
2673
+ case T_NO_ARG_EXPRESSION:
2692
2674
  isValid = true;
2693
2675
  break;
2694
- case "IdE":
2676
+ case T_IDENTIFIER:
2695
2677
  isValid = (left.parenthesized ?? 0) <= 1;
2696
2678
  args.push(left);
2697
2679
  break;
2698
- case "SeqE":
2680
+ case T_SEQUENCE_EXPRESSION:
2699
2681
  isValid = left.parenthesized === 1;
2700
2682
  let spreadFound = false;
2701
2683
  if (isValid) {
2702
- for (const expr of left.expressions) {
2684
+ for (const expr of left.exprs) {
2703
2685
  if (spreadFound) {
2704
2686
  isValid = false;
2705
2687
  break;
2706
2688
  }
2707
2689
  switch (expr.type) {
2708
- case "IdE":
2690
+ case T_IDENTIFIER:
2709
2691
  isValid = !expr.parenthesized;
2710
2692
  args.push(expr);
2711
2693
  break;
2712
- case "OLitE": {
2694
+ case T_OBJECT_LITERAL: {
2713
2695
  isValid = !expr.parenthesized;
2714
2696
  if (isValid) {
2715
2697
  const des = this.convertToObjectDestructure(expr);
@@ -2717,7 +2699,7 @@ class Parser {
2717
2699
  }
2718
2700
  break;
2719
2701
  }
2720
- case "ALitE": {
2702
+ case T_ARRAY_LITERAL: {
2721
2703
  isValid = !expr.parenthesized;
2722
2704
  if (isValid) {
2723
2705
  const des = this.convertToArrayDestructure(expr);
@@ -2725,9 +2707,9 @@ class Parser {
2725
2707
  }
2726
2708
  break;
2727
2709
  }
2728
- case "SpreadE": {
2710
+ case T_SPREAD_EXPRESSION: {
2729
2711
  spreadFound = true;
2730
- if (expr.operand.type !== "IdE") {
2712
+ if (expr.expr.type !== T_IDENTIFIER) {
2731
2713
  isValid = false;
2732
2714
  break;
2733
2715
  }
@@ -2741,22 +2723,22 @@ class Parser {
2741
2723
  }
2742
2724
  }
2743
2725
  break;
2744
- case "OLitE":
2726
+ case T_OBJECT_LITERAL:
2745
2727
  isValid = left.parenthesized === 1;
2746
2728
  if (isValid) {
2747
2729
  const des = this.convertToObjectDestructure(left);
2748
2730
  if (des) args.push(des);
2749
2731
  }
2750
2732
  break;
2751
- case "ALitE":
2733
+ case T_ARRAY_LITERAL:
2752
2734
  isValid = left.parenthesized === 1;
2753
2735
  if (isValid) {
2754
2736
  const des = this.convertToArrayDestructure(left);
2755
2737
  if (des) args.push(des);
2756
2738
  }
2757
2739
  break;
2758
- case "SpreadE":
2759
- isValid = left.operand.type === "IdE";
2740
+ case T_SPREAD_EXPRESSION:
2741
+ isValid = left.expr.type === T_IDENTIFIER;
2760
2742
  if (isValid) {
2761
2743
  args.push(left);
2762
2744
  }
@@ -2771,7 +2753,7 @@ class Parser {
2771
2753
  this._lexer.get();
2772
2754
  const statement = this.parseStatement(false);
2773
2755
  return statement ? this.createExpressionNode(
2774
- "ArrowE",
2756
+ T_ARROW_EXPRESSION,
2775
2757
  {
2776
2758
  args,
2777
2759
  statement
@@ -2799,9 +2781,9 @@ class Parser {
2799
2781
  }
2800
2782
  let endToken = rightExpr.endToken;
2801
2783
  leftExpr = this.createExpressionNode(
2802
- "BinaryE",
2784
+ T_BINARY_EXPRESSION,
2803
2785
  {
2804
- operator: "??",
2786
+ op: "??",
2805
2787
  left: leftExpr,
2806
2788
  right: rightExpr
2807
2789
  },
@@ -2830,9 +2812,9 @@ class Parser {
2830
2812
  }
2831
2813
  let endToken = rightExpr.endToken;
2832
2814
  leftExpr = this.createExpressionNode(
2833
- "BinaryE",
2815
+ T_BINARY_EXPRESSION,
2834
2816
  {
2835
- operator: "||",
2817
+ op: "||",
2836
2818
  left: leftExpr,
2837
2819
  right: rightExpr
2838
2820
  },
@@ -2861,9 +2843,9 @@ class Parser {
2861
2843
  }
2862
2844
  let endToken = rightExpr.endToken;
2863
2845
  leftExpr = this.createExpressionNode(
2864
- "BinaryE",
2846
+ T_BINARY_EXPRESSION,
2865
2847
  {
2866
- operator: "&&",
2848
+ op: "&&",
2867
2849
  left: leftExpr,
2868
2850
  right: rightExpr
2869
2851
  },
@@ -2892,9 +2874,9 @@ class Parser {
2892
2874
  }
2893
2875
  let endToken = rightExpr.endToken;
2894
2876
  leftExpr = this.createExpressionNode(
2895
- "BinaryE",
2877
+ T_BINARY_EXPRESSION,
2896
2878
  {
2897
- operator: "|",
2879
+ op: "|",
2898
2880
  left: leftExpr,
2899
2881
  right: rightExpr
2900
2882
  },
@@ -2923,9 +2905,9 @@ class Parser {
2923
2905
  }
2924
2906
  let endToken = rightExpr.endToken;
2925
2907
  leftExpr = this.createExpressionNode(
2926
- "BinaryE",
2908
+ T_BINARY_EXPRESSION,
2927
2909
  {
2928
- operator: "^",
2910
+ op: "^",
2929
2911
  left: leftExpr,
2930
2912
  right: rightExpr
2931
2913
  },
@@ -2954,9 +2936,9 @@ class Parser {
2954
2936
  }
2955
2937
  let endToken = rightExpr.endToken;
2956
2938
  leftExpr = this.createExpressionNode(
2957
- "BinaryE",
2939
+ T_BINARY_EXPRESSION,
2958
2940
  {
2959
- operator: "&",
2941
+ op: "&",
2960
2942
  left: leftExpr,
2961
2943
  right: rightExpr
2962
2944
  },
@@ -2991,10 +2973,9 @@ class Parser {
2991
2973
  }
2992
2974
  let endToken = rightExpr.endToken;
2993
2975
  leftExpr = this.createExpressionNode(
2994
- "BinaryE",
2976
+ T_BINARY_EXPRESSION,
2995
2977
  {
2996
- type: "BinaryE",
2997
- operator: opType.text,
2978
+ op: opType.text,
2998
2979
  left: leftExpr,
2999
2980
  right: rightExpr
3000
2981
  },
@@ -3030,9 +3011,9 @@ class Parser {
3030
3011
  }
3031
3012
  let endToken = rightExpr.endToken;
3032
3013
  leftExpr = this.createExpressionNode(
3033
- "BinaryE",
3014
+ T_BINARY_EXPRESSION,
3034
3015
  {
3035
- operator: opType.text,
3016
+ op: opType.text,
3036
3017
  left: leftExpr,
3037
3018
  right: rightExpr
3038
3019
  },
@@ -3066,9 +3047,9 @@ class Parser {
3066
3047
  }
3067
3048
  let endToken = rightExpr.endToken;
3068
3049
  leftExpr = this.createExpressionNode(
3069
- "BinaryE",
3050
+ T_BINARY_EXPRESSION,
3070
3051
  {
3071
- operator: opType.text,
3052
+ op: opType.text,
3072
3053
  left: leftExpr,
3073
3054
  right: rightExpr
3074
3055
  },
@@ -3098,9 +3079,9 @@ class Parser {
3098
3079
  }
3099
3080
  let endToken = rightExpr.endToken;
3100
3081
  leftExpr = this.createExpressionNode(
3101
- "BinaryE",
3082
+ T_BINARY_EXPRESSION,
3102
3083
  {
3103
- operator: opType.text,
3084
+ op: opType.text,
3104
3085
  left: leftExpr,
3105
3086
  right: rightExpr
3106
3087
  },
@@ -3130,9 +3111,9 @@ class Parser {
3130
3111
  }
3131
3112
  let endToken = rightExpr.endToken;
3132
3113
  leftExpr = this.createExpressionNode(
3133
- "BinaryE",
3114
+ T_BINARY_EXPRESSION,
3134
3115
  {
3135
- operator: opType.text,
3116
+ op: opType.text,
3136
3117
  left: leftExpr,
3137
3118
  right: rightExpr
3138
3119
  },
@@ -3164,9 +3145,9 @@ class Parser {
3164
3145
  let endToken = rightExpr.endToken;
3165
3146
  if (count === 0) {
3166
3147
  leftExpr = this.createExpressionNode(
3167
- "BinaryE",
3148
+ T_BINARY_EXPRESSION,
3168
3149
  {
3169
- operator: opType.text,
3150
+ op: opType.text,
3170
3151
  left: leftExpr,
3171
3152
  right: rightExpr
3172
3153
  },
@@ -3176,13 +3157,13 @@ class Parser {
3176
3157
  } else {
3177
3158
  const prevLeft = leftExpr;
3178
3159
  leftExpr = this.createExpressionNode(
3179
- "BinaryE",
3160
+ T_BINARY_EXPRESSION,
3180
3161
  {
3181
- operator: opType.text,
3162
+ op: opType.text,
3182
3163
  left: prevLeft.left,
3183
3164
  right: {
3184
- type: "BinaryE",
3185
- operator: opType.text,
3165
+ type: T_BINARY_EXPRESSION,
3166
+ op: opType.text,
3186
3167
  left: prevLeft.right,
3187
3168
  right: rightExpr
3188
3169
  }
@@ -3210,10 +3191,10 @@ class Parser {
3210
3191
  return null;
3211
3192
  }
3212
3193
  return this.createExpressionNode(
3213
- "UnaryE",
3194
+ T_UNARY_EXPRESSION,
3214
3195
  {
3215
- operator: startToken.text,
3216
- operand: unaryOperand
3196
+ op: startToken.text,
3197
+ expr: unaryOperand
3217
3198
  },
3218
3199
  startToken,
3219
3200
  unaryOperand.endToken
@@ -3226,10 +3207,10 @@ class Parser {
3226
3207
  return null;
3227
3208
  }
3228
3209
  return this.createExpressionNode(
3229
- "PrefE",
3210
+ T_PREFIX_OP_EXPRESSION,
3230
3211
  {
3231
- operator: startToken.text,
3232
- operand: prefixOperand
3212
+ op: startToken.text,
3213
+ expr: prefixOperand
3233
3214
  },
3234
3215
  startToken,
3235
3216
  prefixOperand.endToken
@@ -3264,14 +3245,14 @@ class Parser {
3264
3245
  this.reportError("W001");
3265
3246
  return null;
3266
3247
  }
3267
- args = expr.type === "SeqE" ? expr.expressions : [expr];
3248
+ args = expr.type === T_SEQUENCE_EXPRESSION ? expr.exprs : [expr];
3268
3249
  }
3269
3250
  const endToken2 = this._lexer.peek();
3270
3251
  this.expectToken(TokenType.RParent, "W006");
3271
3252
  primary = this.createExpressionNode(
3272
- "InvokeE",
3253
+ T_FUNCTION_INVOCATION_EXPRESSION,
3273
3254
  {
3274
- object: primary,
3255
+ obj: primary,
3275
3256
  arguments: args
3276
3257
  },
3277
3258
  startToken,
@@ -3289,11 +3270,11 @@ class Parser {
3289
3270
  return null;
3290
3271
  }
3291
3272
  primary = this.createExpressionNode(
3292
- "MembE",
3273
+ T_MEMBER_ACCESS_EXPRESSION,
3293
3274
  {
3294
- object: primary,
3275
+ obj: primary,
3295
3276
  member: member.text,
3296
- isOptional: currentStart.type === TokenType.OptionalChaining
3277
+ opt: currentStart.type === TokenType.OptionalChaining
3297
3278
  },
3298
3279
  startToken,
3299
3280
  member
@@ -3308,9 +3289,9 @@ class Parser {
3308
3289
  const endToken = this._lexer.peek();
3309
3290
  this.expectToken(TokenType.RSquare, "W005");
3310
3291
  primary = this.createExpressionNode(
3311
- "CMembE",
3292
+ T_CALCULATED_MEMBER_ACCESS_EXPRESSION,
3312
3293
  {
3313
- object: primary,
3294
+ obj: primary,
3314
3295
  member: memberExpr
3315
3296
  },
3316
3297
  startToken,
@@ -3326,10 +3307,10 @@ class Parser {
3326
3307
  if (nextToken.type === TokenType.IncOp || nextToken.type === TokenType.DecOp) {
3327
3308
  this._lexer.get();
3328
3309
  return this.createExpressionNode(
3329
- "PostfE",
3310
+ T_POSTFIX_OP_EXPRESSION,
3330
3311
  {
3331
- operator: nextToken.text,
3332
- operand: primary
3312
+ op: nextToken.text,
3313
+ expr: primary
3333
3314
  },
3334
3315
  startToken,
3335
3316
  nextToken
@@ -3353,30 +3334,29 @@ class Parser {
3353
3334
  this._lexer.get();
3354
3335
  if (this._lexer.peek().type === TokenType.RParent) {
3355
3336
  const endToken2 = this._lexer.get();
3356
- return this.createExpressionNode("NoArgE", {}, start, endToken2);
3337
+ return this.createExpressionNode(
3338
+ T_NO_ARG_EXPRESSION,
3339
+ {},
3340
+ start,
3341
+ endToken2
3342
+ );
3357
3343
  }
3358
- const parenthesizedExpr = this.parseExpr();
3344
+ let parenthesizedExpr = this.parseExpr();
3359
3345
  if (!parenthesizedExpr) {
3360
3346
  return null;
3361
3347
  }
3362
3348
  const endToken = this._lexer.peek();
3363
3349
  this.expectToken(TokenType.RParent, "W006");
3364
- parenthesizedExpr.parenthesized ?? (parenthesizedExpr.parenthesized = 0);
3365
- parenthesizedExpr.parenthesized++;
3366
- parenthesizedExpr.startToken = start;
3367
- parenthesizedExpr.startPosition = start.location.startPosition;
3368
- parenthesizedExpr.startLine = start.location.startLine;
3369
- parenthesizedExpr.startColumn = start.location.startColumn;
3370
- parenthesizedExpr.endToken = endToken;
3371
- parenthesizedExpr.endPosition = endToken.location.endPosition;
3372
- parenthesizedExpr.endLine = endToken.location.endLine;
3373
- parenthesizedExpr.endColumn = endToken.location.endColumn;
3374
- parenthesizedExpr.source = this.getSource(start, endToken);
3375
- return parenthesizedExpr;
3350
+ return {
3351
+ ...parenthesizedExpr,
3352
+ parenthesized: (parenthesizedExpr.parenthesized ?? 0) + 1,
3353
+ startToken: start,
3354
+ endToken
3355
+ };
3376
3356
  case TokenType.Identifier: {
3377
3357
  const idToken = this._lexer.get();
3378
3358
  return this.createExpressionNode(
3379
- "IdE",
3359
+ T_IDENTIFIER,
3380
3360
  {
3381
3361
  name: idToken.text
3382
3362
  },
@@ -3392,7 +3372,7 @@ class Parser {
3392
3372
  return null;
3393
3373
  }
3394
3374
  return this.createExpressionNode(
3395
- "IdE",
3375
+ T_IDENTIFIER,
3396
3376
  {
3397
3377
  name: idToken.text,
3398
3378
  isGlobal: true
@@ -3407,7 +3387,7 @@ class Parser {
3407
3387
  case TokenType.True:
3408
3388
  this._lexer.get();
3409
3389
  return this.createExpressionNode(
3410
- "LitE",
3390
+ T_LITERAL,
3411
3391
  {
3412
3392
  value: start.type === TokenType.True
3413
3393
  },
@@ -3432,7 +3412,7 @@ class Parser {
3432
3412
  case TokenType.Infinity:
3433
3413
  this._lexer.get();
3434
3414
  return this.createExpressionNode(
3435
- "LitE",
3415
+ T_LITERAL,
3436
3416
  {
3437
3417
  value: Infinity
3438
3418
  },
@@ -3442,7 +3422,7 @@ class Parser {
3442
3422
  case TokenType.NaN:
3443
3423
  this._lexer.get();
3444
3424
  return this.createExpressionNode(
3445
- "LitE",
3425
+ T_LITERAL,
3446
3426
  {
3447
3427
  value: NaN
3448
3428
  },
@@ -3452,7 +3432,7 @@ class Parser {
3452
3432
  case TokenType.Null:
3453
3433
  this._lexer.get();
3454
3434
  return this.createExpressionNode(
3455
- "LitE",
3435
+ T_LITERAL,
3456
3436
  {
3457
3437
  value: null
3458
3438
  },
@@ -3462,7 +3442,7 @@ class Parser {
3462
3442
  case TokenType.Undefined:
3463
3443
  this._lexer.get();
3464
3444
  return this.createExpressionNode(
3465
- "LitE",
3445
+ T_LITERAL,
3466
3446
  {
3467
3447
  value: void 0
3468
3448
  },
@@ -3505,7 +3485,7 @@ class Parser {
3505
3485
  }
3506
3486
  const endToken = this._lexer.get();
3507
3487
  return this.createExpressionNode(
3508
- "TempLitE",
3488
+ T_TEMPLATE_LITERAL_EXPRESSION,
3509
3489
  { segments },
3510
3490
  startToken,
3511
3491
  endToken
@@ -3520,13 +3500,13 @@ class Parser {
3520
3500
  if (this._lexer.peek().type !== TokenType.RSquare) {
3521
3501
  const expr = this.getExpression();
3522
3502
  if (expr) {
3523
- expressions = expr.type === "SeqE" ? expr.expressions : [expr];
3503
+ expressions = expr.type === T_SEQUENCE_EXPRESSION ? expr.exprs : [expr];
3524
3504
  }
3525
3505
  }
3526
3506
  const endToken = this._lexer.peek();
3527
3507
  this.expectToken(TokenType.RSquare);
3528
3508
  return this.createExpressionNode(
3529
- "ALitE",
3509
+ T_ARRAY_LITERAL,
3530
3510
  {
3531
3511
  items: expressions
3532
3512
  },
@@ -3554,9 +3534,9 @@ class Parser {
3554
3534
  }
3555
3535
  this.expectToken(TokenType.RSquare, "W005");
3556
3536
  nameExpr = this.createExpressionNode(
3557
- "SeqE",
3537
+ T_SEQUENCE_EXPRESSION,
3558
3538
  {
3559
- expressions: [nameExpr]
3539
+ exprs: [nameExpr]
3560
3540
  },
3561
3541
  start
3562
3542
  );
@@ -3565,7 +3545,7 @@ class Parser {
3565
3545
  if (!nameExpr) {
3566
3546
  return null;
3567
3547
  }
3568
- if (nameExpr.type !== "IdE" && nameExpr.type !== "LitE" && nameExpr.type !== "SpreadE") {
3548
+ if (nameExpr.type !== T_IDENTIFIER && nameExpr.type !== T_LITERAL && nameExpr.type !== T_SPREAD_EXPRESSION) {
3569
3549
  this.reportError("W007");
3570
3550
  return null;
3571
3551
  }
@@ -3575,16 +3555,9 @@ class Parser {
3575
3555
  }
3576
3556
  } else if (traits.keywordLike) {
3577
3557
  nameExpr = {
3578
- type: "IdE",
3558
+ type: T_IDENTIFIER,
3559
+ nodeId: createXmlUiTreeNodeId(),
3579
3560
  name: nextToken.text,
3580
- value: void 0,
3581
- startPosition: nextToken.location.startPosition,
3582
- startLine: nextToken.location.startLine,
3583
- startColumn: nextToken.location.startColumn,
3584
- endPosition: nextToken.location.endPosition,
3585
- endLine: nextToken.location.endLine,
3586
- endColumn: nextToken.location.endColumn,
3587
- source: nextToken.text,
3588
3561
  startToken: nextToken,
3589
3562
  endToken: nextToken
3590
3563
  };
@@ -3594,10 +3567,10 @@ class Parser {
3594
3567
  return null;
3595
3568
  }
3596
3569
  const nameType = nameExpr.type;
3597
- if (nameType === "SpreadE") {
3570
+ if (nameType === T_SPREAD_EXPRESSION) {
3598
3571
  props.push(nameExpr);
3599
3572
  } else {
3600
- if (nameType === "LitE") {
3573
+ if (nameType === T_LITERAL) {
3601
3574
  const val = nameExpr.value;
3602
3575
  if (typeof val !== "number" && typeof val !== "string") {
3603
3576
  this.expectToken(TokenType.RBrace, "W007");
@@ -3605,7 +3578,7 @@ class Parser {
3605
3578
  }
3606
3579
  }
3607
3580
  let valueExpr = null;
3608
- if (nameType === "IdE") {
3581
+ if (nameType === T_IDENTIFIER) {
3609
3582
  const nameFollowerToken = this._lexer.peek();
3610
3583
  if (nameFollowerToken.type === TokenType.Comma || nameFollowerToken.type === TokenType.RBrace) {
3611
3584
  valueExpr = { ...nameExpr };
@@ -3633,7 +3606,7 @@ class Parser {
3633
3606
  const endToken = this._lexer.peek();
3634
3607
  this.expectToken(TokenType.RBrace, "W004");
3635
3608
  return this.createExpressionNode(
3636
- "OLitE",
3609
+ T_OBJECT_LITERAL,
3637
3610
  {
3638
3611
  props
3639
3612
  },
@@ -3646,7 +3619,7 @@ class Parser {
3646
3619
  const result = this._lexer.getRegEx();
3647
3620
  if (result.success) {
3648
3621
  return this.createExpressionNode(
3649
- "LitE",
3622
+ T_LITERAL,
3650
3623
  {
3651
3624
  value: new RegExp(result.pattern, result.flags)
3652
3625
  },
@@ -3728,10 +3701,7 @@ class Parser {
3728
3701
  }
3729
3702
  this._parseErrors.push({
3730
3703
  code: errorCode,
3731
- text: errorText,
3732
- line: token.location.startLine,
3733
- column: token.location.startColumn,
3734
- position: token.location.startPosition
3704
+ text: errorText
3735
3705
  });
3736
3706
  throw new ParserError$1(errorText, errorCode);
3737
3707
  function replace(input, placeholder, replacement) {
@@ -3749,21 +3719,14 @@ class Parser {
3749
3719
  * @param endToken The token that ends the expression
3750
3720
  * @param source Expression source code to store to the node
3751
3721
  */
3752
- createNode(type, stump, startToken, endToken, source) {
3722
+ createNode(type, stump, startToken, endToken) {
3753
3723
  if (!endToken) {
3754
3724
  endToken = this._lexer.peek();
3755
3725
  }
3756
- const startPosition = startToken.location.startPosition;
3757
- const endPosition = endToken.location.startPosition;
3758
3726
  return Object.assign({}, stump, {
3759
3727
  type,
3760
- startPosition,
3761
- endPosition,
3762
- startLine: startToken.location.startLine,
3763
- startColumn: startToken.location.startColumn,
3764
- endLine: endToken.location.endLine,
3765
- endColumn: endToken.location.endColumn,
3766
- source: source ?? this.getSource(startToken, endToken)
3728
+ startToken,
3729
+ endToken
3767
3730
  });
3768
3731
  }
3769
3732
  /**
@@ -3774,24 +3737,16 @@ class Parser {
3774
3737
  * @param endToken The token that ends the expression
3775
3738
  * @param source Expression source code to store to the node
3776
3739
  */
3777
- createExpressionNode(type, stump = {}, startToken, endToken, source) {
3740
+ createExpressionNode(type, stump = {}, startToken, endToken) {
3778
3741
  if (!endToken) {
3779
3742
  endToken = this._lexer.peek();
3780
3743
  }
3781
3744
  if (!startToken) {
3782
3745
  startToken = endToken;
3783
3746
  }
3784
- const startPosition = startToken.location.startPosition;
3785
- const endPosition = endToken.location.endPosition;
3786
3747
  return Object.assign({}, stump, {
3787
3748
  type,
3788
- startPosition,
3789
- endPosition,
3790
- startLine: startToken.location.startLine,
3791
- startColumn: startToken.location.startColumn,
3792
- endLine: endToken.location.endLine,
3793
- endColumn: endToken.location.endColumn,
3794
- source: source ?? this.getSource(startToken, endToken),
3749
+ nodeId: createXmlUiTreeNodeId(),
3795
3750
  startToken,
3796
3751
  endToken
3797
3752
  });
@@ -3804,35 +3759,13 @@ class Parser {
3804
3759
  * @param endToken The token that ends the statement
3805
3760
  */
3806
3761
  createStatementNode(type, stump, startToken, endToken) {
3807
- var _a, _b, _c, _d, _e;
3808
- const startPosition = (_a = startToken == null ? void 0 : startToken.location) == null ? void 0 : _a.startPosition;
3809
- const currentToken = this._lexer.peek();
3810
- const endPosition = endToken ? endToken.location.endPosition : currentToken.type === TokenType.Eof ? currentToken.location.startPosition + 1 : currentToken.location.startPosition;
3811
3762
  return Object.assign({}, stump, {
3812
3763
  type,
3813
- startPosition,
3814
- endPosition,
3815
- startLine: (_b = startToken == null ? void 0 : startToken.location) == null ? void 0 : _b.startLine,
3816
- startColumn: (_c = startToken == null ? void 0 : startToken.location) == null ? void 0 : _c.startColumn,
3817
- endLine: endToken ? endToken.location.endLine : (_d = startToken == null ? void 0 : startToken.location) == null ? void 0 : _d.endLine,
3818
- endColumn: endToken ? endToken.location.endColumn : (_e = startToken == null ? void 0 : startToken.location) == null ? void 0 : _e.endColumn,
3819
- source: this.source && startPosition !== void 0 && endPosition !== void 0 ? this.source.substring(startPosition, endPosition) : void 0,
3764
+ nodeId: createXmlUiTreeNodeId(),
3820
3765
  startToken,
3821
3766
  endToken
3822
3767
  });
3823
3768
  }
3824
- /**
3825
- * Gets the source code for the specified token range
3826
- * @param start Start token
3827
- * @param end Optional end token
3828
- * @returns The source code for the token range
3829
- */
3830
- getSource(start, end) {
3831
- return this.source.substring(
3832
- start.location.startPosition,
3833
- end.type === TokenType.Eof ? end.location.startPosition : end.location.endPosition
3834
- );
3835
- }
3836
3769
  /**
3837
3770
  * Parses a binary literal
3838
3771
  * @param token Literal token
@@ -3846,7 +3779,7 @@ class Parser {
3846
3779
  value = parseInt(token.text.substring(2).replace(/[_']/g, ""), 2);
3847
3780
  }
3848
3781
  return this.createExpressionNode(
3849
- "LitE",
3782
+ T_LITERAL,
3850
3783
  {
3851
3784
  value
3852
3785
  },
@@ -3867,7 +3800,7 @@ class Parser {
3867
3800
  value = parseInt(token.text.replace(/[_']/g, ""), 10);
3868
3801
  }
3869
3802
  return this.createExpressionNode(
3870
- "LitE",
3803
+ T_LITERAL,
3871
3804
  {
3872
3805
  value
3873
3806
  },
@@ -3888,7 +3821,7 @@ class Parser {
3888
3821
  value = parseInt(token.text.substring(2).replace(/[_']/g, ""), 16);
3889
3822
  }
3890
3823
  return this.createExpressionNode(
3891
- "LitE",
3824
+ T_LITERAL,
3892
3825
  {
3893
3826
  value
3894
3827
  },
@@ -3903,7 +3836,7 @@ class Parser {
3903
3836
  parseRealLiteral(token) {
3904
3837
  let value = parseFloat(token.text.replace(/[_']/g, ""));
3905
3838
  return this.createExpressionNode(
3906
- "LitE",
3839
+ T_LITERAL,
3907
3840
  {
3908
3841
  value
3909
3842
  },
@@ -4123,7 +4056,7 @@ class Parser {
4123
4056
  break;
4124
4057
  }
4125
4058
  return this.createExpressionNode(
4126
- "LitE",
4059
+ T_LITERAL,
4127
4060
  {
4128
4061
  value: result
4129
4062
  },
@@ -4136,45 +4069,45 @@ class Parser {
4136
4069
  }
4137
4070
  convertToArrayDestructure(seq) {
4138
4071
  var _a;
4139
- const items = seq.type === "SeqE" ? seq.expressions : seq.items;
4072
+ const items = seq.type === T_SEQUENCE_EXPRESSION ? seq.exprs : seq.items;
4140
4073
  const result = this.createExpressionNode(
4141
- "Destr",
4142
- { arrayDestruct: [] },
4074
+ T_DESTRUCTURE,
4075
+ { aDestr: [] },
4143
4076
  seq.startToken,
4144
4077
  seq.endToken
4145
4078
  );
4146
4079
  for (const item of items) {
4147
4080
  let arrayD;
4148
4081
  switch (item.type) {
4149
- case "NoArgE":
4082
+ case T_NO_ARG_EXPRESSION:
4150
4083
  arrayD = this.createExpressionNode(
4151
- "ADestr",
4084
+ T_ARRAY_DESTRUCTURE,
4152
4085
  {},
4153
4086
  item.startToken,
4154
4087
  item.endToken
4155
4088
  );
4156
4089
  break;
4157
- case "IdE":
4090
+ case T_IDENTIFIER:
4158
4091
  arrayD = this.createExpressionNode(
4159
- "ADestr",
4092
+ T_ARRAY_DESTRUCTURE,
4160
4093
  { id: item.name },
4161
4094
  item.startToken,
4162
4095
  item.endToken
4163
4096
  );
4164
4097
  break;
4165
- case "Destr":
4166
- result.arrayDestruct.push(...item.arrayDestruct);
4098
+ case T_DESTRUCTURE:
4099
+ result.aDestr.push(...item.aDestr);
4167
4100
  break;
4168
- case "ADestr":
4101
+ case T_ARRAY_DESTRUCTURE:
4169
4102
  arrayD = item;
4170
4103
  break;
4171
- case "ALitE": {
4104
+ case T_ARRAY_LITERAL: {
4172
4105
  const destructure = this.convertToArrayDestructure(item);
4173
4106
  if (destructure) {
4174
4107
  arrayD = this.createExpressionNode(
4175
- "ADestr",
4108
+ T_ARRAY_DESTRUCTURE,
4176
4109
  {
4177
- arrayDestruct: destructure.arrayDestruct
4110
+ aDestr: destructure.aDestr
4178
4111
  },
4179
4112
  item.startToken,
4180
4113
  item.endToken
@@ -4182,23 +4115,23 @@ class Parser {
4182
4115
  }
4183
4116
  break;
4184
4117
  }
4185
- case "ODestr":
4118
+ case T_OBJECT_DESTRUCTURE:
4186
4119
  arrayD = this.createExpressionNode(
4187
- "ADestr",
4120
+ T_ARRAY_DESTRUCTURE,
4188
4121
  {
4189
- objectDestruct: item
4122
+ oDestr: item
4190
4123
  },
4191
4124
  item.startToken,
4192
4125
  item.endToken
4193
4126
  );
4194
4127
  break;
4195
- case "OLitE": {
4128
+ case T_OBJECT_LITERAL: {
4196
4129
  const destructure = this.convertToObjectDestructure(item);
4197
4130
  if (destructure) {
4198
4131
  arrayD = this.createExpressionNode(
4199
- "ADestr",
4132
+ T_ARRAY_DESTRUCTURE,
4200
4133
  {
4201
- objectDestruct: destructure.objectDestruct
4134
+ oDestr: destructure.oDestr
4202
4135
  },
4203
4136
  item.startToken,
4204
4137
  item.endToken
@@ -4210,42 +4143,42 @@ class Parser {
4210
4143
  this.reportError("W017");
4211
4144
  return null;
4212
4145
  }
4213
- if (arrayD) (_a = result.arrayDestruct) == null ? void 0 : _a.push(arrayD);
4146
+ if (arrayD) (_a = result.aDestr) == null ? void 0 : _a.push(arrayD);
4214
4147
  }
4215
4148
  return result;
4216
4149
  }
4217
4150
  convertToObjectDestructure(objLit) {
4218
4151
  var _a;
4219
4152
  const result = this.createExpressionNode(
4220
- "Destr",
4221
- { objectDestruct: [] },
4153
+ T_DESTRUCTURE,
4154
+ { oDestr: [] },
4222
4155
  objLit.startToken,
4223
4156
  objLit.endToken
4224
4157
  );
4225
4158
  for (const prop of objLit.props) {
4226
4159
  if (Array.isArray(prop)) ;
4227
4160
  else {
4228
- this.reportError("W018");
4161
+ reportError("W018");
4229
4162
  return null;
4230
4163
  }
4231
4164
  const [propKey, propValue] = prop;
4232
- if (propKey.type !== "IdE") {
4233
- this.reportError("W018");
4165
+ if (propKey.type !== T_IDENTIFIER) {
4166
+ reportError("W018");
4234
4167
  return null;
4235
4168
  }
4236
4169
  let objD;
4237
4170
  switch (propValue.type) {
4238
- case "IdE":
4171
+ case T_IDENTIFIER:
4239
4172
  if (propValue.name === propKey.name) {
4240
4173
  objD = this.createExpressionNode(
4241
- "ODestr",
4174
+ T_OBJECT_DESTRUCTURE,
4242
4175
  { id: propKey.name },
4243
4176
  propValue.startToken,
4244
4177
  propValue.endToken
4245
4178
  );
4246
4179
  } else {
4247
4180
  objD = this.createExpressionNode(
4248
- "ODestr",
4181
+ T_OBJECT_DESTRUCTURE,
4249
4182
  {
4250
4183
  id: propKey.name,
4251
4184
  alias: propValue.name
@@ -4255,26 +4188,26 @@ class Parser {
4255
4188
  );
4256
4189
  }
4257
4190
  break;
4258
- case "ADestr": {
4191
+ case T_ARRAY_DESTRUCTURE: {
4259
4192
  objD = this.createExpressionNode(
4260
- "ODestr",
4193
+ T_OBJECT_DESTRUCTURE,
4261
4194
  {
4262
4195
  id: propKey.name,
4263
- arrayDestruct: propValue
4196
+ aDestr: propValue
4264
4197
  },
4265
4198
  propKey.startToken,
4266
4199
  propValue.endToken
4267
4200
  );
4268
4201
  break;
4269
4202
  }
4270
- case "ALitE": {
4203
+ case T_ARRAY_LITERAL: {
4271
4204
  const destructure = this.convertToArrayDestructure(propValue);
4272
4205
  if (destructure) {
4273
4206
  objD = this.createExpressionNode(
4274
- "ODestr",
4207
+ T_OBJECT_DESTRUCTURE,
4275
4208
  {
4276
4209
  id: propKey.name,
4277
- arrayDestruct: destructure.arrayDestruct
4210
+ aDestr: destructure.aDestr
4278
4211
  },
4279
4212
  propKey.startToken,
4280
4213
  propValue.endToken
@@ -4282,17 +4215,17 @@ class Parser {
4282
4215
  }
4283
4216
  break;
4284
4217
  }
4285
- case "ODestr":
4218
+ case T_OBJECT_DESTRUCTURE:
4286
4219
  objD = propValue;
4287
4220
  break;
4288
- case "OLitE": {
4221
+ case T_OBJECT_LITERAL: {
4289
4222
  const destructure = this.convertToObjectDestructure(propValue);
4290
4223
  if (destructure) {
4291
4224
  objD = this.createExpressionNode(
4292
- "ODestr",
4225
+ T_OBJECT_DESTRUCTURE,
4293
4226
  {
4294
4227
  id: propKey.name,
4295
- objectDestruct: destructure.objectDestruct
4228
+ oDestr: destructure.oDestr
4296
4229
  },
4297
4230
  propKey.startToken,
4298
4231
  propValue.endToken
@@ -4304,7 +4237,7 @@ class Parser {
4304
4237
  this.reportError("W018");
4305
4238
  return null;
4306
4239
  }
4307
- if (objD) (_a = result.objectDestruct) == null ? void 0 : _a.push(objD);
4240
+ if (objD) (_a = result.oDestr) == null ? void 0 : _a.push(objD);
4308
4241
  }
4309
4242
  return result;
4310
4243
  }
@@ -4328,11 +4261,11 @@ function visitNode(subject, state, stmtVisitor, exprVisitor, parent, tag) {
4328
4261
  return state;
4329
4262
  }
4330
4263
  switch (subject.type) {
4331
- case "BlockS": {
4264
+ case T_BLOCK_STATEMENT: {
4332
4265
  state = (stmtVisitor == null ? void 0 : stmtVisitor(true, subject, state, parent, tag)) || state;
4333
4266
  if (state.cancel) return state;
4334
4267
  if (!state.skipChildren) {
4335
- for (const statement of subject.statements) {
4268
+ for (const statement of subject.stmts) {
4336
4269
  state = visitNode(statement, state, stmtVisitor, exprVisitor, subject, "statements");
4337
4270
  if (state.cancel) return state;
4338
4271
  }
@@ -4340,28 +4273,28 @@ function visitNode(subject, state, stmtVisitor, exprVisitor, parent, tag) {
4340
4273
  state = (stmtVisitor == null ? void 0 : stmtVisitor(false, subject, state, parent, tag)) || state;
4341
4274
  return state;
4342
4275
  }
4343
- case "EmptyS": {
4276
+ case T_EMPTY_STATEMENT: {
4344
4277
  state = (stmtVisitor == null ? void 0 : stmtVisitor(true, subject, state, parent, tag)) || state;
4345
4278
  return state;
4346
4279
  }
4347
- case "ExprS": {
4280
+ case T_EXPRESSION_STATEMENT: {
4348
4281
  state = (stmtVisitor == null ? void 0 : stmtVisitor(true, subject, state, parent, tag)) || state;
4349
4282
  if (state.cancel) return state;
4350
4283
  if (!state.skipChildren) {
4351
- state = visitNode(subject.expression, state, stmtVisitor, exprVisitor, subject, "expression");
4284
+ state = visitNode(subject.expr, state, stmtVisitor, exprVisitor, subject, "expression");
4352
4285
  if (state.cancel) return state;
4353
4286
  }
4354
4287
  state = (stmtVisitor == null ? void 0 : stmtVisitor(false, subject, state, parent, tag)) || state;
4355
4288
  return state;
4356
4289
  }
4357
- case "ArrowS": {
4290
+ case T_ARROW_EXPRESSION_STATEMENT: {
4358
4291
  return state;
4359
4292
  }
4360
- case "LetS": {
4293
+ case T_LET_STATEMENT: {
4361
4294
  state = (stmtVisitor == null ? void 0 : stmtVisitor(true, subject, state, parent, tag)) || state;
4362
4295
  if (state.cancel) return state;
4363
4296
  if (!state.skipChildren) {
4364
- for (const declaration of subject.declarations) {
4297
+ for (const declaration of subject.decls) {
4365
4298
  state = visitNode(declaration, state, stmtVisitor, exprVisitor, subject, "declarations");
4366
4299
  if (state.cancel) return state;
4367
4300
  }
@@ -4369,11 +4302,11 @@ function visitNode(subject, state, stmtVisitor, exprVisitor, parent, tag) {
4369
4302
  state = (stmtVisitor == null ? void 0 : stmtVisitor(false, subject, state, parent, tag)) || state;
4370
4303
  return state;
4371
4304
  }
4372
- case "ConstS": {
4305
+ case T_CONST_STATEMENT: {
4373
4306
  state = (stmtVisitor == null ? void 0 : stmtVisitor(true, subject, state, parent, tag)) || state;
4374
4307
  if (state.cancel) return state;
4375
4308
  if (!state.skipChildren) {
4376
- for (const declaration of subject.declarations) {
4309
+ for (const declaration of subject.decls) {
4377
4310
  state = visitNode(declaration, state, stmtVisitor, exprVisitor, subject, "declarations");
4378
4311
  if (state.cancel) return state;
4379
4312
  }
@@ -4381,11 +4314,11 @@ function visitNode(subject, state, stmtVisitor, exprVisitor, parent, tag) {
4381
4314
  state = (stmtVisitor == null ? void 0 : stmtVisitor(false, subject, state, parent, tag)) || state;
4382
4315
  return state;
4383
4316
  }
4384
- case "VarS": {
4317
+ case T_VAR_STATEMENT: {
4385
4318
  state = (stmtVisitor == null ? void 0 : stmtVisitor(true, subject, state, parent, tag)) || state;
4386
4319
  if (state.cancel) return state;
4387
4320
  if (!state.skipChildren) {
4388
- for (const declaration of subject.declarations) {
4321
+ for (const declaration of subject.decls) {
4389
4322
  state = visitNode(declaration, state, stmtVisitor, exprVisitor, subject, "declarations");
4390
4323
  if (state.cancel) return state;
4391
4324
  }
@@ -4393,49 +4326,49 @@ function visitNode(subject, state, stmtVisitor, exprVisitor, parent, tag) {
4393
4326
  state = (stmtVisitor == null ? void 0 : stmtVisitor(false, subject, state, parent, tag)) || state;
4394
4327
  return state;
4395
4328
  }
4396
- case "IfS": {
4329
+ case T_IF_STATEMENT: {
4397
4330
  state = (stmtVisitor == null ? void 0 : stmtVisitor(true, subject, state, parent, tag)) || state;
4398
4331
  if (state.cancel) return state;
4399
4332
  if (!state.skipChildren) {
4400
- state = visitNode(subject.condition, state, stmtVisitor, exprVisitor, subject, "condition");
4333
+ state = visitNode(subject.cond, state, stmtVisitor, exprVisitor, subject, "condition");
4401
4334
  if (state.cancel) return state;
4402
- if (subject.thenBranch) {
4403
- state = visitNode(subject.thenBranch, state, stmtVisitor, exprVisitor, subject, "thenBranch");
4335
+ if (subject.thenB) {
4336
+ state = visitNode(subject.thenB, state, stmtVisitor, exprVisitor, subject, "thenBranch");
4404
4337
  }
4405
4338
  if (state.cancel) return state;
4406
- if (subject.elseBranch) {
4407
- state = visitNode(subject.elseBranch, state, stmtVisitor, exprVisitor, subject, "elseBranch");
4339
+ if (subject.elseB) {
4340
+ state = visitNode(subject.elseB, state, stmtVisitor, exprVisitor, subject, "elseBranch");
4408
4341
  }
4409
4342
  if (state.cancel) return state;
4410
4343
  }
4411
4344
  state = (stmtVisitor == null ? void 0 : stmtVisitor(false, subject, state, parent, tag)) || state;
4412
4345
  return state;
4413
4346
  }
4414
- case "RetS": {
4347
+ case T_RETURN_STATEMENT: {
4415
4348
  state = (stmtVisitor == null ? void 0 : stmtVisitor(true, subject, state, parent, tag)) || state;
4416
4349
  if (state.cancel) return state;
4417
4350
  if (!state.skipChildren) {
4418
- if (subject.expression) {
4419
- state = visitNode(subject.expression, state, stmtVisitor, exprVisitor, subject, "expression");
4351
+ if (subject.expr) {
4352
+ state = visitNode(subject.expr, state, stmtVisitor, exprVisitor, subject, "expression");
4420
4353
  }
4421
4354
  if (state.cancel) return state;
4422
4355
  }
4423
4356
  state = (stmtVisitor == null ? void 0 : stmtVisitor(false, subject, state, parent, tag)) || state;
4424
4357
  return state;
4425
4358
  }
4426
- case "BrkS": {
4359
+ case T_BREAK_STATEMENT: {
4427
4360
  state = (stmtVisitor == null ? void 0 : stmtVisitor(true, subject, state, parent, tag)) || state;
4428
4361
  return state;
4429
4362
  }
4430
- case "ContS": {
4363
+ case T_CONTINUE_STATEMENT: {
4431
4364
  state = (stmtVisitor == null ? void 0 : stmtVisitor(true, subject, state, parent, tag)) || state;
4432
4365
  return state;
4433
4366
  }
4434
- case "WhileS": {
4367
+ case T_WHILE_STATEMENT: {
4435
4368
  state = (stmtVisitor == null ? void 0 : stmtVisitor(true, subject, state, parent, tag)) || state;
4436
4369
  if (state.cancel) return state;
4437
4370
  if (!state.skipChildren) {
4438
- state = visitNode(subject.condition, state, stmtVisitor, exprVisitor, subject, "condition");
4371
+ state = visitNode(subject.cond, state, stmtVisitor, exprVisitor, subject, "condition");
4439
4372
  if (state.cancel) return state;
4440
4373
  state = visitNode(subject.body, state, stmtVisitor, exprVisitor, subject, "body");
4441
4374
  if (state.cancel) return state;
@@ -4443,19 +4376,19 @@ function visitNode(subject, state, stmtVisitor, exprVisitor, parent, tag) {
4443
4376
  state = (stmtVisitor == null ? void 0 : stmtVisitor(false, subject, state, parent, tag)) || state;
4444
4377
  return state;
4445
4378
  }
4446
- case "DoWS": {
4379
+ case T_DO_WHILE_STATEMENT: {
4447
4380
  state = (stmtVisitor == null ? void 0 : stmtVisitor(true, subject, state, parent, tag)) || state;
4448
4381
  if (state.cancel) return state;
4449
4382
  if (!state.skipChildren) {
4450
4383
  state = visitNode(subject.body, state, stmtVisitor, exprVisitor, subject, "body");
4451
4384
  if (state.cancel) return state;
4452
- state = visitNode(subject.condition, state, stmtVisitor, exprVisitor, subject, "condition");
4385
+ state = visitNode(subject.cond, state, stmtVisitor, exprVisitor, subject, "condition");
4453
4386
  if (state.cancel) return state;
4454
4387
  }
4455
4388
  state = (stmtVisitor == null ? void 0 : stmtVisitor(false, subject, state, parent, tag)) || state;
4456
4389
  return state;
4457
4390
  }
4458
- case "ForS": {
4391
+ case T_FOR_STATEMENT: {
4459
4392
  state = (stmtVisitor == null ? void 0 : stmtVisitor(true, subject, state, parent, tag)) || state;
4460
4393
  if (state.cancel) return state;
4461
4394
  if (!state.skipChildren) {
@@ -4463,12 +4396,12 @@ function visitNode(subject, state, stmtVisitor, exprVisitor, parent, tag) {
4463
4396
  state = visitNode(subject.init, state, stmtVisitor, exprVisitor, subject, "init");
4464
4397
  }
4465
4398
  if (state.cancel) return state;
4466
- if (subject.condition) {
4467
- state = visitNode(subject.condition, state, stmtVisitor, exprVisitor, subject, "condition");
4399
+ if (subject.cond) {
4400
+ state = visitNode(subject.cond, state, stmtVisitor, exprVisitor, subject, "condition");
4468
4401
  }
4469
4402
  if (state.cancel) return state;
4470
- if (subject.update) {
4471
- state = visitNode(subject.update, state, stmtVisitor, exprVisitor, subject, "update");
4403
+ if (subject.upd) {
4404
+ state = visitNode(subject.upd, state, stmtVisitor, exprVisitor, subject, "update");
4472
4405
  }
4473
4406
  if (state.cancel) return state;
4474
4407
  state = visitNode(subject.body, state, stmtVisitor, exprVisitor, subject, "body");
@@ -4477,11 +4410,11 @@ function visitNode(subject, state, stmtVisitor, exprVisitor, parent, tag) {
4477
4410
  state = (stmtVisitor == null ? void 0 : stmtVisitor(false, subject, state, parent, tag)) || state;
4478
4411
  return state;
4479
4412
  }
4480
- case "ForInS": {
4413
+ case T_FOR_IN_STATEMENT: {
4481
4414
  state = (stmtVisitor == null ? void 0 : stmtVisitor(true, subject, state, parent, tag)) || state;
4482
4415
  if (state.cancel) return state;
4483
4416
  if (!state.skipChildren) {
4484
- state = visitNode(subject.expression, state, stmtVisitor, exprVisitor, subject, "expression");
4417
+ state = visitNode(subject.expr, state, stmtVisitor, exprVisitor, subject, "expression");
4485
4418
  if (state.cancel) return state;
4486
4419
  state = visitNode(subject.body, state, stmtVisitor, exprVisitor, subject, "body");
4487
4420
  if (state.cancel) return state;
@@ -4489,11 +4422,11 @@ function visitNode(subject, state, stmtVisitor, exprVisitor, parent, tag) {
4489
4422
  state = (stmtVisitor == null ? void 0 : stmtVisitor(false, subject, state, parent, tag)) || state;
4490
4423
  return state;
4491
4424
  }
4492
- case "ForOfS": {
4425
+ case T_FOR_OF_STATEMENT: {
4493
4426
  state = (stmtVisitor == null ? void 0 : stmtVisitor(true, subject, state, parent, tag)) || state;
4494
4427
  if (state.cancel) return state;
4495
4428
  if (!state.skipChildren) {
4496
- state = visitNode(subject.expression, state, stmtVisitor, exprVisitor, subject, "expression");
4429
+ state = visitNode(subject.expr, state, stmtVisitor, exprVisitor, subject, "expression");
4497
4430
  if (state.cancel) return state;
4498
4431
  state = visitNode(subject.body, state, stmtVisitor, exprVisitor, subject, "body");
4499
4432
  if (state.cancel) return state;
@@ -4501,49 +4434,70 @@ function visitNode(subject, state, stmtVisitor, exprVisitor, parent, tag) {
4501
4434
  state = (stmtVisitor == null ? void 0 : stmtVisitor(false, subject, state, parent, tag)) || state;
4502
4435
  return state;
4503
4436
  }
4504
- case "ThrowS": {
4437
+ case T_THROW_STATEMENT: {
4505
4438
  state = (stmtVisitor == null ? void 0 : stmtVisitor(true, subject, state, parent, tag)) || state;
4506
4439
  if (state.cancel) return state;
4507
4440
  if (!state.skipChildren) {
4508
- state = visitNode(subject.expression, state, stmtVisitor, exprVisitor, subject, "expression");
4441
+ state = visitNode(subject.expr, state, stmtVisitor, exprVisitor, subject, "expression");
4509
4442
  if (state.cancel) return state;
4510
4443
  }
4511
4444
  state = (stmtVisitor == null ? void 0 : stmtVisitor(false, subject, state, parent, tag)) || state;
4512
4445
  return state;
4513
4446
  }
4514
- case "TryS": {
4447
+ case T_TRY_STATEMENT: {
4515
4448
  state = (stmtVisitor == null ? void 0 : stmtVisitor(true, subject, state, parent, tag)) || state;
4516
4449
  if (state.cancel) return state;
4517
4450
  if (!state.skipChildren) {
4518
- if (subject.tryBlock) {
4519
- state = visitNode(subject.tryBlock, state, stmtVisitor, exprVisitor, subject, "tryBlock");
4451
+ if (subject.tryB) {
4452
+ state = visitNode(subject.tryB, state, stmtVisitor, exprVisitor, subject, "tryBlock");
4520
4453
  }
4521
4454
  if (state.cancel) return state;
4522
- if (subject.catchBlock) {
4523
- state = visitNode(subject.catchBlock, state, stmtVisitor, exprVisitor, subject, "catchBlock");
4455
+ if (subject.catchB) {
4456
+ state = visitNode(subject.catchB, state, stmtVisitor, exprVisitor, subject, "catchBlock");
4524
4457
  }
4525
4458
  if (state.cancel) return state;
4526
- if (subject.finallyBlock) {
4527
- state = visitNode(subject.finallyBlock, state, stmtVisitor, exprVisitor, subject, "finallyBlock");
4459
+ if (subject.finallyB) {
4460
+ state = visitNode(
4461
+ subject.finallyB,
4462
+ state,
4463
+ stmtVisitor,
4464
+ exprVisitor,
4465
+ subject,
4466
+ "finallyBlock"
4467
+ );
4528
4468
  }
4529
4469
  if (state.cancel) return state;
4530
4470
  }
4531
4471
  state = (stmtVisitor == null ? void 0 : stmtVisitor(false, subject, state, parent, tag)) || state;
4532
4472
  return state;
4533
4473
  }
4534
- case "SwitchS": {
4474
+ case T_SWITCH_STATEMENT: {
4535
4475
  state = (stmtVisitor == null ? void 0 : stmtVisitor(true, subject, state, parent, tag)) || state;
4536
4476
  if (state.cancel) return state;
4537
4477
  if (!state.skipChildren) {
4538
- state = visitNode(subject.expression, state, stmtVisitor, exprVisitor, subject, "expression");
4478
+ state = visitNode(subject.expr, state, stmtVisitor, exprVisitor, subject, "expression");
4539
4479
  if (state.cancel) return state;
4540
4480
  for (const switchCase of subject.cases) {
4541
- if (switchCase.caseExpression)
4542
- state = visitNode(switchCase.caseExpression, state, stmtVisitor, exprVisitor, subject, "caseExpression");
4481
+ if (switchCase.caseE)
4482
+ state = visitNode(
4483
+ switchCase.caseE,
4484
+ state,
4485
+ stmtVisitor,
4486
+ exprVisitor,
4487
+ subject,
4488
+ "caseExpression"
4489
+ );
4543
4490
  if (state.cancel) return state;
4544
- if (switchCase.statements === void 0) continue;
4545
- for (const statement of switchCase.statements) {
4546
- state = visitNode(statement, state, stmtVisitor, exprVisitor, subject, "switchStatement");
4491
+ if (switchCase.stmts === void 0) continue;
4492
+ for (const statement of switchCase.stmts) {
4493
+ state = visitNode(
4494
+ statement,
4495
+ state,
4496
+ stmtVisitor,
4497
+ exprVisitor,
4498
+ subject,
4499
+ "switchStatement"
4500
+ );
4547
4501
  if (state.cancel) return state;
4548
4502
  }
4549
4503
  }
@@ -4551,7 +4505,7 @@ function visitNode(subject, state, stmtVisitor, exprVisitor, parent, tag) {
4551
4505
  state = (stmtVisitor == null ? void 0 : stmtVisitor(false, subject, state, parent, tag)) || state;
4552
4506
  return state;
4553
4507
  }
4554
- case "FuncD": {
4508
+ case T_FUNCTION_DECLARATION: {
4555
4509
  state = (stmtVisitor == null ? void 0 : stmtVisitor(true, subject, state, parent, tag)) || state;
4556
4510
  if (state.cancel) return state;
4557
4511
  if (!state.skipChildren) {
@@ -4559,29 +4513,23 @@ function visitNode(subject, state, stmtVisitor, exprVisitor, parent, tag) {
4559
4513
  state = visitNode(expr, state, stmtVisitor, exprVisitor, subject, "arg");
4560
4514
  if (state.cancel) return state;
4561
4515
  }
4562
- state = visitNode(subject.statement, state, stmtVisitor, exprVisitor, subject, "statement");
4516
+ state = visitNode(subject.stmt, state, stmtVisitor, exprVisitor, subject, "statement");
4563
4517
  if (state.cancel) return state;
4564
4518
  }
4565
4519
  state = (stmtVisitor == null ? void 0 : stmtVisitor(false, subject, state, parent, tag)) || state;
4566
4520
  return state;
4567
4521
  }
4568
- case "ImportD": {
4569
- state = (stmtVisitor == null ? void 0 : stmtVisitor(true, subject, state, parent, tag)) || state;
4570
- if (state.cancel) return state;
4571
- state = (stmtVisitor == null ? void 0 : stmtVisitor(false, subject, state, parent, tag)) || state;
4572
- return state;
4573
- }
4574
- case "UnaryE": {
4522
+ case T_UNARY_EXPRESSION: {
4575
4523
  state = (exprVisitor == null ? void 0 : exprVisitor(true, subject, state, parent, tag)) || state;
4576
4524
  if (state.cancel) return state;
4577
4525
  if (!state.skipChildren) {
4578
- state = visitNode(subject.operand, state, stmtVisitor, exprVisitor, subject, "operand");
4526
+ state = visitNode(subject.expr, state, stmtVisitor, exprVisitor, subject, "operand");
4579
4527
  if (state.cancel) return state;
4580
4528
  }
4581
4529
  state = (exprVisitor == null ? void 0 : exprVisitor(false, subject, state, parent, tag)) || state;
4582
4530
  return state;
4583
4531
  }
4584
- case "BinaryE": {
4532
+ case T_BINARY_EXPRESSION: {
4585
4533
  state = (exprVisitor == null ? void 0 : exprVisitor(true, subject, state, parent, tag)) || state;
4586
4534
  if (state.cancel) return state;
4587
4535
  if (!state.skipChildren) {
@@ -4593,11 +4541,11 @@ function visitNode(subject, state, stmtVisitor, exprVisitor, parent, tag) {
4593
4541
  state = (exprVisitor == null ? void 0 : exprVisitor(false, subject, state, parent, tag)) || state;
4594
4542
  return state;
4595
4543
  }
4596
- case "SeqE": {
4544
+ case T_SEQUENCE_EXPRESSION: {
4597
4545
  state = (exprVisitor == null ? void 0 : exprVisitor(true, subject, state, parent, tag)) || state;
4598
4546
  if (state.cancel) return state;
4599
4547
  if (!state.skipChildren) {
4600
- for (const expr of subject.expressions) {
4548
+ for (const expr of subject.exprs) {
4601
4549
  state = visitNode(expr, state, stmtVisitor, exprVisitor, subject, "expression");
4602
4550
  if (state.cancel) return state;
4603
4551
  }
@@ -4605,21 +4553,21 @@ function visitNode(subject, state, stmtVisitor, exprVisitor, parent, tag) {
4605
4553
  state = (exprVisitor == null ? void 0 : exprVisitor(false, subject, state, parent, tag)) || state;
4606
4554
  return state;
4607
4555
  }
4608
- case "CondE": {
4556
+ case T_CONDITIONAL_EXPRESSION: {
4609
4557
  state = (exprVisitor == null ? void 0 : exprVisitor(true, subject, state, parent, tag)) || state;
4610
4558
  if (state.cancel) return state;
4611
4559
  if (!state.skipChildren) {
4612
- state = visitNode(subject.condition, state, stmtVisitor, exprVisitor, subject, "condition");
4560
+ state = visitNode(subject.cond, state, stmtVisitor, exprVisitor, subject, "condition");
4613
4561
  if (state.cancel) return state;
4614
- state = visitNode(subject.consequent, state, stmtVisitor, exprVisitor, subject, "consequent");
4562
+ state = visitNode(subject.thenE, state, stmtVisitor, exprVisitor, subject, "consequent");
4615
4563
  if (state.cancel) return state;
4616
- state = visitNode(subject.alternate, state, stmtVisitor, exprVisitor, subject, "alternate");
4564
+ state = visitNode(subject.elseE, state, stmtVisitor, exprVisitor, subject, "alternate");
4617
4565
  if (state.cancel) return state;
4618
4566
  }
4619
4567
  state = (exprVisitor == null ? void 0 : exprVisitor(false, subject, state, parent, tag)) || state;
4620
4568
  return state;
4621
4569
  }
4622
- case "InvokeE": {
4570
+ case T_FUNCTION_INVOCATION_EXPRESSION: {
4623
4571
  state = (exprVisitor == null ? void 0 : exprVisitor(true, subject, state, parent, tag)) || state;
4624
4572
  if (state.cancel) return state;
4625
4573
  if (!state.skipChildren) {
@@ -4627,27 +4575,27 @@ function visitNode(subject, state, stmtVisitor, exprVisitor, parent, tag) {
4627
4575
  state = visitNode(arg, state, stmtVisitor, exprVisitor, subject, "argument");
4628
4576
  if (state.cancel) return state;
4629
4577
  }
4630
- state = visitNode(subject.object, state, stmtVisitor, exprVisitor, subject, "object");
4578
+ state = visitNode(subject.obj, state, stmtVisitor, exprVisitor, subject, "object");
4631
4579
  if (state.cancel) return state;
4632
4580
  }
4633
4581
  state = (exprVisitor == null ? void 0 : exprVisitor(false, subject, state, parent, tag)) || state;
4634
4582
  return state;
4635
4583
  }
4636
- case "MembE": {
4584
+ case T_MEMBER_ACCESS_EXPRESSION: {
4637
4585
  state = (exprVisitor == null ? void 0 : exprVisitor(true, subject, state, parent, tag)) || state;
4638
4586
  if (state.cancel) return state;
4639
4587
  if (!state.skipChildren) {
4640
- state = visitNode(subject.object, state, stmtVisitor, exprVisitor, subject, "object");
4588
+ state = visitNode(subject.obj, state, stmtVisitor, exprVisitor, subject, "object");
4641
4589
  if (state.cancel) return state;
4642
4590
  }
4643
4591
  state = (exprVisitor == null ? void 0 : exprVisitor(false, subject, state, parent, tag)) || state;
4644
4592
  return state;
4645
4593
  }
4646
- case "CMembE": {
4594
+ case T_CALCULATED_MEMBER_ACCESS_EXPRESSION: {
4647
4595
  state = (exprVisitor == null ? void 0 : exprVisitor(true, subject, state, parent, tag)) || state;
4648
4596
  if (state.cancel) return state;
4649
4597
  if (!state.skipChildren) {
4650
- state = visitNode(subject.object, state, stmtVisitor, exprVisitor, subject, "object");
4598
+ state = visitNode(subject.obj, state, stmtVisitor, exprVisitor, subject, "object");
4651
4599
  if (state.cancel) return state;
4652
4600
  state = visitNode(subject.member, state, stmtVisitor, exprVisitor, subject, "member");
4653
4601
  if (state.cancel) return state;
@@ -4655,15 +4603,15 @@ function visitNode(subject, state, stmtVisitor, exprVisitor, parent, tag) {
4655
4603
  state = (exprVisitor == null ? void 0 : exprVisitor(false, subject, state, parent, tag)) || state;
4656
4604
  return state;
4657
4605
  }
4658
- case "IdE": {
4606
+ case T_IDENTIFIER: {
4659
4607
  state = (exprVisitor == null ? void 0 : exprVisitor(true, subject, state, parent, tag)) || state;
4660
4608
  return state;
4661
4609
  }
4662
- case "LitE": {
4610
+ case T_LITERAL: {
4663
4611
  state = (exprVisitor == null ? void 0 : exprVisitor(true, subject, state, parent, tag)) || state;
4664
4612
  return state;
4665
4613
  }
4666
- case "ALitE": {
4614
+ case T_ARRAY_LITERAL: {
4667
4615
  state = (exprVisitor == null ? void 0 : exprVisitor(true, subject, state, parent, tag)) || state;
4668
4616
  if (state.cancel) return state;
4669
4617
  if (!state.skipChildren) {
@@ -4675,7 +4623,7 @@ function visitNode(subject, state, stmtVisitor, exprVisitor, parent, tag) {
4675
4623
  state = (exprVisitor == null ? void 0 : exprVisitor(false, subject, state, parent, tag)) || state;
4676
4624
  return state;
4677
4625
  }
4678
- case "OLitE": {
4626
+ case T_OBJECT_LITERAL: {
4679
4627
  state = (exprVisitor == null ? void 0 : exprVisitor(true, subject, state, parent, tag)) || state;
4680
4628
  if (state.cancel) return state;
4681
4629
  if (!state.skipChildren) {
@@ -4695,21 +4643,21 @@ function visitNode(subject, state, stmtVisitor, exprVisitor, parent, tag) {
4695
4643
  state = (exprVisitor == null ? void 0 : exprVisitor(false, subject, state, parent, tag)) || state;
4696
4644
  return state;
4697
4645
  }
4698
- case "SpreadE": {
4646
+ case T_SPREAD_EXPRESSION: {
4699
4647
  state = (exprVisitor == null ? void 0 : exprVisitor(true, subject, state, parent, tag)) || state;
4700
4648
  if (state.cancel) return state;
4701
4649
  if (!state.skipChildren) {
4702
- state = visitNode(subject.operand, state, stmtVisitor, exprVisitor, subject, "operand");
4650
+ state = visitNode(subject.expr, state, stmtVisitor, exprVisitor, subject, "operand");
4703
4651
  if (state.cancel) return state;
4704
4652
  }
4705
4653
  state = (exprVisitor == null ? void 0 : exprVisitor(false, subject, state, parent, tag)) || state;
4706
4654
  return state;
4707
4655
  }
4708
- case "AsgnE": {
4656
+ case T_ASSIGNMENT_EXPRESSION: {
4709
4657
  state = (exprVisitor == null ? void 0 : exprVisitor(true, subject, state, parent, tag)) || state;
4710
4658
  if (state.cancel) return state;
4711
4659
  if (!state.skipChildren) {
4712
- state = visitNode(subject.operand, state, stmtVisitor, exprVisitor, subject, "operand");
4660
+ state = visitNode(subject.expr, state, stmtVisitor, exprVisitor, subject, "operand");
4713
4661
  if (state.cancel) return state;
4714
4662
  state = visitNode(subject.leftValue, state, stmtVisitor, exprVisitor, subject, "leftValue");
4715
4663
  if (state.cancel) return state;
@@ -4717,11 +4665,11 @@ function visitNode(subject, state, stmtVisitor, exprVisitor, parent, tag) {
4717
4665
  state = (exprVisitor == null ? void 0 : exprVisitor(false, subject, state, parent, tag)) || state;
4718
4666
  return state;
4719
4667
  }
4720
- case "NoArgE": {
4668
+ case T_NO_ARG_EXPRESSION: {
4721
4669
  state = (exprVisitor == null ? void 0 : exprVisitor(true, subject, state, parent, tag)) || state;
4722
4670
  return state;
4723
4671
  }
4724
- case "ArrowE": {
4672
+ case T_ARROW_EXPRESSION: {
4725
4673
  state = (exprVisitor == null ? void 0 : exprVisitor(true, subject, state, parent, tag)) || state;
4726
4674
  if (state.cancel) return state;
4727
4675
  if (!state.skipChildren) {
@@ -4735,55 +4683,55 @@ function visitNode(subject, state, stmtVisitor, exprVisitor, parent, tag) {
4735
4683
  state = (exprVisitor == null ? void 0 : exprVisitor(false, subject, state, parent, tag)) || state;
4736
4684
  return state;
4737
4685
  }
4738
- case "PrefE":
4739
- case "PostfE": {
4686
+ case T_PREFIX_OP_EXPRESSION:
4687
+ case T_POSTFIX_OP_EXPRESSION: {
4740
4688
  state = (exprVisitor == null ? void 0 : exprVisitor(true, subject, state, parent, tag)) || state;
4741
4689
  if (state.cancel) return state;
4742
4690
  if (!state.skipChildren) {
4743
- state = visitNode(subject.operand, state, stmtVisitor, exprVisitor, subject, "operand");
4691
+ state = visitNode(subject.expr, state, stmtVisitor, exprVisitor, subject, "operand");
4744
4692
  if (state.cancel) return state;
4745
4693
  }
4746
4694
  state = (exprVisitor == null ? void 0 : exprVisitor(false, subject, state, parent, tag)) || state;
4747
4695
  return state;
4748
4696
  }
4749
- case "VarD": {
4697
+ case T_VAR_DECLARATION: {
4750
4698
  state = (exprVisitor == null ? void 0 : exprVisitor(true, subject, state, parent, tag)) || state;
4751
4699
  if (state.cancel) return state;
4752
4700
  if (!state.skipChildren) {
4753
- if (subject.arrayDestruct !== void 0) {
4754
- for (const expr of subject.arrayDestruct) {
4701
+ if (subject.aDestr !== void 0) {
4702
+ for (const expr of subject.aDestr) {
4755
4703
  state = visitNode(expr, state, stmtVisitor, exprVisitor, subject);
4756
4704
  if (state.cancel) return state;
4757
4705
  }
4758
4706
  }
4759
- if (subject.objectDestruct !== void 0) {
4760
- for (const expr of subject.objectDestruct) {
4707
+ if (subject.oDestr !== void 0) {
4708
+ for (const expr of subject.oDestr) {
4761
4709
  state = visitNode(expr, state, stmtVisitor, exprVisitor, subject);
4762
4710
  if (state.cancel) return state;
4763
4711
  }
4764
4712
  }
4765
- if (subject.expression) {
4766
- state = visitNode(subject.expression, state, stmtVisitor, exprVisitor, subject, "expression");
4713
+ if (subject.expr) {
4714
+ state = visitNode(subject.expr, state, stmtVisitor, exprVisitor, subject, "expression");
4767
4715
  }
4768
4716
  if (state.cancel) return state;
4769
4717
  }
4770
4718
  state = (exprVisitor == null ? void 0 : exprVisitor(false, subject, state, parent, tag)) || state;
4771
4719
  return state;
4772
4720
  }
4773
- case "Destr":
4774
- case "ODestr":
4775
- case "ADestr": {
4721
+ case T_DESTRUCTURE:
4722
+ case T_OBJECT_DESTRUCTURE:
4723
+ case T_ARRAY_DESTRUCTURE: {
4776
4724
  state = (exprVisitor == null ? void 0 : exprVisitor(true, subject, state, parent, tag)) || state;
4777
4725
  if (state.cancel) return state;
4778
4726
  if (!state.skipChildren) {
4779
- if (subject.arrayDestruct !== void 0) {
4780
- for (const expr of subject.arrayDestruct) {
4727
+ if (subject.aDestr !== void 0) {
4728
+ for (const expr of subject.aDestr) {
4781
4729
  state = visitNode(expr, state, stmtVisitor, exprVisitor, subject);
4782
4730
  if (state.cancel) return state;
4783
4731
  }
4784
4732
  }
4785
- if (subject.objectDestruct !== void 0) {
4786
- for (const expr of subject.objectDestruct) {
4733
+ if (subject.oDestr !== void 0) {
4734
+ for (const expr of subject.oDestr) {
4787
4735
  state = visitNode(expr, state, stmtVisitor, exprVisitor, subject);
4788
4736
  if (state.cancel) return state;
4789
4737
  }
@@ -4792,19 +4740,21 @@ function visitNode(subject, state, stmtVisitor, exprVisitor, parent, tag) {
4792
4740
  state = (exprVisitor == null ? void 0 : exprVisitor(false, subject, state, parent, tag)) || state;
4793
4741
  return state;
4794
4742
  }
4795
- case "RVarD": {
4743
+ case T_REACTIVE_VAR_DECLARATION: {
4796
4744
  state = (exprVisitor == null ? void 0 : exprVisitor(true, subject, state, parent, tag)) || state;
4797
4745
  if (state.cancel) return state;
4798
4746
  if (!state.skipChildren) {
4799
- if (subject.expression) {
4800
- state = visitNode(subject.expression, state, stmtVisitor, exprVisitor, subject, "expression");
4747
+ if (subject.expr) {
4748
+ state = visitNode(subject.expr, state, stmtVisitor, exprVisitor, subject, "expression");
4801
4749
  }
4802
4750
  if (state.cancel) return state;
4803
4751
  }
4804
4752
  state = (exprVisitor == null ? void 0 : exprVisitor(false, subject, state, parent, tag)) || state;
4805
4753
  return state;
4806
4754
  }
4807
- case "TempLitE":
4755
+ case T_TEMPLATE_LITERAL_EXPRESSION:
4756
+ return state;
4757
+ case T_SWITCH_CASE:
4808
4758
  return state;
4809
4759
  default:
4810
4760
  return state;
@@ -4813,13 +4763,12 @@ function visitNode(subject, state, stmtVisitor, exprVisitor, parent, tag) {
4813
4763
  function isModuleErrors(result) {
4814
4764
  return result.type !== "ScriptModule";
4815
4765
  }
4816
- function parseScriptModule(moduleName, source, moduleResolver, restrictiveMode = false) {
4766
+ function parseScriptModule(moduleName, source) {
4817
4767
  const parsedModules = /* @__PURE__ */ new Map();
4818
4768
  const moduleErrors = {};
4819
- const parsedModule = doParseModule(moduleName, source, moduleResolver, true);
4769
+ const parsedModule = doParseModule(moduleName, source);
4820
4770
  return !parsedModule || Object.keys(moduleErrors).length > 0 ? moduleErrors : parsedModule;
4821
- function doParseModule(moduleName2, source2, moduleResolver2, topLevel = false) {
4822
- var _a;
4771
+ function doParseModule(moduleName2, source2) {
4823
4772
  if (parsedModules.has(moduleName2)) {
4824
4773
  return parsedModules.get(moduleName2);
4825
4774
  }
@@ -4837,133 +4786,39 @@ function parseScriptModule(moduleName, source, moduleResolver, restrictiveMode =
4837
4786
  moduleErrors[moduleName2].push({
4838
4787
  code: "W002",
4839
4788
  text: errorMessages$1["W002"].replace(/\{(\d+)}/g, () => lastToken.text),
4840
- position: lastToken.location.startLine,
4841
- line: lastToken.location.startLine,
4842
- column: lastToken.location.startColumn
4789
+ position: lastToken.startLine,
4790
+ line: lastToken.startLine,
4791
+ column: lastToken.startColumn
4843
4792
  });
4844
4793
  return null;
4845
4794
  }
4846
4795
  const errors = [];
4847
- const emptyState = {
4848
- data: null,
4849
- cancel: false,
4850
- skipChildren: false
4851
- };
4852
- visitNode(statements, emptyState, (before, stmt, state, parent, tag) => {
4853
- if (!before) return state;
4854
- if (topLevel) {
4855
- switch (stmt.type) {
4856
- case "VarS":
4857
- if (parent) {
4858
- addErrorMessage("W027", stmt);
4859
- }
4860
- break;
4861
- case "FuncD":
4862
- case "ImportD":
4863
- break;
4864
- default:
4865
- if (restrictiveMode && !parent) {
4866
- addErrorMessage("W028", stmt, stmt.type);
4867
- }
4868
- break;
4869
- }
4870
- } else {
4871
- switch (stmt.type) {
4872
- case "VarS":
4873
- addErrorMessage("W027", stmt);
4874
- break;
4875
- case "FuncD":
4876
- if (restrictiveMode && !stmt.isExported) {
4877
- addErrorMessage("W029", stmt);
4878
- }
4879
- break;
4880
- case "ImportD":
4881
- break;
4882
- default:
4883
- if (restrictiveMode && !parent) {
4884
- addErrorMessage("W028", stmt, stmt.type);
4885
- }
4886
- break;
4887
- }
4888
- }
4889
- return state;
4890
- });
4891
4796
  const functions = {};
4892
- statements.filter((stmt) => stmt.type === "FuncD").forEach((stmt) => {
4797
+ statements.filter((stmt) => stmt.type === T_FUNCTION_DECLARATION).forEach((stmt) => {
4893
4798
  const func = stmt;
4894
- if (functions[func.name]) {
4895
- addErrorMessage("W020", stmt, func.name);
4799
+ if (functions[func.id.name]) {
4800
+ addErrorMessage("W020", stmt, func.id.name);
4896
4801
  return;
4897
4802
  }
4898
- functions[func.name] = func;
4899
- });
4900
- const exports = /* @__PURE__ */ new Map();
4901
- statements.forEach((stmt) => {
4902
- if (stmt.type === "ConstS" && stmt.isExported) {
4903
- visitLetConstDeclarations(stmt, (id) => {
4904
- if (exports.has(id)) {
4905
- addErrorMessage("W021", stmt, id);
4906
- } else {
4907
- exports.set(id, stmt);
4908
- }
4909
- });
4910
- } else if (stmt.type === "FuncD" && stmt.isExported) {
4911
- if (exports.has(stmt.name)) {
4912
- addErrorMessage("W021", stmt, stmt.name);
4913
- } else {
4914
- exports.set(stmt.name, stmt);
4915
- }
4916
- }
4803
+ functions[func.id.name] = func;
4917
4804
  });
4918
4805
  const parsedModule2 = {
4919
4806
  type: "ScriptModule",
4920
4807
  name: moduleName2,
4921
4808
  exports,
4922
- importedModules: [],
4923
- imports: {},
4924
4809
  functions,
4925
4810
  statements,
4811
+ sources: /* @__PURE__ */ new Map(),
4926
4812
  executed: false
4927
4813
  };
4928
4814
  parsedModules.set(moduleName2, parsedModule2);
4929
- const importedModules = [];
4930
- const imports = {};
4931
- for (let i = 0; i < statements.length; i++) {
4932
- const stmt = statements[i];
4933
- if (stmt.type !== "ImportD") {
4934
- continue;
4935
- }
4936
- const source3 = moduleResolver2(moduleName2, stmt.moduleFile);
4937
- if (source3 === null) {
4938
- addErrorMessage("W022", stmt, stmt.moduleFile);
4939
- continue;
4940
- }
4941
- const imported = doParseModule(stmt.moduleFile, source3, moduleResolver2);
4942
- if (!imported) {
4943
- return;
4944
- }
4945
- importedModules.push(imported);
4946
- const importedItems = Object.keys(stmt.imports);
4947
- if (importedItems.length > 0) {
4948
- imports[_a = stmt.moduleFile] ?? (imports[_a] = {});
4949
- }
4950
- for (const key of importedItems) {
4951
- if (imported.exports.has(stmt.imports[key])) {
4952
- imports[stmt.moduleFile][key] = imported.exports.get(stmt.imports[key]);
4953
- } else {
4954
- addErrorMessage("W023", stmt, stmt.moduleFile, key);
4955
- }
4956
- }
4957
- }
4958
4815
  if (errors.length > 0) {
4959
4816
  moduleErrors[moduleName2] = errors;
4960
4817
  return null;
4961
4818
  }
4962
- importedModules.forEach((m) => m.parent = parsedModule2);
4963
- parsedModule2.importedModules = importedModules;
4964
- parsedModule2.imports = imports;
4965
4819
  return parsedModule2;
4966
4820
  function addErrorMessage(code, stmt, ...args) {
4821
+ var _a, _b, _c;
4967
4822
  let errorText = errorMessages$1[code];
4968
4823
  if (args) {
4969
4824
  args.forEach(
@@ -4973,150 +4828,70 @@ function parseScriptModule(moduleName, source, moduleResolver, restrictiveMode =
4973
4828
  errors.push({
4974
4829
  code,
4975
4830
  text: errorMessages$1[code].replace(/\{(\d+)}/g, (_, index) => args[index]),
4976
- position: stmt.startPosition,
4977
- line: stmt.startLine,
4978
- column: stmt.startColumn
4831
+ position: (_a = stmt.startToken) == null ? void 0 : _a.startPosition,
4832
+ line: (_b = stmt.startToken) == null ? void 0 : _b.startLine,
4833
+ column: (_c = stmt.startToken) == null ? void 0 : _c.startColumn
4979
4834
  });
4980
4835
  }
4981
4836
  }
4982
4837
  }
4983
- function obtainClosures(thread) {
4984
- var _a;
4985
- const closures = ((_a = thread.blocks) == null ? void 0 : _a.slice(0)) ?? [];
4986
- return thread.parent ? [...obtainClosures(thread.parent), ...closures] : closures;
4987
- }
4988
- function visitLetConstDeclarations(declaration, visitor) {
4989
- for (let i = 0; i < declaration.declarations.length; i++) {
4990
- const decl = declaration.declarations[i];
4991
- visitDeclaration(decl, visitor);
4992
- }
4993
- function visitDeclaration(varDecl, visitor2) {
4994
- if (varDecl.id) {
4995
- visitor2(varDecl.id);
4996
- } else if (varDecl.arrayDestruct) {
4997
- visitArrayDestruct(varDecl.arrayDestruct, visitor2);
4998
- } else if (varDecl.objectDestruct) {
4999
- visitObjectDestruct(varDecl.objectDestruct, visitor2);
5000
- } else {
5001
- throw new Error("Unknown declaration specifier");
5002
- }
5003
- }
5004
- function visitArrayDestruct(arrayD, visitor2) {
5005
- for (let i = 0; i < arrayD.length; i++) {
5006
- const arrDecl = arrayD[i];
5007
- if (arrDecl.id) {
5008
- visitor2(arrDecl.id);
5009
- } else if (arrDecl.arrayDestruct) {
5010
- visitArrayDestruct(arrDecl.arrayDestruct, visitor2);
5011
- } else if (arrDecl.objectDestruct) {
5012
- visitObjectDestruct(arrDecl.objectDestruct, visitor2);
5013
- }
5014
- }
5015
- }
5016
- function visitObjectDestruct(objectD, visitor2) {
5017
- for (let i = 0; i < objectD.length; i++) {
5018
- const objDecl = objectD[i];
5019
- if (objDecl.arrayDestruct) {
5020
- visitArrayDestruct(objDecl.arrayDestruct, visitor2);
5021
- } else if (objDecl.objectDestruct) {
5022
- visitObjectDestruct(objDecl.objectDestruct, visitor2);
5023
- } else {
5024
- visitor2(objDecl.alias ?? objDecl.id);
5025
- }
5026
- }
5027
- }
5028
- }
5029
4838
  const PARSED_MARK_PROP = "__PARSED__";
5030
- function collectCodeBehindFromSource(moduleName, source, moduleResolver, moduleNameResolver) {
4839
+ function collectCodeBehindFromSource(moduleName, source) {
5031
4840
  const result = {
5032
4841
  vars: {},
5033
4842
  moduleErrors: {},
5034
4843
  functions: {}
5035
4844
  };
5036
4845
  const collectedFunctions = {};
5037
- const parsedModule = parseScriptModule(moduleName, source, moduleResolver, true);
4846
+ const parsedModule = parseScriptModule(moduleName, source);
5038
4847
  if (isModuleErrors(parsedModule)) {
5039
4848
  return { ...result, moduleErrors: parsedModule };
5040
4849
  }
5041
- const mainModuleResolvedName = moduleNameResolver(parsedModule.name);
5042
4850
  parsedModule.statements.forEach((stmt) => {
5043
4851
  switch (stmt.type) {
5044
- case "VarS":
5045
- stmt.declarations.forEach((decl) => {
5046
- if (decl.id in result.vars) {
5047
- throw new Error(`Duplicated var declaration: '${decl.id}'`);
4852
+ case T_VAR_STATEMENT:
4853
+ stmt.decls.forEach((decl) => {
4854
+ if (decl.id.name in result.vars) {
4855
+ throw new Error(`Duplicated var declaration: '${decl.id.name}'`);
5048
4856
  }
5049
- result.vars[decl.id] = {
4857
+ result.vars[decl.id.name] = {
5050
4858
  [PARSED_MARK_PROP]: true,
5051
- source: decl.expression.source,
5052
- tree: decl.expression
4859
+ tree: decl.expr
5053
4860
  };
5054
4861
  });
5055
4862
  break;
5056
- case "FuncD":
5057
- addFunctionDeclaration(mainModuleResolvedName, stmt);
5058
- break;
5059
- case "ImportD":
4863
+ case T_FUNCTION_DECLARATION:
4864
+ addFunctionDeclaration(stmt);
5060
4865
  break;
5061
4866
  default:
5062
4867
  throw new Error(`'${stmt.type}' is not allowed in a code-behind module.`);
5063
4868
  }
5064
4869
  });
5065
- collectFuncs(parsedModule);
5066
4870
  return result;
5067
- function collectFuncs(currentModule) {
5068
- var _a;
5069
- const resolvedModuleName = moduleNameResolver(currentModule.name);
5070
- if ((_a = collectedFunctions == null ? void 0 : collectedFunctions[resolvedModuleName]) == null ? void 0 : _a.collectedImportsFrom) {
5071
- return;
5072
- }
5073
- for (const modName in currentModule.imports) {
5074
- const resolvedImportedModuleName = moduleNameResolver(modName);
5075
- const mod = currentModule.imports[modName];
5076
- for (const obj of Object.values(mod)) {
5077
- if (obj.type === "FuncD") {
5078
- addFunctionDeclaration(resolvedImportedModuleName, obj);
5079
- }
5080
- }
5081
- }
5082
- collectedFunctions[resolvedModuleName] ?? (collectedFunctions[resolvedModuleName] = { collectedImportsFrom: true });
5083
- collectedFunctions[resolvedModuleName].collectedImportsFrom = true;
5084
- for (let nextModule of currentModule.importedModules) {
5085
- collectFuncs(nextModule);
5086
- }
5087
- }
5088
- function addFunctionDeclaration(resolvedModuleName, stmt) {
5089
- var _a2, _b, _c, _d;
5090
- var _a;
5091
- if (((_b = (_a2 = collectedFunctions == null ? void 0 : collectedFunctions[resolvedModuleName]) == null ? void 0 : _a2.functions) == null ? void 0 : _b[stmt.name]) !== void 0) {
4871
+ function addFunctionDeclaration(stmt) {
4872
+ if ((collectedFunctions == null ? void 0 : collectedFunctions[stmt.id.name]) !== void 0) {
5092
4873
  return;
5093
4874
  }
5094
- if (stmt.name in result.functions) {
5095
- throw new Error(`Duplicated function declaration: '${stmt.name}'`);
4875
+ if (stmt.id.name in result.functions) {
4876
+ throw new Error(`Duplicated function declaration: '${stmt.id.name}'`);
5096
4877
  }
5097
- const funcSource = stmt.args.length === 1 ? `${stmt.args[0].source} => ${stmt.statement.source}` : `(${stmt.args.map((a) => a.source).join(", ")}) => ${stmt.statement.source}`;
5098
4878
  const arrow = {
5099
- type: "ArrowE",
4879
+ type: T_ARROW_EXPRESSION,
5100
4880
  args: stmt.args.slice(),
5101
- statement: stmt.statement,
5102
- closureContext: obtainClosures({
5103
- blocks: [{ vars: {} }]
5104
- })
4881
+ statement: stmt.stmt
4882
+ // closureContext: obtainClosures({
4883
+ // childThreads: [],
4884
+ // blocks: [{ vars: {} }],
4885
+ // loops: [],
4886
+ // breakLabelValue: -1,
4887
+ // }),
5105
4888
  };
5106
- const functionSelf = (_d = (_c = arrow.closureContext[0]) == null ? void 0 : _c.vars) == null ? void 0 : _d[stmt.name];
5107
- if (functionSelf == null ? void 0 : functionSelf.closureContext) {
5108
- delete functionSelf.closureContext;
5109
- }
5110
- collectedFunctions[resolvedModuleName] ?? (collectedFunctions[resolvedModuleName] = { functions: {}, collectedImportsFrom: false });
5111
- (_a = collectedFunctions[resolvedModuleName]).functions ?? (_a.functions = {});
5112
- collectedFunctions[resolvedModuleName].functions[stmt.name] = {
4889
+ collectedFunctions[stmt.id.name] = {
5113
4890
  [PARSED_MARK_PROP]: true,
5114
- source: funcSource,
5115
4891
  tree: arrow
5116
4892
  };
5117
- result.functions[stmt.name] = {
4893
+ result.functions[stmt.id.name] = {
5118
4894
  [PARSED_MARK_PROP]: true,
5119
- source: funcSource,
5120
4895
  tree: arrow
5121
4896
  };
5122
4897
  }
@@ -5138,12 +4913,6 @@ function removeCodeBehindTokensFromTree(declarations) {
5138
4913
  const nodeVisitor = (before, visited, state2) => {
5139
4914
  if (before) {
5140
4915
  if (visited) {
5141
- delete visited.startPosition;
5142
- delete visited.endPosition;
5143
- delete visited.startLine;
5144
- delete visited.endLine;
5145
- delete visited.startColumn;
5146
- delete visited.endColumn;
5147
4916
  delete visited.startToken;
5148
4917
  delete visited.endToken;
5149
4918
  }
@@ -5226,7 +4995,7 @@ const HelperNode = {
5226
4995
  item: "item",
5227
4996
  field: "field"
5228
4997
  };
5229
- function nodeToComponentDef(node, originalGetText, fileId, moduleResolver = () => "") {
4998
+ function nodeToComponentDef(node, originalGetText, fileId) {
5230
4999
  const getText = (node2) => {
5231
5000
  return node2.text ?? originalGetText(node2);
5232
5001
  };
@@ -5256,7 +5025,7 @@ function nodeToComponentDef(node, originalGetText, fileId, moduleResolver = () =
5256
5025
  function transformInnerElement(usesStack2, node2) {
5257
5026
  const name = getNamespaceResolvedComponentName(node2, getText, namespaceStack);
5258
5027
  if (name === COMPOUND_COMP_ID) {
5259
- reportError("T006");
5028
+ reportError$1("T006");
5260
5029
  }
5261
5030
  let component = {
5262
5031
  type: name,
@@ -5275,10 +5044,10 @@ function nodeToComponentDef(node, originalGetText, fileId, moduleResolver = () =
5275
5044
  const attrs = getAttributes(node2).map(segmentAttr);
5276
5045
  const compoundName = attrs.find((attr) => attr.name === "name");
5277
5046
  if (!compoundName) {
5278
- reportError("T003");
5047
+ reportError$1("T003");
5279
5048
  }
5280
5049
  if (!UCRegex.test(compoundName.value)) {
5281
- reportError("T004");
5050
+ reportError$1("T004");
5282
5051
  }
5283
5052
  let api;
5284
5053
  const apiAttrs = attrs.filter((attr) => attr.startSegment === "method");
@@ -5325,10 +5094,7 @@ function nodeToComponentDef(node, originalGetText, fileId, moduleResolver = () =
5325
5094
  attrs.filter((attr) => attr.namespace === "xmlns").forEach((attr) => {
5326
5095
  addToNamespaces(namespaceStack, element2, attr.unsegmentedName, attr.value);
5327
5096
  });
5328
- let nestedComponent = transformInnerElement(
5329
- usesStack,
5330
- element2
5331
- );
5097
+ let nestedComponent = transformInnerElement(usesStack, element2);
5332
5098
  namespaceStack.pop();
5333
5099
  const component = {
5334
5100
  name: compoundName.value,
@@ -5370,7 +5136,7 @@ function nodeToComponentDef(node, originalGetText, fileId, moduleResolver = () =
5370
5136
  childNodes.forEach((child) => {
5371
5137
  if (child.kind === SyntaxKind.Script) {
5372
5138
  if (getAttributes(child).length > 0) {
5373
- reportError("T022");
5139
+ reportError$1("T022");
5374
5140
  }
5375
5141
  const scriptText = getText(child);
5376
5142
  const scriptContent = scriptText.slice(
@@ -5440,7 +5206,7 @@ function nodeToComponentDef(node, originalGetText, fileId, moduleResolver = () =
5440
5206
  },
5441
5207
  (name) => {
5442
5208
  if (onPrefixRegex.test(name)) {
5443
- reportError("T008", name);
5209
+ reportError$1("T008", name);
5444
5210
  }
5445
5211
  }
5446
5212
  );
@@ -5483,7 +5249,7 @@ function nodeToComponentDef(node, originalGetText, fileId, moduleResolver = () =
5483
5249
  );
5484
5250
  return;
5485
5251
  default:
5486
- reportError("T009", childName);
5252
+ reportError$1("T009", childName);
5487
5253
  return;
5488
5254
  }
5489
5255
  });
@@ -5494,12 +5260,7 @@ function nodeToComponentDef(node, originalGetText, fileId, moduleResolver = () =
5494
5260
  const parser = new Parser(comp.script);
5495
5261
  try {
5496
5262
  parser.parseStatements();
5497
- comp.scriptCollected = collectCodeBehindFromSource(
5498
- "Main",
5499
- comp.script,
5500
- moduleResolver,
5501
- (a) => a
5502
- );
5263
+ comp.scriptCollected = collectCodeBehindFromSource("Main", comp.script);
5503
5264
  } catch (err) {
5504
5265
  if (parser.errors && parser.errors.length > 0) {
5505
5266
  comp.scriptError = parser.errors;
@@ -5520,14 +5281,14 @@ function nodeToComponentDef(node, originalGetText, fileId, moduleResolver = () =
5520
5281
  const isCompound = !isComponent(comp);
5521
5282
  if (isCompound) {
5522
5283
  if (startSegment && startSegment !== "method" && startSegment !== "var") {
5523
- reportError("T021");
5284
+ reportError$1("T021");
5524
5285
  return;
5525
5286
  }
5526
5287
  if (name === "name" && !startSegment) {
5527
5288
  return;
5528
5289
  }
5529
5290
  if (!startSegment && name) {
5530
- reportError("T021", name);
5291
+ reportError$1("T021", name);
5531
5292
  }
5532
5293
  return;
5533
5294
  }
@@ -5574,7 +5335,7 @@ function nodeToComponentDef(node, originalGetText, fileId, moduleResolver = () =
5574
5335
  if (child.kind !== SyntaxKind.ElementNode) return;
5575
5336
  const childName = getComponentName(child, getText);
5576
5337
  if (childName !== "field" && childName !== "item") {
5577
- reportError("T016");
5338
+ reportError$1("T016");
5578
5339
  return;
5579
5340
  }
5580
5341
  if (childName === "field") {
@@ -5582,7 +5343,7 @@ function nodeToComponentDef(node, originalGetText, fileId, moduleResolver = () =
5582
5343
  nestedElementType = childName;
5583
5344
  result = {};
5584
5345
  } else if (nestedElementType !== childName) {
5585
- reportError("T017");
5346
+ reportError$1("T017");
5586
5347
  return;
5587
5348
  }
5588
5349
  } else if (childName === "item") {
@@ -5590,7 +5351,7 @@ function nodeToComponentDef(node, originalGetText, fileId, moduleResolver = () =
5590
5351
  nestedElementType = childName;
5591
5352
  result = [];
5592
5353
  } else if (nestedElementType !== childName) {
5593
- reportError("T017");
5354
+ reportError$1("T017");
5594
5355
  return;
5595
5356
  }
5596
5357
  }
@@ -5618,30 +5379,30 @@ function nodeToComponentDef(node, originalGetText, fileId, moduleResolver = () =
5618
5379
  const attributes = getAttributes(element2).map(segmentAttr);
5619
5380
  const attrProps = attributes.filter((attr) => propAttrs.indexOf(attr.name) >= 0);
5620
5381
  if (attributes.length > attrProps.length) {
5621
- reportError("T011", elementName);
5382
+ reportError$1("T011", elementName);
5622
5383
  return null;
5623
5384
  }
5624
5385
  const nameAttr = attrProps.find((attr) => attr.name === "name");
5625
5386
  if (allowName) {
5626
5387
  if (!(nameAttr == null ? void 0 : nameAttr.value)) {
5627
- reportError("T012", elementName);
5388
+ reportError$1("T012", elementName);
5628
5389
  return null;
5629
5390
  }
5630
5391
  } else {
5631
5392
  if (nameAttr) {
5632
- reportError("T018", elementName);
5393
+ reportError$1("T018", elementName);
5633
5394
  return null;
5634
5395
  }
5635
5396
  }
5636
5397
  const name = nameAttr == null ? void 0 : nameAttr.value;
5637
5398
  const valueAttr = attrProps.find((attr) => attr.name === "value");
5638
5399
  if (valueAttr && valueAttr.value === void 0) {
5639
- reportError("T019", elementName);
5400
+ reportError$1("T019", elementName);
5640
5401
  return null;
5641
5402
  }
5642
5403
  if (name && nestedComponents.length >= 1) {
5643
5404
  if (nestedElements.length > 0) {
5644
- reportError("T020");
5405
+ reportError$1("T020");
5645
5406
  return null;
5646
5407
  }
5647
5408
  const nestedComps = nestedComponents.map((nc) => transformInnerElement(usesStack2, nc));
@@ -5662,7 +5423,7 @@ function nodeToComponentDef(node, originalGetText, fileId, moduleResolver = () =
5662
5423
  function collectLoadersElements(usesStack2, comp, loaders) {
5663
5424
  var _a;
5664
5425
  if (!isComponent(comp)) {
5665
- reportError("T009", "loaders");
5426
+ reportError$1("T009", "loaders");
5666
5427
  return;
5667
5428
  }
5668
5429
  const children = getChildNodes(loaders);
@@ -5671,29 +5432,29 @@ function nodeToComponentDef(node, originalGetText, fileId, moduleResolver = () =
5671
5432
  }
5672
5433
  const hasAttribute = (_a = loaders.children) == null ? void 0 : _a.some((c) => c.kind === SyntaxKind.AttributeListNode);
5673
5434
  if (hasAttribute) {
5674
- reportError("T014", "attributes");
5435
+ reportError$1("T014", "attributes");
5675
5436
  return;
5676
5437
  }
5677
5438
  children.forEach((loader) => {
5678
5439
  if (loader.kind === SyntaxKind.TextNode) {
5679
- reportError("T010", "loader");
5440
+ reportError$1("T010", "loader");
5680
5441
  return;
5681
5442
  }
5682
5443
  const loaderDef = transformInnerElement(usesStack2, loader);
5683
5444
  if (!loaderDef.uid) {
5684
- reportError("T013");
5445
+ reportError$1("T013");
5685
5446
  return;
5686
5447
  }
5687
5448
  if (loaderDef.vars) {
5688
- reportError("T014", "vars");
5449
+ reportError$1("T014", "vars");
5689
5450
  return;
5690
5451
  }
5691
5452
  if (loaderDef.loaders) {
5692
- reportError("T014", "loaders");
5453
+ reportError$1("T014", "loaders");
5693
5454
  return;
5694
5455
  }
5695
5456
  if (loaderDef.uses) {
5696
- reportError("T014", "uses");
5457
+ reportError$1("T014", "uses");
5697
5458
  return;
5698
5459
  }
5699
5460
  comp.loaders ?? (comp.loaders = []);
@@ -5720,13 +5481,13 @@ function nodeToComponentDef(node, originalGetText, fileId, moduleResolver = () =
5720
5481
  }
5721
5482
  function collectUsesElements(comp, uses) {
5722
5483
  if (!isComponent(comp)) {
5723
- reportError("T009", "uses");
5484
+ reportError$1("T009", "uses");
5724
5485
  return;
5725
5486
  }
5726
5487
  const attributes = getAttributes(uses).map(segmentAttr);
5727
5488
  const valueAttr = attributes.find((attr) => attr.name === "value");
5728
5489
  if (!(valueAttr == null ? void 0 : valueAttr.value) || attributes.length !== 1) {
5729
- reportError("T015", "uses");
5490
+ reportError$1("T015", "uses");
5730
5491
  return;
5731
5492
  }
5732
5493
  comp.uses ?? (comp.uses = valueAttr.value.split(",").map((v) => v.trim()));
@@ -5741,7 +5502,7 @@ function nodeToComponentDef(node, originalGetText, fileId, moduleResolver = () =
5741
5502
  let unsegmentedName = getText(key.children[key.children.length - 1]);
5742
5503
  const segments = unsegmentedName.split(".");
5743
5504
  if (segments.length > 2) {
5744
- reportError("T007", attr, key);
5505
+ reportError$1("T007", attr, key);
5745
5506
  }
5746
5507
  let name;
5747
5508
  let startSegment;
@@ -5749,7 +5510,7 @@ function nodeToComponentDef(node, originalGetText, fileId, moduleResolver = () =
5749
5510
  startSegment = segments[0];
5750
5511
  name = segments[1];
5751
5512
  if (name.trim() === "") {
5752
- reportError("T007", attr, name);
5513
+ reportError$1("T007", attr, name);
5753
5514
  }
5754
5515
  } else {
5755
5516
  name = unsegmentedName;
@@ -6032,7 +5793,7 @@ function createTextNodeElement(textValue) {
6032
5793
  ]
6033
5794
  };
6034
5795
  }
6035
- function reportError(errorCode, ...options) {
5796
+ function reportError$1(errorCode, ...options) {
6036
5797
  let errorText = errorMessages[errorCode] ?? "Unknown error";
6037
5798
  if (options) {
6038
5799
  options.forEach((o, idx) => errorText = replace(errorText, `{${idx}}`, o.toString()));
@@ -6135,17 +5896,17 @@ function desugarQuotelessAttrs(attrs, getText) {
6135
5896
  function addToNamespaces(namespaceStack, comp, nsKey, value) {
6136
5897
  let nsCommaSeparated = value.split(":");
6137
5898
  if (nsCommaSeparated.length > 2) {
6138
- return reportError("T028", value, "Namespace cannot contain multiple ':' (colon).");
5899
+ return reportError$1("T028", value, "Namespace cannot contain multiple ':' (colon).");
6139
5900
  }
6140
5901
  let nsValue = value;
6141
5902
  if (nsCommaSeparated.length === 2) {
6142
5903
  if (nsCommaSeparated[0] != COMPONENT_NAMESPACE_SCHEME) {
6143
- return reportError("T029", value, COMPONENT_NAMESPACE_SCHEME);
5904
+ return reportError$1("T029", value, COMPONENT_NAMESPACE_SCHEME);
6144
5905
  }
6145
5906
  nsValue = nsCommaSeparated[1];
6146
5907
  }
6147
5908
  if (nsValue.includes("#")) {
6148
- return reportError("T028", nsValue, "Namespace cannot contain character '#'.");
5909
+ return reportError$1("T028", nsValue, "Namespace cannot contain character '#'.");
6149
5910
  }
6150
5911
  switch (nsValue) {
6151
5912
  case COMPONENT_NAMESPACE_SCHEME:
@@ -6160,7 +5921,7 @@ function addToNamespaces(namespaceStack, comp, nsKey, value) {
6160
5921
  }
6161
5922
  const compNamespaces = namespaceStack[namespaceStack.length - 1];
6162
5923
  if (compNamespaces.has(nsKey)) {
6163
- return reportError("T025", nsKey);
5924
+ return reportError$1("T025", nsKey);
6164
5925
  }
6165
5926
  compNamespaces.set(nsKey, nsValue);
6166
5927
  comp.namespaces ?? (comp.namespaces = {});
@@ -6168,11 +5929,11 @@ function addToNamespaces(namespaceStack, comp, nsKey, value) {
6168
5929
  }
6169
5930
  function getTopLvlElement(node, getText) {
6170
5931
  if (node.children.length !== 2) {
6171
- reportError("T001");
5932
+ reportError$1("T001");
6172
5933
  }
6173
5934
  const element = node.children[0];
6174
5935
  if (element.kind !== SyntaxKind.ElementNode) {
6175
- reportError("T001");
5936
+ reportError$1("T001");
6176
5937
  }
6177
5938
  return element;
6178
5939
  }
@@ -6189,7 +5950,7 @@ function getNamespaceResolvedComponentName(node, getText, namespaceStack) {
6189
5950
  }
6190
5951
  const namespace = getText(nameTokens[0]);
6191
5952
  if (namespaceStack.length === 0) {
6192
- reportError("T026");
5953
+ reportError$1("T026");
6193
5954
  }
6194
5955
  let resolvedNamespace = void 0;
6195
5956
  for (let i = namespaceStack.length - 1; i >= 0; --i) {
@@ -6199,7 +5960,7 @@ function getNamespaceResolvedComponentName(node, getText, namespaceStack) {
6199
5960
  }
6200
5961
  }
6201
5962
  if (resolvedNamespace === void 0) {
6202
- reportError("T027", namespace);
5963
+ reportError$1("T027", namespace);
6203
5964
  }
6204
5965
  return resolvedNamespace + "." + name;
6205
5966
  }
@@ -6452,50 +6213,89 @@ function implicitProp(name) {
6452
6213
  return implicitPropNames.includes(name);
6453
6214
  }
6454
6215
  export {
6455
- getLintSeverity as A,
6456
- LintSeverity as B,
6457
- lintApp as C,
6458
- printComponentLints as D,
6459
- lintErrorsComponent as E,
6460
- collectCodeBehindFromSource as F,
6461
- removeCodeBehindTokensFromTree as G,
6462
- COMPOUND_COMP_ID as H,
6463
- moduleFileExtension as I,
6464
- LintDiagKind as J,
6465
- lint as K,
6216
+ VariantPropsKeys as $,
6217
+ T_DO_WHILE_STATEMENT as A,
6218
+ T_WHILE_STATEMENT as B,
6219
+ T_RETURN_STATEMENT as C,
6220
+ T_IF_STATEMENT as D,
6221
+ T_CONST_STATEMENT as E,
6222
+ T_LET_STATEMENT as F,
6223
+ T_ARROW_EXPRESSION_STATEMENT as G,
6224
+ T_BLOCK_STATEMENT as H,
6225
+ T_VAR_STATEMENT as I,
6226
+ T_ASSIGNMENT_EXPRESSION as J,
6227
+ T_LITERAL as K,
6466
6228
  LinkTargetMd as L,
6467
- ParserError2 as M,
6468
- errorMessages as N,
6469
- onPrefixRegex as O,
6229
+ T_SPREAD_EXPRESSION as M,
6230
+ T_FUNCTION_INVOCATION_EXPRESSION as N,
6231
+ T_POSTFIX_OP_EXPRESSION as O,
6470
6232
  Parser as P,
6471
- CORE_NAMESPACE_VALUE as Q,
6472
- TextVariantElement as T,
6473
- UCRegex as U,
6474
- VariantPropsKeys as V,
6233
+ T_CONDITIONAL_EXPRESSION as Q,
6234
+ T_BINARY_EXPRESSION as R,
6235
+ T_UNARY_EXPRESSION as S,
6236
+ T_CALCULATED_MEMBER_ACCESS_EXPRESSION as T,
6237
+ T_OBJECT_LITERAL as U,
6238
+ T_ARRAY_LITERAL as V,
6239
+ T_SEQUENCE_EXPRESSION as W,
6240
+ T_TEMPLATE_LITERAL_EXPRESSION as X,
6241
+ T_VAR_DECLARATION as Y,
6242
+ T_DESTRUCTURE as Z,
6243
+ TextVariantElement as _,
6475
6244
  alignmentOptionValues as a,
6245
+ variantOptionsMd as a0,
6246
+ scrollAnchoringValues as a1,
6247
+ buttonThemeNames as a2,
6248
+ iconPositionNames as a3,
6249
+ buttonVariantNames as a4,
6250
+ nodeToComponentDef as a5,
6251
+ triggerPositionNames as a6,
6252
+ statusColorMd as a7,
6253
+ placementMd as a8,
6254
+ httpMethodNames as a9,
6255
+ PARSED_MARK_PROP as aa,
6256
+ layoutOptionKeys as ab,
6257
+ viewportSizeNames as ac,
6258
+ componentFileExtension as ad,
6259
+ codeBehindFileExtension as ae,
6260
+ getLintSeverity as af,
6261
+ LintSeverity as ag,
6262
+ lintApp as ah,
6263
+ printComponentLints as ai,
6264
+ lintErrorsComponent as aj,
6265
+ collectCodeBehindFromSource as ak,
6266
+ removeCodeBehindTokensFromTree as al,
6267
+ COMPOUND_COMP_ID as am,
6268
+ moduleFileExtension as an,
6269
+ LintDiagKind as ao,
6270
+ lint as ap,
6271
+ ParserError2 as aq,
6272
+ errorMessages as ar,
6273
+ UCRegex as as,
6274
+ onPrefixRegex as at,
6275
+ CORE_NAMESPACE_VALUE as au,
6476
6276
  alignmentOptionMd as b,
6477
6277
  buttonTypesMd as c,
6478
6278
  buttonThemeMd as d,
6479
6279
  buttonVariantMd as e,
6480
- obtainClosures as f,
6481
- variantOptionsMd as g,
6482
- scrollAnchoringValues as h,
6280
+ T_MEMBER_ACCESS_EXPRESSION as f,
6281
+ T_IDENTIFIER as g,
6282
+ T_PREFIX_OP_EXPRESSION as h,
6483
6283
  iconPositionMd as i,
6484
- buttonThemeNames as j,
6485
- iconPositionNames as k,
6284
+ T_FUNCTION_DECLARATION as j,
6285
+ T_ARROW_EXPRESSION as k,
6486
6286
  labelPositionMd as l,
6487
- buttonVariantNames as m,
6488
- nodeToComponentDef as n,
6287
+ createXmlUiTreeNodeId as m,
6288
+ T_EMPTY_STATEMENT as n,
6489
6289
  orientationOptionMd as o,
6490
- statusColorMd as p,
6491
- placementMd as q,
6492
- httpMethodNames as r,
6290
+ T_SWITCH_STATEMENT as p,
6291
+ T_TRY_STATEMENT as q,
6292
+ T_THROW_STATEMENT as r,
6493
6293
  sizeMd as s,
6494
- triggerPositionNames as t,
6495
- PARSED_MARK_PROP as u,
6294
+ T_FOR_OF_STATEMENT as t,
6295
+ T_FOR_IN_STATEMENT as u,
6496
6296
  validationStatusMd as v,
6497
- layoutOptionKeys as w,
6498
- viewportSizeNames as x,
6499
- componentFileExtension as y,
6500
- codeBehindFileExtension as z
6297
+ T_FOR_STATEMENT as w,
6298
+ T_EXPRESSION_STATEMENT as x,
6299
+ T_BREAK_STATEMENT as y,
6300
+ T_CONTINUE_STATEMENT as z
6501
6301
  };