@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,18 +11,19 @@
11
11
  'use strict';
12
12
 
13
13
  import type {
14
- Nullable,
15
14
  NamedShape,
16
- SchemaType,
17
- NativeModulePropertyShape,
18
- NativeModuleReturnTypeAnnotation,
19
15
  NativeModuleFunctionTypeAnnotation,
20
16
  NativeModuleParamTypeAnnotation,
17
+ NativeModulePropertyShape,
18
+ NativeModuleReturnTypeAnnotation,
19
+ Nullable,
20
+ SchemaType,
21
21
  } from '../../CodegenSchema';
22
-
23
22
  import type {AliasResolver} from './Utils';
24
- const {createAliasResolver, getModules} = require('./Utils');
23
+
25
24
  const {unwrapNullable} = require('../../parsers/parsers-commons');
25
+ const {wrapOptional} = require('../TypeUtils/Java');
26
+ const {createAliasResolver, getModules} = require('./Utils');
26
27
 
27
28
  type FilesOutput = Map<string, string>;
28
29
 
@@ -111,13 +112,8 @@ function translateFunctionParamToJavaType(
111
112
  const [typeAnnotation, nullable] =
112
113
  unwrapNullable<NativeModuleParamTypeAnnotation>(nullableTypeAnnotation);
113
114
  const isRequired = !optional && !nullable;
114
-
115
- function wrapNullable(javaType: string, nullableType?: string) {
116
- if (!isRequired) {
117
- imports.add('javax.annotation.Nullable');
118
- return `@Nullable ${nullableType ?? javaType}`;
119
- }
120
- return javaType;
115
+ if (!isRequired) {
116
+ imports.add('javax.annotation.Nullable');
121
117
  }
122
118
 
123
119
  // FIXME: support class alias for args
@@ -130,41 +126,41 @@ function translateFunctionParamToJavaType(
130
126
  case 'ReservedTypeAnnotation':
131
127
  switch (realTypeAnnotation.name) {
132
128
  case 'RootTag':
133
- return wrapNullable('double', 'Double');
129
+ return wrapOptional('double', isRequired);
134
130
  default:
135
131
  (realTypeAnnotation.name: empty);
136
132
  throw new Error(createErrorMessage(realTypeAnnotation.name));
137
133
  }
138
134
  case 'StringTypeAnnotation':
139
- return wrapNullable('String');
135
+ return wrapOptional('String', isRequired);
140
136
  case 'NumberTypeAnnotation':
141
- return wrapNullable('double', 'Double');
137
+ return wrapOptional('double', isRequired);
142
138
  case 'FloatTypeAnnotation':
143
- return wrapNullable('double', 'Double');
139
+ return wrapOptional('float', isRequired);
144
140
  case 'DoubleTypeAnnotation':
145
- return wrapNullable('double', 'Double');
141
+ return wrapOptional('double', isRequired);
146
142
  case 'Int32TypeAnnotation':
147
- return wrapNullable('double', 'Double');
143
+ return wrapOptional('int', isRequired);
148
144
  case 'BooleanTypeAnnotation':
149
- return wrapNullable('boolean', 'Boolean');
145
+ return wrapOptional('boolean', isRequired);
150
146
  case 'EnumDeclaration':
151
147
  switch (realTypeAnnotation.memberType) {
152
148
  case 'NumberTypeAnnotation':
153
- return wrapNullable('double', 'Double');
149
+ return wrapOptional('double', isRequired);
154
150
  case 'StringTypeAnnotation':
155
- return wrapNullable('String');
151
+ return wrapOptional('String', isRequired);
156
152
  default:
157
153
  throw new Error(createErrorMessage(realTypeAnnotation.type));
158
154
  }
159
155
  case 'UnionTypeAnnotation':
160
156
  switch (typeAnnotation.memberType) {
161
157
  case 'NumberTypeAnnotation':
162
- return wrapNullable('double', 'Double');
158
+ return wrapOptional('double', isRequired);
163
159
  case 'ObjectTypeAnnotation':
164
160
  imports.add('com.facebook.react.bridge.ReadableMap');
165
- return wrapNullable('ReadableMap');
161
+ return wrapOptional('ReadableMap', isRequired);
166
162
  case 'StringTypeAnnotation':
167
- return wrapNullable('String');
163
+ return wrapOptional('String', isRequired);
168
164
  default:
169
165
  throw new Error(
170
166
  `Unsupported union member returning value, found: ${realTypeAnnotation.memberType}"`,
@@ -172,17 +168,17 @@ function translateFunctionParamToJavaType(
172
168
  }
173
169
  case 'ObjectTypeAnnotation':
174
170
  imports.add('com.facebook.react.bridge.ReadableMap');
175
- return wrapNullable('ReadableMap');
171
+ return wrapOptional('ReadableMap', isRequired);
176
172
  case 'GenericObjectTypeAnnotation':
177
173
  // Treat this the same as ObjectTypeAnnotation for now.
178
174
  imports.add('com.facebook.react.bridge.ReadableMap');
179
- return wrapNullable('ReadableMap');
175
+ return wrapOptional('ReadableMap', isRequired);
180
176
  case 'ArrayTypeAnnotation':
181
177
  imports.add('com.facebook.react.bridge.ReadableArray');
182
- return wrapNullable('ReadableArray');
178
+ return wrapOptional('ReadableArray', isRequired);
183
179
  case 'FunctionTypeAnnotation':
184
180
  imports.add('com.facebook.react.bridge.Callback');
185
- return wrapNullable('Callback');
181
+ return wrapOptional('Callback', isRequired);
186
182
  default:
187
183
  (realTypeAnnotation.type: 'MixedTypeAnnotation');
188
184
  throw new Error(createErrorMessage(realTypeAnnotation.type));
@@ -200,14 +196,12 @@ function translateFunctionReturnTypeToJavaType(
200
196
  nullableReturnTypeAnnotation,
201
197
  );
202
198
 
203
- function wrapNullable(javaType: string, nullableType?: string) {
204
- if (nullable) {
205
- imports.add('javax.annotation.Nullable');
206
- return `@Nullable ${nullableType ?? javaType}`;
207
- }
208
- return javaType;
199
+ if (nullable) {
200
+ imports.add('javax.annotation.Nullable');
209
201
  }
210
202
 
203
+ const isRequired = !nullable;
204
+
211
205
  // FIXME: support class alias for args
212
206
  let realTypeAnnotation = returnTypeAnnotation;
213
207
  if (realTypeAnnotation.type === 'TypeAliasTypeAnnotation') {
@@ -218,7 +212,7 @@ function translateFunctionReturnTypeToJavaType(
218
212
  case 'ReservedTypeAnnotation':
219
213
  switch (realTypeAnnotation.name) {
220
214
  case 'RootTag':
221
- return wrapNullable('double', 'Double');
215
+ return wrapOptional('double', isRequired);
222
216
  default:
223
217
  (realTypeAnnotation.name: empty);
224
218
  throw new Error(createErrorMessage(realTypeAnnotation.name));
@@ -228,35 +222,35 @@ function translateFunctionReturnTypeToJavaType(
228
222
  case 'PromiseTypeAnnotation':
229
223
  return 'void';
230
224
  case 'StringTypeAnnotation':
231
- return wrapNullable('String');
225
+ return wrapOptional('String', isRequired);
232
226
  case 'NumberTypeAnnotation':
233
- return wrapNullable('double', 'Double');
227
+ return wrapOptional('double', isRequired);
234
228
  case 'FloatTypeAnnotation':
235
- return wrapNullable('double', 'Double');
229
+ return wrapOptional('double', isRequired);
236
230
  case 'DoubleTypeAnnotation':
237
- return wrapNullable('double', 'Double');
231
+ return wrapOptional('double', isRequired);
238
232
  case 'Int32TypeAnnotation':
239
- return wrapNullable('double', 'Double');
233
+ return wrapOptional('double', isRequired);
240
234
  case 'BooleanTypeAnnotation':
241
- return wrapNullable('boolean', 'Boolean');
235
+ return wrapOptional('boolean', isRequired);
242
236
  case 'EnumDeclaration':
243
237
  switch (realTypeAnnotation.memberType) {
244
238
  case 'NumberTypeAnnotation':
245
- return wrapNullable('double', 'Double');
239
+ return wrapOptional('double', isRequired);
246
240
  case 'StringTypeAnnotation':
247
- return wrapNullable('String');
241
+ return wrapOptional('String', isRequired);
248
242
  default:
249
243
  throw new Error(createErrorMessage(realTypeAnnotation.type));
250
244
  }
251
245
  case 'UnionTypeAnnotation':
252
246
  switch (realTypeAnnotation.memberType) {
253
247
  case 'NumberTypeAnnotation':
254
- return wrapNullable('double', 'Double');
248
+ return wrapOptional('double', isRequired);
255
249
  case 'ObjectTypeAnnotation':
256
250
  imports.add('com.facebook.react.bridge.WritableMap');
257
- return wrapNullable('WritableMap');
251
+ return wrapOptional('WritableMap', isRequired);
258
252
  case 'StringTypeAnnotation':
259
- return wrapNullable('String');
253
+ return wrapOptional('String', isRequired);
260
254
  default:
261
255
  throw new Error(
262
256
  `Unsupported union member returning value, found: ${realTypeAnnotation.memberType}"`,
@@ -264,13 +258,13 @@ function translateFunctionReturnTypeToJavaType(
264
258
  }
265
259
  case 'ObjectTypeAnnotation':
266
260
  imports.add('com.facebook.react.bridge.WritableMap');
267
- return wrapNullable('WritableMap');
261
+ return wrapOptional('WritableMap', isRequired);
268
262
  case 'GenericObjectTypeAnnotation':
269
263
  imports.add('com.facebook.react.bridge.WritableMap');
270
- return wrapNullable('WritableMap');
264
+ return wrapOptional('WritableMap', isRequired);
271
265
  case 'ArrayTypeAnnotation':
272
266
  imports.add('com.facebook.react.bridge.WritableArray');
273
- return wrapNullable('WritableArray');
267
+ return wrapOptional('WritableArray', isRequired);
274
268
  default:
275
269
  (realTypeAnnotation.type: 'MixedTypeAnnotation');
276
270
  throw new Error(createErrorMessage(realTypeAnnotation.type));
@@ -441,6 +435,7 @@ module.exports = {
441
435
  schema: SchemaType,
442
436
  packageName?: string,
443
437
  assumeNonnull: boolean = false,
438
+ headerPrefix?: string,
444
439
  ): FilesOutput {
445
440
  const files = new Map<string, string>();
446
441
  const nativeModules = getModules(schema);
@@ -78,11 +78,11 @@ function _iterableToArrayLimit(arr, i) {
78
78
  function _arrayWithHoles(arr) {
79
79
  if (Array.isArray(arr)) return arr;
80
80
  }
81
- const _require = require('./Utils'),
82
- createAliasResolver = _require.createAliasResolver,
83
- getModules = _require.getModules;
84
- const _require2 = require('../../parsers/parsers-commons'),
85
- unwrapNullable = _require2.unwrapNullable;
81
+ const _require = require('../../parsers/parsers-commons'),
82
+ unwrapNullable = _require.unwrapNullable;
83
+ const _require2 = require('./Utils'),
84
+ createAliasResolver = _require2.createAliasResolver,
85
+ getModules = _require2.getModules;
86
86
  const HostFunctionTemplate = ({
87
87
  hasteModuleName,
88
88
  propertyName,
@@ -123,8 +123,7 @@ const FileTemplate = ({libraryName, include, modules, moduleLookups}) => {
123
123
 
124
124
  #include ${include}
125
125
 
126
- namespace facebook {
127
- namespace react {
126
+ namespace facebook::react {
128
127
 
129
128
  ${modules}
130
129
 
@@ -133,8 +132,7 @@ ${moduleLookups.map(ModuleLookupTemplate).join('\n')}
133
132
  return nullptr;
134
133
  }
135
134
 
136
- } // namespace react
137
- } // namespace facebook
135
+ } // namespace facebook::react
138
136
  `;
139
137
  };
140
138
  function translateReturnTypeToKind(nullableTypeAnnotation, resolveAlias) {
@@ -338,9 +336,9 @@ function translateReturnTypeToJniType(nullableTypeAnnotation, resolveAlias) {
338
336
  case 'DoubleTypeAnnotation':
339
337
  return nullable ? 'Ljava/lang/Double;' : 'D';
340
338
  case 'FloatTypeAnnotation':
341
- return nullable ? 'Ljava/lang/Double;' : 'D';
339
+ return nullable ? 'Ljava/lang/Float;' : 'F';
342
340
  case 'Int32TypeAnnotation':
343
- return nullable ? 'Ljava/lang/Double;' : 'D';
341
+ return nullable ? 'Ljava/lang/Integer;' : 'I';
344
342
  case 'PromiseTypeAnnotation':
345
343
  return 'Lcom/facebook/react/bridge/Promise;';
346
344
  case 'GenericObjectTypeAnnotation':
@@ -415,7 +413,13 @@ function translateMethodForImplementation(
415
413
  });
416
414
  }
417
415
  module.exports = {
418
- generate(libraryName, schema, packageName, assumeNonnull = false) {
416
+ generate(
417
+ libraryName,
418
+ schema,
419
+ packageName,
420
+ assumeNonnull = false,
421
+ headerPrefix,
422
+ ) {
419
423
  const nativeModules = getModules(schema);
420
424
  const modules = Object.keys(nativeModules)
421
425
  .filter(hasteModuleName => {
@@ -11,18 +11,18 @@
11
11
  'use strict';
12
12
 
13
13
  import type {
14
- Nullable,
15
14
  NamedShape,
16
- SchemaType,
15
+ NativeModuleFunctionTypeAnnotation,
16
+ NativeModuleParamTypeAnnotation,
17
17
  NativeModulePropertyShape,
18
18
  NativeModuleReturnTypeAnnotation,
19
- NativeModuleParamTypeAnnotation,
20
- NativeModuleFunctionTypeAnnotation,
19
+ Nullable,
20
+ SchemaType,
21
21
  } from '../../CodegenSchema';
22
-
23
22
  import type {AliasResolver} from './Utils';
24
- const {createAliasResolver, getModules} = require('./Utils');
23
+
25
24
  const {unwrapNullable} = require('../../parsers/parsers-commons');
25
+ const {createAliasResolver, getModules} = require('./Utils');
26
26
 
27
27
  type FilesOutput = Map<string, string>;
28
28
 
@@ -108,8 +108,7 @@ const FileTemplate = ({
108
108
 
109
109
  #include ${include}
110
110
 
111
- namespace facebook {
112
- namespace react {
111
+ namespace facebook::react {
113
112
 
114
113
  ${modules}
115
114
 
@@ -118,8 +117,7 @@ ${moduleLookups.map(ModuleLookupTemplate).join('\n')}
118
117
  return nullptr;
119
118
  }
120
119
 
121
- } // namespace react
122
- } // namespace facebook
120
+ } // namespace facebook::react
123
121
  `;
124
122
  };
125
123
 
@@ -336,9 +334,9 @@ function translateReturnTypeToJniType(
336
334
  case 'DoubleTypeAnnotation':
337
335
  return nullable ? 'Ljava/lang/Double;' : 'D';
338
336
  case 'FloatTypeAnnotation':
339
- return nullable ? 'Ljava/lang/Double;' : 'D';
337
+ return nullable ? 'Ljava/lang/Float;' : 'F';
340
338
  case 'Int32TypeAnnotation':
341
- return nullable ? 'Ljava/lang/Double;' : 'D';
339
+ return nullable ? 'Ljava/lang/Integer;' : 'I';
342
340
  case 'PromiseTypeAnnotation':
343
341
  return 'Lcom/facebook/react/bridge/Promise;';
344
342
  case 'GenericObjectTypeAnnotation':
@@ -424,6 +422,7 @@ module.exports = {
424
422
  schema: SchemaType,
425
423
  packageName?: string,
426
424
  assumeNonnull: boolean = false,
425
+ headerPrefix?: string,
427
426
  ): FilesOutput {
428
427
  const nativeModules = getModules(schema);
429
428
 
@@ -39,16 +39,14 @@ const HeaderFileTemplate = ({modules, libraryName}) => {
39
39
  #include <ReactCommon/TurboModule.h>
40
40
  #include <jsi/jsi.h>
41
41
 
42
- namespace facebook {
43
- namespace react {
42
+ namespace facebook::react {
44
43
 
45
44
  ${modules}
46
45
 
47
46
  JSI_EXPORT
48
47
  std::shared_ptr<TurboModule> ${libraryName}_ModuleProvider(const std::string &moduleName, const JavaTurboModule::InitParams &params);
49
48
 
50
- } // namespace react
51
- } // namespace facebook
49
+ } // namespace facebook::react
52
50
  `;
53
51
  };
54
52
 
@@ -81,10 +79,13 @@ target_link_libraries(
81
79
  ${libraryName !== 'rncore' ? 'react_codegen_rncore' : ''}
82
80
  react_debug
83
81
  react_nativemodule_core
82
+ react_render_componentregistry
84
83
  react_render_core
85
84
  react_render_debug
86
85
  react_render_graphics
87
86
  react_render_imagemanager
87
+ react_render_mapbuffer
88
+ react_utils
88
89
  rrc_image
89
90
  rrc_view
90
91
  turbomodulejsijni
@@ -103,7 +104,13 @@ target_compile_options(
103
104
  `;
104
105
  };
105
106
  module.exports = {
106
- generate(libraryName, schema, packageName, assumeNonnull = false) {
107
+ generate(
108
+ libraryName,
109
+ schema,
110
+ packageName,
111
+ assumeNonnull = false,
112
+ headerPrefix,
113
+ ) {
107
114
  const nativeModules = getModules(schema);
108
115
  const modules = Object.keys(nativeModules)
109
116
  .filter(hasteModuleName => {
@@ -12,10 +12,10 @@
12
12
 
13
13
  import type {SchemaType} from '../../CodegenSchema';
14
14
 
15
- type FilesOutput = Map<string, string>;
16
-
17
15
  const {getModules} = require('./Utils');
18
16
 
17
+ type FilesOutput = Map<string, string>;
18
+
19
19
  const ModuleClassDeclarationTemplate = ({
20
20
  hasteModuleName,
21
21
  }: $ReadOnly<{hasteModuleName: string}>) => {
@@ -49,16 +49,14 @@ const HeaderFileTemplate = ({
49
49
  #include <ReactCommon/TurboModule.h>
50
50
  #include <jsi/jsi.h>
51
51
 
52
- namespace facebook {
53
- namespace react {
52
+ namespace facebook::react {
54
53
 
55
54
  ${modules}
56
55
 
57
56
  JSI_EXPORT
58
57
  std::shared_ptr<TurboModule> ${libraryName}_ModuleProvider(const std::string &moduleName, const JavaTurboModule::InitParams &params);
59
58
 
60
- } // namespace react
61
- } // namespace facebook
59
+ } // namespace facebook::react
62
60
  `;
63
61
  };
64
62
 
@@ -93,10 +91,13 @@ target_link_libraries(
93
91
  ${libraryName !== 'rncore' ? 'react_codegen_rncore' : ''}
94
92
  react_debug
95
93
  react_nativemodule_core
94
+ react_render_componentregistry
96
95
  react_render_core
97
96
  react_render_debug
98
97
  react_render_graphics
99
98
  react_render_imagemanager
99
+ react_render_mapbuffer
100
+ react_utils
100
101
  rrc_image
101
102
  rrc_view
102
103
  turbomodulejsijni
@@ -121,6 +122,7 @@ module.exports = {
121
122
  schema: SchemaType,
122
123
  packageName?: string,
123
124
  assumeNonnull: boolean = false,
125
+ headerPrefix?: string,
124
126
  ): FilesOutput {
125
127
  const nativeModules = getModules(schema);
126
128
  const modules = Object.keys(nativeModules)
@@ -140,11 +140,11 @@ function _toPrimitive(input, hint) {
140
140
  }
141
141
  return (hint === 'string' ? String : Number)(input);
142
142
  }
143
- const _require = require('../../Utils'),
144
- capitalize = _require.capitalize;
145
- const _require2 = require('../../../parsers/parsers-commons'),
146
- unwrapNullable = _require2.unwrapNullable,
147
- wrapNullable = _require2.wrapNullable;
143
+ const _require = require('../../../parsers/parsers-commons'),
144
+ unwrapNullable = _require.unwrapNullable,
145
+ wrapNullable = _require.wrapNullable;
146
+ const _require2 = require('../../Utils'),
147
+ capitalize = _require2.capitalize;
148
148
  class StructCollector {
149
149
  constructor() {
150
150
  _defineProperty(this, '_structs', new Map());
@@ -11,29 +11,28 @@
11
11
  'use strict';
12
12
 
13
13
  import type {
14
- Nullable,
15
- NativeModuleObjectTypeAnnotation,
16
- NativeModuleStringTypeAnnotation,
17
- NativeModuleNumberTypeAnnotation,
18
- NativeModuleInt32TypeAnnotation,
19
- NativeModuleDoubleTypeAnnotation,
20
- NativeModuleFloatTypeAnnotation,
14
+ NativeModuleArrayTypeAnnotation,
15
+ NativeModuleBaseTypeAnnotation,
21
16
  NativeModuleBooleanTypeAnnotation,
17
+ NativeModuleDoubleTypeAnnotation,
22
18
  NativeModuleEnumDeclaration,
19
+ NativeModuleFloatTypeAnnotation,
23
20
  NativeModuleGenericObjectTypeAnnotation,
24
- ReservedTypeAnnotation,
21
+ NativeModuleInt32TypeAnnotation,
22
+ NativeModuleNumberTypeAnnotation,
23
+ NativeModuleObjectTypeAnnotation,
24
+ NativeModuleStringTypeAnnotation,
25
25
  NativeModuleTypeAliasTypeAnnotation,
26
- NativeModuleArrayTypeAnnotation,
27
- NativeModuleBaseTypeAnnotation,
26
+ Nullable,
27
+ ReservedTypeAnnotation,
28
28
  } from '../../../CodegenSchema';
29
-
30
29
  import type {AliasResolver} from '../Utils';
31
30
 
32
- const {capitalize} = require('../../Utils');
33
31
  const {
34
32
  unwrapNullable,
35
33
  wrapNullable,
36
34
  } = require('../../../parsers/parsers-commons');
35
+ const {capitalize} = require('../../Utils');
37
36
 
38
37
  type StructContext = 'CONSTANTS' | 'REGULAR';
39
38
 
@@ -78,13 +78,17 @@ function _iterableToArrayLimit(arr, i) {
78
78
  function _arrayWithHoles(arr) {
79
79
  if (Array.isArray(arr)) return arr;
80
80
  }
81
- const _require = require('../Utils'),
82
- getSafePropertyName = _require.getSafePropertyName,
83
- getNamespacedStructName = _require.getNamespacedStructName;
84
- const _require2 = require('../../../Utils'),
85
- capitalize = _require2.capitalize;
86
- const _require3 = require('../../../../parsers/parsers-commons'),
87
- unwrapNullable = _require3.unwrapNullable;
81
+ const _require = require('../../../../parsers/parsers-commons'),
82
+ unwrapNullable = _require.unwrapNullable;
83
+ const _require2 = require('../../../TypeUtils/Cxx'),
84
+ wrapCxxOptional = _require2.wrapOptional;
85
+ const _require3 = require('../../../TypeUtils/Objective-C'),
86
+ wrapObjCOptional = _require3.wrapOptional;
87
+ const _require4 = require('../../../Utils'),
88
+ capitalize = _require4.capitalize;
89
+ const _require5 = require('../Utils'),
90
+ getNamespacedStructName = _require5.getNamespacedStructName,
91
+ getSafePropertyName = _require5.getSafePropertyName;
88
92
  const StructTemplate = ({
89
93
  hasteModuleName,
90
94
  structName,
@@ -138,14 +142,11 @@ function toObjCType(
138
142
  typeAnnotation = _unwrapNullable2[0],
139
143
  nullable = _unwrapNullable2[1];
140
144
  const isRequired = !nullable && !isOptional;
141
- const wrapOptional = type => {
142
- return isRequired ? type : `std::optional<${type}>`;
143
- };
144
145
  switch (typeAnnotation.type) {
145
146
  case 'ReservedTypeAnnotation':
146
147
  switch (typeAnnotation.name) {
147
148
  case 'RootTag':
148
- return wrapOptional('double');
149
+ return wrapCxxOptional('double', isRequired);
149
150
  default:
150
151
  typeAnnotation.name;
151
152
  throw new Error(`Unknown prop type, found: ${typeAnnotation.name}"`);
@@ -153,19 +154,19 @@ function toObjCType(
153
154
  case 'StringTypeAnnotation':
154
155
  return 'NSString *';
155
156
  case 'NumberTypeAnnotation':
156
- return wrapOptional('double');
157
+ return wrapCxxOptional('double', isRequired);
157
158
  case 'FloatTypeAnnotation':
158
- return wrapOptional('double');
159
+ return wrapCxxOptional('double', isRequired);
159
160
  case 'Int32TypeAnnotation':
160
- return wrapOptional('double');
161
+ return wrapCxxOptional('double', isRequired);
161
162
  case 'DoubleTypeAnnotation':
162
- return wrapOptional('double');
163
+ return wrapCxxOptional('double', isRequired);
163
164
  case 'BooleanTypeAnnotation':
164
- return wrapOptional('bool');
165
+ return wrapCxxOptional('bool', isRequired);
165
166
  case 'EnumDeclaration':
166
167
  switch (typeAnnotation.memberType) {
167
168
  case 'NumberTypeAnnotation':
168
- return wrapOptional('double');
169
+ return wrapCxxOptional('double', isRequired);
169
170
  case 'StringTypeAnnotation':
170
171
  return 'NSString *';
171
172
  default:
@@ -174,16 +175,17 @@ function toObjCType(
174
175
  );
175
176
  }
176
177
  case 'GenericObjectTypeAnnotation':
177
- return isRequired ? 'id<NSObject> ' : 'id<NSObject> _Nullable ';
178
+ return wrapObjCOptional('id<NSObject>', isRequired);
178
179
  case 'ArrayTypeAnnotation':
179
180
  if (typeAnnotation.elementType == null) {
180
- return isRequired ? 'id<NSObject> ' : 'id<NSObject> _Nullable ';
181
+ return wrapObjCOptional('id<NSObject>', isRequired);
181
182
  }
182
- return wrapOptional(
183
+ return wrapCxxOptional(
183
184
  `std::vector<${toObjCType(
184
185
  hasteModuleName,
185
186
  typeAnnotation.elementType,
186
187
  )}>`,
188
+ isRequired,
187
189
  );
188
190
  case 'TypeAliasTypeAnnotation':
189
191
  const structName = capitalize(typeAnnotation.name);
@@ -191,7 +193,7 @@ function toObjCType(
191
193
  hasteModuleName,
192
194
  structName,
193
195
  );
194
- return wrapOptional(`${namespacedStructName}::Builder`);
196
+ return wrapCxxOptional(`${namespacedStructName}::Builder`, isRequired);
195
197
  default:
196
198
  typeAnnotation.type;
197
199
  throw new Error(