@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,528 @@
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 ownKeys(object, enumerableOnly) {
14
+ var keys = Object.keys(object);
15
+ if (Object.getOwnPropertySymbols) {
16
+ var symbols = Object.getOwnPropertySymbols(object);
17
+ enumerableOnly &&
18
+ (symbols = symbols.filter(function (sym) {
19
+ return Object.getOwnPropertyDescriptor(object, sym).enumerable;
20
+ })),
21
+ keys.push.apply(keys, symbols);
22
+ }
23
+ return keys;
24
+ }
25
+ function _objectSpread(target) {
26
+ for (var i = 1; i < arguments.length; i++) {
27
+ var source = null != arguments[i] ? arguments[i] : {};
28
+ i % 2
29
+ ? ownKeys(Object(source), !0).forEach(function (key) {
30
+ _defineProperty(target, key, source[key]);
31
+ })
32
+ : Object.getOwnPropertyDescriptors
33
+ ? Object.defineProperties(
34
+ target,
35
+ Object.getOwnPropertyDescriptors(source),
36
+ )
37
+ : ownKeys(Object(source)).forEach(function (key) {
38
+ Object.defineProperty(
39
+ target,
40
+ key,
41
+ Object.getOwnPropertyDescriptor(source, key),
42
+ );
43
+ });
44
+ }
45
+ return target;
46
+ }
47
+ function _defineProperty(obj, key, value) {
48
+ key = _toPropertyKey(key);
49
+ if (key in obj) {
50
+ Object.defineProperty(obj, key, {
51
+ value: value,
52
+ enumerable: true,
53
+ configurable: true,
54
+ writable: true,
55
+ });
56
+ } else {
57
+ obj[key] = value;
58
+ }
59
+ return obj;
60
+ }
61
+ function _toPropertyKey(arg) {
62
+ var key = _toPrimitive(arg, 'string');
63
+ return typeof key === 'symbol' ? key : String(key);
64
+ }
65
+ function _toPrimitive(input, hint) {
66
+ if (typeof input !== 'object' || input === null) return input;
67
+ var prim = input[Symbol.toPrimitive];
68
+ if (prim !== undefined) {
69
+ var res = prim.call(input, hint || 'default');
70
+ if (typeof res !== 'object') return res;
71
+ throw new TypeError('@@toPrimitive must return a primitive value.');
72
+ }
73
+ return (hint === 'string' ? String : Number)(input);
74
+ }
75
+ function _slicedToArray(arr, i) {
76
+ return (
77
+ _arrayWithHoles(arr) ||
78
+ _iterableToArrayLimit(arr, i) ||
79
+ _unsupportedIterableToArray(arr, i) ||
80
+ _nonIterableRest()
81
+ );
82
+ }
83
+ function _nonIterableRest() {
84
+ throw new TypeError(
85
+ 'Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.',
86
+ );
87
+ }
88
+ function _unsupportedIterableToArray(o, minLen) {
89
+ if (!o) return;
90
+ if (typeof o === 'string') return _arrayLikeToArray(o, minLen);
91
+ var n = Object.prototype.toString.call(o).slice(8, -1);
92
+ if (n === 'Object' && o.constructor) n = o.constructor.name;
93
+ if (n === 'Map' || n === 'Set') return Array.from(o);
94
+ if (n === 'Arguments' || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))
95
+ return _arrayLikeToArray(o, minLen);
96
+ }
97
+ function _arrayLikeToArray(arr, len) {
98
+ if (len == null || len > arr.length) len = arr.length;
99
+ for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];
100
+ return arr2;
101
+ }
102
+ function _iterableToArrayLimit(arr, i) {
103
+ var _i =
104
+ null == arr
105
+ ? null
106
+ : ('undefined' != typeof Symbol && arr[Symbol.iterator]) ||
107
+ arr['@@iterator'];
108
+ if (null != _i) {
109
+ var _s,
110
+ _e,
111
+ _x,
112
+ _r,
113
+ _arr = [],
114
+ _n = !0,
115
+ _d = !1;
116
+ try {
117
+ if (((_x = (_i = _i.call(arr)).next), 0 === i)) {
118
+ if (Object(_i) !== _i) return;
119
+ _n = !1;
120
+ } else
121
+ for (
122
+ ;
123
+ !(_n = (_s = _x.call(_i)).done) &&
124
+ (_arr.push(_s.value), _arr.length !== i);
125
+ _n = !0
126
+ );
127
+ } catch (err) {
128
+ (_d = !0), (_e = err);
129
+ } finally {
130
+ try {
131
+ if (!_n && null != _i.return && ((_r = _i.return()), Object(_r) !== _r))
132
+ return;
133
+ } finally {
134
+ if (_d) throw _e;
135
+ }
136
+ }
137
+ return _arr;
138
+ }
139
+ }
140
+ function _arrayWithHoles(arr) {
141
+ if (Array.isArray(arr)) return arr;
142
+ }
143
+ const _require = require('../../utils'),
144
+ visit = _require.visit,
145
+ isModuleRegistryCall = _require.isModuleRegistryCall,
146
+ verifyPlatforms = _require.verifyPlatforms;
147
+ const _require2 = require('../utils'),
148
+ resolveTypeAnnotation = _require2.resolveTypeAnnotation,
149
+ getTypes = _require2.getTypes;
150
+ const _require3 = require('../../parsers-commons'),
151
+ unwrapNullable = _require3.unwrapNullable,
152
+ wrapNullable = _require3.wrapNullable,
153
+ assertGenericTypeAnnotationHasExactlyOneTypeParameter =
154
+ _require3.assertGenericTypeAnnotationHasExactlyOneTypeParameter,
155
+ parseObjectProperty = _require3.parseObjectProperty,
156
+ translateDefault = _require3.translateDefault,
157
+ buildPropertySchema = _require3.buildPropertySchema;
158
+ const _require4 = require('../../parsers-primitives'),
159
+ emitArrayType = _require4.emitArrayType,
160
+ emitBoolean = _require4.emitBoolean,
161
+ emitDouble = _require4.emitDouble,
162
+ emitFloat = _require4.emitFloat,
163
+ emitFunction = _require4.emitFunction,
164
+ emitNumber = _require4.emitNumber,
165
+ emitInt32 = _require4.emitInt32,
166
+ emitObject = _require4.emitObject,
167
+ emitPromise = _require4.emitPromise,
168
+ emitRootTag = _require4.emitRootTag,
169
+ emitVoid = _require4.emitVoid,
170
+ emitString = _require4.emitString,
171
+ emitStringish = _require4.emitStringish,
172
+ emitMixed = _require4.emitMixed,
173
+ emitUnion = _require4.emitUnion,
174
+ typeAliasResolution = _require4.typeAliasResolution,
175
+ translateArrayTypeAnnotation = _require4.translateArrayTypeAnnotation;
176
+ const _require5 = require('../../errors'),
177
+ UnsupportedTypeAnnotationParserError =
178
+ _require5.UnsupportedTypeAnnotationParserError,
179
+ IncorrectModuleRegistryCallArgumentTypeParserError =
180
+ _require5.IncorrectModuleRegistryCallArgumentTypeParserError;
181
+ const _require6 = require('../../error-utils'),
182
+ throwIfModuleInterfaceNotFound = _require6.throwIfModuleInterfaceNotFound,
183
+ throwIfModuleInterfaceIsMisnamed = _require6.throwIfModuleInterfaceIsMisnamed,
184
+ throwIfUnusedModuleInterfaceParserError =
185
+ _require6.throwIfUnusedModuleInterfaceParserError,
186
+ throwIfWrongNumberOfCallExpressionArgs =
187
+ _require6.throwIfWrongNumberOfCallExpressionArgs,
188
+ throwIfMoreThanOneModuleRegistryCalls =
189
+ _require6.throwIfMoreThanOneModuleRegistryCalls,
190
+ throwIfIncorrectModuleRegistryCallTypeParameterParserError =
191
+ _require6.throwIfIncorrectModuleRegistryCallTypeParameterParserError,
192
+ throwIfUntypedModule = _require6.throwIfUntypedModule,
193
+ throwIfMoreThanOneModuleInterfaceParserError =
194
+ _require6.throwIfMoreThanOneModuleInterfaceParserError;
195
+ const _require7 = require('../parser'),
196
+ FlowParser = _require7.FlowParser;
197
+ const language = 'Flow';
198
+ const parser = new FlowParser();
199
+ function translateTypeAnnotation(
200
+ hasteModuleName,
201
+ /**
202
+ * TODO(T71778680): Flow-type this node.
203
+ */
204
+ flowTypeAnnotation,
205
+ types,
206
+ aliasMap,
207
+ tryParse,
208
+ cxxOnly,
209
+ ) {
210
+ const _resolveTypeAnnotatio = resolveTypeAnnotation(
211
+ flowTypeAnnotation,
212
+ types,
213
+ ),
214
+ nullable = _resolveTypeAnnotatio.nullable,
215
+ typeAnnotation = _resolveTypeAnnotatio.typeAnnotation,
216
+ typeAliasResolutionStatus = _resolveTypeAnnotatio.typeAliasResolutionStatus;
217
+ switch (typeAnnotation.type) {
218
+ case 'GenericTypeAnnotation': {
219
+ switch (typeAnnotation.id.name) {
220
+ case 'RootTag': {
221
+ return emitRootTag(nullable);
222
+ }
223
+ case 'Promise': {
224
+ return emitPromise(
225
+ hasteModuleName,
226
+ typeAnnotation,
227
+ parser,
228
+ nullable,
229
+ types,
230
+ aliasMap,
231
+ tryParse,
232
+ cxxOnly,
233
+ translateTypeAnnotation,
234
+ );
235
+ }
236
+ case 'Array':
237
+ case '$ReadOnlyArray': {
238
+ return emitArrayType(
239
+ hasteModuleName,
240
+ typeAnnotation,
241
+ parser,
242
+ types,
243
+ aliasMap,
244
+ cxxOnly,
245
+ nullable,
246
+ translateTypeAnnotation,
247
+ );
248
+ }
249
+ case '$ReadOnly': {
250
+ assertGenericTypeAnnotationHasExactlyOneTypeParameter(
251
+ hasteModuleName,
252
+ typeAnnotation,
253
+ parser,
254
+ );
255
+ const _unwrapNullable = unwrapNullable(
256
+ translateTypeAnnotation(
257
+ hasteModuleName,
258
+ typeAnnotation.typeParameters.params[0],
259
+ types,
260
+ aliasMap,
261
+ tryParse,
262
+ cxxOnly,
263
+ ),
264
+ ),
265
+ _unwrapNullable2 = _slicedToArray(_unwrapNullable, 2),
266
+ paramType = _unwrapNullable2[0],
267
+ isParamNullable = _unwrapNullable2[1];
268
+ return wrapNullable(nullable || isParamNullable, paramType);
269
+ }
270
+ case 'Stringish': {
271
+ return emitStringish(nullable);
272
+ }
273
+ case 'Int32': {
274
+ return emitInt32(nullable);
275
+ }
276
+ case 'Double': {
277
+ return emitDouble(nullable);
278
+ }
279
+ case 'Float': {
280
+ return emitFloat(nullable);
281
+ }
282
+ case 'UnsafeObject':
283
+ case 'Object': {
284
+ return emitObject(nullable);
285
+ }
286
+ default: {
287
+ return translateDefault(
288
+ hasteModuleName,
289
+ typeAnnotation,
290
+ types,
291
+ nullable,
292
+ parser,
293
+ );
294
+ }
295
+ }
296
+ }
297
+ case 'ObjectTypeAnnotation': {
298
+ const objectTypeAnnotation = {
299
+ type: 'ObjectTypeAnnotation',
300
+ // $FlowFixMe[missing-type-arg]
301
+ properties: [...typeAnnotation.properties, ...typeAnnotation.indexers]
302
+ .map(property => {
303
+ return tryParse(() => {
304
+ return parseObjectProperty(
305
+ property,
306
+ hasteModuleName,
307
+ types,
308
+ aliasMap,
309
+ tryParse,
310
+ cxxOnly,
311
+ nullable,
312
+ translateTypeAnnotation,
313
+ parser,
314
+ );
315
+ });
316
+ })
317
+ .filter(Boolean),
318
+ };
319
+ return typeAliasResolution(
320
+ typeAliasResolutionStatus,
321
+ objectTypeAnnotation,
322
+ aliasMap,
323
+ nullable,
324
+ );
325
+ }
326
+ case 'BooleanTypeAnnotation': {
327
+ return emitBoolean(nullable);
328
+ }
329
+ case 'NumberTypeAnnotation': {
330
+ return emitNumber(nullable);
331
+ }
332
+ case 'VoidTypeAnnotation': {
333
+ return emitVoid(nullable);
334
+ }
335
+ case 'StringTypeAnnotation': {
336
+ return emitString(nullable);
337
+ }
338
+ case 'FunctionTypeAnnotation': {
339
+ return emitFunction(
340
+ nullable,
341
+ hasteModuleName,
342
+ typeAnnotation,
343
+ types,
344
+ aliasMap,
345
+ tryParse,
346
+ cxxOnly,
347
+ translateTypeAnnotation,
348
+ language,
349
+ );
350
+ }
351
+ case 'UnionTypeAnnotation': {
352
+ return emitUnion(nullable, hasteModuleName, typeAnnotation, parser);
353
+ }
354
+ case 'StringLiteralTypeAnnotation': {
355
+ // 'a' is a special case for 'a' | 'b' but the type name is different
356
+ return wrapNullable(nullable, {
357
+ type: 'UnionTypeAnnotation',
358
+ memberType: 'StringTypeAnnotation',
359
+ });
360
+ }
361
+ case 'MixedTypeAnnotation': {
362
+ if (cxxOnly) {
363
+ return emitMixed(nullable);
364
+ }
365
+ // Fallthrough
366
+ }
367
+
368
+ default: {
369
+ throw new UnsupportedTypeAnnotationParserError(
370
+ hasteModuleName,
371
+ typeAnnotation,
372
+ language,
373
+ );
374
+ }
375
+ }
376
+ }
377
+ function isModuleInterface(node) {
378
+ return (
379
+ node.type === 'InterfaceDeclaration' &&
380
+ node.extends.length === 1 &&
381
+ node.extends[0].type === 'InterfaceExtends' &&
382
+ node.extends[0].id.name === 'TurboModule'
383
+ );
384
+ }
385
+ function buildModuleSchema(
386
+ hasteModuleName,
387
+ /**
388
+ * TODO(T71778680): Flow-type this node.
389
+ */
390
+ ast,
391
+ tryParse,
392
+ ) {
393
+ const types = getTypes(ast);
394
+ const moduleSpecs = Object.values(types).filter(isModuleInterface);
395
+ throwIfModuleInterfaceNotFound(
396
+ moduleSpecs.length,
397
+ hasteModuleName,
398
+ ast,
399
+ language,
400
+ );
401
+ throwIfMoreThanOneModuleInterfaceParserError(
402
+ hasteModuleName,
403
+ moduleSpecs,
404
+ language,
405
+ );
406
+ const _moduleSpecs = _slicedToArray(moduleSpecs, 1),
407
+ moduleSpec = _moduleSpecs[0];
408
+ throwIfModuleInterfaceIsMisnamed(hasteModuleName, moduleSpec.id, language);
409
+
410
+ // Parse Module Name
411
+ const moduleName = (() => {
412
+ const callExpressions = [];
413
+ visit(ast, {
414
+ CallExpression(node) {
415
+ if (isModuleRegistryCall(node)) {
416
+ callExpressions.push(node);
417
+ }
418
+ },
419
+ });
420
+ throwIfUnusedModuleInterfaceParserError(
421
+ hasteModuleName,
422
+ moduleSpec,
423
+ callExpressions,
424
+ language,
425
+ );
426
+ throwIfMoreThanOneModuleRegistryCalls(
427
+ hasteModuleName,
428
+ callExpressions,
429
+ callExpressions.length,
430
+ language,
431
+ );
432
+ const callExpression = callExpressions[0];
433
+ const typeArguments = callExpression.typeArguments;
434
+ const methodName = callExpression.callee.property.name;
435
+ throwIfWrongNumberOfCallExpressionArgs(
436
+ hasteModuleName,
437
+ callExpression,
438
+ methodName,
439
+ callExpression.arguments.length,
440
+ language,
441
+ );
442
+ if (callExpression.arguments[0].type !== 'Literal') {
443
+ const type = callExpression.arguments[0].type;
444
+ throw new IncorrectModuleRegistryCallArgumentTypeParserError(
445
+ hasteModuleName,
446
+ callExpression.arguments[0],
447
+ methodName,
448
+ type,
449
+ language,
450
+ );
451
+ }
452
+ const $moduleName = callExpression.arguments[0].value;
453
+ throwIfUntypedModule(
454
+ typeArguments,
455
+ hasteModuleName,
456
+ callExpression,
457
+ methodName,
458
+ $moduleName,
459
+ language,
460
+ );
461
+ throwIfIncorrectModuleRegistryCallTypeParameterParserError(
462
+ hasteModuleName,
463
+ typeArguments,
464
+ methodName,
465
+ $moduleName,
466
+ parser,
467
+ );
468
+ return $moduleName;
469
+ })();
470
+
471
+ // Some module names use platform suffix to indicate platform-exclusive modules.
472
+ // Eventually this should be made explicit in the Flow type itself.
473
+ // Also check the hasteModuleName for platform suffix.
474
+ // Note: this shape is consistent with ComponentSchema.
475
+ const _verifyPlatforms = verifyPlatforms(hasteModuleName, moduleName),
476
+ cxxOnly = _verifyPlatforms.cxxOnly,
477
+ excludedPlatforms = _verifyPlatforms.excludedPlatforms;
478
+
479
+ // $FlowFixMe[missing-type-arg]
480
+ return moduleSpec.body.properties
481
+ .filter(property => property.type === 'ObjectTypeProperty')
482
+ .map(property => {
483
+ const aliasMap = {};
484
+ return tryParse(() => ({
485
+ aliasMap: aliasMap,
486
+ propertyShape: buildPropertySchema(
487
+ hasteModuleName,
488
+ property,
489
+ types,
490
+ aliasMap,
491
+ tryParse,
492
+ cxxOnly,
493
+ language,
494
+ resolveTypeAnnotation,
495
+ translateTypeAnnotation,
496
+ ),
497
+ }));
498
+ })
499
+ .filter(Boolean)
500
+ .reduce(
501
+ (moduleSchema, {aliasMap, propertyShape}) => ({
502
+ type: 'NativeModule',
503
+ aliases: _objectSpread(
504
+ _objectSpread({}, moduleSchema.aliases),
505
+ aliasMap,
506
+ ),
507
+ spec: {
508
+ properties: [...moduleSchema.spec.properties, propertyShape],
509
+ },
510
+ moduleName: moduleSchema.moduleName,
511
+ excludedPlatforms: moduleSchema.excludedPlatforms,
512
+ }),
513
+ {
514
+ type: 'NativeModule',
515
+ aliases: {},
516
+ spec: {
517
+ properties: [],
518
+ },
519
+ moduleName,
520
+ excludedPlatforms:
521
+ excludedPlatforms.length !== 0 ? [...excludedPlatforms] : undefined,
522
+ },
523
+ );
524
+ }
525
+ module.exports = {
526
+ buildModuleSchema,
527
+ flowTranslateTypeAnnotation: translateTypeAnnotation,
528
+ };