@typespec/compiler 0.57.0-dev.0 → 0.57.0-dev.4

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 (120) hide show
  1. package/dist/generated-defs/TypeSpec.d.ts +9 -9
  2. package/dist/generated-defs/TypeSpec.d.ts.map +1 -1
  3. package/dist/manifest.js +2 -2
  4. package/dist/src/core/binder.d.ts.map +1 -1
  5. package/dist/src/core/binder.js +15 -2
  6. package/dist/src/core/binder.js.map +1 -1
  7. package/dist/src/core/checker.d.ts +10 -8
  8. package/dist/src/core/checker.d.ts.map +1 -1
  9. package/dist/src/core/checker.js +1576 -241
  10. package/dist/src/core/checker.js.map +1 -1
  11. package/dist/src/core/compiler-code-fixes/model-to-object-literal.codefix.d.ts +6 -0
  12. package/dist/src/core/compiler-code-fixes/model-to-object-literal.codefix.d.ts.map +1 -0
  13. package/dist/src/core/compiler-code-fixes/model-to-object-literal.codefix.js +15 -0
  14. package/dist/src/core/compiler-code-fixes/model-to-object-literal.codefix.js.map +1 -0
  15. package/dist/src/core/compiler-code-fixes/tuple-to-array-value.codefix.d.ts +6 -0
  16. package/dist/src/core/compiler-code-fixes/tuple-to-array-value.codefix.d.ts.map +1 -0
  17. package/dist/src/core/compiler-code-fixes/tuple-to-array-value.codefix.js +15 -0
  18. package/dist/src/core/compiler-code-fixes/tuple-to-array-value.codefix.js.map +1 -0
  19. package/dist/src/core/diagnostic-creator.d.ts.map +1 -1
  20. package/dist/src/core/diagnostic-creator.js +1 -2
  21. package/dist/src/core/diagnostic-creator.js.map +1 -1
  22. package/dist/src/core/diagnostics.js +2 -2
  23. package/dist/src/core/diagnostics.js.map +1 -1
  24. package/dist/src/core/helpers/index.d.ts +1 -1
  25. package/dist/src/core/helpers/index.d.ts.map +1 -1
  26. package/dist/src/core/helpers/index.js +3 -1
  27. package/dist/src/core/helpers/index.js.map +1 -1
  28. package/dist/src/core/helpers/string-template-utils.d.ts +6 -6
  29. package/dist/src/core/helpers/string-template-utils.d.ts.map +1 -1
  30. package/dist/src/core/helpers/string-template-utils.js +20 -33
  31. package/dist/src/core/helpers/string-template-utils.js.map +1 -1
  32. package/dist/src/core/helpers/type-name-utils.d.ts +3 -2
  33. package/dist/src/core/helpers/type-name-utils.d.ts.map +1 -1
  34. package/dist/src/core/helpers/type-name-utils.js +57 -8
  35. package/dist/src/core/helpers/type-name-utils.js.map +1 -1
  36. package/dist/src/core/index.d.ts +3 -1
  37. package/dist/src/core/index.d.ts.map +1 -1
  38. package/dist/src/core/index.js +3 -1
  39. package/dist/src/core/index.js.map +1 -1
  40. package/dist/src/core/intrinsic-type-state.d.ts +57 -0
  41. package/dist/src/core/intrinsic-type-state.d.ts.map +1 -0
  42. package/dist/src/core/intrinsic-type-state.js +150 -0
  43. package/dist/src/core/intrinsic-type-state.js.map +1 -0
  44. package/dist/src/core/js-marshaller.d.ts +13 -0
  45. package/dist/src/core/js-marshaller.d.ts.map +1 -0
  46. package/dist/src/core/js-marshaller.js +79 -0
  47. package/dist/src/core/js-marshaller.js.map +1 -0
  48. package/dist/src/core/library.d.ts +2 -1
  49. package/dist/src/core/library.d.ts.map +1 -1
  50. package/dist/src/core/library.js +3 -0
  51. package/dist/src/core/library.js.map +1 -1
  52. package/dist/src/core/messages.d.ts +235 -2
  53. package/dist/src/core/messages.d.ts.map +1 -1
  54. package/dist/src/core/messages.js +74 -1
  55. package/dist/src/core/messages.js.map +1 -1
  56. package/dist/src/core/numeric-ranges.d.ts +51 -0
  57. package/dist/src/core/numeric-ranges.d.ts.map +1 -0
  58. package/dist/src/core/numeric-ranges.js +30 -0
  59. package/dist/src/core/numeric-ranges.js.map +1 -0
  60. package/dist/src/core/parser.d.ts.map +1 -1
  61. package/dist/src/core/parser.js +232 -5
  62. package/dist/src/core/parser.js.map +1 -1
  63. package/dist/src/core/program.d.ts.map +1 -1
  64. package/dist/src/core/program.js +2 -2
  65. package/dist/src/core/program.js.map +1 -1
  66. package/dist/src/core/projector.d.ts.map +1 -1
  67. package/dist/src/core/projector.js +10 -2
  68. package/dist/src/core/projector.js.map +1 -1
  69. package/dist/src/core/scanner.d.ts +42 -37
  70. package/dist/src/core/scanner.d.ts.map +1 -1
  71. package/dist/src/core/scanner.js +67 -46
  72. package/dist/src/core/scanner.js.map +1 -1
  73. package/dist/src/core/semantic-walker.d.ts.map +1 -1
  74. package/dist/src/core/semantic-walker.js +12 -0
  75. package/dist/src/core/semantic-walker.js.map +1 -1
  76. package/dist/src/core/type-utils.d.ts +18 -7
  77. package/dist/src/core/type-utils.d.ts.map +1 -1
  78. package/dist/src/core/type-utils.js +24 -5
  79. package/dist/src/core/type-utils.js.map +1 -1
  80. package/dist/src/core/types.d.ts +224 -45
  81. package/dist/src/core/types.d.ts.map +1 -1
  82. package/dist/src/core/types.js +8 -0
  83. package/dist/src/core/types.js.map +1 -1
  84. package/dist/src/emitter-framework/type-emitter.d.ts.map +1 -1
  85. package/dist/src/emitter-framework/type-emitter.js +6 -0
  86. package/dist/src/emitter-framework/type-emitter.js.map +1 -1
  87. package/dist/src/formatter/print/comment-handler.d.ts.map +1 -1
  88. package/dist/src/formatter/print/comment-handler.js +22 -0
  89. package/dist/src/formatter/print/comment-handler.js.map +1 -1
  90. package/dist/src/formatter/print/printer.d.ts +11 -5
  91. package/dist/src/formatter/print/printer.d.ts.map +1 -1
  92. package/dist/src/formatter/print/printer.js +95 -4
  93. package/dist/src/formatter/print/printer.js.map +1 -1
  94. package/dist/src/lib/decorators.d.ts +3 -46
  95. package/dist/src/lib/decorators.d.ts.map +1 -1
  96. package/dist/src/lib/decorators.js +28 -104
  97. package/dist/src/lib/decorators.js.map +1 -1
  98. package/dist/src/lib/intrinsic-decorators.d.ts +2 -2
  99. package/dist/src/lib/intrinsic-decorators.d.ts.map +1 -1
  100. package/dist/src/lib/intrinsic-decorators.js +7 -0
  101. package/dist/src/lib/intrinsic-decorators.js.map +1 -1
  102. package/dist/src/server/classify.d.ts.map +1 -1
  103. package/dist/src/server/classify.js +10 -0
  104. package/dist/src/server/classify.js.map +1 -1
  105. package/dist/src/server/completion.d.ts.map +1 -1
  106. package/dist/src/server/completion.js +6 -0
  107. package/dist/src/server/completion.js.map +1 -1
  108. package/dist/src/server/serverlib.js +2 -2
  109. package/dist/src/server/serverlib.js.map +1 -1
  110. package/dist/src/server/tmlanguage.d.ts +1 -1
  111. package/dist/src/server/tmlanguage.d.ts.map +1 -1
  112. package/dist/src/server/tmlanguage.js +147 -20
  113. package/dist/src/server/tmlanguage.js.map +1 -1
  114. package/dist/src/server/type-details.js +1 -2
  115. package/dist/src/server/type-details.js.map +1 -1
  116. package/dist/src/server/type-signature.js +15 -6
  117. package/dist/src/server/type-signature.js.map +1 -1
  118. package/dist/typespec.tmLanguage +408 -17
  119. package/lib/intrinsics.tsp +55 -5
  120. package/package.json +1 -1
