@react-native/codegen 0.72.3 → 0.73.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.
Files changed (77) hide show
  1. package/lib/CodegenSchema.d.ts +10 -10
  2. package/lib/CodegenSchema.js.flow +6 -1
  3. package/lib/SchemaValidator.d.ts +1 -1
  4. package/lib/generators/RNCodegen.d.ts +98 -0
  5. package/lib/generators/RNCodegen.js +33 -4
  6. package/lib/generators/RNCodegen.js.flow +35 -4
  7. package/lib/generators/components/ComponentsGeneratorUtils.js +2 -0
  8. package/lib/generators/components/ComponentsGeneratorUtils.js.flow +2 -0
  9. package/lib/generators/components/CppHelpers.js +2 -0
  10. package/lib/generators/components/CppHelpers.js.flow +2 -0
  11. package/lib/generators/components/GenerateEventEmitterCpp.js +33 -44
  12. package/lib/generators/components/GenerateEventEmitterCpp.js.flow +35 -44
  13. package/lib/generators/components/GenerateEventEmitterH.js +0 -2
  14. package/lib/generators/components/GenerateEventEmitterH.js.flow +0 -2
  15. package/lib/generators/components/GeneratePropsH.js +2 -0
  16. package/lib/generators/components/GeneratePropsH.js.flow +2 -0
  17. package/lib/generators/components/GeneratePropsJavaDelegate.js +2 -0
  18. package/lib/generators/components/GeneratePropsJavaDelegate.js.flow +2 -0
  19. package/lib/generators/components/GeneratePropsJavaInterface.js +2 -0
  20. package/lib/generators/components/GeneratePropsJavaInterface.js.flow +2 -0
  21. package/lib/generators/components/GeneratePropsJavaPojo/PojoCollector.js.flow +3 -1
  22. package/lib/generators/components/GeneratePropsJavaPojo/serializePojo.js +5 -0
  23. package/lib/generators/components/GeneratePropsJavaPojo/serializePojo.js.flow +6 -0
  24. package/lib/generators/components/GenerateViewConfigJs.js +1 -0
  25. package/lib/generators/components/GenerateViewConfigJs.js.flow +1 -0
  26. package/lib/generators/components/JavaHelpers.js +7 -0
  27. package/lib/generators/components/JavaHelpers.js.flow +8 -0
  28. package/lib/generators/components/__test_fixtures__/fixtures.js +29 -0
  29. package/lib/generators/components/__test_fixtures__/fixtures.js.flow +30 -0
  30. package/lib/generators/modules/GenerateModuleCpp.js +3 -3
  31. package/lib/generators/modules/GenerateModuleCpp.js.flow +3 -3
  32. package/lib/generators/modules/GenerateModuleJavaSpec.js +1 -2
  33. package/lib/generators/modules/GenerateModuleJavaSpec.js.flow +1 -2
  34. package/lib/parsers/error-utils.js +9 -15
  35. package/lib/parsers/error-utils.js.flow +12 -15
  36. package/lib/parsers/flow/components/__test_fixtures__/fixtures.js +5 -1
  37. package/lib/parsers/flow/components/__test_fixtures__/fixtures.js.flow +5 -1
  38. package/lib/parsers/flow/components/componentsUtils.js +4 -0
  39. package/lib/parsers/flow/components/componentsUtils.js.flow +4 -0
  40. package/lib/parsers/flow/components/index.js +35 -168
  41. package/lib/parsers/flow/components/index.js.flow +33 -107
  42. package/lib/parsers/flow/modules/__test_fixtures__/fixtures.js +4 -4
  43. package/lib/parsers/flow/modules/__test_fixtures__/fixtures.js.flow +4 -4
  44. package/lib/parsers/flow/modules/index.js +51 -327
  45. package/lib/parsers/flow/modules/index.js.flow +34 -258
  46. package/lib/parsers/flow/parser.js +84 -13
  47. package/lib/parsers/flow/parser.js.flow +80 -4
  48. package/lib/parsers/parser.d.ts +2 -2
  49. package/lib/parsers/parser.js.flow +84 -3
  50. package/lib/parsers/parserMock.js +53 -0
  51. package/lib/parsers/parserMock.js.flow +64 -1
  52. package/lib/parsers/parsers-commons.js +397 -4
  53. package/lib/parsers/parsers-commons.js.flow +391 -4
  54. package/lib/parsers/parsers-primitives.js +121 -3
  55. package/lib/parsers/parsers-primitives.js.flow +134 -3
  56. package/lib/parsers/schema/index.d.ts +1 -1
  57. package/lib/parsers/typescript/components/__test_fixtures__/fixtures.js +5 -1
  58. package/lib/parsers/typescript/components/__test_fixtures__/fixtures.js.flow +5 -1
  59. package/lib/parsers/typescript/components/componentsUtils.js +8 -0
  60. package/lib/parsers/typescript/components/componentsUtils.js.flow +8 -0
  61. package/lib/parsers/typescript/components/index.js +37 -170
  62. package/lib/parsers/typescript/components/index.js.flow +33 -109
  63. package/lib/parsers/typescript/modules/index.js +113 -441
  64. package/lib/parsers/typescript/modules/index.js.flow +100 -309
  65. package/lib/parsers/typescript/parser.js +97 -13
  66. package/lib/parsers/typescript/parser.js.flow +94 -4
  67. package/lib/parsers/utils.js +4 -0
  68. package/lib/parsers/utils.js.flow +3 -0
  69. package/package.json +1 -1
  70. package/lib/parsers/flow/Visitor.js +0 -37
  71. package/lib/parsers/flow/Visitor.js.flow +0 -41
  72. package/lib/parsers/flow/components/options.js +0 -72
  73. package/lib/parsers/flow/components/options.js.flow +0 -87
  74. package/lib/parsers/typescript/Visitor.js +0 -42
  75. package/lib/parsers/typescript/Visitor.js.flow +0 -47
  76. package/lib/parsers/typescript/components/options.js +0 -72
  77. package/lib/parsers/typescript/components/options.js.flow +0 -87
