@react-native/codegen 0.72.1 → 0.72.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (125) hide show
  1. package/lib/CodegenSchema.d.ts +348 -0
  2. package/lib/CodegenSchema.js.flow +31 -3
  3. package/lib/SchemaValidator.d.ts +11 -0
  4. package/lib/cli/combine/combine-js-to-schema.js +8 -8
  5. package/lib/cli/combine/combine-js-to-schema.js.flow +8 -7
  6. package/lib/cli/parser/parser.js +8 -15
  7. package/lib/cli/parser/parser.js.flow +8 -14
  8. package/lib/generators/Utils.js +16 -0
  9. package/lib/generators/Utils.js.flow +20 -0
  10. package/lib/generators/__test_fixtures__/fixtures.js +2 -1
  11. package/lib/generators/__test_fixtures__/fixtures.js.flow +2 -1
  12. package/lib/generators/components/ComponentsGeneratorUtils.js +10 -1
  13. package/lib/generators/components/ComponentsGeneratorUtils.js.flow +12 -2
  14. package/lib/generators/components/CppHelpers.js +8 -15
  15. package/lib/generators/components/CppHelpers.js.flow +8 -19
  16. package/lib/generators/components/GenerateEventEmitterCpp.js +7 -3
  17. package/lib/generators/components/GenerateEventEmitterCpp.js.flow +7 -3
  18. package/lib/generators/components/GenerateEventEmitterH.js +2 -2
  19. package/lib/generators/components/GenerateEventEmitterH.js.flow +1 -2
  20. package/lib/generators/components/GeneratePropsH.js +3 -4
  21. package/lib/generators/components/GeneratePropsH.js.flow +2 -4
  22. package/lib/generators/components/GeneratePropsJavaDelegate.js +2 -0
  23. package/lib/generators/components/GeneratePropsJavaDelegate.js.flow +2 -0
  24. package/lib/generators/components/GeneratePropsJavaInterface.js +3 -0
  25. package/lib/generators/components/GeneratePropsJavaInterface.js.flow +3 -0
  26. package/lib/generators/components/GeneratePropsJavaPojo/serializePojo.js +8 -0
  27. package/lib/generators/components/GeneratePropsJavaPojo/serializePojo.js.flow +12 -0
  28. package/lib/generators/components/GenerateTests.js +3 -2
  29. package/lib/generators/components/GenerateTests.js.flow +3 -1
  30. package/lib/generators/components/GenerateViewConfigJs.js +5 -2
  31. package/lib/generators/components/GenerateViewConfigJs.js.flow +5 -2
  32. package/lib/generators/components/JavaHelpers.js +9 -0
  33. package/lib/generators/components/JavaHelpers.js.flow +12 -1
  34. package/lib/generators/components/__test_fixtures__/fixtures.js +41 -0
  35. package/lib/generators/components/__test_fixtures__/fixtures.js.flow +42 -0
  36. package/lib/generators/modules/GenerateModuleCpp.js +9 -4
  37. package/lib/generators/modules/GenerateModuleCpp.js.flow +11 -3
  38. package/lib/generators/modules/GenerateModuleH.js +185 -33
  39. package/lib/generators/modules/GenerateModuleH.js.flow +203 -25
  40. package/lib/generators/modules/GenerateModuleJavaSpec.js +2 -2
  41. package/lib/generators/modules/GenerateModuleJavaSpec.js.flow +5 -5
  42. package/lib/generators/modules/GenerateModuleJniCpp.js +2 -2
  43. package/lib/generators/modules/GenerateModuleJniCpp.js.flow +5 -5
  44. package/lib/generators/modules/GenerateModuleObjCpp/index.js +2 -2
  45. package/lib/generators/modules/GenerateModuleObjCpp/index.js.flow +2 -2
  46. package/lib/generators/modules/GenerateModuleObjCpp/serializeMethod.js.flow +2 -2
  47. package/lib/generators/modules/Utils.js +4 -0
  48. package/lib/generators/modules/Utils.js.flow +6 -0
  49. package/lib/generators/modules/__test_fixtures__/fixtures.js +152 -10
  50. package/lib/generators/modules/__test_fixtures__/fixtures.js.flow +152 -10
  51. package/lib/parsers/error-utils.js +42 -19
  52. package/lib/parsers/error-utils.js.flow +46 -19
  53. package/lib/parsers/errors.d.ts +10 -0
  54. package/lib/parsers/errors.js +9 -29
  55. package/lib/parsers/errors.js.flow +2 -20
  56. package/lib/parsers/flow/Visitor.js +37 -0
  57. package/lib/parsers/flow/Visitor.js.flow +41 -0
  58. package/lib/parsers/flow/components/__test_fixtures__/fixtures.js +20 -2
  59. package/lib/parsers/flow/components/__test_fixtures__/fixtures.js.flow +20 -2
  60. package/lib/parsers/flow/components/commands.js +3 -0
  61. package/lib/parsers/flow/components/commands.js.flow +2 -1
  62. package/lib/parsers/flow/components/componentsUtils.js +10 -0
  63. package/lib/parsers/flow/components/componentsUtils.js.flow +11 -1
  64. package/lib/parsers/flow/components/events.js.flow +1 -1
  65. package/lib/parsers/flow/components/extends.js.flow +1 -1
  66. package/lib/parsers/flow/components/index.js +16 -20
  67. package/lib/parsers/flow/components/index.js.flow +8 -7
  68. package/lib/parsers/flow/components/options.js.flow +1 -1
  69. package/lib/parsers/flow/components/props.js.flow +1 -1
  70. package/lib/parsers/flow/modules/__test_fixtures__/failures.js +54 -0
  71. package/lib/parsers/flow/modules/__test_fixtures__/failures.js.flow +56 -0
  72. package/lib/parsers/flow/modules/__test_fixtures__/fixtures.js +64 -1
  73. package/lib/parsers/flow/modules/__test_fixtures__/fixtures.js.flow +66 -1
  74. package/lib/parsers/flow/modules/index.js +112 -48
  75. package/lib/parsers/flow/modules/index.js.flow +115 -44
  76. package/lib/parsers/flow/parser.d.ts +10 -0
  77. package/lib/parsers/flow/parser.js +173 -32
  78. package/lib/parsers/flow/parser.js.flow +201 -24
  79. package/lib/parsers/flow/utils.js +33 -57
  80. package/lib/parsers/flow/utils.js.flow +37 -60
  81. package/lib/parsers/parser.d.ts +17 -0
  82. package/lib/parsers/parser.js.flow +124 -17
  83. package/lib/parsers/parserMock.js +101 -30
  84. package/lib/parsers/parserMock.js.flow +139 -24
  85. package/lib/parsers/parsers-commons.js +121 -119
  86. package/lib/parsers/parsers-commons.js.flow +136 -131
  87. package/lib/parsers/parsers-primitives.js +75 -12
  88. package/lib/parsers/parsers-primitives.js.flow +92 -13
  89. package/lib/parsers/schema/index.d.ts +10 -0
  90. package/lib/parsers/{typescript/components/schema.js.flow → schema.js.flow} +1 -1
  91. package/lib/parsers/typescript/Visitor.js +42 -0
  92. package/lib/parsers/typescript/Visitor.js.flow +47 -0
  93. package/lib/parsers/typescript/components/__test_fixtures__/fixtures.js +22 -0
  94. package/lib/parsers/typescript/components/__test_fixtures__/fixtures.js.flow +22 -0
  95. package/lib/parsers/typescript/components/commands.js +3 -0
  96. package/lib/parsers/typescript/components/commands.js.flow +2 -1
  97. package/lib/parsers/typescript/components/componentsUtils.js +5 -0
  98. package/lib/parsers/typescript/components/componentsUtils.js.flow +6 -1
  99. package/lib/parsers/typescript/components/events.js.flow +1 -1
  100. package/lib/parsers/typescript/components/extends.js.flow +1 -1
  101. package/lib/parsers/typescript/components/index.js +15 -19
  102. package/lib/parsers/typescript/components/index.js.flow +8 -7
  103. package/lib/parsers/typescript/components/options.js.flow +1 -1
  104. package/lib/parsers/typescript/components/props.js.flow +1 -1
  105. package/lib/parsers/typescript/modules/__test_fixtures__/failures.js +52 -0
  106. package/lib/parsers/typescript/modules/__test_fixtures__/failures.js.flow +54 -0
  107. package/lib/parsers/typescript/modules/__test_fixtures__/fixtures.js +142 -0
  108. package/lib/parsers/typescript/modules/__test_fixtures__/fixtures.js.flow +146 -0
  109. package/lib/parsers/typescript/modules/index.js +276 -110
  110. package/lib/parsers/typescript/modules/index.js.flow +237 -68
  111. package/lib/parsers/typescript/parser.d.ts +10 -0
  112. package/lib/parsers/typescript/parser.js +175 -25
  113. package/lib/parsers/typescript/parser.js.flow +184 -26
  114. package/lib/parsers/typescript/utils.js +40 -51
  115. package/lib/parsers/typescript/utils.js.flow +44 -55
  116. package/lib/parsers/utils.js +0 -125
  117. package/lib/parsers/utils.js.flow +3 -70
  118. package/package.json +4 -1
  119. package/lib/parsers/flow/components/schema.js +0 -106
  120. package/lib/parsers/flow/components/schema.js.flow +0 -62
  121. package/lib/parsers/flow/index.js +0 -80
  122. package/lib/parsers/flow/index.js.flow +0 -85
  123. package/lib/parsers/typescript/index.js +0 -85
  124. package/lib/parsers/typescript/index.js.flow +0 -94
  125. /package/lib/parsers/{typescript/components/schema.js → schema.js} +0 -0
