json-as 1.2.3 → 1.2.5

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 (62) hide show
  1. package/.claude/settings.local.json +9 -0
  2. package/ARCHITECTURE.md +320 -0
  3. package/CONTRIBUTING.md +238 -0
  4. package/LICENSE +2 -2
  5. package/README.md +34 -2
  6. package/TODO +1 -0
  7. package/assembly/custom/chars.ts +9 -0
  8. package/assembly/deserialize/simd/string.ts +6 -41
  9. package/assembly/deserialize/simple/set.ts +169 -0
  10. package/assembly/deserialize/simple/staticarray/array.ts +37 -0
  11. package/assembly/deserialize/simple/staticarray/bool.ts +39 -0
  12. package/assembly/deserialize/simple/staticarray/float.ts +44 -0
  13. package/assembly/deserialize/simple/staticarray/integer.ts +44 -0
  14. package/assembly/deserialize/simple/staticarray/string.ts +45 -0
  15. package/assembly/deserialize/simple/staticarray/struct.ts +47 -0
  16. package/assembly/deserialize/simple/staticarray.ts +28 -0
  17. package/assembly/deserialize/swar/string.ts +6 -5
  18. package/assembly/index.ts +337 -143
  19. package/assembly/serialize/simd/string.ts +14 -17
  20. package/assembly/serialize/simple/set.ts +34 -0
  21. package/assembly/serialize/simple/staticarray.ts +30 -0
  22. package/assembly/serialize/swar/string.ts +50 -36
  23. package/assembly/test.ts +20 -38
  24. package/assembly/util/swar.ts +2 -2
  25. package/eslint.config.js +77 -0
  26. package/lib/as-bs.ts +143 -50
  27. package/package.json +18 -5
  28. package/transform/lib/builder.d.ts +87 -0
  29. package/transform/lib/builder.d.ts.map +1 -0
  30. package/transform/lib/builder.js +169 -169
  31. package/transform/lib/builder.js.map +1 -1
  32. package/transform/lib/index.d.ts +32 -0
  33. package/transform/lib/index.d.ts.map +1 -0
  34. package/transform/lib/index.js +40 -18
  35. package/transform/lib/index.js.map +1 -1
  36. package/transform/lib/linkers/alias.d.ts +12 -0
  37. package/transform/lib/linkers/alias.d.ts.map +1 -0
  38. package/transform/lib/linkers/alias.js +1 -1
  39. package/transform/lib/linkers/alias.js.map +1 -1
  40. package/transform/lib/linkers/custom.d.ts +10 -0
  41. package/transform/lib/linkers/custom.d.ts.map +1 -0
  42. package/transform/lib/linkers/imports.d.ts +3 -0
  43. package/transform/lib/linkers/imports.d.ts.map +1 -0
  44. package/transform/lib/linkers/imports.js +1 -1
  45. package/transform/lib/linkers/imports.js.map +1 -1
  46. package/transform/lib/types.d.ts +66 -0
  47. package/transform/lib/types.d.ts.map +1 -0
  48. package/transform/lib/types.js +6 -5
  49. package/transform/lib/types.js.map +1 -1
  50. package/transform/lib/util.d.ts +18 -0
  51. package/transform/lib/util.d.ts.map +1 -0
  52. package/transform/lib/util.js +4 -4
  53. package/transform/lib/util.js.map +1 -1
  54. package/transform/lib/visitor.d.ts +84 -0
  55. package/transform/lib/visitor.d.ts.map +1 -0
  56. package/transform/lib/visitor.js +76 -76
  57. package/transform/lib/visitor.js.map +1 -1
  58. package/transform/tsconfig.json +29 -2
  59. package/assembly/serialize/swar/number.ts +0 -0
  60. package/assembly/test.mask.ts +0 -87
  61. package/transform/lib/linkers/classes.js +0 -36
  62. package/transform/lib/linkers/classes.js.map +0 -1
@@ -7,7 +7,7 @@ function assert(isTruish, message = "assertion error") {
7
7
  }
