@react-native/codegen 0.74.0 → 0.75.0-nightly-20240221-a1171f79f

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 (147) hide show
  1. package/lib/CodegenSchema.d.ts +10 -1
  2. package/lib/CodegenSchema.js.flow +2 -1
  3. package/lib/SchemaValidator.js.flow +2 -2
  4. package/lib/cli/combine/combine-js-to-schema-cli.js +59 -40
  5. package/lib/cli/combine/combine-js-to-schema-cli.js.flow +23 -39
  6. package/lib/cli/combine/combine-js-to-schema.js +49 -1
  7. package/lib/cli/combine/combine-js-to-schema.js.flow +59 -1
  8. package/lib/cli/combine/combine-schemas-cli.js +77 -0
  9. package/lib/cli/combine/combine-schemas-cli.js.flow +87 -0
  10. package/lib/cli/combine/combine-utils.js +3 -65
  11. package/lib/cli/combine/combine-utils.js.flow +7 -28
  12. package/lib/cli/parser/parser.js +1 -1
  13. package/lib/cli/parser/parser.js.flow +1 -1
  14. package/lib/generators/RNCodegen.d.ts +1 -0
  15. package/lib/generators/RNCodegen.js +58 -31
  16. package/lib/generators/RNCodegen.js.flow +52 -32
  17. package/lib/generators/TypeUtils/Cxx/index.js +17 -0
  18. package/lib/generators/TypeUtils/Cxx/index.js.flow +18 -0
  19. package/lib/generators/TypeUtils/Java/index.js +31 -0
  20. package/lib/generators/TypeUtils/Java/index.js.flow +27 -0
  21. package/lib/generators/TypeUtils/Objective-C/index.js +17 -0
  22. package/lib/generators/TypeUtils/Objective-C/index.js.flow +18 -0
  23. package/lib/generators/components/ComponentsGeneratorUtils.js +7 -7
  24. package/lib/generators/components/ComponentsGeneratorUtils.js.flow +8 -10
  25. package/lib/generators/components/ComponentsProviderUtils.js +55 -0
  26. package/lib/generators/components/ComponentsProviderUtils.js.flow +60 -0
  27. package/lib/generators/components/CppHelpers.js +7 -0
  28. package/lib/generators/components/CppHelpers.js.flow +14 -0
  29. package/lib/generators/components/GenerateComponentDescriptorCpp.js +89 -0
  30. package/lib/generators/components/GenerateComponentDescriptorCpp.js.flow +101 -0
  31. package/lib/generators/components/GenerateComponentDescriptorH.js +28 -12
  32. package/lib/generators/components/GenerateComponentDescriptorH.js.flow +20 -12
  33. package/lib/generators/components/GenerateComponentHObjCpp.js +15 -1
  34. package/lib/generators/components/GenerateComponentHObjCpp.js.flow +11 -2
  35. package/lib/generators/components/GenerateEventEmitterCpp.js +28 -15
  36. package/lib/generators/components/GenerateEventEmitterCpp.js.flow +16 -17
  37. package/lib/generators/components/GenerateEventEmitterH.js +20 -13
  38. package/lib/generators/components/GenerateEventEmitterH.js.flow +13 -15
  39. package/lib/generators/components/GeneratePropsCpp.js +17 -8
  40. package/lib/generators/components/GeneratePropsCpp.js.flow +13 -9
  41. package/lib/generators/components/GeneratePropsH.js +23 -16
  42. package/lib/generators/components/GeneratePropsH.js.flow +12 -16
  43. package/lib/generators/components/GeneratePropsJavaDelegate.js +11 -3
  44. package/lib/generators/components/GeneratePropsJavaDelegate.js.flow +7 -4
  45. package/lib/generators/components/GeneratePropsJavaInterface.js +11 -3
  46. package/lib/generators/components/GeneratePropsJavaInterface.js.flow +6 -3
  47. package/lib/generators/components/GeneratePropsJavaPojo/PojoCollector.js.flow +6 -6
  48. package/lib/generators/components/GeneratePropsJavaPojo/index.js +1 -1
  49. package/lib/generators/components/GeneratePropsJavaPojo/index.js.flow +1 -1
  50. package/lib/generators/components/GeneratePropsJavaPojo/serializePojo.js.flow +1 -0
  51. package/lib/generators/components/GenerateShadowNodeCpp.js +19 -8
  52. package/lib/generators/components/GenerateShadowNodeCpp.js.flow +9 -8
  53. package/lib/generators/components/GenerateShadowNodeH.js +27 -11
  54. package/lib/generators/components/GenerateShadowNodeH.js.flow +11 -14
  55. package/lib/generators/components/GenerateStateCpp.js +19 -8
  56. package/lib/generators/components/GenerateStateCpp.js.flow +9 -8
  57. package/lib/generators/components/GenerateStateH.js +9 -5
  58. package/lib/generators/components/GenerateStateH.js.flow +3 -4
  59. package/lib/generators/components/GenerateTests.js +11 -5
  60. package/lib/generators/components/GenerateTests.js.flow +2 -2
  61. package/lib/generators/components/GenerateThirdPartyFabricComponentsProviderH.js +16 -3
  62. package/lib/generators/components/GenerateThirdPartyFabricComponentsProviderH.js.flow +18 -3
  63. package/lib/generators/components/GenerateThirdPartyFabricComponentsProviderObjCpp.js +18 -3
  64. package/lib/generators/components/GenerateThirdPartyFabricComponentsProviderObjCpp.js.flow +21 -3
  65. package/lib/generators/components/GenerateViewConfigJs.js +2 -2
  66. package/lib/generators/components/GenerateViewConfigJs.js.flow +2 -2
  67. package/lib/generators/components/JavaHelpers.js +8 -0
  68. package/lib/generators/components/JavaHelpers.js.flow +9 -0
  69. package/lib/generators/components/__test_fixtures__/fixtures.js +22 -0
  70. package/lib/generators/components/__test_fixtures__/fixtures.js.flow +22 -0
  71. package/lib/generators/modules/GenerateModuleCpp.js +14 -10
  72. package/lib/generators/modules/GenerateModuleCpp.js.flow +9 -10
  73. package/lib/generators/modules/GenerateModuleH.js +198 -72
  74. package/lib/generators/modules/GenerateModuleH.js.flow +186 -71
  75. package/lib/generators/modules/GenerateModuleJavaSpec.js +50 -57
  76. package/lib/generators/modules/GenerateModuleJavaSpec.js.flow +45 -50
  77. package/lib/generators/modules/GenerateModuleJniCpp.js +16 -12
  78. package/lib/generators/modules/GenerateModuleJniCpp.js.flow +11 -12
  79. package/lib/generators/modules/GenerateModuleJniH.js +12 -5
  80. package/lib/generators/modules/GenerateModuleJniH.js.flow +8 -6
  81. package/lib/generators/modules/GenerateModuleObjCpp/StructCollector.js +5 -5
  82. package/lib/generators/modules/GenerateModuleObjCpp/StructCollector.js.flow +11 -12
  83. package/lib/generators/modules/GenerateModuleObjCpp/header/serializeConstantsStruct.js +23 -21
  84. package/lib/generators/modules/GenerateModuleObjCpp/header/serializeConstantsStruct.js.flow +19 -18
  85. package/lib/generators/modules/GenerateModuleObjCpp/header/serializeRegularStruct.js +23 -21
  86. package/lib/generators/modules/GenerateModuleObjCpp/header/serializeRegularStruct.js.flow +19 -18
  87. package/lib/generators/modules/GenerateModuleObjCpp/index.js +18 -20
  88. package/lib/generators/modules/GenerateModuleObjCpp/index.js.flow +11 -14
  89. package/lib/generators/modules/GenerateModuleObjCpp/serializeMethod.js +40 -42
  90. package/lib/generators/modules/GenerateModuleObjCpp/serializeMethod.js.flow +38 -44
  91. package/lib/generators/modules/GenerateModuleObjCpp/source/serializeModule.js +25 -27
  92. package/lib/generators/modules/GenerateModuleObjCpp/source/serializeModule.js.flow +26 -28
  93. package/lib/generators/modules/Utils.js +98 -0
  94. package/lib/generators/modules/Utils.js.flow +34 -2
  95. package/lib/generators/modules/__test_fixtures__/fixtures.js +685 -64
  96. package/lib/generators/modules/__test_fixtures__/fixtures.js.flow +686 -64
  97. package/lib/parsers/error-utils.js +17 -17
  98. package/lib/parsers/error-utils.js.flow +10 -10
  99. package/lib/parsers/errors.js +10 -0
  100. package/lib/parsers/errors.js.flow +15 -1
  101. package/lib/parsers/flow/components/__test_fixtures__/fixtures.js +7 -1
  102. package/lib/parsers/flow/components/__test_fixtures__/fixtures.js.flow +7 -1
  103. package/lib/parsers/flow/components/commands.js +24 -0
  104. package/lib/parsers/flow/components/commands.js.flow +45 -3
  105. package/lib/parsers/flow/components/componentsUtils.js +5 -4
  106. package/lib/parsers/flow/components/componentsUtils.js.flow +4 -3
  107. package/lib/parsers/flow/components/events.js +7 -7
  108. package/lib/parsers/flow/components/events.js.flow +7 -7
  109. package/lib/parsers/flow/components/index.js +8 -8
  110. package/lib/parsers/flow/components/index.js.flow +3 -3
  111. package/lib/parsers/flow/modules/__test_fixtures__/fixtures.js +13 -0
  112. package/lib/parsers/flow/modules/__test_fixtures__/fixtures.js.flow +13 -0
  113. package/lib/parsers/flow/modules/index.js +20 -19
  114. package/lib/parsers/flow/modules/index.js.flow +10 -11
  115. package/lib/parsers/flow/parseFlowAndThrowErrors.js +105 -0
  116. package/lib/parsers/flow/parseFlowAndThrowErrors.js.flow +41 -0
  117. package/lib/parsers/flow/parser.js +24 -25
  118. package/lib/parsers/flow/parser.js.flow +27 -36
  119. package/lib/parsers/flow/utils.js.flow +1 -1
  120. package/lib/parsers/parser.js.flow +12 -10
  121. package/lib/parsers/parserMock.js +11 -12
  122. package/lib/parsers/parserMock.js.flow +25 -28
  123. package/lib/parsers/parsers-commons.js +85 -36
  124. package/lib/parsers/parsers-commons.js.flow +71 -37
  125. package/lib/parsers/parsers-primitives.js +17 -17
  126. package/lib/parsers/parsers-primitives.js.flow +14 -16
  127. package/lib/parsers/schema.js.flow +3 -3
  128. package/lib/parsers/typescript/components/__test_fixtures__/fixtures.js +8 -1
  129. package/lib/parsers/typescript/components/__test_fixtures__/fixtures.js.flow +8 -1
  130. package/lib/parsers/typescript/components/commands.js +23 -15
  131. package/lib/parsers/typescript/components/commands.js.flow +24 -16
  132. package/lib/parsers/typescript/components/componentsUtils.js +34 -20
  133. package/lib/parsers/typescript/components/componentsUtils.js.flow +36 -19
  134. package/lib/parsers/typescript/components/events.js +22 -22
  135. package/lib/parsers/typescript/components/events.js.flow +11 -10
  136. package/lib/parsers/typescript/components/extends.js.flow +1 -0
  137. package/lib/parsers/typescript/components/index.js +10 -10
  138. package/lib/parsers/typescript/components/index.js.flow +4 -4
  139. package/lib/parsers/typescript/modules/__test_fixtures__/fixtures.js +13 -0
  140. package/lib/parsers/typescript/modules/__test_fixtures__/fixtures.js.flow +13 -0
  141. package/lib/parsers/typescript/modules/index.js +25 -20
  142. package/lib/parsers/typescript/modules/index.js.flow +16 -14
  143. package/lib/parsers/typescript/parser.js +25 -26
  144. package/lib/parsers/typescript/parser.js.flow +23 -27
  145. package/lib/parsers/utils.js +5 -0
  146. package/lib/parsers/utils.js.flow +6 -1
  147. package/package.json +8 -6
