@react-native/codegen 0.72.1

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 (186) hide show
  1. package/README.md +21 -0
  2. package/lib/CodegenSchema.js +11 -0
  3. package/lib/CodegenSchema.js.flow +351 -0
  4. package/lib/SchemaValidator.js +54 -0
  5. package/lib/SchemaValidator.js.flow +67 -0
  6. package/lib/cli/combine/combine-js-to-schema-cli.js +50 -0
  7. package/lib/cli/combine/combine-js-to-schema-cli.js.flow +49 -0
  8. package/lib/cli/combine/combine-js-to-schema.js +110 -0
  9. package/lib/cli/combine/combine-js-to-schema.js.flow +48 -0
  10. package/lib/cli/combine/combine-utils.js +118 -0
  11. package/lib/cli/combine/combine-utils.js.flow +85 -0
  12. package/lib/cli/generators/generate-all.js +65 -0
  13. package/lib/cli/generators/generate-all.js.flow +66 -0
  14. package/lib/cli/parser/parser-cli.js +55 -0
  15. package/lib/cli/parser/parser-cli.js.flow +18 -0
  16. package/lib/cli/parser/parser.js +35 -0
  17. package/lib/cli/parser/parser.js.flow +37 -0
  18. package/lib/cli/parser/parser.sh +15 -0
  19. package/lib/generators/RNCodegen.js +207 -0
  20. package/lib/generators/RNCodegen.js.flow +284 -0
  21. package/lib/generators/Utils.js +31 -0
  22. package/lib/generators/Utils.js.flow +33 -0
  23. package/lib/generators/__test_fixtures__/fixtures.js +79 -0
  24. package/lib/generators/__test_fixtures__/fixtures.js.flow +82 -0
  25. package/lib/generators/components/ComponentsGeneratorUtils.js +217 -0
  26. package/lib/generators/components/ComponentsGeneratorUtils.js.flow +304 -0
  27. package/lib/generators/components/CppHelpers.js +188 -0
  28. package/lib/generators/components/CppHelpers.js.flow +228 -0
  29. package/lib/generators/components/GenerateComponentDescriptorH.js +75 -0
  30. package/lib/generators/components/GenerateComponentDescriptorH.js.flow +95 -0
  31. package/lib/generators/components/GenerateComponentHObjCpp.js +327 -0
  32. package/lib/generators/components/GenerateComponentHObjCpp.js.flow +418 -0
  33. package/lib/generators/components/GenerateEventEmitterCpp.js +199 -0
  34. package/lib/generators/components/GenerateEventEmitterCpp.js.flow +273 -0
  35. package/lib/generators/components/GenerateEventEmitterH.js +224 -0
  36. package/lib/generators/components/GenerateEventEmitterH.js.flow +315 -0
  37. package/lib/generators/components/GeneratePropsCpp.js +126 -0
  38. package/lib/generators/components/GeneratePropsCpp.js.flow +161 -0
  39. package/lib/generators/components/GeneratePropsH.js +606 -0
  40. package/lib/generators/components/GeneratePropsH.js.flow +778 -0
  41. package/lib/generators/components/GeneratePropsJavaDelegate.js +287 -0
  42. package/lib/generators/components/GeneratePropsJavaDelegate.js.flow +348 -0
  43. package/lib/generators/components/GeneratePropsJavaInterface.js +237 -0
  44. package/lib/generators/components/GeneratePropsJavaInterface.js.flow +288 -0
  45. package/lib/generators/components/GeneratePropsJavaPojo/PojoCollector.js +157 -0
  46. package/lib/generators/components/GeneratePropsJavaPojo/PojoCollector.js.flow +187 -0
  47. package/lib/generators/components/GeneratePropsJavaPojo/index.js +66 -0
  48. package/lib/generators/components/GeneratePropsJavaPojo/index.js.flow +80 -0
  49. package/lib/generators/components/GeneratePropsJavaPojo/serializePojo.js +273 -0
  50. package/lib/generators/components/GeneratePropsJavaPojo/serializePojo.js.flow +296 -0
  51. package/lib/generators/components/GenerateShadowNodeCpp.js +73 -0
  52. package/lib/generators/components/GenerateShadowNodeCpp.js.flow +95 -0
  53. package/lib/generators/components/GenerateShadowNodeH.js +91 -0
  54. package/lib/generators/components/GenerateShadowNodeH.js.flow +124 -0
  55. package/lib/generators/components/GenerateStateCpp.js +70 -0
  56. package/lib/generators/components/GenerateStateCpp.js.flow +92 -0
  57. package/lib/generators/components/GenerateStateH.js +93 -0
  58. package/lib/generators/components/GenerateStateH.js.flow +111 -0
  59. package/lib/generators/components/GenerateTests.js +165 -0
  60. package/lib/generators/components/GenerateTests.js.flow +219 -0
  61. package/lib/generators/components/GenerateThirdPartyFabricComponentsProviderH.js +91 -0
  62. package/lib/generators/components/GenerateThirdPartyFabricComponentsProviderH.js.flow +107 -0
  63. package/lib/generators/components/GenerateThirdPartyFabricComponentsProviderObjCpp.js +89 -0
  64. package/lib/generators/components/GenerateThirdPartyFabricComponentsProviderObjCpp.js.flow +105 -0
  65. package/lib/generators/components/GenerateViewConfigJs.js +410 -0
  66. package/lib/generators/components/GenerateViewConfigJs.js.flow +484 -0
  67. package/lib/generators/components/JavaHelpers.js +87 -0
  68. package/lib/generators/components/JavaHelpers.js.flow +119 -0
  69. package/lib/generators/components/__test_fixtures__/fixtures.js +1641 -0
  70. package/lib/generators/components/__test_fixtures__/fixtures.js.flow +1672 -0
  71. package/lib/generators/modules/GenerateModuleCpp.js +299 -0
  72. package/lib/generators/modules/GenerateModuleCpp.js.flow +278 -0
  73. package/lib/generators/modules/GenerateModuleH.js +373 -0
  74. package/lib/generators/modules/GenerateModuleH.js.flow +355 -0
  75. package/lib/generators/modules/GenerateModuleJavaSpec.js +571 -0
  76. package/lib/generators/modules/GenerateModuleJavaSpec.js.flow +553 -0
  77. package/lib/generators/modules/GenerateModuleJniCpp.js +505 -0
  78. package/lib/generators/modules/GenerateModuleJniCpp.js.flow +523 -0
  79. package/lib/generators/modules/GenerateModuleJniH.js +138 -0
  80. package/lib/generators/modules/GenerateModuleJniH.js.flow +148 -0
  81. package/lib/generators/modules/GenerateModuleObjCpp/StructCollector.js +262 -0
  82. package/lib/generators/modules/GenerateModuleObjCpp/StructCollector.js.flow +208 -0
  83. package/lib/generators/modules/GenerateModuleObjCpp/Utils.js +25 -0
  84. package/lib/generators/modules/GenerateModuleObjCpp/Utils.js.flow +32 -0
  85. package/lib/generators/modules/GenerateModuleObjCpp/header/serializeConstantsStruct.js +337 -0
  86. package/lib/generators/modules/GenerateModuleObjCpp/header/serializeConstantsStruct.js.flow +288 -0
  87. package/lib/generators/modules/GenerateModuleObjCpp/header/serializeRegularStruct.js +330 -0
  88. package/lib/generators/modules/GenerateModuleObjCpp/header/serializeRegularStruct.js.flow +279 -0
  89. package/lib/generators/modules/GenerateModuleObjCpp/header/serializeStruct.js +25 -0
  90. package/lib/generators/modules/GenerateModuleObjCpp/header/serializeStruct.js.flow +35 -0
  91. package/lib/generators/modules/GenerateModuleObjCpp/index.js +185 -0
  92. package/lib/generators/modules/GenerateModuleObjCpp/index.js.flow +219 -0
  93. package/lib/generators/modules/GenerateModuleObjCpp/serializeMethod.js +529 -0
  94. package/lib/generators/modules/GenerateModuleObjCpp/serializeMethod.js.flow +510 -0
  95. package/lib/generators/modules/GenerateModuleObjCpp/source/serializeModule.js +96 -0
  96. package/lib/generators/modules/GenerateModuleObjCpp/source/serializeModule.js.flow +121 -0
  97. package/lib/generators/modules/Utils.js +34 -0
  98. package/lib/generators/modules/Utils.js.flow +53 -0
  99. package/lib/generators/modules/__test_fixtures__/fixtures.js +1658 -0
  100. package/lib/generators/modules/__test_fixtures__/fixtures.js.flow +1669 -0
  101. package/lib/parsers/consistency/compareSnaps.js +84 -0
  102. package/lib/parsers/error-utils.js +284 -0
  103. package/lib/parsers/error-utils.js.flow +295 -0
  104. package/lib/parsers/errors.js +350 -0
  105. package/lib/parsers/errors.js.flow +439 -0
  106. package/lib/parsers/flow/components/__test_fixtures__/failures.js +583 -0
  107. package/lib/parsers/flow/components/__test_fixtures__/failures.js.flow +600 -0
  108. package/lib/parsers/flow/components/__test_fixtures__/fixtures.js +1001 -0
  109. package/lib/parsers/flow/components/__test_fixtures__/fixtures.js.flow +1016 -0
  110. package/lib/parsers/flow/components/commands.js +104 -0
  111. package/lib/parsers/flow/components/commands.js.flow +123 -0
  112. package/lib/parsers/flow/components/componentsUtils.js +446 -0
  113. package/lib/parsers/flow/components/componentsUtils.js.flow +496 -0
  114. package/lib/parsers/flow/components/events.js +233 -0
  115. package/lib/parsers/flow/components/events.js.flow +262 -0
  116. package/lib/parsers/flow/components/extends.js +52 -0
  117. package/lib/parsers/flow/components/extends.js.flow +66 -0
  118. package/lib/parsers/flow/components/index.js +267 -0
  119. package/lib/parsers/flow/components/index.js.flow +226 -0
  120. package/lib/parsers/flow/components/options.js +72 -0
  121. package/lib/parsers/flow/components/options.js.flow +87 -0
  122. package/lib/parsers/flow/components/props.js +47 -0
  123. package/lib/parsers/flow/components/props.js.flow +60 -0
  124. package/lib/parsers/flow/components/schema.js +106 -0
  125. package/lib/parsers/flow/components/schema.js.flow +62 -0
  126. package/lib/parsers/flow/index.js +80 -0
  127. package/lib/parsers/flow/index.js.flow +85 -0
  128. package/lib/parsers/flow/modules/__test_fixtures__/failures.js +215 -0
  129. package/lib/parsers/flow/modules/__test_fixtures__/failures.js.flow +223 -0
  130. package/lib/parsers/flow/modules/__test_fixtures__/fixtures.js +724 -0
  131. package/lib/parsers/flow/modules/__test_fixtures__/fixtures.js.flow +747 -0
  132. package/lib/parsers/flow/modules/index.js +528 -0
  133. package/lib/parsers/flow/modules/index.js.flow +420 -0
  134. package/lib/parsers/flow/parser.js +109 -0
  135. package/lib/parsers/flow/parser.js.flow +83 -0
  136. package/lib/parsers/flow/utils.js +108 -0
  137. package/lib/parsers/flow/utils.js.flow +123 -0
  138. package/lib/parsers/parser.js +11 -0
  139. package/lib/parsers/parser.js.flow +70 -0
  140. package/lib/parsers/parserMock.js +96 -0
  141. package/lib/parsers/parserMock.js.flow +68 -0
  142. package/lib/parsers/parsers-commons.js +448 -0
  143. package/lib/parsers/parsers-commons.js.flow +447 -0
  144. package/lib/parsers/parsers-primitives.js +387 -0
  145. package/lib/parsers/parsers-primitives.js.flow +383 -0
  146. package/lib/parsers/parsers-utils.js +18 -0
  147. package/lib/parsers/parsers-utils.js.flow +19 -0
  148. package/lib/parsers/schema/index.js +23 -0
  149. package/lib/parsers/schema/index.js.flow +26 -0
  150. package/lib/parsers/typescript/components/__test_fixtures__/failures.js +489 -0
  151. package/lib/parsers/typescript/components/__test_fixtures__/failures.js.flow +505 -0
  152. package/lib/parsers/typescript/components/__test_fixtures__/fixtures.js +1151 -0
  153. package/lib/parsers/typescript/components/__test_fixtures__/fixtures.js.flow +1168 -0
  154. package/lib/parsers/typescript/components/commands.js +132 -0
  155. package/lib/parsers/typescript/components/commands.js.flow +151 -0
  156. package/lib/parsers/typescript/components/componentsUtils.js +471 -0
  157. package/lib/parsers/typescript/components/componentsUtils.js.flow +521 -0
  158. package/lib/parsers/typescript/components/events.js +240 -0
  159. package/lib/parsers/typescript/components/events.js.flow +262 -0
  160. package/lib/parsers/typescript/components/extends.js +88 -0
  161. package/lib/parsers/typescript/components/extends.js.flow +103 -0
  162. package/lib/parsers/typescript/components/index.js +277 -0
  163. package/lib/parsers/typescript/components/index.js.flow +239 -0
  164. package/lib/parsers/typescript/components/options.js +72 -0
  165. package/lib/parsers/typescript/components/options.js.flow +87 -0
  166. package/lib/parsers/typescript/components/props.js +39 -0
  167. package/lib/parsers/typescript/components/props.js.flow +48 -0
  168. package/lib/parsers/typescript/components/schema.js +106 -0
  169. package/lib/parsers/typescript/components/schema.js.flow +62 -0
  170. package/lib/parsers/typescript/index.js +85 -0
  171. package/lib/parsers/typescript/index.js.flow +94 -0
  172. package/lib/parsers/typescript/modules/__test_fixtures__/failures.js +160 -0
  173. package/lib/parsers/typescript/modules/__test_fixtures__/failures.js.flow +167 -0
  174. package/lib/parsers/typescript/modules/__test_fixtures__/fixtures.js +701 -0
  175. package/lib/parsers/typescript/modules/__test_fixtures__/fixtures.js.flow +727 -0
  176. package/lib/parsers/typescript/modules/index.js +543 -0
  177. package/lib/parsers/typescript/modules/index.js.flow +435 -0
  178. package/lib/parsers/typescript/parseTopLevelType.js +203 -0
  179. package/lib/parsers/typescript/parseTopLevelType.js.flow +243 -0
  180. package/lib/parsers/typescript/parser.js +105 -0
  181. package/lib/parsers/typescript/parser.js.flow +87 -0
  182. package/lib/parsers/typescript/utils.js +101 -0
  183. package/lib/parsers/typescript/utils.js.flow +115 -0
  184. package/lib/parsers/utils.js +273 -0
  185. package/lib/parsers/utils.js.flow +266 -0
  186. package/package.json +45 -0