@@ -140,59 +140,119 @@ function _iterableToArrayLimit(arr, i) {
140
140
  function _arrayWithHoles(arr) {
141
141
  if (Array.isArray(arr)) return arr;
142
142
  }
143
- const _require = require('../../utils'),
144
- visit = _require.visit,
145
- isModuleRegistryCall = _require.isModuleRegistryCall,
146
- verifyPlatforms = _require.verifyPlatforms;
147
- const _require2 = require('../utils'),
148
- resolveTypeAnnotation = _require2.resolveTypeAnnotation,
149
- getTypes = _require2.getTypes;
150
- const _require3 = require('../../parsers-commons'),
151
- parseObjectProperty = _require3.parseObjectProperty,
152
- translateDefault = _require3.translateDefault,
153
- buildPropertySchema = _require3.buildPropertySchema;
154
- const _require4 = require('../../parsers-primitives'),
155
- emitArrayType = _require4.emitArrayType,
156
- emitBoolean = _require4.emitBoolean,
157
- emitDouble = _require4.emitDouble,
158
- emitFloat = _require4.emitFloat,
159
- emitFunction = _require4.emitFunction,
160
- emitNumber = _require4.emitNumber,
161
- emitInt32 = _require4.emitInt32,
162
- emitObject = _require4.emitObject,
163
- emitPromise = _require4.emitPromise,
164
- emitRootTag = _require4.emitRootTag,
165
- emitVoid = _require4.emitVoid,
166
- emitString = _require4.emitString,
167
- emitStringish = _require4.emitStringish,
168
- emitMixed = _require4.emitMixed,
169
- emitUnion = _require4.emitUnion,
170
- typeAliasResolution = _require4.typeAliasResolution,
171
- translateArrayTypeAnnotation = _require4.translateArrayTypeAnnotation;
172
- const _require5 = require('../../errors'),
173
- UnsupportedGenericParserError = _require5.UnsupportedGenericParserError,
143
+ const _require = require('../parseTopLevelType'),
144
+ flattenIntersectionType = _require.flattenIntersectionType;
145
+ const _require2 = require('../components/componentsUtils'),
146
+ flattenProperties = _require2.flattenProperties;
147
+ const _require3 = require('../../utils'),
148
+ visit = _require3.visit,
149
+ isModuleRegistryCall = _require3.isModuleRegistryCall,
150
+ verifyPlatforms = _require3.verifyPlatforms;
151
+ const _require4 = require('../utils'),
152
+ resolveTypeAnnotation = _require4.resolveTypeAnnotation;
153
+ const _require5 = require('../../parsers-commons'),
154
+ parseObjectProperty = _require5.parseObjectProperty,
155
+ buildPropertySchema = _require5.buildPropertySchema;
156
+ const _require6 = require('../../parsers-primitives'),
157
+ typeEnumResolution = _require6.typeEnumResolution;
158
+ const _require7 = require('../../parsers-primitives'),
159
+ emitArrayType = _require7.emitArrayType,
160
+ emitBoolean = _require7.emitBoolean,
161
+ emitDouble = _require7.emitDouble,
162
+ emitFloat = _require7.emitFloat,
163
+ emitFunction = _require7.emitFunction,
164
+ emitNumber = _require7.emitNumber,
165
+ emitInt32 = _require7.emitInt32,
166
+ emitGenericObject = _require7.emitGenericObject,
167
+ emitObject = _require7.emitObject,
168
+ emitPromise = _require7.emitPromise,
169
+ emitRootTag = _require7.emitRootTag,
170
+ emitVoid = _require7.emitVoid,
171
+ emitString = _require7.emitString,
172
+ emitStringish = _require7.emitStringish,
173
+ emitMixed = _require7.emitMixed,
174
+ emitUnion = _require7.emitUnion,
175
+ typeAliasResolution = _require7.typeAliasResolution,
176
+ translateArrayTypeAnnotation = _require7.translateArrayTypeAnnotation;
177
+ const _require8 = require('../../errors'),
178
+ UnsupportedGenericParserError = _require8.UnsupportedGenericParserError,
174
179
  UnsupportedTypeAnnotationParserError =
175
- _require5.UnsupportedTypeAnnotationParserError,
176
- IncorrectModuleRegistryCallArgumentTypeParserError =
177
- _require5.IncorrectModuleRegistryCallArgumentTypeParserError;
178
- const _require6 = require('../../error-utils'),
179
- throwIfUntypedModule = _require6.throwIfUntypedModule,
180
+ _require8.UnsupportedTypeAnnotationParserError;
181
+ const _require9 = require('../../error-utils'),
182
+ throwIfUntypedModule = _require9.throwIfUntypedModule,
180
183
  throwIfUnusedModuleInterfaceParserError =
181
- _require6.throwIfUnusedModuleInterfaceParserError,
182
- throwIfModuleInterfaceNotFound = _require6.throwIfModuleInterfaceNotFound,
183
- throwIfModuleInterfaceIsMisnamed = _require6.throwIfModuleInterfaceIsMisnamed,
184
+ _require9.throwIfUnusedModuleInterfaceParserError,
185
+ throwIfModuleInterfaceNotFound = _require9.throwIfModuleInterfaceNotFound,
186
+ throwIfModuleInterfaceIsMisnamed = _require9.throwIfModuleInterfaceIsMisnamed,
184
187
  throwIfWrongNumberOfCallExpressionArgs =
185
- _require6.throwIfWrongNumberOfCallExpressionArgs,
188
+ _require9.throwIfWrongNumberOfCallExpressionArgs,
186
189
  throwIfMoreThanOneModuleRegistryCalls =
187
- _require6.throwIfMoreThanOneModuleRegistryCalls,
190
+ _require9.throwIfMoreThanOneModuleRegistryCalls,
188
191
  throwIfMoreThanOneModuleInterfaceParserError =
189
- _require6.throwIfMoreThanOneModuleInterfaceParserError,
192
+ _require9.throwIfMoreThanOneModuleInterfaceParserError,
190
193
  throwIfIncorrectModuleRegistryCallTypeParameterParserError =
191
- _require6.throwIfIncorrectModuleRegistryCallTypeParameterParserError;
192
- const _require7 = require('../parser'),
193
- TypeScriptParser = _require7.TypeScriptParser;
194
+ _require9.throwIfIncorrectModuleRegistryCallTypeParameterParserError,
195
+ throwIfIncorrectModuleRegistryCallArgument =
196
+ _require9.throwIfIncorrectModuleRegistryCallArgument,
197
+ throwIfPartialNotAnnotatingTypeParameter =
198
+ _require9.throwIfPartialNotAnnotatingTypeParameter,
199
+ throwIfPartialWithMoreParameter = _require9.throwIfPartialWithMoreParameter;
194
200
  const language = 'TypeScript';
195
- const parser = new TypeScriptParser();
201
+ function translateObjectTypeAnnotation(
202
+ hasteModuleName,
203
+ /**
204
+ * TODO(T108222691): Use flow-types for @babel/parser
205
+ */
206
+ nullable,
207
+ objectMembers,
208
+ typeResolutionStatus,
209
+ baseTypes,
210
+ types,
211
+ aliasMap,
212
+ enumMap,
213
+ tryParse,
214
+ cxxOnly,
215
+ parser,
216
+ ) {
217
+ // $FlowFixMe[missing-type-arg]
218
+ const properties = objectMembers
219
+ .map(property => {
220
+ return tryParse(() => {
221
+ return parseObjectProperty(
222
+ property,
223
+ hasteModuleName,
224
+ types,
225
+ aliasMap,
226
+ enumMap,
227
+ tryParse,
228
+ cxxOnly,
229
+ nullable,
230
+ translateTypeAnnotation,
231
+ parser,
232
+ );
233
+ });
234
+ })
235
+ .filter(Boolean);
236
+ let objectTypeAnnotation;
237
+ if (baseTypes.length === 0) {
238
+ objectTypeAnnotation = {
239
+ type: 'ObjectTypeAnnotation',
240
+ properties,
241
+ };
242
+ } else {
243
+ objectTypeAnnotation = {
244
+ type: 'ObjectTypeAnnotation',
245
+ properties,
246
+ baseTypes,
247
+ };
248
+ }
249
+ return typeAliasResolution(
250
+ typeResolutionStatus,
251
+ objectTypeAnnotation,
252
+ aliasMap,
253
+ nullable,
254
+ );
255
+ }
196
256
  function translateTypeAnnotation(
197
257
  hasteModuleName,
198
258
  /**
@@ -201,8 +261,10 @@ function translateTypeAnnotation(
201
261
  typeScriptTypeAnnotation,
202
262
  types,
203
263
  aliasMap,
264
+ enumMap,
204
265
  tryParse,
205
266
  cxxOnly,
267
+ parser,
206
268
  ) {
207
269
  const _resolveTypeAnnotatio = resolveTypeAnnotation(
208
270
  typeScriptTypeAnnotation,
@@ -210,19 +272,20 @@ function translateTypeAnnotation(
210
272
  ),
211
273
  nullable = _resolveTypeAnnotatio.nullable,
212
274
  typeAnnotation = _resolveTypeAnnotatio.typeAnnotation,
213
- typeAliasResolutionStatus = _resolveTypeAnnotatio.typeAliasResolutionStatus;
275
+ typeResolutionStatus = _resolveTypeAnnotatio.typeResolutionStatus;
214
276
  switch (typeAnnotation.type) {
215
277
  case 'TSArrayType': {
216
278
  return translateArrayTypeAnnotation(
217
279
  hasteModuleName,
218
280
  types,
219
281
  aliasMap,
282
+ enumMap,
220
283
  cxxOnly,
221
284
  'Array',
222
285
  typeAnnotation.elementType,
223
286
  nullable,
224
- language,
225
287
  translateTypeAnnotation,
288
+ parser,
226
289
  );
227
290
  }
228
291
  case 'TSTypeOperator': {
@@ -234,12 +297,13 @@ function translateTypeAnnotation(
234
297
  hasteModuleName,
235
298
  types,
236
299
  aliasMap,
300
+ enumMap,
237
301
  cxxOnly,
238
302
  'ReadonlyArray',
239
303
  typeAnnotation.typeAnnotation.elementType,
240
304
  nullable,
241
- language,
242
305
  translateTypeAnnotation,
306
+ parser,
243
307
  );
244
308
  } else {
245
309
  throw new UnsupportedGenericParserError(
@@ -262,6 +326,7 @@ function translateTypeAnnotation(
262
326
  nullable,
263
327
  types,
264
328
  aliasMap,
329
+ enumMap,
265
330
  tryParse,
266
331
  cxxOnly,
267
332
  translateTypeAnnotation,
@@ -275,6 +340,7 @@ function translateTypeAnnotation(
275
340
  parser,
276
341
  types,
277
342
  aliasMap,
343
+ enumMap,
278
344
  cxxOnly,
279
345
  nullable,
280
346
  translateTypeAnnotation,
@@ -294,46 +360,154 @@ function translateTypeAnnotation(
294
360
  }
295
361
  case 'UnsafeObject':
296
362
  case 'Object': {
297
- return emitObject(nullable);
363
+ return emitGenericObject(nullable);
364
+ }
365
+ case 'Partial': {
366
+ throwIfPartialWithMoreParameter(typeAnnotation);
367
+ const annotatedElement = parser.extractAnnotatedElement(
368
+ typeAnnotation,
369
+ types,
370
+ );
371
+ throwIfPartialNotAnnotatingTypeParameter(
372
+ typeAnnotation,
373
+ types,
374
+ parser,
375
+ );
376
+ const properties = annotatedElement.typeAnnotation.members.map(
377
+ member => {
378
+ return {
379
+ name: member.key.name,
380
+ optional: true,
381
+ typeAnnotation: translateTypeAnnotation(
382
+ hasteModuleName,
383
+ member.typeAnnotation.typeAnnotation,
384
+ types,
385
+ aliasMap,
386
+ enumMap,
387
+ tryParse,
388
+ cxxOnly,
389
+ parser,
390
+ ),
391
+ };
392
+ },
393
+ );
394
+ return emitObject(nullable, properties);
298
395
  }
299
396
  default: {
300
- return translateDefault(
397
+ throw new UnsupportedGenericParserError(
301
398
  hasteModuleName,
302
399
  typeAnnotation,
303
- types,
304
- nullable,
305
400
  parser,
306
401
  );
307
402
  }
308
403
  }
309
404
  }
405
+ case 'TSInterfaceDeclaration': {
406
+ var _typeAnnotation$exten;
407
+ const baseTypes = (
408
+ (_typeAnnotation$exten = typeAnnotation.extends) !== null &&
409
+ _typeAnnotation$exten !== void 0
410
+ ? _typeAnnotation$exten
411
+ : []
412
+ ).map(extend => extend.expression.name);
413
+ for (const baseType of baseTypes) {
414
+ // ensure base types exist and appear in aliasMap
415
+ translateTypeAnnotation(
416
+ hasteModuleName,
417
+ {
418
+ type: 'TSTypeReference',
419
+ typeName: {
420
+ type: 'Identifier',
421
+ name: baseType,
422
+ },
423
+ },
424
+ types,
425
+ aliasMap,
426
+ enumMap,
427
+ tryParse,
428
+ cxxOnly,
429
+ parser,
430
+ );
431
+ }
432
+ return translateObjectTypeAnnotation(
433
+ hasteModuleName,
434
+ nullable,
435
+ flattenProperties([typeAnnotation], types),
436
+ typeResolutionStatus,
437
+ baseTypes,
438
+ types,
439
+ aliasMap,
440
+ enumMap,
441
+ tryParse,
442
+ cxxOnly,
443
+ parser,
444
+ );
445
+ }
446
+ case 'TSIntersectionType': {
447
+ return translateObjectTypeAnnotation(
448
+ hasteModuleName,
449
+ nullable,
450
+ flattenProperties(
451
+ flattenIntersectionType(typeAnnotation, types),
452
+ types,
453
+ ),
454
+ typeResolutionStatus,
455
+ [],
456
+ types,
457
+ aliasMap,
458
+ enumMap,
459
+ tryParse,
460
+ cxxOnly,
461
+ parser,
462
+ );
463
+ }
310
464
  case 'TSTypeLiteral': {
311
- const objectTypeAnnotation = {
312
- type: 'ObjectTypeAnnotation',
313
- // $FlowFixMe[missing-type-arg]
314
- properties: typeAnnotation.members
315
- .map(property => {
316
- return tryParse(() => {
317
- return parseObjectProperty(
318
- property,
319
- hasteModuleName,
320
- types,
321
- aliasMap,
322
- tryParse,
323
- cxxOnly,
324
- nullable,
325
- translateTypeAnnotation,
326
- parser,
327
- );
328
- });
329
- })
330
- .filter(Boolean),
331
- };
332
- return typeAliasResolution(
333
- typeAliasResolutionStatus,
334
- objectTypeAnnotation,
465
+ // if there is TSIndexSignature, then it is a dictionary
466
+ if (typeAnnotation.members) {
467
+ const indexSignatures = typeAnnotation.members.filter(
468
+ member => member.type === 'TSIndexSignature',
469
+ );
470
+ if (indexSignatures.length > 0) {
471
+ // check the property type to prevent developers from using unsupported types
472
+ // the return value from `translateTypeAnnotation` is unused
473
+ const propertyType = indexSignatures[0].typeAnnotation;
474
+ translateTypeAnnotation(
475
+ hasteModuleName,
476
+ propertyType,
477
+ types,
478
+ aliasMap,
479
+ enumMap,
480
+ tryParse,
481
+ cxxOnly,
482
+ parser,
483
+ );
484
+ // no need to do further checking
485
+ return emitGenericObject(nullable);
486
+ }
487
+ }
488
+ return translateObjectTypeAnnotation(
489
+ hasteModuleName,
490
+ nullable,
491
+ typeAnnotation.members,
492
+ typeResolutionStatus,
493
+ [],
494
+ types,
335
495
  aliasMap,
496
+ enumMap,
497
+ tryParse,
498
+ cxxOnly,
499
+ parser,
500
+ );
501
+ }
502
+ case 'TSEnumDeclaration': {
503
+ return typeEnumResolution(
504
+ typeAnnotation,
505
+ typeResolutionStatus,
336
506
  nullable,
507
+ hasteModuleName,
508
+ language,
509
+ enumMap,
510
+ parser,
337
511
  );
338
512
  }
339
513
  case 'TSBooleanKeyword': {
@@ -355,10 +529,11 @@ function translateTypeAnnotation(
355
529
  typeAnnotation,
356
530
  types,
357
531
  aliasMap,
532
+ enumMap,
358
533
  tryParse,
359
534
  cxxOnly,
360
535
  translateTypeAnnotation,
361
- language,
536
+ parser,
362
537
  );
363
538
  }
364
539
  case 'TSUnionType': {
@@ -380,17 +555,6 @@ function translateTypeAnnotation(
380
555
  }
381
556
  }
382
557
  }
383
- function isModuleInterface(node) {
384
- var _node$extends;
385
- return (
386
- node.type === 'TSInterfaceDeclaration' &&
387
- ((_node$extends = node.extends) === null || _node$extends === void 0
388
- ? void 0
389
- : _node$extends.length) === 1 &&
390
- node.extends[0].type === 'TSExpressionWithTypeArguments' &&
391
- node.extends[0].expression.name === 'TurboModule'
392
- );
393
- }
394
558
  function buildModuleSchema(
395
559
  hasteModuleName,
396
560
  /**
@@ -398,9 +562,12 @@ function buildModuleSchema(
398
562
  */
399
563
  ast,
400
564
  tryParse,
565
+ parser,
401
566
  ) {
402
- const types = getTypes(ast);
403
- const moduleSpecs = Object.values(types).filter(isModuleInterface);
567
+ const types = parser.getTypes(ast);
568
+ const moduleSpecs = Object.values(types).filter(t =>
569
+ parser.isModuleInterface(t),
570
+ );
404
571
  throwIfModuleInterfaceNotFound(
405
572
  moduleSpecs.length,
406
573
  hasteModuleName,
@@ -430,13 +597,11 @@ function buildModuleSchema(
430
597
  hasteModuleName,
431
598
  moduleSpec,
432
599
  callExpressions,
433
- language,
434
600
  );
435
601
  throwIfMoreThanOneModuleRegistryCalls(
436
602
  hasteModuleName,
437
603
  callExpressions,
438
604
  callExpressions.length,
439
- language,
440
605
  );
441
606
  const callExpression = callExpressions[0];
442
607
  const typeParameters = callExpression.typeParameters;
@@ -446,18 +611,12 @@ function buildModuleSchema(
446
611
  callExpression,
447
612
  methodName,
448
613
  callExpression.arguments.length,
449
- language,
450
614
  );
451
- if (callExpression.arguments[0].type !== 'StringLiteral') {
452
- const type = callExpression.arguments[0].type;
453
- throw new IncorrectModuleRegistryCallArgumentTypeParserError(
454
- hasteModuleName,
455
- callExpression.arguments[0],
456
- methodName,
457
- type,
458
- language,
459
- );
460
- }
615
+ throwIfIncorrectModuleRegistryCallArgument(
616
+ hasteModuleName,
617
+ callExpression.arguments[0],
618
+ methodName,
619
+ );
461
620
  const $moduleName = callExpression.arguments[0].value;
462
621
  throwIfUntypedModule(
463
622
  typeParameters,
@@ -465,7 +624,6 @@ function buildModuleSchema(
465
624
  callExpression,
466
625
  methodName,
467
626
  $moduleName,
468
- language,
469
627
  );
470
628
  throwIfIncorrectModuleRegistryCallTypeParameterParserError(
471
629
  hasteModuleName,
@@ -494,30 +652,37 @@ function buildModuleSchema(
494
652
  )
495
653
  .map(property => {
496
654
  const aliasMap = {};
655
+ const enumMap = {};
497
656
  return tryParse(() => ({
498
657
  aliasMap: aliasMap,
658
+ enumMap: enumMap,
499
659
  propertyShape: buildPropertySchema(
500
660
  hasteModuleName,
501
661
  property,
502
662
  types,
503
663
  aliasMap,
664
+ enumMap,
504
665
  tryParse,
505
666
  cxxOnly,
506
- language,
507
667
  resolveTypeAnnotation,
508
668
  translateTypeAnnotation,
669
+ parser,
509
670
  ),
510
671
  }));
511
672
  })
512
673
  .filter(Boolean)
513
674
  .reduce(
514
- (moduleSchema, {aliasMap, propertyShape}) => {
675
+ (moduleSchema, {aliasMap, enumMap, propertyShape}) => {
515
676
  return {
516
677
  type: 'NativeModule',
517
- aliases: _objectSpread(
518
- _objectSpread({}, moduleSchema.aliases),
678
+ aliasMap: _objectSpread(
679
+ _objectSpread({}, moduleSchema.aliasMap),
519
680
  aliasMap,
520
681
  ),
682
+ enumMap: _objectSpread(
683
+ _objectSpread({}, moduleSchema.enumMap),
684
+ enumMap,
685
+ ),
521
686
  spec: {
522
687
  properties: [...moduleSchema.spec.properties, propertyShape],
523
688
  },
@@ -527,7 +692,8 @@ function buildModuleSchema(
527
692
  },
528
693
  {
529
694
  type: 'NativeModule',
530
- aliases: {},
695
+ aliasMap: {},
696
+ enumMap: {},
531
697
  spec: {
532
698
  properties: [],
533
699
  },