@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,448 @@
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('./error-utils'),
82
+ throwIfPropertyValueTypeIsUnsupported =
83
+ _require.throwIfPropertyValueTypeIsUnsupported,
84
+ throwIfUnsupportedFunctionParamTypeAnnotationParserError =
85
+ _require.throwIfUnsupportedFunctionParamTypeAnnotationParserError,
86
+ throwIfUnsupportedFunctionReturnTypeAnnotationParserError =
87
+ _require.throwIfUnsupportedFunctionReturnTypeAnnotationParserError,
88
+ throwIfModuleTypeIsUnsupported = _require.throwIfModuleTypeIsUnsupported;
89
+ const _require2 = require('./errors'),
90
+ MissingTypeParameterGenericParserError =
91
+ _require2.MissingTypeParameterGenericParserError,
92
+ MoreThanOneTypeParameterGenericParserError =
93
+ _require2.MoreThanOneTypeParameterGenericParserError,
94
+ UnsupportedEnumDeclarationParserError =
95
+ _require2.UnsupportedEnumDeclarationParserError,
96
+ UnsupportedGenericParserError = _require2.UnsupportedGenericParserError,
97
+ UnsupportedObjectPropertyTypeAnnotationParserError =
98
+ _require2.UnsupportedObjectPropertyTypeAnnotationParserError,
99
+ UnnamedFunctionParamParserError = _require2.UnnamedFunctionParamParserError;
100
+ const invariant = require('invariant');
101
+ function wrapModuleSchema(nativeModuleSchema, hasteModuleName) {
102
+ return {
103
+ modules: {
104
+ [hasteModuleName]: nativeModuleSchema,
105
+ },
106
+ };
107
+ }
108
+ function unwrapNullable(x) {
109
+ if (x.type === 'NullableTypeAnnotation') {
110
+ return [x.typeAnnotation, true];
111
+ }
112
+ return [x, false];
113
+ }
114
+ function wrapNullable(nullable, typeAnnotation) {
115
+ if (!nullable) {
116
+ return typeAnnotation;
117
+ }
118
+ return {
119
+ type: 'NullableTypeAnnotation',
120
+ typeAnnotation,
121
+ };
122
+ }
123
+ function assertGenericTypeAnnotationHasExactlyOneTypeParameter(
124
+ moduleName,
125
+ /**
126
+ * TODO(T108222691): Use flow-types for @babel/parser
127
+ */
128
+ typeAnnotation,
129
+ parser,
130
+ ) {
131
+ if (typeAnnotation.typeParameters == null) {
132
+ throw new MissingTypeParameterGenericParserError(
133
+ moduleName,
134
+ typeAnnotation,
135
+ parser,
136
+ );
137
+ }
138
+ const typeAnnotationType = parser.typeParameterInstantiation;
139
+ invariant(
140
+ typeAnnotation.typeParameters.type === typeAnnotationType,
141
+ `assertGenericTypeAnnotationHasExactlyOneTypeParameter: Type parameters must be an AST node of type '${typeAnnotationType}'`,
142
+ );
143
+ if (typeAnnotation.typeParameters.params.length !== 1) {
144
+ throw new MoreThanOneTypeParameterGenericParserError(
145
+ moduleName,
146
+ typeAnnotation,
147
+ parser,
148
+ );
149
+ }
150
+ }
151
+ function isObjectProperty(property, language) {
152
+ switch (language) {
153
+ case 'Flow':
154
+ return (
155
+ property.type === 'ObjectTypeProperty' ||
156
+ property.type === 'ObjectTypeIndexer'
157
+ );
158
+ case 'TypeScript':
159
+ return (
160
+ property.type === 'TSPropertySignature' ||
161
+ property.type === 'TSIndexSignature'
162
+ );
163
+ default:
164
+ return false;
165
+ }
166
+ }
167
+ function parseObjectProperty(
168
+ property,
169
+ hasteModuleName,
170
+ types,
171
+ aliasMap,
172
+ tryParse,
173
+ cxxOnly,
174
+ nullable,
175
+ translateTypeAnnotation,
176
+ parser,
177
+ ) {
178
+ const language = parser.language();
179
+ if (!isObjectProperty(property, language)) {
180
+ throw new UnsupportedObjectPropertyTypeAnnotationParserError(
181
+ hasteModuleName,
182
+ property,
183
+ property.type,
184
+ language,
185
+ );
186
+ }
187
+ const _property$optional = property.optional,
188
+ optional = _property$optional === void 0 ? false : _property$optional;
189
+ const name = parser.getKeyName(property, hasteModuleName);
190
+ const languageTypeAnnotation =
191
+ language === 'TypeScript'
192
+ ? property.typeAnnotation.typeAnnotation
193
+ : property.value;
194
+ if (
195
+ property.type === 'ObjectTypeIndexer' ||
196
+ property.type === 'TSIndexSignature'
197
+ ) {
198
+ return {
199
+ name,
200
+ optional,
201
+ typeAnnotation: wrapNullable(nullable, {
202
+ type: 'GenericObjectTypeAnnotation',
203
+ }), //TODO: use `emitObject` for typeAnnotation
204
+ };
205
+ }
206
+
207
+ const _unwrapNullable = unwrapNullable(
208
+ translateTypeAnnotation(
209
+ hasteModuleName,
210
+ languageTypeAnnotation,
211
+ types,
212
+ aliasMap,
213
+ tryParse,
214
+ cxxOnly,
215
+ ),
216
+ ),
217
+ _unwrapNullable2 = _slicedToArray(_unwrapNullable, 2),
218
+ propertyTypeAnnotation = _unwrapNullable2[0],
219
+ isPropertyNullable = _unwrapNullable2[1];
220
+ if (
221
+ propertyTypeAnnotation.type === 'FunctionTypeAnnotation' ||
222
+ propertyTypeAnnotation.type === 'PromiseTypeAnnotation' ||
223
+ propertyTypeAnnotation.type === 'VoidTypeAnnotation'
224
+ ) {
225
+ throwIfPropertyValueTypeIsUnsupported(
226
+ hasteModuleName,
227
+ languageTypeAnnotation,
228
+ property.key,
229
+ propertyTypeAnnotation.type,
230
+ language,
231
+ );
232
+ }
233
+ return {
234
+ name,
235
+ optional,
236
+ typeAnnotation: wrapNullable(isPropertyNullable, propertyTypeAnnotation),
237
+ };
238
+ }
239
+ function translateDefault(
240
+ hasteModuleName,
241
+ typeAnnotation,
242
+ types,
243
+ nullable,
244
+ parser,
245
+ ) {
246
+ const maybeEnumDeclaration =
247
+ types[parser.nameForGenericTypeAnnotation(typeAnnotation)];
248
+ if (maybeEnumDeclaration && parser.isEnumDeclaration(maybeEnumDeclaration)) {
249
+ const memberType = parser.getMaybeEnumMemberType(maybeEnumDeclaration);
250
+ if (
251
+ memberType === 'NumberTypeAnnotation' ||
252
+ memberType === 'StringTypeAnnotation'
253
+ ) {
254
+ return wrapNullable(nullable, {
255
+ type: 'EnumDeclaration',
256
+ memberType: memberType,
257
+ });
258
+ } else {
259
+ throw new UnsupportedEnumDeclarationParserError(
260
+ hasteModuleName,
261
+ typeAnnotation,
262
+ memberType,
263
+ parser.language(),
264
+ );
265
+ }
266
+ }
267
+ throw new UnsupportedGenericParserError(
268
+ hasteModuleName,
269
+ typeAnnotation,
270
+ parser,
271
+ );
272
+ }
273
+ function getTypeAnnotationParameters(typeAnnotation, language) {
274
+ return language === 'Flow'
275
+ ? typeAnnotation.params
276
+ : typeAnnotation.parameters;
277
+ }
278
+ function getFunctionNameFromParameter(param, language) {
279
+ return language === 'Flow' ? param.name : param.typeAnnotation;
280
+ }
281
+ function getParameterName(param, language) {
282
+ return language === 'Flow' ? param.name.name : param.name;
283
+ }
284
+ function getParameterTypeAnnotation(param, language) {
285
+ return language === 'Flow'
286
+ ? param.typeAnnotation
287
+ : param.typeAnnotation.typeAnnotation;
288
+ }
289
+ function getTypeAnnotationReturnType(typeAnnotation, language) {
290
+ return language === 'Flow'
291
+ ? typeAnnotation.returnType
292
+ : typeAnnotation.typeAnnotation.typeAnnotation;
293
+ }
294
+ function translateFunctionTypeAnnotation(
295
+ hasteModuleName,
296
+ // TODO(T108222691): Use flow-types for @babel/parser
297
+ // TODO(T71778680): This is a FunctionTypeAnnotation. Type this.
298
+ typeAnnotation,
299
+ types,
300
+ aliasMap,
301
+ tryParse,
302
+ cxxOnly,
303
+ translateTypeAnnotation,
304
+ language,
305
+ ) {
306
+ const params = [];
307
+ for (const param of getTypeAnnotationParameters(typeAnnotation, language)) {
308
+ const parsedParam = tryParse(() => {
309
+ if (getFunctionNameFromParameter(param, language) == null) {
310
+ throw new UnnamedFunctionParamParserError(
311
+ param,
312
+ hasteModuleName,
313
+ language,
314
+ );
315
+ }
316
+ const paramName = getParameterName(param, language);
317
+ const _unwrapNullable3 = unwrapNullable(
318
+ translateTypeAnnotation(
319
+ hasteModuleName,
320
+ getParameterTypeAnnotation(param, language),
321
+ types,
322
+ aliasMap,
323
+ tryParse,
324
+ cxxOnly,
325
+ ),
326
+ ),
327
+ _unwrapNullable4 = _slicedToArray(_unwrapNullable3, 2),
328
+ paramTypeAnnotation = _unwrapNullable4[0],
329
+ isParamTypeAnnotationNullable = _unwrapNullable4[1];
330
+ if (
331
+ paramTypeAnnotation.type === 'VoidTypeAnnotation' ||
332
+ paramTypeAnnotation.type === 'PromiseTypeAnnotation'
333
+ ) {
334
+ return throwIfUnsupportedFunctionParamTypeAnnotationParserError(
335
+ hasteModuleName,
336
+ param.typeAnnotation,
337
+ paramName,
338
+ paramTypeAnnotation.type,
339
+ );
340
+ }
341
+ return {
342
+ name: paramName,
343
+ optional: Boolean(param.optional),
344
+ typeAnnotation: wrapNullable(
345
+ isParamTypeAnnotationNullable,
346
+ paramTypeAnnotation,
347
+ ),
348
+ };
349
+ });
350
+ if (parsedParam != null) {
351
+ params.push(parsedParam);
352
+ }
353
+ }
354
+ const _unwrapNullable5 = unwrapNullable(
355
+ translateTypeAnnotation(
356
+ hasteModuleName,
357
+ getTypeAnnotationReturnType(typeAnnotation, language),
358
+ types,
359
+ aliasMap,
360
+ tryParse,
361
+ cxxOnly,
362
+ ),
363
+ ),
364
+ _unwrapNullable6 = _slicedToArray(_unwrapNullable5, 2),
365
+ returnTypeAnnotation = _unwrapNullable6[0],
366
+ isReturnTypeAnnotationNullable = _unwrapNullable6[1];
367
+ throwIfUnsupportedFunctionReturnTypeAnnotationParserError(
368
+ hasteModuleName,
369
+ typeAnnotation,
370
+ 'FunctionTypeAnnotation',
371
+ language,
372
+ cxxOnly,
373
+ returnTypeAnnotation.type,
374
+ );
375
+ return {
376
+ type: 'FunctionTypeAnnotation',
377
+ returnTypeAnnotation: wrapNullable(
378
+ isReturnTypeAnnotationNullable,
379
+ returnTypeAnnotation,
380
+ ),
381
+ params,
382
+ };
383
+ }
384
+ function buildPropertySchema(
385
+ hasteModuleName,
386
+ // TODO(T108222691): [TS] Use flow-types for @babel/parser
387
+ // TODO(T71778680): [Flow] This is an ObjectTypeProperty containing either:
388
+ // - a FunctionTypeAnnotation or GenericTypeAnnotation
389
+ // - a NullableTypeAnnoation containing a FunctionTypeAnnotation or GenericTypeAnnotation
390
+ // Flow type this node
391
+ property,
392
+ types,
393
+ aliasMap,
394
+ tryParse,
395
+ cxxOnly,
396
+ language,
397
+ resolveTypeAnnotation,
398
+ translateTypeAnnotation,
399
+ ) {
400
+ let nullable = false;
401
+ let key = property.key,
402
+ value = property.value;
403
+ const methodName = key.name;
404
+ if (language === 'TypeScript') {
405
+ value =
406
+ property.type === 'TSMethodSignature'
407
+ ? property
408
+ : property.typeAnnotation;
409
+ }
410
+ var _resolveTypeAnnotatio = resolveTypeAnnotation(value, types);
411
+ nullable = _resolveTypeAnnotatio.nullable;
412
+ value = _resolveTypeAnnotatio.typeAnnotation;
413
+ throwIfModuleTypeIsUnsupported(
414
+ hasteModuleName,
415
+ property.value,
416
+ key.name,
417
+ value.type,
418
+ language,
419
+ );
420
+ return {
421
+ name: methodName,
422
+ optional: Boolean(property.optional),
423
+ typeAnnotation: wrapNullable(
424
+ nullable,
425
+ translateFunctionTypeAnnotation(
426
+ hasteModuleName,
427
+ value,
428
+ types,
429
+ aliasMap,
430
+ tryParse,
431
+ cxxOnly,
432
+ translateTypeAnnotation,
433
+ language,
434
+ ),
435
+ ),
436
+ };
437
+ }
438
+ module.exports = {
439
+ wrapModuleSchema,
440
+ unwrapNullable,
441
+ wrapNullable,
442
+ assertGenericTypeAnnotationHasExactlyOneTypeParameter,
443
+ isObjectProperty,
444
+ parseObjectProperty,
445
+ translateDefault,
446
+ translateFunctionTypeAnnotation,
447
+ buildPropertySchema,
448
+ };