@@ -0,0 +1,185 @@
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('../Utils'),
14
+ createAliasResolver = _require.createAliasResolver,
15
+ getModules = _require.getModules;
16
+ const _require2 = require('./StructCollector'),
17
+ StructCollector = _require2.StructCollector;
18
+ const _require3 = require('./header/serializeStruct'),
19
+ serializeStruct = _require3.serializeStruct;
20
+ const _require4 = require('./serializeMethod'),
21
+ serializeMethod = _require4.serializeMethod;
22
+ const _require5 = require('./source/serializeModule'),
23
+ serializeModuleSource = _require5.serializeModuleSource;
24
+ const ModuleDeclarationTemplate = ({
25
+ hasteModuleName,
26
+ structDeclarations,
27
+ protocolMethods,
28
+ }) => `${structDeclarations}
29
+ @protocol ${hasteModuleName}Spec <RCTBridgeModule, RCTTurboModule>
30
+
31
+ ${protocolMethods}
32
+
33
+ @end
34
+ namespace facebook {
35
+ namespace react {
36
+ /**
37
+ * ObjC++ class for module '${hasteModuleName}'
38
+ */
39
+ class JSI_EXPORT ${hasteModuleName}SpecJSI : public ObjCTurboModule {
40
+ public:
41
+ ${hasteModuleName}SpecJSI(const ObjCTurboModule::InitParams &params);
42
+ };
43
+ } // namespace react
44
+ } // namespace facebook`;
45
+ const HeaderFileTemplate = ({
46
+ moduleDeclarations,
47
+ structInlineMethods,
48
+ assumeNonnull,
49
+ }) =>
50
+ `/**
51
+ * This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen).
52
+ *
53
+ * Do not edit this file as changes may cause incorrect behavior and will be lost
54
+ * once the code is regenerated.
55
+ *
56
+ * ${'@'}generated by codegen project: GenerateModuleObjCpp
57
+ *
58
+ * We create an umbrella header (and corresponding implementation) here since
59
+ * Cxx compilation in BUCK has a limitation: source-code producing genrule()s
60
+ * must have a single output. More files => more genrule()s => slower builds.
61
+ */
62
+
63
+ #ifndef __cplusplus
64
+ #error This file must be compiled as Obj-C++. If you are importing it, you must change your file extension to .mm.
65
+ #endif
66
+ #import <Foundation/Foundation.h>
67
+ #import <RCTRequired/RCTRequired.h>
68
+ #import <RCTTypeSafety/RCTConvertHelpers.h>
69
+ #import <RCTTypeSafety/RCTTypedModuleConstants.h>
70
+ #import <React/RCTBridgeModule.h>
71
+ #import <React/RCTCxxConvert.h>
72
+ #import <React/RCTManagedPointer.h>
73
+ #import <ReactCommon/RCTTurboModule.h>
74
+ #import <optional>
75
+ #import <vector>
76
+
77
+ ` +
78
+ (assumeNonnull ? '\nNS_ASSUME_NONNULL_BEGIN\n' : '') +
79
+ moduleDeclarations +
80
+ '\n' +
81
+ structInlineMethods +
82
+ (assumeNonnull ? '\nNS_ASSUME_NONNULL_END\n' : '\n');
83
+ const SourceFileTemplate = ({headerFileName, moduleImplementations}) => `/**
84
+ * This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen).
85
+ *
86
+ * Do not edit this file as changes may cause incorrect behavior and will be lost
87
+ * once the code is regenerated.
88
+ *
89
+ * ${'@'}generated by codegen project: GenerateModuleObjCpp
90
+ *
91
+ * We create an umbrella header (and corresponding implementation) here since
92
+ * Cxx compilation in BUCK has a limitation: source-code producing genrule()s
93
+ * must have a single output. More files => more genrule()s => slower builds.
94
+ */
95
+
96
+ #import "${headerFileName}"
97
+
98
+ ${moduleImplementations}
99
+ `;
100
+ module.exports = {
101
+ generate(libraryName, schema, packageName, assumeNonnull) {
102
+ const nativeModules = getModules(schema);
103
+ const moduleDeclarations = [];
104
+ const structInlineMethods = [];
105
+ const moduleImplementations = [];
106
+ const hasteModuleNames = Object.keys(nativeModules).sort();
107
+ for (const hasteModuleName of hasteModuleNames) {
108
+ const _nativeModules$hasteM = nativeModules[hasteModuleName],
109
+ aliases = _nativeModules$hasteM.aliases,
110
+ excludedPlatforms = _nativeModules$hasteM.excludedPlatforms,
111
+ properties = _nativeModules$hasteM.spec.properties;
112
+ if (excludedPlatforms != null && excludedPlatforms.includes('iOS')) {
113
+ continue;
114
+ }
115
+ const resolveAlias = createAliasResolver(aliases);
116
+ const structCollector = new StructCollector();
117
+ const methodSerializations = [];
118
+ const serializeProperty = property => {
119
+ methodSerializations.push(
120
+ ...serializeMethod(
121
+ hasteModuleName,
122
+ property,
123
+ structCollector,
124
+ resolveAlias,
125
+ ),
126
+ );
127
+ };
128
+
129
+ /**
130
+ * Note: As we serialize NativeModule methods, we insert structs into
131
+ * StructCollector, as we encounter them.
132
+ */
133
+ properties
134
+ .filter(property => property.name !== 'getConstants')
135
+ .forEach(serializeProperty);
136
+ properties
137
+ .filter(property => property.name === 'getConstants')
138
+ .forEach(serializeProperty);
139
+ const generatedStructs = structCollector.getAllStructs();
140
+ const structStrs = [];
141
+ const methodStrs = [];
142
+ for (const struct of generatedStructs) {
143
+ const _serializeStruct = serializeStruct(hasteModuleName, struct),
144
+ methods = _serializeStruct.methods,
145
+ declaration = _serializeStruct.declaration;
146
+ structStrs.push(declaration);
147
+ methodStrs.push(methods);
148
+ }
149
+ moduleDeclarations.push(
150
+ ModuleDeclarationTemplate({
151
+ hasteModuleName: hasteModuleName,
152
+ structDeclarations: structStrs.join('\n'),
153
+ protocolMethods: methodSerializations
154
+ .map(({protocolMethod}) => protocolMethod)
155
+ .join('\n'),
156
+ }),
157
+ );
158
+ structInlineMethods.push(methodStrs.join('\n'));
159
+ moduleImplementations.push(
160
+ serializeModuleSource(
161
+ hasteModuleName,
162
+ generatedStructs,
163
+ methodSerializations.filter(
164
+ ({selector}) => selector !== '@selector(constantsToExport)',
165
+ ),
166
+ ),
167
+ );
168
+ }
169
+ const headerFileName = `${libraryName}.h`;
170
+ const headerFile = HeaderFileTemplate({
171
+ moduleDeclarations: moduleDeclarations.join('\n'),
172
+ structInlineMethods: structInlineMethods.join('\n'),
173
+ assumeNonnull,
174
+ });
175
+ const sourceFileName = `${libraryName}-generated.mm`;
176
+ const sourceFile = SourceFileTemplate({
177
+ headerFileName,
178
+ moduleImplementations: moduleImplementations.join('\n'),
179
+ });
180
+ return new Map([
181
+ [headerFileName, headerFile],
182
+ [sourceFileName, sourceFile],
183
+ ]);
184
+ },
185
+ };
@@ -0,0 +1,219 @@
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
+ import type {NativeModulePropertyShape} from '../../../CodegenSchema';
13
+
14
+ import type {SchemaType} from '../../../CodegenSchema';
15
+ import type {MethodSerializationOutput} from './serializeMethod';
16
+
17
+ const {createAliasResolver, getModules} = require('../Utils');
18
+
19
+ const {StructCollector} = require('./StructCollector');
20
+ const {serializeStruct} = require('./header/serializeStruct');
21
+ const {serializeMethod} = require('./serializeMethod');
22
+ const {serializeModuleSource} = require('./source/serializeModule');
23
+
24
+ type FilesOutput = Map<string, string>;
25
+
26
+ const ModuleDeclarationTemplate = ({
27
+ hasteModuleName,
28
+ structDeclarations,
29
+ protocolMethods,
30
+ }: $ReadOnly<{
31
+ hasteModuleName: string,
32
+ structDeclarations: string,
33
+ protocolMethods: string,
34
+ }>) => `${structDeclarations}
35
+ @protocol ${hasteModuleName}Spec <RCTBridgeModule, RCTTurboModule>
36
+
37
+ ${protocolMethods}
38
+
39
+ @end
40
+ namespace facebook {
41
+ namespace react {
42
+ /**
43
+ * ObjC++ class for module '${hasteModuleName}'
44
+ */
45
+ class JSI_EXPORT ${hasteModuleName}SpecJSI : public ObjCTurboModule {
46
+ public:
47
+ ${hasteModuleName}SpecJSI(const ObjCTurboModule::InitParams &params);
48
+ };
49
+ } // namespace react
50
+ } // namespace facebook`;
51
+
52
+ const HeaderFileTemplate = ({
53
+ moduleDeclarations,
54
+ structInlineMethods,
55
+ assumeNonnull,
56
+ }: $ReadOnly<{
57
+ moduleDeclarations: string,
58
+ structInlineMethods: string,
59
+ assumeNonnull: boolean,
60
+ }>) =>
61
+ `/**
62
+ * This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen).
63
+ *
64
+ * Do not edit this file as changes may cause incorrect behavior and will be lost
65
+ * once the code is regenerated.
66
+ *
67
+ * ${'@'}generated by codegen project: GenerateModuleObjCpp
68
+ *
69
+ * We create an umbrella header (and corresponding implementation) here since
70
+ * Cxx compilation in BUCK has a limitation: source-code producing genrule()s
71
+ * must have a single output. More files => more genrule()s => slower builds.
72
+ */
73
+
74
+ #ifndef __cplusplus
75
+ #error This file must be compiled as Obj-C++. If you are importing it, you must change your file extension to .mm.
76
+ #endif
77
+ #import <Foundation/Foundation.h>
78
+ #import <RCTRequired/RCTRequired.h>
79
+ #import <RCTTypeSafety/RCTConvertHelpers.h>
80
+ #import <RCTTypeSafety/RCTTypedModuleConstants.h>
81
+ #import <React/RCTBridgeModule.h>
82
+ #import <React/RCTCxxConvert.h>
83
+ #import <React/RCTManagedPointer.h>
84
+ #import <ReactCommon/RCTTurboModule.h>
85
+ #import <optional>
86
+ #import <vector>
87
+
88
+ ` +
89
+ (assumeNonnull ? '\nNS_ASSUME_NONNULL_BEGIN\n' : '') +
90
+ moduleDeclarations +
91
+ '\n' +
92
+ structInlineMethods +
93
+ (assumeNonnull ? '\nNS_ASSUME_NONNULL_END\n' : '\n');
94
+
95
+ const SourceFileTemplate = ({
96
+ headerFileName,
97
+ moduleImplementations,
98
+ }: $ReadOnly<{
99
+ headerFileName: string,
100
+ moduleImplementations: string,
101
+ }>) => `/**
102
+ * This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen).
103
+ *
104
+ * Do not edit this file as changes may cause incorrect behavior and will be lost
105
+ * once the code is regenerated.
106
+ *
107
+ * ${'@'}generated by codegen project: GenerateModuleObjCpp
108
+ *
109
+ * We create an umbrella header (and corresponding implementation) here since
110
+ * Cxx compilation in BUCK has a limitation: source-code producing genrule()s
111
+ * must have a single output. More files => more genrule()s => slower builds.
112
+ */
113
+
114
+ #import "${headerFileName}"
115
+
116
+ ${moduleImplementations}
117
+ `;
118
+
119
+ module.exports = {
120
+ generate(
121
+ libraryName: string,
122
+ schema: SchemaType,
123
+ packageName?: string,
124
+ assumeNonnull: boolean,
125
+ ): FilesOutput {
126
+ const nativeModules = getModules(schema);
127
+
128
+ const moduleDeclarations: Array<string> = [];
129
+ const structInlineMethods: Array<string> = [];
130
+ const moduleImplementations: Array<string> = [];
131
+
132
+ const hasteModuleNames: Array<string> = Object.keys(nativeModules).sort();
133
+ for (const hasteModuleName of hasteModuleNames) {
134
+ const {
135
+ aliases,
136
+ excludedPlatforms,
137
+ spec: {properties},
138
+ } = nativeModules[hasteModuleName];
139
+ if (excludedPlatforms != null && excludedPlatforms.includes('iOS')) {
140
+ continue;
141
+ }
142
+ const resolveAlias = createAliasResolver(aliases);
143
+ const structCollector = new StructCollector();
144
+
145
+ const methodSerializations: Array<MethodSerializationOutput> = [];
146
+ const serializeProperty = (property: NativeModulePropertyShape) => {
147
+ methodSerializations.push(
148
+ ...serializeMethod(
149
+ hasteModuleName,
150
+ property,
151
+ structCollector,
152
+ resolveAlias,
153
+ ),
154
+ );
155
+ };
156
+
157
+ /**
158
+ * Note: As we serialize NativeModule methods, we insert structs into
159
+ * StructCollector, as we encounter them.
160
+ */
161
+ properties
162
+ .filter(property => property.name !== 'getConstants')
163
+ .forEach(serializeProperty);
164
+ properties
165
+ .filter(property => property.name === 'getConstants')
166
+ .forEach(serializeProperty);
167
+
168
+ const generatedStructs = structCollector.getAllStructs();
169
+ const structStrs = [];
170
+ const methodStrs = [];
171
+
172
+ for (const struct of generatedStructs) {
173
+ const {methods, declaration} = serializeStruct(hasteModuleName, struct);
174
+ structStrs.push(declaration);
175
+ methodStrs.push(methods);
176
+ }
177
+
178
+ moduleDeclarations.push(
179
+ ModuleDeclarationTemplate({
180
+ hasteModuleName: hasteModuleName,
181
+ structDeclarations: structStrs.join('\n'),
182
+ protocolMethods: methodSerializations
183
+ .map(({protocolMethod}) => protocolMethod)
184
+ .join('\n'),
185
+ }),
186
+ );
187
+
188
+ structInlineMethods.push(methodStrs.join('\n'));
189
+
190
+ moduleImplementations.push(
191
+ serializeModuleSource(
192
+ hasteModuleName,
193
+ generatedStructs,
194
+ methodSerializations.filter(
195
+ ({selector}) => selector !== '@selector(constantsToExport)',
196
+ ),
197
+ ),
198
+ );
199
+ }
200
+
201
+ const headerFileName = `${libraryName}.h`;
202
+ const headerFile = HeaderFileTemplate({
203
+ moduleDeclarations: moduleDeclarations.join('\n'),
204
+ structInlineMethods: structInlineMethods.join('\n'),
205
+ assumeNonnull,
206
+ });
207
+
208
+ const sourceFileName = `${libraryName}-generated.mm`;
209
+ const sourceFile = SourceFileTemplate({
210
+ headerFileName,
211
+ moduleImplementations: moduleImplementations.join('\n'),
212
+ });
213
+
214
+ return new Map([
215
+ [headerFileName, headerFile],
216
+ [sourceFileName, sourceFile],
217
+ ]);
218
+ },
219
+ };