@@ -27,6 +27,10 @@ var ListKind;
27
27
  ...ListKind.OperationParameters,
28
28
  invalidAnnotationTarget: "expression",
29
29
  };
30
+ ListKind.FunctionArguments = {
31
+ ...ListKind.OperationParameters,
32
+ invalidAnnotationTarget: "expression",
33
+ };
30
34
  ListKind.ModelProperties = {
31
35
  ...PropertiesBase,
32
36
  open: Token.OpenBrace,
@@ -34,6 +38,13 @@ var ListKind;
34
38
  delimiter: Token.Semicolon,
35
39
  toleratedDelimiter: Token.Comma,
36
40
  };
41
+ ListKind.ObjectLiteralProperties = {
42
+ ...PropertiesBase,
43
+ open: Token.HashBrace,
44
+ close: Token.CloseBrace,
45
+ delimiter: Token.Comma,
46
+ toleratedDelimiter: Token.Comma,
47
+ };
37
48
  ListKind.InterfaceMembers = {
38
49
  ...PropertiesBase,
39
50
  open: Token.OpenBrace,
@@ -43,6 +54,15 @@ var ListKind;
43
54
  toleratedDelimiterIsValid: false,
44
55
  allowedStatementKeyword: Token.OpKeyword,
45
56
  };
