@react-native/codegen 0.72.1 → 0.72.2
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 +1 -19
- package/lib/parsers/error-utils.js.flow +1 -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.flow +1 -1
- 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 +99 -25
- package/lib/parsers/flow/modules/index.js.flow +106 -22
- package/lib/parsers/flow/parser.d.ts +10 -0
- package/lib/parsers/flow/parser.js +122 -32
- package/lib/parsers/flow/parser.js.flow +144 -24
- package/lib/parsers/flow/utils.js +33 -19
- package/lib/parsers/flow/utils.js.flow +37 -22
- package/lib/parsers/parser.d.ts +17 -0
- package/lib/parsers/parser.js.flow +102 -17
- package/lib/parsers/parserMock.js +87 -30
- package/lib/parsers/parserMock.js.flow +118 -24
- package/lib/parsers/parsers-commons.js +121 -119
- package/lib/parsers/parsers-commons.js.flow +130 -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/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.flow +1 -1
- 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 +266 -87
- package/lib/parsers/typescript/modules/index.js.flow +230 -48
- package/lib/parsers/typescript/parser.d.ts +10 -0
- package/lib/parsers/typescript/parser.js +131 -25
- package/lib/parsers/typescript/parser.js.flow +137 -26
- package/lib/parsers/typescript/utils.js +40 -20
- package/lib/parsers/typescript/utils.js.flow +44 -24
- package/lib/parsers/utils.js +0 -125
- package/lib/parsers/utils.js.flow +3 -70
- package/package.json +4 -1
- 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
|
@@ -153,7 +153,6 @@ const _require3 = require('../../parsers-commons'),
|
|
|
153
153
|
assertGenericTypeAnnotationHasExactlyOneTypeParameter =
|
|
154
154
|
_require3.assertGenericTypeAnnotationHasExactlyOneTypeParameter,
|
|
155
155
|
parseObjectProperty = _require3.parseObjectProperty,
|
|
156
|
-
translateDefault = _require3.translateDefault,
|
|
157
156
|
buildPropertySchema = _require3.buildPropertySchema;
|
|
158
157
|
const _require4 = require('../../parsers-primitives'),
|
|
159
158
|
emitArrayType = _require4.emitArrayType,
|
|
@@ -163,6 +162,7 @@ const _require4 = require('../../parsers-primitives'),
|
|
|
163
162
|
emitFunction = _require4.emitFunction,
|
|
164
163
|
emitNumber = _require4.emitNumber,
|
|
165
164
|
emitInt32 = _require4.emitInt32,
|
|
165
|
+
emitGenericObject = _require4.emitGenericObject,
|
|
166
166
|
emitObject = _require4.emitObject,
|
|
167
167
|
emitPromise = _require4.emitPromise,
|
|
168
168
|
emitRootTag = _require4.emitRootTag,
|
|
@@ -172,12 +172,13 @@ const _require4 = require('../../parsers-primitives'),
|
|
|
172
172
|
emitMixed = _require4.emitMixed,
|
|
173
173
|
emitUnion = _require4.emitUnion,
|
|
174
174
|
typeAliasResolution = _require4.typeAliasResolution,
|
|
175
|
-
|
|
175
|
+
typeEnumResolution = _require4.typeEnumResolution;
|
|
176
176
|
const _require5 = require('../../errors'),
|
|
177
177
|
UnsupportedTypeAnnotationParserError =
|
|
178
178
|
_require5.UnsupportedTypeAnnotationParserError,
|
|
179
179
|
IncorrectModuleRegistryCallArgumentTypeParserError =
|
|
180
|
-
_require5.IncorrectModuleRegistryCallArgumentTypeParserError
|
|
180
|
+
_require5.IncorrectModuleRegistryCallArgumentTypeParserError,
|
|
181
|
+
UnsupportedGenericParserError = _require5.UnsupportedGenericParserError;
|
|
181
182
|
const _require6 = require('../../error-utils'),
|
|
182
183
|
throwIfModuleInterfaceNotFound = _require6.throwIfModuleInterfaceNotFound,
|
|
183
184
|
throwIfModuleInterfaceIsMisnamed = _require6.throwIfModuleInterfaceIsMisnamed,
|
|
@@ -192,10 +193,7 @@ const _require6 = require('../../error-utils'),
|
|
|
192
193
|
throwIfUntypedModule = _require6.throwIfUntypedModule,
|
|
193
194
|
throwIfMoreThanOneModuleInterfaceParserError =
|
|
194
195
|
_require6.throwIfMoreThanOneModuleInterfaceParserError;
|
|
195
|
-
const _require7 = require('../parser'),
|
|
196
|
-
FlowParser = _require7.FlowParser;
|
|
197
196
|
const language = 'Flow';
|
|
198
|
-
const parser = new FlowParser();
|
|
199
197
|
function translateTypeAnnotation(
|
|
200
198
|
hasteModuleName,
|
|
201
199
|
/**
|
|
@@ -204,8 +202,10 @@ function translateTypeAnnotation(
|
|
|
204
202
|
flowTypeAnnotation,
|
|
205
203
|
types,
|
|
206
204
|
aliasMap,
|
|
205
|
+
enumMap,
|
|
207
206
|
tryParse,
|
|
208
207
|
cxxOnly,
|
|
208
|
+
parser,
|
|
209
209
|
) {
|
|
210
210
|
const _resolveTypeAnnotatio = resolveTypeAnnotation(
|
|
211
211
|
flowTypeAnnotation,
|
|
@@ -213,7 +213,7 @@ function translateTypeAnnotation(
|
|
|
213
213
|
),
|
|
214
214
|
nullable = _resolveTypeAnnotatio.nullable,
|
|
215
215
|
typeAnnotation = _resolveTypeAnnotatio.typeAnnotation,
|
|
216
|
-
|
|
216
|
+
typeResolutionStatus = _resolveTypeAnnotatio.typeResolutionStatus;
|
|
217
217
|
switch (typeAnnotation.type) {
|
|
218
218
|
case 'GenericTypeAnnotation': {
|
|
219
219
|
switch (typeAnnotation.id.name) {
|
|
@@ -228,6 +228,7 @@ function translateTypeAnnotation(
|
|
|
228
228
|
nullable,
|
|
229
229
|
types,
|
|
230
230
|
aliasMap,
|
|
231
|
+
enumMap,
|
|
231
232
|
tryParse,
|
|
232
233
|
cxxOnly,
|
|
233
234
|
translateTypeAnnotation,
|
|
@@ -241,6 +242,7 @@ function translateTypeAnnotation(
|
|
|
241
242
|
parser,
|
|
242
243
|
types,
|
|
243
244
|
aliasMap,
|
|
245
|
+
enumMap,
|
|
244
246
|
cxxOnly,
|
|
245
247
|
nullable,
|
|
246
248
|
translateTypeAnnotation,
|
|
@@ -258,8 +260,10 @@ function translateTypeAnnotation(
|
|
|
258
260
|
typeAnnotation.typeParameters.params[0],
|
|
259
261
|
types,
|
|
260
262
|
aliasMap,
|
|
263
|
+
enumMap,
|
|
261
264
|
tryParse,
|
|
262
265
|
cxxOnly,
|
|
266
|
+
parser,
|
|
263
267
|
),
|
|
264
268
|
),
|
|
265
269
|
_unwrapNullable2 = _slicedToArray(_unwrapNullable, 2),
|
|
@@ -281,20 +285,72 @@ function translateTypeAnnotation(
|
|
|
281
285
|
}
|
|
282
286
|
case 'UnsafeObject':
|
|
283
287
|
case 'Object': {
|
|
284
|
-
return
|
|
288
|
+
return emitGenericObject(nullable);
|
|
289
|
+
}
|
|
290
|
+
case '$Partial': {
|
|
291
|
+
if (typeAnnotation.typeParameters.params.length !== 1) {
|
|
292
|
+
throw new Error(
|
|
293
|
+
'Partials only support annotating exactly one parameter.',
|
|
294
|
+
);
|
|
295
|
+
}
|
|
296
|
+
const annotatedElement =
|
|
297
|
+
types[typeAnnotation.typeParameters.params[0].id.name];
|
|
298
|
+
if (!annotatedElement) {
|
|
299
|
+
throw new Error(
|
|
300
|
+
'Partials only support annotating a type parameter.',
|
|
301
|
+
);
|
|
302
|
+
}
|
|
303
|
+
const properties = annotatedElement.right.properties.map(prop => {
|
|
304
|
+
return {
|
|
305
|
+
name: prop.key.name,
|
|
306
|
+
optional: true,
|
|
307
|
+
typeAnnotation: translateTypeAnnotation(
|
|
308
|
+
hasteModuleName,
|
|
309
|
+
prop.value,
|
|
310
|
+
types,
|
|
311
|
+
aliasMap,
|
|
312
|
+
enumMap,
|
|
313
|
+
tryParse,
|
|
314
|
+
cxxOnly,
|
|
315
|
+
parser,
|
|
316
|
+
),
|
|
317
|
+
};
|
|
318
|
+
});
|
|
319
|
+
return emitObject(nullable, properties);
|
|
285
320
|
}
|
|
286
321
|
default: {
|
|
287
|
-
|
|
322
|
+
throw new UnsupportedGenericParserError(
|
|
288
323
|
hasteModuleName,
|
|
289
324
|
typeAnnotation,
|
|
290
|
-
types,
|
|
291
|
-
nullable,
|
|
292
325
|
parser,
|
|
293
326
|
);
|
|
294
327
|
}
|
|
295
328
|
}
|
|
296
329
|
}
|
|
297
330
|
case 'ObjectTypeAnnotation': {
|
|
331
|
+
// if there is any indexer, then it is a dictionary
|
|
332
|
+
if (typeAnnotation.indexers) {
|
|
333
|
+
const indexers = typeAnnotation.indexers.filter(
|
|
334
|
+
member => member.type === 'ObjectTypeIndexer',
|
|
335
|
+
);
|
|
336
|
+
if (indexers.length > 0) {
|
|
337
|
+
// check the property type to prevent developers from using unsupported types
|
|
338
|
+
// the return value from `translateTypeAnnotation` is unused
|
|
339
|
+
const propertyType = indexers[0].value;
|
|
340
|
+
translateTypeAnnotation(
|
|
341
|
+
hasteModuleName,
|
|
342
|
+
propertyType,
|
|
343
|
+
types,
|
|
344
|
+
aliasMap,
|
|
345
|
+
enumMap,
|
|
346
|
+
tryParse,
|
|
347
|
+
cxxOnly,
|
|
348
|
+
parser,
|
|
349
|
+
);
|
|
350
|
+
// no need to do further checking
|
|
351
|
+
return emitGenericObject(nullable);
|
|
352
|
+
}
|
|
353
|
+
}
|
|
298
354
|
const objectTypeAnnotation = {
|
|
299
355
|
type: 'ObjectTypeAnnotation',
|
|
300
356
|
// $FlowFixMe[missing-type-arg]
|
|
@@ -306,6 +362,7 @@ function translateTypeAnnotation(
|
|
|
306
362
|
hasteModuleName,
|
|
307
363
|
types,
|
|
308
364
|
aliasMap,
|
|
365
|
+
enumMap,
|
|
309
366
|
tryParse,
|
|
310
367
|
cxxOnly,
|
|
311
368
|
nullable,
|
|
@@ -317,7 +374,7 @@ function translateTypeAnnotation(
|
|
|
317
374
|
.filter(Boolean),
|
|
318
375
|
};
|
|
319
376
|
return typeAliasResolution(
|
|
320
|
-
|
|
377
|
+
typeResolutionStatus,
|
|
321
378
|
objectTypeAnnotation,
|
|
322
379
|
aliasMap,
|
|
323
380
|
nullable,
|
|
@@ -342,10 +399,11 @@ function translateTypeAnnotation(
|
|
|
342
399
|
typeAnnotation,
|
|
343
400
|
types,
|
|
344
401
|
aliasMap,
|
|
402
|
+
enumMap,
|
|
345
403
|
tryParse,
|
|
346
404
|
cxxOnly,
|
|
347
405
|
translateTypeAnnotation,
|
|
348
|
-
|
|
406
|
+
parser,
|
|
349
407
|
);
|
|
350
408
|
}
|
|
351
409
|
case 'UnionTypeAnnotation': {
|
|
@@ -361,10 +419,22 @@ function translateTypeAnnotation(
|
|
|
361
419
|
case 'MixedTypeAnnotation': {
|
|
362
420
|
if (cxxOnly) {
|
|
363
421
|
return emitMixed(nullable);
|
|
422
|
+
} else {
|
|
423
|
+
return emitGenericObject(nullable);
|
|
364
424
|
}
|
|
365
|
-
// Fallthrough
|
|
366
425
|
}
|
|
367
|
-
|
|
426
|
+
case 'EnumStringBody':
|
|
427
|
+
case 'EnumNumberBody': {
|
|
428
|
+
return typeEnumResolution(
|
|
429
|
+
typeAnnotation,
|
|
430
|
+
typeResolutionStatus,
|
|
431
|
+
nullable,
|
|
432
|
+
hasteModuleName,
|
|
433
|
+
language,
|
|
434
|
+
enumMap,
|
|
435
|
+
parser,
|
|
436
|
+
);
|
|
437
|
+
}
|
|
368
438
|
default: {
|
|
369
439
|
throw new UnsupportedTypeAnnotationParserError(
|
|
370
440
|
hasteModuleName,
|
|
@@ -389,6 +459,7 @@ function buildModuleSchema(
|
|
|
389
459
|
*/
|
|
390
460
|
ast,
|
|
391
461
|
tryParse,
|
|
462
|
+
parser,
|
|
392
463
|
) {
|
|
393
464
|
const types = getTypes(ast);
|
|
394
465
|
const moduleSpecs = Object.values(types).filter(isModuleInterface);
|
|
@@ -421,13 +492,11 @@ function buildModuleSchema(
|
|
|
421
492
|
hasteModuleName,
|
|
422
493
|
moduleSpec,
|
|
423
494
|
callExpressions,
|
|
424
|
-
language,
|
|
425
495
|
);
|
|
426
496
|
throwIfMoreThanOneModuleRegistryCalls(
|
|
427
497
|
hasteModuleName,
|
|
428
498
|
callExpressions,
|
|
429
499
|
callExpressions.length,
|
|
430
|
-
language,
|
|
431
500
|
);
|
|
432
501
|
const callExpression = callExpressions[0];
|
|
433
502
|
const typeArguments = callExpression.typeArguments;
|
|
@@ -437,7 +506,6 @@ function buildModuleSchema(
|
|
|
437
506
|
callExpression,
|
|
438
507
|
methodName,
|
|
439
508
|
callExpression.arguments.length,
|
|
440
|
-
language,
|
|
441
509
|
);
|
|
442
510
|
if (callExpression.arguments[0].type !== 'Literal') {
|
|
443
511
|
const type = callExpression.arguments[0].type;
|
|
@@ -446,7 +514,6 @@ function buildModuleSchema(
|
|
|
446
514
|
callExpression.arguments[0],
|
|
447
515
|
methodName,
|
|
448
516
|
type,
|
|
449
|
-
language,
|
|
450
517
|
);
|
|
451
518
|
}
|
|
452
519
|
const $moduleName = callExpression.arguments[0].value;
|
|
@@ -456,7 +523,6 @@ function buildModuleSchema(
|
|
|
456
523
|
callExpression,
|
|
457
524
|
methodName,
|
|
458
525
|
$moduleName,
|
|
459
|
-
language,
|
|
460
526
|
);
|
|
461
527
|
throwIfIncorrectModuleRegistryCallTypeParameterParserError(
|
|
462
528
|
hasteModuleName,
|
|
@@ -481,29 +547,36 @@ function buildModuleSchema(
|
|
|
481
547
|
.filter(property => property.type === 'ObjectTypeProperty')
|
|
482
548
|
.map(property => {
|
|
483
549
|
const aliasMap = {};
|
|
550
|
+
const enumMap = {};
|
|
484
551
|
return tryParse(() => ({
|
|
485
552
|
aliasMap: aliasMap,
|
|
553
|
+
enumMap: enumMap,
|
|
486
554
|
propertyShape: buildPropertySchema(
|
|
487
555
|
hasteModuleName,
|
|
488
556
|
property,
|
|
489
557
|
types,
|
|
490
558
|
aliasMap,
|
|
559
|
+
enumMap,
|
|
491
560
|
tryParse,
|
|
492
561
|
cxxOnly,
|
|
493
|
-
language,
|
|
494
562
|
resolveTypeAnnotation,
|
|
495
563
|
translateTypeAnnotation,
|
|
564
|
+
parser,
|
|
496
565
|
),
|
|
497
566
|
}));
|
|
498
567
|
})
|
|
499
568
|
.filter(Boolean)
|
|
500
569
|
.reduce(
|
|
501
|
-
(moduleSchema, {aliasMap, propertyShape}) => ({
|
|
570
|
+
(moduleSchema, {aliasMap, enumMap, propertyShape}) => ({
|
|
502
571
|
type: 'NativeModule',
|
|
503
|
-
|
|
504
|
-
_objectSpread({}, moduleSchema.
|
|
572
|
+
aliasMap: _objectSpread(
|
|
573
|
+
_objectSpread({}, moduleSchema.aliasMap),
|
|
505
574
|
aliasMap,
|
|
506
575
|
),
|
|
576
|
+
enumMap: _objectSpread(
|
|
577
|
+
_objectSpread({}, moduleSchema.enumMap),
|
|
578
|
+
enumMap,
|
|
579
|
+
),
|
|
507
580
|
spec: {
|
|
508
581
|
properties: [...moduleSchema.spec.properties, propertyShape],
|
|
509
582
|
},
|
|
@@ -512,7 +585,8 @@ function buildModuleSchema(
|
|
|
512
585
|
}),
|
|
513
586
|
{
|
|
514
587
|
type: 'NativeModule',
|
|
515
|
-
|
|
588
|
+
aliasMap: {},
|
|
589
|
+
enumMap: {},
|
|
516
590
|
spec: {
|
|
517
591
|
properties: [],
|
|
518
592
|
},
|
|
@@ -13,12 +13,15 @@
|
|
|
13
13
|
import type {
|
|
14
14
|
NamedShape,
|
|
15
15
|
NativeModuleAliasMap,
|
|
16
|
+
NativeModuleEnumMap,
|
|
16
17
|
NativeModuleBaseTypeAnnotation,
|
|
17
18
|
NativeModuleTypeAnnotation,
|
|
18
19
|
NativeModulePropertyShape,
|
|
19
20
|
NativeModuleSchema,
|
|
20
21
|
Nullable,
|
|
21
22
|
} from '../../../CodegenSchema';
|
|
23
|
+
|
|
24
|
+
import type {Parser} from '../../parser';
|
|
22
25
|
import type {ParserErrorCapturer, TypeDeclarationMap} from '../../utils';
|
|
23
26
|
|
|
24
27
|
const {visit, isModuleRegistryCall, verifyPlatforms} = require('../../utils');
|
|
@@ -28,7 +31,6 @@ const {
|
|
|
28
31
|
wrapNullable,
|
|
29
32
|
assertGenericTypeAnnotationHasExactlyOneTypeParameter,
|
|
30
33
|
parseObjectProperty,
|
|
31
|
-
translateDefault,
|
|
32
34
|
buildPropertySchema,
|
|
33
35
|
} = require('../../parsers-commons');
|
|
34
36
|
const {
|
|
@@ -39,6 +41,7 @@ const {
|
|
|
39
41
|
emitFunction,
|
|
40
42
|
emitNumber,
|
|
41
43
|
emitInt32,
|
|
44
|
+
emitGenericObject,
|
|
42
45
|
emitObject,
|
|
43
46
|
emitPromise,
|
|
44
47
|
emitRootTag,
|
|
@@ -48,12 +51,13 @@ const {
|
|
|
48
51
|
emitMixed,
|
|
49
52
|
emitUnion,
|
|
50
53
|
typeAliasResolution,
|
|
51
|
-
|
|
54
|
+
typeEnumResolution,
|
|
52
55
|
} = require('../../parsers-primitives');
|
|
53
56
|
|
|
54
57
|
const {
|
|
55
58
|
UnsupportedTypeAnnotationParserError,
|
|
56
59
|
IncorrectModuleRegistryCallArgumentTypeParserError,
|
|
60
|
+
UnsupportedGenericParserError,
|
|
57
61
|
} = require('../../errors');
|
|
58
62
|
|
|
59
63
|
const {
|
|
@@ -67,10 +71,7 @@ const {
|
|
|
67
71
|
throwIfMoreThanOneModuleInterfaceParserError,
|
|
68
72
|
} = require('../../error-utils');
|
|
69
73
|
|
|
70
|
-
const {FlowParser} = require('../parser');
|
|
71
|
-
|
|
72
74
|
const language = 'Flow';
|
|
73
|
-
const parser = new FlowParser();
|
|
74
75
|
|
|
75
76
|
function translateTypeAnnotation(
|
|
76
77
|
hasteModuleName: string,
|
|
@@ -80,10 +81,12 @@ function translateTypeAnnotation(
|
|
|
80
81
|
flowTypeAnnotation: $FlowFixMe,
|
|
81
82
|
types: TypeDeclarationMap,
|
|
82
83
|
aliasMap: {...NativeModuleAliasMap},
|
|
84
|
+
enumMap: {...NativeModuleEnumMap},
|
|
83
85
|
tryParse: ParserErrorCapturer,
|
|
84
86
|
cxxOnly: boolean,
|
|
87
|
+
parser: Parser,
|
|
85
88
|
): Nullable<NativeModuleTypeAnnotation> {
|
|
86
|
-
const {nullable, typeAnnotation,
|
|
89
|
+
const {nullable, typeAnnotation, typeResolutionStatus} =
|
|
87
90
|
resolveTypeAnnotation(flowTypeAnnotation, types);
|
|
88
91
|
|
|
89
92
|
switch (typeAnnotation.type) {
|
|
@@ -100,6 +103,7 @@ function translateTypeAnnotation(
|
|
|
100
103
|
nullable,
|
|
101
104
|
types,
|
|
102
105
|
aliasMap,
|
|
106
|
+
enumMap,
|
|
103
107
|
tryParse,
|
|
104
108
|
cxxOnly,
|
|
105
109
|
translateTypeAnnotation,
|
|
@@ -113,6 +117,7 @@ function translateTypeAnnotation(
|
|
|
113
117
|
parser,
|
|
114
118
|
types,
|
|
115
119
|
aliasMap,
|
|
120
|
+
enumMap,
|
|
116
121
|
cxxOnly,
|
|
117
122
|
nullable,
|
|
118
123
|
translateTypeAnnotation,
|
|
@@ -131,8 +136,10 @@ function translateTypeAnnotation(
|
|
|
131
136
|
typeAnnotation.typeParameters.params[0],
|
|
132
137
|
types,
|
|
133
138
|
aliasMap,
|
|
139
|
+
enumMap,
|
|
134
140
|
tryParse,
|
|
135
141
|
cxxOnly,
|
|
142
|
+
parser,
|
|
136
143
|
),
|
|
137
144
|
);
|
|
138
145
|
|
|
@@ -152,20 +159,77 @@ function translateTypeAnnotation(
|
|
|
152
159
|
}
|
|
153
160
|
case 'UnsafeObject':
|
|
154
161
|
case 'Object': {
|
|
155
|
-
return
|
|
162
|
+
return emitGenericObject(nullable);
|
|
163
|
+
}
|
|
164
|
+
case '$Partial': {
|
|
165
|
+
if (typeAnnotation.typeParameters.params.length !== 1) {
|
|
166
|
+
throw new Error(
|
|
167
|
+
'Partials only support annotating exactly one parameter.',
|
|
168
|
+
);
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
const annotatedElement =
|
|
172
|
+
types[typeAnnotation.typeParameters.params[0].id.name];
|
|
173
|
+
|
|
174
|
+
if (!annotatedElement) {
|
|
175
|
+
throw new Error(
|
|
176
|
+
'Partials only support annotating a type parameter.',
|
|
177
|
+
);
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
const properties = annotatedElement.right.properties.map(prop => {
|
|
181
|
+
return {
|
|
182
|
+
name: prop.key.name,
|
|
183
|
+
optional: true,
|
|
184
|
+
typeAnnotation: translateTypeAnnotation(
|
|
185
|
+
hasteModuleName,
|
|
186
|
+
prop.value,
|
|
187
|
+
types,
|
|
188
|
+
aliasMap,
|
|
189
|
+
enumMap,
|
|
190
|
+
tryParse,
|
|
191
|
+
cxxOnly,
|
|
192
|
+
parser,
|
|
193
|
+
),
|
|
194
|
+
};
|
|
195
|
+
});
|
|
196
|
+
|
|
197
|
+
return emitObject(nullable, properties);
|
|
156
198
|
}
|
|
157
199
|
default: {
|
|
158
|
-
|
|
200
|
+
throw new UnsupportedGenericParserError(
|
|
159
201
|
hasteModuleName,
|
|
160
202
|
typeAnnotation,
|
|
161
|
-
types,
|
|
162
|
-
nullable,
|
|
163
203
|
parser,
|
|
164
204
|
);
|
|
165
205
|
}
|
|
166
206
|
}
|
|
167
207
|
}
|
|
168
208
|
case 'ObjectTypeAnnotation': {
|
|
209
|
+
// if there is any indexer, then it is a dictionary
|
|
210
|
+
if (typeAnnotation.indexers) {
|
|
211
|
+
const indexers = typeAnnotation.indexers.filter(
|
|
212
|
+
member => member.type === 'ObjectTypeIndexer',
|
|
213
|
+
);
|
|
214
|
+
if (indexers.length > 0) {
|
|
215
|
+
// check the property type to prevent developers from using unsupported types
|
|
216
|
+
// the return value from `translateTypeAnnotation` is unused
|
|
217
|
+
const propertyType = indexers[0].value;
|
|
218
|
+
translateTypeAnnotation(
|
|
219
|
+
hasteModuleName,
|
|
220
|
+
propertyType,
|
|
221
|
+
types,
|
|
222
|
+
aliasMap,
|
|
223
|
+
enumMap,
|
|
224
|
+
tryParse,
|
|
225
|
+
cxxOnly,
|
|
226
|
+
parser,
|
|
227
|
+
);
|
|
228
|
+
// no need to do further checking
|
|
229
|
+
return emitGenericObject(nullable);
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
|
|
169
233
|
const objectTypeAnnotation = {
|
|
170
234
|
type: 'ObjectTypeAnnotation',
|
|
171
235
|
// $FlowFixMe[missing-type-arg]
|
|
@@ -181,6 +245,7 @@ function translateTypeAnnotation(
|
|
|
181
245
|
hasteModuleName,
|
|
182
246
|
types,
|
|
183
247
|
aliasMap,
|
|
248
|
+
enumMap,
|
|
184
249
|
tryParse,
|
|
185
250
|
cxxOnly,
|
|
186
251
|
nullable,
|
|
@@ -194,7 +259,7 @@ function translateTypeAnnotation(
|
|
|
194
259
|
};
|
|
195
260
|
|
|
196
261
|
return typeAliasResolution(
|
|
197
|
-
|
|
262
|
+
typeResolutionStatus,
|
|
198
263
|
objectTypeAnnotation,
|
|
199
264
|
aliasMap,
|
|
200
265
|
nullable,
|
|
@@ -219,10 +284,11 @@ function translateTypeAnnotation(
|
|
|
219
284
|
typeAnnotation,
|
|
220
285
|
types,
|
|
221
286
|
aliasMap,
|
|
287
|
+
enumMap,
|
|
222
288
|
tryParse,
|
|
223
289
|
cxxOnly,
|
|
224
290
|
translateTypeAnnotation,
|
|
225
|
-
|
|
291
|
+
parser,
|
|
226
292
|
);
|
|
227
293
|
}
|
|
228
294
|
case 'UnionTypeAnnotation': {
|
|
@@ -238,8 +304,21 @@ function translateTypeAnnotation(
|
|
|
238
304
|
case 'MixedTypeAnnotation': {
|
|
239
305
|
if (cxxOnly) {
|
|
240
306
|
return emitMixed(nullable);
|
|
307
|
+
} else {
|
|
308
|
+
return emitGenericObject(nullable);
|
|
241
309
|
}
|
|
242
|
-
|
|
310
|
+
}
|
|
311
|
+
case 'EnumStringBody':
|
|
312
|
+
case 'EnumNumberBody': {
|
|
313
|
+
return typeEnumResolution(
|
|
314
|
+
typeAnnotation,
|
|
315
|
+
typeResolutionStatus,
|
|
316
|
+
nullable,
|
|
317
|
+
hasteModuleName,
|
|
318
|
+
language,
|
|
319
|
+
enumMap,
|
|
320
|
+
parser,
|
|
321
|
+
);
|
|
243
322
|
}
|
|
244
323
|
default: {
|
|
245
324
|
throw new UnsupportedTypeAnnotationParserError(
|
|
@@ -267,6 +346,7 @@ function buildModuleSchema(
|
|
|
267
346
|
*/
|
|
268
347
|
ast: $FlowFixMe,
|
|
269
348
|
tryParse: ParserErrorCapturer,
|
|
349
|
+
parser: Parser,
|
|
270
350
|
): NativeModuleSchema {
|
|
271
351
|
const types = getTypes(ast);
|
|
272
352
|
const moduleSpecs = (Object.values(types): $ReadOnlyArray<$FlowFixMe>).filter(
|
|
@@ -305,14 +385,12 @@ function buildModuleSchema(
|
|
|
305
385
|
hasteModuleName,
|
|
306
386
|
moduleSpec,
|
|
307
387
|
callExpressions,
|
|
308
|
-
language,
|
|
309
388
|
);
|
|
310
389
|
|
|
311
390
|
throwIfMoreThanOneModuleRegistryCalls(
|
|
312
391
|
hasteModuleName,
|
|
313
392
|
callExpressions,
|
|
314
393
|
callExpressions.length,
|
|
315
|
-
language,
|
|
316
394
|
);
|
|
317
395
|
|
|
318
396
|
const [callExpression] = callExpressions;
|
|
@@ -324,7 +402,6 @@ function buildModuleSchema(
|
|
|
324
402
|
callExpression,
|
|
325
403
|
methodName,
|
|
326
404
|
callExpression.arguments.length,
|
|
327
|
-
language,
|
|
328
405
|
);
|
|
329
406
|
|
|
330
407
|
if (callExpression.arguments[0].type !== 'Literal') {
|
|
@@ -334,7 +411,6 @@ function buildModuleSchema(
|
|
|
334
411
|
callExpression.arguments[0],
|
|
335
412
|
methodName,
|
|
336
413
|
type,
|
|
337
|
-
language,
|
|
338
414
|
);
|
|
339
415
|
}
|
|
340
416
|
|
|
@@ -346,7 +422,6 @@ function buildModuleSchema(
|
|
|
346
422
|
callExpression,
|
|
347
423
|
methodName,
|
|
348
424
|
$moduleName,
|
|
349
|
-
language,
|
|
350
425
|
);
|
|
351
426
|
|
|
352
427
|
throwIfIncorrectModuleRegistryCallTypeParameterParserError(
|
|
@@ -374,29 +449,37 @@ function buildModuleSchema(
|
|
|
374
449
|
.filter(property => property.type === 'ObjectTypeProperty')
|
|
375
450
|
.map<?{
|
|
376
451
|
aliasMap: NativeModuleAliasMap,
|
|
452
|
+
enumMap: NativeModuleEnumMap,
|
|
377
453
|
propertyShape: NativeModulePropertyShape,
|
|
378
454
|
}>(property => {
|
|
379
455
|
const aliasMap: {...NativeModuleAliasMap} = {};
|
|
456
|
+
const enumMap: {...NativeModuleEnumMap} = {};
|
|
380
457
|
return tryParse(() => ({
|
|
381
458
|
aliasMap: aliasMap,
|
|
459
|
+
enumMap: enumMap,
|
|
382
460
|
propertyShape: buildPropertySchema(
|
|
383
461
|
hasteModuleName,
|
|
384
462
|
property,
|
|
385
463
|
types,
|
|
386
464
|
aliasMap,
|
|
465
|
+
enumMap,
|
|
387
466
|
tryParse,
|
|
388
467
|
cxxOnly,
|
|
389
|
-
language,
|
|
390
468
|
resolveTypeAnnotation,
|
|
391
469
|
translateTypeAnnotation,
|
|
470
|
+
parser,
|
|
392
471
|
),
|
|
393
472
|
}));
|
|
394
473
|
})
|
|
395
474
|
.filter(Boolean)
|
|
396
475
|
.reduce(
|
|
397
|
-
(
|
|
476
|
+
(
|
|
477
|
+
moduleSchema: NativeModuleSchema,
|
|
478
|
+
{aliasMap, enumMap, propertyShape},
|
|
479
|
+
) => ({
|
|
398
480
|
type: 'NativeModule',
|
|
399
|
-
|
|
481
|
+
aliasMap: {...moduleSchema.aliasMap, ...aliasMap},
|
|
482
|
+
enumMap: {...moduleSchema.enumMap, ...enumMap},
|
|
400
483
|
spec: {
|
|
401
484
|
properties: [...moduleSchema.spec.properties, propertyShape],
|
|
402
485
|
},
|
|
@@ -405,7 +488,8 @@ function buildModuleSchema(
|
|
|
405
488
|
}),
|
|
406
489
|
{
|
|
407
490
|
type: 'NativeModule',
|
|
408
|
-
|
|
491
|
+
aliasMap: {},
|
|
492
|
+
enumMap: {},
|
|
409
493
|
spec: {properties: []},
|
|
410
494
|
moduleName,
|
|
411
495
|
excludedPlatforms:
|
|
@@ -0,0 +1,10 @@
|
|
|
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
|
+
import type {Parser} from '../parser';
|
|
9
|
+
|
|
10
|
+
export declare class FlowParser implements Parser{}
|