@@ -10,68 +10,6 @@
10
10
 
11
11
  'use strict';
12
12
 
13
- function ownKeys(object, enumerableOnly) {
14
- var keys = Object.keys(object);
15
- if (Object.getOwnPropertySymbols) {
16
- var symbols = Object.getOwnPropertySymbols(object);
17
- enumerableOnly &&
18
- (symbols = symbols.filter(function (sym) {
19
- return Object.getOwnPropertyDescriptor(object, sym).enumerable;
20
- })),
21
- keys.push.apply(keys, symbols);
22
- }
23
- return keys;
24
- }
25
- function _objectSpread(target) {
26
- for (var i = 1; i < arguments.length; i++) {
27
- var source = null != arguments[i] ? arguments[i] : {};
28
- i % 2
29
- ? ownKeys(Object(source), !0).forEach(function (key) {
30
- _defineProperty(target, key, source[key]);
31
- })
32
- : Object.getOwnPropertyDescriptors
33
- ? Object.defineProperties(
34
- target,
35
- Object.getOwnPropertyDescriptors(source),
36
- )
37
- : ownKeys(Object(source)).forEach(function (key) {
38
- Object.defineProperty(
39
- target,
40
- key,
41
- Object.getOwnPropertyDescriptor(source, key),
42
- );
43
- });
44
- }
45
- return target;
46
- }
47
- function _defineProperty(obj, key, value) {
48
- key = _toPropertyKey(key);
49
- if (key in obj) {
50
- Object.defineProperty(obj, key, {
51
- value: value,
52
- enumerable: true,
53
- configurable: true,
54
- writable: true,
55
- });
56
- } else {
57
- obj[key] = value;
58
- }
59
- return obj;
60
- }
61
- function _toPropertyKey(arg) {
62
- var key = _toPrimitive(arg, 'string');
63
- return typeof key === 'symbol' ? key : String(key);
64
- }
65
- function _toPrimitive(input, hint) {
66
- if (typeof input !== 'object' || input === null) return input;
67
- var prim = input[Symbol.toPrimitive];
68
- if (prim !== undefined) {
69
- var res = prim.call(input, hint || 'default');
70
- if (typeof res !== 'object') return res;
71
- throw new TypeError('@@toPrimitive must return a primitive value.');
72
- }
73
- return (hint === 'string' ? String : Number)(input);
74
- }
75
13
  function _slicedToArray(arr, i) {
76
14
  return (
77
15
  _arrayWithHoles(arr) ||
@@ -140,62 +78,28 @@ function _iterableToArrayLimit(arr, i) {
140
78
  function _arrayWithHoles(arr) {
141
79
  if (Array.isArray(arr)) return arr;
142
80
  }
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
- const _require3 = require('../../parsers-commons'),
150
- unwrapNullable = _require3.unwrapNullable,
151
- wrapNullable = _require3.wrapNullable,
81
+ const _require = require('../utils'),
82
+ resolveTypeAnnotation = _require.resolveTypeAnnotation;
83
+ const _require2 = require('../../parsers-commons'),
84
+ unwrapNullable = _require2.unwrapNullable,
85
+ wrapNullable = _require2.wrapNullable,
152
86
  assertGenericTypeAnnotationHasExactlyOneTypeParameter =
153
- _require3.assertGenericTypeAnnotationHasExactlyOneTypeParameter,
154
- parseObjectProperty = _require3.parseObjectProperty,
155
- buildPropertySchema = _require3.buildPropertySchema;
156
- const _require4 = require('../../parsers-primitives'),
157
- emitArrayType = _require4.emitArrayType,
158
- emitBoolean = _require4.emitBoolean,
159
- emitDouble = _require4.emitDouble,
160
- emitFloat = _require4.emitFloat,
161
- emitFunction = _require4.emitFunction,
162
- emitNumber = _require4.emitNumber,
163
- emitInt32 = _require4.emitInt32,
164
- emitGenericObject = _require4.emitGenericObject,
165
- emitObject = _require4.emitObject,
166
- emitPromise = _require4.emitPromise,
167
- emitRootTag = _require4.emitRootTag,
168
- emitVoid = _require4.emitVoid,
169
- emitString = _require4.emitString,
170
- emitStringish = _require4.emitStringish,
171
- emitMixed = _require4.emitMixed,
172
- emitUnion = _require4.emitUnion,
173
- typeAliasResolution = _require4.typeAliasResolution,
174
- typeEnumResolution = _require4.typeEnumResolution;
175
- const _require5 = require('../../errors'),
87
+ _require2.assertGenericTypeAnnotationHasExactlyOneTypeParameter,
88
+ parseObjectProperty = _require2.parseObjectProperty;
89
+ const _require3 = require('../../parsers-primitives'),
90
+ emitArrayType = _require3.emitArrayType,
91
+ emitFunction = _require3.emitFunction,
92
+ emitGenericObject = _require3.emitGenericObject,
93
+ emitPromise = _require3.emitPromise,
94
+ emitRootTag = _require3.emitRootTag,
95
+ emitUnion = _require3.emitUnion,
96
+ emitCommonTypes = _require3.emitCommonTypes,
97
+ typeAliasResolution = _require3.typeAliasResolution,
98
+ typeEnumResolution = _require3.typeEnumResolution;
99
+ const _require4 = require('../../errors'),
176
100
  UnsupportedTypeAnnotationParserError =
177
- _require5.UnsupportedTypeAnnotationParserError,
178
- UnsupportedGenericParserError = _require5.UnsupportedGenericParserError;
179
- const _require6 = require('../../error-utils'),
180
- throwIfModuleInterfaceNotFound = _require6.throwIfModuleInterfaceNotFound,
181
- throwIfModuleInterfaceIsMisnamed = _require6.throwIfModuleInterfaceIsMisnamed,
182
- throwIfUnusedModuleInterfaceParserError =
183
- _require6.throwIfUnusedModuleInterfaceParserError,
184
- throwIfWrongNumberOfCallExpressionArgs =
185
- _require6.throwIfWrongNumberOfCallExpressionArgs,
186
- throwIfMoreThanOneModuleRegistryCalls =
187
- _require6.throwIfMoreThanOneModuleRegistryCalls,
188
- throwIfIncorrectModuleRegistryCallTypeParameterParserError =
189
- _require6.throwIfIncorrectModuleRegistryCallTypeParameterParserError,
190
- throwIfIncorrectModuleRegistryCallArgument =
191
- _require6.throwIfIncorrectModuleRegistryCallArgument,
192
- throwIfUntypedModule = _require6.throwIfUntypedModule,
193
- throwIfMoreThanOneModuleInterfaceParserError =
194
- _require6.throwIfMoreThanOneModuleInterfaceParserError,
195
- throwIfPartialNotAnnotatingTypeParameter =
196
- _require6.throwIfPartialNotAnnotatingTypeParameter,
197
- throwIfPartialWithMoreParameter = _require6.throwIfPartialWithMoreParameter;
198
- const language = 'Flow';
101
+ _require4.UnsupportedTypeAnnotationParserError,
102
+ UnsupportedGenericParserError = _require4.UnsupportedGenericParserError;
199
103
  function translateTypeAnnotation(
200
104
  hasteModuleName,
201
105
  /**
@@ -273,57 +177,26 @@ function translateTypeAnnotation(
273
177
  isParamNullable = _unwrapNullable2[1];
274
178
  return wrapNullable(nullable || isParamNullable, paramType);
275
179
  }
276
- case 'Stringish': {
277
- return emitStringish(nullable);
278
- }
279
- case 'Int32': {
280
- return emitInt32(nullable);
281
- }
282
- case 'Double': {
283
- return emitDouble(nullable);
284
- }
285
- case 'Float': {
286
- return emitFloat(nullable);
287
- }
288
- case 'UnsafeObject':
289
- case 'Object': {
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);
320
- }
321
180
  default: {
322
- throw new UnsupportedGenericParserError(
181
+ const commonType = emitCommonTypes(
323
182
  hasteModuleName,
183
+ types,
324
184
  typeAnnotation,
185
+ aliasMap,
186
+ enumMap,
187
+ tryParse,
188
+ cxxOnly,
189
+ nullable,
325
190
  parser,
326
191
  );
192
+ if (!commonType) {
193
+ throw new UnsupportedGenericParserError(
194
+ hasteModuleName,
195
+ typeAnnotation,
196
+ parser,
197
+ );
198
+ }
199
+ return commonType;
327
200
  }
328
201
  }
329
202
  }
@@ -380,18 +253,6 @@ function translateTypeAnnotation(
380
253
  nullable,
381
254
  );
382
255
  }
383
- case 'BooleanTypeAnnotation': {
384
- return emitBoolean(nullable);
385
- }
386
- case 'NumberTypeAnnotation': {
387
- return emitNumber(nullable);
388
- }
389
- case 'VoidTypeAnnotation': {
390
- return emitVoid(nullable);
391
- }
392
- case 'StringTypeAnnotation': {
393
- return emitString(nullable);
394
- }
395
256
  case 'FunctionTypeAnnotation': {
396
257
  return emitFunction(
397
258
  nullable,
@@ -416,13 +277,6 @@ function translateTypeAnnotation(
416
277
  memberType: 'StringTypeAnnotation',
417
278
  });
418
279
  }
419
- case 'MixedTypeAnnotation': {
420
- if (cxxOnly) {
421
- return emitMixed(nullable);
422
- } else {
423
- return emitGenericObject(nullable);
424
- }
425
- }
426
280
  case 'EnumStringBody':
427
281
  case 'EnumNumberBody': {
428
282
  return typeEnumResolution(
@@ -430,163 +284,33 @@ function translateTypeAnnotation(
430
284
  typeResolutionStatus,
431
285
  nullable,
432
286
  hasteModuleName,
433
- language,
434
287
  enumMap,
435
288
  parser,
436
289
  );
437
290
  }
438
291
  default: {
439
- throw new UnsupportedTypeAnnotationParserError(
292
+ const commonType = emitCommonTypes(
440
293
  hasteModuleName,
294
+ types,
441
295
  typeAnnotation,
442
- language,
296
+ aliasMap,
297
+ enumMap,
298
+ tryParse,
299
+ cxxOnly,
300
+ nullable,
301
+ parser,
443
302
  );
303
+ if (!commonType) {
304
+ throw new UnsupportedTypeAnnotationParserError(
305
+ hasteModuleName,
306
+ typeAnnotation,
307
+ parser.language(),
308
+ );
309
+ }
310
+ return commonType;
444
311
  }
445
312
  }
446
313
  }
447
- function buildModuleSchema(
448
- hasteModuleName,
449
- /**
450
- * TODO(T71778680): Flow-type this node.
451
- */
452
- ast,
453
- tryParse,
454
- parser,
455
- ) {
456
- const types = parser.getTypes(ast);
457
- const moduleSpecs = Object.values(types).filter(t =>
458
- parser.isModuleInterface(t),
459
- );
460
- throwIfModuleInterfaceNotFound(
461
- moduleSpecs.length,
462
- hasteModuleName,
463
- ast,
464
- language,
465
- );
466
- throwIfMoreThanOneModuleInterfaceParserError(
467
- hasteModuleName,
468
- moduleSpecs,
469
- language,
470
- );
471
- const _moduleSpecs = _slicedToArray(moduleSpecs, 1),
472
- moduleSpec = _moduleSpecs[0];
473
- throwIfModuleInterfaceIsMisnamed(hasteModuleName, moduleSpec.id, language);
474
-
475
- // Parse Module Name
476
- const moduleName = (() => {
477
- const callExpressions = [];
478
- visit(ast, {
479
- CallExpression(node) {
480
- if (isModuleRegistryCall(node)) {
481
- callExpressions.push(node);
482
- }
483
- },
484
- });
485
- throwIfUnusedModuleInterfaceParserError(
486
- hasteModuleName,
487
- moduleSpec,
488
- callExpressions,
489
- );
490
- throwIfMoreThanOneModuleRegistryCalls(
491
- hasteModuleName,
492
- callExpressions,
493
- callExpressions.length,
494
- );
495
- const callExpression = callExpressions[0];
496
- const typeArguments = callExpression.typeArguments;
497
- const methodName = callExpression.callee.property.name;
498
- throwIfWrongNumberOfCallExpressionArgs(
499
- hasteModuleName,
500
- callExpression,
501
- methodName,
502
- callExpression.arguments.length,
503
- );
504
- throwIfIncorrectModuleRegistryCallArgument(
505
- hasteModuleName,
506
- callExpression.arguments[0],
507
- methodName,
508
- );
509
- const $moduleName = callExpression.arguments[0].value;
510
- throwIfUntypedModule(
511
- typeArguments,
512
- hasteModuleName,
513
- callExpression,
514
- methodName,
515
- $moduleName,
516
- );
517
- throwIfIncorrectModuleRegistryCallTypeParameterParserError(
518
- hasteModuleName,
519
- typeArguments,
520
- methodName,
521
- $moduleName,
522
- parser,
523
- );
524
- return $moduleName;
525
- })();
526
-
527
- // Some module names use platform suffix to indicate platform-exclusive modules.
528
- // Eventually this should be made explicit in the Flow type itself.
529
- // Also check the hasteModuleName for platform suffix.
530
- // Note: this shape is consistent with ComponentSchema.
531
- const _verifyPlatforms = verifyPlatforms(hasteModuleName, moduleName),
532
- cxxOnly = _verifyPlatforms.cxxOnly,
533
- excludedPlatforms = _verifyPlatforms.excludedPlatforms;
534
-
535
- // $FlowFixMe[missing-type-arg]
536
- return moduleSpec.body.properties
537
- .filter(property => property.type === 'ObjectTypeProperty')
538
- .map(property => {
539
- const aliasMap = {};
540
- const enumMap = {};
541
- return tryParse(() => ({
542
- aliasMap: aliasMap,
543
- enumMap: enumMap,
544
- propertyShape: buildPropertySchema(
545
- hasteModuleName,
546
- property,
547
- types,
548
- aliasMap,
549
- enumMap,
550
- tryParse,
551
- cxxOnly,
552
- resolveTypeAnnotation,
553
- translateTypeAnnotation,
554
- parser,
555
- ),
556
- }));
557
- })
558
- .filter(Boolean)
559
- .reduce(
560
- (moduleSchema, {aliasMap, enumMap, propertyShape}) => ({
561
- type: 'NativeModule',
562
- aliasMap: _objectSpread(
563
- _objectSpread({}, moduleSchema.aliasMap),
564
- aliasMap,
565
- ),
566
- enumMap: _objectSpread(
567
- _objectSpread({}, moduleSchema.enumMap),
568
- enumMap,
569
- ),
570
- spec: {
571
- properties: [...moduleSchema.spec.properties, propertyShape],
572
- },
573
- moduleName: moduleSchema.moduleName,
574
- excludedPlatforms: moduleSchema.excludedPlatforms,
575
- }),
576
- {
577
- type: 'NativeModule',
578
- aliasMap: {},
579
- enumMap: {},
580
- spec: {
581
- properties: [],
582
- },
583
- moduleName,
584
- excludedPlatforms:
585
- excludedPlatforms.length !== 0 ? [...excludedPlatforms] : undefined,
586
- },
587
- );
588
- }
589
314
  module.exports = {
590
- buildModuleSchema,
591
315
  flowTranslateTypeAnnotation: translateTypeAnnotation,
592
316
  };