@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
@@ -10,9 +10,9 @@
10
10
 
11
11
  'use strict';
12
12
 
13
- const path = require('path');
14
13
  const {FlowParser} = require('../../parsers/flow/parser');
15
14
  const {TypeScriptParser} = require('../../parsers/typescript/parser');
15
+ const path = require('path');
16
16
 
17
17
  const flowParser = new FlowParser();
18
18
  const typescriptParser = new TypeScriptParser();
@@ -14,6 +14,7 @@ export type ViewGeneratorFunction = (libraryName: string, schema: SchemaType) =>
14
14
 
15
15
  type LibraryGeneratorNames =
16
16
  | 'generateComponentDescriptorH'
17
+ | 'generateComponentDescriptorCpp'
17
18
  | 'generateComponentHObjCpp'
18
19
  | 'generateEventEmitterCpp'
19
20
  | 'generateEventEmitterH'
@@ -15,33 +15,35 @@ TODO:
15
15
 
16
16
  - ViewConfigs should spread in View's valid attributes
17
17
  */
18
- const fs = require('fs');
18
+ const schemaValidator = require('../SchemaValidator.js');
19
+ const generateComponentDescriptorCpp = require('./components/GenerateComponentDescriptorCpp.js');
19
20
  const generateComponentDescriptorH = require('./components/GenerateComponentDescriptorH.js');
20
21
  const generateComponentHObjCpp = require('./components/GenerateComponentHObjCpp.js');
21
22
  const generateEventEmitterCpp = require('./components/GenerateEventEmitterCpp.js');
22
23
  const generateEventEmitterH = require('./components/GenerateEventEmitterH.js');
23
24
  const generatePropsCpp = require('./components/GeneratePropsCpp.js');
24
25
  const generatePropsH = require('./components/GeneratePropsH.js');
26
+ const generatePropsJavaDelegate = require('./components/GeneratePropsJavaDelegate.js');
27
+ const generatePropsJavaInterface = require('./components/GeneratePropsJavaInterface.js');
28
+ const generateShadowNodeCpp = require('./components/GenerateShadowNodeCpp.js');
29
+ const generateShadowNodeH = require('./components/GenerateShadowNodeH.js');
25
30
  const generateStateCpp = require('./components/GenerateStateCpp.js');
26
31
  const generateStateH = require('./components/GenerateStateH.js');
27
- const generateModuleH = require('./modules/GenerateModuleH.js');
32
+ const generateTests = require('./components/GenerateTests.js');
33
+ const generateThirdPartyFabricComponentsProviderH = require('./components/GenerateThirdPartyFabricComponentsProviderH.js');
34
+ const generateThirdPartyFabricComponentsProviderObjCpp = require('./components/GenerateThirdPartyFabricComponentsProviderObjCpp.js');
35
+ const generateViewConfigJs = require('./components/GenerateViewConfigJs.js');
28
36
  const generateModuleCpp = require('./modules/GenerateModuleCpp.js');
29
- const generateModuleObjCpp = require('./modules/GenerateModuleObjCpp');
37
+ const generateModuleH = require('./modules/GenerateModuleH.js');
30
38
  const generateModuleJavaSpec = require('./modules/GenerateModuleJavaSpec.js');
31
39
  const generateModuleJniCpp = require('./modules/GenerateModuleJniCpp.js');
32
40
  const generateModuleJniH = require('./modules/GenerateModuleJniH.js');
33
- const generatePropsJavaInterface = require('./components/GeneratePropsJavaInterface.js');
34
- const generatePropsJavaDelegate = require('./components/GeneratePropsJavaDelegate.js');
35
- const generateTests = require('./components/GenerateTests.js');
36
- const generateShadowNodeCpp = require('./components/GenerateShadowNodeCpp.js');
37
- const generateShadowNodeH = require('./components/GenerateShadowNodeH.js');
38
- const generateThirdPartyFabricComponentsProviderObjCpp = require('./components/GenerateThirdPartyFabricComponentsProviderObjCpp.js');
39
- const generateThirdPartyFabricComponentsProviderH = require('./components/GenerateThirdPartyFabricComponentsProviderH.js');
40
- const generateViewConfigJs = require('./components/GenerateViewConfigJs.js');
41
+ const generateModuleObjCpp = require('./modules/GenerateModuleObjCpp');
42
+ const fs = require('fs');
41
43
  const path = require('path');
