@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
@@ -256,6 +256,19 @@ function convertDefaultTypeToString(
256
256
  }
257
257
  }
258
258
 
259
+ const IncludeTemplate = ({
260
+ headerPrefix,
261
+ file,
262
+ }: {
263
+ headerPrefix: string,
264
+ file: string,
265
+ }): string => {
266
+ if (headerPrefix === '') {
267
+ return `#include "${file}"`;
268
+ }
269
+ return `#include <${headerPrefix}${file}>`;
270
+ };
271
+
259
272
  module.exports = {
260
273
  convertDefaultTypeToString,
261
274
  getCppArrayTypeForAnnotation,
@@ -265,4 +278,5 @@ module.exports = {
265
278
  toIntEnumValueName,
266
279
  generateStructName,
267
280
  generateEventStructName,
281
+ IncludeTemplate,
268
282
  };
@@ -0,0 +1,89 @@
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
+ 'use strict';
12
+
13
+ const _require = require('./CppHelpers'),
14
+ IncludeTemplate = _require.IncludeTemplate;
15
+
16
+ // File path -> contents
17
+
18
+ const FileTemplate = ({libraryName, componentRegistrations, headerPrefix}) => `
19
+ /**
20
+ * This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen).
21
+ *
22
+ * Do not edit this file as changes may cause incorrect behavior and will be lost
23
+ * once the code is regenerated.
24
+ *
25
+ * ${'@'}generated by codegen project: GenerateComponentDescriptorCpp.js
26
+ */
27
+
28
+ ${IncludeTemplate({
29
+ headerPrefix,
30
+ file: 'ComponentDescriptors.h',
31
+ })}
32
+ #include <react/renderer/core/ConcreteComponentDescriptor.h>
33
+ #include <react/renderer/componentregistry/ComponentDescriptorProviderRegistry.h>
34
+
35
+ namespace facebook::react {
36
+
37
+ void ${libraryName}_registerComponentDescriptorsFromCodegen(
38
+ std::shared_ptr<const ComponentDescriptorProviderRegistry> registry) {
39
+ ${componentRegistrations}
40
+ }
41
+
42
+ } // namespace facebook::react
43
+ `;
44
+ const ComponentRegistrationTemplate = ({className}) =>
45
+ `
46
+ registry->add(concreteComponentDescriptorProvider<${className}ComponentDescriptor>());
47
+ `.trim();
48
+ module.exports = {
49
+ generate(
50
+ libraryName,
51
+ schema,
52
+ packageName,
53
+ assumeNonnull = false,
54
+ headerPrefix,
55
+ ) {
56
+ const fileName = 'ComponentDescriptors.cpp';
57
+ const componentRegistrations = Object.keys(schema.modules)
58
+ .map(moduleName => {
59
+ const module = schema.modules[moduleName];
60
+ if (module.type !== 'Component') {
61
+ return;
62
+ }
63
+ const components = module.components;
64
+ // No components in this module
65
+ if (components == null) {
66
+ return null;
67
+ }
68
+ return Object.keys(components)
69
+ .map(componentName => {
70
+ if (components[componentName].interfaceOnly === true) {
71
+ return;
72
+ }
73
+ return ComponentRegistrationTemplate({
74
+ className: componentName,
75
+ });
76
+ })
77
+ .join('\n');
78
+ })
79
+ .filter(Boolean)
80
+ .join('\n');
81
+ const replacedTemplate = FileTemplate({
82
+ libraryName,
83
+ componentRegistrations,
84
+ headerPrefix:
85
+ headerPrefix !== null && headerPrefix !== void 0 ? headerPrefix : '',
86
+ });
87
+ return new Map([[fileName, replacedTemplate]]);
88
+ },
89
+ };
@@ -0,0 +1,101 @@
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
+ 'use strict';
12
+
13
+ import type {SchemaType} from '../../CodegenSchema';
14
+
15
+ const {IncludeTemplate} = require('./CppHelpers');
16
+
17
+ // File path -> contents
18
+ type FilesOutput = Map<string, string>;
19
+
20
+ const FileTemplate = ({
21
+ libraryName,
22
+ componentRegistrations,
23
+ headerPrefix,
24
+ }: {
25
+ libraryName: string,
26
+ componentRegistrations: string,
27
+ headerPrefix: string,
28
+ }) => `
29
+ /**
30
+ * This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen).
31
+ *
32
+ * Do not edit this file as changes may cause incorrect behavior and will be lost
33
+ * once the code is regenerated.
34
+ *
35
+ * ${'@'}generated by codegen project: GenerateComponentDescriptorCpp.js
36
+ */
37
+
38
+ ${IncludeTemplate({headerPrefix, file: 'ComponentDescriptors.h'})}
39
+ #include <react/renderer/core/ConcreteComponentDescriptor.h>
40
+ #include <react/renderer/componentregistry/ComponentDescriptorProviderRegistry.h>
41
+
42
+ namespace facebook::react {
43
+
44
+ void ${libraryName}_registerComponentDescriptorsFromCodegen(
45
+ std::shared_ptr<const ComponentDescriptorProviderRegistry> registry) {
46
+ ${componentRegistrations}
47
+ }
48
+
49
+ } // namespace facebook::react
50
+ `;
51
+
52
+ const ComponentRegistrationTemplate = ({className}: {className: string}) =>
53
+ `
54
+ registry->add(concreteComponentDescriptorProvider<${className}ComponentDescriptor>());
55
+ `.trim();
56
+
57
+ module.exports = {
58
+ generate(
59
+ libraryName: string,
60
+ schema: SchemaType,
61
+ packageName?: string,
62
+ assumeNonnull: boolean = false,
63
+ headerPrefix?: string,
64
+ ): FilesOutput {
65
+ const fileName = 'ComponentDescriptors.cpp';
66
+
67
+ const componentRegistrations = Object.keys(schema.modules)
68
+ .map(moduleName => {
69
+ const module = schema.modules[moduleName];
70
+ if (module.type !== 'Component') {
71
+ return;
72
+ }
73
+
74
+ const {components} = module;
75
+ // No components in this module
76
+ if (components == null) {
77
+ return null;
78
+ }
79
+
80
+ return Object.keys(components)
81
+ .map(componentName => {
82
+ if (components[componentName].interfaceOnly === true) {
83
+ return;
84
+ }
85
+
86
+ return ComponentRegistrationTemplate({className: componentName});
87
+ })
88
+ .join('\n');
89
+ })
90
+ .filter(Boolean)
91
+ .join('\n');
92
+
93
+ const replacedTemplate = FileTemplate({
94
+ libraryName,
95
+ componentRegistrations,
96
+ headerPrefix: headerPrefix ?? '',
97
+ });
98
+
99
+ return new Map([[fileName, replacedTemplate]]);
100
+ },
101
+ };
@@ -10,9 +10,12 @@
10
10
 
11
11
  'use strict';
12
12
 
13
+ const _require = require('./CppHelpers'),
14
+ IncludeTemplate = _require.IncludeTemplate;
15
+
13
16
  // File path -> contents
14
17
 
15
- const FileTemplate = ({componentDescriptors, libraryName}) => `
18
+ const FileTemplate = ({libraryName, componentDefinitions, headerPrefix}) => `
16
19
  /**
17
20
  * This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen).
18
21
  *
@@ -24,25 +27,36 @@ const FileTemplate = ({componentDescriptors, libraryName}) => `
24
27
 
25
28
  #pragma once
26
29
 
27
- #include <react/renderer/components/${libraryName}/ShadowNodes.h>
30
+ ${IncludeTemplate({
31
+ headerPrefix,
32
+ file: 'ShadowNodes.h',
33
+ })}
28
34
  #include <react/renderer/core/ConcreteComponentDescriptor.h>
35
+ #include <react/renderer/componentregistry/ComponentDescriptorProviderRegistry.h>
36
+
37
+ namespace facebook::react {
29
38
 
30
- namespace facebook {
31
- namespace react {
39
+ ${componentDefinitions}
32
40
 
33
- ${componentDescriptors}
41
+ void ${libraryName}_registerComponentDescriptorsFromCodegen(
42
+ std::shared_ptr<const ComponentDescriptorProviderRegistry> registry);
34
43
 
35
- } // namespace react
36
- } // namespace facebook
44
+ } // namespace facebook::react
37
45
  `;
38
- const ComponentTemplate = ({className}) =>
46
+ const ComponentDefinitionTemplate = ({className}) =>
39
47
  `
40
48
  using ${className}ComponentDescriptor = ConcreteComponentDescriptor<${className}ShadowNode>;
41
49
  `.trim();
42
50
  module.exports = {
43
- generate(libraryName, schema, packageName, assumeNonnull = false) {
51
+ generate(
52
+ libraryName,
53
+ schema,
54
+ packageName,
55
+ assumeNonnull = false,
56
+ headerPrefix,
57
+ ) {
44
58
  const fileName = 'ComponentDescriptors.h';
45
- const componentDescriptors = Object.keys(schema.modules)
59
+ const componentDefinitions = Object.keys(schema.modules)
46
60
  .map(moduleName => {
47
61
  const module = schema.modules[moduleName];
48
62
  if (module.type !== 'Component') {
@@ -58,7 +72,7 @@ module.exports = {
58
72
  if (components[componentName].interfaceOnly === true) {
59
73
  return;
60
74
  }
61
- return ComponentTemplate({
75
+ return ComponentDefinitionTemplate({
62
76
  className: componentName,
63
77
  });
64
78
  })
@@ -67,8 +81,10 @@ module.exports = {
67
81
  .filter(Boolean)
68
82
  .join('\n');
69
83
  const replacedTemplate = FileTemplate({
70
- componentDescriptors,
71
84
  libraryName,
85
+ componentDefinitions,
86
+ headerPrefix:
87
+ headerPrefix !== null && headerPrefix !== void 0 ? headerPrefix : '',
72
88
  });
73
89
  return new Map([[fileName, replacedTemplate]]);
74
90
  },
@@ -12,15 +12,19 @@
12
12
 
13
13
  import type {SchemaType} from '../../CodegenSchema';
14
14
 
15
+ const {IncludeTemplate} = require('./CppHelpers');
16
+
15
17
  // File path -> contents
16
18
  type FilesOutput = Map<string, string>;
17
19
 
18
20
  const FileTemplate = ({
19
- componentDescriptors,
20
21
  libraryName,
22
+ componentDefinitions,
23
+ headerPrefix,
21
24
  }: {
22
- componentDescriptors: string,
23
25
  libraryName: string,
26
+ componentDefinitions: string,
27
+ headerPrefix: string,
24
28
  }) => `
25
29
  /**
26
30
  * This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen).
@@ -33,19 +37,21 @@ const FileTemplate = ({
33
37
 
34
38
  #pragma once
35
39
 
36
- #include <react/renderer/components/${libraryName}/ShadowNodes.h>
40
+ ${IncludeTemplate({headerPrefix, file: 'ShadowNodes.h'})}
37
41
  #include <react/renderer/core/ConcreteComponentDescriptor.h>
42
+ #include <react/renderer/componentregistry/ComponentDescriptorProviderRegistry.h>
43
+
44
+ namespace facebook::react {
38
45
 
39
- namespace facebook {
40
- namespace react {
46
+ ${componentDefinitions}
41
47
 
42
- ${componentDescriptors}
48
+ void ${libraryName}_registerComponentDescriptorsFromCodegen(
49
+ std::shared_ptr<const ComponentDescriptorProviderRegistry> registry);
43
50
 
44
- } // namespace react
45
- } // namespace facebook
51
+ } // namespace facebook::react
46
52
  `;
47
53
 
48
- const ComponentTemplate = ({className}: {className: string}) =>
54
+ const ComponentDefinitionTemplate = ({className}: {className: string}) =>
49
55
  `
50
56
  using ${className}ComponentDescriptor = ConcreteComponentDescriptor<${className}ShadowNode>;
51
57
  `.trim();
@@ -56,10 +62,11 @@ module.exports = {
56
62
  schema: SchemaType,
57
63
  packageName?: string,
58
64
  assumeNonnull: boolean = false,
65
+ headerPrefix?: string,
59
66
  ): FilesOutput {
60
67
  const fileName = 'ComponentDescriptors.h';
61
68
 
62
- const componentDescriptors = Object.keys(schema.modules)
69
+ const componentDefinitions = Object.keys(schema.modules)
63
70
  .map(moduleName => {
64
71
  const module = schema.modules[moduleName];
65
72
  if (module.type !== 'Component') {
@@ -78,7 +85,7 @@ module.exports = {
78
85
  return;
79
86
  }
80
87
 
81
- return ComponentTemplate({className: componentName});
88
+ return ComponentDefinitionTemplate({className: componentName});
82
89
  })
83
90
  .join('\n');
84
91
  })
@@ -86,8 +93,9 @@ module.exports = {
86
93
  .join('\n');
87
94
 
88
95
  const replacedTemplate = FileTemplate({
89
- componentDescriptors,
90
96
  libraryName,
97
+ componentDefinitions,
98
+ headerPrefix: headerPrefix ?? '',
91
99
  });
92
100
 
93
101
  return new Map([[fileName, replacedTemplate]]);
@@ -125,6 +125,8 @@ function getObjCParamType(param) {
125
125
  return 'NSInteger';
126
126
  case 'StringTypeAnnotation':
127
127
  return 'NSString *';
128
+ case 'ArrayTypeAnnotation':
129
+ return 'const NSArray *';
128
130
  default:
129
131
  typeAnnotation.type;
130
132
  throw new Error('Received invalid param type annotation');
@@ -151,6 +153,8 @@ function getObjCExpectedKindParamType(param) {
151
153
  return '[NSNumber class]';
152
154
  case 'StringTypeAnnotation':
153
155
  return '[NSString class]';
156
+ case 'ArrayTypeAnnotation':
157
+ return '[NSArray class]';
154
158
  default:
155
159
  typeAnnotation.type;
156
160
  throw new Error('Received invalid param type annotation');
@@ -177,6 +181,8 @@ function getReadableExpectedKindParamType(param) {
177
181
  return 'number';
178
182
  case 'StringTypeAnnotation':
179
183
  return 'string';
184
+ case 'ArrayTypeAnnotation':
185
+ return 'array';
180
186
  default:
181
187
  typeAnnotation.type;
182
188
  throw new Error('Received invalid param type annotation');
@@ -203,6 +209,8 @@ function getObjCRightHandAssignmentParamType(param, index) {
203
209
  return `[(NSNumber *)arg${index} intValue]`;
204
210
  case 'StringTypeAnnotation':
205
211
  return `(NSString *)arg${index}`;
212
+ case 'ArrayTypeAnnotation':
213
+ return `(NSArray *)arg${index}`;
206
214
  default:
207
215
  typeAnnotation.type;
208
216
  throw new Error('Received invalid param type annotation');
@@ -286,7 +294,13 @@ function generateCommandHandler(component, componentName) {
286
294
  });
287
295
  }
288
296
  module.exports = {
289
- generate(libraryName, schema, packageName, assumeNonnull = false) {
297
+ generate(
298
+ libraryName,
299
+ schema,
300
+ packageName,
301
+ assumeNonnull = false,
302
+ headerPrefix,
303
+ ) {
290
304
  const fileName = 'RCTComponentViewHelpers.h';
291
305
  const componentContent = Object.keys(schema.modules)
292
306
  .map(moduleName => {
@@ -11,11 +11,11 @@
11
11
  'use strict';
12
12
 
13
13
  import type {
14
- NamedShape,
14
+ CommandParamTypeAnnotation,
15
15
  CommandTypeAnnotation,
16
16
  ComponentShape,
17
+ NamedShape,
17
18
  SchemaType,
18
- CommandParamTypeAnnotation,
19
19
  } from '../../CodegenSchema';
20
20
 
21
21
  type FilesOutput = Map<string, string>;
@@ -171,6 +171,8 @@ function getObjCParamType(param: Param): string {
171
171
  return 'NSInteger';
172
172
  case 'StringTypeAnnotation':
173
173
  return 'NSString *';
174
+ case 'ArrayTypeAnnotation':
175
+ return 'const NSArray *';
174
176
  default:
175
177
  (typeAnnotation.type: empty);
176
178
  throw new Error('Received invalid param type annotation');
@@ -199,6 +201,8 @@ function getObjCExpectedKindParamType(param: Param): string {
199
201
  return '[NSNumber class]';
200
202
  case 'StringTypeAnnotation':
201
203
  return '[NSString class]';
204
+ case 'ArrayTypeAnnotation':
205
+ return '[NSArray class]';
202
206
  default:
203
207
  (typeAnnotation.type: empty);
204
208
  throw new Error('Received invalid param type annotation');
@@ -227,6 +231,8 @@ function getReadableExpectedKindParamType(param: Param): string {
227
231
  return 'number';
228
232
  case 'StringTypeAnnotation':
229
233
  return 'string';
234
+ case 'ArrayTypeAnnotation':
235
+ return 'array';
230
236
  default:
231
237
  (typeAnnotation.type: empty);
232
238
  throw new Error('Received invalid param type annotation');
@@ -258,6 +264,8 @@ function getObjCRightHandAssignmentParamType(
258
264
  return `[(NSNumber *)arg${index} intValue]`;
259
265
  case 'StringTypeAnnotation':
260
266
  return `(NSString *)arg${index}`;
267
+ case 'ArrayTypeAnnotation':
268
+ return `(NSArray *)arg${index}`;
261
269
  default:
262
270
  (typeAnnotation.type: empty);
263
271
  throw new Error('Received invalid param type annotation');
@@ -372,6 +380,7 @@ module.exports = {
372
380
  schema: SchemaType,
373
381
  packageName?: string,
374
382
  assumeNonnull: boolean = false,
383
+ headerPrefix?: string,
375
384
  ): FilesOutput {
376
385
  const fileName = 'RCTComponentViewHelpers.h';
377
386
 
@@ -10,11 +10,15 @@
10
10
 
11
11
  'use strict';
12
12
 
13
- const _require = require('./CppHelpers'),
14
- generateEventStructName = _require.generateEventStructName;
15
- const _require2 = require('../Utils'),
16
- indent = _require2.indent;
17
- const FileTemplate = ({events, libraryName, extraIncludes}) => `
13
+ const _require = require('../Utils'),
14
+ indent = _require.indent;
15
+ const _require2 = require('./CppHelpers'),
16
+ IncludeTemplate = _require2.IncludeTemplate,
17
+ generateEventStructName = _require2.generateEventStructName;
18
+
19
+ // File path -> contents
20
+
21
+ const FileTemplate = ({events, extraIncludes, headerPrefix}) => `
18
22
  /**
19
23
  * This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen).
20
24
  *
@@ -24,14 +28,15 @@ const FileTemplate = ({events, libraryName, extraIncludes}) => `
24
28
  * ${'@'}generated by codegen project: GenerateEventEmitterCpp.js
25
29
  */
26
30
 
27
- #include <react/renderer/components/${libraryName}/EventEmitters.h>
31
+ ${IncludeTemplate({
32
+ headerPrefix,
33
+ file: 'EventEmitters.h',
34
+ })}
28
35
  ${[...extraIncludes].join('\n')}
29
36
 
30
- namespace facebook {
31
- namespace react {
37
+ namespace facebook::react {
32
38
  ${events}
33
- } // namespace react
34
- } // namespace facebook
39
+ } // namespace facebook::react
35
40
  `;
36
41
  const ComponentTemplate = ({
37
42
  className,
@@ -318,9 +323,10 @@ function generateEvent(componentName, event, extraIncludes) {
318
323
  // In order to migrate to this new system we have to support the current
319
324
  // naming scheme. We should delete this once we are able to control this name
320
325
  // throughout the system.
321
- const dispatchEventName = `${event.name[2].toLowerCase()}${event.name.slice(
322
- 3,
323
- )}`;
326
+ const dispatchEventName =
327
+ event.paperTopLevelNameDeprecated != null
328
+ ? event.paperTopLevelNameDeprecated
329
+ : `${event.name[2].toLowerCase()}${event.name.slice(3)}`;
324
330
  if (event.typeAnnotation.argument) {
325
331
  const implementation = `
326
332
  auto $payload = jsi::Object(runtime);
@@ -350,7 +356,13 @@ function generateEvent(componentName, event, extraIncludes) {
350
356
  });
