@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,543 @@
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
+ parseObjectProperty = _require3.parseObjectProperty,
152
+ translateDefault = _require3.translateDefault,
153
+ buildPropertySchema = _require3.buildPropertySchema;
154
+ const _require4 = require('../../parsers-primitives'),
155
+ emitArrayType = _require4.emitArrayType,
156
+ emitBoolean = _require4.emitBoolean,
157
+ emitDouble = _require4.emitDouble,
158
+ emitFloat = _require4.emitFloat,
159
+ emitFunction = _require4.emitFunction,
160
+ emitNumber = _require4.emitNumber,
161
+ emitInt32 = _require4.emitInt32,
162
+ emitObject = _require4.emitObject,
163
+ emitPromise = _require4.emitPromise,
164
+ emitRootTag = _require4.emitRootTag,
165
+ emitVoid = _require4.emitVoid,
166
+ emitString = _require4.emitString,
167
+ emitStringish = _require4.emitStringish,
168
+ emitMixed = _require4.emitMixed,
169
+ emitUnion = _require4.emitUnion,
170
+ typeAliasResolution = _require4.typeAliasResolution,
171
+ translateArrayTypeAnnotation = _require4.translateArrayTypeAnnotation;
172
+ const _require5 = require('../../errors'),
173
+ UnsupportedGenericParserError = _require5.UnsupportedGenericParserError,
174
+ UnsupportedTypeAnnotationParserError =
175
+ _require5.UnsupportedTypeAnnotationParserError,
176
+ IncorrectModuleRegistryCallArgumentTypeParserError =
177
+ _require5.IncorrectModuleRegistryCallArgumentTypeParserError;
178
+ const _require6 = require('../../error-utils'),
179
+ throwIfUntypedModule = _require6.throwIfUntypedModule,
180
+ throwIfUnusedModuleInterfaceParserError =
181
+ _require6.throwIfUnusedModuleInterfaceParserError,
182
+ throwIfModuleInterfaceNotFound = _require6.throwIfModuleInterfaceNotFound,
183
+ throwIfModuleInterfaceIsMisnamed = _require6.throwIfModuleInterfaceIsMisnamed,
184
+ throwIfWrongNumberOfCallExpressionArgs =
185
+ _require6.throwIfWrongNumberOfCallExpressionArgs,
186
+ throwIfMoreThanOneModuleRegistryCalls =
187
+ _require6.throwIfMoreThanOneModuleRegistryCalls,
188
+ throwIfMoreThanOneModuleInterfaceParserError =
189
+ _require6.throwIfMoreThanOneModuleInterfaceParserError,
190
+ throwIfIncorrectModuleRegistryCallTypeParameterParserError =
191
+ _require6.throwIfIncorrectModuleRegistryCallTypeParameterParserError;
192
+ const _require7 = require('../parser'),
193
+ TypeScriptParser = _require7.TypeScriptParser;
194
+ const language = 'TypeScript';
195
+ const parser = new TypeScriptParser();
196
+ function translateTypeAnnotation(
197
+ hasteModuleName,
198
+ /**
199
+ * TODO(T108222691): Use flow-types for @babel/parser
200
+ */
201
+ typeScriptTypeAnnotation,
202
+ types,
203
+ aliasMap,
204
+ tryParse,
205
+ cxxOnly,
206
+ ) {
207
+ const _resolveTypeAnnotatio = resolveTypeAnnotation(
208
+ typeScriptTypeAnnotation,
209
+ types,
210
+ ),
211
+ nullable = _resolveTypeAnnotatio.nullable,
212
+ typeAnnotation = _resolveTypeAnnotatio.typeAnnotation,
213
+ typeAliasResolutionStatus = _resolveTypeAnnotatio.typeAliasResolutionStatus;
214
+ switch (typeAnnotation.type) {
215
+ case 'TSArrayType': {
216
+ return translateArrayTypeAnnotation(
217
+ hasteModuleName,
218
+ types,
219
+ aliasMap,
220
+ cxxOnly,
221
+ 'Array',
222
+ typeAnnotation.elementType,
223
+ nullable,
224
+ language,
225
+ translateTypeAnnotation,
226
+ );
227
+ }
228
+ case 'TSTypeOperator': {
229
+ if (
230
+ typeAnnotation.operator === 'readonly' &&
231
+ typeAnnotation.typeAnnotation.type === 'TSArrayType'
232
+ ) {
233
+ return translateArrayTypeAnnotation(
234
+ hasteModuleName,
235
+ types,
236
+ aliasMap,
237
+ cxxOnly,
238
+ 'ReadonlyArray',
239
+ typeAnnotation.typeAnnotation.elementType,
240
+ nullable,
241
+ language,
242
+ translateTypeAnnotation,
243
+ );
244
+ } else {
245
+ throw new UnsupportedGenericParserError(
246
+ hasteModuleName,
247
+ typeAnnotation,
248
+ parser,
249
+ );
250
+ }
251
+ }
252
+ case 'TSTypeReference': {
253
+ switch (typeAnnotation.typeName.name) {
254
+ case 'RootTag': {
255
+ return emitRootTag(nullable);
256
+ }
257
+ case 'Promise': {
258
+ return emitPromise(
259
+ hasteModuleName,
260
+ typeAnnotation,
261
+ parser,
262
+ nullable,
263
+ types,
264
+ aliasMap,
265
+ tryParse,
266
+ cxxOnly,
267
+ translateTypeAnnotation,
268
+ );
269
+ }
270
+ case 'Array':
271
+ case 'ReadonlyArray': {
272
+ return emitArrayType(
273
+ hasteModuleName,
274
+ typeAnnotation,
275
+ parser,
276
+ types,
277
+ aliasMap,
278
+ cxxOnly,
279
+ nullable,
280
+ translateTypeAnnotation,
281
+ );
282
+ }
283
+ case 'Stringish': {
284
+ return emitStringish(nullable);
285
+ }
286
+ case 'Int32': {
287
+ return emitInt32(nullable);
288
+ }
289
+ case 'Double': {
290
+ return emitDouble(nullable);
291
+ }
292
+ case 'Float': {
293
+ return emitFloat(nullable);
294
+ }
295
+ case 'UnsafeObject':
296
+ case 'Object': {
297
+ return emitObject(nullable);
298
+ }
299
+ default: {
300
+ return translateDefault(
301
+ hasteModuleName,
302
+ typeAnnotation,
303
+ types,
304
+ nullable,
305
+ parser,
306
+ );
307
+ }
308
+ }
309
+ }
310
+ case 'TSTypeLiteral': {
311
+ const objectTypeAnnotation = {
312
+ type: 'ObjectTypeAnnotation',
313
+ // $FlowFixMe[missing-type-arg]
314
+ properties: typeAnnotation.members
315
+ .map(property => {
316
+ return tryParse(() => {
317
+ return parseObjectProperty(
318
+ property,
319
+ hasteModuleName,
320
+ types,
321
+ aliasMap,
322
+ tryParse,
323
+ cxxOnly,
324
+ nullable,
325
+ translateTypeAnnotation,
326
+ parser,
327
+ );
328
+ });
329
+ })
330
+ .filter(Boolean),
331
+ };
332
+ return typeAliasResolution(
333
+ typeAliasResolutionStatus,
334
+ objectTypeAnnotation,
335
+ aliasMap,
336
+ nullable,
337
+ );
338
+ }
339
+ case 'TSBooleanKeyword': {
340
+ return emitBoolean(nullable);
341
+ }
342
+ case 'TSNumberKeyword': {
343
+ return emitNumber(nullable);
344
+ }
345
+ case 'TSVoidKeyword': {
346
+ return emitVoid(nullable);
347
+ }
348
+ case 'TSStringKeyword': {
349
+ return emitString(nullable);
350
+ }
351
+ case 'TSFunctionType': {
352
+ return emitFunction(
353
+ nullable,
354
+ hasteModuleName,
355
+ typeAnnotation,
356
+ types,
357
+ aliasMap,
358
+ tryParse,
359
+ cxxOnly,
360
+ translateTypeAnnotation,
361
+ language,
362
+ );
363
+ }
364
+ case 'TSUnionType': {
365
+ return emitUnion(nullable, hasteModuleName, typeAnnotation, parser);
366
+ }
367
+ case 'TSUnknownKeyword': {
368
+ if (cxxOnly) {
369
+ return emitMixed(nullable);
370
+ }
371
+ // Fallthrough
372
+ }
373
+
374
+ default: {
375
+ throw new UnsupportedTypeAnnotationParserError(
376
+ hasteModuleName,
377
+ typeAnnotation,
378
+ language,
379
+ );
380
+ }
381
+ }
382
+ }
383
+ function isModuleInterface(node) {
384
+ var _node$extends;
385
+ return (
386
+ node.type === 'TSInterfaceDeclaration' &&
387
+ ((_node$extends = node.extends) === null || _node$extends === void 0
388
+ ? void 0
389
+ : _node$extends.length) === 1 &&
390
+ node.extends[0].type === 'TSExpressionWithTypeArguments' &&
391
+ node.extends[0].expression.name === 'TurboModule'
392
+ );
393
+ }
394
+ function buildModuleSchema(
395
+ hasteModuleName,
396
+ /**
397
+ * TODO(T108222691): Use flow-types for @babel/parser
398
+ */
399
+ ast,
400
+ tryParse,
401
+ ) {
402
+ const types = getTypes(ast);
403
+ const moduleSpecs = Object.values(types).filter(isModuleInterface);
404
+ throwIfModuleInterfaceNotFound(
405
+ moduleSpecs.length,
406
+ hasteModuleName,
407
+ ast,
408
+ language,
409
+ );
410
+ throwIfMoreThanOneModuleInterfaceParserError(
411
+ hasteModuleName,
412
+ moduleSpecs,
413
+ language,
414
+ );
415
+ const _moduleSpecs = _slicedToArray(moduleSpecs, 1),
416
+ moduleSpec = _moduleSpecs[0];
417
+ throwIfModuleInterfaceIsMisnamed(hasteModuleName, moduleSpec.id, language);
418
+
419
+ // Parse Module Name
420
+ const moduleName = (() => {
421
+ const callExpressions = [];
422
+ visit(ast, {
423
+ CallExpression(node) {
424
+ if (isModuleRegistryCall(node)) {
425
+ callExpressions.push(node);
426
+ }
427
+ },
428
+ });
429
+ throwIfUnusedModuleInterfaceParserError(
430
+ hasteModuleName,
431
+ moduleSpec,
432
+ callExpressions,
433
+ language,
434
+ );
435
+ throwIfMoreThanOneModuleRegistryCalls(
436
+ hasteModuleName,
437
+ callExpressions,
438
+ callExpressions.length,
439
+ language,
440
+ );
441
+ const callExpression = callExpressions[0];
442
+ const typeParameters = callExpression.typeParameters;
443
+ const methodName = callExpression.callee.property.name;
444
+ throwIfWrongNumberOfCallExpressionArgs(
445
+ hasteModuleName,
446
+ callExpression,
447
+ methodName,
448
+ callExpression.arguments.length,
449
+ language,
450
+ );
451
+ if (callExpression.arguments[0].type !== 'StringLiteral') {
452
+ const type = callExpression.arguments[0].type;
453
+ throw new IncorrectModuleRegistryCallArgumentTypeParserError(
454
+ hasteModuleName,
455
+ callExpression.arguments[0],
456
+ methodName,
457
+ type,
458
+ language,
459
+ );
460
+ }
461
+ const $moduleName = callExpression.arguments[0].value;
462
+ throwIfUntypedModule(
463
+ typeParameters,
464
+ hasteModuleName,
465
+ callExpression,
466
+ methodName,
467
+ $moduleName,
468
+ language,
469
+ );
470
+ throwIfIncorrectModuleRegistryCallTypeParameterParserError(
471
+ hasteModuleName,
472
+ typeParameters,
473
+ methodName,
474
+ $moduleName,
475
+ parser,
476
+ );
477
+ return $moduleName;
478
+ })();
479
+
480
+ // Some module names use platform suffix to indicate platform-exclusive modules.
481
+ // Eventually this should be made explicit in the Flow type itself.
482
+ // Also check the hasteModuleName for platform suffix.
483
+ // Note: this shape is consistent with ComponentSchema.
484
+ const _verifyPlatforms = verifyPlatforms(hasteModuleName, moduleName),
485
+ cxxOnly = _verifyPlatforms.cxxOnly,
486
+ excludedPlatforms = _verifyPlatforms.excludedPlatforms;
487
+
488
+ // $FlowFixMe[missing-type-arg]
489
+ return moduleSpec.body.body
490
+ .filter(
491
+ property =>
492
+ property.type === 'TSMethodSignature' ||
493
+ property.type === 'TSPropertySignature',
494
+ )
495
+ .map(property => {
496
+ const aliasMap = {};
497
+ return tryParse(() => ({
498
+ aliasMap: aliasMap,
499
+ propertyShape: buildPropertySchema(
500
+ hasteModuleName,
501
+ property,
502
+ types,
503
+ aliasMap,
504
+ tryParse,
505
+ cxxOnly,
506
+ language,
507
+ resolveTypeAnnotation,
508
+ translateTypeAnnotation,
509
+ ),
510
+ }));
511
+ })
512
+ .filter(Boolean)
513
+ .reduce(
514
+ (moduleSchema, {aliasMap, propertyShape}) => {
515
+ return {
516
+ type: 'NativeModule',
517
+ aliases: _objectSpread(
518
+ _objectSpread({}, moduleSchema.aliases),
519
+ aliasMap,
520
+ ),
521
+ spec: {
522
+ properties: [...moduleSchema.spec.properties, propertyShape],
523
+ },
524
+ moduleName: moduleSchema.moduleName,
525
+ excludedPlatforms: moduleSchema.excludedPlatforms,
526
+ };
527
+ },
528
+ {
529
+ type: 'NativeModule',
530
+ aliases: {},
531
+ spec: {
532
+ properties: [],
533
+ },
534
+ moduleName: moduleName,
535
+ excludedPlatforms:
536
+ excludedPlatforms.length !== 0 ? [...excludedPlatforms] : undefined,
537
+ },
538
+ );
539
+ }
540
+ module.exports = {
541
+ buildModuleSchema,
542
+ typeScriptTranslateTypeAnnotation: translateTypeAnnotation,
543
+ };