@@ -11,69 +11,66 @@
11
11
  'use strict';
12
12
 
13
13
  import type {
14
- Nullable,
14
+ EventTypeAnnotation,
15
+ EventTypeShape,
15
16
  NamedShape,
16
17
  NativeModuleAliasMap,
17
18
  NativeModuleBaseTypeAnnotation,
18
- NativeModuleSchema,
19
- NativeModuleTypeAnnotation,
19
+ NativeModuleEnumMap,
20
20
  NativeModuleFunctionTypeAnnotation,
21
21
  NativeModuleParamTypeAnnotation,
22
22
  NativeModulePropertyShape,
23
- SchemaType,
24
- NativeModuleEnumMap,
23
+ NativeModuleSchema,
24
+ NativeModuleTypeAnnotation,
25
+ Nullable,
26
+ ObjectTypeAnnotation,
25
27
  OptionsShape,
26
28
  PropTypeAnnotation,
27
- EventTypeAnnotation,
28
- ObjectTypeAnnotation,
29
- EventTypeShape,
29
+ SchemaType,
30
30
  } from '../CodegenSchema.js';
31
-
32
- import type {Parser} from './parser';
33
31
  import type {ParserType} from './errors';
32
+ import type {Parser} from './parser';
33
+ import type {ComponentSchemaBuilderConfig} from './schema.js';
34
34
  import type {
35
35
  ParserErrorCapturer,
36
- TypeDeclarationMap,
37
36
  PropAST,
37
+ TypeDeclarationMap,
38
38
  TypeResolutionStatus,
39
39
  } from './utils';
