@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,23 +11,23 @@
11
11
  'use strict';
12
12
 
13
13
  import type {
14
- Nullable,
15
14
  NamedShape,
16
15
  NativeModuleParamTypeAnnotation,
17
- NativeModuleReturnTypeAnnotation,
18
16
  NativeModulePropertyShape,
17
+ NativeModuleReturnTypeAnnotation,
18
+ Nullable,
19
19
  } from '../../../CodegenSchema';
20
-
21
20
  import type {AliasResolver} from '../Utils';
22
21
  import type {StructCollector} from './StructCollector';
23
22
 
24
- const invariant = require('invariant');
25
- const {getNamespacedStructName} = require('./Utils');
26
- const {capitalize} = require('../../Utils');
27
23
  const {
28
- wrapNullable,
29
24
  unwrapNullable,
25
+ wrapNullable,
30
26
  } = require('../../../parsers/parsers-commons');
27
+ const {wrapOptional} = require('../../TypeUtils/Objective-C');
28
+ const {capitalize} = require('../../Utils');
29
+ const {getNamespacedStructName} = require('./Utils');
30
+ const invariant = require('invariant');
31
31
 
32
32
  const ProtocolMethodTemplate = ({
33
33
  returnObjCType,
@@ -189,11 +189,7 @@ function getParamObjCType(
189
189
  ): $ReadOnly<{objCType: string, isStruct: boolean}> {
190
190
  const {name: paramName, typeAnnotation: nullableTypeAnnotation} = param;
191
191
  const [typeAnnotation, nullable] = unwrapNullable(nullableTypeAnnotation);
192
- const notRequired = param.optional || nullable;
193
-
194
- function wrapIntoNullableIfNeeded(generatedType: string) {
195
- return nullable ? `${generatedType} _Nullable` : generatedType;
196
- }
192
+ const isRequired = !param.optional && !nullable;
197
193
 
198
194
  const isStruct = (objCType: string) => ({
199
195
  isStruct: true,
@@ -221,7 +217,7 @@ function getParamObjCType(
221
217
  * type Animal = {};
222
218
  * Array<Animal> => NSArray<JS::NativeSampleTurboModule::Animal *>, etc.
223
219
  */
224
- return notStruct(wrapIntoNullableIfNeeded('NSArray *'));
220
+ return notStruct(wrapOptional('NSArray *', !nullable));
225
221
  }
226
222
  }
227
223
 
@@ -252,7 +248,7 @@ function getParamObjCType(
252
248
  case 'ReservedTypeAnnotation':
253
249
  switch (structTypeAnnotation.name) {
254
250
  case 'RootTag':
255
- return notStruct(notRequired ? 'NSNumber *' : 'double');
251
+ return notStruct(isRequired ? 'double' : 'NSNumber *');
256
252
  default:
257
253
  (structTypeAnnotation.name: empty);
258
254
  throw new Error(
@@ -260,30 +256,30 @@ function getParamObjCType(
260
256
  );
261
257
  }
262
258
  case 'StringTypeAnnotation':
263
- return notStruct(wrapIntoNullableIfNeeded('NSString *'));
259
+ return notStruct(wrapOptional('NSString *', !nullable));
264
260
  case 'NumberTypeAnnotation':
265
- return notStruct(notRequired ? 'NSNumber *' : 'double');
261
+ return notStruct(isRequired ? 'double' : 'NSNumber *');
266
262
  case 'FloatTypeAnnotation':
267
- return notStruct(notRequired ? 'NSNumber *' : 'double');
263
+ return notStruct(isRequired ? 'float' : 'NSNumber *');
268
264
  case 'DoubleTypeAnnotation':
269
- return notStruct(notRequired ? 'NSNumber *' : 'double');
265
+ return notStruct(isRequired ? 'double' : 'NSNumber *');
270
266
  case 'Int32TypeAnnotation':
271
- return notStruct(notRequired ? 'NSNumber *' : 'double');
267
+ return notStruct(isRequired ? 'NSInteger' : 'NSNumber *');
272
268
  case 'BooleanTypeAnnotation':
273
- return notStruct(notRequired ? 'NSNumber *' : 'BOOL');
269
+ return notStruct(isRequired ? 'BOOL' : 'NSNumber *');
274
270
  case 'EnumDeclaration':
275
271
  switch (typeAnnotation.memberType) {
276
272
  case 'NumberTypeAnnotation':
277
- return notStruct(notRequired ? 'NSNumber *' : 'double');
273
+ return notStruct(isRequired ? 'double' : 'NSNumber *');
278
274
  case 'StringTypeAnnotation':
279
- return notStruct(wrapIntoNullableIfNeeded('NSString *'));
275
+ return notStruct(wrapOptional('NSString *', !nullable));
280
276
  default:
281
277
  throw new Error(
282
278
  `Unsupported enum type for param "${paramName}" in ${methodName}. Found: ${typeAnnotation.type}`,
283
279
  );
284
280
  }
285
281
  case 'GenericObjectTypeAnnotation':
286
- return notStruct(wrapIntoNullableIfNeeded('NSDictionary *'));
282
+ return notStruct(wrapOptional('NSDictionary *', !nullable));
287
283
  default:
288
284
  (structTypeAnnotation.type: empty);
289
285
  throw new Error(
@@ -297,10 +293,7 @@ function getReturnObjCType(
297
293
  nullableTypeAnnotation: Nullable<NativeModuleReturnTypeAnnotation>,
298
294
  ): string {
299
295
  const [typeAnnotation, nullable] = unwrapNullable(nullableTypeAnnotation);
300
-
301
- function wrapIntoNullableIfNeeded(generatedType: string) {
302
- return nullable ? `${generatedType} _Nullable` : generatedType;
303
- }
296
+ const isRequired = !nullable;
304
297
 
305
298
  switch (typeAnnotation.type) {
306
299
  case 'VoidTypeAnnotation':
@@ -308,24 +301,25 @@ function getReturnObjCType(
308
301
  case 'PromiseTypeAnnotation':
309
302
  return 'void';
310
303
  case 'ObjectTypeAnnotation':
311
- return wrapIntoNullableIfNeeded('NSDictionary *');
304
+ return wrapOptional('NSDictionary *', isRequired);
312
305
  case 'TypeAliasTypeAnnotation':
313
- return wrapIntoNullableIfNeeded('NSDictionary *');
306
+ return wrapOptional('NSDictionary *', isRequired);
314
307
  case 'ArrayTypeAnnotation':
315
308
  if (typeAnnotation.elementType == null) {
316
- return wrapIntoNullableIfNeeded('NSArray<id<NSObject>> *');
309
+ return wrapOptional('NSArray<id<NSObject>> *', isRequired);
317
310
  }
318
311
 
319
- return wrapIntoNullableIfNeeded(
312
+ return wrapOptional(
320
313
  `NSArray<${getReturnObjCType(
321
314
  methodName,
322
315
  typeAnnotation.elementType,
323
316
  )}> *`,
317
+ isRequired,
324
318
  );
325
319
  case 'ReservedTypeAnnotation':
326
320
  switch (typeAnnotation.name) {
327
321
  case 'RootTag':
328
- return wrapIntoNullableIfNeeded('NSNumber *');
322
+ return wrapOptional('NSNumber *', isRequired);
329
323
  default:
330
324
  (typeAnnotation.name: empty);
331
325
  throw new Error(
@@ -335,23 +329,23 @@ function getReturnObjCType(
335
329
  case 'StringTypeAnnotation':
336
330
  // TODO: Can NSString * returns not be _Nullable?
337
331
  // In the legacy codegen, we don't surround NSSTring * with _Nullable
338
- return wrapIntoNullableIfNeeded('NSString *');
332
+ return wrapOptional('NSString *', isRequired);
339
333
  case 'NumberTypeAnnotation':
340
- return wrapIntoNullableIfNeeded('NSNumber *');
334
+ return wrapOptional('NSNumber *', isRequired);
341
335
  case 'FloatTypeAnnotation':
342
- return wrapIntoNullableIfNeeded('NSNumber *');
336
+ return wrapOptional('NSNumber *', isRequired);
343
337
  case 'DoubleTypeAnnotation':
344
- return wrapIntoNullableIfNeeded('NSNumber *');
338
+ return wrapOptional('NSNumber *', isRequired);
345
339
  case 'Int32TypeAnnotation':
346
- return wrapIntoNullableIfNeeded('NSNumber *');
340
+ return wrapOptional('NSNumber *', isRequired);
347
341
  case 'BooleanTypeAnnotation':
348
- return wrapIntoNullableIfNeeded('NSNumber *');
342
+ return wrapOptional('NSNumber *', isRequired);
349
343
  case 'EnumDeclaration':
350
344
  switch (typeAnnotation.memberType) {
351
345
  case 'NumberTypeAnnotation':
352
- return wrapIntoNullableIfNeeded('NSNumber *');
346
+ return wrapOptional('NSNumber *', isRequired);
353
347
  case 'StringTypeAnnotation':
354
- return wrapIntoNullableIfNeeded('NSString *');
348
+ return wrapOptional('NSString *', isRequired);
355
349
  default:
356
350
  throw new Error(
357
351
  `Unsupported enum return type for ${methodName}. Found: ${typeAnnotation.type}`,
@@ -360,20 +354,20 @@ function getReturnObjCType(
360
354
  case 'UnionTypeAnnotation':
361
355
  switch (typeAnnotation.memberType) {
362
356
  case 'NumberTypeAnnotation':
363
- return wrapIntoNullableIfNeeded('NSNumber *');
357
+ return wrapOptional('NSNumber *', isRequired);
364
358
  case 'ObjectTypeAnnotation':
365
- return wrapIntoNullableIfNeeded('NSDictionary *');
359
+ return wrapOptional('NSDictionary *', isRequired);
366
360
  case 'StringTypeAnnotation':
367
361
  // TODO: Can NSString * returns not be _Nullable?
368
362
  // In the legacy codegen, we don't surround NSSTring * with _Nullable
369
- return wrapIntoNullableIfNeeded('NSString *');
363
+ return wrapOptional('NSString *', isRequired);
370
364
  default:
371
365
  throw new Error(
372
366
  `Unsupported union return type for ${methodName}, found: ${typeAnnotation.memberType}"`,
373
367
  );
374
368
  }
375
369
  case 'GenericObjectTypeAnnotation':
376
- return wrapIntoNullableIfNeeded('NSDictionary *');
370
+ return wrapOptional('NSDictionary *', isRequired);
377
371
  default:
378
372
  (typeAnnotation.type: 'MixedTypeAnnotation');
379
373
  throw new Error(
@@ -22,34 +22,32 @@ const ModuleTemplate = ({
22
22
  }),
23
23
  )
24
24
  .join('\n')}
25
- namespace facebook {
26
- namespace react {
27
- ${methodSerializationOutputs
28
- .map(serializedMethodParts =>
29
- InlineHostFunctionTemplate({
30
- hasteModuleName,
31
- methodName: serializedMethodParts.methodName,
32
- returnJSType: serializedMethodParts.returnJSType,
33
- selector: serializedMethodParts.selector,
34
- }),
35
- )
36
- .join('\n')}
25
+ namespace facebook::react {
26
+ ${methodSerializationOutputs
27
+ .map(serializedMethodParts =>
28
+ InlineHostFunctionTemplate({
29
+ hasteModuleName,
30
+ methodName: serializedMethodParts.methodName,
31
+ returnJSType: serializedMethodParts.returnJSType,
32
+ selector: serializedMethodParts.selector,
33
+ }),
34
+ )
35
+ .join('\n')}
37
36
 
38
- ${hasteModuleName}SpecJSI::${hasteModuleName}SpecJSI(const ObjCTurboModule::InitParams &params)
39
- : ObjCTurboModule(params) {
40
- ${methodSerializationOutputs
41
- .map(({methodName, structParamRecords, argCount}) =>
42
- MethodMapEntryTemplate({
43
- hasteModuleName,
44
- methodName,
45
- structParamRecords,
46
- argCount,
47
- }),
48
- )
49
- .join('\n' + ' '.repeat(8))}
50
- }
51
- } // namespace react
52
- } // namespace facebook`;
37
+ ${hasteModuleName}SpecJSI::${hasteModuleName}SpecJSI(const ObjCTurboModule::InitParams &params)
38
+ : ObjCTurboModule(params) {
39
+ ${methodSerializationOutputs
40
+ .map(({methodName, structParamRecords, argCount}) =>
41
+ MethodMapEntryTemplate({
42
+ hasteModuleName,
43
+ methodName,
44
+ structParamRecords,
45
+ argCount,
46
+ }),
47
+ )
48
+ .join('\n' + ' '.repeat(8))}
49
+ }
50
+ } // namespace facebook::react`;
53
51
  const RCTCxxConvertCategoryTemplate = ({
54
52
  hasteModuleName,
55
53
  structName,
@@ -10,11 +10,11 @@
10
10
 
11
11
  'use strict';
12
12
 
13
- import type {Struct} from '../StructCollector';
14
13
  import type {
15
14
  MethodSerializationOutput,
16
15
  StructParameterRecord,
17
16
  } from '../serializeMethod';
17
+ import type {Struct} from '../StructCollector';
18
18
 
19
19
  const ModuleTemplate = ({
20
20
  hasteModuleName,
@@ -29,34 +29,32 @@ const ModuleTemplate = ({
29
29
  RCTCxxConvertCategoryTemplate({hasteModuleName, structName: struct.name}),
30
30
  )
31
31
  .join('\n')}
32
- namespace facebook {
33
- namespace react {
34
- ${methodSerializationOutputs
35
- .map(serializedMethodParts =>
36
- InlineHostFunctionTemplate({
37
- hasteModuleName,
38
- methodName: serializedMethodParts.methodName,
39
- returnJSType: serializedMethodParts.returnJSType,
40
- selector: serializedMethodParts.selector,
41
- }),
42
- )
43
- .join('\n')}
32
+ namespace facebook::react {
33
+ ${methodSerializationOutputs
34
+ .map(serializedMethodParts =>
35
+ InlineHostFunctionTemplate({
36
+ hasteModuleName,
37
+ methodName: serializedMethodParts.methodName,
38
+ returnJSType: serializedMethodParts.returnJSType,
39
+ selector: serializedMethodParts.selector,
40
+ }),
41
+ )
42
+ .join('\n')}
44
43
 
45
- ${hasteModuleName}SpecJSI::${hasteModuleName}SpecJSI(const ObjCTurboModule::InitParams &params)
46
- : ObjCTurboModule(params) {
47
- ${methodSerializationOutputs
48
- .map(({methodName, structParamRecords, argCount}) =>
49
- MethodMapEntryTemplate({
50
- hasteModuleName,
51
- methodName,
52
- structParamRecords,
53
- argCount,
54
- }),
55
- )
56
- .join('\n' + ' '.repeat(8))}
57
- }
58
- } // namespace react
59
- } // namespace facebook`;
44
+ ${hasteModuleName}SpecJSI::${hasteModuleName}SpecJSI(const ObjCTurboModule::InitParams &params)
45
+ : ObjCTurboModule(params) {
46
+ ${methodSerializationOutputs
47
+ .map(({methodName, structParamRecords, argCount}) =>
48
+ MethodMapEntryTemplate({
49
+ hasteModuleName,
50
+ methodName,
51
+ structParamRecords,
52
+ argCount,
53
+ }),
54
+ )
55
+ .join('\n' + ' '.repeat(8))}
56
+ }
57
+ } // namespace facebook::react`;
60
58
 
61
59
  const RCTCxxConvertCategoryTemplate = ({
62
60
  hasteModuleName,
@@ -10,6 +10,76 @@
10
10
 
11
11
  'use strict';
12
12
 
13
+ function _slicedToArray(arr, i) {
14
+ return (
15
+ _arrayWithHoles(arr) ||
16
+ _iterableToArrayLimit(arr, i) ||
17
+ _unsupportedIterableToArray(arr, i) ||
18
+ _nonIterableRest()
19
+ );
20
+ }
21
+ function _nonIterableRest() {
22
+ throw new TypeError(
23
+ 'Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.',
24
+ );
25
+ }
26
+ function _unsupportedIterableToArray(o, minLen) {
27
+ if (!o) return;
28
+ if (typeof o === 'string') return _arrayLikeToArray(o, minLen);
29
+ var n = Object.prototype.toString.call(o).slice(8, -1);
30
+ if (n === 'Object' && o.constructor) n = o.constructor.name;
31
+ if (n === 'Map' || n === 'Set') return Array.from(o);
32
+ if (n === 'Arguments' || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))
33
+ return _arrayLikeToArray(o, minLen);
34
+ }
35
+ function _arrayLikeToArray(arr, len) {
36
+ if (len == null || len > arr.length) len = arr.length;
37
+ for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];
38
+ return arr2;
39
+ }
40
+ function _iterableToArrayLimit(arr, i) {
41
+ var _i =
42
+ null == arr
43
+ ? null
44
+ : ('undefined' != typeof Symbol && arr[Symbol.iterator]) ||
45
+ arr['@@iterator'];
46
+ if (null != _i) {
47
+ var _s,
48
+ _e,
49
+ _x,
50
+ _r,
51
+ _arr = [],
52
+ _n = !0,
53
+ _d = !1;
54
+ try {
55
+ if (((_x = (_i = _i.call(arr)).next), 0 === i)) {
56
+ if (Object(_i) !== _i) return;
57
+ _n = !1;
58
+ } else
59
+ for (
60
+ ;
61
+ !(_n = (_s = _x.call(_i)).done) &&
62
+ (_arr.push(_s.value), _arr.length !== i);
63
+ _n = !0
64
+ );
65
+ } catch (err) {
66
+ (_d = !0), (_e = err);
67
+ } finally {
68
+ try {
69
+ if (!_n && null != _i.return && ((_r = _i.return()), Object(_r) !== _r))
70
+ return;
71
+ } finally {
72
+ if (_d) throw _e;
73
+ }
74
+ }
75
+ return _arr;
76
+ }
77
+ }
78
+ function _arrayWithHoles(arr) {
79
+ if (Array.isArray(arr)) return arr;
80
+ }
81
+ const _require = require('../../parsers/parsers-commons'),
82
+ unwrapNullable = _require.unwrapNullable;
13
83
  const invariant = require('invariant');
14
84
  function createAliasResolver(aliasMap) {
15
85
  return aliasName => {
@@ -28,6 +98,32 @@ function getModules(schema) {
28
98
  return modules;
29
99
  }, {});
30
100
  }
101
+ function isDirectRecursiveMember(
102
+ parentObjectAliasName,
103
+ nullableTypeAnnotation,
104
+ ) {
105
+ const _unwrapNullable = unwrapNullable(nullableTypeAnnotation),
106
+ _unwrapNullable2 = _slicedToArray(_unwrapNullable, 1),
107
+ typeAnnotation = _unwrapNullable2[0];
108
+ return (
109
+ parentObjectAliasName !== undefined &&
110
+ typeAnnotation.name === parentObjectAliasName
111
+ );
112
+ }
113
+ function isArrayRecursiveMember(parentObjectAliasName, nullableTypeAnnotation) {
114
+ var _typeAnnotation$eleme;
115
+ const _unwrapNullable3 = unwrapNullable(nullableTypeAnnotation),
116
+ _unwrapNullable4 = _slicedToArray(_unwrapNullable3, 1),
117
+ typeAnnotation = _unwrapNullable4[0];
118
+ return (
119
+ parentObjectAliasName !== undefined &&
120
+ typeAnnotation.type === 'ArrayTypeAnnotation' &&
121
+ ((_typeAnnotation$eleme = typeAnnotation.elementType) === null ||
122
+ _typeAnnotation$eleme === void 0
123
+ ? void 0
124
+ : _typeAnnotation$eleme.name) === parentObjectAliasName
125
+ );
126
+ }
31
127
  function getAreEnumMembersInteger(members) {
32
128
  return !members.some(m => `${m.value}`.includes('.'));
33
129
  }
@@ -35,4 +131,6 @@ module.exports = {
35
131
  createAliasResolver,
36
132
  getModules,
37
133
  getAreEnumMembersInteger,
134
+ isDirectRecursiveMember,
135
+ isArrayRecursiveMember,
38
136
  };
@@ -11,13 +11,16 @@
11
11
  'use strict';
12
12
 
13
13
  import type {
14
- SchemaType,
15
14
  NativeModuleAliasMap,
15
+ NativeModuleEnumMembers,
16
16
  NativeModuleObjectTypeAnnotation,
17
17
  NativeModuleSchema,
18
- NativeModuleEnumMembers,
18
+ NativeModuleTypeAnnotation,
19
+ Nullable,
20
+ SchemaType,
19
21
  } from '../../CodegenSchema';
20
22
 
23
+ const {unwrapNullable} = require('../../parsers/parsers-commons');
21
24
  const invariant = require('invariant');
22
25
 
23
26
  export type AliasResolver = (
@@ -48,6 +51,33 @@ function getModules(
48
51
  );
49
52
  }
50
53
 
54
+ function isDirectRecursiveMember(
55
+ parentObjectAliasName: ?string,
56
+ nullableTypeAnnotation: Nullable<NativeModuleTypeAnnotation>,
57
+ ): boolean {
58
+ const [typeAnnotation] = unwrapNullable<NativeModuleTypeAnnotation>(
59
+ nullableTypeAnnotation,
60
+ );
61
+ return (
62
+ parentObjectAliasName !== undefined &&
63
+ typeAnnotation.name === parentObjectAliasName
64
+ );
65
+ }
66
+
67
+ function isArrayRecursiveMember(
68
+ parentObjectAliasName: ?string,
69
+ nullableTypeAnnotation: Nullable<NativeModuleTypeAnnotation>,
70
+ ): boolean {
71
+ const [typeAnnotation] = unwrapNullable<NativeModuleTypeAnnotation>(
72
+ nullableTypeAnnotation,
73
+ );
74
+ return (
75
+ parentObjectAliasName !== undefined &&
76
+ typeAnnotation.type === 'ArrayTypeAnnotation' &&
77
+ typeAnnotation.elementType?.name === parentObjectAliasName
78
+ );
79
+ }
80
+
51
81
  function getAreEnumMembersInteger(members: NativeModuleEnumMembers): boolean {
52
82
  return !members.some(m => `${m.value}`.includes('.'));
53
83
  }
@@ -56,4 +86,6 @@ module.exports = {
56
86
  createAliasResolver,
57
87
  getModules,
58
88
  getAreEnumMembersInteger,
89
+ isDirectRecursiveMember,
90
+ isArrayRecursiveMember,
59
91
  };