as-test 0.4.4 → 0.5.1

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 (67) hide show
  1. package/CHANGELOG.md +46 -0
  2. package/README.md +196 -82
  3. package/as-test.config.schema.json +137 -0
  4. package/assembly/coverage.ts +19 -0
  5. package/assembly/index.ts +172 -85
  6. package/assembly/src/expectation.ts +263 -199
  7. package/assembly/src/log.ts +1 -9
  8. package/assembly/src/suite.ts +61 -25
  9. package/assembly/src/tests.ts +2 -0
  10. package/assembly/util/wipc.ts +286 -0
  11. package/bin/build.js +86 -41
  12. package/bin/index.js +337 -68
  13. package/bin/init.js +441 -183
  14. package/bin/reporter.js +1 -1
  15. package/bin/reporters/default.js +379 -0
  16. package/bin/reporters/types.js +1 -0
  17. package/bin/run.js +882 -194
  18. package/bin/types.js +14 -7
  19. package/bin/util.js +54 -3
  20. package/package.json +34 -16
  21. package/transform/lib/builder.js +169 -169
  22. package/transform/lib/builder.js.map +1 -1
  23. package/transform/lib/coverage.js +47 -1
  24. package/transform/lib/coverage.js.map +1 -1
  25. package/transform/lib/index.js +70 -0
  26. package/transform/lib/index.js.map +1 -1
  27. package/transform/lib/location.js +20 -0
  28. package/transform/lib/location.js.map +1 -0
  29. package/transform/lib/log.js +118 -0
  30. package/transform/lib/log.js.map +1 -0
  31. package/transform/lib/mock.js +2 -2
  32. package/transform/lib/mock.js.map +1 -1
  33. package/transform/lib/util.js +3 -3
  34. package/transform/lib/util.js.map +1 -1
  35. package/.github/workflows/as-test.yml +0 -26
  36. package/.prettierrc +0 -3
  37. package/as-test.config.json +0 -19
  38. package/assembly/__tests__/array.spec.ts +0 -25
  39. package/assembly/__tests__/math.spec.ts +0 -16
  40. package/assembly/__tests__/mock.spec.ts +0 -22
  41. package/assembly/__tests__/mock.ts +0 -7
  42. package/assembly/__tests__/sleep.spec.ts +0 -28
  43. package/assembly/tsconfig.json +0 -97
  44. package/assets/img/screenshot.png +0 -0
  45. package/cli/build.ts +0 -117
  46. package/cli/index.ts +0 -190
  47. package/cli/init.ts +0 -247
  48. package/cli/reporter.ts +0 -1
  49. package/cli/run.ts +0 -286
  50. package/cli/tsconfig.json +0 -9
  51. package/cli/types.ts +0 -29
  52. package/cli/util.ts +0 -65
  53. package/run/package.json +0 -27
  54. package/tests/array.run.js +0 -7
  55. package/tests/math.run.js +0 -7
  56. package/tests/mock.run.js +0 -14
  57. package/tests/sleep.run.js +0 -7
  58. package/transform/src/builder.ts +0 -1474
  59. package/transform/src/coverage.ts +0 -580
  60. package/transform/src/index.ts +0 -73
  61. package/transform/src/linker.ts +0 -41
  62. package/transform/src/mock.ts +0 -163
  63. package/transform/src/range.ts +0 -12
  64. package/transform/src/types.ts +0 -35
  65. package/transform/src/util.ts +0 -81
  66. package/transform/src/visitor.ts +0 -744
  67. package/transform/tsconfig.json +0 -10
@@ -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
  }
@@ -38,8 +38,8 @@ export class ASTBuilder extends Visitor {
38
38
  }
