@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
@@ -145,15 +145,13 @@ const _require = require('../../utils'),
145
145
  isModuleRegistryCall = _require.isModuleRegistryCall,
146
146
  verifyPlatforms = _require.verifyPlatforms;
147
147
  const _require2 = require('../utils'),
148
- resolveTypeAnnotation = _require2.resolveTypeAnnotation,
149
- getTypes = _require2.getTypes;
148
+ resolveTypeAnnotation = _require2.resolveTypeAnnotation;
150
149
  const _require3 = require('../../parsers-commons'),
151
150
  unwrapNullable = _require3.unwrapNullable,
152
151
  wrapNullable = _require3.wrapNullable,
153
152
  assertGenericTypeAnnotationHasExactlyOneTypeParameter =
154
153
  _require3.assertGenericTypeAnnotationHasExactlyOneTypeParameter,
155
154
  parseObjectProperty = _require3.parseObjectProperty,
156
- translateDefault = _require3.translateDefault,
157
155
  buildPropertySchema = _require3.buildPropertySchema;
158
156
  const _require4 = require('../../parsers-primitives'),
159
157
  emitArrayType = _require4.emitArrayType,
@@ -163,6 +161,7 @@ const _require4 = require('../../parsers-primitives'),
163
161
  emitFunction = _require4.emitFunction,
164
162
  emitNumber = _require4.emitNumber,
165
163
  emitInt32 = _require4.emitInt32,
164
+ emitGenericObject = _require4.emitGenericObject,
166
165
  emitObject = _require4.emitObject,
167
166
  emitPromise = _require4.emitPromise,
168
167
  emitRootTag = _require4.emitRootTag,
@@ -172,12 +171,11 @@ const _require4 = require('../../parsers-primitives'),
172
171
  emitMixed = _require4.emitMixed,
173
172
  emitUnion = _require4.emitUnion,
174
173
  typeAliasResolution = _require4.typeAliasResolution,
175
- translateArrayTypeAnnotation = _require4.translateArrayTypeAnnotation;
174
+ typeEnumResolution = _require4.typeEnumResolution;
176
175
  const _require5 = require('../../errors'),
177
176
  UnsupportedTypeAnnotationParserError =
178
177
  _require5.UnsupportedTypeAnnotationParserError,
179
- IncorrectModuleRegistryCallArgumentTypeParserError =
180
- _require5.IncorrectModuleRegistryCallArgumentTypeParserError;
178
+ UnsupportedGenericParserError = _require5.UnsupportedGenericParserError;
181
179
  const _require6 = require('../../error-utils'),
182
180
  throwIfModuleInterfaceNotFound = _require6.throwIfModuleInterfaceNotFound,
183
181
  throwIfModuleInterfaceIsMisnamed = _require6.throwIfModuleInterfaceIsMisnamed,
@@ -189,13 +187,15 @@ const _require6 = require('../../error-utils'),
189
187
  _require6.throwIfMoreThanOneModuleRegistryCalls,
190
188
  throwIfIncorrectModuleRegistryCallTypeParameterParserError =
191
189
  _require6.throwIfIncorrectModuleRegistryCallTypeParameterParserError,
190
+ throwIfIncorrectModuleRegistryCallArgument =
191
+ _require6.throwIfIncorrectModuleRegistryCallArgument,
192
192
  throwIfUntypedModule = _require6.throwIfUntypedModule,
193
193
  throwIfMoreThanOneModuleInterfaceParserError =
194
- _require6.throwIfMoreThanOneModuleInterfaceParserError;
195
- const _require7 = require('../parser'),
196
- FlowParser = _require7.FlowParser;
194
+ _require6.throwIfMoreThanOneModuleInterfaceParserError,
195
+ throwIfPartialNotAnnotatingTypeParameter =
196
+ _require6.throwIfPartialNotAnnotatingTypeParameter,
197
+ throwIfPartialWithMoreParameter = _require6.throwIfPartialWithMoreParameter;
197
198
  const language = 'Flow';
