@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,505 @@
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('../../parsers/parsers-commons'),
85
+ unwrapNullable = _require2.unwrapNullable;
86
+ const HostFunctionTemplate = ({
87
+ hasteModuleName,
88
+ propertyName,
89
+ jniSignature,
90
+ jsReturnType,
91
+ }) => {
92
+ return `static facebook::jsi::Value __hostFunction_${hasteModuleName}SpecJSI_${propertyName}(facebook::jsi::Runtime& rt, TurboModule &turboModule, const facebook::jsi::Value* args, size_t count) {
93
+ static jmethodID cachedMethodId = nullptr;
94
+ return static_cast<JavaTurboModule &>(turboModule).invokeJavaMethod(rt, ${jsReturnType}, "${propertyName}", "${jniSignature}", args, count, cachedMethodId);
95
+ }`;
96
+ };
97
+ const ModuleClassConstructorTemplate = ({hasteModuleName, methods}) => {
98
+ return `
99
+ ${hasteModuleName}SpecJSI::${hasteModuleName}SpecJSI(const JavaTurboModule::InitParams &params)
100
+ : JavaTurboModule(params) {
101
+ ${methods
102
+ .map(({propertyName, argCount}) => {
103
+ return ` methodMap_["${propertyName}"] = MethodMetadata {${argCount}, __hostFunction_${hasteModuleName}SpecJSI_${propertyName}};`;
104
+ })
105
+ .join('\n')}
106
+ }`.trim();
107
+ };
108
+ const ModuleLookupTemplate = ({moduleName, hasteModuleName}) => {
109
+ return ` if (moduleName == "${moduleName}") {
110
+ return std::make_shared<${hasteModuleName}SpecJSI>(params);
111
+ }`;
112
+ };
113
+ const FileTemplate = ({libraryName, include, modules, moduleLookups}) => {
114
+ return `
115
+ /**
116
+ * This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen).
117
+ *
118
+ * Do not edit this file as changes may cause incorrect behavior and will be lost
119
+ * once the code is regenerated.
120
+ *
121
+ * ${'@'}generated by codegen project: GenerateModuleJniCpp.js
122
+ */
123
+
124
+ #include ${include}
125
+
126
+ namespace facebook {
127
+ namespace react {
128
+
129
+ ${modules}
130
+
131
+ std::shared_ptr<TurboModule> ${libraryName}_ModuleProvider(const std::string &moduleName, const JavaTurboModule::InitParams &params) {
132
+ ${moduleLookups.map(ModuleLookupTemplate).join('\n')}
133
+ return nullptr;
134
+ }
135
+
136
+ } // namespace react
137
+ } // namespace facebook
138
+ `;
139
+ };
140
+ function translateReturnTypeToKind(nullableTypeAnnotation, resolveAlias) {
141
+ const _unwrapNullable = unwrapNullable(nullableTypeAnnotation),
142
+ _unwrapNullable2 = _slicedToArray(_unwrapNullable, 1),
143
+ typeAnnotation = _unwrapNullable2[0];
144
+ let realTypeAnnotation = typeAnnotation;
145
+ if (realTypeAnnotation.type === 'TypeAliasTypeAnnotation') {
146
+ realTypeAnnotation = resolveAlias(realTypeAnnotation.name);
147
+ }
148
+ switch (realTypeAnnotation.type) {
149
+ case 'ReservedTypeAnnotation':
150
+ switch (realTypeAnnotation.name) {
151
+ case 'RootTag':
152
+ return 'NumberKind';
153
+ default:
154
+ realTypeAnnotation.name;
155
+ throw new Error(
156
+ `Invalid ReservedFunctionValueTypeName name, got ${realTypeAnnotation.name}`,
157
+ );
158
+ }
159
+ case 'VoidTypeAnnotation':
160
+ return 'VoidKind';
161
+ case 'StringTypeAnnotation':
162
+ return 'StringKind';
163
+ case 'BooleanTypeAnnotation':
164
+ return 'BooleanKind';
165
+ case 'EnumDeclaration':
166
+ switch (typeAnnotation.memberType) {
167
+ case 'NumberTypeAnnotation':
168
+ return 'NumberKind';
169
+ case 'StringTypeAnnotation':
170
+ return 'StringKind';
171
+ default:
172
+ throw new Error(
173
+ `Unknown enum prop type for returning value, found: ${realTypeAnnotation.type}"`,
174
+ );
175
+ }
176
+ case 'UnionTypeAnnotation':
177
+ switch (typeAnnotation.memberType) {
178
+ case 'NumberTypeAnnotation':
179
+ return 'NumberKind';
180
+ case 'ObjectTypeAnnotation':
181
+ return 'ObjectKind';
182
+ case 'StringTypeAnnotation':
183
+ return 'StringKind';
184
+ default:
185
+ throw new Error(
186
+ `Unsupported union member returning value, found: ${realTypeAnnotation.memberType}"`,
187
+ );
188
+ }
189
+ case 'NumberTypeAnnotation':
190
+ return 'NumberKind';
191
+ case 'DoubleTypeAnnotation':
192
+ return 'NumberKind';
193
+ case 'FloatTypeAnnotation':
194
+ return 'NumberKind';
195
+ case 'Int32TypeAnnotation':
196
+ return 'NumberKind';
197
+ case 'PromiseTypeAnnotation':
198
+ return 'PromiseKind';
199
+ case 'GenericObjectTypeAnnotation':
200
+ return 'ObjectKind';
201
+ case 'ObjectTypeAnnotation':
202
+ return 'ObjectKind';
203
+ case 'ArrayTypeAnnotation':
204
+ return 'ArrayKind';
205
+ default:
206
+ realTypeAnnotation.type;
207
+ throw new Error(
208
+ `Unknown prop type for returning value, found: ${realTypeAnnotation.type}"`,
209
+ );
210
+ }
211
+ }
212
+ function translateParamTypeToJniType(param, resolveAlias) {
213
+ const optional = param.optional,
214
+ nullableTypeAnnotation = param.typeAnnotation;
215
+ const _unwrapNullable3 = unwrapNullable(nullableTypeAnnotation),
216
+ _unwrapNullable4 = _slicedToArray(_unwrapNullable3, 2),
217
+ typeAnnotation = _unwrapNullable4[0],
218
+ nullable = _unwrapNullable4[1];
219
+ const isRequired = !optional && !nullable;
220
+ let realTypeAnnotation = typeAnnotation;
221
+ if (realTypeAnnotation.type === 'TypeAliasTypeAnnotation') {
222
+ realTypeAnnotation = resolveAlias(realTypeAnnotation.name);
223
+ }
224
+ switch (realTypeAnnotation.type) {
225
+ case 'ReservedTypeAnnotation':
226
+ switch (realTypeAnnotation.name) {
227
+ case 'RootTag':
228
+ return !isRequired ? 'Ljava/lang/Double;' : 'D';
229
+ default:
230
+ realTypeAnnotation.name;
231
+ throw new Error(
232
+ `Invalid ReservedFunctionValueTypeName name, got ${realTypeAnnotation.name}`,
233
+ );
234
+ }
235
+ case 'StringTypeAnnotation':
236
+ return 'Ljava/lang/String;';
237
+ case 'BooleanTypeAnnotation':
238
+ return !isRequired ? 'Ljava/lang/Boolean;' : 'Z';
239
+ case 'EnumDeclaration':
240
+ switch (typeAnnotation.memberType) {
241
+ case 'NumberTypeAnnotation':
242
+ return !isRequired ? 'Ljava/lang/Double;' : 'D';
243
+ case 'StringTypeAnnotation':
244
+ return 'Ljava/lang/String;';
245
+ default:
246
+ throw new Error(
247
+ `Unknown enum prop type for method arg, found: ${realTypeAnnotation.type}"`,
248
+ );
249
+ }
250
+ case 'UnionTypeAnnotation':
251
+ switch (typeAnnotation.memberType) {
252
+ case 'NumberTypeAnnotation':
253
+ return !isRequired ? 'Ljava/lang/Double;' : 'D';
254
+ case 'ObjectTypeAnnotation':
255
+ return 'Lcom/facebook/react/bridge/ReadableMap;';
256
+ case 'StringTypeAnnotation':
257
+ return 'Ljava/lang/String;';
258
+ default:
259
+ throw new Error(
260
+ `Unsupported union prop value, found: ${realTypeAnnotation.memberType}"`,
261
+ );
262
+ }
263
+ case 'NumberTypeAnnotation':
264
+ return !isRequired ? 'Ljava/lang/Double;' : 'D';
265
+ case 'DoubleTypeAnnotation':
266
+ return !isRequired ? 'Ljava/lang/Double;' : 'D';
267
+ case 'FloatTypeAnnotation':
268
+ return !isRequired ? 'Ljava/lang/Double;' : 'D';
269
+ case 'Int32TypeAnnotation':
270
+ return !isRequired ? 'Ljava/lang/Double;' : 'D';
271
+ case 'GenericObjectTypeAnnotation':
272
+ return 'Lcom/facebook/react/bridge/ReadableMap;';
273
+ case 'ObjectTypeAnnotation':
274
+ return 'Lcom/facebook/react/bridge/ReadableMap;';
275
+ case 'ArrayTypeAnnotation':
276
+ return 'Lcom/facebook/react/bridge/ReadableArray;';
277
+ case 'FunctionTypeAnnotation':
278
+ return 'Lcom/facebook/react/bridge/Callback;';
279
+ default:
280
+ realTypeAnnotation.type;
281
+ throw new Error(
282
+ `Unknown prop type for method arg, found: ${realTypeAnnotation.type}"`,
283
+ );
284
+ }
285
+ }
286
+ function translateReturnTypeToJniType(nullableTypeAnnotation, resolveAlias) {
287
+ const _unwrapNullable5 = unwrapNullable(nullableTypeAnnotation),
288
+ _unwrapNullable6 = _slicedToArray(_unwrapNullable5, 2),
289
+ typeAnnotation = _unwrapNullable6[0],
290
+ nullable = _unwrapNullable6[1];
291
+ let realTypeAnnotation = typeAnnotation;
292
+ if (realTypeAnnotation.type === 'TypeAliasTypeAnnotation') {
293
+ realTypeAnnotation = resolveAlias(realTypeAnnotation.name);
294
+ }
295
+ switch (realTypeAnnotation.type) {
296
+ case 'ReservedTypeAnnotation':
297
+ switch (realTypeAnnotation.name) {
298
+ case 'RootTag':
299
+ return nullable ? 'Ljava/lang/Double;' : 'D';
300
+ default:
301
+ realTypeAnnotation.name;
302
+ throw new Error(
303
+ `Invalid ReservedFunctionValueTypeName name, got ${realTypeAnnotation.name}`,
304
+ );
305
+ }
306
+ case 'VoidTypeAnnotation':
307
+ return 'V';
308
+ case 'StringTypeAnnotation':
309
+ return 'Ljava/lang/String;';
310
+ case 'BooleanTypeAnnotation':
311
+ return nullable ? 'Ljava/lang/Boolean;' : 'Z';
312
+ case 'EnumDeclaration':
313
+ switch (typeAnnotation.memberType) {
314
+ case 'NumberTypeAnnotation':
315
+ return nullable ? 'Ljava/lang/Double;' : 'D';
316
+ case 'StringTypeAnnotation':
317
+ return 'Ljava/lang/String;';
318
+ default:
319
+ throw new Error(
320
+ `Unknown enum prop type for method return type, found: ${realTypeAnnotation.type}"`,
321
+ );
322
+ }
323
+ case 'UnionTypeAnnotation':
324
+ switch (typeAnnotation.memberType) {
325
+ case 'NumberTypeAnnotation':
326
+ return nullable ? 'Ljava/lang/Double;' : 'D';
327
+ case 'ObjectTypeAnnotation':
328
+ return 'Lcom/facebook/react/bridge/WritableMap;';
329
+ case 'StringTypeAnnotation':
330
+ return 'Ljava/lang/String;';
331
+ default:
332
+ throw new Error(
333
+ `Unsupported union member type, found: ${realTypeAnnotation.memberType}"`,
334
+ );
335
+ }
336
+ case 'NumberTypeAnnotation':
337
+ return nullable ? 'Ljava/lang/Double;' : 'D';
338
+ case 'DoubleTypeAnnotation':
339
+ return nullable ? 'Ljava/lang/Double;' : 'D';
340
+ case 'FloatTypeAnnotation':
341
+ return nullable ? 'Ljava/lang/Double;' : 'D';
342
+ case 'Int32TypeAnnotation':
343
+ return nullable ? 'Ljava/lang/Double;' : 'D';
344
+ case 'PromiseTypeAnnotation':
345
+ return 'Lcom/facebook/react/bridge/Promise;';
346
+ case 'GenericObjectTypeAnnotation':
347
+ return 'Lcom/facebook/react/bridge/WritableMap;';
348
+ case 'ObjectTypeAnnotation':
349
+ return 'Lcom/facebook/react/bridge/WritableMap;';
350
+ case 'ArrayTypeAnnotation':
351
+ return 'Lcom/facebook/react/bridge/WritableArray;';
352
+ default:
353
+ realTypeAnnotation.type;
354
+ throw new Error(
355
+ `Unknown prop type for method return type, found: ${realTypeAnnotation.type}"`,
356
+ );
357
+ }
358
+ }
359
+ function translateMethodTypeToJniSignature(property, resolveAlias) {
360
+ const name = property.name,
361
+ typeAnnotation = property.typeAnnotation;
362
+ let _unwrapNullable7 = unwrapNullable(typeAnnotation),
363
+ _unwrapNullable8 = _slicedToArray(_unwrapNullable7, 1),
364
+ _unwrapNullable8$ = _unwrapNullable8[0],
365
+ returnTypeAnnotation = _unwrapNullable8$.returnTypeAnnotation,
366
+ params = _unwrapNullable8$.params;
367
+ params = [...params];
368
+ let processedReturnTypeAnnotation = returnTypeAnnotation;
369
+ const isPromiseReturn = returnTypeAnnotation.type === 'PromiseTypeAnnotation';
370
+ if (isPromiseReturn) {
371
+ processedReturnTypeAnnotation = {
372
+ type: 'VoidTypeAnnotation',
373
+ };
374
+ }
375
+ const argsSignatureParts = params.map(t => {
376
+ return translateParamTypeToJniType(t, resolveAlias);
377
+ });
378
+ if (isPromiseReturn) {
379
+ // Additional promise arg for this case.
380
+ argsSignatureParts.push(
381
+ translateReturnTypeToJniType(returnTypeAnnotation, resolveAlias),
382
+ );
383
+ }
384
+ const argsSignature = argsSignatureParts.join('');
385
+ const returnSignature =
386
+ name === 'getConstants'
387
+ ? 'Ljava/util/Map;'
388
+ : translateReturnTypeToJniType(
389
+ processedReturnTypeAnnotation,
390
+ resolveAlias,
391
+ );
392
+ return `(${argsSignature})${returnSignature}`;
393
+ }
394
+ function translateMethodForImplementation(
395
+ hasteModuleName,
396
+ property,
397
+ resolveAlias,
398
+ ) {
399
+ const _unwrapNullable9 = unwrapNullable(property.typeAnnotation),
400
+ _unwrapNullable10 = _slicedToArray(_unwrapNullable9, 1),
401
+ propertyTypeAnnotation = _unwrapNullable10[0];
402
+ const returnTypeAnnotation = propertyTypeAnnotation.returnTypeAnnotation;
403
+ if (
404
+ property.name === 'getConstants' &&
405
+ returnTypeAnnotation.type === 'ObjectTypeAnnotation' &&
406
+ returnTypeAnnotation.properties.length === 0
407
+ ) {
408
+ return '';
409
+ }
410
+ return HostFunctionTemplate({
411
+ hasteModuleName,
412
+ propertyName: property.name,
413
+ jniSignature: translateMethodTypeToJniSignature(property, resolveAlias),
414
+ jsReturnType: translateReturnTypeToKind(returnTypeAnnotation, resolveAlias),
415
+ });
416
+ }
417
+ module.exports = {
418
+ generate(libraryName, schema, packageName, assumeNonnull = false) {
419
+ const nativeModules = getModules(schema);
420
+ const modules = Object.keys(nativeModules)
421
+ .filter(hasteModuleName => {
422
+ const module = nativeModules[hasteModuleName];
423
+ return !(
424
+ module.excludedPlatforms != null &&
425
+ module.excludedPlatforms.includes('android')
426
+ );
427
+ })
428
+ .sort()
429
+ .map(hasteModuleName => {
430
+ const _nativeModules$hasteM = nativeModules[hasteModuleName],
431
+ aliases = _nativeModules$hasteM.aliases,
432
+ properties = _nativeModules$hasteM.spec.properties;
433
+ const resolveAlias = createAliasResolver(aliases);
434
+ const translatedMethods = properties
435
+ .map(property =>
436
+ translateMethodForImplementation(
437
+ hasteModuleName,
438
+ property,
439
+ resolveAlias,
440
+ ),
441
+ )
442
+ .join('\n\n');
443
+ return (
444
+ translatedMethods +
445
+ '\n\n' +
446
+ ModuleClassConstructorTemplate({
447
+ hasteModuleName,
448
+ methods: properties
449
+ .map(({name: propertyName, typeAnnotation}) => {
450
+ const _unwrapNullable11 = unwrapNullable(typeAnnotation),
451
+ _unwrapNullable12 = _slicedToArray(_unwrapNullable11, 1),
452
+ _unwrapNullable12$ = _unwrapNullable12[0],
453
+ returnTypeAnnotation =
454
+ _unwrapNullable12$.returnTypeAnnotation,
455
+ params = _unwrapNullable12$.params;
456
+ if (
457
+ propertyName === 'getConstants' &&
458
+ returnTypeAnnotation.type === 'ObjectTypeAnnotation' &&
459
+ returnTypeAnnotation.properties &&
460
+ returnTypeAnnotation.properties.length === 0
461
+ ) {
462
+ return null;
463
+ }
464
+ return {
465
+ propertyName,
466
+ argCount: params.length,
467
+ };
468
+ })
469
+ .filter(Boolean),
470
+ })
471
+ );
472
+ })
473
+ .join('\n');
474
+ const moduleLookups = Object.keys(nativeModules)
475
+ .filter(hasteModuleName => {
476
+ const module = nativeModules[hasteModuleName];
477
+ return !(
478
+ module.excludedPlatforms != null &&
479
+ module.excludedPlatforms.includes('android')
480
+ );
481
+ })
482
+ .sort((a, b) => {
483
+ const nameA = nativeModules[a].moduleName;
484
+ const nameB = nativeModules[b].moduleName;
485
+ if (nameA < nameB) {
486
+ return -1;
487
+ } else if (nameA > nameB) {
488
+ return 1;
489
+ }
490
+ return 0;
491
+ })
492
+ .map(hasteModuleName => ({
493
+ moduleName: nativeModules[hasteModuleName].moduleName,
494
+ hasteModuleName,
495
+ }));
496
+ const fileName = `${libraryName}-generated.cpp`;
497
+ const replacedTemplate = FileTemplate({
498
+ modules: modules,
499
+ libraryName: libraryName.replace(/-/g, '_'),
500
+ moduleLookups,
501
+ include: `"${libraryName}.h"`,
502
+ });
503
+ return new Map([[`jni/${fileName}`, replacedTemplate]]);
504
+ },
505
+ };