351
357
  }
352
358
  module.exports = {
353
- generate(libraryName, schema, packageName, assumeNonnull = false) {
359
+ generate(
360
+ libraryName,
361
+ schema,
362
+ packageName,
363
+ assumeNonnull = false,
364
+ headerPrefix,
365
+ ) {
354
366
  const moduleComponents = Object.keys(schema.modules)
355
367
  .map(moduleName => {
356
368
  const module = schema.modules[moduleName];
@@ -377,9 +389,10 @@ module.exports = {
377
389
  .join('\n');
378
390
  const fileName = 'EventEmitters.cpp';
379
391
  const replacedTemplate = FileTemplate({
380
- libraryName,
381
392
  events: componentEmitters,
382
393
  extraIncludes,
394
+ headerPrefix:
395
+ headerPrefix !== null && headerPrefix !== void 0 ? headerPrefix : '',
383
396
  });
384
397
  return new Map([[fileName, replacedTemplate]]);
385
398
  },
@@ -10,18 +10,17 @@
10
10
 
11
11
  'use strict';
12
12
  import type {EventTypeShape} from '../../CodegenSchema';
13
-
14
- const {generateEventStructName} = require('./CppHelpers');
15
- const {indent} = require('../Utils');
16
-
17
13
  import type {
18
14
  ComponentShape,
19
- NamedShape,
20
15
  EventTypeAnnotation,
21
- SchemaType,
16
+ NamedShape,
22
17
  ObjectTypeAnnotation,
18
+ SchemaType,
23
19
  } from '../../CodegenSchema';
24
20
 
21
+ const {indent} = require('../Utils');
22
+ const {IncludeTemplate, generateEventStructName} = require('./CppHelpers');
23
+
25
24
  // File path -> contents
26
25
  type FilesOutput = Map<string, string>;
27
26
 
@@ -32,12 +31,12 @@ type ComponentCollection = $ReadOnly<{
32
31
 
33
32
  const FileTemplate = ({
34
33
  events,
35
- libraryName,
36
34
  extraIncludes,
35
+ headerPrefix,
37
36
  }: {
38
37
  events: string,
39
- libraryName: string,
40
38
  extraIncludes: Set<string>,
39
+ headerPrefix: string,
41
40
  }) => `
42
41
  /**
43
42
  * This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen).
@@ -48,14 +47,12 @@ const FileTemplate = ({
48
47
  * ${'@'}generated by codegen project: GenerateEventEmitterCpp.js
49
48
  */
50
49
 
51
- #include <react/renderer/components/${libraryName}/EventEmitters.h>
50
+ ${IncludeTemplate({headerPrefix, file: 'EventEmitters.h'})}
52
51
  ${[...extraIncludes].join('\n')}
53
52
 
54
- namespace facebook {
55
- namespace react {
53
+ namespace facebook::react {
56
54
  ${events}
57
- } // namespace react
58
- } // namespace facebook
55
+ } // namespace facebook::react
59
56
  `;
60
57
 
61
58
  const ComponentTemplate = ({
@@ -372,9 +369,10 @@ function generateEvent(
372
369
  // In order to migrate to this new system we have to support the current
373
370
  // naming scheme. We should delete this once we are able to control this name
374
371
  // throughout the system.
375
- const dispatchEventName = `${event.name[2].toLowerCase()}${event.name.slice(
376
- 3,
377
- )}`;
372
+ const dispatchEventName =
373
+ event.paperTopLevelNameDeprecated != null
374
+ ? event.paperTopLevelNameDeprecated
375
+ : `${event.name[2].toLowerCase()}${event.name.slice(3)}`;
378
376
 
379
377
  if (event.typeAnnotation.argument) {
380
378
  const implementation = `
@@ -414,6 +412,7 @@ module.exports = {
414
412
  schema: SchemaType,
415
413
  packageName?: string,
416
414
  assumeNonnull: boolean = false,
415
+ headerPrefix?: string,
417
416
  ): FilesOutput {
418
417
  const moduleComponents: ComponentCollection = Object.keys(schema.modules)
419
418
  .map(moduleName => {
@@ -445,9 +444,9 @@ module.exports = {
445
444
 
446
445
  const fileName = 'EventEmitters.cpp';
447
446
  const replacedTemplate = FileTemplate({
448
- libraryName,
449
447
  events: componentEmitters,
450
448
  extraIncludes,
449
+ headerPrefix: headerPrefix ?? '',
451
450
  });
452
451
 
453
452
  return new Map([[fileName, replacedTemplate]]);