8
8
  export class ASTBuilder extends Visitor {
9
9
  static build(node) {
10
- var builder = new ASTBuilder();
10
+ const builder = new ASTBuilder();
11
11
  builder.visitNode(node);
12
12
  return builder.finish();
13
13
  }
@@ -17,7 +17,7 @@ export class ASTBuilder extends Visitor {
17
17
  return this.visit(node);
18
18
  }
19
19
  visitSource(source) {
20
- var statements = source.statements;
20
+ const statements = source.statements;
21
21
  for (let i = 0, k = statements.length; i < k; ++i) {
22
22
  this.visitNodeAndTerminate(statements[i]);
23
23
  }
@@ -36,13 +36,13 @@ export class ASTBuilder extends Visitor {
36
36
  assert(false);
37
37
  }
38
38
  }
39
- visitThisExpression(node, ref) {
39
+ visitThisExpression(_node, _ref) {
40
40
  this.sb.push("this");
41
41
  }
42
42
  visitTypeName(node) {
43
43
  this.visitIdentifierExpression(node.identifier);
44
- var sb = this.sb;
45
- var current = node.next;
44
+ const sb = this.sb;
45
+ let current = node.next;
46
46
  while (current) {
47
47
  sb.push(".");
48
48
  this.visitIdentifierExpression(current.identifier);
@@ -51,10 +51,10 @@ export class ASTBuilder extends Visitor {
51
51
  }
52
52
  visitNamedTypeNode(node) {
53
53
  this.visitTypeName(node.name);
54
- var typeArguments = node.typeArguments;
54
+ const typeArguments = node.typeArguments;
55
55
  if (typeArguments) {
56
- let numTypeArguments = typeArguments.length;
57
- let sb = this.sb;
56
+ const numTypeArguments = typeArguments.length;
57
+ const sb = this.sb;
58
58
  if (numTypeArguments) {
59
59
  sb.push("<");
60
60
  this.visitTypeNode(typeArguments[0]);
@@ -69,16 +69,16 @@ export class ASTBuilder extends Visitor {
69
69
  }
70
70
  }
71
71
  visitFunctionTypeNode(node) {
72
- var isNullable = node.isNullable;
73
- var sb = this.sb;
72
+ const isNullable = node.isNullable;
73
+ const sb = this.sb;
74
74
  sb.push(isNullable ? "((" : "(");
75
- var explicitThisType = node.explicitThisType;
75
+ const explicitThisType = node.explicitThisType;
76
76
  if (explicitThisType) {
77
77
  sb.push("this: ");
78
78
  this.visitTypeNode(explicitThisType);
79
79
  }
80
- var parameters = node.parameters;
81
- var numParameters = parameters.length;
80
+ const parameters = node.parameters;
81
+ const numParameters = parameters.length;
82
82
  if (numParameters) {
83
83
  if (explicitThisType)
84
84
  sb.push(", ");
@@ -88,7 +88,7 @@ export class ASTBuilder extends Visitor {
88
88
  this.serializeParameter(parameters[i]);
89
89
  }
90
90
  }
91
- var returnType = node.returnType;
91
+ const returnType = node.returnType;
92
92
  if (returnType) {
93
93
  sb.push(") => ");
94
94
  this.visitTypeNode(returnType);
@@ -101,12 +101,12 @@ export class ASTBuilder extends Visitor {
101
101
  }
102
102
  visitTypeParameter(node) {
103
103
  this.visitIdentifierExpression(node.name);
104
- var extendsType = node.extendsType;
104
+ const extendsType = node.extendsType;
105
105
  if (extendsType) {
106
106
  this.sb.push(" extends ");
107
107
  this.visitTypeNode(extendsType);
108
108
  }
109
- var defaultType = node.defaultType;
109
+ const defaultType = node.defaultType;
110
110
  if (defaultType) {
111
111
  this.sb.push("=");
112
112
  this.visitTypeNode(defaultType);
@@ -119,10 +119,10 @@ export class ASTBuilder extends Visitor {
119
119
  this.sb.push(node.text);
120
120
  }
121
121
  visitArrayLiteralExpression(node) {
122
- var sb = this.sb;
122
+ const sb = this.sb;
123
123
  sb.push("[");
124
- var elements = node.elementExpressions;
125
- var numElements = elements.length;
124
+ const elements = node.elementExpressions;
125
+ const numElements = elements.length;
126
126
  if (numElements) {
127
127
  let element = elements[0];
128
128
  if (element)
@@ -137,10 +137,10 @@ export class ASTBuilder extends Visitor {
137
137
  sb.push("]");
138
138
  }
139
139
  visitObjectLiteralExpression(node) {
140
- var sb = this.sb;
141
- var names = node.names;
142
- var values = node.values;
143
- var numElements = names.length;
140
+ const sb = this.sb;
141
+ const names = node.names;
142
+ const values = node.values;
143
+ const numElements = names.length;
144
144
  assert(numElements == values.length);
145
145
  if (numElements) {
146
146
  sb.push("{\n");
@@ -151,8 +151,8 @@ export class ASTBuilder extends Visitor {
151
151
  for (let i = 1; i < numElements; ++i) {
152
152
  sb.push(",\n");
153
153
  util.indent(sb, this.indentLevel);
154
- let name = names[i];
155
- let value = values[i];
154
+ const name = names[i];
155
+ const value = values[i];
156
156
  if (name == value) {
157
157
  this.visitNode(name);
158
158
  }
@@ -171,7 +171,7 @@ export class ASTBuilder extends Visitor {
171
171
  }
172
172
  }
173
173
  visitAssertionExpression(node) {
174
- var sb = this.sb;
174
+ const sb = this.sb;
175
175
  switch (node.assertionKind) {
176
176
  case 0: {
177
177
  sb.push("<");
@@ -203,7 +203,7 @@ export class ASTBuilder extends Visitor {
203
203
  }
204
204
  }
205
205
  visitBinaryExpression(node) {
206
- var sb = this.sb;
206
+ const sb = this.sb;
207
207
  this.visitNode(node.left);
208
208
  sb.push(" ");
209
209
  sb.push(operatorTokenToString(node.operator));
@@ -215,9 +215,9 @@ export class ASTBuilder extends Visitor {
215
215
  this.visitArguments(node.typeArguments, node.args);
216
216
  }
217
217
  visitArguments(typeArguments, args) {
218
- var sb = this.sb;
218
+ const sb = this.sb;
219
219
  if (typeArguments) {
220
- let numTypeArguments = typeArguments.length;
220
+ const numTypeArguments = typeArguments.length;
221
221
  if (numTypeArguments) {
222
222
  sb.push("<");
223
223
  this.visitTypeNode(typeArguments[0]);
@@ -231,7 +231,7 @@ export class ASTBuilder extends Visitor {
231
231
  else {
232
232
  sb.push("(");
233
233
  }
234
- var numArgs = args.length;
234
+ const numArgs = args.length;
235
235
  if (numArgs) {
236
236
  this.visitNode(args[0]);
237
237
  for (let i = 1; i < numArgs; ++i) {
@@ -242,28 +242,28 @@ export class ASTBuilder extends Visitor {
242
242
  sb.push(")");
243
243
  }
244
244
  visitClassExpression(node) {
245
- var declaration = node.declaration;
245
+ const declaration = node.declaration;
246
246
  this.visitClassDeclaration(declaration);
247
247
  }
248
248
  visitCommaExpression(node) {
249
- var expressions = node.expressions;
250
- var numExpressions = expressions.length;
249
+ const expressions = node.expressions;
250
+ const numExpressions = expressions.length;
251
251
  this.visitNode(expressions[0]);
252
- var sb = this.sb;
252
+ const sb = this.sb;
253
253
  for (let i = 1; i < numExpressions; ++i) {
254
254
  sb.push(",");
255
255
  this.visitNode(expressions[i]);
256
256
  }
257
257
  }
258
258
  visitElementAccessExpression(node) {
259
- var sb = this.sb;
259
+ const sb = this.sb;
260
260
  this.visitNode(node.expression);
261
261
  sb.push("[");
262
262
  this.visitNode(node.elementExpression);
263
263
  sb.push("]");
264
264
  }
265
265
  visitFunctionExpression(node) {
266
- var declaration = node.declaration;
266
+ const declaration = node.declaration;
267
267
  if (!declaration.arrowKind) {
268
268
  if (declaration.name.text.length) {
269
269
  this.sb.push("function ");
@@ -325,15 +325,15 @@ export class ASTBuilder extends Visitor {
325
325
  this.sb.push(i64_to_string(node.value));
326
326
  }
327
327
  visitStringLiteral(str) {
328
- var sb = this.sb;
328
+ const sb = this.sb;
329
329
  sb.push('"');
330
330
  this.visitRawString(str, 34);
331
331
  sb.push('"');
332
332
  }
333
333
  visitRawString(str, quote) {
334
- var sb = this.sb;
335
- var off = 0;
336
- var i = 0;
334
+ const sb = this.sb;
335
+ let off = 0;
336
+ let i = 0;
337
337
  for (let k = str.length; i < k;) {
338
338
  switch (str.charCodeAt(i)) {
339
339
  case 0: {
@@ -343,7 +343,7 @@ export class ASTBuilder extends Visitor {
343
343
  off = ++i;
344
344
  break;
345
345
  }
346
- case 92: {
346
+ case 8: {
347
347
  if (i > off)
348
348
  sb.push(str.substring(off, i));
349
349
  off = ++i;
@@ -441,10 +441,10 @@ export class ASTBuilder extends Visitor {
441
441
  this.visitStringLiteral(node.value);
442
442
  }
443
443
  visitTemplateLiteralExpression(node) {
444
- var sb = this.sb;
445
- var tag = node.tag;
446
- var parts = node.parts;
447
- var expressions = node.expressions;
444
+ const sb = this.sb;
445
+ const tag = node.tag;
446
+ const parts = node.parts;
447
+ const expressions = node.expressions;
448
448
  if (tag)
449
449
  this.visitNode(tag);
450
450
  sb.push("`");
@@ -459,7 +459,7 @@ export class ASTBuilder extends Visitor {
459
459
  sb.push("`");
460
460
  }
461
461
  visitRegexpLiteralExpression(node) {
462
- var sb = this.sb;
462
+ const sb = this.sb;
463
463
  sb.push("/");
464
464
  sb.push(node.pattern);
465
465
  sb.push("/");
@@ -471,7 +471,7 @@ export class ASTBuilder extends Visitor {
471
471
  this.visitArguments(node.typeArguments, node.args);
472
472
  }
473
473
  visitParenthesizedExpression(node) {
474
- var sb = this.sb;
474
+ const sb = this.sb;
475
475
  sb.push("(");
476
476
  this.visitNode(node.expression);
477
477
  sb.push(")");
@@ -482,7 +482,7 @@ export class ASTBuilder extends Visitor {
482
482
  this.visitIdentifierExpression(node.property);
483
483
  }
484
484
  visitTernaryExpression(node) {
485
- var sb = this.sb;
485
+ const sb = this.sb;
486
486
  this.visitNode(node.condition);
487
487
  sb.push(" ? ");
488
488
  this.visitNode(node.ifThen);
@@ -513,15 +513,15 @@ export class ASTBuilder extends Visitor {
513
513
  }
514
514
  visitNodeAndTerminate(node) {
515
515
  this.visitNode(node);
516
- var sb = this.sb;
516
+ const sb = this.sb;
517
517
  if (!sb.length ||
518
518
  node.kind == 47 ||
519
519
  node.kind == 38) {
520
520
  sb.push(";\n");
521
521
  }
522
522
  else {
523
- let last = sb[sb.length - 1];
524
- let lastCharPos = last.length - 1;
523
+ const last = sb[sb.length - 1];
524
+ const lastCharPos = last.length - 1;
525
525
  if (lastCharPos >= 0 && (last.charCodeAt(lastCharPos) == 125 || last.charCodeAt(lastCharPos) == 59)) {
526
526
  sb.push("\n");
527
527
  }
@@ -531,12 +531,12 @@ export class ASTBuilder extends Visitor {
531
531
  }
532
532
  }
533
533
  visitBlockStatement(node) {
534
- var sb = this.sb;
535
- var statements = node.statements;
536
- var numStatements = statements.length;
534
+ const sb = this.sb;
535
+ const statements = node.statements;
536
+ const numStatements = statements.length;
537
537
  if (numStatements) {
538
538
  sb.push("{\n");
539
- let indentLevel = ++this.indentLevel;
539
+ const indentLevel = ++this.indentLevel;
540
540
  for (let i = 0; i < numStatements; ++i) {
541
541
  util.indent(sb, indentLevel);
542
542
  this.visitNodeAndTerminate(statements[i]);
@@ -549,7 +549,7 @@ export class ASTBuilder extends Visitor {
549
549
  }
550
550
  }
551
551
  visitBreakStatement(node) {
552
- var label = node.label;
552
+ const label = node.label;
553
553
  if (label) {
554
554
  this.sb.push("break ");
555
555
  this.visitIdentifierExpression(label);
@@ -559,7 +559,7 @@ export class ASTBuilder extends Visitor {
559
559
  }
560
560
  }
561
561
  visitContinueStatement(node) {
562
- var label = node.label;
562
+ const label = node.label;
563
563
  if (label) {
564
564
  this.sb.push("continue ");
565
565
  this.visitIdentifierExpression(label);
@@ -569,13 +569,13 @@ export class ASTBuilder extends Visitor {
569
569
  }
570
570
  }
571
571
  visitClassDeclaration(node, isDefault = false) {
572
- var decorators = node.decorators;
572
+ const decorators = node.decorators;
573
573
  if (decorators) {
574
574
  for (let i = 0, k = decorators.length; i < k; ++i) {
575
575
  this.serializeDecorator(decorators[i]);
576
576
  }
577
577
  }
578
- var sb = this.sb;
578
+ const sb = this.sb;
579
579
  if (isDefault) {
580
580
  sb.push("export default ");
581
581
  }
@@ -591,7 +591,7 @@ export class ASTBuilder extends Visitor {
591
591
  else {
592
592
  sb.push("class");
593
593
  }
594
- var typeParameters = node.typeParameters;
594
+ const typeParameters = node.typeParameters;
595
595
  if (typeParameters != null && typeParameters.length > 0) {
596
596
  sb.push("<");
597
597
  this.visitTypeParameter(typeParameters[0]);
@@ -601,14 +601,14 @@ export class ASTBuilder extends Visitor {
601
601
  }
602
602
  sb.push(">");
603
603
  }
604
- var extendsType = node.extendsType;
604
+ const extendsType = node.extendsType;
605
605
  if (extendsType) {
606
606
  sb.push(" extends ");
607
607
  this.visitTypeNode(extendsType);
608
608
  }
609
- var implementsTypes = node.implementsTypes;
609
+ const implementsTypes = node.implementsTypes;
610
610
  if (implementsTypes) {
611
- let numImplementsTypes = implementsTypes.length;
611
+ const numImplementsTypes = implementsTypes.length;
612
612
  if (numImplementsTypes) {
613
613
  sb.push(" implements ");
614
614
  this.visitTypeNode(implementsTypes[0]);
@@ -618,18 +618,18 @@ export class ASTBuilder extends Visitor {
618
618
  }
619
619
  }
620
620
  }
621
- var indexSignature = node.indexSignature;
622
- var members = node.members;
623
- var numMembers = members.length;
621
+ const indexSignature = node.indexSignature;
622
+ const members = node.members;
623
+ const numMembers = members.length;
624
624
  if (indexSignature !== null || numMembers) {
625
625
  sb.push(" {\n");
626
- let indentLevel = ++this.indentLevel;
626
+ const indentLevel = ++this.indentLevel;
627
627
  if (indexSignature) {
628
628
  util.indent(sb, indentLevel);
629
629
  this.visitNodeAndTerminate(indexSignature);
630
630
  }
631
631
  for (let i = 0, k = members.length; i < k; ++i) {
632
- let member = members[i];
632
+ const member = members[i];
633
633
  if (member.kind != 54 || member.parameterIndex < 0) {
634
634
  util.indent(sb, indentLevel);
635
635
  this.visitNodeAndTerminate(member);
@@ -643,7 +643,7 @@ export class ASTBuilder extends Visitor {
643
643
  }
644
644
  }
645
645
  visitDoStatement(node) {
646
- var sb = this.sb;
646
+ const sb = this.sb;
647
647
  sb.push("do ");
648
648
  this.visitNode(node.body);
649
649
  if (node.body.kind == 30) {
@@ -656,10 +656,10 @@ export class ASTBuilder extends Visitor {
656
656
  this.visitNode(node.condition);
657
657
  sb.push(")");
658
658
  }
659
- visitEmptyStatement(node) {
659
+ visitEmptyStatement(_node) {
660
660
  }
661
661
  visitEnumDeclaration(node, isDefault = false) {
662
- var sb = this.sb;
662
+ const sb = this.sb;
663
663
  if (isDefault) {
664
664
  sb.push("export default ");
665
665
  }
@@ -670,11 +670,11 @@ export class ASTBuilder extends Visitor {
670
670
  sb.push("const ");
671
671
  sb.push("enum ");
672
672
  this.visitIdentifierExpression(node.name);
673
- var values = node.values;
674
- var numValues = values.length;
673
+ const values = node.values;
674
+ const numValues = values.length;
675
675
  if (numValues) {
676
676
  sb.push(" {\n");
677
- let indentLevel = ++this.indentLevel;
677
+ const indentLevel = ++this.indentLevel;
678
678
  util.indent(sb, indentLevel);
679
679
  this.visitEnumValueDeclaration(node.values[0]);
680
680
  for (let i = 1; i < numValues; ++i) {
@@ -692,14 +692,14 @@ export class ASTBuilder extends Visitor {
692
692
  }
693
693
  visitEnumValueDeclaration(node) {
694
694
  this.visitIdentifierExpression(node.name);
695
- var initializer = node.initializer;
695
+ const initializer = node.initializer;
696
696
  if (initializer) {
697
697
  this.sb.push(" = ");
698
698
  this.visitNode(initializer);
699
699
  }
700
700
  }
701
701
  visitExportImportStatement(node) {
702
- var sb = this.sb;
702
+ const sb = this.sb;
703
703
  sb.push("export import ");
704
704
  this.visitIdentifierExpression(node.externalName);
705
705
  sb.push(" = ");
@@ -713,18 +713,18 @@ export class ASTBuilder extends Visitor {
713
713
  }
714
714
  }
715
715
  visitExportStatement(node) {
716
- var sb = this.sb;
716
+ const sb = this.sb;
717
717
  if (node.isDeclare) {
718
718
  sb.push("declare ");
719
719
  }
720
- var members = node.members;
720
+ const members = node.members;
721
721
  if (members == null) {
722
722
  sb.push("export *");
723
723
  }
724
724
  else if (members.length > 0) {
725
- let numMembers = members.length;
725
+ const numMembers = members.length;
726
726
  sb.push("export {\n");
727
- let indentLevel = ++this.indentLevel;
727
+ const indentLevel = ++this.indentLevel;
728
728
  util.indent(sb, indentLevel);
729
729
  this.visitExportMember(members[0]);
730
730
  for (let i = 1; i < numMembers; ++i) {
@@ -738,7 +738,7 @@ export class ASTBuilder extends Visitor {
738
738
  else {
739
739
  sb.push("export {}");
740
740
  }
741
- var path = node.path;
741
+ const path = node.path;
742
742
  if (path) {
743
743
  sb.push(" from ");
744
744
  this.visitStringLiteralExpression(path);
@@ -746,7 +746,7 @@ export class ASTBuilder extends Visitor {
746
746
  sb.push(";");
747
747
  }
748
748
  visitExportDefaultStatement(node) {
749
- var declaration = node.declaration;
749
+ const declaration = node.declaration;
750
750
  switch (declaration.kind) {
751
751
  case 52: {
752
752
  this.visitEnumDeclaration(declaration, true);
@@ -776,7 +776,7 @@ export class ASTBuilder extends Visitor {
776
776
  this.visitNode(node.expression);
777
777
  }
778
778
  visitFieldDeclaration(node) {
779
- var decorators = node.decorators;
779
+ const decorators = node.decorators;
780
780
  if (decorators) {
781
781
  for (let i = 0, k = decorators.length; i < k; ++i) {
782
782
  this.serializeDecorator(decorators[i]);
@@ -784,29 +784,29 @@ export class ASTBuilder extends Visitor {
784
784
  }
785
785
  this.serializeAccessModifiers(node);
786
786
  this.visitIdentifierExpression(node.name);
787
- var sb = this.sb;
787
+ const sb = this.sb;
788
788
  if (node.flags & 16384) {
789
789
  sb.push("!");
790
790
  }
791
- var type = node.type;
791
+ const type = node.type;
792
792
  if (type) {
793
793
  sb.push(": ");
794
794
  this.visitTypeNode(type);
795
795
  }
796
- var initializer = node.initializer;
796
+ const initializer = node.initializer;
797
797
  if (initializer) {
798
798
  sb.push(" = ");
799
799
  this.visitNode(initializer);
800
800
  }
801
801
  }
802
802
  visitForStatement(node) {
803
- var sb = this.sb;
803
+ const sb = this.sb;
804
804
  sb.push("for (");
805
- var initializer = node.initializer;
805
+ const initializer = node.initializer;
806
806
  if (initializer) {
807
807
  this.visitNode(initializer);
808
808
  }
809
- var condition = node.condition;
809
+ const condition = node.condition;
810
810
  if (condition) {
811
811
  sb.push("; ");
812
812
  this.visitNode(condition);
@@ -814,7 +814,7 @@ export class ASTBuilder extends Visitor {
814
814
  else {
815
815
  sb.push(";");
816
816
  }
817
- var incrementor = node.incrementor;
817
+ const incrementor = node.incrementor;
818
818
  if (incrementor) {
819
819
  sb.push("; ");
820
820
  this.visitNode(incrementor);
@@ -826,7 +826,7 @@ export class ASTBuilder extends Visitor {
826
826
  this.visitNode(node.body);
827
827
  }
828
828
  visitForOfStatement(node) {
829
- var sb = this.sb;
829
+ const sb = this.sb;
830
830
  sb.push("for (");
831
831
  this.visitNode(node.variable);
832
832
  sb.push(" of ");
@@ -835,8 +835,8 @@ export class ASTBuilder extends Visitor {
835
835
  this.visitNode(node.body);
836
836
  }
837
837
  visitFunctionDeclaration(node, isDefault = false) {
838
- var sb = this.sb;
839
- var decorators = node.decorators;
838
+ const sb = this.sb;
839
+ const decorators = node.decorators;
840
840
  if (decorators) {
841
841
  for (let i = 0, k = decorators.length; i < k; ++i) {
842
842
  this.serializeDecorator(decorators[i]);
@@ -858,12 +858,12 @@ export class ASTBuilder extends Visitor {
858
858
  this.visitFunctionCommon(node);
859
859
  }
860
860
  visitFunctionCommon(node) {
861
- var sb = this.sb;
861
+ const sb = this.sb;
862
862
  this.visitIdentifierExpression(node.name);
863
- var signature = node.signature;
864
- var typeParameters = node.typeParameters;
863
+ const signature = node.signature;
864
+ const typeParameters = node.typeParameters;
865
865
  if (typeParameters) {
866
- let numTypeParameters = typeParameters.length;
866
+ const numTypeParameters = typeParameters.length;
867
867
  if (numTypeParameters) {
868
868
  sb.push("<");
869
869
  this.visitTypeParameter(typeParameters[0]);
@@ -875,16 +875,16 @@ export class ASTBuilder extends Visitor {
875
875
  }
876
876
  }
877
877
  if (node.arrowKind == 2) {
878
- let parameters = signature.parameters;
878
+ const parameters = signature.parameters;
879
879
  assert(parameters.length == 1);
880
880
  assert(!signature.explicitThisType);
881
881
  this.serializeParameter(parameters[0]);
882
882
  }
883
883
  else {
884
884
  sb.push("(");
885
- let parameters = signature.parameters;
886
- let numParameters = parameters.length;
887
- let explicitThisType = signature.explicitThisType;
885
+ const parameters = signature.parameters;
886
+ const numParameters = parameters.length;
887
+ const explicitThisType = signature.explicitThisType;
888
888
  if (explicitThisType) {
889
889
  sb.push("this: ");
890
890
  this.visitTypeNode(explicitThisType);
@@ -899,8 +899,8 @@ export class ASTBuilder extends Visitor {
899
899
  }
900
900
  }
901
901
  }
902
- var body = node.body;
903
- var returnType = signature.returnType;
902
+ const body = node.body;
903
+ const returnType = signature.returnType;
904
904
  if (node.arrowKind) {
905
905
  if (body) {
906
906
  if (node.arrowKind == 2) {
@@ -939,16 +939,16 @@ export class ASTBuilder extends Visitor {
939
939
  }
940
940
  }
941
941
  visitIfStatement(node) {
942
- var sb = this.sb;
942
+ const sb = this.sb;
943
943
  sb.push("if (");
944
944
  this.visitNode(node.condition);
945
945
  sb.push(") ");
946
- var ifTrue = node.ifTrue;
946
+ const ifTrue = node.ifTrue;
947
947
  this.visitNode(ifTrue);
948
948
  if (ifTrue.kind != 30) {
949
949
  sb.push(";\n");
950
950
  }
951
- var ifFalse = node.ifFalse;
951
+ const ifFalse = node.ifFalse;
952
952
  if (ifFalse) {
953
953
  if (ifTrue.kind == 30) {
954
954
  sb.push(" else ");
@@ -960,8 +960,8 @@ export class ASTBuilder extends Visitor {
960
960
  }
961
961
  }
962
962
  visitImportDeclaration(node) {
963
- var externalName = node.foreignName;
964
- var name = node.name;
963
+ const externalName = node.foreignName;
964
+ const name = node.name;
965
965
  this.visitIdentifierExpression(externalName);
966
966
  if (externalName.text != name.text) {
967
967
  this.sb.push(" as ");
@@ -969,15 +969,15 @@ export class ASTBuilder extends Visitor {
969
969
  }
970
970
  }
971
971
  visitImportStatement(node) {
972
- var sb = this.sb;
972
+ const sb = this.sb;
973
973
  sb.push("import ");
974
- var declarations = node.declarations;
975
- var namespaceName = node.namespaceName;
974
+ const declarations = node.declarations;
975
+ const namespaceName = node.namespaceName;
976
976
  if (declarations) {
977
- let numDeclarations = declarations.length;
977
+ const numDeclarations = declarations.length;
978
978
  if (numDeclarations) {
979
979
  sb.push("{\n");
980
- let indentLevel = ++this.indentLevel;
980
+ const indentLevel = ++this.indentLevel;
981
981
  util.indent(sb, indentLevel);
982
982
  this.visitImportDeclaration(declarations[0]);
983
983
  for (let i = 1; i < numDeclarations; ++i) {
@@ -1000,20 +1000,20 @@ export class ASTBuilder extends Visitor {
1000
1000
  this.visitStringLiteralExpression(node.path);
1001
1001
  }
1002
1002
  visitIndexSignature(node) {
1003
- var sb = this.sb;
1003
+ const sb = this.sb;
1004
1004
  sb.push("[key: ");
1005
1005
  this.visitTypeNode(node.keyType);
1006
1006
  sb.push("]: ");
1007
1007
  this.visitTypeNode(node.valueType);
1008
1008
  }
1009
1009
  visitInterfaceDeclaration(node, isDefault = false) {
1010
- var decorators = node.decorators;
1010
+ const decorators = node.decorators;
1011
1011
  if (decorators) {
1012
1012
  for (let i = 0, k = decorators.length; i < k; ++i) {
1013
1013
  this.serializeDecorator(decorators[i]);
1014
1014
  }
1015
1015
  }
1016
- var sb = this.sb;
1016
+ const sb = this.sb;
1017
1017
  if (isDefault) {
1018
1018
  sb.push("export default ");
1019
1019
  }
@@ -1022,7 +1022,7 @@ export class ASTBuilder extends Visitor {
1022
1022
  }
1023
1023
  sb.push("interface ");
1024
1024
  this.visitIdentifierExpression(node.name);
1025
- var typeParameters = node.typeParameters;
1025
+ const typeParameters = node.typeParameters;
1026
1026
  if (typeParameters != null && typeParameters.length > 0) {
1027
1027
  sb.push("<");
1028
1028
  this.visitTypeParameter(typeParameters[0]);
@@ -1032,14 +1032,14 @@ export class ASTBuilder extends Visitor {
1032
1032
  }
1033
1033
  sb.push(">");
1034
1034
  }
1035
- var extendsType = node.extendsType;
1035
+ const extendsType = node.extendsType;
1036
1036
  if (extendsType) {
1037
1037
  sb.push(" extends ");
1038
1038
  this.visitTypeNode(extendsType);
1039
1039
  }
1040
1040
  sb.push(" {\n");
1041
- var indentLevel = ++this.indentLevel;
1042
- var members = node.members;
1041
+ const indentLevel = ++this.indentLevel;
1042
+ const members = node.members;
1043
1043
  for (let i = 0, k = members.length; i < k; ++i) {
1044
1044
  util.indent(sb, indentLevel);
1045
1045
  this.visitNodeAndTerminate(members[i]);
@@ -1048,7 +1048,7 @@ export class ASTBuilder extends Visitor {
1048
1048
  sb.push("}");
1049
1049
  }
1050
1050
  visitMethodDeclaration(node) {
1051
- var decorators = node.decorators;
1051
+ const decorators = node.decorators;
1052
1052
  if (decorators) {
1053
1053
  for (let i = 0, k = decorators.length; i < k; ++i) {
1054
1054
  this.serializeDecorator(decorators[i]);
@@ -1064,13 +1064,13 @@ export class ASTBuilder extends Visitor {
1064
1064
  this.visitFunctionCommon(node);
1065
1065
  }
1066
1066
  visitNamespaceDeclaration(node, isDefault = false) {
1067
- var decorators = node.decorators;
1067
+ const decorators = node.decorators;
1068
1068
  if (decorators) {
1069
1069
  for (let i = 0, k = decorators.length; i < k; ++i) {
1070
1070
  this.serializeDecorator(decorators[i]);
1071
1071
  }
1072
1072
  }
1073
- var sb = this.sb;
1073
+ const sb = this.sb;
1074
1074
  if (isDefault) {
1075
1075
  sb.push("export default ");
1076
1076
  }
@@ -1079,11 +1079,11 @@ export class ASTBuilder extends Visitor {
1079
1079
  }
1080
1080
  sb.push("namespace ");
1081
1081
  this.visitIdentifierExpression(node.name);
1082
- var members = node.members;
1083
- var numMembers = members.length;
1082
+ const members = node.members;
1083
+ const numMembers = members.length;
1084
1084
  if (numMembers) {
1085
1085
  sb.push(" {\n");
1086
- let indentLevel = ++this.indentLevel;
1086
+ const indentLevel = ++this.indentLevel;
1087
1087
  for (let i = 0, k = members.length; i < k; ++i) {
1088
1088
  util.indent(sb, indentLevel);
1089
1089
  this.visitNodeAndTerminate(members[i]);
@@ -1096,7 +1096,7 @@ export class ASTBuilder extends Visitor {
1096
1096
  }
1097
1097
  }
1098
1098
  visitReturnStatement(node) {
1099
- var value = node.value;
1099
+ const value = node.value;
1100
1100
  if (value) {
1101
1101
  this.sb.push("return ");
1102
1102
  this.visitNode(value);
@@ -1105,18 +1105,18 @@ export class ASTBuilder extends Visitor {
1105
1105
  this.sb.push("return");
1106
1106
  }
1107
1107
  }
1108
- visitTrueExpression(node) {
1108
+ visitTrueExpression(_node) {
1109
1109
  this.sb.push("true");
1110
1110
  }
1111
- visitFalseExpression(node) {
1111
+ visitFalseExpression(_node) {
1112
1112
  this.sb.push("false");
1113
1113
  }
1114
- visitNullExpression(node) {
1114
+ visitNullExpression(_node) {
1115
1115
  this.sb.push("null");
1116
1116
  }
1117
1117
  visitSwitchCase(node) {
1118
- var sb = this.sb;
1119
- var label = node.label;
1118
+ const sb = this.sb;
1119
+ const label = node.label;
1120
1120
  if (label) {
1121
1121
  sb.push("case ");
1122
1122
  this.visitNode(label);
@@ -1125,10 +1125,10 @@ export class ASTBuilder extends Visitor {
1125
1125
  else {
1126
1126
  sb.push("default:\n");
1127
1127
  }
1128
- var statements = node.statements;
1129
- var numStatements = statements.length;
1128
+ const statements = node.statements;
1129
+ const numStatements = statements.length;
1130
1130
  if (numStatements) {
1131
- let indentLevel = ++this.indentLevel;
1131
+ const indentLevel = ++this.indentLevel;
1132
1132
  util.indent(sb, indentLevel);
1133
1133
  this.visitNodeAndTerminate(statements[0]);
1134
1134
  for (let i = 1; i < numStatements; ++i) {
@@ -1139,12 +1139,12 @@ export class ASTBuilder extends Visitor {
1139
1139
  }
1140
1140
  }
1141
1141
  visitSwitchStatement(node) {
1142
- var sb = this.sb;
1142
+ const sb = this.sb;
1143
1143
  sb.push("switch (");
1144
1144
  this.visitNode(node.condition);
1145
1145
  sb.push(") {\n");
1146
- var indentLevel = ++this.indentLevel;
1147
- var cases = node.cases;
1146
+ const indentLevel = ++this.indentLevel;
1147
+ const cases = node.cases;
1148
1148
  for (let i = 0, k = cases.length; i < k; ++i) {
1149
1149
  util.indent(sb, indentLevel);
1150
1150
  this.visitSwitchCase(cases[i]);
@@ -1158,21 +1158,21 @@ export class ASTBuilder extends Visitor {
1158
1158
  this.visitNode(node.value);
1159
1159
  }
1160
1160
  visitTryStatement(node) {
1161
- var sb = this.sb;
1161
+ const sb = this.sb;
1162
1162
  sb.push("try {\n");
1163
- var indentLevel = ++this.indentLevel;
1164
- var statements = node.bodyStatements;
1163
+ const indentLevel = ++this.indentLevel;
1164
+ const statements = node.bodyStatements;
1165
1165
  for (let i = 0, k = statements.length; i < k; ++i) {
1166
1166
  util.indent(sb, indentLevel);
1167
1167
  this.visitNodeAndTerminate(statements[i]);
1168
1168
  }
1169
- var catchVariable = node.catchVariable;
1169
+ const catchVariable = node.catchVariable;
1170
1170
  if (catchVariable) {
1171
1171
  util.indent(sb, indentLevel - 1);
1172
1172
  sb.push("} catch (");
1173
1173
  this.visitIdentifierExpression(catchVariable);
1174
1174
  sb.push(") {\n");
1175
- let catchStatements = node.catchStatements;
1175
+ const catchStatements = node.catchStatements;
1176
1176
  if (catchStatements) {
1177
1177
  for (let i = 0, k = catchStatements.length; i < k; ++i) {
1178
1178
  util.indent(sb, indentLevel);
@@ -1180,7 +1180,7 @@ export class ASTBuilder extends Visitor {
1180
1180
  }
1181
1181
  }
1182
1182
  }
1183
- var finallyStatements = node.finallyStatements;
1183
+ const finallyStatements = node.finallyStatements;
1184
1184
  if (finallyStatements) {
1185
1185
  util.indent(sb, indentLevel - 1);
1186
1186
  sb.push("} finally {\n");
@@ -1193,19 +1193,19 @@ export class ASTBuilder extends Visitor {
1193
1193
  sb.push("}");
1194
1194
  }
1195
1195
  visitTypeDeclaration(node) {
1196
- var decorators = node.decorators;
1196
+ const decorators = node.decorators;
1197
1197
  if (decorators) {
1198
1198
  for (let i = 0, k = decorators.length; i < k; ++i) {
1199
1199
  this.serializeDecorator(decorators[i]);
1200
1200
  }
1201
1201
  }
1202
- var sb = this.sb;
1202
+ const sb = this.sb;
1203
1203
  this.serializeExternalModifiers(node);
1204
1204
  sb.push("type ");
1205
1205
  this.visitIdentifierExpression(node.name);
1206
- var typeParameters = node.typeParameters;
1206
+ const typeParameters = node.typeParameters;
1207
1207
  if (typeParameters) {
1208
- let numTypeParameters = typeParameters.length;
1208
+ const numTypeParameters = typeParameters.length;
1209
1209
  if (numTypeParameters) {
1210
1210
  sb.push("<");
1211
1211
  for (let i = 0; i < numTypeParameters; ++i) {
@@ -1219,8 +1219,8 @@ export class ASTBuilder extends Visitor {
1219
1219
  }
1220
1220
  visitVariableDeclaration(node) {
1221
1221
  this.visitIdentifierExpression(node.name);
1222
- var type = node.type;
1223
- var sb = this.sb;
1222
+ const type = node.type;
1223
+ const sb = this.sb;
1224
1224
  if (node.flags & 16384) {
1225
1225
  sb.push("!");
1226
1226
  }
@@ -1228,23 +1228,23 @@ export class ASTBuilder extends Visitor {
1228
1228
  sb.push(": ");
1229
1229
  this.visitTypeNode(type);
1230
1230
  }
1231
- var initializer = node.initializer;
1231
+ const initializer = node.initializer;
1232
1232
  if (initializer) {
1233
1233
  sb.push(" = ");
1234
1234
  this.visitNode(initializer);
1235
1235
  }
1236
1236
  }
1237
1237
  visitVariableStatement(node) {
1238
- var decorators = node.decorators;
1238
+ const decorators = node.decorators;
1239
1239
  if (decorators) {
1240
1240
  for (let i = 0, k = decorators.length; i < k; ++i) {
1241
1241
  this.serializeDecorator(decorators[i]);
1242
1242
  }
1243
1243
  }
1244
- var sb = this.sb;
1245
- var declarations = node.declarations;
1246
- var numDeclarations = declarations.length;
1247
- var firstDeclaration = declarations[0];
1244
+ const sb = this.sb;
1245
+ const declarations = node.declarations;
1246
+ const numDeclarations = declarations.length;
1247
+ const firstDeclaration = declarations[0];
1248
1248
  this.serializeExternalModifiers(firstDeclaration);
1249
1249
  sb.push(firstDeclaration.is(8) ? "const " : firstDeclaration.is(16) ? "let " : "var ");
1250
1250
  this.visitVariableDeclaration(node.declarations[0]);
@@ -1254,10 +1254,10 @@ export class ASTBuilder extends Visitor {
1254
1254
  }
1255
1255
  }
1256
1256
  visitWhileStatement(node) {
1257
- var sb = this.sb;
1257
+ const sb = this.sb;
1258
1258
  sb.push("while (");
1259
1259
  this.visitNode(node.condition);
1260
- var statement = node.body;
1260
+ const statement = node.body;
1261
1261
  if (statement.kind == 34) {
1262
1262
  sb.push(")");
1263
1263
  }
@@ -1267,13 +1267,13 @@ export class ASTBuilder extends Visitor {
1267
1267
  }
1268
1268
  }
1269
1269
  serializeDecorator(node) {
1270
- var sb = this.sb;
1270
+ const sb = this.sb;
1271
1271
  sb.push("@");
1272
1272
  this.visitNode(node.name);
1273
- var args = node.args;
1273
+ const args = node.args;
1274
1274
  if (args) {
1275
1275
  sb.push("(");
1276
- let numArgs = args.length;
1276
+ const numArgs = args.length;
1277
1277
  if (numArgs) {
1278
1278
  this.visitNode(args[0]);
1279
1279
  for (let i = 1; i < numArgs; ++i) {
@@ -1289,9 +1289,9 @@ export class ASTBuilder extends Visitor {
1289
1289
  util.indent(sb, this.indentLevel);
1290
1290
  }
1291
1291
  serializeParameter(node) {
1292
- var sb = this.sb;
1293
- var kind = node.parameterKind;
1294
- var implicitFieldDeclaration = node.implicitFieldDeclaration;
1292
+ const sb = this.sb;
1293
+ const kind = node.parameterKind;
1294
+ const implicitFieldDeclaration = node.implicitFieldDeclaration;
1295
1295
  if (implicitFieldDeclaration) {
1296
1296
  this.serializeAccessModifiers(implicitFieldDeclaration);
1297
1297
  }
@@ -1299,8 +1299,8 @@ export class ASTBuilder extends Visitor {
1299
1299
  sb.push("...");
1300
1300
  }
1301
1301
  this.visitIdentifierExpression(node.name);
1302
- var type = node.type;
1303
- var initializer = node.initializer;
1302
+ const type = node.type;
1303
+ const initializer = node.initializer;
1304
1304
  if (type) {
1305
1305
  if (kind == 1 && !initializer)
1306
1306
  sb.push("?");
@@ -1315,7 +1315,7 @@ export class ASTBuilder extends Visitor {
1315
1315
  }
1316
1316
  }
1317
1317
  serializeExternalModifiers(node) {
1318
- var sb = this.sb;
1318
+ const sb = this.sb;
1319
1319
  if (node.is(2)) {
1320
1320
  sb.push("export ");
1321
1321
  }
@@ -1327,7 +1327,7 @@ export class ASTBuilder extends Visitor {
1327
1327
  }
1328
1328
  }
1329
1329
  serializeAccessModifiers(node) {
1330
- var sb = this.sb;
1330
+ const sb = this.sb;
1331
1331
  if (node.is(256)) {
1332
1332
  sb.push("public ");
1333
1333
  }
@@ -1348,7 +1348,7 @@ export class ASTBuilder extends Visitor {
1348
1348
  }
1349
1349
  }
1350
1350
  finish() {
1351
- var ret = this.sb.join("");
1351
+ const ret = this.sb.join("");
1352
1352
  this.sb = [];
1353
1353
  return ret;
1354
1354
  }