39
39
  visitTypeName(node) {
40
40
  this.visitIdentifierExpression(node.identifier);
41
- var sb = this.sb;
42
- var current = node.next;
41
+ const sb = this.sb;
42
+ let current = node.next;
43
43
  while (current) {
44
44
  sb.push(".");
45
45
  this.visitIdentifierExpression(current.identifier);
@@ -48,10 +48,10 @@ export class ASTBuilder extends Visitor {
48
48
  }
49
49
  visitNamedTypeNode(node) {
50
50
  this.visitTypeName(node.name);
51
- var typeArguments = node.typeArguments;
51
+ const typeArguments = node.typeArguments;
52
52
  if (typeArguments) {
53
- let numTypeArguments = typeArguments.length;
54
- let sb = this.sb;
53
+ const numTypeArguments = typeArguments.length;
54
+ const sb = this.sb;
55
55
  if (numTypeArguments) {
56
56
  sb.push("<");
57
57
  this.visitTypeNode(typeArguments[0]);
@@ -66,16 +66,16 @@ export class ASTBuilder extends Visitor {
66
66
  }
67
67
  }
68
68
  visitFunctionTypeNode(node) {
69
- var isNullable = node.isNullable;
70
- var sb = this.sb;
69
+ const isNullable = node.isNullable;
70
+ const sb = this.sb;
71
71
  sb.push(isNullable ? "((" : "(");
72
- var explicitThisType = node.explicitThisType;
72
+ const explicitThisType = node.explicitThisType;
73
73
  if (explicitThisType) {
74
74
  sb.push("this: ");
75
75
  this.visitTypeNode(explicitThisType);
76
76
  }
77
- var parameters = node.parameters;
78
- var numParameters = parameters.length;
77
+ const parameters = node.parameters;
78
+ const numParameters = parameters.length;
79
79
  if (numParameters) {
80
80
  if (explicitThisType)
81
81
  sb.push(", ");
@@ -85,7 +85,7 @@ export class ASTBuilder extends Visitor {
85
85
  this.serializeParameter(parameters[i]);
86
86
  }
87
87
  }
88
- var returnType = node.returnType;
88
+ const returnType = node.returnType;
89
89
  if (returnType) {
90
90
  sb.push(") => ");
91
91
  this.visitTypeNode(returnType);
@@ -98,12 +98,12 @@ export class ASTBuilder extends Visitor {
98
98
  }
99
99
  visitTypeParameter(node) {
100
100
  this.visitIdentifierExpression(node.name);
101
- var extendsType = node.extendsType;
101
+ const extendsType = node.extendsType;
102
102
  if (extendsType) {
103
103
  this.sb.push(" extends ");
104
104
  this.visitTypeNode(extendsType);
105
105
  }
106
- var defaultType = node.defaultType;
106
+ const defaultType = node.defaultType;
107
107
  if (defaultType) {
108
108
  this.sb.push("=");
109
109
  this.visitTypeNode(defaultType);
@@ -116,10 +116,10 @@ export class ASTBuilder extends Visitor {
116
116
  this.sb.push(node.text);
117
117
  }
118
118
  visitArrayLiteralExpression(node) {
119
- var sb = this.sb;
119
+ const sb = this.sb;
120
120
  sb.push("[");
121
- var elements = node.elementExpressions;
122
- var numElements = elements.length;
121
+ const elements = node.elementExpressions;
122
+ const numElements = elements.length;
123
123
  if (numElements) {
124
124
  let element = elements[0];
125
125
  if (element)
@@ -134,10 +134,10 @@ export class ASTBuilder extends Visitor {
134
134
  sb.push("]");
135
135
  }
136
136
  visitObjectLiteralExpression(node) {
137
- var sb = this.sb;
138
- var names = node.names;
139
- var values = node.values;
140
- var numElements = names.length;
137
+ const sb = this.sb;
138
+ const names = node.names;
139
+ const values = node.values;
140
+ const numElements = names.length;
141
141
  assert(numElements == values.length);
142
142
  if (numElements) {
143
143
  sb.push("{\n");
@@ -148,8 +148,8 @@ export class ASTBuilder extends Visitor {
148
148
  for (let i = 1; i < numElements; ++i) {
149
149
  sb.push(",\n");
150
150
  util.indent(sb, this.indentLevel);
151
- let name = names[i];
152
- let value = values[i];
151
+ const name = names[i];
152
+ const value = values[i];
153
153
  if (name == value) {
154
154
  this.visitNode(name);
155
155
  }
@@ -168,7 +168,7 @@ export class ASTBuilder extends Visitor {
168
168
  }
169
169
  }
170
170
  visitAssertionExpression(node) {
171
- var sb = this.sb;
171
+ const sb = this.sb;
172
172
  switch (node.assertionKind) {
173
173
  case 0: {
174
174
  sb.push("<");
@@ -200,7 +200,7 @@ export class ASTBuilder extends Visitor {
200
200
  }
201
201
  }
202
202
  visitBinaryExpression(node) {
203
- var sb = this.sb;
203
+ const sb = this.sb;
204
204
  this.visitNode(node.left);
205
205
  sb.push(" ");
206
206
  sb.push(operatorTokenToString(node.operator));
@@ -212,9 +212,9 @@ export class ASTBuilder extends Visitor {
212
212
  this.visitArguments(node.typeArguments, node.args);
213
213
  }
214
214
  visitArguments(typeArguments, args) {
215
- var sb = this.sb;
215
+ const sb = this.sb;
216
216
  if (typeArguments) {
217
- let numTypeArguments = typeArguments.length;
217
+ const numTypeArguments = typeArguments.length;
218
218
  if (numTypeArguments) {
219
219
  sb.push("<");
220
220
  this.visitTypeNode(typeArguments[0]);
@@ -228,7 +228,7 @@ export class ASTBuilder extends Visitor {
228
228
  else {
229
229
  sb.push("(");
230
230
  }
231
- var numArgs = args.length;
231
+ const numArgs = args.length;
232
232
  if (numArgs) {
233
233
  this.visitNode(args[0]);
234
234
  for (let i = 1; i < numArgs; ++i) {
@@ -239,28 +239,28 @@ export class ASTBuilder extends Visitor {
239
239
  sb.push(")");
240
240
  }
241
241
  visitClassExpression(node) {
242
- var declaration = node.declaration;
242
+ const declaration = node.declaration;
243
243
  this.visitClassDeclaration(declaration);
244
244
  }
245
245
  visitCommaExpression(node) {
246
- var expressions = node.expressions;
247
- var numExpressions = expressions.length;
246
+ const expressions = node.expressions;
247
+ const numExpressions = expressions.length;
248
248
  this.visitNode(expressions[0]);
249
- var sb = this.sb;
249
+ const sb = this.sb;
250
250
  for (let i = 1; i < numExpressions; ++i) {
251
251
  sb.push(",");
252
252
  this.visitNode(expressions[i]);
253
253
  }
254
254
  }
255
255
  visitElementAccessExpression(node) {
256
- var sb = this.sb;
256
+ const sb = this.sb;
257
257
  this.visitNode(node.expression);
258
258
  sb.push("[");
259
259
  this.visitNode(node.elementExpression);
260
260
  sb.push("]");
261
261
  }
262
262
  visitFunctionExpression(node) {
263
- var declaration = node.declaration;
263
+ const declaration = node.declaration;
264
264
  if (!declaration.arrowKind) {
265
265
  if (declaration.name.text.length) {
266
266
  this.sb.push("function ");
@@ -322,25 +322,25 @@ export class ASTBuilder extends Visitor {
322
322
  this.sb.push(i64_to_string(node.value));
323
323
  }
324
324
  visitStringLiteral(str) {
325
- var sb = this.sb;
325
+ const sb = this.sb;
326
326
  sb.push('"');
327
327
  this.visitRawString(str, 34);
328
328
  sb.push('"');
329
329
  }
330
330
  visitRawString(str, quote) {
331
- var sb = this.sb;
332
- var off = 0;
333
- var i = 0;
331
+ const sb = this.sb;
332
+ let off = 0;
333
+ let i = 0;
334
334
  for (let k = str.length; i < k;) {
335
335
  switch (str.charCodeAt(i)) {
336
336
  case 0: {
337
337
  if (i > off)
338
- sb.push(str.substring(off, (off = i + 1)));
338
+ sb.push(str.substring(off, i));
339
339
  sb.push("\\0");
340
340
  off = ++i;
341
341
  break;
342
342
  }
343
- case 92: {
343
+ case 8: {
344
344
  if (i > off)
345
345
  sb.push(str.substring(off, i));
346
346
  off = ++i;
@@ -438,10 +438,10 @@ export class ASTBuilder extends Visitor {
438
438
  this.visitStringLiteral(node.value);
439
439
  }
440
440
  visitTemplateLiteralExpression(node) {
441
- var sb = this.sb;
442
- var tag = node.tag;
443
- var parts = node.parts;
444
- var expressions = node.expressions;
441
+ const sb = this.sb;
442
+ const tag = node.tag;
443
+ const parts = node.parts;
444
+ const expressions = node.expressions;
445
445
  if (tag)
446
446
  this.visitNode(tag);
447
447
  sb.push("`");
@@ -456,7 +456,7 @@ export class ASTBuilder extends Visitor {
456
456
  sb.push("`");
457
457
  }
458
458
  visitRegexpLiteralExpression(node) {
459
- var sb = this.sb;
459
+ const sb = this.sb;
460
460
  sb.push("/");
461
461
  sb.push(node.pattern);
462
462
  sb.push("/");
@@ -468,7 +468,7 @@ export class ASTBuilder extends Visitor {
468
468
  this.visitArguments(node.typeArguments, node.args);
469
469
  }
470
470
  visitParenthesizedExpression(node) {
471
- var sb = this.sb;
471
+ const sb = this.sb;
472
472
  sb.push("(");
473
473
  this.visitNode(node.expression);
474
474
  sb.push(")");
@@ -479,7 +479,7 @@ export class ASTBuilder extends Visitor {
479
479
  this.visitIdentifierExpression(node.property);
480
480
  }
481
481
  visitTernaryExpression(node) {
482
- var sb = this.sb;
482
+ const sb = this.sb;
483
483
  this.visitNode(node.condition);
484
484
  sb.push(" ? ");
485
485
  this.visitNode(node.ifThen);
@@ -510,15 +510,15 @@ export class ASTBuilder extends Visitor {
510
510
  }
511
511
  visitNodeAndTerminate(node) {
512
512
  this.visitNode(node);
513
- var sb = this.sb;
513
+ const sb = this.sb;
514
514
  if (!sb.length ||
515
515
  node.kind == 47 ||
516
516
  node.kind == 38) {
517
517
  sb.push(";\n");
518
518
  }
519
519
  else {
520
- let last = sb[sb.length - 1];
521
- let lastCharPos = last.length - 1;
520
+ const last = sb[sb.length - 1];
521
+ const lastCharPos = last.length - 1;
522
522
  if (lastCharPos >= 0 &&
523
523
  (last.charCodeAt(lastCharPos) == 125 ||
524
524
  last.charCodeAt(lastCharPos) == 59)) {
@@ -530,12 +530,12 @@ export class ASTBuilder extends Visitor {
530
530
  }
531
531
  }
532
532
  visitBlockStatement(node) {
533
- var sb = this.sb;
534
- var statements = node.statements;
535
- var numStatements = statements.length;
533
+ const sb = this.sb;
534
+ const statements = node.statements;
535
+ const numStatements = statements.length;
536
536
  if (numStatements) {
537
537
  sb.push("{\n");
538
- let indentLevel = ++this.indentLevel;
538
+ const indentLevel = ++this.indentLevel;
539
539
  for (let i = 0; i < numStatements; ++i) {
540
540
  util.indent(sb, indentLevel);
541
541
  this.visitNodeAndTerminate(statements[i]);
@@ -548,7 +548,7 @@ export class ASTBuilder extends Visitor {
548
548
  }
549
549
  }
550
550
  visitBreakStatement(node) {
551
- var label = node.label;
551
+ const label = node.label;
552
552
  if (label) {
553
553
  this.sb.push("break ");
554
554
  this.visitIdentifierExpression(label);
@@ -558,7 +558,7 @@ export class ASTBuilder extends Visitor {
558
558
  }
559
559
  }
560
560
  visitContinueStatement(node) {
561
- var label = node.label;
561
+ const label = node.label;
562
562
  if (label) {
563
563
  this.sb.push("continue ");
564
564
  this.visitIdentifierExpression(label);
@@ -568,13 +568,13 @@ export class ASTBuilder extends Visitor {
568
568
  }
569
569
  }
570
570
  visitClassDeclaration(node, isDefault = false) {
571
- var decorators = node.decorators;
571
+ const decorators = node.decorators;
572
572
  if (decorators) {
573
573
  for (let i = 0, k = decorators.length; i < k; ++i) {
574
574
  this.serializeDecorator(decorators[i]);
575
575
  }
576
576
  }
577
- var sb = this.sb;
577
+ const sb = this.sb;
578
578
  if (isDefault) {
579
579
  sb.push("export default ");
580
580
  }
@@ -590,7 +590,7 @@ export class ASTBuilder extends Visitor {
590
590
  else {
591
591
  sb.push("class");
592
592
  }
593
- var typeParameters = node.typeParameters;
593
+ const typeParameters = node.typeParameters;
594
594
  if (typeParameters != null && typeParameters.length > 0) {
595
595
  sb.push("<");
596
596
  this.visitTypeParameter(typeParameters[0]);
@@ -600,14 +600,14 @@ export class ASTBuilder extends Visitor {
600
600
  }
601
601
  sb.push(">");
602
602
  }
603
- var extendsType = node.extendsType;
603
+ const extendsType = node.extendsType;
604
604
  if (extendsType) {
605
605
  sb.push(" extends ");
606
606
  this.visitTypeNode(extendsType);
607
607
  }
608
- var implementsTypes = node.implementsTypes;
608
+ const implementsTypes = node.implementsTypes;
609
609
  if (implementsTypes) {
610
- let numImplementsTypes = implementsTypes.length;
610
+ const numImplementsTypes = implementsTypes.length;
611
611
  if (numImplementsTypes) {
612
612
  sb.push(" implements ");
613
613
  this.visitTypeNode(implementsTypes[0]);
@@ -617,18 +617,18 @@ export class ASTBuilder extends Visitor {
617
617
  }
618
618
  }
619
619
  }
620
- var indexSignature = node.indexSignature;
621
- var members = node.members;
622
- var numMembers = members.length;
620
+ const indexSignature = node.indexSignature;
621
+ const members = node.members;
622
+ const numMembers = members.length;
623
623
  if (indexSignature !== null || numMembers) {
624
624
  sb.push(" {\n");
625
- let indentLevel = ++this.indentLevel;
625
+ const indentLevel = ++this.indentLevel;
626
626
  if (indexSignature) {
627
627
  util.indent(sb, indentLevel);
628
628
  this.visitNodeAndTerminate(indexSignature);
629
629
  }
630
630
  for (let i = 0, k = members.length; i < k; ++i) {
631
- let member = members[i];
631
+ const member = members[i];
632
632
  if (member.kind != 54 ||
633
633
  member.parameterIndex < 0) {
634
634
  util.indent(sb, indentLevel);
@@ -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) {
@@ -940,16 +940,16 @@ export class ASTBuilder extends Visitor {
940
940
  }
941
941
  }
942
942
  visitIfStatement(node) {
943
- var sb = this.sb;
943
+ const sb = this.sb;
944
944
  sb.push("if (");
945
945
  this.visitNode(node.condition);
946
946
  sb.push(") ");
947
- var ifTrue = node.ifTrue;
947
+ const ifTrue = node.ifTrue;
948
948
  this.visitNode(ifTrue);
949
949
  if (ifTrue.kind != 30) {
950
950
  sb.push(";\n");
951
951
  }
952
- var ifFalse = node.ifFalse;
952
+ const ifFalse = node.ifFalse;
953
953
  if (ifFalse) {
954
954
  if (ifTrue.kind == 30) {
955
955
  sb.push(" else ");
@@ -961,8 +961,8 @@ export class ASTBuilder extends Visitor {
961
961
  }
962
962
  }
963
963
  visitImportDeclaration(node) {
964
- var externalName = node.foreignName;
965
- var name = node.name;
964
+ const externalName = node.foreignName;
965
+ const name = node.name;
966
966
  this.visitIdentifierExpression(externalName);
967
967
  if (externalName.text != name.text) {
968
968
  this.sb.push(" as ");
@@ -970,15 +970,15 @@ export class ASTBuilder extends Visitor {
970
970
  }
971
971
  }
972
972
  visitImportStatement(node) {
973
- var sb = this.sb;
973
+ const sb = this.sb;
974
974
  sb.push("import ");
975
- var declarations = node.declarations;
976
- var namespaceName = node.namespaceName;
975
+ const declarations = node.declarations;
976
+ const namespaceName = node.namespaceName;
977
977
  if (declarations) {
978
- let numDeclarations = declarations.length;
978
+ const numDeclarations = declarations.length;
979
979
  if (numDeclarations) {
980
980
  sb.push("{\n");
981
- let indentLevel = ++this.indentLevel;
981
+ const indentLevel = ++this.indentLevel;
982
982
  util.indent(sb, indentLevel);
983
983
  this.visitImportDeclaration(declarations[0]);
984
984
  for (let i = 1; i < numDeclarations; ++i) {
@@ -1001,20 +1001,20 @@ export class ASTBuilder extends Visitor {
1001
1001
  this.visitStringLiteralExpression(node.path);
1002
1002
  }
1003
1003
  visitIndexSignature(node) {
1004
- var sb = this.sb;
1004
+ const sb = this.sb;
1005
1005
  sb.push("[key: ");
1006
1006
  this.visitTypeNode(node.keyType);
1007
1007
  sb.push("]: ");
1008
1008
  this.visitTypeNode(node.valueType);
1009
1009
  }
1010
1010
  visitInterfaceDeclaration(node, isDefault = false) {
1011
- var decorators = node.decorators;
1011
+ const decorators = node.decorators;
1012
1012
  if (decorators) {
1013
1013
  for (let i = 0, k = decorators.length; i < k; ++i) {
1014
1014
  this.serializeDecorator(decorators[i]);
1015
1015
  }
1016
1016
  }
1017
- var sb = this.sb;
1017
+ const sb = this.sb;
1018
1018
  if (isDefault) {
1019
1019
  sb.push("export default ");
1020
1020
  }
@@ -1023,7 +1023,7 @@ export class ASTBuilder extends Visitor {
1023
1023
  }
1024
1024
  sb.push("interface ");
1025
1025
  this.visitIdentifierExpression(node.name);
1026
- var typeParameters = node.typeParameters;
1026
+ const typeParameters = node.typeParameters;
1027
1027
  if (typeParameters != null && typeParameters.length > 0) {
1028
1028
  sb.push("<");
1029
1029
  this.visitTypeParameter(typeParameters[0]);
@@ -1033,14 +1033,14 @@ export class ASTBuilder extends Visitor {
1033
1033
  }
1034
1034
  sb.push(">");
1035
1035
  }
1036
- var extendsType = node.extendsType;
1036
+ const extendsType = node.extendsType;
1037
1037
  if (extendsType) {
1038
1038
  sb.push(" extends ");
1039
1039
  this.visitTypeNode(extendsType);
1040
1040
  }
1041
1041
  sb.push(" {\n");
1042
- var indentLevel = ++this.indentLevel;
1043
- var members = node.members;
1042
+ const indentLevel = ++this.indentLevel;
1043
+ const members = node.members;
1044
1044
  for (let i = 0, k = members.length; i < k; ++i) {
1045
1045
  util.indent(sb, indentLevel);
1046
1046
  this.visitNodeAndTerminate(members[i]);
@@ -1049,7 +1049,7 @@ export class ASTBuilder extends Visitor {
1049
1049
  sb.push("}");
1050
1050
  }
1051
1051
  visitMethodDeclaration(node) {
1052
- var decorators = node.decorators;
1052
+ const decorators = node.decorators;
1053
1053
  if (decorators) {
1054
1054
  for (let i = 0, k = decorators.length; i < k; ++i) {
1055
1055
  this.serializeDecorator(decorators[i]);
@@ -1065,13 +1065,13 @@ export class ASTBuilder extends Visitor {
1065
1065
  this.visitFunctionCommon(node);
1066
1066
  }
1067
1067
  visitNamespaceDeclaration(node, isDefault = false) {
1068
- var decorators = node.decorators;
1068
+ const decorators = node.decorators;
1069
1069
  if (decorators) {
1070
1070
  for (let i = 0, k = decorators.length; i < k; ++i) {
1071
1071
  this.serializeDecorator(decorators[i]);
1072
1072
  }
1073
1073
  }
1074
- var sb = this.sb;
1074
+ const sb = this.sb;
1075
1075
  if (isDefault) {
1076
1076
  sb.push("export default ");
1077
1077
  }
@@ -1080,11 +1080,11 @@ export class ASTBuilder extends Visitor {
1080
1080
  }
1081
1081
  sb.push("namespace ");
1082
1082
  this.visitIdentifierExpression(node.name);
1083
- var members = node.members;
1084
- var numMembers = members.length;
1083
+ const members = node.members;
1084
+ const numMembers = members.length;
1085
1085
  if (numMembers) {
1086
1086
  sb.push(" {\n");
1087
- let indentLevel = ++this.indentLevel;
1087
+ const indentLevel = ++this.indentLevel;
1088
1088
  for (let i = 0, k = members.length; i < k; ++i) {
1089
1089
  util.indent(sb, indentLevel);
1090
1090
  this.visitNodeAndTerminate(members[i]);
@@ -1097,7 +1097,7 @@ export class ASTBuilder extends Visitor {
1097
1097
  }
1098
1098
  }
1099
1099
  visitReturnStatement(node) {
1100
- var value = node.value;
1100
+ const value = node.value;
1101
1101
  if (value) {
1102
1102
  this.sb.push("return ");
1103
1103
  this.visitNode(value);
@@ -1106,18 +1106,18 @@ export class ASTBuilder extends Visitor {
1106
1106
  this.sb.push("return");
1107
1107
  }
1108
1108
  }
1109
- visitTrueExpression(node) {
1109
+ visitTrueExpression(_node) {
1110
1110
  this.sb.push("true");
1111
1111
  }
1112
- visitFalseExpression(node) {
1112
+ visitFalseExpression(_node) {
1113
1113
  this.sb.push("false");
1114
1114
  }
1115
- visitNullExpression(node) {
1115
+ visitNullExpression(_node) {
1116
1116
  this.sb.push("null");
1117
1117
  }
1118
1118
  visitSwitchCase(node) {
1119
- var sb = this.sb;
1120
- var label = node.label;
1119
+ const sb = this.sb;
1120
+ const label = node.label;
1121
1121
  if (label) {
1122
1122
  sb.push("case ");
1123
1123
  this.visitNode(label);
@@ -1126,10 +1126,10 @@ export class ASTBuilder extends Visitor {
1126
1126
  else {
1127
1127
  sb.push("default:\n");
1128
1128
  }
1129
- var statements = node.statements;
1130
- var numStatements = statements.length;
1129
+ const statements = node.statements;
1130
+ const numStatements = statements.length;
1131
1131
  if (numStatements) {
1132
- let indentLevel = ++this.indentLevel;
1132
+ const indentLevel = ++this.indentLevel;
1133
1133
  util.indent(sb, indentLevel);
1134
1134
  this.visitNodeAndTerminate(statements[0]);
1135
1135
  for (let i = 1; i < numStatements; ++i) {
@@ -1140,12 +1140,12 @@ export class ASTBuilder extends Visitor {
1140
1140
  }
1141
1141
  }
1142
1142
  visitSwitchStatement(node) {
1143
- var sb = this.sb;
1143
+ const sb = this.sb;
1144
1144
  sb.push("switch (");
1145
1145
  this.visitNode(node.condition);
1146
1146
  sb.push(") {\n");
1147
- var indentLevel = ++this.indentLevel;
1148
- var cases = node.cases;
1147
+ const indentLevel = ++this.indentLevel;
1148
+ const cases = node.cases;
1149
1149
  for (let i = 0, k = cases.length; i < k; ++i) {
1150
1150
  util.indent(sb, indentLevel);
1151
1151
  this.visitSwitchCase(cases[i]);
@@ -1159,21 +1159,21 @@ export class ASTBuilder extends Visitor {
1159
1159
  this.visitNode(node.value);
1160
1160
  }
1161
1161
  visitTryStatement(node) {
1162
- var sb = this.sb;
1162
+ const sb = this.sb;
1163
1163
  sb.push("try {\n");
1164
- var indentLevel = ++this.indentLevel;
1165
- var statements = node.bodyStatements;
1164
+ const indentLevel = ++this.indentLevel;
1165
+ const statements = node.bodyStatements;
1166
1166
  for (let i = 0, k = statements.length; i < k; ++i) {
1167
1167
  util.indent(sb, indentLevel);
1168
1168
  this.visitNodeAndTerminate(statements[i]);
1169
1169
  }
1170
- var catchVariable = node.catchVariable;
1170
+ const catchVariable = node.catchVariable;
1171
1171
  if (catchVariable) {
1172
1172
  util.indent(sb, indentLevel - 1);
1173
1173
  sb.push("} catch (");
1174
1174
  this.visitIdentifierExpression(catchVariable);
1175
1175
  sb.push(") {\n");
1176
- let catchStatements = node.catchStatements;
1176
+ const catchStatements = node.catchStatements;
1177
1177
  if (catchStatements) {
1178
1178
  for (let i = 0, k = catchStatements.length; i < k; ++i) {
1179
1179
  util.indent(sb, indentLevel);
@@ -1181,7 +1181,7 @@ export class ASTBuilder extends Visitor {
1181
1181
  }
1182
1182
  }
1183
1183
  }
1184
- var finallyStatements = node.finallyStatements;
1184
+ const finallyStatements = node.finallyStatements;
1185
1185
  if (finallyStatements) {
1186
1186
  util.indent(sb, indentLevel - 1);
1187
1187
  sb.push("} finally {\n");
@@ -1194,19 +1194,19 @@ export class ASTBuilder extends Visitor {
1194
1194
  sb.push("}");
1195
1195
  }
1196
1196
  visitTypeDeclaration(node) {
1197
- var decorators = node.decorators;
1197
+ const decorators = node.decorators;
1198
1198
  if (decorators) {
1199
1199
  for (let i = 0, k = decorators.length; i < k; ++i) {
1200
1200
  this.serializeDecorator(decorators[i]);
1201
1201
  }
1202
1202
  }
1203
- var sb = this.sb;
1203
+ const sb = this.sb;
1204
1204
  this.serializeExternalModifiers(node);
1205
1205
  sb.push("type ");
1206
1206
  this.visitIdentifierExpression(node.name);
1207
- var typeParameters = node.typeParameters;
1207
+ const typeParameters = node.typeParameters;
1208
1208
  if (typeParameters) {
1209
- let numTypeParameters = typeParameters.length;
1209
+ const numTypeParameters = typeParameters.length;
1210
1210
  if (numTypeParameters) {
1211
1211
  sb.push("<");
1212
1212
  for (let i = 0; i < numTypeParameters; ++i) {
@@ -1220,8 +1220,8 @@ export class ASTBuilder extends Visitor {
1220
1220
  }
1221
1221
  visitVariableDeclaration(node) {
1222
1222
  this.visitIdentifierExpression(node.name);
1223
- var type = node.type;
1224
- var sb = this.sb;
1223
+ const type = node.type;
1224
+ const sb = this.sb;
1225
1225
  if (node.flags & 16384) {
1226
1226
  sb.push("!");
1227
1227
  }
@@ -1229,23 +1229,23 @@ export class ASTBuilder extends Visitor {
1229
1229
  sb.push(": ");
1230
1230
  this.visitTypeNode(type);
1231
1231
  }
1232
- var initializer = node.initializer;
1232
+ const initializer = node.initializer;
1233
1233
  if (initializer) {
1234
1234
  sb.push(" = ");
1235
1235
  this.visitNode(initializer);
1236
1236
  }
1237
1237
  }
1238
1238
  visitVariableStatement(node) {
1239
- var decorators = node.decorators;
1239
+ const decorators = node.decorators;
1240
1240
  if (decorators) {
1241
1241
  for (let i = 0, k = decorators.length; i < k; ++i) {
1242
1242
  this.serializeDecorator(decorators[i]);
1243
1243
  }
1244
1244
  }
1245
- var sb = this.sb;
1246
- var declarations = node.declarations;
1247
- var numDeclarations = declarations.length;
1248
- var firstDeclaration = declarations[0];
1245
+ const sb = this.sb;
1246
+ const declarations = node.declarations;
1247
+ const numDeclarations = declarations.length;
1248
+ const firstDeclaration = declarations[0];
1249
1249
  this.serializeExternalModifiers(firstDeclaration);
1250
1250
  sb.push(firstDeclaration.is(8)
1251
1251
  ? "const "
@@ -1259,10 +1259,10 @@ export class ASTBuilder extends Visitor {
1259
1259
  }
1260
1260
  }
1261
1261
  visitWhileStatement(node) {
1262
- var sb = this.sb;
1262
+ const sb = this.sb;
1263
1263
  sb.push("while (");
1264
1264
  this.visitNode(node.condition);
1265
- var statement = node.body;
1265
+ const statement = node.body;
1266
1266
  if (statement.kind == 34) {
1267
1267
  sb.push(")");
1268
1268
  }
@@ -1272,13 +1272,13 @@ export class ASTBuilder extends Visitor {
1272
1272
  }
1273
1273
  }
1274
1274
  serializeDecorator(node) {
1275
- var sb = this.sb;
1275
+ const sb = this.sb;
1276
1276
  sb.push("@");
1277
1277
  this.visitNode(node.name);
1278
- var args = node.args;
1278
+ const args = node.args;
1279
1279
  if (args) {
1280
1280
  sb.push("(");
1281
- let numArgs = args.length;
1281
+ const numArgs = args.length;
1282
1282
  if (numArgs) {
1283
1283
  this.visitNode(args[0]);
1284
1284
  for (let i = 1; i < numArgs; ++i) {
@@ -1294,9 +1294,9 @@ export class ASTBuilder extends Visitor {
1294
1294
  util.indent(sb, this.indentLevel);
1295
1295
  }
1296
1296
  serializeParameter(node) {
1297
- var sb = this.sb;
1298
- var kind = node.parameterKind;
1299
- var implicitFieldDeclaration = node.implicitFieldDeclaration;
1297
+ const sb = this.sb;
1298
+ const kind = node.parameterKind;
1299
+ const implicitFieldDeclaration = node.implicitFieldDeclaration;
1300
1300
  if (implicitFieldDeclaration) {
1301
1301
  this.serializeAccessModifiers(implicitFieldDeclaration);
1302
1302
  }
@@ -1304,8 +1304,8 @@ export class ASTBuilder extends Visitor {
1304
1304
  sb.push("...");
1305
1305
  }
1306
1306
  this.visitIdentifierExpression(node.name);
1307
- var type = node.type;
1308
- var initializer = node.initializer;
1307
+ const type = node.type;
1308
+ const initializer = node.initializer;
1309
1309
  if (type) {
1310
1310
  if (kind == 1 && !initializer)
1311
1311
  sb.push("?");
@@ -1320,7 +1320,7 @@ export class ASTBuilder extends Visitor {
1320
1320
  }
1321
1321
  }
1322
1322
  serializeExternalModifiers(node) {
1323
- var sb = this.sb;
1323
+ const sb = this.sb;
1324
1324
  if (node.is(2)) {
1325
1325
  sb.push("export ");
1326
1326
  }
@@ -1332,7 +1332,7 @@ export class ASTBuilder extends Visitor {
1332
1332
  }
1333
1333
  }
1334
1334
  serializeAccessModifiers(node) {
1335
- var sb = this.sb;
1335
+ const sb = this.sb;
1336
1336
  if (node.is(256)) {
1337
1337
  sb.push("public ");
1338
1338
  }
@@ -1353,7 +1353,7 @@ export class ASTBuilder extends Visitor {
1353
1353
  }
1354
1354
  }
1355
1355
  finish() {
1356
- var ret = this.sb.join("");
1356
+ const ret = this.sb.join("");
1357
1357
  this.sb = [];
1358
1358
  return ret;
1359
1359
  }