40
- import type {ComponentSchemaBuilderConfig} from './schema.js';
41
-
42
- const {
43
- getConfigType,
44
- extractNativeModuleName,
45
- createParserErrorCapturer,
46
- visit,
47
- isModuleRegistryCall,
48
- verifyPlatforms,
49
- } = require('./utils');
50
40
 
51
41
  const {
52
- throwIfPropertyValueTypeIsUnsupported,
53
- throwIfUnsupportedFunctionParamTypeAnnotationParserError,
54
- throwIfUnsupportedFunctionReturnTypeAnnotationParserError,
55
- throwIfModuleTypeIsUnsupported,
56
- throwIfUnusedModuleInterfaceParserError,
57
- throwIfMoreThanOneModuleRegistryCalls,
58
- throwIfWrongNumberOfCallExpressionArgs,
59
- throwIfUntypedModule,
60
- throwIfIncorrectModuleRegistryCallTypeParameterParserError,
42
+ throwIfConfigNotfound,
61
43
  throwIfIncorrectModuleRegistryCallArgument,
62
- throwIfModuleInterfaceNotFound,
63
- throwIfMoreThanOneModuleInterfaceParserError,
44
+ throwIfIncorrectModuleRegistryCallTypeParameterParserError,
64
45
  throwIfModuleInterfaceIsMisnamed,
46
+ throwIfModuleInterfaceNotFound,
47
+ throwIfModuleTypeIsUnsupported,
65
48
  throwIfMoreThanOneCodegenNativecommands,
66
- throwIfConfigNotfound,
67
49
  throwIfMoreThanOneConfig,
50
+ throwIfMoreThanOneModuleInterfaceParserError,
51
+ throwIfMoreThanOneModuleRegistryCalls,
52
+ throwIfPropertyValueTypeIsUnsupported,
68
53
  throwIfTypeAliasIsNotInterface,
54
+ throwIfUnsupportedFunctionParamTypeAnnotationParserError,
55
+ throwIfUnsupportedFunctionReturnTypeAnnotationParserError,
56
+ throwIfUntypedModule,
57
+ throwIfUnusedModuleInterfaceParserError,
58
+ throwIfWrongNumberOfCallExpressionArgs,
69
59
  } = require('./error-utils');