57
+ ListKind.ScalarMembers = {
58
+ ...PropertiesBase,
59
+ open: Token.OpenBrace,
60
+ close: Token.CloseBrace,
61
+ delimiter: Token.Semicolon,
62
+ toleratedDelimiter: Token.Comma,
63
+ toleratedDelimiterIsValid: false,
64
+ allowedStatementKeyword: Token.InitKeyword,
65
+ };
46
66
  ListKind.UnionVariants = {
47
67
  ...PropertiesBase,
48
68
  open: Token.OpenBrace,
@@ -91,6 +111,12 @@ var ListKind;
91
111
  open: Token.OpenBracket,
92
112
  close: Token.CloseBracket,
93
113
  };
114
+ ListKind.ArrayLiteral = {
115
+ ...ExpresionsBase,
116
+ allowEmpty: true,
117
+ open: Token.HashBracket,
118
+ close: Token.CloseBracket,
119
+ };
94
120
  ListKind.FunctionParameters = {
95
121
  ...ExpresionsBase,
96
122
  allowEmpty: true,
@@ -234,6 +260,10 @@ function createParser(code, options = {}) {
234
260
  reportInvalidDecorators(decorators, "alias statement");
235
261
  item = parseAliasStatement(pos);
236
262
  break;
263
+ case Token.ConstKeyword:
264
+ reportInvalidDecorators(decorators, "const statement");
265
+ item = parseConstStatement(pos);
266
+ break;
237
267
  case Token.UsingKeyword:
238
268
  reportInvalidDecorators(decorators, "using statement");
239
269
  item = parseUsingStatement(pos);
@@ -329,6 +359,10 @@ function createParser(code, options = {}) {
329
359
  reportInvalidDecorators(decorators, "alias statement");
330
360
  item = parseAliasStatement(pos);
331
361
  break;
362
+ case Token.ConstKeyword:
363
+ reportInvalidDecorators(decorators, "const statement");
364
+ item = parseConstStatement(pos);
365
+ break;
332
366
  case Token.UsingKeyword:
333
367
  reportInvalidDecorators(decorators, "using statement");
334
368
  item = parseUsingStatement(pos);
@@ -622,7 +656,7 @@ function createParser(code, options = {}) {
622
656
  const id = parseIdentifier();
623
657
  let constraint;
624
658
  if (parseOptional(Token.ExtendsKeyword)) {
625
- constraint = parseExpression();
659
+ constraint = parseMixedParameterConstraint();
626
660
  }
627
661
  let def;
628
662
  if (parseOptional(Token.Equals)) {
@@ -636,6 +670,35 @@ function createParser(code, options = {}) {
636
670
  ...finishNode(pos),
637
671
  };
638
672
  }
673
+ function parseValueOfExpressionOrIntersectionOrHigher() {
674
+ if (token() === Token.ValueOfKeyword) {
675
+ return parseValueOfExpression();
676
+ }
677
+ else if (parseOptional(Token.OpenParen)) {
678
+ const expr = parseMixedParameterConstraint();
679
+ parseExpected(Token.CloseParen);
680
+ return expr;
681
+ }
682
+ return parseIntersectionExpressionOrHigher();
683
+ }
684
+ function parseMixedParameterConstraint() {
685
+ const pos = tokenPos();
686
+ parseOptional(Token.Bar);
687
+ const node = parseValueOfExpressionOrIntersectionOrHigher();
688
+ if (token() !== Token.Bar) {
689
+ return node;
690
+ }
691
+ const options = [node];
692
+ while (parseOptional(Token.Bar)) {
693
+ const expr = parseValueOfExpressionOrIntersectionOrHigher();
694
+ options.push(expr);
695
+ }
696
+ return {
697
+ kind: SyntaxKind.UnionExpression,
698
+ options,
699
+ ...finishNode(pos),
700
+ };
701
+ }
639
702
  function parseModelPropertyOrSpread(pos, decorators) {
640
703
  return token() === Token.Ellipsis
641
704
  ? parseModelSpreadProperty(pos, decorators)
@@ -672,16 +735,47 @@ function createParser(code, options = {}) {
672
735
  ...finishNode(pos),
673
736
  };
674
737
  }
738
+ function parseObjectLiteralPropertyOrSpread(pos, decorators) {
739
+ reportInvalidDecorators(decorators, "object literal property");
740
+ return token() === Token.Ellipsis
741
+ ? parseObjectLiteralSpreadProperty(pos)
742
+ : parseObjectLiteralProperty(pos);
743
+ }
744
+ function parseObjectLiteralSpreadProperty(pos) {
745
+ parseExpected(Token.Ellipsis);
746
+ // This could be broadened to allow any type expression
747
+ const target = parseReferenceExpression();
748
+ return {
749
+ kind: SyntaxKind.ObjectLiteralSpreadProperty,
750
+ target,
751
+ ...finishNode(pos),
752
+ };
753
+ }
754
+ function parseObjectLiteralProperty(pos) {
755
+ const id = parseIdentifier({
756
+ message: "property",
757
+ });
758
+ parseExpected(Token.Colon);
759
+ const value = parseExpression();
760
+ return {
761
+ kind: SyntaxKind.ObjectLiteralProperty,
762
+ id,
763
+ value,
764
+ ...finishNode(pos),
765
+ };
766
+ }
675
767
  function parseScalarStatement(pos, decorators) {
676
768
  parseExpected(Token.ScalarKeyword);
677
769
  const id = parseIdentifier();
678
770
  const templateParameters = parseTemplateParameterList();
679
771
  const optionalExtends = parseOptionalScalarExtends();
772
+ const members = parseScalarMembers();
680
773
  return {
681
774
  kind: SyntaxKind.ScalarStatement,
682
775
  id,
683
776
  templateParameters,
684
777
  extends: optionalExtends,
778
+ members,
685
779
  decorators,
686
780
  ...finishNode(pos),
687
781
  };
@@ -692,6 +786,27 @@ function createParser(code, options = {}) {
692
786
  }
693
787
  return undefined;
694
788
  }
789
+ function parseScalarMembers() {
790
+ if (token() === Token.Semicolon) {
791
+ nextToken();
792
+ return [];
793
+ }
794
+ else {
795
+ return parseList(ListKind.ScalarMembers, parseScalarMember);
796
+ }
797
+ }
798
+ function parseScalarMember(pos, decorators) {
799
+ reportInvalidDecorators(decorators, "scalar member");
800
+ parseExpected(Token.InitKeyword);
801
+ const id = parseIdentifier();
802
+ const parameters = parseFunctionParameters();
803
+ return {
804
+ kind: SyntaxKind.ScalarConstructor,
805
+ id,
806
+ parameters,
807
+ ...finishNode(pos),
808
+ };
809
+ }
695
810
  function parseEnumStatement(pos, decorators) {
696
811
  parseExpected(Token.EnumKeyword);
697
812
  const id = parseIdentifier();
@@ -761,6 +876,27 @@ function createParser(code, options = {}) {
761
876
  ...finishNode(pos),
762
877
  };
763
878
  }
879
+ function parseConstStatement(pos) {
880
+ parseExpected(Token.ConstKeyword);
881
+ const id = parseIdentifier();
882
+ const type = parseOptionalTypeAnnotation();
883
+ parseExpected(Token.Equals);
884
+ const value = parseExpression();
885
+ parseExpected(Token.Semicolon);
886
+ return {
887
+ kind: SyntaxKind.ConstStatement,
888
+ id,
889
+ value,
890
+ type,
891
+ ...finishNode(pos),
892
+ };
893
+ }
894
+ function parseOptionalTypeAnnotation() {
895
+ if (parseOptional(Token.Colon)) {
896
+ return parseExpression();
897
+ }
898
+ return undefined;
899
+ }
764
900
  function parseExpression() {
765
901
  return parseUnionExpressionOrHigher();
766
902
  }
@@ -830,9 +966,61 @@ function createParser(code, options = {}) {
830
966
  ...finishNode(pos),
831
967
  };
832
968
  }
969
+ function parseTypeOfExpression() {
970
+ const pos = tokenPos();
971
+ parseExpected(Token.TypeOfKeyword);
972
+ const target = parseTypeOfTarget();
973
+ return {
974
+ kind: SyntaxKind.TypeOfExpression,
975
+ target,
976
+ ...finishNode(pos),
977
+ };
978
+ }
979
+ function parseTypeOfTarget() {
980
+ while (true) {
981
+ switch (token()) {
982
+ case Token.TypeOfKeyword:
983
+ return parseTypeOfExpression();
984
+ case Token.Identifier:
985
+ return parseCallOrReferenceExpression();
986
+ case Token.StringLiteral:
987
+ return parseStringLiteral();
988
+ case Token.StringTemplateHead:
989
+ return parseStringTemplateExpression();
990
+ case Token.TrueKeyword:
991
+ case Token.FalseKeyword:
992
+ return parseBooleanLiteral();
993
+ case Token.NumericLiteral:
994
+ return parseNumericLiteral();
995
+ case Token.OpenParen:
996
+ parseExpected(Token.OpenParen);
997
+ const target = parseTypeOfTarget();
998
+ parseExpected(Token.CloseParen);
999
+ return target;
1000
+ default:
1001
+ return parseReferenceExpression("typeofTarget");
1002
+ }
1003
+ }
1004
+ }
833
1005
  function parseReferenceExpression(message) {
834
1006
  const pos = tokenPos();
835
1007
  const target = parseIdentifierOrMemberExpression(message);
1008
+ return parseReferenceExpressionInternal(target, pos);
1009
+ }
1010
+ function parseCallOrReferenceExpression(message) {
1011
+ const pos = tokenPos();
1012
+ const target = parseIdentifierOrMemberExpression(message);
1013
+ if (token() === Token.OpenParen) {
1014
+ return {
1015
+ kind: SyntaxKind.CallExpression,
1016
+ target,
1017
+ arguments: parseList(ListKind.FunctionArguments, parseExpression),
1018
+ ...finishNode(pos),
1019
+ };
1020
+ }
1021
+ return parseReferenceExpressionInternal(target, pos);
1022
+ }
1023
+ function parseReferenceExpressionInternal(target, pos) {
836
1024
  const args = parseOptionalList(ListKind.TemplateArguments, parseTemplateArgument);
837
1025
  return {
838
1026
  kind: SyntaxKind.TypeReference,
@@ -1039,10 +1227,10 @@ function createParser(code, options = {}) {
1039
1227
  function parsePrimaryExpression() {
1040
1228
  while (true) {
1041
1229
  switch (token()) {
1042
- case Token.ValueOfKeyword:
1043
- return parseValueOfExpression();
1230
+ case Token.TypeOfKeyword:
1231
+ return parseTypeOfExpression();
1044
1232
  case Token.Identifier:
1045
- return parseReferenceExpression();
1233
+ return parseCallOrReferenceExpression();
1046
1234
  case Token.StringLiteral:
1047
1235
  return parseStringLiteral();
1048
1236
  case Token.StringTemplateHead:
@@ -1066,6 +1254,10 @@ function createParser(code, options = {}) {
1066
1254
  const directives = parseDirectiveList();
1067
1255
  reportInvalidDirective(directives, "expression");
1068
1256
  continue;
1257
+ case Token.HashBrace:
1258
+ return parseObjectLiteral();
1259
+ case Token.HashBracket:
1260
+ return parseArrayLiteral();
1069
1261
  case Token.VoidKeyword:
1070
1262
  return parseVoidKeyword();
1071
1263
  case Token.NeverKeyword:
@@ -1134,6 +1326,24 @@ function createParser(code, options = {}) {
1134
1326
  ...finishNode(pos),
1135
1327
  };
1136
1328
  }
1329
+ function parseObjectLiteral() {
1330
+ const pos = tokenPos();
1331
+ const properties = parseList(ListKind.ObjectLiteralProperties, parseObjectLiteralPropertyOrSpread);
1332
+ return {
1333
+ kind: SyntaxKind.ObjectLiteral,
1334
+ properties,
1335
+ ...finishNode(pos),
1336
+ };
1337
+ }
1338
+ function parseArrayLiteral() {
1339
+ const pos = tokenPos();
1340
+ const values = parseList(ListKind.ArrayLiteral, parseExpression);
1341
+ return {
1342
+ kind: SyntaxKind.ArrayLiteral,
1343
+ values,
1344
+ ...finishNode(pos),
1345
+ };
1346
+ }
1137
1347
  function parseStringLiteral() {
1138
1348
  const pos = tokenPos();
1139
1349
  const value = tokenValue();
@@ -1373,7 +1583,7 @@ function createParser(code, options = {}) {
1373
1583
  const optional = parseOptional(Token.Question);
1374
1584
  let type;
1375
1585
  if (parseOptional(Token.Colon)) {
1376
- type = parseExpression();
1586
+ type = parseMixedParameterConstraint();
1377
1587
  }
1378
1588
  return {
1379
1589
  kind: SyntaxKind.FunctionParameter,
@@ -2555,6 +2765,8 @@ export function visitChildren(node, cb) {
2555
2765
  visitEach(cb, node.arguments));
2556
2766
  case SyntaxKind.DecoratorExpression:
2557
2767
  return visitNode(cb, node.target) || visitEach(cb, node.arguments);
2768
+ case SyntaxKind.CallExpression:
2769
+ return visitNode(cb, node.target) || visitEach(cb, node.arguments);
2558
2770
  case SyntaxKind.DirectiveExpression:
2559
2771
  return visitNode(cb, node.target) || visitEach(cb, node.arguments);
2560
2772
  case SyntaxKind.ImportStatement:
@@ -2604,7 +2816,10 @@ export function visitChildren(node, cb) {
2604
2816
  return (visitEach(cb, node.decorators) ||
2605
2817
  visitNode(cb, node.id) ||
2606
2818
  visitEach(cb, node.templateParameters) ||
2819
+ visitEach(cb, node.members) ||
2607
2820
  visitNode(cb, node.extends));
2821
+ case SyntaxKind.ScalarConstructor:
2822
+ return visitNode(cb, node.id) || visitEach(cb, node.parameters);
2608
2823
  case SyntaxKind.UnionStatement:
2609
2824
  return (visitEach(cb, node.decorators) ||
2610
2825
  visitNode(cb, node.id) ||
@@ -2622,6 +2837,8 @@ export function visitChildren(node, cb) {
2622
2837
  return (visitNode(cb, node.id) ||
2623
2838
  visitEach(cb, node.templateParameters) ||
2624
2839
  visitNode(cb, node.value));
2840
+ case SyntaxKind.ConstStatement:
2841
+ return visitNode(cb, node.id) || visitNode(cb, node.value) || visitNode(cb, node.type);
2625
2842
  case SyntaxKind.DecoratorDeclarationStatement:
2626
2843
  return (visitEach(cb, node.modifiers) ||
2627
2844
  visitNode(cb, node.id) ||
@@ -2638,6 +2855,8 @@ export function visitChildren(node, cb) {
2638
2855
  return visitNode(cb, node.target) || visitEach(cb, node.arguments);
2639
2856
  case SyntaxKind.ValueOfExpression:
2640
2857
  return visitNode(cb, node.target);
2858
+ case SyntaxKind.TypeOfExpression:
2859
+ return visitNode(cb, node.target);
2641
2860
  case SyntaxKind.TupleExpression:
2642
2861
  return visitEach(cb, node.values);
2643
2862
  case SyntaxKind.UnionExpression:
@@ -2707,6 +2926,14 @@ export function visitChildren(node, cb) {
2707
2926
  return visitNode(cb, node.head) || visitEach(cb, node.spans);
2708
2927
  case SyntaxKind.StringTemplateSpan:
2709
2928
  return visitNode(cb, node.expression) || visitNode(cb, node.literal);
2929
+ case SyntaxKind.ObjectLiteral:
2930
+ return visitEach(cb, node.properties);
2931
+ case SyntaxKind.ObjectLiteralProperty:
2932
+ return visitNode(cb, node.id) || visitNode(cb, node.value);
2933
+ case SyntaxKind.ObjectLiteralSpreadProperty:
2934
+ return visitNode(cb, node.target);
2935
+ case SyntaxKind.ArrayLiteral:
2936
+ return visitEach(cb, node.values);
2710
2937
  // no children for the rest of these.
2711
2938
  case SyntaxKind.StringTemplateHead:
2712
2939
  case SyntaxKind.StringTemplateMiddle: