@react-native/codegen 0.72.1 → 0.72.3
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.
- package/lib/CodegenSchema.d.ts +348 -0
- package/lib/CodegenSchema.js.flow +31 -3
- package/lib/SchemaValidator.d.ts +11 -0
- package/lib/cli/combine/combine-js-to-schema.js +8 -8
- package/lib/cli/combine/combine-js-to-schema.js.flow +8 -7
- package/lib/cli/parser/parser.js +8 -15
- package/lib/cli/parser/parser.js.flow +8 -14
- package/lib/generators/Utils.js +16 -0
- package/lib/generators/Utils.js.flow +20 -0
- package/lib/generators/__test_fixtures__/fixtures.js +2 -1
- package/lib/generators/__test_fixtures__/fixtures.js.flow +2 -1
- package/lib/generators/components/ComponentsGeneratorUtils.js +10 -1
- package/lib/generators/components/ComponentsGeneratorUtils.js.flow +12 -2
- package/lib/generators/components/CppHelpers.js +8 -15
- package/lib/generators/components/CppHelpers.js.flow +8 -19
- package/lib/generators/components/GenerateEventEmitterCpp.js +7 -3
- package/lib/generators/components/GenerateEventEmitterCpp.js.flow +7 -3
- package/lib/generators/components/GenerateEventEmitterH.js +2 -2
- package/lib/generators/components/GenerateEventEmitterH.js.flow +1 -2
- package/lib/generators/components/GeneratePropsH.js +3 -4
- package/lib/generators/components/GeneratePropsH.js.flow +2 -4
- package/lib/generators/components/GeneratePropsJavaDelegate.js +2 -0
- package/lib/generators/components/GeneratePropsJavaDelegate.js.flow +2 -0
- package/lib/generators/components/GeneratePropsJavaInterface.js +3 -0
- package/lib/generators/components/GeneratePropsJavaInterface.js.flow +3 -0
- package/lib/generators/components/GeneratePropsJavaPojo/serializePojo.js +8 -0
- package/lib/generators/components/GeneratePropsJavaPojo/serializePojo.js.flow +12 -0
- package/lib/generators/components/GenerateTests.js +3 -2
- package/lib/generators/components/GenerateTests.js.flow +3 -1
- package/lib/generators/components/GenerateViewConfigJs.js +5 -2
- package/lib/generators/components/GenerateViewConfigJs.js.flow +5 -2
- package/lib/generators/components/JavaHelpers.js +9 -0
- package/lib/generators/components/JavaHelpers.js.flow +12 -1
- package/lib/generators/components/__test_fixtures__/fixtures.js +41 -0
- package/lib/generators/components/__test_fixtures__/fixtures.js.flow +42 -0
- package/lib/generators/modules/GenerateModuleCpp.js +9 -4
- package/lib/generators/modules/GenerateModuleCpp.js.flow +11 -3
- package/lib/generators/modules/GenerateModuleH.js +185 -33
- package/lib/generators/modules/GenerateModuleH.js.flow +203 -25
- package/lib/generators/modules/GenerateModuleJavaSpec.js +2 -2
- package/lib/generators/modules/GenerateModuleJavaSpec.js.flow +5 -5
- package/lib/generators/modules/GenerateModuleJniCpp.js +2 -2
- package/lib/generators/modules/GenerateModuleJniCpp.js.flow +5 -5
- package/lib/generators/modules/GenerateModuleObjCpp/index.js +2 -2
- package/lib/generators/modules/GenerateModuleObjCpp/index.js.flow +2 -2
- package/lib/generators/modules/GenerateModuleObjCpp/serializeMethod.js.flow +2 -2
- package/lib/generators/modules/Utils.js +4 -0
- package/lib/generators/modules/Utils.js.flow +6 -0
- package/lib/generators/modules/__test_fixtures__/fixtures.js +152 -10
- package/lib/generators/modules/__test_fixtures__/fixtures.js.flow +152 -10
- package/lib/parsers/error-utils.js +42 -19
- package/lib/parsers/error-utils.js.flow +46 -19
- package/lib/parsers/errors.d.ts +10 -0
- package/lib/parsers/errors.js +9 -29
- package/lib/parsers/errors.js.flow +2 -20
- package/lib/parsers/flow/Visitor.js +37 -0
- package/lib/parsers/flow/Visitor.js.flow +41 -0
- package/lib/parsers/flow/components/__test_fixtures__/fixtures.js +20 -2
- package/lib/parsers/flow/components/__test_fixtures__/fixtures.js.flow +20 -2
- package/lib/parsers/flow/components/commands.js +3 -0
- package/lib/parsers/flow/components/commands.js.flow +2 -1
- package/lib/parsers/flow/components/componentsUtils.js +10 -0
- package/lib/parsers/flow/components/componentsUtils.js.flow +11 -1
- package/lib/parsers/flow/components/events.js.flow +1 -1
- package/lib/parsers/flow/components/extends.js.flow +1 -1
- package/lib/parsers/flow/components/index.js +16 -20
- package/lib/parsers/flow/components/index.js.flow +8 -7
- package/lib/parsers/flow/components/options.js.flow +1 -1
- package/lib/parsers/flow/components/props.js.flow +1 -1
- package/lib/parsers/flow/modules/__test_fixtures__/failures.js +54 -0
- package/lib/parsers/flow/modules/__test_fixtures__/failures.js.flow +56 -0
- package/lib/parsers/flow/modules/__test_fixtures__/fixtures.js +64 -1
- package/lib/parsers/flow/modules/__test_fixtures__/fixtures.js.flow +66 -1
- package/lib/parsers/flow/modules/index.js +112 -48
- package/lib/parsers/flow/modules/index.js.flow +115 -44
- package/lib/parsers/flow/parser.d.ts +10 -0
- package/lib/parsers/flow/parser.js +173 -32
- package/lib/parsers/flow/parser.js.flow +201 -24
- package/lib/parsers/flow/utils.js +33 -57
- package/lib/parsers/flow/utils.js.flow +37 -60
- package/lib/parsers/parser.d.ts +17 -0
- package/lib/parsers/parser.js.flow +124 -17
- package/lib/parsers/parserMock.js +101 -30
- package/lib/parsers/parserMock.js.flow +139 -24
- package/lib/parsers/parsers-commons.js +121 -119
- package/lib/parsers/parsers-commons.js.flow +136 -131
- package/lib/parsers/parsers-primitives.js +75 -12
- package/lib/parsers/parsers-primitives.js.flow +92 -13
- package/lib/parsers/schema/index.d.ts +10 -0
- package/lib/parsers/{typescript/components/schema.js.flow → schema.js.flow} +1 -1
- package/lib/parsers/typescript/Visitor.js +42 -0
- package/lib/parsers/typescript/Visitor.js.flow +47 -0
- package/lib/parsers/typescript/components/__test_fixtures__/fixtures.js +22 -0
- package/lib/parsers/typescript/components/__test_fixtures__/fixtures.js.flow +22 -0
- package/lib/parsers/typescript/components/commands.js +3 -0
- package/lib/parsers/typescript/components/commands.js.flow +2 -1
- package/lib/parsers/typescript/components/componentsUtils.js +5 -0
- package/lib/parsers/typescript/components/componentsUtils.js.flow +6 -1
- package/lib/parsers/typescript/components/events.js.flow +1 -1
- package/lib/parsers/typescript/components/extends.js.flow +1 -1
- package/lib/parsers/typescript/components/index.js +15 -19
- package/lib/parsers/typescript/components/index.js.flow +8 -7
- package/lib/parsers/typescript/components/options.js.flow +1 -1
- package/lib/parsers/typescript/components/props.js.flow +1 -1
- package/lib/parsers/typescript/modules/__test_fixtures__/failures.js +52 -0
- package/lib/parsers/typescript/modules/__test_fixtures__/failures.js.flow +54 -0
- package/lib/parsers/typescript/modules/__test_fixtures__/fixtures.js +142 -0
- package/lib/parsers/typescript/modules/__test_fixtures__/fixtures.js.flow +146 -0
- package/lib/parsers/typescript/modules/index.js +276 -110
- package/lib/parsers/typescript/modules/index.js.flow +237 -68
- package/lib/parsers/typescript/parser.d.ts +10 -0
- package/lib/parsers/typescript/parser.js +175 -25
- package/lib/parsers/typescript/parser.js.flow +184 -26
- package/lib/parsers/typescript/utils.js +40 -51
- package/lib/parsers/typescript/utils.js.flow +44 -55
- package/lib/parsers/utils.js +0 -125
- package/lib/parsers/utils.js.flow +3 -70
- package/package.json +4 -1
- package/lib/parsers/flow/components/schema.js +0 -106
- package/lib/parsers/flow/components/schema.js.flow +0 -62
- package/lib/parsers/flow/index.js +0 -80
- package/lib/parsers/flow/index.js.flow +0 -85
- package/lib/parsers/typescript/index.js +0 -85
- package/lib/parsers/typescript/index.js.flow +0 -94
- /package/lib/parsers/{typescript/components/schema.js → schema.js} +0 -0
|
@@ -15,7 +15,6 @@ import type {
|
|
|
15
15
|
NamedShape,
|
|
16
16
|
NativeModuleAliasMap,
|
|
17
17
|
NativeModuleBaseTypeAnnotation,
|
|
18
|
-
NativeModuleEnumDeclaration,
|
|
19
18
|
NativeModuleSchema,
|
|
20
19
|
NativeModuleTypeAnnotation,
|
|
21
20
|
NativeModuleFunctionTypeAnnotation,
|
|
@@ -27,6 +26,13 @@ import type {
|
|
|
27
26
|
import type {Parser} from './parser';
|
|
28
27
|
import type {ParserType} from './errors';
|
|
29
28
|
import type {ParserErrorCapturer, TypeDeclarationMap} from './utils';
|
|
29
|
+
import type {ComponentSchemaBuilderConfig} from './schema.js';
|
|
30
|
+
|
|
31
|
+
const {
|
|
32
|
+
getConfigType,
|
|
33
|
+
extractNativeModuleName,
|
|
34
|
+
createParserErrorCapturer,
|
|
35
|
+
} = require('./utils');
|
|
30
36
|
|
|
31
37
|
const {
|
|
32
38
|
throwIfPropertyValueTypeIsUnsupported,
|
|
@@ -38,13 +44,11 @@ const {
|
|
|
38
44
|
const {
|
|
39
45
|
MissingTypeParameterGenericParserError,
|
|
40
46
|
MoreThanOneTypeParameterGenericParserError,
|
|
41
|
-
UnsupportedEnumDeclarationParserError,
|
|
42
|
-
UnsupportedGenericParserError,
|
|
43
|
-
UnsupportedObjectPropertyTypeAnnotationParserError,
|
|
44
47
|
UnnamedFunctionParamParserError,
|
|
45
48
|
} = require('./errors');
|
|
46
49
|
|
|
47
50
|
const invariant = require('invariant');
|
|
51
|
+
import type {NativeModuleEnumMap} from '../CodegenSchema';
|
|
48
52
|
|
|
49
53
|
function wrapModuleSchema(
|
|
50
54
|
nativeModuleSchema: NativeModuleSchema,
|
|
@@ -116,15 +120,9 @@ function assertGenericTypeAnnotationHasExactlyOneTypeParameter(
|
|
|
116
120
|
function isObjectProperty(property: $FlowFixMe, language: ParserType): boolean {
|
|
117
121
|
switch (language) {
|
|
118
122
|
case 'Flow':
|
|
119
|
-
return
|
|
120
|
-
property.type === 'ObjectTypeProperty' ||
|
|
121
|
-
property.type === 'ObjectTypeIndexer'
|
|
122
|
-
);
|
|
123
|
+
return property.type === 'ObjectTypeProperty';
|
|
123
124
|
case 'TypeScript':
|
|
124
|
-
return
|
|
125
|
-
property.type === 'TSPropertySignature' ||
|
|
126
|
-
property.type === 'TSIndexSignature'
|
|
127
|
-
);
|
|
125
|
+
return property.type === 'TSPropertySignature';
|
|
128
126
|
default:
|
|
129
127
|
return false;
|
|
130
128
|
}
|
|
@@ -135,6 +133,7 @@ function parseObjectProperty(
|
|
|
135
133
|
hasteModuleName: string,
|
|
136
134
|
types: TypeDeclarationMap,
|
|
137
135
|
aliasMap: {...NativeModuleAliasMap},
|
|
136
|
+
enumMap: {...NativeModuleEnumMap},
|
|
138
137
|
tryParse: ParserErrorCapturer,
|
|
139
138
|
cxxOnly: boolean,
|
|
140
139
|
nullable: boolean,
|
|
@@ -143,35 +142,13 @@ function parseObjectProperty(
|
|
|
143
142
|
): NamedShape<Nullable<NativeModuleBaseTypeAnnotation>> {
|
|
144
143
|
const language = parser.language();
|
|
145
144
|
|
|
146
|
-
if (!isObjectProperty(property, language)) {
|
|
147
|
-
throw new UnsupportedObjectPropertyTypeAnnotationParserError(
|
|
148
|
-
hasteModuleName,
|
|
149
|
-
property,
|
|
150
|
-
property.type,
|
|
151
|
-
language,
|
|
152
|
-
);
|
|
153
|
-
}
|
|
154
|
-
|
|
155
|
-
const {optional = false} = property;
|
|
156
145
|
const name = parser.getKeyName(property, hasteModuleName);
|
|
146
|
+
const {optional = false} = property;
|
|
157
147
|
const languageTypeAnnotation =
|
|
158
148
|
language === 'TypeScript'
|
|
159
149
|
? property.typeAnnotation.typeAnnotation
|
|
160
150
|
: property.value;
|
|
161
151
|
|
|
162
|
-
if (
|
|
163
|
-
property.type === 'ObjectTypeIndexer' ||
|
|
164
|
-
property.type === 'TSIndexSignature'
|
|
165
|
-
) {
|
|
166
|
-
return {
|
|
167
|
-
name,
|
|
168
|
-
optional,
|
|
169
|
-
typeAnnotation: wrapNullable(nullable, {
|
|
170
|
-
type: 'GenericObjectTypeAnnotation',
|
|
171
|
-
}), //TODO: use `emitObject` for typeAnnotation
|
|
172
|
-
};
|
|
173
|
-
}
|
|
174
|
-
|
|
175
152
|
const [propertyTypeAnnotation, isPropertyNullable] =
|
|
176
153
|
unwrapNullable<$FlowFixMe>(
|
|
177
154
|
translateTypeAnnotation(
|
|
@@ -179,8 +156,10 @@ function parseObjectProperty(
|
|
|
179
156
|
languageTypeAnnotation,
|
|
180
157
|
types,
|
|
181
158
|
aliasMap,
|
|
159
|
+
enumMap,
|
|
182
160
|
tryParse,
|
|
183
161
|
cxxOnly,
|
|
162
|
+
parser,
|
|
184
163
|
),
|
|
185
164
|
);
|
|
186
165
|
|
|
@@ -194,7 +173,6 @@ function parseObjectProperty(
|
|
|
194
173
|
languageTypeAnnotation,
|
|
195
174
|
property.key,
|
|
196
175
|
propertyTypeAnnotation.type,
|
|
197
|
-
language,
|
|
198
176
|
);
|
|
199
177
|
}
|
|
200
178
|
|
|
@@ -205,118 +183,43 @@ function parseObjectProperty(
|
|
|
205
183
|
};
|
|
206
184
|
}
|
|
207
185
|
|
|
208
|
-
function translateDefault(
|
|
209
|
-
hasteModuleName: string,
|
|
210
|
-
typeAnnotation: $FlowFixMe,
|
|
211
|
-
types: TypeDeclarationMap,
|
|
212
|
-
nullable: boolean,
|
|
213
|
-
parser: Parser,
|
|
214
|
-
): Nullable<NativeModuleEnumDeclaration> {
|
|
215
|
-
const maybeEnumDeclaration =
|
|
216
|
-
types[parser.nameForGenericTypeAnnotation(typeAnnotation)];
|
|
217
|
-
|
|
218
|
-
if (maybeEnumDeclaration && parser.isEnumDeclaration(maybeEnumDeclaration)) {
|
|
219
|
-
const memberType = parser.getMaybeEnumMemberType(maybeEnumDeclaration);
|
|
220
|
-
|
|
221
|
-
if (
|
|
222
|
-
memberType === 'NumberTypeAnnotation' ||
|
|
223
|
-
memberType === 'StringTypeAnnotation'
|
|
224
|
-
) {
|
|
225
|
-
return wrapNullable(nullable, {
|
|
226
|
-
type: 'EnumDeclaration',
|
|
227
|
-
memberType: memberType,
|
|
228
|
-
});
|
|
229
|
-
} else {
|
|
230
|
-
throw new UnsupportedEnumDeclarationParserError(
|
|
231
|
-
hasteModuleName,
|
|
232
|
-
typeAnnotation,
|
|
233
|
-
memberType,
|
|
234
|
-
parser.language(),
|
|
235
|
-
);
|
|
236
|
-
}
|
|
237
|
-
}
|
|
238
|
-
|
|
239
|
-
throw new UnsupportedGenericParserError(
|
|
240
|
-
hasteModuleName,
|
|
241
|
-
typeAnnotation,
|
|
242
|
-
parser,
|
|
243
|
-
);
|
|
244
|
-
}
|
|
245
|
-
|
|
246
|
-
function getTypeAnnotationParameters(
|
|
247
|
-
typeAnnotation: $FlowFixMe,
|
|
248
|
-
language: ParserType,
|
|
249
|
-
): $ReadOnlyArray<$FlowFixMe> {
|
|
250
|
-
return language === 'Flow'
|
|
251
|
-
? typeAnnotation.params
|
|
252
|
-
: typeAnnotation.parameters;
|
|
253
|
-
}
|
|
254
|
-
|
|
255
|
-
function getFunctionNameFromParameter(
|
|
256
|
-
param: NamedShape<Nullable<NativeModuleParamTypeAnnotation>>,
|
|
257
|
-
language: ParserType,
|
|
258
|
-
): $FlowFixMe {
|
|
259
|
-
return language === 'Flow' ? param.name : param.typeAnnotation;
|
|
260
|
-
}
|
|
261
|
-
|
|
262
|
-
function getParameterName(param: $FlowFixMe, language: ParserType): string {
|
|
263
|
-
return language === 'Flow' ? param.name.name : param.name;
|
|
264
|
-
}
|
|
265
|
-
|
|
266
|
-
function getParameterTypeAnnotation(
|
|
267
|
-
param: $FlowFixMe,
|
|
268
|
-
language: ParserType,
|
|
269
|
-
): $FlowFixMe {
|
|
270
|
-
return language === 'Flow'
|
|
271
|
-
? param.typeAnnotation
|
|
272
|
-
: param.typeAnnotation.typeAnnotation;
|
|
273
|
-
}
|
|
274
|
-
|
|
275
|
-
function getTypeAnnotationReturnType(
|
|
276
|
-
typeAnnotation: $FlowFixMe,
|
|
277
|
-
language: ParserType,
|
|
278
|
-
): $FlowFixMe {
|
|
279
|
-
return language === 'Flow'
|
|
280
|
-
? typeAnnotation.returnType
|
|
281
|
-
: typeAnnotation.typeAnnotation.typeAnnotation;
|
|
282
|
-
}
|
|
283
|
-
|
|
284
186
|
function translateFunctionTypeAnnotation(
|
|
285
187
|
hasteModuleName: string,
|
|
286
188
|
// TODO(T108222691): Use flow-types for @babel/parser
|
|
287
189
|
// TODO(T71778680): This is a FunctionTypeAnnotation. Type this.
|
|
288
|
-
|
|
190
|
+
functionTypeAnnotation: $FlowFixMe,
|
|
289
191
|
types: TypeDeclarationMap,
|
|
290
192
|
aliasMap: {...NativeModuleAliasMap},
|
|
193
|
+
enumMap: {...NativeModuleEnumMap},
|
|
291
194
|
tryParse: ParserErrorCapturer,
|
|
292
195
|
cxxOnly: boolean,
|
|
293
196
|
translateTypeAnnotation: $FlowFixMe,
|
|
294
|
-
|
|
197
|
+
parser: Parser,
|
|
295
198
|
): NativeModuleFunctionTypeAnnotation {
|
|
296
199
|
type Param = NamedShape<Nullable<NativeModuleParamTypeAnnotation>>;
|
|
297
200
|
const params: Array<Param> = [];
|
|
298
201
|
|
|
299
|
-
for (const param of
|
|
202
|
+
for (const param of parser.getFunctionTypeAnnotationParameters(
|
|
203
|
+
functionTypeAnnotation,
|
|
204
|
+
)) {
|
|
300
205
|
const parsedParam = tryParse(() => {
|
|
301
|
-
if (getFunctionNameFromParameter(param
|
|
302
|
-
throw new UnnamedFunctionParamParserError(
|
|
303
|
-
param,
|
|
304
|
-
hasteModuleName,
|
|
305
|
-
language,
|
|
306
|
-
);
|
|
206
|
+
if (parser.getFunctionNameFromParameter(param) == null) {
|
|
207
|
+
throw new UnnamedFunctionParamParserError(param, hasteModuleName);
|
|
307
208
|
}
|
|
308
209
|
|
|
309
|
-
const paramName = getParameterName(param
|
|
210
|
+
const paramName = parser.getParameterName(param);
|
|
310
211
|
|
|
311
212
|
const [paramTypeAnnotation, isParamTypeAnnotationNullable] =
|
|
312
213
|
unwrapNullable<$FlowFixMe>(
|
|
313
214
|
translateTypeAnnotation(
|
|
314
215
|
hasteModuleName,
|
|
315
|
-
getParameterTypeAnnotation(param
|
|
216
|
+
parser.getParameterTypeAnnotation(param),
|
|
316
217
|
types,
|
|
317
218
|
aliasMap,
|
|
219
|
+
enumMap,
|
|
318
220
|
tryParse,
|
|
319
221
|
cxxOnly,
|
|
222
|
+
parser,
|
|
320
223
|
),
|
|
321
224
|
);
|
|
322
225
|
|
|
@@ -351,19 +254,20 @@ function translateFunctionTypeAnnotation(
|
|
|
351
254
|
unwrapNullable<$FlowFixMe>(
|
|
352
255
|
translateTypeAnnotation(
|
|
353
256
|
hasteModuleName,
|
|
354
|
-
|
|
257
|
+
parser.getFunctionTypeAnnotationReturnType(functionTypeAnnotation),
|
|
355
258
|
types,
|
|
356
259
|
aliasMap,
|
|
260
|
+
enumMap,
|
|
357
261
|
tryParse,
|
|
358
262
|
cxxOnly,
|
|
263
|
+
parser,
|
|
359
264
|
),
|
|
360
265
|
);
|
|
361
266
|
|
|
362
267
|
throwIfUnsupportedFunctionReturnTypeAnnotationParserError(
|
|
363
268
|
hasteModuleName,
|
|
364
|
-
|
|
269
|
+
functionTypeAnnotation,
|
|
365
270
|
'FunctionTypeAnnotation',
|
|
366
|
-
language,
|
|
367
271
|
cxxOnly,
|
|
368
272
|
returnTypeAnnotation.type,
|
|
369
273
|
);
|
|
@@ -388,17 +292,18 @@ function buildPropertySchema(
|
|
|
388
292
|
property: $FlowFixMe,
|
|
389
293
|
types: TypeDeclarationMap,
|
|
390
294
|
aliasMap: {...NativeModuleAliasMap},
|
|
295
|
+
enumMap: {...NativeModuleEnumMap},
|
|
391
296
|
tryParse: ParserErrorCapturer,
|
|
392
297
|
cxxOnly: boolean,
|
|
393
|
-
language: ParserType,
|
|
394
298
|
resolveTypeAnnotation: $FlowFixMe,
|
|
395
299
|
translateTypeAnnotation: $FlowFixMe,
|
|
300
|
+
parser: Parser,
|
|
396
301
|
): NativeModulePropertyShape {
|
|
397
302
|
let nullable: boolean = false;
|
|
398
303
|
let {key, value} = property;
|
|
399
304
|
const methodName: string = key.name;
|
|
400
305
|
|
|
401
|
-
if (language === 'TypeScript') {
|
|
306
|
+
if (parser.language() === 'TypeScript') {
|
|
402
307
|
value =
|
|
403
308
|
property.type === 'TSMethodSignature'
|
|
404
309
|
? property
|
|
@@ -412,7 +317,7 @@ function buildPropertySchema(
|
|
|
412
317
|
property.value,
|
|
413
318
|
key.name,
|
|
414
319
|
value.type,
|
|
415
|
-
language,
|
|
320
|
+
parser.language(),
|
|
416
321
|
);
|
|
417
322
|
|
|
418
323
|
return {
|
|
@@ -425,15 +330,114 @@ function buildPropertySchema(
|
|
|
425
330
|
value,
|
|
426
331
|
types,
|
|
427
332
|
aliasMap,
|
|
333
|
+
enumMap,
|
|
428
334
|
tryParse,
|
|
429
335
|
cxxOnly,
|
|
430
336
|
translateTypeAnnotation,
|
|
431
|
-
|
|
337
|
+
parser,
|
|
432
338
|
),
|
|
433
339
|
),
|
|
434
340
|
};
|
|
435
341
|
}
|
|
436
342
|
|
|
343
|
+
function buildSchemaFromConfigType(
|
|
344
|
+
configType: 'module' | 'component' | 'none',
|
|
345
|
+
filename: ?string,
|
|
346
|
+
ast: $FlowFixMe,
|
|
347
|
+
wrapComponentSchema: (config: ComponentSchemaBuilderConfig) => SchemaType,
|
|
348
|
+
buildComponentSchema: (
|
|
349
|
+
ast: $FlowFixMe,
|
|
350
|
+
parser: Parser,
|
|
351
|
+
) => ComponentSchemaBuilderConfig,
|
|
352
|
+
buildModuleSchema: (
|
|
353
|
+
hasteModuleName: string,
|
|
354
|
+
ast: $FlowFixMe,
|
|
355
|
+
tryParse: ParserErrorCapturer,
|
|
356
|
+
parser: Parser,
|
|
357
|
+
) => NativeModuleSchema,
|
|
358
|
+
parser: Parser,
|
|
359
|
+
): SchemaType {
|
|
360
|
+
switch (configType) {
|
|
361
|
+
case 'component': {
|
|
362
|
+
return wrapComponentSchema(buildComponentSchema(ast, parser));
|
|
363
|
+
}
|
|
364
|
+
case 'module': {
|
|
365
|
+
if (filename === undefined || filename === null) {
|
|
366
|
+
throw new Error('Filepath expected while parasing a module');
|
|
367
|
+
}
|
|
368
|
+
const nativeModuleName = extractNativeModuleName(filename);
|
|
369
|
+
|
|
370
|
+
const [parsingErrors, tryParse] = createParserErrorCapturer();
|
|
371
|
+
|
|
372
|
+
const schema = tryParse(() =>
|
|
373
|
+
buildModuleSchema(nativeModuleName, ast, tryParse, parser),
|
|
374
|
+
);
|
|
375
|
+
|
|
376
|
+
if (parsingErrors.length > 0) {
|
|
377
|
+
/**
|
|
378
|
+
* TODO(T77968131): We have two options:
|
|
379
|
+
* - Throw the first error, but indicate there are more then one errors.
|
|
380
|
+
* - Display all errors, nicely formatted.
|
|
381
|
+
*
|
|
382
|
+
* For the time being, we're just throw the first error.
|
|
383
|
+
**/
|
|
384
|
+
|
|
385
|
+
throw parsingErrors[0];
|
|
386
|
+
}
|
|
387
|
+
|
|
388
|
+
invariant(
|
|
389
|
+
schema != null,
|
|
390
|
+
'When there are no parsing errors, the schema should not be null',
|
|
391
|
+
);
|
|
392
|
+
|
|
393
|
+
return wrapModuleSchema(schema, nativeModuleName);
|
|
394
|
+
}
|
|
395
|
+
default:
|
|
396
|
+
return {modules: {}};
|
|
397
|
+
}
|
|
398
|
+
}
|
|
399
|
+
|
|
400
|
+
function buildSchema(
|
|
401
|
+
contents: string,
|
|
402
|
+
filename: ?string,
|
|
403
|
+
wrapComponentSchema: (config: ComponentSchemaBuilderConfig) => SchemaType,
|
|
404
|
+
buildComponentSchema: (
|
|
405
|
+
ast: $FlowFixMe,
|
|
406
|
+
parser: Parser,
|
|
407
|
+
) => ComponentSchemaBuilderConfig,
|
|
408
|
+
buildModuleSchema: (
|
|
409
|
+
hasteModuleName: string,
|
|
410
|
+
ast: $FlowFixMe,
|
|
411
|
+
tryParse: ParserErrorCapturer,
|
|
412
|
+
parser: Parser,
|
|
413
|
+
) => NativeModuleSchema,
|
|
414
|
+
Visitor: ({isComponent: boolean, isModule: boolean}) => {
|
|
415
|
+
[type: string]: (node: $FlowFixMe) => void,
|
|
416
|
+
},
|
|
417
|
+
parser: Parser,
|
|
418
|
+
): SchemaType {
|
|
419
|
+
// Early return for non-Spec JavaScript files
|
|
420
|
+
if (
|
|
421
|
+
!contents.includes('codegenNativeComponent') &&
|
|
422
|
+
!contents.includes('TurboModule')
|
|
423
|
+
) {
|
|
424
|
+
return {modules: {}};
|
|
425
|
+
}
|
|
426
|
+
|
|
427
|
+
const ast = parser.getAst(contents);
|
|
428
|
+
const configType = getConfigType(ast, Visitor);
|
|
429
|
+
|
|
430
|
+
return buildSchemaFromConfigType(
|
|
431
|
+
configType,
|
|
432
|
+
filename,
|
|
433
|
+
ast,
|
|
434
|
+
wrapComponentSchema,
|
|
435
|
+
buildComponentSchema,
|
|
436
|
+
buildModuleSchema,
|
|
437
|
+
parser,
|
|
438
|
+
);
|
|
439
|
+
}
|
|
440
|
+
|
|
437
441
|
module.exports = {
|
|
438
442
|
wrapModuleSchema,
|
|
439
443
|
unwrapNullable,
|
|
@@ -441,7 +445,8 @@ module.exports = {
|
|
|
441
445
|
assertGenericTypeAnnotationHasExactlyOneTypeParameter,
|
|
442
446
|
isObjectProperty,
|
|
443
447
|
parseObjectProperty,
|
|
444
|
-
translateDefault,
|
|
445
448
|
translateFunctionTypeAnnotation,
|
|
446
449
|
buildPropertySchema,
|
|
450
|
+
buildSchemaFromConfigType,
|
|
451
|
+
buildSchema,
|
|
447
452
|
};
|
|
@@ -80,7 +80,10 @@ function _arrayWithHoles(arr) {
|
|
|
80
80
|
}
|
|
81
81
|
const _require = require('./errors'),
|
|
82
82
|
UnsupportedUnionTypeAnnotationParserError =
|
|
83
|
-
_require.UnsupportedUnionTypeAnnotationParserError
|
|
83
|
+
_require.UnsupportedUnionTypeAnnotationParserError,
|
|
84
|
+
UnsupportedTypeAnnotationParserError =
|
|
85
|
+
_require.UnsupportedTypeAnnotationParserError,
|
|
86
|
+
ParserError = _require.ParserError;
|
|
84
87
|
const _require2 = require('./error-utils'),
|
|
85
88
|
throwIfArrayElementTypeAnnotationIsUnsupported =
|
|
86
89
|
_require2.throwIfArrayElementTypeAnnotationIsUnsupported;
|
|
@@ -134,20 +137,22 @@ function emitFunction(
|
|
|
134
137
|
typeAnnotation,
|
|
135
138
|
types,
|
|
136
139
|
aliasMap,
|
|
140
|
+
enumMap,
|
|
137
141
|
tryParse,
|
|
138
142
|
cxxOnly,
|
|
139
143
|
translateTypeAnnotation,
|
|
140
|
-
|
|
144
|
+
parser,
|
|
141
145
|
) {
|
|
142
146
|
const translateFunctionTypeAnnotationValue = translateFunctionTypeAnnotation(
|
|
143
147
|
hasteModuleName,
|
|
144
148
|
typeAnnotation,
|
|
145
149
|
types,
|
|
146
150
|
aliasMap,
|
|
151
|
+
enumMap,
|
|
147
152
|
tryParse,
|
|
148
153
|
cxxOnly,
|
|
149
154
|
translateTypeAnnotation,
|
|
150
|
-
|
|
155
|
+
parser,
|
|
151
156
|
);
|
|
152
157
|
return wrapNullable(nullable, translateFunctionTypeAnnotationValue);
|
|
153
158
|
}
|
|
@@ -162,19 +167,19 @@ function emitString(nullable) {
|
|
|
162
167
|
});
|
|
163
168
|
}
|
|
164
169
|
function typeAliasResolution(
|
|
165
|
-
|
|
170
|
+
typeResolution,
|
|
166
171
|
objectTypeAnnotation,
|
|
167
172
|
aliasMap,
|
|
168
173
|
nullable,
|
|
169
174
|
) {
|
|
170
|
-
if (!
|
|
175
|
+
if (!typeResolution.successful) {
|
|
171
176
|
return wrapNullable(nullable, objectTypeAnnotation);
|
|
172
177
|
}
|
|
173
178
|
|
|
174
179
|
/**
|
|
175
180
|
* All aliases RHS are required.
|
|
176
181
|
*/
|
|
177
|
-
aliasMap[
|
|
182
|
+
aliasMap[typeResolution.name] = objectTypeAnnotation;
|
|
178
183
|
|
|
179
184
|
/**
|
|
180
185
|
* Nullability of type aliases is transitive.
|
|
@@ -207,7 +212,51 @@ function typeAliasResolution(
|
|
|
207
212
|
*/
|
|
208
213
|
return wrapNullable(nullable, {
|
|
209
214
|
type: 'TypeAliasTypeAnnotation',
|
|
210
|
-
name:
|
|
215
|
+
name: typeResolution.name,
|
|
216
|
+
});
|
|
217
|
+
}
|
|
218
|
+
function typeEnumResolution(
|
|
219
|
+
typeAnnotation,
|
|
220
|
+
typeResolution,
|
|
221
|
+
nullable,
|
|
222
|
+
hasteModuleName,
|
|
223
|
+
language,
|
|
224
|
+
enumMap,
|
|
225
|
+
parser,
|
|
226
|
+
) {
|
|
227
|
+
if (!typeResolution.successful || typeResolution.type !== 'enum') {
|
|
228
|
+
throw new UnsupportedTypeAnnotationParserError(
|
|
229
|
+
hasteModuleName,
|
|
230
|
+
typeAnnotation,
|
|
231
|
+
language,
|
|
232
|
+
);
|
|
233
|
+
}
|
|
234
|
+
const enumName = typeResolution.name;
|
|
235
|
+
const enumMemberType = parser.parseEnumMembersType(typeAnnotation);
|
|
236
|
+
try {
|
|
237
|
+
parser.validateEnumMembersSupported(typeAnnotation, enumMemberType);
|
|
238
|
+
} catch (e) {
|
|
239
|
+
if (e instanceof Error) {
|
|
240
|
+
throw new ParserError(
|
|
241
|
+
hasteModuleName,
|
|
242
|
+
typeAnnotation,
|
|
243
|
+
`Failed parsing the enum ${enumName} in ${hasteModuleName} with the error: ${e.message}`,
|
|
244
|
+
);
|
|
245
|
+
} else {
|
|
246
|
+
throw e;
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
const enumMembers = parser.parseEnumMembers(typeAnnotation);
|
|
250
|
+
enumMap[enumName] = {
|
|
251
|
+
name: enumName,
|
|
252
|
+
type: 'EnumDeclarationWithMembers',
|
|
253
|
+
memberType: enumMemberType,
|
|
254
|
+
members: enumMembers,
|
|
255
|
+
};
|
|
256
|
+
return wrapNullable(nullable, {
|
|
257
|
+
name: enumName,
|
|
258
|
+
type: 'EnumDeclaration',
|
|
259
|
+
memberType: enumMemberType,
|
|
211
260
|
});
|
|
212
261
|
}
|
|
213
262
|
function emitPromise(
|
|
@@ -217,6 +266,7 @@ function emitPromise(
|
|
|
217
266
|
nullable,
|
|
218
267
|
types,
|
|
219
268
|
aliasMap,
|
|
269
|
+
enumMap,
|
|
220
270
|
tryParse,
|
|
221
271
|
cxxOnly,
|
|
222
272
|
translateTypeAnnotation,
|
|
@@ -243,8 +293,10 @@ function emitPromise(
|
|
|
243
293
|
typeAnnotation.typeParameters.params[0],
|
|
244
294
|
types,
|
|
245
295
|
aliasMap,
|
|
296
|
+
enumMap,
|
|
246
297
|
tryParse,
|
|
247
298
|
cxxOnly,
|
|
299
|
+
parser,
|
|
248
300
|
),
|
|
249
301
|
});
|
|
250
302
|
} catch {
|
|
@@ -254,11 +306,17 @@ function emitPromise(
|
|
|
254
306
|
}
|
|
255
307
|
}
|
|
256
308
|
}
|
|
257
|
-
function
|
|
309
|
+
function emitGenericObject(nullable) {
|
|
258
310
|
return wrapNullable(nullable, {
|
|
259
311
|
type: 'GenericObjectTypeAnnotation',
|
|
260
312
|
});
|
|
261
313
|
}
|
|
314
|
+
function emitObject(nullable, properties) {
|
|
315
|
+
return wrapNullable(nullable, {
|
|
316
|
+
type: 'ObjectTypeAnnotation',
|
|
317
|
+
properties,
|
|
318
|
+
});
|
|
319
|
+
}
|
|
262
320
|
function emitFloat(nullable) {
|
|
263
321
|
return wrapNullable(nullable, {
|
|
264
322
|
type: 'FloatTypeAnnotation',
|
|
@@ -275,7 +333,6 @@ function emitUnion(nullable, hasteModuleName, typeAnnotation, parser) {
|
|
|
275
333
|
hasteModuleName,
|
|
276
334
|
typeAnnotation,
|
|
277
335
|
unionTypes,
|
|
278
|
-
parser.language(),
|
|
279
336
|
);
|
|
280
337
|
}
|
|
281
338
|
return wrapNullable(nullable, {
|
|
@@ -287,12 +344,13 @@ function translateArrayTypeAnnotation(
|
|
|
287
344
|
hasteModuleName,
|
|
288
345
|
types,
|
|
289
346
|
aliasMap,
|
|
347
|
+
enumMap,
|
|
290
348
|
cxxOnly,
|
|
291
349
|
arrayType,
|
|
292
350
|
elementType,
|
|
293
351
|
nullable,
|
|
294
|
-
language,
|
|
295
352
|
translateTypeAnnotation,
|
|
353
|
+
parser,
|
|
296
354
|
) {
|
|
297
355
|
try {
|
|
298
356
|
/**
|
|
@@ -306,6 +364,7 @@ function translateArrayTypeAnnotation(
|
|
|
306
364
|
elementType,
|
|
307
365
|
types,
|
|
308
366
|
aliasMap,
|
|
367
|
+
enumMap,
|
|
309
368
|
/**
|
|
310
369
|
* TODO(T72031674): Ensure that all ParsingErrors that are thrown
|
|
311
370
|
* while parsing the array element don't get captured and collected.
|
|
@@ -316,6 +375,7 @@ function translateArrayTypeAnnotation(
|
|
|
316
375
|
*/
|
|
317
376
|
nullGuard,
|
|
318
377
|
cxxOnly,
|
|
378
|
+
parser,
|
|
319
379
|
),
|
|
320
380
|
),
|
|
321
381
|
_unwrapNullable2 = _slicedToArray(_unwrapNullable, 2),
|
|
@@ -326,7 +386,6 @@ function translateArrayTypeAnnotation(
|
|
|
326
386
|
elementType,
|
|
327
387
|
arrayType,
|
|
328
388
|
_elementType.type,
|
|
329
|
-
language,
|
|
330
389
|
);
|
|
331
390
|
return wrapNullable(nullable, {
|
|
332
391
|
type: 'ArrayTypeAnnotation',
|
|
@@ -345,6 +404,7 @@ function emitArrayType(
|
|
|
345
404
|
parser,
|
|
346
405
|
types,
|
|
347
406
|
aliasMap,
|
|
407
|
+
enumMap,
|
|
348
408
|
cxxOnly,
|
|
349
409
|
nullable,
|
|
350
410
|
translateTypeAnnotation,
|
|
@@ -358,12 +418,13 @@ function emitArrayType(
|
|
|
358
418
|
hasteModuleName,
|
|
359
419
|
types,
|
|
360
420
|
aliasMap,
|
|
421
|
+
enumMap,
|
|
361
422
|
cxxOnly,
|
|
362
423
|
typeAnnotation.type,
|
|
363
424
|
typeAnnotation.typeParameters.params[0],
|
|
364
425
|
nullable,
|
|
365
|
-
parser.language(),
|
|
366
426
|
translateTypeAnnotation,
|
|
427
|
+
parser,
|
|
367
428
|
);
|
|
368
429
|
}
|
|
369
430
|
module.exports = {
|
|
@@ -374,6 +435,7 @@ module.exports = {
|
|
|
374
435
|
emitFunction,
|
|
375
436
|
emitInt32,
|
|
376
437
|
emitNumber,
|
|
438
|
+
emitGenericObject,
|
|
377
439
|
emitObject,
|
|
378
440
|
emitPromise,
|
|
379
441
|
emitRootTag,
|
|
@@ -383,5 +445,6 @@ module.exports = {
|
|
|
383
445
|
emitMixed,
|
|
384
446
|
emitUnion,
|
|
385
447
|
typeAliasResolution,
|
|
448
|
+
typeEnumResolution,
|
|
386
449
|
translateArrayTypeAnnotation,
|
|
387
450
|
};
|