hermes-transform 0.10.0 → 0.11.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -17,7 +17,7 @@
17
17
 
18
18
  // lint directives to let us do some basic validation of generated files
19
19
  /* eslint no-undef: 'error', no-unused-vars: ['error', {vars: "local"}], no-redeclare: 'error' */
20
- /* global $NonMaybeType, $Partial, $ReadOnly, $ReadOnlyArray */
20
+ /* global $NonMaybeType, Partial, $ReadOnly, $ReadOnlyArray */
21
21
 
22
22
  'use strict';
23
23
 
@@ -43,11 +43,18 @@ import type {
43
43
  ClassBody as ClassBodyType,
44
44
  ClassExpression as ClassExpressionType,
45
45
  ClassImplements as ClassImplementsType,
46
+ ComponentDeclaration as ComponentDeclarationType,
47
+ ComponentParameter as ComponentParameterType,
48
+ ComponentTypeAnnotation as ComponentTypeAnnotationType,
49
+ ComponentTypeParameter as ComponentTypeParameterType,
46
50
  ConditionalExpression as ConditionalExpressionType,
51
+ ConditionalTypeAnnotation as ConditionalTypeAnnotationType,
47
52
  ContinueStatement as ContinueStatementType,
48
53
  DebuggerStatement as DebuggerStatementType,
49
54
  DeclareClass as DeclareClassType,
55
+ DeclareComponent as DeclareComponentType,
50
56
  DeclaredPredicate as DeclaredPredicateType,
57
+ DeclareEnum as DeclareEnumType,
51
58
  DeclareExportAllDeclaration as DeclareExportAllDeclarationType,
52
59
  DeclareInterface as DeclareInterfaceType,
53
60
  DeclareModule as DeclareModuleType,
@@ -89,6 +96,7 @@ import type {
89
96
  ImportSpecifier as ImportSpecifierType,
90
97
  IndexedAccessType as IndexedAccessTypeType,
91
98
  InferredPredicate as InferredPredicateType,
99
+ InferTypeAnnotation as InferTypeAnnotationType,
92
100
  InterfaceDeclaration as InterfaceDeclarationType,
93
101
  InterfaceExtends as InterfaceExtendsType,
94
102
  InterfaceTypeAnnotation as InterfaceTypeAnnotationType,
@@ -108,9 +116,9 @@ import type {
108
116
  JSXSpreadAttribute as JSXSpreadAttributeType,
109
117
  JSXSpreadChild as JSXSpreadChildType,
110
118
  JSXText as JSXTextType,
119
+ KeyofTypeAnnotation as KeyofTypeAnnotationType,
111
120
  LabeledStatement as LabeledStatementType,
112
121
  LogicalExpression as LogicalExpressionType,
113
- MemberExpression as MemberExpressionType,
114
122
  MetaProperty as MetaPropertyType,
115
123
  MethodDefinition as MethodDefinitionType,
116
124
  MixedTypeAnnotation as MixedTypeAnnotationType,
@@ -125,6 +133,7 @@ import type {
125
133
  ObjectTypeCallProperty as ObjectTypeCallPropertyType,
126
134
  ObjectTypeIndexer as ObjectTypeIndexerType,
127
135
  ObjectTypeInternalSlot as ObjectTypeInternalSlotType,
136
+ ObjectTypeMappedTypeProperty as ObjectTypeMappedTypePropertyType,
128
137
  ObjectTypeSpreadProperty as ObjectTypeSpreadPropertyType,
129
138
  OpaqueType as OpaqueTypeType,
130
139
  OptionalIndexedAccessType as OptionalIndexedAccessTypeType,
@@ -132,6 +141,7 @@ import type {
132
141
  Property as PropertyType,
133
142
  PropertyDefinition as PropertyDefinitionType,
134
143
  QualifiedTypeIdentifier as QualifiedTypeIdentifierType,
144
+ QualifiedTypeofIdentifier as QualifiedTypeofIdentifierType,
135
145
  RestElement as RestElementType,
136
146
  ReturnStatement as ReturnStatementType,
137
147
  SequenceExpression as SequenceExpressionType,
@@ -149,6 +159,8 @@ import type {
149
159
  ThrowStatement as ThrowStatementType,
150
160
  TryStatement as TryStatementType,
151
161
  TupleTypeAnnotation as TupleTypeAnnotationType,
162
+ TupleTypeLabeledElement as TupleTypeLabeledElementType,
163
+ TupleTypeSpreadElement as TupleTypeSpreadElementType,
152
164
  TypeAlias as TypeAliasType,
153
165
  TypeAnnotation as TypeAnnotationType,
154
166
  TypeCastExpression as TypeCastExpressionType,
@@ -156,6 +168,7 @@ import type {
156
168
  TypeParameter as TypeParameterType,
157
169
  TypeParameterDeclaration as TypeParameterDeclarationType,
158
170
  TypeParameterInstantiation as TypeParameterInstantiationType,
171
+ TypePredicate as TypePredicateType,
159
172
  UnaryExpression as UnaryExpressionType,
160
173
  UnionTypeAnnotation as UnionTypeAnnotationType,
161
174
  UpdateExpression as UpdateExpressionType,
@@ -170,7 +183,7 @@ import type {
170
183
  import type {DetachedNode, MaybeDetachedNode} from '../detachedNode';
171
184
 
172
185
  import {
173
- asDetachedNode,
186
+ asDetachedNodeForCodeGen,
174
187
  detachedProps,
175
188
  setParentPointersInDirectChildren,
176
189
  } from '../detachedNode';
@@ -279,12 +292,56 @@ export type ClassImplementsProps = {
279
292
  +typeParameters?: ?MaybeDetachedNode<ClassImplementsType['typeParameters']>,
280
293
  };
281
294
 
295
+ export type ComponentDeclarationProps = {
296
+ +id: MaybeDetachedNode<ComponentDeclarationType['id']>,
297
+ +params: $ReadOnlyArray<
298
+ MaybeDetachedNode<ComponentDeclarationType['params'][number]>,
299
+ >,
300
+ +body: MaybeDetachedNode<ComponentDeclarationType['body']>,
301
+ +typeParameters?: ?MaybeDetachedNode<
302
+ ComponentDeclarationType['typeParameters'],
303
+ >,
304
+ +returnType?: ?MaybeDetachedNode<ComponentDeclarationType['returnType']>,
305
+ };
306
+
307
+ export type ComponentParameterProps = {
308
+ +name: MaybeDetachedNode<ComponentParameterType['name']>,
309
+ +local: MaybeDetachedNode<ComponentParameterType['local']>,
310
+ +shorthand: ComponentParameterType['shorthand'],
311
+ };
312
+
313
+ export type ComponentTypeAnnotationProps = {
314
+ +params: $ReadOnlyArray<
315
+ MaybeDetachedNode<ComponentTypeAnnotationType['params'][number]>,
316
+ >,
317
+ +rest?: ?MaybeDetachedNode<ComponentTypeAnnotationType['rest']>,
318
+ +typeParameters?: ?MaybeDetachedNode<
319
+ ComponentTypeAnnotationType['typeParameters'],
320
+ >,
321
+ +returnType?: ?MaybeDetachedNode<ComponentTypeAnnotationType['returnType']>,
322
+ };
323
+
324
+ export type ComponentTypeParameterProps = {
325
+ +name?: ?MaybeDetachedNode<ComponentTypeParameterType['name']>,
326
+ +typeAnnotation?: ?MaybeDetachedNode<
327
+ ComponentTypeParameterType['typeAnnotation'],
328
+ >,
329
+ +optional: ComponentTypeParameterType['optional'],
330
+ };
331
+
282
332
  export type ConditionalExpressionProps = {
283
333
  +test: MaybeDetachedNode<ConditionalExpressionType['test']>,
284
334
  +alternate: MaybeDetachedNode<ConditionalExpressionType['alternate']>,
285
335
  +consequent: MaybeDetachedNode<ConditionalExpressionType['consequent']>,
286
336
  };
287
337
 
338
+ export type ConditionalTypeAnnotationProps = {
339
+ +checkType: MaybeDetachedNode<ConditionalTypeAnnotationType['checkType']>,
340
+ +extendsType: MaybeDetachedNode<ConditionalTypeAnnotationType['extendsType']>,
341
+ +trueType: MaybeDetachedNode<ConditionalTypeAnnotationType['trueType']>,
342
+ +falseType: MaybeDetachedNode<ConditionalTypeAnnotationType['falseType']>,
343
+ };
344
+
288
345
  export type ContinueStatementProps = {
289
346
  +label?: ?MaybeDetachedNode<ContinueStatementType['label']>,
290
347
  };
@@ -306,10 +363,25 @@ export type DeclareClassProps = {
306
363
  +body: MaybeDetachedNode<DeclareClassType['body']>,
307
364
  };
308
365
 
366
+ export type DeclareComponentProps = {
367
+ +id: MaybeDetachedNode<DeclareComponentType['id']>,
368
+ +params: $ReadOnlyArray<
369
+ MaybeDetachedNode<DeclareComponentType['params'][number]>,
370
+ >,
371
+ +rest?: ?MaybeDetachedNode<DeclareComponentType['rest']>,
372
+ +typeParameters?: ?MaybeDetachedNode<DeclareComponentType['typeParameters']>,
373
+ +returnType?: ?MaybeDetachedNode<DeclareComponentType['returnType']>,
374
+ };
375
+
309
376
  export type DeclaredPredicateProps = {
310
377
  +value: MaybeDetachedNode<DeclaredPredicateType['value']>,
311
378
  };
312
379
 
380
+ export type DeclareEnumProps = {
381
+ +id: MaybeDetachedNode<DeclareEnumType['id']>,
382
+ +body: MaybeDetachedNode<DeclareEnumType['body']>,
383
+ };
384
+
313
385
  export type DeclareExportAllDeclarationProps = {
314
386
  +source: MaybeDetachedNode<DeclareExportAllDeclarationType['source']>,
315
387
  };
@@ -350,6 +422,7 @@ export type DeclareTypeAliasProps = {
350
422
 
351
423
  export type DeclareVariableProps = {
352
424
  +id: MaybeDetachedNode<DeclareVariableType['id']>,
425
+ +kind: DeclareVariableType['kind'],
353
426
  };
354
427
 
355
428
  export type DoWhileStatementProps = {
@@ -561,6 +634,10 @@ export type IndexedAccessTypeProps = {
561
634
 
562
635
  export type InferredPredicateProps = {};
563
636
 
637
+ export type InferTypeAnnotationProps = {
638
+ +typeParameter: MaybeDetachedNode<InferTypeAnnotationType['typeParameter']>,
639
+ };
640
+
564
641
  export type InterfaceDeclarationProps = {
565
642
  +id: MaybeDetachedNode<InterfaceDeclarationType['id']>,
566
643
  +typeParameters?: ?MaybeDetachedNode<
@@ -643,6 +720,7 @@ export type JSXOpeningElementProps = {
643
720
  MaybeDetachedNode<JSXOpeningElementType['attributes'][number]>,
644
721
  >,
645
722
  +selfClosing: JSXOpeningElementType['selfClosing'],
723
+ +typeArguments?: ?MaybeDetachedNode<JSXOpeningElementType['typeArguments']>,
646
724
  };
647
725
 
648
726
  export type JSXOpeningFragmentProps = {};
@@ -660,6 +738,10 @@ export type JSXTextProps = {
660
738
  +raw: JSXTextType['raw'],
661
739
  };
662
740
 
741
+ export type KeyofTypeAnnotationProps = {
742
+ +argument: MaybeDetachedNode<KeyofTypeAnnotationType['argument']>,
743
+ };
744
+
663
745
  export type LabeledStatementProps = {
664
746
  +label: MaybeDetachedNode<LabeledStatementType['label']>,
665
747
  +body: MaybeDetachedNode<LabeledStatementType['body']>,
@@ -671,12 +753,6 @@ export type LogicalExpressionProps = {
671
753
  +operator: LogicalExpressionType['operator'],
672
754
  };
673
755
 
674
- export type MemberExpressionProps = {
675
- +object: MaybeDetachedNode<MemberExpressionType['object']>,
676
- +property: MaybeDetachedNode<MemberExpressionType['property']>,
677
- +computed: MemberExpressionType['computed'],
678
- };
679
-
680
756
  export type MetaPropertyProps = {
681
757
  +meta: MaybeDetachedNode<MetaPropertyType['meta']>,
682
758
  +property: MaybeDetachedNode<MetaPropertyType['property']>,
@@ -766,6 +842,16 @@ export type ObjectTypeInternalSlotProps = {
766
842
  +method: ObjectTypeInternalSlotType['method'],
767
843
  };
768
844
 
845
+ export type ObjectTypeMappedTypePropertyProps = {
846
+ +keyTparam: MaybeDetachedNode<ObjectTypeMappedTypePropertyType['keyTparam']>,
847
+ +propType: MaybeDetachedNode<ObjectTypeMappedTypePropertyType['propType']>,
848
+ +sourceType: MaybeDetachedNode<
849
+ ObjectTypeMappedTypePropertyType['sourceType'],
850
+ >,
851
+ +variance?: ?MaybeDetachedNode<ObjectTypeMappedTypePropertyType['variance']>,
852
+ +optional?: ?ObjectTypeMappedTypePropertyType['optional'],
853
+ };
854
+
769
855
  export type ObjectTypeSpreadPropertyProps = {
770
856
  +argument: MaybeDetachedNode<ObjectTypeSpreadPropertyType['argument']>,
771
857
  };
@@ -817,6 +903,13 @@ export type QualifiedTypeIdentifierProps = {
817
903
  +id: MaybeDetachedNode<QualifiedTypeIdentifierType['id']>,
818
904
  };
819
905
 
906
+ export type QualifiedTypeofIdentifierProps = {
907
+ +qualification: MaybeDetachedNode<
908
+ QualifiedTypeofIdentifierType['qualification'],
909
+ >,
910
+ +id: MaybeDetachedNode<QualifiedTypeofIdentifierType['id']>,
911
+ };
912
+
820
913
  export type RestElementProps = {
821
914
  +argument: MaybeDetachedNode<RestElementType['argument']>,
822
915
  };
@@ -894,6 +987,20 @@ export type TupleTypeAnnotationProps = {
894
987
  >,
895
988
  };
896
989
 
990
+ export type TupleTypeLabeledElementProps = {
991
+ +label: MaybeDetachedNode<TupleTypeLabeledElementType['label']>,
992
+ +elementType: MaybeDetachedNode<TupleTypeLabeledElementType['elementType']>,
993
+ +optional: TupleTypeLabeledElementType['optional'],
994
+ +variance?: ?MaybeDetachedNode<TupleTypeLabeledElementType['variance']>,
995
+ };
996
+
997
+ export type TupleTypeSpreadElementProps = {
998
+ +label?: ?MaybeDetachedNode<TupleTypeSpreadElementType['label']>,
999
+ +typeAnnotation: MaybeDetachedNode<
1000
+ TupleTypeSpreadElementType['typeAnnotation'],
1001
+ >,
1002
+ };
1003
+
897
1004
  export type TypeAliasProps = {
898
1005
  +id: MaybeDetachedNode<TypeAliasType['id']>,
899
1006
  +typeParameters?: ?MaybeDetachedNode<TypeAliasType['typeParameters']>,
@@ -932,6 +1039,12 @@ export type TypeParameterInstantiationProps = {
932
1039
  >,
933
1040
  };
934
1041
 
1042
+ export type TypePredicateProps = {
1043
+ +parameterName: MaybeDetachedNode<TypePredicateType['parameterName']>,
1044
+ +typeAnnotation?: ?MaybeDetachedNode<TypePredicateType['typeAnnotation']>,
1045
+ +asserts: TypePredicateType['asserts'],
1046
+ };
1047
+
935
1048
  export type UnaryExpressionProps = {
936
1049
  +operator: UnaryExpressionType['operator'],
937
1050
  +argument: MaybeDetachedNode<UnaryExpressionType['argument']>,
@@ -999,8 +1112,7 @@ export function ArrayExpression(props: {
999
1112
  }): DetachedNode<ArrayExpressionType> {
1000
1113
  const node = detachedProps<ArrayExpressionType>(props.parent, {
1001
1114
  type: 'ArrayExpression',
1002
- // $FlowFixMe[incompatible-call],
1003
- elements: props.elements.map(n => asDetachedNode(n)),
1115
+ elements: props.elements.map(n => asDetachedNodeForCodeGen(n)),
1004
1116
  trailingComma: props.trailingComma,
1005
1117
  });
1006
1118
  setParentPointersInDirectChildren(node);
@@ -1013,10 +1125,8 @@ export function ArrayPattern(props: {
1013
1125
  }): DetachedNode<ArrayPatternType> {
1014
1126
  const node = detachedProps<ArrayPatternType>(props.parent, {
1015
1127
  type: 'ArrayPattern',
1016
- // $FlowFixMe[incompatible-call],
1017
- elements: props.elements.map(n => asDetachedNode(n)),
1018
- // $FlowFixMe[incompatible-call],
1019
- typeAnnotation: asDetachedNode(props.typeAnnotation),
1128
+ elements: props.elements.map(n => asDetachedNodeForCodeGen(n)),
1129
+ typeAnnotation: asDetachedNodeForCodeGen(props.typeAnnotation),
1020
1130
  });
1021
1131
  setParentPointersInDirectChildren(node);
1022
1132
  return node;
@@ -1028,8 +1138,7 @@ export function ArrayTypeAnnotation(props: {
1028
1138
  }): DetachedNode<ArrayTypeAnnotationType> {
1029
1139
  const node = detachedProps<ArrayTypeAnnotationType>(props.parent, {
1030
1140
  type: 'ArrayTypeAnnotation',
1031
- // $FlowFixMe[incompatible-call],
1032
- elementType: asDetachedNode(props.elementType),
1141
+ elementType: asDetachedNodeForCodeGen(props.elementType),
1033
1142
  });
1034
1143
  setParentPointersInDirectChildren(node);
1035
1144
  return node;
@@ -1042,10 +1151,8 @@ export function AssignmentExpression(props: {
1042
1151
  const node = detachedProps<AssignmentExpressionType>(props.parent, {
1043
1152
  type: 'AssignmentExpression',
1044
1153
  operator: props.operator,
1045
- // $FlowFixMe[incompatible-call],
1046
- left: asDetachedNode(props.left),
1047
- // $FlowFixMe[incompatible-call],
1048
- right: asDetachedNode(props.right),
1154
+ left: asDetachedNodeForCodeGen(props.left),
1155
+ right: asDetachedNodeForCodeGen(props.right),
1049
1156
  });
1050
1157
  setParentPointersInDirectChildren(node);
1051
1158
  return node;
@@ -1057,10 +1164,8 @@ export function AssignmentPattern(props: {
1057
1164
  }): DetachedNode<AssignmentPatternType> {
1058
1165
  const node = detachedProps<AssignmentPatternType>(props.parent, {
1059
1166
  type: 'AssignmentPattern',
1060
- // $FlowFixMe[incompatible-call],
1061
- left: asDetachedNode(props.left),
1062
- // $FlowFixMe[incompatible-call],
1063
- right: asDetachedNode(props.right),
1167
+ left: asDetachedNodeForCodeGen(props.left),
1168
+ right: asDetachedNodeForCodeGen(props.right),
1064
1169
  });
1065
1170
  setParentPointersInDirectChildren(node);
1066
1171
  return node;
@@ -1072,8 +1177,7 @@ export function AwaitExpression(props: {
1072
1177
  }): DetachedNode<AwaitExpressionType> {
1073
1178
  const node = detachedProps<AwaitExpressionType>(props.parent, {
1074
1179
  type: 'AwaitExpression',
1075
- // $FlowFixMe[incompatible-call],
1076
- argument: asDetachedNode(props.argument),
1180
+ argument: asDetachedNodeForCodeGen(props.argument),
1077
1181
  });
1078
1182
  setParentPointersInDirectChildren(node);
1079
1183
  return node;
@@ -1107,10 +1211,8 @@ export function BinaryExpression(props: {
1107
1211
  }): DetachedNode<BinaryExpressionType> {
1108
1212
  const node = detachedProps<BinaryExpressionType>(props.parent, {
1109
1213
  type: 'BinaryExpression',
1110
- // $FlowFixMe[incompatible-call],
1111
- left: asDetachedNode(props.left),
1112
- // $FlowFixMe[incompatible-call],
1113
- right: asDetachedNode(props.right),
1214
+ left: asDetachedNodeForCodeGen(props.left),
1215
+ right: asDetachedNodeForCodeGen(props.right),
1114
1216
  operator: props.operator,
1115
1217
  });
1116
1218
  setParentPointersInDirectChildren(node);
@@ -1123,8 +1225,7 @@ export function BlockStatement(props: {
1123
1225
  }): DetachedNode<BlockStatementType> {
1124
1226
  const node = detachedProps<BlockStatementType>(props.parent, {
1125
1227
  type: 'BlockStatement',
1126
- // $FlowFixMe[incompatible-call],
1127
- body: props.body.map(n => asDetachedNode(n)),
1228
+ body: props.body.map(n => asDetachedNodeForCodeGen(n)),
1128
1229
  });
1129
1230
  setParentPointersInDirectChildren(node);
1130
1231
  return node;
@@ -1159,8 +1260,7 @@ export function BreakStatement(props: {
1159
1260
  }): DetachedNode<BreakStatementType> {
1160
1261
  const node = detachedProps<BreakStatementType>(props.parent, {
1161
1262
  type: 'BreakStatement',
1162
- // $FlowFixMe[incompatible-call],
1163
- label: asDetachedNode(props.label),
1263
+ label: asDetachedNodeForCodeGen(props.label),
1164
1264
  });
1165
1265
  setParentPointersInDirectChildren(node);
1166
1266
  return node;
@@ -1172,12 +1272,9 @@ export function CallExpression(props: {
1172
1272
  }): DetachedNode<CallExpressionType> {
1173
1273
  const node = detachedProps<CallExpressionType>(props.parent, {
1174
1274
  type: 'CallExpression',
1175
- // $FlowFixMe[incompatible-call],
1176
- callee: asDetachedNode(props.callee),
1177
- // $FlowFixMe[incompatible-call],
1178
- typeArguments: asDetachedNode(props.typeArguments),
1179
- // $FlowFixMe[incompatible-call],
1180
- arguments: props.arguments.map(n => asDetachedNode(n)),
1275
+ callee: asDetachedNodeForCodeGen(props.callee),
1276
+ typeArguments: asDetachedNodeForCodeGen(props.typeArguments),
1277
+ arguments: props.arguments.map(n => asDetachedNodeForCodeGen(n)),
1181
1278
  });
1182
1279
  setParentPointersInDirectChildren(node);
1183
1280
  return node;
@@ -1189,10 +1286,8 @@ export function CatchClause(props: {
1189
1286
  }): DetachedNode<CatchClauseType> {
1190
1287
  const node = detachedProps<CatchClauseType>(props.parent, {
1191
1288
  type: 'CatchClause',
1192
- // $FlowFixMe[incompatible-call],
1193
- param: asDetachedNode(props.param),
1194
- // $FlowFixMe[incompatible-call],
1195
- body: asDetachedNode(props.body),
1289
+ param: asDetachedNodeForCodeGen(props.param),
1290
+ body: asDetachedNodeForCodeGen(props.body),
1196
1291
  });
1197
1292
  setParentPointersInDirectChildren(node);
1198
1293
  return node;
@@ -1204,8 +1299,7 @@ export function ChainExpression(props: {
1204
1299
  }): DetachedNode<ChainExpressionType> {
1205
1300
  const node = detachedProps<ChainExpressionType>(props.parent, {
1206
1301
  type: 'ChainExpression',
1207
- // $FlowFixMe[incompatible-call],
1208
- expression: asDetachedNode(props.expression),
1302
+ expression: asDetachedNodeForCodeGen(props.expression),
1209
1303
  });
1210
1304
  setParentPointersInDirectChildren(node);
1211
1305
  return node;
@@ -1217,8 +1311,7 @@ export function ClassBody(props: {
1217
1311
  }): DetachedNode<ClassBodyType> {
1218
1312
  const node = detachedProps<ClassBodyType>(props.parent, {
1219
1313
  type: 'ClassBody',
1220
- // $FlowFixMe[incompatible-call],
1221
- body: props.body.map(n => asDetachedNode(n)),
1314
+ body: props.body.map(n => asDetachedNodeForCodeGen(n)),
1222
1315
  });
1223
1316
  setParentPointersInDirectChildren(node);
1224
1317
  return node;
@@ -1230,20 +1323,13 @@ export function ClassExpression(props: {
1230
1323
  }): DetachedNode<ClassExpressionType> {
1231
1324
  const node = detachedProps<ClassExpressionType>(props.parent, {
1232
1325
  type: 'ClassExpression',
1233
- // $FlowFixMe[incompatible-call],
1234
- id: asDetachedNode(props.id),
1235
- // $FlowFixMe[incompatible-call],
1236
- typeParameters: asDetachedNode(props.typeParameters),
1237
- // $FlowFixMe[incompatible-call],
1238
- superClass: asDetachedNode(props.superClass),
1239
- // $FlowFixMe[incompatible-call],
1240
- superTypeParameters: asDetachedNode(props.superTypeParameters),
1241
- // $FlowFixMe[incompatible-call],
1242
- implements: props.implements.map(n => asDetachedNode(n)),
1243
- // $FlowFixMe[incompatible-call],
1244
- decorators: props.decorators.map(n => asDetachedNode(n)),
1245
- // $FlowFixMe[incompatible-call],
1246
- body: asDetachedNode(props.body),
1326
+ id: asDetachedNodeForCodeGen(props.id),
1327
+ typeParameters: asDetachedNodeForCodeGen(props.typeParameters),
1328
+ superClass: asDetachedNodeForCodeGen(props.superClass),
1329
+ superTypeParameters: asDetachedNodeForCodeGen(props.superTypeParameters),
1330
+ implements: props.implements.map(n => asDetachedNodeForCodeGen(n)),
1331
+ decorators: props.decorators.map(n => asDetachedNodeForCodeGen(n)),
1332
+ body: asDetachedNodeForCodeGen(props.body),
1247
1333
  });
1248
1334
  setParentPointersInDirectChildren(node);
1249
1335
  return node;
@@ -1255,10 +1341,67 @@ export function ClassImplements(props: {
1255
1341
  }): DetachedNode<ClassImplementsType> {
1256
1342
  const node = detachedProps<ClassImplementsType>(props.parent, {
1257
1343
  type: 'ClassImplements',
1258
- // $FlowFixMe[incompatible-call],
1259
- id: asDetachedNode(props.id),
1260
- // $FlowFixMe[incompatible-call],
1261
- typeParameters: asDetachedNode(props.typeParameters),
1344
+ id: asDetachedNodeForCodeGen(props.id),
1345
+ typeParameters: asDetachedNodeForCodeGen(props.typeParameters),
1346
+ });
1347
+ setParentPointersInDirectChildren(node);
1348
+ return node;
1349
+ }
1350
+
1351
+ export function ComponentDeclaration(props: {
1352
+ ...$ReadOnly<ComponentDeclarationProps>,
1353
+ +parent?: ESNode,
1354
+ }): DetachedNode<ComponentDeclarationType> {
1355
+ const node = detachedProps<ComponentDeclarationType>(props.parent, {
1356
+ type: 'ComponentDeclaration',
1357
+ id: asDetachedNodeForCodeGen(props.id),
1358
+ params: props.params.map(n => asDetachedNodeForCodeGen(n)),
1359
+ body: asDetachedNodeForCodeGen(props.body),
1360
+ typeParameters: asDetachedNodeForCodeGen(props.typeParameters),
1361
+ returnType: asDetachedNodeForCodeGen(props.returnType),
1362
+ });
1363
+ setParentPointersInDirectChildren(node);
1364
+ return node;
1365
+ }
1366
+
1367
+ export function ComponentParameter(props: {
1368
+ ...$ReadOnly<ComponentParameterProps>,
1369
+ +parent?: ESNode,
1370
+ }): DetachedNode<ComponentParameterType> {
1371
+ const node = detachedProps<ComponentParameterType>(props.parent, {
1372
+ type: 'ComponentParameter',
1373
+ name: asDetachedNodeForCodeGen(props.name),
1374
+ local: asDetachedNodeForCodeGen(props.local),
1375
+ shorthand: props.shorthand,
1376
+ });
1377
+ setParentPointersInDirectChildren(node);
1378
+ return node;
1379
+ }
1380
+
1381
+ export function ComponentTypeAnnotation(props: {
1382
+ ...$ReadOnly<ComponentTypeAnnotationProps>,
1383
+ +parent?: ESNode,
1384
+ }): DetachedNode<ComponentTypeAnnotationType> {
1385
+ const node = detachedProps<ComponentTypeAnnotationType>(props.parent, {
1386
+ type: 'ComponentTypeAnnotation',
1387
+ params: props.params.map(n => asDetachedNodeForCodeGen(n)),
1388
+ rest: asDetachedNodeForCodeGen(props.rest),
1389
+ typeParameters: asDetachedNodeForCodeGen(props.typeParameters),
1390
+ returnType: asDetachedNodeForCodeGen(props.returnType),
1391
+ });
1392
+ setParentPointersInDirectChildren(node);
1393
+ return node;
1394
+ }
1395
+
1396
+ export function ComponentTypeParameter(props: {
1397
+ ...$ReadOnly<ComponentTypeParameterProps>,
1398
+ +parent?: ESNode,
1399
+ }): DetachedNode<ComponentTypeParameterType> {
1400
+ const node = detachedProps<ComponentTypeParameterType>(props.parent, {
1401
+ type: 'ComponentTypeParameter',
1402
+ name: asDetachedNodeForCodeGen(props.name),
1403
+ typeAnnotation: asDetachedNodeForCodeGen(props.typeAnnotation),
1404
+ optional: props.optional,
1262
1405
  });
1263
1406
  setParentPointersInDirectChildren(node);
1264
1407
  return node;
@@ -1270,12 +1413,24 @@ export function ConditionalExpression(props: {
1270
1413
  }): DetachedNode<ConditionalExpressionType> {
1271
1414
  const node = detachedProps<ConditionalExpressionType>(props.parent, {
1272
1415
  type: 'ConditionalExpression',
1273
- // $FlowFixMe[incompatible-call],
1274
- test: asDetachedNode(props.test),
1275
- // $FlowFixMe[incompatible-call],
1276
- alternate: asDetachedNode(props.alternate),
1277
- // $FlowFixMe[incompatible-call],
1278
- consequent: asDetachedNode(props.consequent),
1416
+ test: asDetachedNodeForCodeGen(props.test),
1417
+ alternate: asDetachedNodeForCodeGen(props.alternate),
1418
+ consequent: asDetachedNodeForCodeGen(props.consequent),
1419
+ });
1420
+ setParentPointersInDirectChildren(node);
1421
+ return node;
1422
+ }
1423
+
1424
+ export function ConditionalTypeAnnotation(props: {
1425
+ ...$ReadOnly<ConditionalTypeAnnotationProps>,
1426
+ +parent?: ESNode,
1427
+ }): DetachedNode<ConditionalTypeAnnotationType> {
1428
+ const node = detachedProps<ConditionalTypeAnnotationType>(props.parent, {
1429
+ type: 'ConditionalTypeAnnotation',
1430
+ checkType: asDetachedNodeForCodeGen(props.checkType),
1431
+ extendsType: asDetachedNodeForCodeGen(props.extendsType),
1432
+ trueType: asDetachedNodeForCodeGen(props.trueType),
1433
+ falseType: asDetachedNodeForCodeGen(props.falseType),
1279
1434
  });
1280
1435
  setParentPointersInDirectChildren(node);
1281
1436
  return node;
@@ -1287,8 +1442,7 @@ export function ContinueStatement(props: {
1287
1442
  }): DetachedNode<ContinueStatementType> {
1288
1443
  const node = detachedProps<ContinueStatementType>(props.parent, {
1289
1444
  type: 'ContinueStatement',
1290
- // $FlowFixMe[incompatible-call],
1291
- label: asDetachedNode(props.label),
1445
+ label: asDetachedNodeForCodeGen(props.label),
1292
1446
  });
1293
1447
  setParentPointersInDirectChildren(node);
1294
1448
  return node;
@@ -1310,18 +1464,28 @@ export function DeclareClass(props: {
1310
1464
  }): DetachedNode<DeclareClassType> {
1311
1465
  const node = detachedProps<DeclareClassType>(props.parent, {
1312
1466
  type: 'DeclareClass',
1313
- // $FlowFixMe[incompatible-call],
1314
- id: asDetachedNode(props.id),
1315
- // $FlowFixMe[incompatible-call],
1316
- typeParameters: asDetachedNode(props.typeParameters),
1317
- // $FlowFixMe[incompatible-call],
1318
- extends: props.extends.map(n => asDetachedNode(n)),
1319
- // $FlowFixMe[incompatible-call],
1320
- implements: props.implements.map(n => asDetachedNode(n)),
1321
- // $FlowFixMe[incompatible-call],
1322
- mixins: props.mixins.map(n => asDetachedNode(n)),
1323
- // $FlowFixMe[incompatible-call],
1324
- body: asDetachedNode(props.body),
1467
+ id: asDetachedNodeForCodeGen(props.id),
1468
+ typeParameters: asDetachedNodeForCodeGen(props.typeParameters),
1469
+ extends: props.extends.map(n => asDetachedNodeForCodeGen(n)),
1470
+ implements: props.implements.map(n => asDetachedNodeForCodeGen(n)),
1471
+ mixins: props.mixins.map(n => asDetachedNodeForCodeGen(n)),
1472
+ body: asDetachedNodeForCodeGen(props.body),
1473
+ });
1474
+ setParentPointersInDirectChildren(node);
1475
+ return node;
1476
+ }
1477
+
1478
+ export function DeclareComponent(props: {
1479
+ ...$ReadOnly<DeclareComponentProps>,
1480
+ +parent?: ESNode,
1481
+ }): DetachedNode<DeclareComponentType> {
1482
+ const node = detachedProps<DeclareComponentType>(props.parent, {
1483
+ type: 'DeclareComponent',
1484
+ id: asDetachedNodeForCodeGen(props.id),
1485
+ params: props.params.map(n => asDetachedNodeForCodeGen(n)),
1486
+ rest: asDetachedNodeForCodeGen(props.rest),
1487
+ typeParameters: asDetachedNodeForCodeGen(props.typeParameters),
1488
+ returnType: asDetachedNodeForCodeGen(props.returnType),
1325
1489
  });
1326
1490
  setParentPointersInDirectChildren(node);
1327
1491
  return node;
@@ -1333,8 +1497,20 @@ export function DeclaredPredicate(props: {
1333
1497
  }): DetachedNode<DeclaredPredicateType> {
1334
1498
  const node = detachedProps<DeclaredPredicateType>(props.parent, {
1335
1499
  type: 'DeclaredPredicate',
1336
- // $FlowFixMe[incompatible-call],
1337
- value: asDetachedNode(props.value),
1500
+ value: asDetachedNodeForCodeGen(props.value),
1501
+ });
1502
+ setParentPointersInDirectChildren(node);
1503
+ return node;
1504
+ }
1505
+
1506
+ export function DeclareEnum(props: {
1507
+ ...$ReadOnly<DeclareEnumProps>,
1508
+ +parent?: ESNode,
1509
+ }): DetachedNode<DeclareEnumType> {
1510
+ const node = detachedProps<DeclareEnumType>(props.parent, {
1511
+ type: 'DeclareEnum',
1512
+ id: asDetachedNodeForCodeGen(props.id),
1513
+ body: asDetachedNodeForCodeGen(props.body),
1338
1514
  });
1339
1515
  setParentPointersInDirectChildren(node);
1340
1516
  return node;
@@ -1346,8 +1522,7 @@ export function DeclareExportAllDeclaration(props: {
1346
1522
  }): DetachedNode<DeclareExportAllDeclarationType> {
1347
1523
  const node = detachedProps<DeclareExportAllDeclarationType>(props.parent, {
1348
1524
  type: 'DeclareExportAllDeclaration',
1349
- // $FlowFixMe[incompatible-call],
1350
- source: asDetachedNode(props.source),
1525
+ source: asDetachedNodeForCodeGen(props.source),
1351
1526
  });
1352
1527
  setParentPointersInDirectChildren(node);
1353
1528
  return node;
@@ -1359,14 +1534,10 @@ export function DeclareInterface(props: {
1359
1534
  }): DetachedNode<DeclareInterfaceType> {
1360
1535
  const node = detachedProps<DeclareInterfaceType>(props.parent, {
1361
1536
  type: 'DeclareInterface',
1362
- // $FlowFixMe[incompatible-call],
1363
- id: asDetachedNode(props.id),
1364
- // $FlowFixMe[incompatible-call],
1365
- typeParameters: asDetachedNode(props.typeParameters),
1366
- // $FlowFixMe[incompatible-call],
1367
- extends: props.extends.map(n => asDetachedNode(n)),
1368
- // $FlowFixMe[incompatible-call],
1369
- body: asDetachedNode(props.body),
1537
+ id: asDetachedNodeForCodeGen(props.id),
1538
+ typeParameters: asDetachedNodeForCodeGen(props.typeParameters),
1539
+ extends: props.extends.map(n => asDetachedNodeForCodeGen(n)),
1540
+ body: asDetachedNodeForCodeGen(props.body),
1370
1541
  });
1371
1542
  setParentPointersInDirectChildren(node);
1372
1543
  return node;
@@ -1378,10 +1549,8 @@ export function DeclareModule(props: {
1378
1549
  }): DetachedNode<DeclareModuleType> {
1379
1550
  const node = detachedProps<DeclareModuleType>(props.parent, {
1380
1551
  type: 'DeclareModule',
1381
- // $FlowFixMe[incompatible-call],
1382
- id: asDetachedNode(props.id),
1383
- // $FlowFixMe[incompatible-call],
1384
- body: asDetachedNode(props.body),
1552
+ id: asDetachedNodeForCodeGen(props.id),
1553
+ body: asDetachedNodeForCodeGen(props.body),
1385
1554
  kind: props.kind,
1386
1555
  });
1387
1556
  setParentPointersInDirectChildren(node);
@@ -1394,8 +1563,7 @@ export function DeclareModuleExports(props: {
1394
1563
  }): DetachedNode<DeclareModuleExportsType> {
1395
1564
  const node = detachedProps<DeclareModuleExportsType>(props.parent, {
1396
1565
  type: 'DeclareModuleExports',
1397
- // $FlowFixMe[incompatible-call],
1398
- typeAnnotation: asDetachedNode(props.typeAnnotation),
1566
+ typeAnnotation: asDetachedNodeForCodeGen(props.typeAnnotation),
1399
1567
  });
1400
1568
  setParentPointersInDirectChildren(node);
1401
1569
  return node;
@@ -1407,14 +1575,10 @@ export function DeclareOpaqueType(props: {
1407
1575
  }): DetachedNode<DeclareOpaqueTypeType> {
1408
1576
  const node = detachedProps<DeclareOpaqueTypeType>(props.parent, {
1409
1577
  type: 'DeclareOpaqueType',
1410
- // $FlowFixMe[incompatible-call],
1411
- id: asDetachedNode(props.id),
1412
- // $FlowFixMe[incompatible-call],
1413
- typeParameters: asDetachedNode(props.typeParameters),
1414
- // $FlowFixMe[incompatible-call],
1415
- impltype: asDetachedNode(props.impltype),
1416
- // $FlowFixMe[incompatible-call],
1417
- supertype: asDetachedNode(props.supertype),
1578
+ id: asDetachedNodeForCodeGen(props.id),
1579
+ typeParameters: asDetachedNodeForCodeGen(props.typeParameters),
1580
+ impltype: asDetachedNodeForCodeGen(props.impltype),
1581
+ supertype: asDetachedNodeForCodeGen(props.supertype),
1418
1582
  });
1419
1583
  setParentPointersInDirectChildren(node);
1420
1584
  return node;
@@ -1426,12 +1590,9 @@ export function DeclareTypeAlias(props: {
1426
1590
  }): DetachedNode<DeclareTypeAliasType> {
1427
1591
  const node = detachedProps<DeclareTypeAliasType>(props.parent, {
1428
1592
  type: 'DeclareTypeAlias',
1429
- // $FlowFixMe[incompatible-call],
1430
- id: asDetachedNode(props.id),
1431
- // $FlowFixMe[incompatible-call],
1432
- typeParameters: asDetachedNode(props.typeParameters),
1433
- // $FlowFixMe[incompatible-call],
1434
- right: asDetachedNode(props.right),
1593
+ id: asDetachedNodeForCodeGen(props.id),
1594
+ typeParameters: asDetachedNodeForCodeGen(props.typeParameters),
1595
+ right: asDetachedNodeForCodeGen(props.right),
1435
1596
  });
1436
1597
  setParentPointersInDirectChildren(node);
1437
1598
  return node;
@@ -1443,8 +1604,8 @@ export function DeclareVariable(props: {
1443
1604
  }): DetachedNode<DeclareVariableType> {
1444
1605
  const node = detachedProps<DeclareVariableType>(props.parent, {
1445
1606
  type: 'DeclareVariable',
1446
- // $FlowFixMe[incompatible-call],
1447
- id: asDetachedNode(props.id),
1607
+ id: asDetachedNodeForCodeGen(props.id),
1608
+ kind: props.kind,
1448
1609
  });
1449
1610
  setParentPointersInDirectChildren(node);
1450
1611
  return node;
@@ -1456,10 +1617,8 @@ export function DoWhileStatement(props: {
1456
1617
  }): DetachedNode<DoWhileStatementType> {
1457
1618
  const node = detachedProps<DoWhileStatementType>(props.parent, {
1458
1619
  type: 'DoWhileStatement',
1459
- // $FlowFixMe[incompatible-call],
1460
- body: asDetachedNode(props.body),
1461
- // $FlowFixMe[incompatible-call],
1462
- test: asDetachedNode(props.test),
1620
+ body: asDetachedNodeForCodeGen(props.body),
1621
+ test: asDetachedNodeForCodeGen(props.test),
1463
1622
  });
1464
1623
  setParentPointersInDirectChildren(node);
1465
1624
  return node;
@@ -1491,8 +1650,7 @@ export function EnumBooleanBody(props: {
1491
1650
  }): DetachedNode<EnumBooleanBodyType> {
1492
1651
  const node = detachedProps<EnumBooleanBodyType>(props.parent, {
1493
1652
  type: 'EnumBooleanBody',
1494
- // $FlowFixMe[incompatible-call],
1495
- members: props.members.map(n => asDetachedNode(n)),
1653
+ members: props.members.map(n => asDetachedNodeForCodeGen(n)),
1496
1654
  explicitType: props.explicitType,
1497
1655
  hasUnknownMembers: props.hasUnknownMembers,
1498
1656
  });
@@ -1506,10 +1664,8 @@ export function EnumBooleanMember(props: {
1506
1664
  }): DetachedNode<EnumBooleanMemberType> {
1507
1665
  const node = detachedProps<EnumBooleanMemberType>(props.parent, {
1508
1666
  type: 'EnumBooleanMember',
1509
- // $FlowFixMe[incompatible-call],
1510
- id: asDetachedNode(props.id),
1511
- // $FlowFixMe[incompatible-call],
1512
- init: asDetachedNode(props.init),
1667
+ id: asDetachedNodeForCodeGen(props.id),
1668
+ init: asDetachedNodeForCodeGen(props.init),
1513
1669
  });
1514
1670
  setParentPointersInDirectChildren(node);
1515
1671
  return node;
@@ -1521,10 +1677,8 @@ export function EnumDeclaration(props: {
1521
1677
  }): DetachedNode<EnumDeclarationType> {
1522
1678
  const node = detachedProps<EnumDeclarationType>(props.parent, {
1523
1679
  type: 'EnumDeclaration',
1524
- // $FlowFixMe[incompatible-call],
1525
- id: asDetachedNode(props.id),
1526
- // $FlowFixMe[incompatible-call],
1527
- body: asDetachedNode(props.body),
1680
+ id: asDetachedNodeForCodeGen(props.id),
1681
+ body: asDetachedNodeForCodeGen(props.body),
1528
1682
  });
1529
1683
  setParentPointersInDirectChildren(node);
1530
1684
  return node;
@@ -1536,8 +1690,7 @@ export function EnumDefaultedMember(props: {
1536
1690
  }): DetachedNode<EnumDefaultedMemberType> {
1537
1691
  const node = detachedProps<EnumDefaultedMemberType>(props.parent, {
1538
1692
  type: 'EnumDefaultedMember',
1539
- // $FlowFixMe[incompatible-call],
1540
- id: asDetachedNode(props.id),
1693
+ id: asDetachedNodeForCodeGen(props.id),
1541
1694
  });
1542
1695
  setParentPointersInDirectChildren(node);
1543
1696
  return node;
@@ -1549,8 +1702,7 @@ export function EnumNumberBody(props: {
1549
1702
  }): DetachedNode<EnumNumberBodyType> {
1550
1703
  const node = detachedProps<EnumNumberBodyType>(props.parent, {
1551
1704
  type: 'EnumNumberBody',
1552
- // $FlowFixMe[incompatible-call],
1553
- members: props.members.map(n => asDetachedNode(n)),
1705
+ members: props.members.map(n => asDetachedNodeForCodeGen(n)),
1554
1706
  explicitType: props.explicitType,
1555
1707
  hasUnknownMembers: props.hasUnknownMembers,
1556
1708
  });
@@ -1564,10 +1716,8 @@ export function EnumNumberMember(props: {
1564
1716
  }): DetachedNode<EnumNumberMemberType> {
1565
1717
  const node = detachedProps<EnumNumberMemberType>(props.parent, {
1566
1718
  type: 'EnumNumberMember',
1567
- // $FlowFixMe[incompatible-call],
1568
- id: asDetachedNode(props.id),
1569
- // $FlowFixMe[incompatible-call],
1570
- init: asDetachedNode(props.init),
1719
+ id: asDetachedNodeForCodeGen(props.id),
1720
+ init: asDetachedNodeForCodeGen(props.init),
1571
1721
  });
1572
1722
  setParentPointersInDirectChildren(node);
1573
1723
  return node;
@@ -1579,8 +1729,7 @@ export function EnumStringBody(props: {
1579
1729
  }): DetachedNode<EnumStringBodyType> {
1580
1730
  const node = detachedProps<EnumStringBodyType>(props.parent, {
1581
1731
  type: 'EnumStringBody',
1582
- // $FlowFixMe[incompatible-call],
1583
- members: props.members.map(n => asDetachedNode(n)),
1732
+ members: props.members.map(n => asDetachedNodeForCodeGen(n)),
1584
1733
  explicitType: props.explicitType,
1585
1734
  hasUnknownMembers: props.hasUnknownMembers,
1586
1735
  });
@@ -1594,10 +1743,8 @@ export function EnumStringMember(props: {
1594
1743
  }): DetachedNode<EnumStringMemberType> {
1595
1744
  const node = detachedProps<EnumStringMemberType>(props.parent, {
1596
1745
  type: 'EnumStringMember',
1597
- // $FlowFixMe[incompatible-call],
1598
- id: asDetachedNode(props.id),
1599
- // $FlowFixMe[incompatible-call],
1600
- init: asDetachedNode(props.init),
1746
+ id: asDetachedNodeForCodeGen(props.id),
1747
+ init: asDetachedNodeForCodeGen(props.init),
1601
1748
  });
1602
1749
  setParentPointersInDirectChildren(node);
1603
1750
  return node;
@@ -1609,8 +1756,7 @@ export function EnumSymbolBody(props: {
1609
1756
  }): DetachedNode<EnumSymbolBodyType> {
1610
1757
  const node = detachedProps<EnumSymbolBodyType>(props.parent, {
1611
1758
  type: 'EnumSymbolBody',
1612
- // $FlowFixMe[incompatible-call],
1613
- members: props.members.map(n => asDetachedNode(n)),
1759
+ members: props.members.map(n => asDetachedNodeForCodeGen(n)),
1614
1760
  hasUnknownMembers: props.hasUnknownMembers,
1615
1761
  });
1616
1762
  setParentPointersInDirectChildren(node);
@@ -1633,10 +1779,8 @@ export function ExportAllDeclaration(props: {
1633
1779
  }): DetachedNode<ExportAllDeclarationType> {
1634
1780
  const node = detachedProps<ExportAllDeclarationType>(props.parent, {
1635
1781
  type: 'ExportAllDeclaration',
1636
- // $FlowFixMe[incompatible-call],
1637
- exported: asDetachedNode(props.exported),
1638
- // $FlowFixMe[incompatible-call],
1639
- source: asDetachedNode(props.source),
1782
+ exported: asDetachedNodeForCodeGen(props.exported),
1783
+ source: asDetachedNodeForCodeGen(props.source),
1640
1784
  exportKind: props.exportKind,
1641
1785
  });
1642
1786
  setParentPointersInDirectChildren(node);
@@ -1649,8 +1793,7 @@ export function ExportDefaultDeclaration(props: {
1649
1793
  }): DetachedNode<ExportDefaultDeclarationType> {
1650
1794
  const node = detachedProps<ExportDefaultDeclarationType>(props.parent, {
1651
1795
  type: 'ExportDefaultDeclaration',
1652
- // $FlowFixMe[incompatible-call],
1653
- declaration: asDetachedNode(props.declaration),
1796
+ declaration: asDetachedNodeForCodeGen(props.declaration),
1654
1797
  });
1655
1798
  setParentPointersInDirectChildren(node);
1656
1799
  return node;
@@ -1662,10 +1805,8 @@ export function ExportSpecifier(props: {
1662
1805
  }): DetachedNode<ExportSpecifierType> {
1663
1806
  const node = detachedProps<ExportSpecifierType>(props.parent, {
1664
1807
  type: 'ExportSpecifier',
1665
- // $FlowFixMe[incompatible-call],
1666
- exported: asDetachedNode(props.exported),
1667
- // $FlowFixMe[incompatible-call],
1668
- local: asDetachedNode(props.local),
1808
+ exported: asDetachedNodeForCodeGen(props.exported),
1809
+ local: asDetachedNodeForCodeGen(props.local),
1669
1810
  });
1670
1811
  setParentPointersInDirectChildren(node);
1671
1812
  return node;
@@ -1677,8 +1818,7 @@ export function ExpressionStatement(props: {
1677
1818
  }): DetachedNode<ExpressionStatementType> {
1678
1819
  const node = detachedProps<ExpressionStatementType>(props.parent, {
1679
1820
  type: 'ExpressionStatement',
1680
- // $FlowFixMe[incompatible-call],
1681
- expression: asDetachedNode(props.expression),
1821
+ expression: asDetachedNodeForCodeGen(props.expression),
1682
1822
  directive: props.directive,
1683
1823
  });
1684
1824
  setParentPointersInDirectChildren(node);
@@ -1691,12 +1831,9 @@ export function ForInStatement(props: {
1691
1831
  }): DetachedNode<ForInStatementType> {
1692
1832
  const node = detachedProps<ForInStatementType>(props.parent, {
1693
1833
  type: 'ForInStatement',
1694
- // $FlowFixMe[incompatible-call],
1695
- left: asDetachedNode(props.left),
1696
- // $FlowFixMe[incompatible-call],
1697
- right: asDetachedNode(props.right),
1698
- // $FlowFixMe[incompatible-call],
1699
- body: asDetachedNode(props.body),
1834
+ left: asDetachedNodeForCodeGen(props.left),
1835
+ right: asDetachedNodeForCodeGen(props.right),
1836
+ body: asDetachedNodeForCodeGen(props.body),
1700
1837
  });
1701
1838
  setParentPointersInDirectChildren(node);
1702
1839
  return node;
@@ -1708,12 +1845,9 @@ export function ForOfStatement(props: {
1708
1845
  }): DetachedNode<ForOfStatementType> {
1709
1846
  const node = detachedProps<ForOfStatementType>(props.parent, {
1710
1847
  type: 'ForOfStatement',
1711
- // $FlowFixMe[incompatible-call],
1712
- left: asDetachedNode(props.left),
1713
- // $FlowFixMe[incompatible-call],
1714
- right: asDetachedNode(props.right),
1715
- // $FlowFixMe[incompatible-call],
1716
- body: asDetachedNode(props.body),
1848
+ left: asDetachedNodeForCodeGen(props.left),
1849
+ right: asDetachedNodeForCodeGen(props.right),
1850
+ body: asDetachedNodeForCodeGen(props.body),
1717
1851
  await: props.await,
1718
1852
  });
1719
1853
  setParentPointersInDirectChildren(node);
@@ -1726,14 +1860,10 @@ export function ForStatement(props: {
1726
1860
  }): DetachedNode<ForStatementType> {
1727
1861
  const node = detachedProps<ForStatementType>(props.parent, {
1728
1862
  type: 'ForStatement',
1729
- // $FlowFixMe[incompatible-call],
1730
- init: asDetachedNode(props.init),
1731
- // $FlowFixMe[incompatible-call],
1732
- test: asDetachedNode(props.test),
1733
- // $FlowFixMe[incompatible-call],
1734
- update: asDetachedNode(props.update),
1735
- // $FlowFixMe[incompatible-call],
1736
- body: asDetachedNode(props.body),
1863
+ init: asDetachedNodeForCodeGen(props.init),
1864
+ test: asDetachedNodeForCodeGen(props.test),
1865
+ update: asDetachedNodeForCodeGen(props.update),
1866
+ body: asDetachedNodeForCodeGen(props.body),
1737
1867
  });
1738
1868
  setParentPointersInDirectChildren(node);
1739
1869
  return node;
@@ -1745,18 +1875,12 @@ export function FunctionDeclaration(props: {
1745
1875
  }): DetachedNode<FunctionDeclarationType> {
1746
1876
  const node = detachedProps<FunctionDeclarationType>(props.parent, {
1747
1877
  type: 'FunctionDeclaration',
1748
- // $FlowFixMe[incompatible-call],
1749
- id: asDetachedNode(props.id),
1750
- // $FlowFixMe[incompatible-call],
1751
- params: props.params.map(n => asDetachedNode(n)),
1752
- // $FlowFixMe[incompatible-call],
1753
- body: asDetachedNode(props.body),
1754
- // $FlowFixMe[incompatible-call],
1755
- typeParameters: asDetachedNode(props.typeParameters),
1756
- // $FlowFixMe[incompatible-call],
1757
- returnType: asDetachedNode(props.returnType),
1758
- // $FlowFixMe[incompatible-call],
1759
- predicate: asDetachedNode(props.predicate),
1878
+ id: asDetachedNodeForCodeGen(props.id),
1879
+ params: props.params.map(n => asDetachedNodeForCodeGen(n)),
1880
+ body: asDetachedNodeForCodeGen(props.body),
1881
+ typeParameters: asDetachedNodeForCodeGen(props.typeParameters),
1882
+ returnType: asDetachedNodeForCodeGen(props.returnType),
1883
+ predicate: asDetachedNodeForCodeGen(props.predicate),
1760
1884
  generator: props.generator,
1761
1885
  async: props.async,
1762
1886
  });
@@ -1770,18 +1894,12 @@ export function FunctionExpression(props: {
1770
1894
  }): DetachedNode<FunctionExpressionType> {
1771
1895
  const node = detachedProps<FunctionExpressionType>(props.parent, {
1772
1896
  type: 'FunctionExpression',
1773
- // $FlowFixMe[incompatible-call],
1774
- id: asDetachedNode(props.id),
1775
- // $FlowFixMe[incompatible-call],
1776
- params: props.params.map(n => asDetachedNode(n)),
1777
- // $FlowFixMe[incompatible-call],
1778
- body: asDetachedNode(props.body),
1779
- // $FlowFixMe[incompatible-call],
1780
- typeParameters: asDetachedNode(props.typeParameters),
1781
- // $FlowFixMe[incompatible-call],
1782
- returnType: asDetachedNode(props.returnType),
1783
- // $FlowFixMe[incompatible-call],
1784
- predicate: asDetachedNode(props.predicate),
1897
+ id: asDetachedNodeForCodeGen(props.id),
1898
+ params: props.params.map(n => asDetachedNodeForCodeGen(n)),
1899
+ body: asDetachedNodeForCodeGen(props.body),
1900
+ typeParameters: asDetachedNodeForCodeGen(props.typeParameters),
1901
+ returnType: asDetachedNodeForCodeGen(props.returnType),
1902
+ predicate: asDetachedNodeForCodeGen(props.predicate),
1785
1903
  generator: props.generator,
1786
1904
  async: props.async,
1787
1905
  });
@@ -1795,16 +1913,11 @@ export function FunctionTypeAnnotation(props: {
1795
1913
  }): DetachedNode<FunctionTypeAnnotationType> {
1796
1914
  const node = detachedProps<FunctionTypeAnnotationType>(props.parent, {
1797
1915
  type: 'FunctionTypeAnnotation',
1798
- // $FlowFixMe[incompatible-call],
1799
- params: props.params.map(n => asDetachedNode(n)),
1800
- // $FlowFixMe[incompatible-call],
1801
- this: asDetachedNode(props.this),
1802
- // $FlowFixMe[incompatible-call],
1803
- returnType: asDetachedNode(props.returnType),
1804
- // $FlowFixMe[incompatible-call],
1805
- rest: asDetachedNode(props.rest),
1806
- // $FlowFixMe[incompatible-call],
1807
- typeParameters: asDetachedNode(props.typeParameters),
1916
+ params: props.params.map(n => asDetachedNodeForCodeGen(n)),
1917
+ this: asDetachedNodeForCodeGen(props.this),
1918
+ returnType: asDetachedNodeForCodeGen(props.returnType),
1919
+ rest: asDetachedNodeForCodeGen(props.rest),
1920
+ typeParameters: asDetachedNodeForCodeGen(props.typeParameters),
1808
1921
  });
1809
1922
  setParentPointersInDirectChildren(node);
1810
1923
  return node;
@@ -1816,10 +1929,8 @@ export function FunctionTypeParam(props: {
1816
1929
  }): DetachedNode<FunctionTypeParamType> {
1817
1930
  const node = detachedProps<FunctionTypeParamType>(props.parent, {
1818
1931
  type: 'FunctionTypeParam',
1819
- // $FlowFixMe[incompatible-call],
1820
- name: asDetachedNode(props.name),
1821
- // $FlowFixMe[incompatible-call],
1822
- typeAnnotation: asDetachedNode(props.typeAnnotation),
1932
+ name: asDetachedNodeForCodeGen(props.name),
1933
+ typeAnnotation: asDetachedNodeForCodeGen(props.typeAnnotation),
1823
1934
  optional: props.optional,
1824
1935
  });
1825
1936
  setParentPointersInDirectChildren(node);
@@ -1832,10 +1943,8 @@ export function GenericTypeAnnotation(props: {
1832
1943
  }): DetachedNode<GenericTypeAnnotationType> {
1833
1944
  const node = detachedProps<GenericTypeAnnotationType>(props.parent, {
1834
1945
  type: 'GenericTypeAnnotation',
1835
- // $FlowFixMe[incompatible-call],
1836
- id: asDetachedNode(props.id),
1837
- // $FlowFixMe[incompatible-call],
1838
- typeParameters: asDetachedNode(props.typeParameters),
1946
+ id: asDetachedNodeForCodeGen(props.id),
1947
+ typeParameters: asDetachedNodeForCodeGen(props.typeParameters),
1839
1948
  });
1840
1949
  setParentPointersInDirectChildren(node);
1841
1950
  return node;
@@ -1847,12 +1956,9 @@ export function IfStatement(props: {
1847
1956
  }): DetachedNode<IfStatementType> {
1848
1957
  const node = detachedProps<IfStatementType>(props.parent, {
1849
1958
  type: 'IfStatement',
1850
- // $FlowFixMe[incompatible-call],
1851
- test: asDetachedNode(props.test),
1852
- // $FlowFixMe[incompatible-call],
1853
- consequent: asDetachedNode(props.consequent),
1854
- // $FlowFixMe[incompatible-call],
1855
- alternate: asDetachedNode(props.alternate),
1959
+ test: asDetachedNodeForCodeGen(props.test),
1960
+ consequent: asDetachedNodeForCodeGen(props.consequent),
1961
+ alternate: asDetachedNodeForCodeGen(props.alternate),
1856
1962
  });
1857
1963
  setParentPointersInDirectChildren(node);
1858
1964
  return node;
@@ -1864,10 +1970,8 @@ export function ImportAttribute(props: {
1864
1970
  }): DetachedNode<ImportAttributeType> {
1865
1971
  const node = detachedProps<ImportAttributeType>(props.parent, {
1866
1972
  type: 'ImportAttribute',
1867
- // $FlowFixMe[incompatible-call],
1868
- key: asDetachedNode(props.key),
1869
- // $FlowFixMe[incompatible-call],
1870
- value: asDetachedNode(props.value),
1973
+ key: asDetachedNodeForCodeGen(props.key),
1974
+ value: asDetachedNodeForCodeGen(props.value),
1871
1975
  });
1872
1976
  setParentPointersInDirectChildren(node);
1873
1977
  return node;
@@ -1879,12 +1983,9 @@ export function ImportDeclaration(props: {
1879
1983
  }): DetachedNode<ImportDeclarationType> {
1880
1984
  const node = detachedProps<ImportDeclarationType>(props.parent, {
1881
1985
  type: 'ImportDeclaration',
1882
- // $FlowFixMe[incompatible-call],
1883
- specifiers: props.specifiers.map(n => asDetachedNode(n)),
1884
- // $FlowFixMe[incompatible-call],
1885
- source: asDetachedNode(props.source),
1886
- // $FlowFixMe[incompatible-call],
1887
- assertions: props.assertions?.map(n => asDetachedNode(n)),
1986
+ specifiers: props.specifiers.map(n => asDetachedNodeForCodeGen(n)),
1987
+ source: asDetachedNodeForCodeGen(props.source),
1988
+ assertions: props.assertions?.map(n => asDetachedNodeForCodeGen(n)),
1888
1989
  importKind: props.importKind,
1889
1990
  });
1890
1991
  setParentPointersInDirectChildren(node);
@@ -1897,8 +1998,7 @@ export function ImportDefaultSpecifier(props: {
1897
1998
  }): DetachedNode<ImportDefaultSpecifierType> {
1898
1999
  const node = detachedProps<ImportDefaultSpecifierType>(props.parent, {
1899
2000
  type: 'ImportDefaultSpecifier',
1900
- // $FlowFixMe[incompatible-call],
1901
- local: asDetachedNode(props.local),
2001
+ local: asDetachedNodeForCodeGen(props.local),
1902
2002
  });
1903
2003
  setParentPointersInDirectChildren(node);
1904
2004
  return node;
@@ -1910,10 +2010,8 @@ export function ImportExpression(props: {
1910
2010
  }): DetachedNode<ImportExpressionType> {
1911
2011
  const node = detachedProps<ImportExpressionType>(props.parent, {
1912
2012
  type: 'ImportExpression',
1913
- // $FlowFixMe[incompatible-call],
1914
- source: asDetachedNode(props.source),
1915
- // $FlowFixMe[incompatible-call],
1916
- attributes: asDetachedNode(props.attributes),
2013
+ source: asDetachedNodeForCodeGen(props.source),
2014
+ attributes: asDetachedNodeForCodeGen(props.attributes),
1917
2015
  });
1918
2016
  setParentPointersInDirectChildren(node);
1919
2017
  return node;
@@ -1925,8 +2023,7 @@ export function ImportNamespaceSpecifier(props: {
1925
2023
  }): DetachedNode<ImportNamespaceSpecifierType> {
1926
2024
  const node = detachedProps<ImportNamespaceSpecifierType>(props.parent, {
1927
2025
  type: 'ImportNamespaceSpecifier',
1928
- // $FlowFixMe[incompatible-call],
1929
- local: asDetachedNode(props.local),
2026
+ local: asDetachedNodeForCodeGen(props.local),
1930
2027
  });
1931
2028
  setParentPointersInDirectChildren(node);
1932
2029
  return node;
@@ -1938,10 +2035,8 @@ export function ImportSpecifier(props: {
1938
2035
  }): DetachedNode<ImportSpecifierType> {
1939
2036
  const node = detachedProps<ImportSpecifierType>(props.parent, {
1940
2037
  type: 'ImportSpecifier',
1941
- // $FlowFixMe[incompatible-call],
1942
- imported: asDetachedNode(props.imported),
1943
- // $FlowFixMe[incompatible-call],
1944
- local: asDetachedNode(props.local),
2038
+ imported: asDetachedNodeForCodeGen(props.imported),
2039
+ local: asDetachedNodeForCodeGen(props.local),
1945
2040
  importKind: props.importKind,
1946
2041
  });
1947
2042
  setParentPointersInDirectChildren(node);
@@ -1954,10 +2049,8 @@ export function IndexedAccessType(props: {
1954
2049
  }): DetachedNode<IndexedAccessTypeType> {
1955
2050
  const node = detachedProps<IndexedAccessTypeType>(props.parent, {
1956
2051
  type: 'IndexedAccessType',
1957
- // $FlowFixMe[incompatible-call],
1958
- objectType: asDetachedNode(props.objectType),
1959
- // $FlowFixMe[incompatible-call],
1960
- indexType: asDetachedNode(props.indexType),
2052
+ objectType: asDetachedNodeForCodeGen(props.objectType),
2053
+ indexType: asDetachedNodeForCodeGen(props.indexType),
1961
2054
  });
1962
2055
  setParentPointersInDirectChildren(node);
1963
2056
  return node;
@@ -1973,20 +2066,28 @@ export function InferredPredicate(
1973
2066
  });
1974
2067
  }
1975
2068
 
2069
+ export function InferTypeAnnotation(props: {
2070
+ ...$ReadOnly<InferTypeAnnotationProps>,
2071
+ +parent?: ESNode,
2072
+ }): DetachedNode<InferTypeAnnotationType> {
2073
+ const node = detachedProps<InferTypeAnnotationType>(props.parent, {
2074
+ type: 'InferTypeAnnotation',
2075
+ typeParameter: asDetachedNodeForCodeGen(props.typeParameter),
2076
+ });
2077
+ setParentPointersInDirectChildren(node);
2078
+ return node;
2079
+ }
2080
+
1976
2081
  export function InterfaceDeclaration(props: {
1977
2082
  ...$ReadOnly<InterfaceDeclarationProps>,
1978
2083
  +parent?: ESNode,
1979
2084
  }): DetachedNode<InterfaceDeclarationType> {
1980
2085
  const node = detachedProps<InterfaceDeclarationType>(props.parent, {
1981
2086
  type: 'InterfaceDeclaration',
1982
- // $FlowFixMe[incompatible-call],
1983
- id: asDetachedNode(props.id),
1984
- // $FlowFixMe[incompatible-call],
1985
- typeParameters: asDetachedNode(props.typeParameters),
1986
- // $FlowFixMe[incompatible-call],
1987
- extends: props.extends.map(n => asDetachedNode(n)),
1988
- // $FlowFixMe[incompatible-call],
1989
- body: asDetachedNode(props.body),
2087
+ id: asDetachedNodeForCodeGen(props.id),
2088
+ typeParameters: asDetachedNodeForCodeGen(props.typeParameters),
2089
+ extends: props.extends.map(n => asDetachedNodeForCodeGen(n)),
2090
+ body: asDetachedNodeForCodeGen(props.body),
1990
2091
  });
1991
2092
  setParentPointersInDirectChildren(node);
1992
2093
  return node;
@@ -1998,10 +2099,8 @@ export function InterfaceExtends(props: {
1998
2099
  }): DetachedNode<InterfaceExtendsType> {
1999
2100
  const node = detachedProps<InterfaceExtendsType>(props.parent, {
2000
2101
  type: 'InterfaceExtends',
2001
- // $FlowFixMe[incompatible-call],
2002
- id: asDetachedNode(props.id),
2003
- // $FlowFixMe[incompatible-call],
2004
- typeParameters: asDetachedNode(props.typeParameters),
2102
+ id: asDetachedNodeForCodeGen(props.id),
2103
+ typeParameters: asDetachedNodeForCodeGen(props.typeParameters),
2005
2104
  });
2006
2105
  setParentPointersInDirectChildren(node);
2007
2106
  return node;
@@ -2013,10 +2112,8 @@ export function InterfaceTypeAnnotation(props: {
2013
2112
  }): DetachedNode<InterfaceTypeAnnotationType> {
2014
2113
  const node = detachedProps<InterfaceTypeAnnotationType>(props.parent, {
2015
2114
  type: 'InterfaceTypeAnnotation',
2016
- // $FlowFixMe[incompatible-call],
2017
- extends: props.extends.map(n => asDetachedNode(n)),
2018
- // $FlowFixMe[incompatible-call],
2019
- body: asDetachedNode(props.body),
2115
+ extends: props.extends.map(n => asDetachedNodeForCodeGen(n)),
2116
+ body: asDetachedNodeForCodeGen(props.body),
2020
2117
  });
2021
2118
  setParentPointersInDirectChildren(node);
2022
2119
  return node;
@@ -2028,8 +2125,7 @@ export function IntersectionTypeAnnotation(props: {
2028
2125
  }): DetachedNode<IntersectionTypeAnnotationType> {
2029
2126
  const node = detachedProps<IntersectionTypeAnnotationType>(props.parent, {
2030
2127
  type: 'IntersectionTypeAnnotation',
2031
- // $FlowFixMe[incompatible-call],
2032
- types: props.types.map(n => asDetachedNode(n)),
2128
+ types: props.types.map(n => asDetachedNodeForCodeGen(n)),
2033
2129
  });
2034
2130
  setParentPointersInDirectChildren(node);
2035
2131
  return node;
@@ -2041,10 +2137,8 @@ export function JSXAttribute(props: {
2041
2137
  }): DetachedNode<JSXAttributeType> {
2042
2138
  const node = detachedProps<JSXAttributeType>(props.parent, {
2043
2139
  type: 'JSXAttribute',
2044
- // $FlowFixMe[incompatible-call],
2045
- name: asDetachedNode(props.name),
2046
- // $FlowFixMe[incompatible-call],
2047
- value: asDetachedNode(props.value),
2140
+ name: asDetachedNodeForCodeGen(props.name),
2141
+ value: asDetachedNodeForCodeGen(props.value),
2048
2142
  });
2049
2143
  setParentPointersInDirectChildren(node);
2050
2144
  return node;
@@ -2056,8 +2150,7 @@ export function JSXClosingElement(props: {
2056
2150
  }): DetachedNode<JSXClosingElementType> {
2057
2151
  const node = detachedProps<JSXClosingElementType>(props.parent, {
2058
2152
  type: 'JSXClosingElement',
2059
- // $FlowFixMe[incompatible-call],
2060
- name: asDetachedNode(props.name),
2153
+ name: asDetachedNodeForCodeGen(props.name),
2061
2154
  });
2062
2155
  setParentPointersInDirectChildren(node);
2063
2156
  return node;
@@ -2079,12 +2172,9 @@ export function JSXElement(props: {
2079
2172
  }): DetachedNode<JSXElementType> {
2080
2173
  const node = detachedProps<JSXElementType>(props.parent, {
2081
2174
  type: 'JSXElement',
2082
- // $FlowFixMe[incompatible-call],
2083
- openingElement: asDetachedNode(props.openingElement),
2084
- // $FlowFixMe[incompatible-call],
2085
- children: props.children.map(n => asDetachedNode(n)),
2086
- // $FlowFixMe[incompatible-call],
2087
- closingElement: asDetachedNode(props.closingElement),
2175
+ openingElement: asDetachedNodeForCodeGen(props.openingElement),
2176
+ children: props.children.map(n => asDetachedNodeForCodeGen(n)),
2177
+ closingElement: asDetachedNodeForCodeGen(props.closingElement),
2088
2178
  });
2089
2179
  setParentPointersInDirectChildren(node);
2090
2180
  return node;
@@ -2106,8 +2196,7 @@ export function JSXExpressionContainer(props: {
2106
2196
  }): DetachedNode<JSXExpressionContainerType> {
2107
2197
  const node = detachedProps<JSXExpressionContainerType>(props.parent, {
2108
2198
  type: 'JSXExpressionContainer',
2109
- // $FlowFixMe[incompatible-call],
2110
- expression: asDetachedNode(props.expression),
2199
+ expression: asDetachedNodeForCodeGen(props.expression),
2111
2200
  });
2112
2201
  setParentPointersInDirectChildren(node);
2113
2202
  return node;
@@ -2119,12 +2208,9 @@ export function JSXFragment(props: {
2119
2208
  }): DetachedNode<JSXFragmentType> {
2120
2209
  const node = detachedProps<JSXFragmentType>(props.parent, {
2121
2210
  type: 'JSXFragment',
2122
- // $FlowFixMe[incompatible-call],
2123
- openingFragment: asDetachedNode(props.openingFragment),
2124
- // $FlowFixMe[incompatible-call],
2125
- children: props.children.map(n => asDetachedNode(n)),
2126
- // $FlowFixMe[incompatible-call],
2127
- closingFragment: asDetachedNode(props.closingFragment),
2211
+ openingFragment: asDetachedNodeForCodeGen(props.openingFragment),
2212
+ children: props.children.map(n => asDetachedNodeForCodeGen(n)),
2213
+ closingFragment: asDetachedNodeForCodeGen(props.closingFragment),
2128
2214
  });
2129
2215
  setParentPointersInDirectChildren(node);
2130
2216
  return node;
@@ -2148,10 +2234,8 @@ export function JSXMemberExpression(props: {
2148
2234
  }): DetachedNode<JSXMemberExpressionType> {
2149
2235
  const node = detachedProps<JSXMemberExpressionType>(props.parent, {
2150
2236
  type: 'JSXMemberExpression',
2151
- // $FlowFixMe[incompatible-call],
2152
- object: asDetachedNode(props.object),
2153
- // $FlowFixMe[incompatible-call],
2154
- property: asDetachedNode(props.property),
2237
+ object: asDetachedNodeForCodeGen(props.object),
2238
+ property: asDetachedNodeForCodeGen(props.property),
2155
2239
  });
2156
2240
  setParentPointersInDirectChildren(node);
2157
2241
  return node;
@@ -2163,10 +2247,8 @@ export function JSXNamespacedName(props: {
2163
2247
  }): DetachedNode<JSXNamespacedNameType> {
2164
2248
  const node = detachedProps<JSXNamespacedNameType>(props.parent, {
2165
2249
  type: 'JSXNamespacedName',
2166
- // $FlowFixMe[incompatible-call],
2167
- namespace: asDetachedNode(props.namespace),
2168
- // $FlowFixMe[incompatible-call],
2169
- name: asDetachedNode(props.name),
2250
+ namespace: asDetachedNodeForCodeGen(props.namespace),
2251
+ name: asDetachedNodeForCodeGen(props.name),
2170
2252
  });
2171
2253
  setParentPointersInDirectChildren(node);
2172
2254
  return node;
@@ -2178,11 +2260,10 @@ export function JSXOpeningElement(props: {
2178
2260
  }): DetachedNode<JSXOpeningElementType> {
2179
2261
  const node = detachedProps<JSXOpeningElementType>(props.parent, {
2180
2262
  type: 'JSXOpeningElement',
2181
- // $FlowFixMe[incompatible-call],
2182
- name: asDetachedNode(props.name),
2183
- // $FlowFixMe[incompatible-call],
2184
- attributes: props.attributes.map(n => asDetachedNode(n)),
2263
+ name: asDetachedNodeForCodeGen(props.name),
2264
+ attributes: props.attributes.map(n => asDetachedNodeForCodeGen(n)),
2185
2265
  selfClosing: props.selfClosing,
2266
+ typeArguments: asDetachedNodeForCodeGen(props.typeArguments),
2186
2267
  });
2187
2268
  setParentPointersInDirectChildren(node);
2188
2269
  return node;
@@ -2204,8 +2285,7 @@ export function JSXSpreadAttribute(props: {
2204
2285
  }): DetachedNode<JSXSpreadAttributeType> {
2205
2286
  const node = detachedProps<JSXSpreadAttributeType>(props.parent, {
2206
2287
  type: 'JSXSpreadAttribute',
2207
- // $FlowFixMe[incompatible-call],
2208
- argument: asDetachedNode(props.argument),
2288
+ argument: asDetachedNodeForCodeGen(props.argument),
2209
2289
  });
2210
2290
  setParentPointersInDirectChildren(node);
2211
2291
  return node;
@@ -2217,8 +2297,7 @@ export function JSXSpreadChild(props: {
2217
2297
  }): DetachedNode<JSXSpreadChildType> {
2218
2298
  const node = detachedProps<JSXSpreadChildType>(props.parent, {
2219
2299
  type: 'JSXSpreadChild',
2220
- // $FlowFixMe[incompatible-call],
2221
- expression: asDetachedNode(props.expression),
2300
+ expression: asDetachedNodeForCodeGen(props.expression),
2222
2301
  });
2223
2302
  setParentPointersInDirectChildren(node);
2224
2303
  return node;
@@ -2237,16 +2316,26 @@ export function JSXText(props: {
2237
2316
  return node;
2238
2317
  }
2239
2318
 
2319
+ export function KeyofTypeAnnotation(props: {
2320
+ ...$ReadOnly<KeyofTypeAnnotationProps>,
2321
+ +parent?: ESNode,
2322
+ }): DetachedNode<KeyofTypeAnnotationType> {
2323
+ const node = detachedProps<KeyofTypeAnnotationType>(props.parent, {
2324
+ type: 'KeyofTypeAnnotation',
2325
+ argument: asDetachedNodeForCodeGen(props.argument),
2326
+ });
2327
+ setParentPointersInDirectChildren(node);
2328
+ return node;
2329
+ }
2330
+
2240
2331
  export function LabeledStatement(props: {
2241
2332
  ...$ReadOnly<LabeledStatementProps>,
2242
2333
  +parent?: ESNode,
2243
2334
  }): DetachedNode<LabeledStatementType> {
2244
2335
  const node = detachedProps<LabeledStatementType>(props.parent, {
2245
2336
  type: 'LabeledStatement',
2246
- // $FlowFixMe[incompatible-call],
2247
- label: asDetachedNode(props.label),
2248
- // $FlowFixMe[incompatible-call],
2249
- body: asDetachedNode(props.body),
2337
+ label: asDetachedNodeForCodeGen(props.label),
2338
+ body: asDetachedNodeForCodeGen(props.body),
2250
2339
  });
2251
2340
  setParentPointersInDirectChildren(node);
2252
2341
  return node;
@@ -2258,42 +2347,22 @@ export function LogicalExpression(props: {
2258
2347
  }): DetachedNode<LogicalExpressionType> {
2259
2348
  const node = detachedProps<LogicalExpressionType>(props.parent, {
2260
2349
  type: 'LogicalExpression',
2261
- // $FlowFixMe[incompatible-call],
2262
- left: asDetachedNode(props.left),
2263
- // $FlowFixMe[incompatible-call],
2264
- right: asDetachedNode(props.right),
2350
+ left: asDetachedNodeForCodeGen(props.left),
2351
+ right: asDetachedNodeForCodeGen(props.right),
2265
2352
  operator: props.operator,
2266
2353
  });
2267
2354
  setParentPointersInDirectChildren(node);
2268
2355
  return node;
2269
2356
  }
2270
2357
 
2271
- export function MemberExpression(props: {
2272
- ...$ReadOnly<MemberExpressionProps>,
2273
- +parent?: ESNode,
2274
- }): DetachedNode<MemberExpressionType> {
2275
- const node = detachedProps<MemberExpressionType>(props.parent, {
2276
- type: 'MemberExpression',
2277
- // $FlowFixMe[incompatible-call],
2278
- object: asDetachedNode(props.object),
2279
- // $FlowFixMe[incompatible-call],
2280
- property: asDetachedNode(props.property),
2281
- computed: props.computed,
2282
- });
2283
- setParentPointersInDirectChildren(node);
2284
- return node;
2285
- }
2286
-
2287
2358
  export function MetaProperty(props: {
2288
2359
  ...$ReadOnly<MetaPropertyProps>,
2289
2360
  +parent?: ESNode,
2290
2361
  }): DetachedNode<MetaPropertyType> {
2291
2362
  const node = detachedProps<MetaPropertyType>(props.parent, {
2292
2363
  type: 'MetaProperty',
2293
- // $FlowFixMe[incompatible-call],
2294
- meta: asDetachedNode(props.meta),
2295
- // $FlowFixMe[incompatible-call],
2296
- property: asDetachedNode(props.property),
2364
+ meta: asDetachedNodeForCodeGen(props.meta),
2365
+ property: asDetachedNodeForCodeGen(props.property),
2297
2366
  });
2298
2367
  setParentPointersInDirectChildren(node);
2299
2368
  return node;
@@ -2305,10 +2374,8 @@ export function MethodDefinition(props: {
2305
2374
  }): DetachedNode<MethodDefinitionType> {
2306
2375
  const node = detachedProps<MethodDefinitionType>(props.parent, {
2307
2376
  type: 'MethodDefinition',
2308
- // $FlowFixMe[incompatible-call],
2309
- key: asDetachedNode(props.key),
2310
- // $FlowFixMe[incompatible-call],
2311
- value: asDetachedNode(props.value),
2377
+ key: asDetachedNodeForCodeGen(props.key),
2378
+ value: asDetachedNodeForCodeGen(props.value),
2312
2379
  kind: props.kind,
2313
2380
  computed: props.computed,
2314
2381
  static: props.static,
@@ -2333,12 +2400,9 @@ export function NewExpression(props: {
2333
2400
  }): DetachedNode<NewExpressionType> {
2334
2401
  const node = detachedProps<NewExpressionType>(props.parent, {
2335
2402
  type: 'NewExpression',
2336
- // $FlowFixMe[incompatible-call],
2337
- callee: asDetachedNode(props.callee),
2338
- // $FlowFixMe[incompatible-call],
2339
- typeArguments: asDetachedNode(props.typeArguments),
2340
- // $FlowFixMe[incompatible-call],
2341
- arguments: props.arguments.map(n => asDetachedNode(n)),
2403
+ callee: asDetachedNodeForCodeGen(props.callee),
2404
+ typeArguments: asDetachedNodeForCodeGen(props.typeArguments),
2405
+ arguments: props.arguments.map(n => asDetachedNodeForCodeGen(n)),
2342
2406
  });
2343
2407
  setParentPointersInDirectChildren(node);
2344
2408
  return node;
@@ -2350,8 +2414,7 @@ export function NullableTypeAnnotation(props: {
2350
2414
  }): DetachedNode<NullableTypeAnnotationType> {
2351
2415
  const node = detachedProps<NullableTypeAnnotationType>(props.parent, {
2352
2416
  type: 'NullableTypeAnnotation',
2353
- // $FlowFixMe[incompatible-call],
2354
- typeAnnotation: asDetachedNode(props.typeAnnotation),
2417
+ typeAnnotation: asDetachedNodeForCodeGen(props.typeAnnotation),
2355
2418
  });
2356
2419
  setParentPointersInDirectChildren(node);
2357
2420
  return node;
@@ -2396,8 +2459,7 @@ export function ObjectExpression(props: {
2396
2459
  }): DetachedNode<ObjectExpressionType> {
2397
2460
  const node = detachedProps<ObjectExpressionType>(props.parent, {
2398
2461
  type: 'ObjectExpression',
2399
- // $FlowFixMe[incompatible-call],
2400
- properties: props.properties.map(n => asDetachedNode(n)),
2462
+ properties: props.properties.map(n => asDetachedNodeForCodeGen(n)),
2401
2463
  });
2402
2464
  setParentPointersInDirectChildren(node);
2403
2465
  return node;
@@ -2409,10 +2471,8 @@ export function ObjectPattern(props: {
2409
2471
  }): DetachedNode<ObjectPatternType> {
2410
2472
  const node = detachedProps<ObjectPatternType>(props.parent, {
2411
2473
  type: 'ObjectPattern',
2412
- // $FlowFixMe[incompatible-call],
2413
- properties: props.properties.map(n => asDetachedNode(n)),
2414
- // $FlowFixMe[incompatible-call],
2415
- typeAnnotation: asDetachedNode(props.typeAnnotation),
2474
+ properties: props.properties.map(n => asDetachedNodeForCodeGen(n)),
2475
+ typeAnnotation: asDetachedNodeForCodeGen(props.typeAnnotation),
2416
2476
  });
2417
2477
  setParentPointersInDirectChildren(node);
2418
2478
  return node;
@@ -2424,14 +2484,10 @@ export function ObjectTypeAnnotation(props: {
2424
2484
  }): DetachedNode<ObjectTypeAnnotationType> {
2425
2485
  const node = detachedProps<ObjectTypeAnnotationType>(props.parent, {
2426
2486
  type: 'ObjectTypeAnnotation',
2427
- // $FlowFixMe[incompatible-call],
2428
- properties: props.properties.map(n => asDetachedNode(n)),
2429
- // $FlowFixMe[incompatible-call],
2430
- indexers: props.indexers.map(n => asDetachedNode(n)),
2431
- // $FlowFixMe[incompatible-call],
2432
- callProperties: props.callProperties.map(n => asDetachedNode(n)),
2433
- // $FlowFixMe[incompatible-call],
2434
- internalSlots: props.internalSlots.map(n => asDetachedNode(n)),
2487
+ properties: props.properties.map(n => asDetachedNodeForCodeGen(n)),
2488
+ indexers: props.indexers.map(n => asDetachedNodeForCodeGen(n)),
2489
+ callProperties: props.callProperties.map(n => asDetachedNodeForCodeGen(n)),
2490
+ internalSlots: props.internalSlots.map(n => asDetachedNodeForCodeGen(n)),
2435
2491
  inexact: props.inexact,
2436
2492
  exact: props.exact,
2437
2493
  });
@@ -2445,8 +2501,7 @@ export function ObjectTypeCallProperty(props: {
2445
2501
  }): DetachedNode<ObjectTypeCallPropertyType> {
2446
2502
  const node = detachedProps<ObjectTypeCallPropertyType>(props.parent, {
2447
2503
  type: 'ObjectTypeCallProperty',
2448
- // $FlowFixMe[incompatible-call],
2449
- value: asDetachedNode(props.value),
2504
+ value: asDetachedNodeForCodeGen(props.value),
2450
2505
  static: props.static,
2451
2506
  });
2452
2507
  setParentPointersInDirectChildren(node);
@@ -2459,15 +2514,11 @@ export function ObjectTypeIndexer(props: {
2459
2514
  }): DetachedNode<ObjectTypeIndexerType> {
2460
2515
  const node = detachedProps<ObjectTypeIndexerType>(props.parent, {
2461
2516
  type: 'ObjectTypeIndexer',
2462
- // $FlowFixMe[incompatible-call],
2463
- id: asDetachedNode(props.id),
2464
- // $FlowFixMe[incompatible-call],
2465
- key: asDetachedNode(props.key),
2466
- // $FlowFixMe[incompatible-call],
2467
- value: asDetachedNode(props.value),
2517
+ id: asDetachedNodeForCodeGen(props.id),
2518
+ key: asDetachedNodeForCodeGen(props.key),
2519
+ value: asDetachedNodeForCodeGen(props.value),
2468
2520
  static: props.static,
2469
- // $FlowFixMe[incompatible-call],
2470
- variance: asDetachedNode(props.variance),
2521
+ variance: asDetachedNodeForCodeGen(props.variance),
2471
2522
  });
2472
2523
  setParentPointersInDirectChildren(node);
2473
2524
  return node;
@@ -2479,10 +2530,8 @@ export function ObjectTypeInternalSlot(props: {
2479
2530
  }): DetachedNode<ObjectTypeInternalSlotType> {
2480
2531
  const node = detachedProps<ObjectTypeInternalSlotType>(props.parent, {
2481
2532
  type: 'ObjectTypeInternalSlot',
2482
- // $FlowFixMe[incompatible-call],
2483
- id: asDetachedNode(props.id),
2484
- // $FlowFixMe[incompatible-call],
2485
- value: asDetachedNode(props.value),
2533
+ id: asDetachedNodeForCodeGen(props.id),
2534
+ value: asDetachedNodeForCodeGen(props.value),
2486
2535
  optional: props.optional,
2487
2536
  static: props.static,
2488
2537
  method: props.method,
@@ -2491,14 +2540,29 @@ export function ObjectTypeInternalSlot(props: {
2491
2540
  return node;
2492
2541
  }
2493
2542
 
2543
+ export function ObjectTypeMappedTypeProperty(props: {
2544
+ ...$ReadOnly<ObjectTypeMappedTypePropertyProps>,
2545
+ +parent?: ESNode,
2546
+ }): DetachedNode<ObjectTypeMappedTypePropertyType> {
2547
+ const node = detachedProps<ObjectTypeMappedTypePropertyType>(props.parent, {
2548
+ type: 'ObjectTypeMappedTypeProperty',
2549
+ keyTparam: asDetachedNodeForCodeGen(props.keyTparam),
2550
+ propType: asDetachedNodeForCodeGen(props.propType),
2551
+ sourceType: asDetachedNodeForCodeGen(props.sourceType),
2552
+ variance: asDetachedNodeForCodeGen(props.variance),
2553
+ optional: props.optional,
2554
+ });
2555
+ setParentPointersInDirectChildren(node);
2556
+ return node;
2557
+ }
2558
+
2494
2559
  export function ObjectTypeSpreadProperty(props: {
2495
2560
  ...$ReadOnly<ObjectTypeSpreadPropertyProps>,
2496
2561
  +parent?: ESNode,
2497
2562
  }): DetachedNode<ObjectTypeSpreadPropertyType> {
2498
2563
  const node = detachedProps<ObjectTypeSpreadPropertyType>(props.parent, {
2499
2564
  type: 'ObjectTypeSpreadProperty',
2500
- // $FlowFixMe[incompatible-call],
2501
- argument: asDetachedNode(props.argument),
2565
+ argument: asDetachedNodeForCodeGen(props.argument),
2502
2566
  });
2503
2567
  setParentPointersInDirectChildren(node);
2504
2568
  return node;
@@ -2510,14 +2574,10 @@ export function OpaqueType(props: {
2510
2574
  }): DetachedNode<OpaqueTypeType> {
2511
2575
  const node = detachedProps<OpaqueTypeType>(props.parent, {
2512
2576
  type: 'OpaqueType',
2513
- // $FlowFixMe[incompatible-call],
2514
- id: asDetachedNode(props.id),
2515
- // $FlowFixMe[incompatible-call],
2516
- typeParameters: asDetachedNode(props.typeParameters),
2517
- // $FlowFixMe[incompatible-call],
2518
- impltype: asDetachedNode(props.impltype),
2519
- // $FlowFixMe[incompatible-call],
2520
- supertype: asDetachedNode(props.supertype),
2577
+ id: asDetachedNodeForCodeGen(props.id),
2578
+ typeParameters: asDetachedNodeForCodeGen(props.typeParameters),
2579
+ impltype: asDetachedNodeForCodeGen(props.impltype),
2580
+ supertype: asDetachedNodeForCodeGen(props.supertype),
2521
2581
  });
2522
2582
  setParentPointersInDirectChildren(node);
2523
2583
  return node;
@@ -2529,10 +2589,8 @@ export function OptionalIndexedAccessType(props: {
2529
2589
  }): DetachedNode<OptionalIndexedAccessTypeType> {
2530
2590
  const node = detachedProps<OptionalIndexedAccessTypeType>(props.parent, {
2531
2591
  type: 'OptionalIndexedAccessType',
2532
- // $FlowFixMe[incompatible-call],
2533
- objectType: asDetachedNode(props.objectType),
2534
- // $FlowFixMe[incompatible-call],
2535
- indexType: asDetachedNode(props.indexType),
2592
+ objectType: asDetachedNodeForCodeGen(props.objectType),
2593
+ indexType: asDetachedNodeForCodeGen(props.indexType),
2536
2594
  optional: props.optional,
2537
2595
  });
2538
2596
  setParentPointersInDirectChildren(node);
@@ -2557,10 +2615,8 @@ export function Property(props: {
2557
2615
  }): DetachedNode<PropertyType> {
2558
2616
  const node = detachedProps<PropertyType>(props.parent, {
2559
2617
  type: 'Property',
2560
- // $FlowFixMe[incompatible-call],
2561
- key: asDetachedNode(props.key),
2562
- // $FlowFixMe[incompatible-call],
2563
- value: asDetachedNode(props.value),
2618
+ key: asDetachedNodeForCodeGen(props.key),
2619
+ value: asDetachedNodeForCodeGen(props.value),
2564
2620
  kind: props.kind,
2565
2621
  computed: props.computed,
2566
2622
  method: props.method,
@@ -2576,20 +2632,15 @@ export function PropertyDefinition(props: {
2576
2632
  }): DetachedNode<PropertyDefinitionType> {
2577
2633
  const node = detachedProps<PropertyDefinitionType>(props.parent, {
2578
2634
  type: 'PropertyDefinition',
2579
- // $FlowFixMe[incompatible-call],
2580
- key: asDetachedNode(props.key),
2581
- // $FlowFixMe[incompatible-call],
2582
- value: asDetachedNode(props.value),
2635
+ key: asDetachedNodeForCodeGen(props.key),
2636
+ value: asDetachedNodeForCodeGen(props.value),
2583
2637
  computed: props.computed,
2584
2638
  static: props.static,
2585
2639
  declare: props.declare,
2586
2640
  optional: props.optional,
2587
- // $FlowFixMe[incompatible-call],
2588
- variance: asDetachedNode(props.variance),
2589
- // $FlowFixMe[incompatible-call],
2590
- typeAnnotation: asDetachedNode(props.typeAnnotation),
2591
- // $FlowFixMe[incompatible-call],
2592
- tsModifiers: asDetachedNode(props.tsModifiers),
2641
+ variance: asDetachedNodeForCodeGen(props.variance),
2642
+ typeAnnotation: asDetachedNodeForCodeGen(props.typeAnnotation),
2643
+ tsModifiers: asDetachedNodeForCodeGen(props.tsModifiers),
2593
2644
  });
2594
2645
  setParentPointersInDirectChildren(node);
2595
2646
  return node;
@@ -2601,10 +2652,21 @@ export function QualifiedTypeIdentifier(props: {
2601
2652
  }): DetachedNode<QualifiedTypeIdentifierType> {
2602
2653
  const node = detachedProps<QualifiedTypeIdentifierType>(props.parent, {
2603
2654
  type: 'QualifiedTypeIdentifier',
2604
- // $FlowFixMe[incompatible-call],
2605
- qualification: asDetachedNode(props.qualification),
2606
- // $FlowFixMe[incompatible-call],
2607
- id: asDetachedNode(props.id),
2655
+ qualification: asDetachedNodeForCodeGen(props.qualification),
2656
+ id: asDetachedNodeForCodeGen(props.id),
2657
+ });
2658
+ setParentPointersInDirectChildren(node);
2659
+ return node;
2660
+ }
2661
+
2662
+ export function QualifiedTypeofIdentifier(props: {
2663
+ ...$ReadOnly<QualifiedTypeofIdentifierProps>,
2664
+ +parent?: ESNode,
2665
+ }): DetachedNode<QualifiedTypeofIdentifierType> {
2666
+ const node = detachedProps<QualifiedTypeofIdentifierType>(props.parent, {
2667
+ type: 'QualifiedTypeofIdentifier',
2668
+ qualification: asDetachedNodeForCodeGen(props.qualification),
2669
+ id: asDetachedNodeForCodeGen(props.id),
2608
2670
  });
2609
2671
  setParentPointersInDirectChildren(node);
2610
2672
  return node;
@@ -2616,8 +2678,7 @@ export function RestElement(props: {
2616
2678
  }): DetachedNode<RestElementType> {
2617
2679
  const node = detachedProps<RestElementType>(props.parent, {
2618
2680
  type: 'RestElement',
2619
- // $FlowFixMe[incompatible-call],
2620
- argument: asDetachedNode(props.argument),
2681
+ argument: asDetachedNodeForCodeGen(props.argument),
2621
2682
  });
2622
2683
  setParentPointersInDirectChildren(node);
2623
2684
  return node;
@@ -2629,8 +2690,7 @@ export function ReturnStatement(props: {
2629
2690
  }): DetachedNode<ReturnStatementType> {
2630
2691
  const node = detachedProps<ReturnStatementType>(props.parent, {
2631
2692
  type: 'ReturnStatement',
2632
- // $FlowFixMe[incompatible-call],
2633
- argument: asDetachedNode(props.argument),
2693
+ argument: asDetachedNodeForCodeGen(props.argument),
2634
2694
  });
2635
2695
  setParentPointersInDirectChildren(node);
2636
2696
  return node;
@@ -2642,8 +2702,7 @@ export function SequenceExpression(props: {
2642
2702
  }): DetachedNode<SequenceExpressionType> {
2643
2703
  const node = detachedProps<SequenceExpressionType>(props.parent, {
2644
2704
  type: 'SequenceExpression',
2645
- // $FlowFixMe[incompatible-call],
2646
- expressions: props.expressions.map(n => asDetachedNode(n)),
2705
+ expressions: props.expressions.map(n => asDetachedNodeForCodeGen(n)),
2647
2706
  });
2648
2707
  setParentPointersInDirectChildren(node);
2649
2708
  return node;
@@ -2655,8 +2714,7 @@ export function SpreadElement(props: {
2655
2714
  }): DetachedNode<SpreadElementType> {
2656
2715
  const node = detachedProps<SpreadElementType>(props.parent, {
2657
2716
  type: 'SpreadElement',
2658
- // $FlowFixMe[incompatible-call],
2659
- argument: asDetachedNode(props.argument),
2717
+ argument: asDetachedNodeForCodeGen(props.argument),
2660
2718
  });
2661
2719
  setParentPointersInDirectChildren(node);
2662
2720
  return node;
@@ -2701,10 +2759,8 @@ export function SwitchCase(props: {
2701
2759
  }): DetachedNode<SwitchCaseType> {
2702
2760
  const node = detachedProps<SwitchCaseType>(props.parent, {
2703
2761
  type: 'SwitchCase',
2704
- // $FlowFixMe[incompatible-call],
2705
- test: asDetachedNode(props.test),
2706
- // $FlowFixMe[incompatible-call],
2707
- consequent: props.consequent.map(n => asDetachedNode(n)),
2762
+ test: asDetachedNodeForCodeGen(props.test),
2763
+ consequent: props.consequent.map(n => asDetachedNodeForCodeGen(n)),
2708
2764
  });
2709
2765
  setParentPointersInDirectChildren(node);
2710
2766
  return node;
@@ -2716,10 +2772,8 @@ export function SwitchStatement(props: {
2716
2772
  }): DetachedNode<SwitchStatementType> {
2717
2773
  const node = detachedProps<SwitchStatementType>(props.parent, {
2718
2774
  type: 'SwitchStatement',
2719
- // $FlowFixMe[incompatible-call],
2720
- discriminant: asDetachedNode(props.discriminant),
2721
- // $FlowFixMe[incompatible-call],
2722
- cases: props.cases.map(n => asDetachedNode(n)),
2775
+ discriminant: asDetachedNodeForCodeGen(props.discriminant),
2776
+ cases: props.cases.map(n => asDetachedNodeForCodeGen(n)),
2723
2777
  });
2724
2778
  setParentPointersInDirectChildren(node);
2725
2779
  return node;
@@ -2741,10 +2795,8 @@ export function TaggedTemplateExpression(props: {
2741
2795
  }): DetachedNode<TaggedTemplateExpressionType> {
2742
2796
  const node = detachedProps<TaggedTemplateExpressionType>(props.parent, {
2743
2797
  type: 'TaggedTemplateExpression',
2744
- // $FlowFixMe[incompatible-call],
2745
- tag: asDetachedNode(props.tag),
2746
- // $FlowFixMe[incompatible-call],
2747
- quasi: asDetachedNode(props.quasi),
2798
+ tag: asDetachedNodeForCodeGen(props.tag),
2799
+ quasi: asDetachedNodeForCodeGen(props.quasi),
2748
2800
  });
2749
2801
  setParentPointersInDirectChildren(node);
2750
2802
  return node;
@@ -2756,10 +2808,8 @@ export function TemplateLiteral(props: {
2756
2808
  }): DetachedNode<TemplateLiteralType> {
2757
2809
  const node = detachedProps<TemplateLiteralType>(props.parent, {
2758
2810
  type: 'TemplateLiteral',
2759
- // $FlowFixMe[incompatible-call],
2760
- quasis: props.quasis.map(n => asDetachedNode(n)),
2761
- // $FlowFixMe[incompatible-call],
2762
- expressions: props.expressions.map(n => asDetachedNode(n)),
2811
+ quasis: props.quasis.map(n => asDetachedNodeForCodeGen(n)),
2812
+ expressions: props.expressions.map(n => asDetachedNodeForCodeGen(n)),
2763
2813
  });
2764
2814
  setParentPointersInDirectChildren(node);
2765
2815
  return node;
@@ -2791,8 +2841,7 @@ export function ThrowStatement(props: {
2791
2841
  }): DetachedNode<ThrowStatementType> {
2792
2842
  const node = detachedProps<ThrowStatementType>(props.parent, {
2793
2843
  type: 'ThrowStatement',
2794
- // $FlowFixMe[incompatible-call],
2795
- argument: asDetachedNode(props.argument),
2844
+ argument: asDetachedNodeForCodeGen(props.argument),
2796
2845
  });
2797
2846
  setParentPointersInDirectChildren(node);
2798
2847
  return node;
@@ -2804,12 +2853,9 @@ export function TryStatement(props: {
2804
2853
  }): DetachedNode<TryStatementType> {
2805
2854
  const node = detachedProps<TryStatementType>(props.parent, {
2806
2855
  type: 'TryStatement',
2807
- // $FlowFixMe[incompatible-call],
2808
- block: asDetachedNode(props.block),
2809
- // $FlowFixMe[incompatible-call],
2810
- handler: asDetachedNode(props.handler),
2811
- // $FlowFixMe[incompatible-call],
2812
- finalizer: asDetachedNode(props.finalizer),
2856
+ block: asDetachedNodeForCodeGen(props.block),
2857
+ handler: asDetachedNodeForCodeGen(props.handler),
2858
+ finalizer: asDetachedNodeForCodeGen(props.finalizer),
2813
2859
  });
2814
2860
  setParentPointersInDirectChildren(node);
2815
2861
  return node;
@@ -2821,8 +2867,35 @@ export function TupleTypeAnnotation(props: {
2821
2867
  }): DetachedNode<TupleTypeAnnotationType> {
2822
2868
  const node = detachedProps<TupleTypeAnnotationType>(props.parent, {
2823
2869
  type: 'TupleTypeAnnotation',
2824
- // $FlowFixMe[incompatible-call],
2825
- types: props.types.map(n => asDetachedNode(n)),
2870
+ types: props.types.map(n => asDetachedNodeForCodeGen(n)),
2871
+ });
2872
+ setParentPointersInDirectChildren(node);
2873
+ return node;
2874
+ }
2875
+
2876
+ export function TupleTypeLabeledElement(props: {
2877
+ ...$ReadOnly<TupleTypeLabeledElementProps>,
2878
+ +parent?: ESNode,
2879
+ }): DetachedNode<TupleTypeLabeledElementType> {
2880
+ const node = detachedProps<TupleTypeLabeledElementType>(props.parent, {
2881
+ type: 'TupleTypeLabeledElement',
2882
+ label: asDetachedNodeForCodeGen(props.label),
2883
+ elementType: asDetachedNodeForCodeGen(props.elementType),
2884
+ optional: props.optional,
2885
+ variance: asDetachedNodeForCodeGen(props.variance),
2886
+ });
2887
+ setParentPointersInDirectChildren(node);
2888
+ return node;
2889
+ }
2890
+
2891
+ export function TupleTypeSpreadElement(props: {
2892
+ ...$ReadOnly<TupleTypeSpreadElementProps>,
2893
+ +parent?: ESNode,
2894
+ }): DetachedNode<TupleTypeSpreadElementType> {
2895
+ const node = detachedProps<TupleTypeSpreadElementType>(props.parent, {
2896
+ type: 'TupleTypeSpreadElement',
2897
+ label: asDetachedNodeForCodeGen(props.label),
2898
+ typeAnnotation: asDetachedNodeForCodeGen(props.typeAnnotation),
2826
2899
  });
2827
2900
  setParentPointersInDirectChildren(node);
2828
2901
  return node;
@@ -2834,12 +2907,9 @@ export function TypeAlias(props: {
2834
2907
  }): DetachedNode<TypeAliasType> {
2835
2908
  const node = detachedProps<TypeAliasType>(props.parent, {
2836
2909
  type: 'TypeAlias',
2837
- // $FlowFixMe[incompatible-call],
2838
- id: asDetachedNode(props.id),
2839
- // $FlowFixMe[incompatible-call],
2840
- typeParameters: asDetachedNode(props.typeParameters),
2841
- // $FlowFixMe[incompatible-call],
2842
- right: asDetachedNode(props.right),
2910
+ id: asDetachedNodeForCodeGen(props.id),
2911
+ typeParameters: asDetachedNodeForCodeGen(props.typeParameters),
2912
+ right: asDetachedNodeForCodeGen(props.right),
2843
2913
  });
2844
2914
  setParentPointersInDirectChildren(node);
2845
2915
  return node;
@@ -2851,8 +2921,7 @@ export function TypeAnnotation(props: {
2851
2921
  }): DetachedNode<TypeAnnotationType> {
2852
2922
  const node = detachedProps<TypeAnnotationType>(props.parent, {
2853
2923
  type: 'TypeAnnotation',
2854
- // $FlowFixMe[incompatible-call],
2855
- typeAnnotation: asDetachedNode(props.typeAnnotation),
2924
+ typeAnnotation: asDetachedNodeForCodeGen(props.typeAnnotation),
2856
2925
  });
2857
2926
  setParentPointersInDirectChildren(node);
2858
2927
  return node;
@@ -2864,10 +2933,8 @@ export function TypeCastExpression(props: {
2864
2933
  }): DetachedNode<TypeCastExpressionType> {
2865
2934
  const node = detachedProps<TypeCastExpressionType>(props.parent, {
2866
2935
  type: 'TypeCastExpression',
2867
- // $FlowFixMe[incompatible-call],
2868
- expression: asDetachedNode(props.expression),
2869
- // $FlowFixMe[incompatible-call],
2870
- typeAnnotation: asDetachedNode(props.typeAnnotation),
2936
+ expression: asDetachedNodeForCodeGen(props.expression),
2937
+ typeAnnotation: asDetachedNodeForCodeGen(props.typeAnnotation),
2871
2938
  });
2872
2939
  setParentPointersInDirectChildren(node);
2873
2940
  return node;
@@ -2879,8 +2946,7 @@ export function TypeofTypeAnnotation(props: {
2879
2946
  }): DetachedNode<TypeofTypeAnnotationType> {
2880
2947
  const node = detachedProps<TypeofTypeAnnotationType>(props.parent, {
2881
2948
  type: 'TypeofTypeAnnotation',
2882
- // $FlowFixMe[incompatible-call],
2883
- argument: asDetachedNode(props.argument),
2949
+ argument: asDetachedNodeForCodeGen(props.argument),
2884
2950
  });
2885
2951
  setParentPointersInDirectChildren(node);
2886
2952
  return node;
@@ -2893,12 +2959,9 @@ export function TypeParameter(props: {
2893
2959
  const node = detachedProps<TypeParameterType>(props.parent, {
2894
2960
  type: 'TypeParameter',
2895
2961
  name: props.name,
2896
- // $FlowFixMe[incompatible-call],
2897
- bound: asDetachedNode(props.bound),
2898
- // $FlowFixMe[incompatible-call],
2899
- variance: asDetachedNode(props.variance),
2900
- // $FlowFixMe[incompatible-call],
2901
- default: asDetachedNode(props.default),
2962
+ bound: asDetachedNodeForCodeGen(props.bound),
2963
+ variance: asDetachedNodeForCodeGen(props.variance),
2964
+ default: asDetachedNodeForCodeGen(props.default),
2902
2965
  });
2903
2966
  setParentPointersInDirectChildren(node);
2904
2967
  return node;
@@ -2910,8 +2973,7 @@ export function TypeParameterDeclaration(props: {
2910
2973
  }): DetachedNode<TypeParameterDeclarationType> {
2911
2974
  const node = detachedProps<TypeParameterDeclarationType>(props.parent, {
2912
2975
  type: 'TypeParameterDeclaration',
2913
- // $FlowFixMe[incompatible-call],
2914
- params: props.params.map(n => asDetachedNode(n)),
2976
+ params: props.params.map(n => asDetachedNodeForCodeGen(n)),
2915
2977
  });
2916
2978
  setParentPointersInDirectChildren(node);
2917
2979
  return node;
@@ -2923,8 +2985,21 @@ export function TypeParameterInstantiation(props: {
2923
2985
  }): DetachedNode<TypeParameterInstantiationType> {
2924
2986
  const node = detachedProps<TypeParameterInstantiationType>(props.parent, {
2925
2987
  type: 'TypeParameterInstantiation',
2926
- // $FlowFixMe[incompatible-call],
2927
- params: props.params.map(n => asDetachedNode(n)),
2988
+ params: props.params.map(n => asDetachedNodeForCodeGen(n)),
2989
+ });
2990
+ setParentPointersInDirectChildren(node);
2991
+ return node;
2992
+ }
2993
+
2994
+ export function TypePredicate(props: {
2995
+ ...$ReadOnly<TypePredicateProps>,
2996
+ +parent?: ESNode,
2997
+ }): DetachedNode<TypePredicateType> {
2998
+ const node = detachedProps<TypePredicateType>(props.parent, {
2999
+ type: 'TypePredicate',
3000
+ parameterName: asDetachedNodeForCodeGen(props.parameterName),
3001
+ typeAnnotation: asDetachedNodeForCodeGen(props.typeAnnotation),
3002
+ asserts: props.asserts,
2928
3003
  });
2929
3004
  setParentPointersInDirectChildren(node);
2930
3005
  return node;
@@ -2937,8 +3012,7 @@ export function UnaryExpression(props: {
2937
3012
  const node = detachedProps<UnaryExpressionType>(props.parent, {
2938
3013
  type: 'UnaryExpression',
2939
3014
  operator: props.operator,
2940
- // $FlowFixMe[incompatible-call],
2941
- argument: asDetachedNode(props.argument),
3015
+ argument: asDetachedNodeForCodeGen(props.argument),
2942
3016
  prefix: props.prefix,
2943
3017
  });
2944
3018
  setParentPointersInDirectChildren(node);
@@ -2951,8 +3025,7 @@ export function UnionTypeAnnotation(props: {
2951
3025
  }): DetachedNode<UnionTypeAnnotationType> {
2952
3026
  const node = detachedProps<UnionTypeAnnotationType>(props.parent, {
2953
3027
  type: 'UnionTypeAnnotation',
2954
- // $FlowFixMe[incompatible-call],
2955
- types: props.types.map(n => asDetachedNode(n)),
3028
+ types: props.types.map(n => asDetachedNodeForCodeGen(n)),
2956
3029
  });
2957
3030
  setParentPointersInDirectChildren(node);
2958
3031
  return node;
@@ -2965,8 +3038,7 @@ export function UpdateExpression(props: {
2965
3038
  const node = detachedProps<UpdateExpressionType>(props.parent, {
2966
3039
  type: 'UpdateExpression',
2967
3040
  operator: props.operator,
2968
- // $FlowFixMe[incompatible-call],
2969
- argument: asDetachedNode(props.argument),
3041
+ argument: asDetachedNodeForCodeGen(props.argument),
2970
3042
  prefix: props.prefix,
2971
3043
  });
2972
3044
  setParentPointersInDirectChildren(node);
@@ -2980,8 +3052,7 @@ export function VariableDeclaration(props: {
2980
3052
  const node = detachedProps<VariableDeclarationType>(props.parent, {
2981
3053
  type: 'VariableDeclaration',
2982
3054
  kind: props.kind,
2983
- // $FlowFixMe[incompatible-call],
2984
- declarations: props.declarations.map(n => asDetachedNode(n)),
3055
+ declarations: props.declarations.map(n => asDetachedNodeForCodeGen(n)),
2985
3056
  });
2986
3057
  setParentPointersInDirectChildren(node);
2987
3058
  return node;
@@ -2993,10 +3064,8 @@ export function VariableDeclarator(props: {
2993
3064
  }): DetachedNode<VariableDeclaratorType> {
2994
3065
  const node = detachedProps<VariableDeclaratorType>(props.parent, {
2995
3066
  type: 'VariableDeclarator',
2996
- // $FlowFixMe[incompatible-call],
2997
- init: asDetachedNode(props.init),
2998
- // $FlowFixMe[incompatible-call],
2999
- id: asDetachedNode(props.id),
3067
+ init: asDetachedNodeForCodeGen(props.init),
3068
+ id: asDetachedNodeForCodeGen(props.id),
3000
3069
  });
3001
3070
  setParentPointersInDirectChildren(node);
3002
3071
  return node;
@@ -3030,10 +3099,8 @@ export function WhileStatement(props: {
3030
3099
  }): DetachedNode<WhileStatementType> {
3031
3100
  const node = detachedProps<WhileStatementType>(props.parent, {
3032
3101
  type: 'WhileStatement',
3033
- // $FlowFixMe[incompatible-call],
3034
- body: asDetachedNode(props.body),
3035
- // $FlowFixMe[incompatible-call],
3036
- test: asDetachedNode(props.test),
3102
+ body: asDetachedNodeForCodeGen(props.body),
3103
+ test: asDetachedNodeForCodeGen(props.test),
3037
3104
  });
3038
3105
  setParentPointersInDirectChildren(node);
3039
3106
  return node;
@@ -3045,10 +3112,8 @@ export function WithStatement(props: {
3045
3112
  }): DetachedNode<WithStatementType> {
3046
3113
  const node = detachedProps<WithStatementType>(props.parent, {
3047
3114
  type: 'WithStatement',
3048
- // $FlowFixMe[incompatible-call],
3049
- object: asDetachedNode(props.object),
3050
- // $FlowFixMe[incompatible-call],
3051
- body: asDetachedNode(props.body),
3115
+ object: asDetachedNodeForCodeGen(props.object),
3116
+ body: asDetachedNodeForCodeGen(props.body),
3052
3117
  });
3053
3118
  setParentPointersInDirectChildren(node);
3054
3119
  return node;
@@ -3060,8 +3125,7 @@ export function YieldExpression(props: {
3060
3125
  }): DetachedNode<YieldExpressionType> {
3061
3126
  const node = detachedProps<YieldExpressionType>(props.parent, {
3062
3127
  type: 'YieldExpression',
3063
- // $FlowFixMe[incompatible-call],
3064
- argument: asDetachedNode(props.argument),
3128
+ argument: asDetachedNodeForCodeGen(props.argument),
3065
3129
  delegate: props.delegate,
3066
3130
  });
3067
3131
  setParentPointersInDirectChildren(node);