198
- const parser = new FlowParser();
199
199
  function translateTypeAnnotation(
200
200
  hasteModuleName,
201
201
  /**
@@ -204,8 +204,10 @@ function translateTypeAnnotation(
204
204
  flowTypeAnnotation,
205
205
  types,
206
206
  aliasMap,
207
+ enumMap,
207
208
  tryParse,
208
209
  cxxOnly,
210
+ parser,
209
211
  ) {
210
212
  const _resolveTypeAnnotatio = resolveTypeAnnotation(
211
213
  flowTypeAnnotation,
@@ -213,7 +215,7 @@ function translateTypeAnnotation(
213
215
  ),
214
216
  nullable = _resolveTypeAnnotatio.nullable,
215
217
  typeAnnotation = _resolveTypeAnnotatio.typeAnnotation,
216
- typeAliasResolutionStatus = _resolveTypeAnnotatio.typeAliasResolutionStatus;
218
+ typeResolutionStatus = _resolveTypeAnnotatio.typeResolutionStatus;
217
219
  switch (typeAnnotation.type) {
218
220
  case 'GenericTypeAnnotation': {
219
221
  switch (typeAnnotation.id.name) {
@@ -228,6 +230,7 @@ function translateTypeAnnotation(
228
230
  nullable,
229
231
  types,
230
232
  aliasMap,
233
+ enumMap,
231
234
  tryParse,
232
235
  cxxOnly,
233
236
  translateTypeAnnotation,
@@ -241,6 +244,7 @@ function translateTypeAnnotation(
241
244
  parser,
242
245
  types,
243
246
  aliasMap,
247
+ enumMap,
244
248
  cxxOnly,
245
249
  nullable,
246
250
  translateTypeAnnotation,
@@ -258,8 +262,10 @@ function translateTypeAnnotation(
258
262
  typeAnnotation.typeParameters.params[0],
259
263
  types,
260
264
  aliasMap,
265
+ enumMap,
261
266
  tryParse,
262
267
  cxxOnly,
268
+ parser,
263
269
  ),
264
270
  ),
265
271
  _unwrapNullable2 = _slicedToArray(_unwrapNullable, 2),
@@ -281,20 +287,70 @@ function translateTypeAnnotation(
281
287
  }
282
288
  case 'UnsafeObject':
283
289
  case 'Object': {
284
- return emitObject(nullable);
290
+ return emitGenericObject(nullable);
291
+ }
292
+ case '$Partial': {
293
+ throwIfPartialWithMoreParameter(typeAnnotation);
294
+ const annotatedElement = parser.extractAnnotatedElement(
295
+ typeAnnotation,
296
+ types,
297
+ );
298
+ throwIfPartialNotAnnotatingTypeParameter(
299
+ typeAnnotation,
300
+ types,
301
+ parser,
302
+ );
303
+ const properties = annotatedElement.right.properties.map(prop => {
304
+ return {
305
+ name: prop.key.name,
306
+ optional: true,
307
+ typeAnnotation: translateTypeAnnotation(
308
+ hasteModuleName,
309
+ prop.value,
310
+ types,
311
+ aliasMap,
312
+ enumMap,
313
+ tryParse,
314
+ cxxOnly,
315
+ parser,
316
+ ),
317
+ };
318
+ });
319
+ return emitObject(nullable, properties);
285
320
  }
286
321
  default: {
287
- return translateDefault(
322
+ throw new UnsupportedGenericParserError(
288
323
  hasteModuleName,
289
324
  typeAnnotation,
290
- types,
291
- nullable,
292
325
  parser,
293
326
  );
294
327
  }
295
328
  }
296
329
  }
297
330
  case 'ObjectTypeAnnotation': {
331
+ // if there is any indexer, then it is a dictionary
332
+ if (typeAnnotation.indexers) {
333
+ const indexers = typeAnnotation.indexers.filter(
334
+ member => member.type === 'ObjectTypeIndexer',
335
+ );
336
+ if (indexers.length > 0) {
337
+ // check the property type to prevent developers from using unsupported types
338
+ // the return value from `translateTypeAnnotation` is unused
339
+ const propertyType = indexers[0].value;
340
+ translateTypeAnnotation(
341
+ hasteModuleName,
342
+ propertyType,
343
+ types,
344
+ aliasMap,
345
+ enumMap,
346
+ tryParse,
347
+ cxxOnly,
348
+ parser,
349
+ );
350
+ // no need to do further checking
351
+ return emitGenericObject(nullable);
352
+ }
353
+ }
298
354
  const objectTypeAnnotation = {
299
355
  type: 'ObjectTypeAnnotation',
300
356
  // $FlowFixMe[missing-type-arg]
@@ -306,6 +362,7 @@ function translateTypeAnnotation(
306
362
  hasteModuleName,
307
363
  types,
308
364
  aliasMap,
365
+ enumMap,
309
366
  tryParse,
310
367
  cxxOnly,
311
368
  nullable,
@@ -317,7 +374,7 @@ function translateTypeAnnotation(
317
374
  .filter(Boolean),
318
375
  };
319
376
  return typeAliasResolution(
320
- typeAliasResolutionStatus,
377
+ typeResolutionStatus,
321
378
  objectTypeAnnotation,
322
379
  aliasMap,
323
380
  nullable,
@@ -342,10 +399,11 @@ function translateTypeAnnotation(
342
399
  typeAnnotation,
343
400
  types,
344
401
  aliasMap,
402
+ enumMap,
345
403
  tryParse,
346
404
  cxxOnly,
347
405
  translateTypeAnnotation,
348
- language,
406
+ parser,
349
407
  );
350
408
  }
351
409
  case 'UnionTypeAnnotation': {
@@ -361,10 +419,22 @@ function translateTypeAnnotation(
361
419
  case 'MixedTypeAnnotation': {
362
420
  if (cxxOnly) {
363
421
  return emitMixed(nullable);
422
+ } else {
423
+ return emitGenericObject(nullable);
364
424
  }
365
- // Fallthrough
366
425
  }
367
-
426
+ case 'EnumStringBody':
427
+ case 'EnumNumberBody': {
428
+ return typeEnumResolution(
429
+ typeAnnotation,
430
+ typeResolutionStatus,
431
+ nullable,
432
+ hasteModuleName,
433
+ language,
434
+ enumMap,
435
+ parser,
436
+ );
437
+ }
368
438
  default: {
369
439
  throw new UnsupportedTypeAnnotationParserError(
370
440
  hasteModuleName,
@@ -374,14 +444,6 @@ function translateTypeAnnotation(
374
444
  }
375
445
  }
376
446
  }
377
- function isModuleInterface(node) {
378
- return (
379
- node.type === 'InterfaceDeclaration' &&
380
- node.extends.length === 1 &&
381
- node.extends[0].type === 'InterfaceExtends' &&
382
- node.extends[0].id.name === 'TurboModule'
383
- );
384
- }
385
447
  function buildModuleSchema(
386
448
  hasteModuleName,
387
449
  /**
@@ -389,9 +451,12 @@ function buildModuleSchema(
389
451
  */
390
452
  ast,
391
453
  tryParse,
454
+ parser,
392
455
  ) {
393
- const types = getTypes(ast);
394
- const moduleSpecs = Object.values(types).filter(isModuleInterface);
456
+ const types = parser.getTypes(ast);
457
+ const moduleSpecs = Object.values(types).filter(t =>
458
+ parser.isModuleInterface(t),
459
+ );
395
460
  throwIfModuleInterfaceNotFound(
396
461
  moduleSpecs.length,
397
462
  hasteModuleName,
@@ -421,13 +486,11 @@ function buildModuleSchema(
421
486
  hasteModuleName,
422
487
  moduleSpec,
423
488
  callExpressions,
424
- language,
425
489
  );
426
490
  throwIfMoreThanOneModuleRegistryCalls(
427
491
  hasteModuleName,
428
492
  callExpressions,
429
493
  callExpressions.length,
430
- language,
431
494
  );
432
495
  const callExpression = callExpressions[0];
433
496
  const typeArguments = callExpression.typeArguments;
@@ -437,18 +500,12 @@ function buildModuleSchema(
437
500
  callExpression,
438
501
  methodName,
439
502
  callExpression.arguments.length,
440
- language,
441
503
  );
442
- if (callExpression.arguments[0].type !== 'Literal') {
443
- const type = callExpression.arguments[0].type;
444
- throw new IncorrectModuleRegistryCallArgumentTypeParserError(
445
- hasteModuleName,
446
- callExpression.arguments[0],
447
- methodName,
448
- type,
449
- language,
450
- );
451
- }
504
+ throwIfIncorrectModuleRegistryCallArgument(
505
+ hasteModuleName,
506
+ callExpression.arguments[0],
507
+ methodName,
508
+ );
452
509
  const $moduleName = callExpression.arguments[0].value;
453
510
  throwIfUntypedModule(
454
511
  typeArguments,
@@ -456,7 +513,6 @@ function buildModuleSchema(
456
513
  callExpression,
457
514
  methodName,
458
515
  $moduleName,
459
- language,
460
516
  );
461
517
  throwIfIncorrectModuleRegistryCallTypeParameterParserError(
462
518
  hasteModuleName,
@@ -481,29 +537,36 @@ function buildModuleSchema(
481
537
  .filter(property => property.type === 'ObjectTypeProperty')
482
538
  .map(property => {
483
539
  const aliasMap = {};
540
+ const enumMap = {};
484
541
  return tryParse(() => ({
485
542
  aliasMap: aliasMap,
543
+ enumMap: enumMap,
486
544
  propertyShape: buildPropertySchema(
487
545
  hasteModuleName,
488
546
  property,
489
547
  types,
490
548
  aliasMap,
549
+ enumMap,
491
550
  tryParse,
492
551
  cxxOnly,
493
- language,
494
552
  resolveTypeAnnotation,
495
553
  translateTypeAnnotation,
554
+ parser,
496
555
  ),
497
556
  }));
498
557
  })
499
558
  .filter(Boolean)
500
559
  .reduce(
501
- (moduleSchema, {aliasMap, propertyShape}) => ({
560
+ (moduleSchema, {aliasMap, enumMap, propertyShape}) => ({
502
561
  type: 'NativeModule',
503
- aliases: _objectSpread(
504
- _objectSpread({}, moduleSchema.aliases),
562
+ aliasMap: _objectSpread(
563
+ _objectSpread({}, moduleSchema.aliasMap),
505
564
  aliasMap,
506
565
  ),
566
+ enumMap: _objectSpread(
567
+ _objectSpread({}, moduleSchema.enumMap),
568
+ enumMap,
569
+ ),
507
570
  spec: {
508
571
  properties: [...moduleSchema.spec.properties, propertyShape],
509
572
  },
@@ -512,7 +575,8 @@ function buildModuleSchema(
512
575
  }),
513
576
  {
514
577
  type: 'NativeModule',
515
- aliases: {},
578
+ aliasMap: {},
579
+ enumMap: {},
516
580
  spec: {
517
581
  properties: [],
518
582
  },