@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,439 @@
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
+ * @flow strict
8
+ * @format
9
+ */
10
+
11
+ 'use strict';
12
+
13
+ import type {UnionTypeAnnotationMemberType} from '../CodegenSchema';
14
+
15
+ import type {Parser} from './parser';
16
+ export type ParserType = 'Flow' | 'TypeScript';
17
+
18
+ class ParserError extends Error {
19
+ nodes: $ReadOnlyArray<$FlowFixMe>;
20
+ constructor(
21
+ nativeModuleName: string,
22
+ astNodeOrNodes: $FlowFixMe,
23
+ message: string,
24
+ ) {
25
+ super(`Module ${nativeModuleName}: ${message}`);
26
+
27
+ this.nodes = Array.isArray(astNodeOrNodes)
28
+ ? astNodeOrNodes
29
+ : [astNodeOrNodes];
30
+
31
+ // assign the error class name in your custom error (as a shortcut)
32
+ this.name = this.constructor.name;
33
+
34
+ // capturing the stack trace keeps the reference to your error class
35
+ Error.captureStackTrace(this, this.constructor);
36
+ }
37
+ }
38
+ class MisnamedModuleInterfaceParserError extends ParserError {
39
+ constructor(nativeModuleName: string, id: $FlowFixMe, language: ParserType) {
40
+ super(
41
+ nativeModuleName,
42
+ id,
43
+ `All ${language} interfaces extending TurboModule must be called 'Spec'. Please rename ${language} interface '${id.name}' to 'Spec'.`,
44
+ );
45
+ }
46
+ }
47
+
48
+ class ModuleInterfaceNotFoundParserError extends ParserError {
49
+ constructor(nativeModuleName: string, ast: $FlowFixMe, language: ParserType) {
50
+ super(
51
+ nativeModuleName,
52
+ ast,
53
+ `No ${language} interfaces extending TurboModule were detected in this NativeModule spec.`,
54
+ );
55
+ }
56
+ }
57
+
58
+ class MoreThanOneModuleInterfaceParserError extends ParserError {
59
+ constructor(
60
+ nativeModuleName: string,
61
+ flowModuleInterfaces: $ReadOnlyArray<$FlowFixMe>,
62
+ names: $ReadOnlyArray<string>,
63
+ language: ParserType,
64
+ ) {
65
+ const finalName = names[names.length - 1];
66
+ const allButLastName = names.slice(0, -1);
67
+ const quote = (x: string) => `'${x}'`;
68
+
69
+ const nameStr =
70
+ allButLastName.map(quote).join(', ') + ', and ' + quote(finalName);
71
+
72
+ super(
73
+ nativeModuleName,
74
+ flowModuleInterfaces,
75
+ `Every NativeModule spec file must declare exactly one NativeModule ${language} interface. This file declares ${names.length}: ${nameStr}. Please remove the extraneous ${language} interface declarations.`,
76
+ );
77
+ }
78
+ }
79
+
80
+ class UnsupportedModulePropertyParserError extends ParserError {
81
+ constructor(
82
+ nativeModuleName: string,
83
+ propertyValue: $FlowFixMe,
84
+ propertyName: string,
85
+ invalidPropertyValueType: string,
86
+ language: ParserType,
87
+ ) {
88
+ super(
89
+ nativeModuleName,
90
+ propertyValue,
91
+ `${language} interfaces extending TurboModule must only contain 'FunctionTypeAnnotation's. Property '${propertyName}' refers to a '${invalidPropertyValueType}'.`,
92
+ );
93
+ }
94
+ }
95
+
96
+ class UnsupportedTypeAnnotationParserError extends ParserError {
97
+ +typeAnnotationType: string;
98
+ constructor(
99
+ nativeModuleName: string,
100
+ typeAnnotation: $FlowFixMe,
101
+ language: ParserType,
102
+ ) {
103
+ super(
104
+ nativeModuleName,
105
+ typeAnnotation,
106
+ `${language} type annotation '${typeAnnotation.type}' is unsupported in NativeModule specs.`,
107
+ );
108
+
109
+ this.typeAnnotationType = typeAnnotation.type;
110
+ }
111
+ }
112
+
113
+ class UnsupportedGenericParserError extends ParserError {
114
+ // +genericName: string;
115
+ constructor(
116
+ nativeModuleName: string,
117
+ genericTypeAnnotation: $FlowFixMe,
118
+ parser: Parser,
119
+ ) {
120
+ const genericName = parser.nameForGenericTypeAnnotation(
121
+ genericTypeAnnotation,
122
+ );
123
+ super(
124
+ nativeModuleName,
125
+ genericTypeAnnotation,
126
+ `Unrecognized generic type '${genericName}' in NativeModule spec.`,
127
+ );
128
+
129
+ // this.genericName = genericName;
130
+ }
131
+ }
132
+
133
+ class MissingTypeParameterGenericParserError extends ParserError {
134
+ constructor(
135
+ nativeModuleName: string,
136
+ genericTypeAnnotation: $FlowFixMe,
137
+ parser: Parser,
138
+ ) {
139
+ const genericName = parser.nameForGenericTypeAnnotation(
140
+ genericTypeAnnotation,
141
+ );
142
+
143
+ super(
144
+ nativeModuleName,
145
+ genericTypeAnnotation,
146
+ `Generic '${genericName}' must have type parameters.`,
147
+ );
148
+ }
149
+ }
150
+
151
+ class MoreThanOneTypeParameterGenericParserError extends ParserError {
152
+ constructor(
153
+ nativeModuleName: string,
154
+ genericTypeAnnotation: $FlowFixMe,
155
+ parser: Parser,
156
+ ) {
157
+ const genericName = parser.nameForGenericTypeAnnotation(
158
+ genericTypeAnnotation,
159
+ );
160
+
161
+ super(
162
+ nativeModuleName,
163
+ genericTypeAnnotation,
164
+ `Generic '${genericName}' must have exactly one type parameter.`,
165
+ );
166
+ }
167
+ }
168
+
169
+ /**
170
+ * Array parsing errors
171
+ */
172
+
173
+ class UnsupportedArrayElementTypeAnnotationParserError extends ParserError {
174
+ constructor(
175
+ nativeModuleName: string,
176
+ arrayElementTypeAST: $FlowFixMe,
177
+ arrayType: 'Array' | '$ReadOnlyArray' | 'ReadonlyArray',
178
+ invalidArrayElementType: string,
179
+ language: ParserType,
180
+ ) {
181
+ super(
182
+ nativeModuleName,
183
+ arrayElementTypeAST,
184
+ `${arrayType} element types cannot be '${invalidArrayElementType}'.`,
185
+ );
186
+ }
187
+ }
188
+
189
+ /**
190
+ * Object parsing errors
191
+ */
192
+
193
+ class UnsupportedObjectPropertyTypeAnnotationParserError extends ParserError {
194
+ constructor(
195
+ nativeModuleName: string,
196
+ propertyAST: $FlowFixMe,
197
+ invalidPropertyType: string,
198
+ language: ParserType,
199
+ ) {
200
+ let message = `'ObjectTypeAnnotation' cannot contain '${invalidPropertyType}'.`;
201
+
202
+ if (
203
+ invalidPropertyType === 'ObjectTypeSpreadProperty' &&
204
+ language !== 'TypeScript'
205
+ ) {
206
+ message = "Object spread isn't supported in 'ObjectTypeAnnotation's.";
207
+ }
208
+
209
+ super(nativeModuleName, propertyAST, message);
210
+ }
211
+ }
212
+
213
+ class UnsupportedObjectPropertyValueTypeAnnotationParserError extends ParserError {
214
+ constructor(
215
+ nativeModuleName: string,
216
+ propertyValueAST: $FlowFixMe,
217
+ propertyName: string,
218
+ invalidPropertyValueType: string,
219
+ language: ParserType,
220
+ ) {
221
+ super(
222
+ nativeModuleName,
223
+ propertyValueAST,
224
+ `Object property '${propertyName}' cannot have type '${invalidPropertyValueType}'.`,
225
+ );
226
+ }
227
+ }
228
+
229
+ /**
230
+ * Function parsing errors
231
+ */
232
+
233
+ class UnnamedFunctionParamParserError extends ParserError {
234
+ constructor(
235
+ functionParam: $FlowFixMe,
236
+ nativeModuleName: string,
237
+ language: ParserType,
238
+ ) {
239
+ super(
240
+ nativeModuleName,
241
+ functionParam,
242
+ 'All function parameters must be named.',
243
+ );
244
+ }
245
+ }
246
+
247
+ class UnsupportedFunctionParamTypeAnnotationParserError extends ParserError {
248
+ constructor(
249
+ nativeModuleName: string,
250
+ flowParamTypeAnnotation: $FlowFixMe,
251
+ paramName: string,
252
+ invalidParamType: string,
253
+ ) {
254
+ super(
255
+ nativeModuleName,
256
+ flowParamTypeAnnotation,
257
+ `Function parameter '${paramName}' cannot have type '${invalidParamType}'.`,
258
+ );
259
+ }
260
+ }
261
+
262
+ class UnsupportedFunctionReturnTypeAnnotationParserError extends ParserError {
263
+ constructor(
264
+ nativeModuleName: string,
265
+ flowReturnTypeAnnotation: $FlowFixMe,
266
+ invalidReturnType: string,
267
+ language: ParserType,
268
+ ) {
269
+ super(
270
+ nativeModuleName,
271
+ flowReturnTypeAnnotation,
272
+ `Function return cannot have type '${invalidReturnType}'.`,
273
+ );
274
+ }
275
+ }
276
+
277
+ /**
278
+ * Enum parsing errors
279
+ */
280
+
281
+ class UnsupportedEnumDeclarationParserError extends ParserError {
282
+ constructor(
283
+ nativeModuleName: string,
284
+ arrayElementTypeAST: $FlowFixMe,
285
+ memberType: string,
286
+ language: ParserType,
287
+ ) {
288
+ super(
289
+ nativeModuleName,
290
+ arrayElementTypeAST,
291
+ `Unexpected enum member type ${memberType}. Only string and number enum members are supported`,
292
+ );
293
+ }
294
+ }
295
+
296
+ /**
297
+ * Union parsing errors
298
+ */
299
+
300
+ class UnsupportedUnionTypeAnnotationParserError extends ParserError {
301
+ constructor(
302
+ nativeModuleName: string,
303
+ arrayElementTypeAST: $FlowFixMe,
304
+ types: UnionTypeAnnotationMemberType[],
305
+ language: ParserType,
306
+ ) {
307
+ super(
308
+ nativeModuleName,
309
+ arrayElementTypeAST,
310
+ `Union members must be of the same type, but multiple types were found ${types.join(
311
+ ', ',
312
+ )}'.`,
313
+ );
314
+ }
315
+ }
316
+
317
+ /**
318
+ * Module parsing errors
319
+ */
320
+
321
+ class UnusedModuleInterfaceParserError extends ParserError {
322
+ constructor(
323
+ nativeModuleName: string,
324
+ flowInterface: $FlowFixMe,
325
+ language: ParserType,
326
+ ) {
327
+ super(
328
+ nativeModuleName,
329
+ flowInterface,
330
+ "Unused NativeModule spec. Please load the NativeModule by calling TurboModuleRegistry.get<Spec>('<moduleName>').",
331
+ );
332
+ }
333
+ }
334
+
335
+ class MoreThanOneModuleRegistryCallsParserError extends ParserError {
336
+ constructor(
337
+ nativeModuleName: string,
338
+ flowCallExpressions: $FlowFixMe,
339
+ numCalls: number,
340
+ language: ParserType,
341
+ ) {
342
+ super(
343
+ nativeModuleName,
344
+ flowCallExpressions,
345
+ `Every NativeModule spec file must contain exactly one NativeModule load. This file contains ${numCalls}. Please simplify this spec file, splitting it as necessary, to remove the extraneous loads.`,
346
+ );
347
+ }
348
+ }
349
+
350
+ class UntypedModuleRegistryCallParserError extends ParserError {
351
+ constructor(
352
+ nativeModuleName: string,
353
+ flowCallExpression: $FlowFixMe,
354
+ methodName: string,
355
+ moduleName: string,
356
+ language: ParserType,
357
+ ) {
358
+ super(
359
+ nativeModuleName,
360
+ flowCallExpression,
361
+ `Please type this NativeModule load: TurboModuleRegistry.${methodName}<Spec>('${moduleName}').`,
362
+ );
363
+ }
364
+ }
365
+
366
+ class IncorrectModuleRegistryCallTypeParameterParserError extends ParserError {
367
+ constructor(
368
+ nativeModuleName: string,
369
+ flowTypeArguments: $FlowFixMe,
370
+ methodName: string,
371
+ moduleName: string,
372
+ language: ParserType,
373
+ ) {
374
+ super(
375
+ nativeModuleName,
376
+ flowTypeArguments,
377
+ `Please change these type arguments to reflect TurboModuleRegistry.${methodName}<Spec>('${moduleName}').`,
378
+ );
379
+ }
380
+ }
381
+
382
+ class IncorrectModuleRegistryCallArityParserError extends ParserError {
383
+ constructor(
384
+ nativeModuleName: string,
385
+ flowCallExpression: $FlowFixMe,
386
+ methodName: string,
387
+ incorrectArity: number,
388
+ language: ParserType,
389
+ ) {
390
+ super(
391
+ nativeModuleName,
392
+ flowCallExpression,
393
+ `Please call TurboModuleRegistry.${methodName}<Spec>() with exactly one argument. Detected ${incorrectArity}.`,
394
+ );
395
+ }
396
+ }
397
+
398
+ class IncorrectModuleRegistryCallArgumentTypeParserError extends ParserError {
399
+ constructor(
400
+ nativeModuleName: string,
401
+ flowArgument: $FlowFixMe,
402
+ methodName: string,
403
+ type: string,
404
+ language: ParserType,
405
+ ) {
406
+ const a = /[aeiouy]/.test(type.toLowerCase()) ? 'an' : 'a';
407
+ super(
408
+ nativeModuleName,
409
+ flowArgument,
410
+ `Please call TurboModuleRegistry.${methodName}<Spec>() with a string literal. Detected ${a} '${type}'`,
411
+ );
412
+ }
413
+ }
414
+
415
+ module.exports = {
416
+ ParserError,
417
+ MissingTypeParameterGenericParserError,
418
+ MoreThanOneTypeParameterGenericParserError,
419
+ MisnamedModuleInterfaceParserError,
420
+ ModuleInterfaceNotFoundParserError,
421
+ MoreThanOneModuleInterfaceParserError,
422
+ UnnamedFunctionParamParserError,
423
+ UnsupportedArrayElementTypeAnnotationParserError,
424
+ UnsupportedGenericParserError,
425
+ UnsupportedTypeAnnotationParserError,
426
+ UnsupportedFunctionParamTypeAnnotationParserError,
427
+ UnsupportedFunctionReturnTypeAnnotationParserError,
428
+ UnsupportedEnumDeclarationParserError,
429
+ UnsupportedUnionTypeAnnotationParserError,
430
+ UnsupportedModulePropertyParserError,
431
+ UnsupportedObjectPropertyTypeAnnotationParserError,
432
+ UnsupportedObjectPropertyValueTypeAnnotationParserError,
433
+ UnusedModuleInterfaceParserError,
434
+ MoreThanOneModuleRegistryCallsParserError,
435
+ UntypedModuleRegistryCallParserError,
436
+ IncorrectModuleRegistryCallTypeParameterParserError,
437
+ IncorrectModuleRegistryCallArityParserError,
438
+ IncorrectModuleRegistryCallArgumentTypeParserError,
439
+ };