70
-
71
60
  const {
72
61
  MissingTypeParameterGenericParserError,
73
62
  MoreThanOneTypeParameterGenericParserError,
74
63
  UnnamedFunctionParamParserError,
64
+ UnsupportedObjectDirectRecursivePropertyParserError,
75
65
  } = require('./errors');
76
-
66
+ const {
67
+ createParserErrorCapturer,
68
+ extractNativeModuleName,
69
+ getConfigType,
70
+ isModuleRegistryCall,
71
+ verifyPlatforms,
72
+ visit,
73
+ } = require('./utils');
77
74
  const invariant = require('invariant');
78
75
 
79
76
  export type CommandOptions = $ReadOnly<{
@@ -175,6 +172,7 @@ function isObjectProperty(property: $FlowFixMe, language: ParserType): boolean {
175
172
  }
176
173
 
177
174
  function parseObjectProperty(
175
+ parentObject?: $FlowFixMe,
178
176
  property: $FlowFixMe,
179
177
  hasteModuleName: string,
180
178
  types: TypeDeclarationMap,
@@ -195,6 +193,41 @@ function parseObjectProperty(
195
193
  ? property.typeAnnotation.typeAnnotation
196
194
  : property.value;
197
195
 
196
+ // Handle recursive types
197
+ if (parentObject) {
198
+ const propertyType = parser.getResolveTypeAnnotationFN()(
199
+ languageTypeAnnotation,
200
+ types,
201
+ parser,
202
+ );
203
+ if (
204
+ propertyType.typeResolutionStatus.successful === true &&
205
+ propertyType.typeResolutionStatus.type === 'alias' &&
206
+ (language === 'TypeScript'
207
+ ? parentObject.typeName &&
208
+ parentObject.typeName.name === languageTypeAnnotation.typeName?.name
209
+ : parentObject.id &&
210
+ parentObject.id.name === languageTypeAnnotation.id?.name)
211
+ ) {
212
+ if (!optional) {
213
+ throw new UnsupportedObjectDirectRecursivePropertyParserError(
214
+ name,
215
+ languageTypeAnnotation,
216
+ hasteModuleName,
217
+ );
218
+ }
219
+ return {
220
+ name,
221
+ optional,
222
+ typeAnnotation: {
223
+ type: 'TypeAliasTypeAnnotation',
224
+ name: propertyType.typeResolutionStatus.name,
225
+ },
226
+ };
227
+ }
228
+ }
229
+
230
+ // Handle non-recursive types
198
231
  const [propertyTypeAnnotation, isPropertyNullable] =
199
232
  unwrapNullable<$FlowFixMe>(
200
233
  translateTypeAnnotation(
@@ -210,7 +243,7 @@ function parseObjectProperty(
210
243
  );
211
244
 
212
245
  if (
213
- propertyTypeAnnotation.type === 'FunctionTypeAnnotation' ||
246
+ (propertyTypeAnnotation.type === 'FunctionTypeAnnotation' && !cxxOnly) ||
214
247
  propertyTypeAnnotation.type === 'PromiseTypeAnnotation' ||
215
248
  propertyTypeAnnotation.type === 'VoidTypeAnnotation'
216
249
  ) {
@@ -484,7 +517,7 @@ function buildSchema(
484
517
  return {modules: {}};
485
518
  }
486
519
 
487
- const ast = parser.getAst(contents);
520
+ const ast = parser.getAst(contents, filename);
488
521
  const configType = getConfigType(ast, Visitor);
489
522
 
490
523
  return buildSchemaFromConfigType(
@@ -707,6 +740,7 @@ function findNativeComponentType(
707
740
  // expression so we need to go one level deeper
708
741
  if (
709
742
  declaration.type === 'TSAsExpression' ||
743
+ declaration.type === 'AsExpression' ||
710
744
  declaration.type === 'TypeCastExpression'
711
745
  ) {
712
746
  declaration = declaration.expression;
@@ -78,26 +78,26 @@ function _iterableToArrayLimit(arr, i) {
78
78
  function _arrayWithHoles(arr) {
79
79
  if (Array.isArray(arr)) return arr;
80
80
  }
81
- const _require = require('./errors'),
82
- UnsupportedUnionTypeAnnotationParserError =
83
- _require.UnsupportedUnionTypeAnnotationParserError,
84
- UnsupportedTypeAnnotationParserError =
85
- _require.UnsupportedTypeAnnotationParserError,
86
- ParserError = _require.ParserError;
87
- const _require2 = require('./error-utils'),
81
+ const _require = require('./error-utils'),
88
82
  throwIfArrayElementTypeAnnotationIsUnsupported =
89
- _require2.throwIfArrayElementTypeAnnotationIsUnsupported,
83
+ _require.throwIfArrayElementTypeAnnotationIsUnsupported,
90
84
  throwIfPartialNotAnnotatingTypeParameter =
91
- _require2.throwIfPartialNotAnnotatingTypeParameter,
92
- throwIfPartialWithMoreParameter = _require2.throwIfPartialWithMoreParameter;
93
- const _require3 = require('./parsers-utils'),
94
- nullGuard = _require3.nullGuard;
95
- const _require4 = require('./parsers-commons'),
85
+ _require.throwIfPartialNotAnnotatingTypeParameter,
86
+ throwIfPartialWithMoreParameter = _require.throwIfPartialWithMoreParameter;
87
+ const _require2 = require('./errors'),
88
+ ParserError = _require2.ParserError,
89
+ UnsupportedTypeAnnotationParserError =
90
+ _require2.UnsupportedTypeAnnotationParserError,
91
+ UnsupportedUnionTypeAnnotationParserError =
92
+ _require2.UnsupportedUnionTypeAnnotationParserError;
93
+ const _require3 = require('./parsers-commons'),
96
94
  assertGenericTypeAnnotationHasExactlyOneTypeParameter =
97
- _require4.assertGenericTypeAnnotationHasExactlyOneTypeParameter,
98
- wrapNullable = _require4.wrapNullable,
99
- unwrapNullable = _require4.unwrapNullable,
100
- translateFunctionTypeAnnotation = _require4.translateFunctionTypeAnnotation;
95
+ _require3.assertGenericTypeAnnotationHasExactlyOneTypeParameter,
96
+ translateFunctionTypeAnnotation = _require3.translateFunctionTypeAnnotation,
97
+ unwrapNullable = _require3.unwrapNullable,
98
+ wrapNullable = _require3.wrapNullable;
99
+ const _require4 = require('./parsers-utils'),
100
+ nullGuard = _require4.nullGuard;
101
101
  const _require5 = require('./utils'),
102
102
  isModuleRegistryCall = _require5.isModuleRegistryCall;
103
103
  function emitBoolean(nullable) {
@@ -11,57 +11,55 @@
11
11
  'use strict';
12
12
 
13
13
  import type {
14
- Nullable,
15
14
  BooleanTypeAnnotation,
16
15
  DoubleTypeAnnotation,
17
16
  EventTypeAnnotation,
18
17
  Int32TypeAnnotation,
19
18
  NamedShape,
20
19
  NativeModuleAliasMap,
21
- NativeModuleEnumMap,
22
20
  NativeModuleBaseTypeAnnotation,
23
- NativeModuleTypeAnnotation,
21
+ NativeModuleEnumDeclaration,
22
+ NativeModuleEnumMap,
24
23
  NativeModuleFloatTypeAnnotation,
25
24
  NativeModuleFunctionTypeAnnotation,
26
25
  NativeModuleGenericObjectTypeAnnotation,
27
26
  NativeModuleMixedTypeAnnotation,
28
27
  NativeModuleNumberTypeAnnotation,
28
+ NativeModuleObjectTypeAnnotation,
29
29
  NativeModulePromiseTypeAnnotation,
30
30
  NativeModuleTypeAliasTypeAnnotation,
31
+ NativeModuleTypeAnnotation,
31
32
  NativeModuleUnionTypeAnnotation,
33
+ Nullable,
32
34
  ObjectTypeAnnotation,
33
35
  ReservedTypeAnnotation,
34
36
  StringTypeAnnotation,
35
37
  VoidTypeAnnotation,
36
- NativeModuleObjectTypeAnnotation,
37
- NativeModuleEnumDeclaration,
38
38
  } from '../CodegenSchema';
39
39
  import type {Parser} from './parser';
40
40
  import type {
41
41
  ParserErrorCapturer,
42
- TypeResolutionStatus,
43
42
  TypeDeclarationMap,
43
+ TypeResolutionStatus,
44
44
  } from './utils';
45
45
 
46
- const {
47
- UnsupportedUnionTypeAnnotationParserError,
48
- UnsupportedTypeAnnotationParserError,
49
- ParserError,
50
- } = require('./errors');
51
-
52
46
  const {
53
47
  throwIfArrayElementTypeAnnotationIsUnsupported,
54
48
  throwIfPartialNotAnnotatingTypeParameter,
55
49
  throwIfPartialWithMoreParameter,
56
50
  } = require('./error-utils');
57
- const {nullGuard} = require('./parsers-utils');
51
+ const {
52
+ ParserError,
53
+ UnsupportedTypeAnnotationParserError,
54
+ UnsupportedUnionTypeAnnotationParserError,
55
+ } = require('./errors');
58
56
  const {
59
57
  assertGenericTypeAnnotationHasExactlyOneTypeParameter,
60
- wrapNullable,
61
- unwrapNullable,
62
58
  translateFunctionTypeAnnotation,
59
+ unwrapNullable,
60
+ wrapNullable,
63
61
  } = require('./parsers-commons');
64
-
62
+ const {nullGuard} = require('./parsers-utils');
65
63
  const {isModuleRegistryCall} = require('./utils');
66
64
 
67
65
  function emitBoolean(nullable: boolean): Nullable<BooleanTypeAnnotation> {
@@ -11,13 +11,13 @@
11
11
  'use strict';
12
12
 
13
13
  import type {
14
+ CommandTypeAnnotation,
14
15
  EventTypeShape,
16
+ ExtendsPropsShape,
15
17
  NamedShape,
16
- CommandTypeAnnotation,
18
+ OptionsShape,
17
19
  PropTypeAnnotation,
18
- ExtendsPropsShape,
19
20
  SchemaType,
20
- OptionsShape,
21
21
  } from '../CodegenSchema.js';
22
22
 
23
23
  export type ComponentSchemaBuilderConfig = $ReadOnly<{
@@ -1094,13 +1094,20 @@ export type ScrollTo = (
1094
1094
  y: Int,
1095
1095
  animated: Boolean,
1096
1096
  ) => Void;
1097
+ export type AddOverlays = (
1098
+ viewRef: React.ElementRef<NativeType>,
1099
+ overlayColorsReadOnly: ReadOnlyArray<string>,
1100
+ overlayColorsArray: Array<string>,
1101
+ overlayColorsArrayAnnotation: string[],
1102
+ ) => Void;
1097
1103
 
1098
1104
  interface NativeCommands {
1099
1105
  readonly scrollTo: ScrollTo;
1106
+ readonly addOverlays: AddOverlays;
1100
1107
  }
1101
1108
 
1102
1109
  export const Commands = codegenNativeCommands<NativeCommands>({
1103
- supportedCommands: ['scrollTo'],
1110
+ supportedCommands: ['scrollTo', 'addOverlays'],
1104
1111
  });
1105
1112
 
1106
1113
  export default codegenNativeComponent<ModuleProps>('Module') as NativeType;
@@ -1108,13 +1108,20 @@ export type ScrollTo = (
1108
1108
  y: Int,
1109
1109
  animated: Boolean,
1110
1110
  ) => Void;
1111
+ export type AddOverlays = (
1112
+ viewRef: React.ElementRef<NativeType>,
1113
+ overlayColorsReadOnly: ReadOnlyArray<string>,
1114
+ overlayColorsArray: Array<string>,
1115
+ overlayColorsArrayAnnotation: string[],
1116
+ ) => Void;
1111
1117
 
1112
1118
  interface NativeCommands {
1113
1119
  readonly scrollTo: ScrollTo;
1120
+ readonly addOverlays: AddOverlays;
1114
1121
  }
1115
1122
 
1116
1123
  export const Commands = codegenNativeCommands<NativeCommands>({
1117
- supportedCommands: ['scrollTo'],
1124
+ supportedCommands: ['scrollTo', 'addOverlays'],
1118
1125
  });
1119
1126
 
1120
1127
  export default codegenNativeComponent<ModuleProps>('Module') as NativeType;
@@ -12,6 +12,8 @@
12
12
 
13
13
  const _require = require('../parseTopLevelType'),
14
14
  parseTopLevelType = _require.parseTopLevelType;
15
+ const _require2 = require('./componentsUtils'),
16
+ getPrimitiveTypeAnnotation = _require2.getPrimitiveTypeAnnotation;
15
17
 
16
18
  // $FlowFixMe[unclear-type] there's no flowtype for ASTs
17
19
 
@@ -55,28 +57,34 @@ function buildCommandSchemaInternal(name, optional, parameters, types) {
55
57
  };
56
58
  break;
57
59
  case 'TSBooleanKeyword':
58
- returnType = {
59
- type: 'BooleanTypeAnnotation',
60
- };
61
- break;
62
60
  case 'Int32':
63
- returnType = {
64
- type: 'Int32TypeAnnotation',
65
- };
66
- break;
67
61
  case 'Double':
68
- returnType = {
69
- type: 'DoubleTypeAnnotation',
70
- };
71
- break;
72
62
  case 'Float':
63
+ case 'TSStringKeyword':
64
+ returnType = getPrimitiveTypeAnnotation(type);
65
+ break;
66
+ case 'Array':
67
+ case 'ReadOnlyArray':
68
+ if (!paramValue.type === 'TSTypeReference') {
69
+ throw new Error(
70
+ 'Array and ReadOnlyArray are TSTypeReference for array',
71
+ );
72
+ }
73
73
  returnType = {
74
- type: 'FloatTypeAnnotation',
74
+ type: 'ArrayTypeAnnotation',
75
+ elementType: getPrimitiveTypeAnnotation(
76
+ // TODO: T172453752 support complex type annotation for array element
77
+ paramValue.typeParameters.params[0].type,
78
+ ),
75
79
  };
76
80
  break;
77
- case 'TSStringKeyword':
81
+ case 'TSArrayType':
78
82
  returnType = {
79
- type: 'StringTypeAnnotation',
83
+ type: 'ArrayTypeAnnotation',
84
+ elementType: {
85
+ // TODO: T172453752 support complex type annotation for array element
86
+ type: getPrimitiveTypeAnnotation(paramValue.elementType.type).type,
87
+ },
80
88
  };
81
89
  break;
82
90
  default:
@@ -11,11 +11,13 @@
11
11
  'use strict';
12
12
 
13
13
  import type {
14
- NamedShape,
15
14
  CommandTypeAnnotation,
15
+ NamedShape,
16
16
  } from '../../../CodegenSchema.js';
17
17
  import type {TypeDeclarationMap} from '../../utils';
18
+
18
19
  const {parseTopLevelType} = require('../parseTopLevelType');
20
+ const {getPrimitiveTypeAnnotation} = require('./componentsUtils');
19
21
 
20
22
  // $FlowFixMe[unclear-type] there's no flowtype for ASTs
21
23
  type EventTypeAST = Object;
@@ -61,28 +63,34 @@ function buildCommandSchemaInternal(
61
63
  };
62
64
  break;
63
65
  case 'TSBooleanKeyword':
64
- returnType = {
65
- type: 'BooleanTypeAnnotation',
66
- };
67
- break;
68
66
  case 'Int32':
69
- returnType = {
70
- type: 'Int32TypeAnnotation',
71
- };
72
- break;
73
67
  case 'Double':
74
- returnType = {
75
- type: 'DoubleTypeAnnotation',
76
- };
77
- break;
78
68
  case 'Float':
69
+ case 'TSStringKeyword':
70
+ returnType = getPrimitiveTypeAnnotation(type);
71
+ break;
72
+ case 'Array':
73
+ case 'ReadOnlyArray':
74
+ if (!paramValue.type === 'TSTypeReference') {
75
+ throw new Error(
76
+ 'Array and ReadOnlyArray are TSTypeReference for array',
77
+ );
78
+ }
79
79
  returnType = {
80
- type: 'FloatTypeAnnotation',
80
+ type: 'ArrayTypeAnnotation',
81
+ elementType: getPrimitiveTypeAnnotation(
82
+ // TODO: T172453752 support complex type annotation for array element
83
+ paramValue.typeParameters.params[0].type,
84
+ ),
81
85
  };
82
86
  break;
83
- case 'TSStringKeyword':
87
+ case 'TSArrayType':
84
88
  returnType = {
85
- type: 'StringTypeAnnotation',
89
+ type: 'ArrayTypeAnnotation',
90
+ elementType: {
91
+ // TODO: T172453752 support complex type annotation for array element
92
+ type: getPrimitiveTypeAnnotation(paramValue.elementType.type).type,
93
+ },
86
94
  };
87
95
  break;
88
96
  default:
@@ -10,11 +10,11 @@
10
10
 
11
11
  'use strict';
12
12
 
13
- const _require = require('../parseTopLevelType'),
14
- parseTopLevelType = _require.parseTopLevelType,
15
- flattenIntersectionType = _require.flattenIntersectionType;
16
- const _require2 = require('../../parsers-commons'),
17
- verifyPropNotAlreadyDefined = _require2.verifyPropNotAlreadyDefined;
13
+ const _require = require('../../parsers-commons'),
14
+ verifyPropNotAlreadyDefined = _require.verifyPropNotAlreadyDefined;
15
+ const _require2 = require('../parseTopLevelType'),
16
+ flattenIntersectionType = _require2.flattenIntersectionType,
17
+ parseTopLevelType = _require2.parseTopLevelType;
18
18
  function getUnionOfLiterals(name, forArray, elementTypes, defaultValue, types) {
19
19
  var _elementTypes$0$liter, _elementTypes$0$liter2;
20
20
  elementTypes.reduce((lastType, currType) => {
@@ -147,6 +147,33 @@ function buildObjectType(rawProperties, types, parser, buildSchema) {
147
147
  properties,
148
148
  };
149
149
  }
150
+ function getPrimitiveTypeAnnotation(type) {
151
+ switch (type) {
152
+ case 'Int32':
153
+ return {
154
+ type: 'Int32TypeAnnotation',
155
+ };
156
+ case 'Double':
157
+ return {
158
+ type: 'DoubleTypeAnnotation',
159
+ };
160
+ case 'Float':
161
+ return {
162
+ type: 'FloatTypeAnnotation',
163
+ };
164
+ case 'TSBooleanKeyword':
165
+ return {
166
+ type: 'BooleanTypeAnnotation',
167
+ };
168
+ case 'Stringish':
169
+ case 'TSStringKeyword':
170
+ return {
171
+ type: 'StringTypeAnnotation',
172
+ };
173
+ default:
174
+ throw new Error(`Unknown primitive type "${type}"`);
175
+ }
176
+ }
150
177
  function getCommonTypeAnnotation(
151
178
  name,
152
179
  forArray,
@@ -214,26 +241,12 @@ function getCommonTypeAnnotation(
214
241
  types,
215
242
  );
216
243
  case 'Int32':
217
- return {
218
- type: 'Int32TypeAnnotation',
219
- };
220
244
  case 'Double':
221
- return {
222
- type: 'DoubleTypeAnnotation',
223
- };
224
245
  case 'Float':
225
- return {
226
- type: 'FloatTypeAnnotation',
227
- };
228
246
  case 'TSBooleanKeyword':
229
- return {
230
- type: 'BooleanTypeAnnotation',
231
- };
232
247
  case 'Stringish':
233
248
  case 'TSStringKeyword':
234
- return {
235
- type: 'StringTypeAnnotation',
236
- };
249
+ return getPrimitiveTypeAnnotation(type);
237
250
  case 'UnsafeMixed':
238
251
  return {
239
252
  type: 'MixedTypeAnnotation',
@@ -472,5 +485,6 @@ function flattenProperties(typeDefinition, types, parser) {
472
485
  module.exports = {
473
486
  getSchemaInfo,
474
487
  getTypeAnnotation,
488
+ getPrimitiveTypeAnnotation,
475
489
  flattenProperties,
476
490
  };
@@ -9,13 +9,15 @@
9
9
  */
10
10
 
11
11
  'use strict';
12
+
13
+ import type {BuildSchemaFN, Parser} from '../../parser';
14
+ import type {ASTNode, PropAST, TypeDeclarationMap} from '../../utils';
15
+
16
+ const {verifyPropNotAlreadyDefined} = require('../../parsers-commons');
12
17
  const {
13
- parseTopLevelType,
14
18
  flattenIntersectionType,
19
+ parseTopLevelType,
15
20
  } = require('../parseTopLevelType');
16
- const {verifyPropNotAlreadyDefined} = require('../../parsers-commons');
17
- import type {TypeDeclarationMap, PropAST, ASTNode} from '../../utils';
18
- import type {BuildSchemaFN, Parser} from '../../parser';
19
21
 
20
22
  function getUnionOfLiterals(
21
23
  name: string,
@@ -157,6 +159,34 @@ function buildObjectType<T>(
157
159
  };
158
160
  }
159
161
 
162
+ function getPrimitiveTypeAnnotation(type: string): $FlowFixMe {
163
+ switch (type) {
164
+ case 'Int32':
165
+ return {
166
+ type: 'Int32TypeAnnotation',
167
+ };
168
+ case 'Double':
169
+ return {
170
+ type: 'DoubleTypeAnnotation',
171
+ };
172
+ case 'Float':
173
+ return {
174
+ type: 'FloatTypeAnnotation',
175
+ };
176
+ case 'TSBooleanKeyword':
177
+ return {
178
+ type: 'BooleanTypeAnnotation',
179
+ };
180
+ case 'Stringish':
181
+ case 'TSStringKeyword':
182
+ return {
183
+ type: 'StringTypeAnnotation',
184
+ };
185
+ default:
186
+ throw new Error(`Unknown primitive type "${type}"`);
187
+ }
188
+ }
189
+
160
190
  function getCommonTypeAnnotation<T>(
161
191
  name: string,
162
192
  forArray: boolean,
@@ -224,26 +254,12 @@ function getCommonTypeAnnotation<T>(
224
254
  types,
225
255
  );
226
256
  case 'Int32':
227
- return {
228
- type: 'Int32TypeAnnotation',
229
- };
230
257
  case 'Double':
231
- return {
232
- type: 'DoubleTypeAnnotation',
233
- };
234
258
  case 'Float':
235
- return {
236
- type: 'FloatTypeAnnotation',
237
- };
238
259
  case 'TSBooleanKeyword':
239
- return {
240
- type: 'BooleanTypeAnnotation',
241
- };
242
260
  case 'Stringish':
243
261
  case 'TSStringKeyword':
244
- return {
245
- type: 'StringTypeAnnotation',
246
- };
262
+ return getPrimitiveTypeAnnotation(type);
247
263
  case 'UnsafeMixed':
248
264
  return {
249
265
  type: 'MixedTypeAnnotation',
@@ -512,5 +528,6 @@ function flattenProperties(
512
528
  module.exports = {
513
529
  getSchemaInfo,
514
530
  getTypeAnnotation,
531
+ getPrimitiveTypeAnnotation,
515
532
  flattenProperties,
516
533
  };