42
- const schemaValidator = require('../SchemaValidator.js');
43
44
  const ALL_GENERATORS = {
44
45
  generateComponentDescriptorH: generateComponentDescriptorH.generate,
46
+ generateComponentDescriptorCpp: generateComponentDescriptorCpp.generate,
45
47
  generateComponentHObjCpp: generateComponentHObjCpp.generate,
46
48
  generateEventEmitterCpp: generateEventEmitterCpp.generate,
47
49
  generateEventEmitterH: generateEventEmitterH.generate,
@@ -81,6 +83,7 @@ const LIBRARY_GENERATORS = {
81
83
  componentsAndroid: [
82
84
  // JNI/C++ files
83
85
  generateComponentDescriptorH.generate,
86
+ generateComponentDescriptorCpp.generate,
84
87
  generateEventEmitterCpp.generate,
85
88
  generateEventEmitterH.generate,
86
89
  generatePropsCpp.generate,
@@ -95,6 +98,7 @@ const LIBRARY_GENERATORS = {
95
98
  ],
96
99
  componentsIOS: [
97
100
  generateComponentDescriptorH.generate,
101
+ generateComponentDescriptorCpp.generate,
98
102
  generateEventEmitterCpp.generate,
99
103
  generateEventEmitterH.generate,
100
104
  generateComponentHObjCpp.generate,
@@ -166,14 +170,28 @@ module.exports = {
166
170
  libraryGenerators: LIBRARY_GENERATORS,
167
171
  schemaGenerators: SCHEMAS_GENERATORS,
168
172
  generate(
169
- {libraryName, schema, outputDirectory, packageName, assumeNonnull},
173
+ {
174
+ libraryName,
175
+ schema,
176
+ outputDirectory,
177
+ packageName,
178
+ assumeNonnull,
179
+ useLocalIncludePaths,
180
+ },
170
181
  {generators, test},
171
182
  ) {
172
183
  schemaValidator.validate(schema);
184
+ const defaultHeaderPrefix = 'react/renderer/components';
185
+ const headerPrefix =
186
+ useLocalIncludePaths === true
187
+ ? ''
188
+ : `${defaultHeaderPrefix}/${libraryName}/`;
173
189
  function composePath(intermediate) {
174
190
  return path.join(outputDirectory, intermediate, libraryName);
175
191
  }
176
- const componentIOSOutput = composePath('react/renderer/components/');
192
+ const componentIOSOutput = composePath(
193
+ useLocalIncludePaths === true ? '' : defaultHeaderPrefix,
194
+ );
177
195
  const modulesIOSOutput = composePath('./');
178
196
  const outputFoldersForGenerators = {
179
197
  componentsIOS: componentIOSOutput,
@@ -191,33 +209,42 @@ module.exports = {
191
209
  const generatedFiles = [];
192
210
  for (const name of generators) {
193
211
  for (const generator of LIBRARY_GENERATORS[name]) {
194
- generator(libraryName, schema, packageName, assumeNonnull).forEach(
195
- (contents, fileName) => {
196
- generatedFiles.push({
197
- name: fileName,
198
- content: contents,
199
- outputDir: outputFoldersForGenerators[name],
200
- });
201
- },
202
- );
212
+ generator(
213
+ libraryName,
214
+ schema,
215
+ packageName,
216
+ assumeNonnull,
217
+ headerPrefix,
218
+ ).forEach((contents, fileName) => {
219
+ generatedFiles.push({
220
+ name: fileName,
221
+ content: contents,
222
+ outputDir: outputFoldersForGenerators[name],
223
+ });
224
+ });
203
225
  }
204
226
  }
205
227
  return checkOrWriteFiles(generatedFiles, test);
206
228
  },
207
- generateFromSchemas({schemas, outputDirectory}, {generators, test}) {
229
+ generateFromSchemas(
230
+ {schemas, outputDirectory, supportedApplePlatforms},
231
+ {generators, test},
232
+ ) {
208
233
  Object.keys(schemas).forEach(libraryName =>
209
234
  schemaValidator.validate(schemas[libraryName]),
210
235
  );
211
236
  const generatedFiles = [];
212
237
  for (const name of generators) {
213
238
  for (const generator of SCHEMAS_GENERATORS[name]) {
214
- generator(schemas).forEach((contents, fileName) => {
215
- generatedFiles.push({
216
- name: fileName,
217
- content: contents,
218
- outputDir: outputDirectory,
219
- });
220
- });
239
+ generator(schemas, supportedApplePlatforms).forEach(
240
+ (contents, fileName) => {
241
+ generatedFiles.push({
242
+ name: fileName,
243
+ content: contents,
244
+ outputDir: outputDirectory,
245
+ });
246
+ },
247
+ );
221
248
  }
222
249
  }
223
250
  return checkOrWriteFiles(generatedFiles, test);
@@ -16,34 +16,38 @@ TODO:
16
16
  - ViewConfigs should spread in View's valid attributes
17
17
  */
18
18
 
19
- const fs = require('fs');
19
+ import type {SchemaType} from '../CodegenSchema';
20
+
21
+ const schemaValidator = require('../SchemaValidator.js');
22
+ const generateComponentDescriptorCpp = require('./components/GenerateComponentDescriptorCpp.js');
20
23
  const generateComponentDescriptorH = require('./components/GenerateComponentDescriptorH.js');
21
24
  const generateComponentHObjCpp = require('./components/GenerateComponentHObjCpp.js');
22
25
  const generateEventEmitterCpp = require('./components/GenerateEventEmitterCpp.js');
23
26
  const generateEventEmitterH = require('./components/GenerateEventEmitterH.js');
24
27
  const generatePropsCpp = require('./components/GeneratePropsCpp.js');
25
28
  const generatePropsH = require('./components/GeneratePropsH.js');
29
+ const generatePropsJavaDelegate = require('./components/GeneratePropsJavaDelegate.js');
30
+ const generatePropsJavaInterface = require('./components/GeneratePropsJavaInterface.js');
31
+ const generateShadowNodeCpp = require('./components/GenerateShadowNodeCpp.js');
32
+ const generateShadowNodeH = require('./components/GenerateShadowNodeH.js');
26
33
  const generateStateCpp = require('./components/GenerateStateCpp.js');
27
34
  const generateStateH = require('./components/GenerateStateH.js');
28
- const generateModuleH = require('./modules/GenerateModuleH.js');
35
+ const generateTests = require('./components/GenerateTests.js');
36
+ const generateThirdPartyFabricComponentsProviderH = require('./components/GenerateThirdPartyFabricComponentsProviderH.js');
37
+ const generateThirdPartyFabricComponentsProviderObjCpp = require('./components/GenerateThirdPartyFabricComponentsProviderObjCpp.js');
38
+ const generateViewConfigJs = require('./components/GenerateViewConfigJs.js');
29
39
  const generateModuleCpp = require('./modules/GenerateModuleCpp.js');
30
- const generateModuleObjCpp = require('./modules/GenerateModuleObjCpp');
40
+ const generateModuleH = require('./modules/GenerateModuleH.js');
31
41
  const generateModuleJavaSpec = require('./modules/GenerateModuleJavaSpec.js');
32
42
  const generateModuleJniCpp = require('./modules/GenerateModuleJniCpp.js');
33
43
  const generateModuleJniH = require('./modules/GenerateModuleJniH.js');
34
- const generatePropsJavaInterface = require('./components/GeneratePropsJavaInterface.js');
35
- const generatePropsJavaDelegate = require('./components/GeneratePropsJavaDelegate.js');
36
- const generateTests = require('./components/GenerateTests.js');
37
- const generateShadowNodeCpp = require('./components/GenerateShadowNodeCpp.js');
38
- const generateShadowNodeH = require('./components/GenerateShadowNodeH.js');
39
- const generateThirdPartyFabricComponentsProviderObjCpp = require('./components/GenerateThirdPartyFabricComponentsProviderObjCpp.js');
40
- const generateThirdPartyFabricComponentsProviderH = require('./components/GenerateThirdPartyFabricComponentsProviderH.js');
41
- const generateViewConfigJs = require('./components/GenerateViewConfigJs.js');
44
+ const generateModuleObjCpp = require('./modules/GenerateModuleObjCpp');
45
+ const fs = require('fs');
42
46
  const path = require('path');
43
- const schemaValidator = require('../SchemaValidator.js');
44
47
 
45
48
  const ALL_GENERATORS = {
46
49
  generateComponentDescriptorH: generateComponentDescriptorH.generate,
50
+ generateComponentDescriptorCpp: generateComponentDescriptorCpp.generate,
47
51
  generateComponentHObjCpp: generateComponentHObjCpp.generate,
48
52
  generateEventEmitterCpp: generateEventEmitterCpp.generate,
49
53
  generateEventEmitterH: generateEventEmitterH.generate,
@@ -69,19 +73,19 @@ const ALL_GENERATORS = {
69
73
  generateViewConfigJs: generateViewConfigJs.generate,
70
74
  };
71
75
 
72
- import type {SchemaType} from '../CodegenSchema';
73
-
74
76
  type LibraryOptions = $ReadOnly<{
75
77
  libraryName: string,
76
78
  schema: SchemaType,
77
79
  outputDirectory: string,
78
80
  packageName?: string, // Some platforms have a notion of package, which should be configurable.
79
81
  assumeNonnull: boolean,
82
+ useLocalIncludePaths?: boolean,
80
83
  }>;
81
84
 
82
85
  type SchemasOptions = $ReadOnly<{
83
86
  schemas: {[string]: SchemaType},
84
87
  outputDirectory: string,
88
+ supportedApplePlatforms?: {[string]: {[string]: boolean}},
85
89
  }>;
86
90
 
87
91
  type LibraryGenerators =
@@ -124,6 +128,7 @@ const LIBRARY_GENERATORS = {
124
128
  componentsAndroid: [
125
129
  // JNI/C++ files
126
130
  generateComponentDescriptorH.generate,
131
+ generateComponentDescriptorCpp.generate,
127
132
  generateEventEmitterCpp.generate,
128
133
  generateEventEmitterH.generate,
129
134
  generatePropsCpp.generate,
@@ -138,6 +143,7 @@ const LIBRARY_GENERATORS = {
138
143
  ],
139
144
  componentsIOS: [
140
145
  generateComponentDescriptorH.generate,
146
+ generateComponentDescriptorCpp.generate,
141
147
  generateEventEmitterCpp.generate,
142
148
  generateEventEmitterH.generate,
143
149
  generateComponentHObjCpp.generate,
@@ -232,16 +238,24 @@ module.exports = {
232
238
  outputDirectory,
233
239
  packageName,
234
240
  assumeNonnull,
241
+ useLocalIncludePaths,
235
242
  }: LibraryOptions,
236
243
  {generators, test}: LibraryConfig,
237
244
  ): boolean {
238
245
  schemaValidator.validate(schema);
239
246
 
247
+ const defaultHeaderPrefix = 'react/renderer/components';
248
+ const headerPrefix =
249
+ useLocalIncludePaths === true
250
+ ? ''
251
+ : `${defaultHeaderPrefix}/${libraryName}/`;
240
252
  function composePath(intermediate: string) {
241
253
  return path.join(outputDirectory, intermediate, libraryName);
242
254
  }
243
255
 
244
- const componentIOSOutput = composePath('react/renderer/components/');
256
+ const componentIOSOutput = composePath(
257
+ useLocalIncludePaths === true ? '' : defaultHeaderPrefix,
258
+ );
245
259
  const modulesIOSOutput = composePath('./');
246
260
 
247
261
  const outputFoldersForGenerators = {
@@ -262,21 +276,25 @@ module.exports = {
262
276
 
263
277
  for (const name of generators) {
264
278
  for (const generator of LIBRARY_GENERATORS[name]) {
265
- generator(libraryName, schema, packageName, assumeNonnull).forEach(
266
- (contents: string, fileName: string) => {
267
- generatedFiles.push({
268
- name: fileName,
269
- content: contents,
270
- outputDir: outputFoldersForGenerators[name],
271
- });
272
- },
273
- );
279
+ generator(
280
+ libraryName,
281
+ schema,
282
+ packageName,
283
+ assumeNonnull,
284
+ headerPrefix,
285
+ ).forEach((contents: string, fileName: string) => {
286
+ generatedFiles.push({
287
+ name: fileName,
288
+ content: contents,
289
+ outputDir: outputFoldersForGenerators[name],
290
+ });
291
+ });
274
292
  }
275
293
  }
276
294
  return checkOrWriteFiles(generatedFiles, test);
277
295
  },
278
296
  generateFromSchemas(
279
- {schemas, outputDirectory}: SchemasOptions,
297
+ {schemas, outputDirectory, supportedApplePlatforms}: SchemasOptions,
280
298
  {generators, test}: SchemasConfig,
281
299
  ): boolean {
282
300
  Object.keys(schemas).forEach(libraryName =>
@@ -287,13 +305,15 @@ module.exports = {
287
305
 
288
306
  for (const name of generators) {
289
307
  for (const generator of SCHEMAS_GENERATORS[name]) {
290
- generator(schemas).forEach((contents: string, fileName: string) => {
291
- generatedFiles.push({
292
- name: fileName,
293
- content: contents,
294
- outputDir: outputDirectory,
295
- });
296
- });
308
+ generator(schemas, supportedApplePlatforms).forEach(
309
+ (contents: string, fileName: string) => {
310
+ generatedFiles.push({
311
+ name: fileName,
312
+ content: contents,
313
+ outputDir: outputDirectory,
314
+ });
315
+ },
316
+ );
297
317
  }
298
318
  }
299
319
  return checkOrWriteFiles(generatedFiles, test);
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
+ *
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ *
7
+ *
8
+ * @format
9
+ * @oncall react_native
10
+ */
11
+
12
+ function wrapOptional(type, isRequired) {
13
+ return isRequired ? type : `std::optional<${type}>`;
14
+ }
15
+ module.exports = {
16
+ wrapOptional,
17
+ };
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
+ *
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ *
7
+ * @flow strict
8
+ * @format
9
+ * @oncall react_native
10
+ */
11
+
12
+ function wrapOptional(type: string, isRequired: boolean): string {
13
+ return isRequired ? type : `std::optional<${type}>`;
14
+ }
15
+
16
+ module.exports = {
17
+ wrapOptional,
18
+ };
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
+ *
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ *
7
+ *
8
+ * @format
9
+ * @oncall react_native
10
+ */
11
+
12
+ const objectTypeForPrimitiveType = {
13
+ boolean: 'Boolean',
14
+ double: 'Double',
15
+ float: 'Float',
16
+ int: 'Integer',
17
+ };
18
+ function wrapOptional(type, isRequired) {
19
+ var _objectTypeForPrimiti;
20
+ return isRequired
21
+ ? type
22
+ : `@Nullable ${
23
+ (_objectTypeForPrimiti = objectTypeForPrimitiveType[type]) !== null &&
24
+ _objectTypeForPrimiti !== void 0
25
+ ? _objectTypeForPrimiti
26
+ : type
27
+ }`;
28
+ }
29
+ module.exports = {
30
+ wrapOptional,
31
+ };
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
+ *
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ *
7
+ * @flow strict
8
+ * @format
9
+ * @oncall react_native
10
+ */
11
+
12
+ const objectTypeForPrimitiveType = {
13
+ boolean: 'Boolean',
14
+ double: 'Double',
15
+ float: 'Float',
16
+ int: 'Integer',
17
+ };
18
+
19
+ function wrapOptional(type: string, isRequired: boolean): string {
20
+ return isRequired
21
+ ? type
22
+ : `@Nullable ${objectTypeForPrimitiveType[type] ?? type}`;
23
+ }
24
+
25
+ module.exports = {
26
+ wrapOptional,
27
+ };
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
+ *
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ *
7
+ *
8
+ * @format
9
+ * @oncall react_native
10
+ */
11
+
12
+ function wrapOptional(type, isRequired) {
13
+ return isRequired ? type : `${type} _Nullable`;
14
+ }
15
+ module.exports = {
16
+ wrapOptional,
17
+ };
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
+ *
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ *
7
+ * @flow strict
8
+ * @format
9
+ * @oncall react_native
10
+ */
11
+
12
+ function wrapOptional(type: string, isRequired: boolean): string {
13
+ return isRequired ? type : `${type} _Nullable`;
14
+ }
15
+
16
+ module.exports = {
17
+ wrapOptional,
18
+ };
@@ -10,13 +10,13 @@
10
10
 
11
11
  'use strict';
12
12
 
13
- const _require = require('./CppHelpers.js'),
14
- getCppTypeForAnnotation = _require.getCppTypeForAnnotation,
15
- getEnumMaskName = _require.getEnumMaskName,
16
- generateStructName = _require.generateStructName,
17
- getImports = _require.getImports;
18
- const _require2 = require('../Utils'),
19
- getEnumName = _require2.getEnumName;
13
+ const _require = require('../Utils'),
14
+ getEnumName = _require.getEnumName;
15
+ const _require2 = require('./CppHelpers.js'),
16
+ generateStructName = _require2.generateStructName,
17
+ getCppTypeForAnnotation = _require2.getCppTypeForAnnotation,
18
+ getEnumMaskName = _require2.getEnumMaskName,
19
+ getImports = _require2.getImports;
20
20
  function getNativeTypeFromAnnotation(componentName, prop, nameParts) {
21
21
  const typeAnnotation = prop.typeAnnotation;
22
22
  switch (typeAnnotation.type) {
@@ -11,26 +11,24 @@
11
11
  'use strict';
12
12
 
13
13
  import type {NamedShape, PropTypeAnnotation} from '../../CodegenSchema';
14
-
15
14
  import type {
16
- StringTypeAnnotation,
17
- ReservedPropTypeAnnotation,
18
- ObjectTypeAnnotation,
19
- Int32TypeAnnotation,
20
- FloatTypeAnnotation,
21
- DoubleTypeAnnotation,
22
15
  BooleanTypeAnnotation,
16
+ DoubleTypeAnnotation,
17
+ FloatTypeAnnotation,
18
+ Int32TypeAnnotation,
19
+ ObjectTypeAnnotation,
20
+ ReservedPropTypeAnnotation,
21
+ StringTypeAnnotation,
23
22
  } from '../../CodegenSchema';
24
23
 
24
+ const {getEnumName} = require('../Utils');
25
25
  const {
26
+ generateStructName,
26
27
  getCppTypeForAnnotation,
27
28
  getEnumMaskName,
28
- generateStructName,
29
29
  getImports,
30
30
  } = require('./CppHelpers.js');
31
31
 
32
- const {getEnumName} = require('../Utils');
33
-
34
32
  function getNativeTypeFromAnnotation(
35
33
  componentName: string,
36
34
  prop:
@@ -0,0 +1,55 @@
1
+ /**
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
+ *
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ *
7
+ *
8
+ * @format
9
+ */
10
+
11
+ const APPLE_PLATFORMS_MACRO_MAP = {
12
+ ios: 'TARGET_OS_IOS',
13
+ macos: 'TARGET_OS_OSX',
14
+ tvos: 'TARGET_OS_TV',
15
+ visionos: 'TARGET_OS_VISION',
16
+ };
17
+
18
+ /**
19
+ * Adds compiler macros to the file template to exclude unsupported platforms.
20
+ */
21
+ function generateSupportedApplePlatformsMacro(
22
+ fileTemplate,
23
+ supportedPlatformsMap,
24
+ ) {
25
+ if (!supportedPlatformsMap) {
26
+ return fileTemplate;
27
+ }
28
+
29
+ // According to Podspec Syntax Reference, when `platform` or `deployment_target` is not specified, it defaults to all platforms.
30
+ // https://guides.cocoapods.org/syntax/podspec.html#platform
31
+ const everyPlatformIsUnsupported = Object.keys(supportedPlatformsMap).every(
32
+ platform => supportedPlatformsMap[platform] === false,
33
+ );
34
+ if (everyPlatformIsUnsupported) {
35
+ return fileTemplate;
36
+ }
37
+ const compilerMacroString = Object.keys(supportedPlatformsMap)
38
+ .reduce((acc, platform) => {
39
+ if (!supportedPlatformsMap[platform]) {
40
+ return [...acc, `!${APPLE_PLATFORMS_MACRO_MAP[platform]}`];
41
+ }
42
+ return acc;
43
+ }, [])
44
+ .join(' && ');
45
+ if (!compilerMacroString) {
46
+ return fileTemplate;
47
+ }
48
+ return `#if ${compilerMacroString}
49
+ ${fileTemplate}
50
+ #endif
51
+ `;
52
+ }
53
+ module.exports = {
54
+ generateSupportedApplePlatformsMacro,
55
+ };
@@ -0,0 +1,60 @@
1
+ /**
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
+ *
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ *
7
+ * @flow strict
8
+ * @format
9
+ */
10
+
11
+ const APPLE_PLATFORMS_MACRO_MAP = {
12
+ ios: 'TARGET_OS_IOS',
13
+ macos: 'TARGET_OS_OSX',
14
+ tvos: 'TARGET_OS_TV',
15
+ visionos: 'TARGET_OS_VISION',
16
+ };
17
+
18
+ /**
19
+ * Adds compiler macros to the file template to exclude unsupported platforms.
20
+ */
21
+ function generateSupportedApplePlatformsMacro(
22
+ fileTemplate: string,
23
+ supportedPlatformsMap: ?{[string]: boolean},
24
+ ): string {
25
+ if (!supportedPlatformsMap) {
26
+ return fileTemplate;
27
+ }
28
+
29
+ // According to Podspec Syntax Reference, when `platform` or `deployment_target` is not specified, it defaults to all platforms.
30
+ // https://guides.cocoapods.org/syntax/podspec.html#platform
31
+ const everyPlatformIsUnsupported = Object.keys(supportedPlatformsMap).every(
32
+ platform => supportedPlatformsMap[platform] === false,
33
+ );
34
+
35
+ if (everyPlatformIsUnsupported) {
36
+ return fileTemplate;
37
+ }
38
+
39
+ const compilerMacroString = Object.keys(supportedPlatformsMap)
40
+ .reduce((acc: string[], platform) => {
41
+ if (!supportedPlatformsMap[platform]) {
42
+ return [...acc, `!${APPLE_PLATFORMS_MACRO_MAP[platform]}`];
43
+ }
44
+ return acc;
45
+ }, [])
46
+ .join(' && ');
47
+
48
+ if (!compilerMacroString) {
49
+ return fileTemplate;
50
+ }
51
+
52
+ return `#if ${compilerMacroString}
53
+ ${fileTemplate}
54
+ #endif
55
+ `;
56
+ }
57
+
58
+ module.exports = {
59
+ generateSupportedApplePlatformsMacro,
60
+ };
@@ -208,6 +208,12 @@ function convertDefaultTypeToString(componentName, prop) {
208
208
  throw new Error(`Unsupported type annotation: ${typeAnnotation.type}`);
209
209
  }
210
210
  }
211
+ const IncludeTemplate = ({headerPrefix, file}) => {
212
+ if (headerPrefix === '') {
213
+ return `#include "${file}"`;
214
+ }
215
+ return `#include <${headerPrefix}${file}>`;
216
+ };
211
217
  module.exports = {
212
218
  convertDefaultTypeToString,
213
219
  getCppArrayTypeForAnnotation,
@@ -217,4 +223,5 @@ module.exports = {
217
223
  toIntEnumValueName,
218
224
  generateStructName,
219
225
  generateEventStructName,
226
+ IncludeTemplate,
220
227
  };