@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,327 @@
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
+ function getOrdinalNumber(num) {
14
+ switch (num) {
15
+ case 1:
16
+ return '1st';
17
+ case 2:
18
+ return '2nd';
19
+ case 3:
20
+ return '3rd';
21
+ }
22
+ if (num <= 20) {
23
+ return `${num}th`;
24
+ }
25
+ return 'unknown';
26
+ }
27
+ const ProtocolTemplate = ({componentName, methods}) =>
28
+ `
29
+ @protocol RCT${componentName}ViewProtocol <NSObject>
30
+ ${methods}
31
+ @end
32
+ `.trim();
33
+ const CommandHandlerIfCaseConvertArgTemplate = ({
34
+ componentName,
35
+ expectedKind,
36
+ argNumber,
37
+ argNumberString,
38
+ expectedKindString,
39
+ argConversion,
40
+ }) =>
41
+ `
42
+ NSObject *arg${argNumber} = args[${argNumber}];
43
+ #if RCT_DEBUG
44
+ if (!RCTValidateTypeOfViewCommandArgument(arg${argNumber}, ${expectedKind}, @"${expectedKindString}", @"${componentName}", commandName, @"${argNumberString}")) {
45
+ return;
46
+ }
47
+ #endif
48
+ ${argConversion}
49
+ `.trim();
50
+ const CommandHandlerIfCaseTemplate = ({
51
+ componentName,
52
+ commandName,
53
+ numArgs,
54
+ convertArgs,
55
+ commandCall,
56
+ }) =>
57
+ `
58
+ if ([commandName isEqualToString:@"${commandName}"]) {
59
+ #if RCT_DEBUG
60
+ if ([args count] != ${numArgs}) {
61
+ RCTLogError(@"%@ command %@ received %d arguments, expected %d.", @"${componentName}", commandName, (int)[args count], ${numArgs});
62
+ return;
63
+ }
64
+ #endif
65
+
66
+ ${convertArgs}
67
+
68
+ ${commandCall}
69
+ return;
70
+ }
71
+ `.trim();
72
+ const CommandHandlerTemplate = ({componentName, ifCases}) =>
73
+ `
74
+ RCT_EXTERN inline void RCT${componentName}HandleCommand(
75
+ id<RCT${componentName}ViewProtocol> componentView,
76
+ NSString const *commandName,
77
+ NSArray const *args)
78
+ {
79
+ ${ifCases}
80
+
81
+ #if RCT_DEBUG
82
+ RCTLogError(@"%@ received command %@, which is not a supported command.", @"${componentName}", commandName);
83
+ #endif
84
+ }
85
+ `.trim();
86
+ const FileTemplate = ({componentContent}) =>
87
+ `
88
+ /**
89
+ * This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen).
90
+ *
91
+ * Do not edit this file as changes may cause incorrect behavior and will be lost
92
+ * once the code is regenerated.
93
+ *
94
+ * ${'@'}generated by codegen project: GenerateComponentHObjCpp.js
95
+ */
96
+
97
+ #import <Foundation/Foundation.h>
98
+ #import <React/RCTDefines.h>
99
+ #import <React/RCTLog.h>
100
+
101
+ NS_ASSUME_NONNULL_BEGIN
102
+
103
+ ${componentContent}
104
+
105
+ NS_ASSUME_NONNULL_END
106
+ `.trim();
107
+ function getObjCParamType(param) {
108
+ const typeAnnotation = param.typeAnnotation;
109
+ switch (typeAnnotation.type) {
110
+ case 'ReservedTypeAnnotation':
111
+ switch (typeAnnotation.name) {
112
+ case 'RootTag':
113
+ return 'double';
114
+ default:
115
+ typeAnnotation.name;
116
+ throw new Error(`Receieved invalid type: ${typeAnnotation.name}`);
117
+ }
118
+ case 'BooleanTypeAnnotation':
119
+ return 'BOOL';
120
+ case 'DoubleTypeAnnotation':
121
+ return 'double';
122
+ case 'FloatTypeAnnotation':
123
+ return 'float';
124
+ case 'Int32TypeAnnotation':
125
+ return 'NSInteger';
126
+ case 'StringTypeAnnotation':
127
+ return 'NSString *';
128
+ default:
129
+ typeAnnotation.type;
130
+ throw new Error('Received invalid param type annotation');
131
+ }
132
+ }
133
+ function getObjCExpectedKindParamType(param) {
134
+ const typeAnnotation = param.typeAnnotation;
135
+ switch (typeAnnotation.type) {
136
+ case 'ReservedTypeAnnotation':
137
+ switch (typeAnnotation.name) {
138
+ case 'RootTag':
139
+ return '[NSNumber class]';
140
+ default:
141
+ typeAnnotation.name;
142
+ throw new Error(`Receieved invalid type: ${typeAnnotation.name}`);
143
+ }
144
+ case 'BooleanTypeAnnotation':
145
+ return '[NSNumber class]';
146
+ case 'DoubleTypeAnnotation':
147
+ return '[NSNumber class]';
148
+ case 'FloatTypeAnnotation':
149
+ return '[NSNumber class]';
150
+ case 'Int32TypeAnnotation':
151
+ return '[NSNumber class]';
152
+ case 'StringTypeAnnotation':
153
+ return '[NSString class]';
154
+ default:
155
+ typeAnnotation.type;
156
+ throw new Error('Received invalid param type annotation');
157
+ }
158
+ }
159
+ function getReadableExpectedKindParamType(param) {
160
+ const typeAnnotation = param.typeAnnotation;
161
+ switch (typeAnnotation.type) {
162
+ case 'ReservedTypeAnnotation':
163
+ switch (typeAnnotation.name) {
164
+ case 'RootTag':
165
+ return 'double';
166
+ default:
167
+ typeAnnotation.name;
168
+ throw new Error(`Receieved invalid type: ${typeAnnotation.name}`);
169
+ }
170
+ case 'BooleanTypeAnnotation':
171
+ return 'boolean';
172
+ case 'DoubleTypeAnnotation':
173
+ return 'double';
174
+ case 'FloatTypeAnnotation':
175
+ return 'float';
176
+ case 'Int32TypeAnnotation':
177
+ return 'number';
178
+ case 'StringTypeAnnotation':
179
+ return 'string';
180
+ default:
181
+ typeAnnotation.type;
182
+ throw new Error('Received invalid param type annotation');
183
+ }
184
+ }
185
+ function getObjCRightHandAssignmentParamType(param, index) {
186
+ const typeAnnotation = param.typeAnnotation;
187
+ switch (typeAnnotation.type) {
188
+ case 'ReservedTypeAnnotation':
189
+ switch (typeAnnotation.name) {
190
+ case 'RootTag':
191
+ return `[(NSNumber *)arg${index} doubleValue]`;
192
+ default:
193
+ typeAnnotation.name;
194
+ throw new Error(`Receieved invalid type: ${typeAnnotation.name}`);
195
+ }
196
+ case 'BooleanTypeAnnotation':
197
+ return `[(NSNumber *)arg${index} boolValue]`;
198
+ case 'DoubleTypeAnnotation':
199
+ return `[(NSNumber *)arg${index} doubleValue]`;
200
+ case 'FloatTypeAnnotation':
201
+ return `[(NSNumber *)arg${index} floatValue]`;
202
+ case 'Int32TypeAnnotation':
203
+ return `[(NSNumber *)arg${index} intValue]`;
204
+ case 'StringTypeAnnotation':
205
+ return `(NSString *)arg${index}`;
206
+ default:
207
+ typeAnnotation.type;
208
+ throw new Error('Received invalid param type annotation');
209
+ }
210
+ }
211
+ function generateProtocol(component, componentName) {
212
+ const methods = component.commands
213
+ .map(command => {
214
+ const params = command.typeAnnotation.params;
215
+ const paramString =
216
+ params.length === 0
217
+ ? ''
218
+ : params
219
+ .map((param, index) => {
220
+ const objCType = getObjCParamType(param);
221
+ return `${index === 0 ? '' : param.name}:(${objCType})${
222
+ param.name
223
+ }`;
224
+ })
225
+ .join(' ');
226
+ return `- (void)${command.name}${paramString};`;
227
+ })
228
+ .join('\n')
229
+ .trim();
230
+ return ProtocolTemplate({
231
+ componentName,
232
+ methods,
233
+ });
234
+ }
235
+ function generateConvertAndValidateParam(param, index, componentName) {
236
+ const leftSideType = getObjCParamType(param);
237
+ const expectedKind = getObjCExpectedKindParamType(param);
238
+ const expectedKindString = getReadableExpectedKindParamType(param);
239
+ const argConversion = `${leftSideType} ${
240
+ param.name
241
+ } = ${getObjCRightHandAssignmentParamType(param, index)};`;
242
+ return CommandHandlerIfCaseConvertArgTemplate({
243
+ componentName,
244
+ argConversion,
245
+ argNumber: index,
246
+ argNumberString: getOrdinalNumber(index + 1),
247
+ expectedKind,
248
+ expectedKindString,
249
+ });
250
+ }
251
+ function generateCommandIfCase(command, componentName) {
252
+ const params = command.typeAnnotation.params;
253
+ const convertArgs = params
254
+ .map((param, index) =>
255
+ generateConvertAndValidateParam(param, index, componentName),
256
+ )
257
+ .join('\n\n')
258
+ .trim();
259
+ const commandCallArgs =
260
+ params.length === 0
261
+ ? ''
262
+ : params
263
+ .map((param, index) => {
264
+ return `${index === 0 ? '' : param.name}:${param.name}`;
265
+ })
266
+ .join(' ');
267
+ const commandCall = `[componentView ${command.name}${commandCallArgs}];`;
268
+ return CommandHandlerIfCaseTemplate({
269
+ componentName,
270
+ commandName: command.name,
271
+ numArgs: params.length,
272
+ convertArgs,
273
+ commandCall,
274
+ });
275
+ }
276
+ function generateCommandHandler(component, componentName) {
277
+ if (component.commands.length === 0) {
278
+ return null;
279
+ }
280
+ const ifCases = component.commands
281
+ .map(command => generateCommandIfCase(command, componentName))
282
+ .join('\n\n');
283
+ return CommandHandlerTemplate({
284
+ componentName,
285
+ ifCases,
286
+ });
287
+ }
288
+ module.exports = {
289
+ generate(libraryName, schema, packageName, assumeNonnull = false) {
290
+ const fileName = 'RCTComponentViewHelpers.h';
291
+ const componentContent = Object.keys(schema.modules)
292
+ .map(moduleName => {
293
+ const module = schema.modules[moduleName];
294
+ if (module.type !== 'Component') {
295
+ return;
296
+ }
297
+ const components = module.components;
298
+ // No components in this module
299
+ if (components == null) {
300
+ return null;
301
+ }
302
+ return Object.keys(components)
303
+ .filter(componentName => {
304
+ const component = components[componentName];
305
+ return !(
306
+ component.excludedPlatforms &&
307
+ component.excludedPlatforms.includes('iOS')
308
+ );
309
+ })
310
+ .map(componentName => {
311
+ return [
312
+ generateProtocol(components[componentName], componentName),
313
+ generateCommandHandler(components[componentName], componentName),
314
+ ]
315
+ .join('\n\n')
316
+ .trim();
317
+ })
318
+ .join('\n\n');
319
+ })
320
+ .filter(Boolean)
321
+ .join('\n\n');
322
+ const replacedTemplate = FileTemplate({
323
+ componentContent,
324
+ });
325
+ return new Map([[fileName, replacedTemplate]]);
326
+ },
327
+ };