@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,373 @@
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 _slicedToArray(arr, i) {
14
+ return (
15
+ _arrayWithHoles(arr) ||
16
+ _iterableToArrayLimit(arr, i) ||
17
+ _unsupportedIterableToArray(arr, i) ||
18
+ _nonIterableRest()
19
+ );
20
+ }
21
+ function _nonIterableRest() {
22
+ throw new TypeError(
23
+ 'Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.',
24
+ );
25
+ }
26
+ function _unsupportedIterableToArray(o, minLen) {
27
+ if (!o) return;
28
+ if (typeof o === 'string') return _arrayLikeToArray(o, minLen);
29
+ var n = Object.prototype.toString.call(o).slice(8, -1);
30
+ if (n === 'Object' && o.constructor) n = o.constructor.name;
31
+ if (n === 'Map' || n === 'Set') return Array.from(o);
32
+ if (n === 'Arguments' || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))
33
+ return _arrayLikeToArray(o, minLen);
34
+ }
35
+ function _arrayLikeToArray(arr, len) {
36
+ if (len == null || len > arr.length) len = arr.length;
37
+ for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];
38
+ return arr2;
39
+ }
40
+ function _iterableToArrayLimit(arr, i) {
41
+ var _i =
42
+ null == arr
43
+ ? null
44
+ : ('undefined' != typeof Symbol && arr[Symbol.iterator]) ||
45
+ arr['@@iterator'];
46
+ if (null != _i) {
47
+ var _s,
48
+ _e,
49
+ _x,
50
+ _r,
51
+ _arr = [],
52
+ _n = !0,
53
+ _d = !1;
54
+ try {
55
+ if (((_x = (_i = _i.call(arr)).next), 0 === i)) {
56
+ if (Object(_i) !== _i) return;
57
+ _n = !1;
58
+ } else
59
+ for (
60
+ ;
61
+ !(_n = (_s = _x.call(_i)).done) &&
62
+ (_arr.push(_s.value), _arr.length !== i);
63
+ _n = !0
64
+ );
65
+ } catch (err) {
66
+ (_d = !0), (_e = err);
67
+ } finally {
68
+ try {
69
+ if (!_n && null != _i.return && ((_r = _i.return()), Object(_r) !== _r))
70
+ return;
71
+ } finally {
72
+ if (_d) throw _e;
73
+ }
74
+ }
75
+ return _arr;
76
+ }
77
+ }
78
+ function _arrayWithHoles(arr) {
79
+ if (Array.isArray(arr)) return arr;
80
+ }
81
+ const _require = require('./Utils'),
82
+ createAliasResolver = _require.createAliasResolver,
83
+ getModules = _require.getModules;
84
+ const _require2 = require('../Utils'),
85
+ indent = _require2.indent;
86
+ const _require3 = require('../../parsers/parsers-commons'),
87
+ unwrapNullable = _require3.unwrapNullable;
88
+ const ModuleClassDeclarationTemplate = ({
89
+ hasteModuleName,
90
+ moduleProperties,
91
+ structs,
92
+ }) => {
93
+ return `${structs}class JSI_EXPORT ${hasteModuleName}CxxSpecJSI : public TurboModule {
94
+ protected:
95
+ ${hasteModuleName}CxxSpecJSI(std::shared_ptr<CallInvoker> jsInvoker);
96
+
97
+ public:
98
+ ${indent(moduleProperties.join('\n'), 2)}
99
+
100
+ };`;
101
+ };
102
+ const ModuleSpecClassDeclarationTemplate = ({
103
+ hasteModuleName,
104
+ moduleName,
105
+ moduleProperties,
106
+ }) => {
107
+ return `template <typename T>
108
+ class JSI_EXPORT ${hasteModuleName}CxxSpec : public TurboModule {
109
+ public:
110
+ jsi::Value get(jsi::Runtime &rt, const jsi::PropNameID &propName) override {
111
+ return delegate_.get(rt, propName);
112
+ }
113
+
114
+ protected:
115
+ ${hasteModuleName}CxxSpec(std::shared_ptr<CallInvoker> jsInvoker)
116
+ : TurboModule("${moduleName}", jsInvoker),
117
+ delegate_(static_cast<T*>(this), jsInvoker) {}
118
+
119
+ private:
120
+ class Delegate : public ${hasteModuleName}CxxSpecJSI {
121
+ public:
122
+ Delegate(T *instance, std::shared_ptr<CallInvoker> jsInvoker) :
123
+ ${hasteModuleName}CxxSpecJSI(std::move(jsInvoker)), instance_(instance) {}
124
+
125
+ ${indent(moduleProperties.join('\n'), 4)}
126
+
127
+ private:
128
+ T *instance_;
129
+ };
130
+
131
+ Delegate delegate_;
132
+ };`;
133
+ };
134
+ const FileTemplate = ({modules}) => {
135
+ return `/**
136
+ * This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen).
137
+ *
138
+ * Do not edit this file as changes may cause incorrect behavior and will be lost
139
+ * once the code is regenerated.
140
+ *
141
+ * ${'@'}generated by codegen project: GenerateModuleH.js
142
+ */
143
+
144
+ #pragma once
145
+
146
+ #include <ReactCommon/TurboModule.h>
147
+ #include <react/bridging/Bridging.h>
148
+
149
+ namespace facebook {
150
+ namespace react {
151
+
152
+ ${modules.join('\n\n')}
153
+
154
+ } // namespace react
155
+ } // namespace facebook
156
+ `;
157
+ };
158
+ function translatePrimitiveJSTypeToCpp(
159
+ nullableTypeAnnotation,
160
+ optional,
161
+ createErrorMessage,
162
+ resolveAlias,
163
+ ) {
164
+ const _unwrapNullable = unwrapNullable(nullableTypeAnnotation),
165
+ _unwrapNullable2 = _slicedToArray(_unwrapNullable, 2),
166
+ typeAnnotation = _unwrapNullable2[0],
167
+ nullable = _unwrapNullable2[1];
168
+ const isRequired = !optional && !nullable;
169
+ let realTypeAnnotation = typeAnnotation;
170
+ if (realTypeAnnotation.type === 'TypeAliasTypeAnnotation') {
171
+ realTypeAnnotation = resolveAlias(realTypeAnnotation.name);
172
+ }
173
+ function wrap(type) {
174
+ return isRequired ? type : `std::optional<${type}>`;
175
+ }
176
+ switch (realTypeAnnotation.type) {
177
+ case 'ReservedTypeAnnotation':
178
+ switch (realTypeAnnotation.name) {
179
+ case 'RootTag':
180
+ return wrap('double');
181
+ default:
182
+ realTypeAnnotation.name;
183
+ throw new Error(createErrorMessage(realTypeAnnotation.name));
184
+ }
185
+ case 'VoidTypeAnnotation':
186
+ return 'void';
187
+ case 'StringTypeAnnotation':
188
+ return wrap('jsi::String');
189
+ case 'NumberTypeAnnotation':
190
+ return wrap('double');
191
+ case 'DoubleTypeAnnotation':
192
+ return wrap('double');
193
+ case 'FloatTypeAnnotation':
194
+ return wrap('double');
195
+ case 'Int32TypeAnnotation':
196
+ return wrap('int');
197
+ case 'BooleanTypeAnnotation':
198
+ return wrap('bool');
199
+ case 'EnumDeclaration':
200
+ switch (realTypeAnnotation.memberType) {
201
+ case 'NumberTypeAnnotation':
202
+ return wrap('double');
203
+ case 'StringTypeAnnotation':
204
+ return wrap('jsi::String');
205
+ default:
206
+ throw new Error(createErrorMessage(realTypeAnnotation.type));
207
+ }
208
+ case 'GenericObjectTypeAnnotation':
209
+ return wrap('jsi::Object');
210
+ case 'UnionTypeAnnotation':
211
+ switch (typeAnnotation.memberType) {
212
+ case 'NumberTypeAnnotation':
213
+ return wrap('double');
214
+ case 'ObjectTypeAnnotation':
215
+ return wrap('jsi::Object');
216
+ case 'StringTypeAnnotation':
217
+ return wrap('jsi::String');
218
+ default:
219
+ throw new Error(createErrorMessage(realTypeAnnotation.type));
220
+ }
221
+ case 'ObjectTypeAnnotation':
222
+ return wrap('jsi::Object');
223
+ case 'ArrayTypeAnnotation':
224
+ return wrap('jsi::Array');
225
+ case 'FunctionTypeAnnotation':
226
+ return wrap('jsi::Function');
227
+ case 'PromiseTypeAnnotation':
228
+ return wrap('jsi::Value');
229
+ case 'MixedTypeAnnotation':
230
+ return wrap('jsi::Value');
231
+ default:
232
+ realTypeAnnotation.type;
233
+ throw new Error(createErrorMessage(realTypeAnnotation.type));
234
+ }
235
+ }
236
+ function createStructs(moduleName, aliasMap, resolveAlias) {
237
+ return Object.keys(aliasMap)
238
+ .map(alias => {
239
+ const value = aliasMap[alias];
240
+ if (value.properties.length === 0) {
241
+ return '';
242
+ }
243
+ const structName = `${moduleName}Base${alias}`;
244
+ const templateParameterWithTypename = value.properties
245
+ .map((v, i) => 'typename P' + i)
246
+ .join(', ');
247
+ const templateParameter = value.properties
248
+ .map((v, i) => 'P' + i)
249
+ .join(', ');
250
+ return `#pragma mark - ${structName}
251
+
252
+ template <${templateParameterWithTypename}>
253
+ struct ${structName} {
254
+ ${value.properties.map((v, i) => ' P' + i + ' ' + v.name).join(';\n')};
255
+ bool operator==(const ${structName} &other) const {
256
+ return ${value.properties
257
+ .map(v => `${v.name} == other.${v.name}`)
258
+ .join(' && ')};
259
+ }
260
+ };
261
+
262
+ template <${templateParameterWithTypename}>
263
+ struct ${structName}Bridging {
264
+ static ${structName}<${templateParameter}> fromJs(
265
+ jsi::Runtime &rt,
266
+ const jsi::Object &value,
267
+ const std::shared_ptr<CallInvoker> &jsInvoker) {
268
+ ${structName}<${templateParameter}> result{
269
+ ${value.properties
270
+ .map(
271
+ (v, i) =>
272
+ ` bridging::fromJs<P${i}>(rt, value.getProperty(rt, "${v.name}"), jsInvoker)`,
273
+ )
274
+ .join(',\n')}};
275
+ return result;
276
+ }
277
+
278
+ static jsi::Object toJs(
279
+ jsi::Runtime &rt,
280
+ const ${structName}<${templateParameter}> &value) {
281
+ auto result = facebook::jsi::Object(rt);
282
+ ${value.properties
283
+ .map((v, i) => {
284
+ if (v.optional) {
285
+ return ` if (value.${v.name}) {
286
+ result.setProperty(rt, "${v.name}", bridging::toJs(rt, value.${v.name}.value()));
287
+ }`;
288
+ } else {
289
+ return ` result.setProperty(rt, "${v.name}", bridging::toJs(rt, value.${v.name}));`;
290
+ }
291
+ })
292
+ .join('\n')}
293
+ return result;
294
+ }
295
+ };
296
+
297
+ `;
298
+ })
299
+ .join('\n');
300
+ }
301
+ function translatePropertyToCpp(prop, resolveAlias, abstract = false) {
302
+ const _unwrapNullable3 = unwrapNullable(prop.typeAnnotation),
303
+ _unwrapNullable4 = _slicedToArray(_unwrapNullable3, 1),
304
+ propTypeAnnotation = _unwrapNullable4[0];
305
+ const params = propTypeAnnotation.params.map(
306
+ param => `std::move(${param.name})`,
307
+ );
308
+ const paramTypes = propTypeAnnotation.params.map(param => {
309
+ const translatedParam = translatePrimitiveJSTypeToCpp(
310
+ param.typeAnnotation,
311
+ param.optional,
312
+ typeName =>
313
+ `Unsupported type for param "${param.name}" in ${prop.name}. Found: ${typeName}`,
314
+ resolveAlias,
315
+ );
316
+ return `${translatedParam} ${param.name}`;
317
+ });
318
+ const returnType = translatePrimitiveJSTypeToCpp(
319
+ propTypeAnnotation.returnTypeAnnotation,
320
+ false,
321
+ typeName => `Unsupported return type for ${prop.name}. Found: ${typeName}`,
322
+ resolveAlias,
323
+ );
324
+
325
+ // The first param will always be the runtime reference.
326
+ paramTypes.unshift('jsi::Runtime &rt');
327
+ const method = `${returnType} ${prop.name}(${paramTypes.join(', ')})`;
328
+ if (abstract) {
329
+ return `virtual ${method} = 0;`;
330
+ }
331
+ return `${method} override {
332
+ static_assert(
333
+ bridging::getParameterCount(&T::${prop.name}) == ${paramTypes.length},
334
+ "Expected ${prop.name}(...) to have ${paramTypes.length} parameters");
335
+
336
+ return bridging::callFromJs<${returnType}>(
337
+ rt, &T::${prop.name}, jsInvoker_, ${['instance_', ...params].join(', ')});
338
+ }`;
339
+ }
340
+ module.exports = {
341
+ generate(libraryName, schema, packageName, assumeNonnull = false) {
342
+ const nativeModules = getModules(schema);
343
+ const modules = Object.keys(nativeModules).flatMap(hasteModuleName => {
344
+ const _nativeModules$hasteM = nativeModules[hasteModuleName],
345
+ aliases = _nativeModules$hasteM.aliases,
346
+ properties = _nativeModules$hasteM.spec.properties,
347
+ moduleName = _nativeModules$hasteM.moduleName;
348
+ const resolveAlias = createAliasResolver(aliases);
349
+ const structs = createStructs(moduleName, aliases, resolveAlias);
350
+ return [
351
+ ModuleClassDeclarationTemplate({
352
+ hasteModuleName,
353
+ moduleProperties: properties.map(prop =>
354
+ translatePropertyToCpp(prop, resolveAlias, true),
355
+ ),
356
+ structs,
357
+ }),
358
+ ModuleSpecClassDeclarationTemplate({
359
+ hasteModuleName,
360
+ moduleName,
361
+ moduleProperties: properties.map(prop =>
362
+ translatePropertyToCpp(prop, resolveAlias),
363
+ ),
364
+ }),
365
+ ];
366
+ });
367
+ const fileName = `${libraryName}JSI.h`;
368
+ const replacedTemplate = FileTemplate({
369
+ modules,
370
+ });
371
+ return new Map([[fileName, replacedTemplate]]);
372
+ },
373
+ };