@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.
- package/README.md +21 -0
- package/lib/CodegenSchema.js +11 -0
- package/lib/CodegenSchema.js.flow +351 -0
- package/lib/SchemaValidator.js +54 -0
- package/lib/SchemaValidator.js.flow +67 -0
- package/lib/cli/combine/combine-js-to-schema-cli.js +50 -0
- package/lib/cli/combine/combine-js-to-schema-cli.js.flow +49 -0
- package/lib/cli/combine/combine-js-to-schema.js +110 -0
- package/lib/cli/combine/combine-js-to-schema.js.flow +48 -0
- package/lib/cli/combine/combine-utils.js +118 -0
- package/lib/cli/combine/combine-utils.js.flow +85 -0
- package/lib/cli/generators/generate-all.js +65 -0
- package/lib/cli/generators/generate-all.js.flow +66 -0
- package/lib/cli/parser/parser-cli.js +55 -0
- package/lib/cli/parser/parser-cli.js.flow +18 -0
- package/lib/cli/parser/parser.js +35 -0
- package/lib/cli/parser/parser.js.flow +37 -0
- package/lib/cli/parser/parser.sh +15 -0
- package/lib/generators/RNCodegen.js +207 -0
- package/lib/generators/RNCodegen.js.flow +284 -0
- package/lib/generators/Utils.js +31 -0
- package/lib/generators/Utils.js.flow +33 -0
- package/lib/generators/__test_fixtures__/fixtures.js +79 -0
- package/lib/generators/__test_fixtures__/fixtures.js.flow +82 -0
- package/lib/generators/components/ComponentsGeneratorUtils.js +217 -0
- package/lib/generators/components/ComponentsGeneratorUtils.js.flow +304 -0
- package/lib/generators/components/CppHelpers.js +188 -0
- package/lib/generators/components/CppHelpers.js.flow +228 -0
- package/lib/generators/components/GenerateComponentDescriptorH.js +75 -0
- package/lib/generators/components/GenerateComponentDescriptorH.js.flow +95 -0
- package/lib/generators/components/GenerateComponentHObjCpp.js +327 -0
- package/lib/generators/components/GenerateComponentHObjCpp.js.flow +418 -0
- package/lib/generators/components/GenerateEventEmitterCpp.js +199 -0
- package/lib/generators/components/GenerateEventEmitterCpp.js.flow +273 -0
- package/lib/generators/components/GenerateEventEmitterH.js +224 -0
- package/lib/generators/components/GenerateEventEmitterH.js.flow +315 -0
- package/lib/generators/components/GeneratePropsCpp.js +126 -0
- package/lib/generators/components/GeneratePropsCpp.js.flow +161 -0
- package/lib/generators/components/GeneratePropsH.js +606 -0
- package/lib/generators/components/GeneratePropsH.js.flow +778 -0
- package/lib/generators/components/GeneratePropsJavaDelegate.js +287 -0
- package/lib/generators/components/GeneratePropsJavaDelegate.js.flow +348 -0
- package/lib/generators/components/GeneratePropsJavaInterface.js +237 -0
- package/lib/generators/components/GeneratePropsJavaInterface.js.flow +288 -0
- package/lib/generators/components/GeneratePropsJavaPojo/PojoCollector.js +157 -0
- package/lib/generators/components/GeneratePropsJavaPojo/PojoCollector.js.flow +187 -0
- package/lib/generators/components/GeneratePropsJavaPojo/index.js +66 -0
- package/lib/generators/components/GeneratePropsJavaPojo/index.js.flow +80 -0
- package/lib/generators/components/GeneratePropsJavaPojo/serializePojo.js +273 -0
- package/lib/generators/components/GeneratePropsJavaPojo/serializePojo.js.flow +296 -0
- package/lib/generators/components/GenerateShadowNodeCpp.js +73 -0
- package/lib/generators/components/GenerateShadowNodeCpp.js.flow +95 -0
- package/lib/generators/components/GenerateShadowNodeH.js +91 -0
- package/lib/generators/components/GenerateShadowNodeH.js.flow +124 -0
- package/lib/generators/components/GenerateStateCpp.js +70 -0
- package/lib/generators/components/GenerateStateCpp.js.flow +92 -0
- package/lib/generators/components/GenerateStateH.js +93 -0
- package/lib/generators/components/GenerateStateH.js.flow +111 -0
- package/lib/generators/components/GenerateTests.js +165 -0
- package/lib/generators/components/GenerateTests.js.flow +219 -0
- package/lib/generators/components/GenerateThirdPartyFabricComponentsProviderH.js +91 -0
- package/lib/generators/components/GenerateThirdPartyFabricComponentsProviderH.js.flow +107 -0
- package/lib/generators/components/GenerateThirdPartyFabricComponentsProviderObjCpp.js +89 -0
- package/lib/generators/components/GenerateThirdPartyFabricComponentsProviderObjCpp.js.flow +105 -0
- package/lib/generators/components/GenerateViewConfigJs.js +410 -0
- package/lib/generators/components/GenerateViewConfigJs.js.flow +484 -0
- package/lib/generators/components/JavaHelpers.js +87 -0
- package/lib/generators/components/JavaHelpers.js.flow +119 -0
- package/lib/generators/components/__test_fixtures__/fixtures.js +1641 -0
- package/lib/generators/components/__test_fixtures__/fixtures.js.flow +1672 -0
- package/lib/generators/modules/GenerateModuleCpp.js +299 -0
- package/lib/generators/modules/GenerateModuleCpp.js.flow +278 -0
- package/lib/generators/modules/GenerateModuleH.js +373 -0
- package/lib/generators/modules/GenerateModuleH.js.flow +355 -0
- package/lib/generators/modules/GenerateModuleJavaSpec.js +571 -0
- package/lib/generators/modules/GenerateModuleJavaSpec.js.flow +553 -0
- package/lib/generators/modules/GenerateModuleJniCpp.js +505 -0
- package/lib/generators/modules/GenerateModuleJniCpp.js.flow +523 -0
- package/lib/generators/modules/GenerateModuleJniH.js +138 -0
- package/lib/generators/modules/GenerateModuleJniH.js.flow +148 -0
- package/lib/generators/modules/GenerateModuleObjCpp/StructCollector.js +262 -0
- package/lib/generators/modules/GenerateModuleObjCpp/StructCollector.js.flow +208 -0
- package/lib/generators/modules/GenerateModuleObjCpp/Utils.js +25 -0
- package/lib/generators/modules/GenerateModuleObjCpp/Utils.js.flow +32 -0
- package/lib/generators/modules/GenerateModuleObjCpp/header/serializeConstantsStruct.js +337 -0
- package/lib/generators/modules/GenerateModuleObjCpp/header/serializeConstantsStruct.js.flow +288 -0
- package/lib/generators/modules/GenerateModuleObjCpp/header/serializeRegularStruct.js +330 -0
- package/lib/generators/modules/GenerateModuleObjCpp/header/serializeRegularStruct.js.flow +279 -0
- package/lib/generators/modules/GenerateModuleObjCpp/header/serializeStruct.js +25 -0
- package/lib/generators/modules/GenerateModuleObjCpp/header/serializeStruct.js.flow +35 -0
- package/lib/generators/modules/GenerateModuleObjCpp/index.js +185 -0
- package/lib/generators/modules/GenerateModuleObjCpp/index.js.flow +219 -0
- package/lib/generators/modules/GenerateModuleObjCpp/serializeMethod.js +529 -0
- package/lib/generators/modules/GenerateModuleObjCpp/serializeMethod.js.flow +510 -0
- package/lib/generators/modules/GenerateModuleObjCpp/source/serializeModule.js +96 -0
- package/lib/generators/modules/GenerateModuleObjCpp/source/serializeModule.js.flow +121 -0
- package/lib/generators/modules/Utils.js +34 -0
- package/lib/generators/modules/Utils.js.flow +53 -0
- package/lib/generators/modules/__test_fixtures__/fixtures.js +1658 -0
- package/lib/generators/modules/__test_fixtures__/fixtures.js.flow +1669 -0
- package/lib/parsers/consistency/compareSnaps.js +84 -0
- package/lib/parsers/error-utils.js +284 -0
- package/lib/parsers/error-utils.js.flow +295 -0
- package/lib/parsers/errors.js +350 -0
- package/lib/parsers/errors.js.flow +439 -0
- package/lib/parsers/flow/components/__test_fixtures__/failures.js +583 -0
- package/lib/parsers/flow/components/__test_fixtures__/failures.js.flow +600 -0
- package/lib/parsers/flow/components/__test_fixtures__/fixtures.js +1001 -0
- package/lib/parsers/flow/components/__test_fixtures__/fixtures.js.flow +1016 -0
- package/lib/parsers/flow/components/commands.js +104 -0
- package/lib/parsers/flow/components/commands.js.flow +123 -0
- package/lib/parsers/flow/components/componentsUtils.js +446 -0
- package/lib/parsers/flow/components/componentsUtils.js.flow +496 -0
- package/lib/parsers/flow/components/events.js +233 -0
- package/lib/parsers/flow/components/events.js.flow +262 -0
- package/lib/parsers/flow/components/extends.js +52 -0
- package/lib/parsers/flow/components/extends.js.flow +66 -0
- package/lib/parsers/flow/components/index.js +267 -0
- package/lib/parsers/flow/components/index.js.flow +226 -0
- package/lib/parsers/flow/components/options.js +72 -0
- package/lib/parsers/flow/components/options.js.flow +87 -0
- package/lib/parsers/flow/components/props.js +47 -0
- package/lib/parsers/flow/components/props.js.flow +60 -0
- package/lib/parsers/flow/components/schema.js +106 -0
- package/lib/parsers/flow/components/schema.js.flow +62 -0
- package/lib/parsers/flow/index.js +80 -0
- package/lib/parsers/flow/index.js.flow +85 -0
- package/lib/parsers/flow/modules/__test_fixtures__/failures.js +215 -0
- package/lib/parsers/flow/modules/__test_fixtures__/failures.js.flow +223 -0
- package/lib/parsers/flow/modules/__test_fixtures__/fixtures.js +724 -0
- package/lib/parsers/flow/modules/__test_fixtures__/fixtures.js.flow +747 -0
- package/lib/parsers/flow/modules/index.js +528 -0
- package/lib/parsers/flow/modules/index.js.flow +420 -0
- package/lib/parsers/flow/parser.js +109 -0
- package/lib/parsers/flow/parser.js.flow +83 -0
- package/lib/parsers/flow/utils.js +108 -0
- package/lib/parsers/flow/utils.js.flow +123 -0
- package/lib/parsers/parser.js +11 -0
- package/lib/parsers/parser.js.flow +70 -0
- package/lib/parsers/parserMock.js +96 -0
- package/lib/parsers/parserMock.js.flow +68 -0
- package/lib/parsers/parsers-commons.js +448 -0
- package/lib/parsers/parsers-commons.js.flow +447 -0
- package/lib/parsers/parsers-primitives.js +387 -0
- package/lib/parsers/parsers-primitives.js.flow +383 -0
- package/lib/parsers/parsers-utils.js +18 -0
- package/lib/parsers/parsers-utils.js.flow +19 -0
- package/lib/parsers/schema/index.js +23 -0
- package/lib/parsers/schema/index.js.flow +26 -0
- package/lib/parsers/typescript/components/__test_fixtures__/failures.js +489 -0
- package/lib/parsers/typescript/components/__test_fixtures__/failures.js.flow +505 -0
- package/lib/parsers/typescript/components/__test_fixtures__/fixtures.js +1151 -0
- package/lib/parsers/typescript/components/__test_fixtures__/fixtures.js.flow +1168 -0
- package/lib/parsers/typescript/components/commands.js +132 -0
- package/lib/parsers/typescript/components/commands.js.flow +151 -0
- package/lib/parsers/typescript/components/componentsUtils.js +471 -0
- package/lib/parsers/typescript/components/componentsUtils.js.flow +521 -0
- package/lib/parsers/typescript/components/events.js +240 -0
- package/lib/parsers/typescript/components/events.js.flow +262 -0
- package/lib/parsers/typescript/components/extends.js +88 -0
- package/lib/parsers/typescript/components/extends.js.flow +103 -0
- package/lib/parsers/typescript/components/index.js +277 -0
- package/lib/parsers/typescript/components/index.js.flow +239 -0
- package/lib/parsers/typescript/components/options.js +72 -0
- package/lib/parsers/typescript/components/options.js.flow +87 -0
- package/lib/parsers/typescript/components/props.js +39 -0
- package/lib/parsers/typescript/components/props.js.flow +48 -0
- package/lib/parsers/typescript/components/schema.js +106 -0
- package/lib/parsers/typescript/components/schema.js.flow +62 -0
- package/lib/parsers/typescript/index.js +85 -0
- package/lib/parsers/typescript/index.js.flow +94 -0
- package/lib/parsers/typescript/modules/__test_fixtures__/failures.js +160 -0
- package/lib/parsers/typescript/modules/__test_fixtures__/failures.js.flow +167 -0
- package/lib/parsers/typescript/modules/__test_fixtures__/fixtures.js +701 -0
- package/lib/parsers/typescript/modules/__test_fixtures__/fixtures.js.flow +727 -0
- package/lib/parsers/typescript/modules/index.js +543 -0
- package/lib/parsers/typescript/modules/index.js.flow +435 -0
- package/lib/parsers/typescript/parseTopLevelType.js +203 -0
- package/lib/parsers/typescript/parseTopLevelType.js.flow +243 -0
- package/lib/parsers/typescript/parser.js +105 -0
- package/lib/parsers/typescript/parser.js.flow +87 -0
- package/lib/parsers/typescript/utils.js +101 -0
- package/lib/parsers/typescript/utils.js.flow +115 -0
- package/lib/parsers/utils.js +273 -0
- package/lib/parsers/utils.js.flow +266 -0
- package/package.json +45 -0
|
@@ -0,0 +1,84 @@
|
|
|
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
|
+
* @format
|
|
8
|
+
* @oncall react_native
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
'use strict';
|
|
12
|
+
|
|
13
|
+
function compareSnaps(
|
|
14
|
+
flowFixtures,
|
|
15
|
+
flowSnaps,
|
|
16
|
+
flowExtraCases,
|
|
17
|
+
tsFixtures,
|
|
18
|
+
tsSnaps,
|
|
19
|
+
tsExtraCases,
|
|
20
|
+
ignoredCases,
|
|
21
|
+
) {
|
|
22
|
+
const flowCases = Object.keys(flowFixtures).sort();
|
|
23
|
+
const tsCases = Object.keys(tsFixtures).sort();
|
|
24
|
+
const commonCases = flowCases.filter(name => tsCases.indexOf(name) !== -1);
|
|
25
|
+
describe('RN Codegen Parsers', () => {
|
|
26
|
+
it('should not unintentionally contains test case for Flow but not for TypeScript', () => {
|
|
27
|
+
expect(
|
|
28
|
+
flowCases.filter(name => commonCases.indexOf(name) === -1),
|
|
29
|
+
).toEqual(flowExtraCases);
|
|
30
|
+
});
|
|
31
|
+
it('should not unintentionally contains test case for TypeScript but not for Flow', () => {
|
|
32
|
+
expect(tsCases.filter(name => commonCases.indexOf(name) === -1)).toEqual(
|
|
33
|
+
tsExtraCases,
|
|
34
|
+
);
|
|
35
|
+
});
|
|
36
|
+
for (const commonCase of commonCases) {
|
|
37
|
+
const flowSnap =
|
|
38
|
+
flowSnaps[
|
|
39
|
+
`RN Codegen Flow Parser can generate fixture ${commonCase} 1`
|
|
40
|
+
];
|
|
41
|
+
const tsSnap =
|
|
42
|
+
tsSnaps[
|
|
43
|
+
`RN Codegen TypeScript Parser can generate fixture ${commonCase} 1`
|
|
44
|
+
];
|
|
45
|
+
it(`should be able to find the snapshot for Flow for case ${commonCase}`, () => {
|
|
46
|
+
expect(typeof flowSnap).toEqual('string');
|
|
47
|
+
});
|
|
48
|
+
it(`should be able to find the snapshot for TypeScript for case ${commonCase}`, () => {
|
|
49
|
+
expect(typeof tsSnap).toEqual('string');
|
|
50
|
+
});
|
|
51
|
+
if (ignoredCases.indexOf(commonCase) === -1) {
|
|
52
|
+
it(`should generate the same snapshot from Flow and TypeScript for fixture ${commonCase}`, () => {
|
|
53
|
+
expect(flowSnap).toEqual(tsSnap);
|
|
54
|
+
});
|
|
55
|
+
} else {
|
|
56
|
+
it(`should generate the different snapshot from Flow and TypeScript for fixture ${commonCase}`, () => {
|
|
57
|
+
expect(flowSnap).not.toEqual(tsSnap);
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
function compareTsArraySnaps(tsSnaps, tsExtraCases) {
|
|
64
|
+
for (const array2Case of tsExtraCases.filter(
|
|
65
|
+
name => name.indexOf('ARRAY2') !== -1,
|
|
66
|
+
)) {
|
|
67
|
+
const arrayCase = array2Case.replace('ARRAY2', 'ARRAY');
|
|
68
|
+
it(`should generate the same snap from fixture ${arrayCase} and ${array2Case}`, () => {
|
|
69
|
+
expect(
|
|
70
|
+
tsSnaps[
|
|
71
|
+
`RN Codegen TypeScript Parser can generate fixture ${arrayCase}`
|
|
72
|
+
],
|
|
73
|
+
).toEqual(
|
|
74
|
+
tsSnaps[
|
|
75
|
+
`RN Codegen TypeScript Parser can generate fixture ${array2Case}`
|
|
76
|
+
],
|
|
77
|
+
);
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
module.exports = {
|
|
82
|
+
compareSnaps,
|
|
83
|
+
compareTsArraySnaps,
|
|
84
|
+
};
|
|
@@ -0,0 +1,284 @@
|
|
|
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
|
+
const _require = require('./errors'),
|
|
14
|
+
MisnamedModuleInterfaceParserError =
|
|
15
|
+
_require.MisnamedModuleInterfaceParserError,
|
|
16
|
+
UnsupportedFunctionReturnTypeAnnotationParserError =
|
|
17
|
+
_require.UnsupportedFunctionReturnTypeAnnotationParserError,
|
|
18
|
+
ModuleInterfaceNotFoundParserError =
|
|
19
|
+
_require.ModuleInterfaceNotFoundParserError,
|
|
20
|
+
MoreThanOneModuleRegistryCallsParserError =
|
|
21
|
+
_require.MoreThanOneModuleRegistryCallsParserError,
|
|
22
|
+
UnusedModuleInterfaceParserError = _require.UnusedModuleInterfaceParserError,
|
|
23
|
+
IncorrectModuleRegistryCallArityParserError =
|
|
24
|
+
_require.IncorrectModuleRegistryCallArityParserError,
|
|
25
|
+
IncorrectModuleRegistryCallTypeParameterParserError =
|
|
26
|
+
_require.IncorrectModuleRegistryCallTypeParameterParserError,
|
|
27
|
+
UnsupportedObjectPropertyValueTypeAnnotationParserError =
|
|
28
|
+
_require.UnsupportedObjectPropertyValueTypeAnnotationParserError,
|
|
29
|
+
UntypedModuleRegistryCallParserError =
|
|
30
|
+
_require.UntypedModuleRegistryCallParserError,
|
|
31
|
+
UnsupportedModulePropertyParserError =
|
|
32
|
+
_require.UnsupportedModulePropertyParserError,
|
|
33
|
+
MoreThanOneModuleInterfaceParserError =
|
|
34
|
+
_require.MoreThanOneModuleInterfaceParserError,
|
|
35
|
+
UnsupportedFunctionParamTypeAnnotationParserError =
|
|
36
|
+
_require.UnsupportedFunctionParamTypeAnnotationParserError,
|
|
37
|
+
UnsupportedArrayElementTypeAnnotationParserError =
|
|
38
|
+
_require.UnsupportedArrayElementTypeAnnotationParserError;
|
|
39
|
+
function throwIfModuleInterfaceIsMisnamed(
|
|
40
|
+
nativeModuleName,
|
|
41
|
+
moduleSpecId,
|
|
42
|
+
parserType,
|
|
43
|
+
) {
|
|
44
|
+
if (moduleSpecId.name !== 'Spec') {
|
|
45
|
+
throw new MisnamedModuleInterfaceParserError(
|
|
46
|
+
nativeModuleName,
|
|
47
|
+
moduleSpecId,
|
|
48
|
+
parserType,
|
|
49
|
+
);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
function throwIfModuleInterfaceNotFound(
|
|
53
|
+
numberOfModuleSpecs,
|
|
54
|
+
nativeModuleName,
|
|
55
|
+
ast,
|
|
56
|
+
parserType,
|
|
57
|
+
) {
|
|
58
|
+
if (numberOfModuleSpecs === 0) {
|
|
59
|
+
throw new ModuleInterfaceNotFoundParserError(
|
|
60
|
+
nativeModuleName,
|
|
61
|
+
ast,
|
|
62
|
+
parserType,
|
|
63
|
+
);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
function throwIfMoreThanOneModuleRegistryCalls(
|
|
67
|
+
hasteModuleName,
|
|
68
|
+
callExpressions,
|
|
69
|
+
callExpressionsLength,
|
|
70
|
+
language,
|
|
71
|
+
) {
|
|
72
|
+
if (callExpressions.length > 1) {
|
|
73
|
+
throw new MoreThanOneModuleRegistryCallsParserError(
|
|
74
|
+
hasteModuleName,
|
|
75
|
+
callExpressions,
|
|
76
|
+
callExpressionsLength,
|
|
77
|
+
language,
|
|
78
|
+
);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
function throwIfUnusedModuleInterfaceParserError(
|
|
82
|
+
nativeModuleName,
|
|
83
|
+
moduleSpec,
|
|
84
|
+
callExpressions,
|
|
85
|
+
language,
|
|
86
|
+
) {
|
|
87
|
+
if (callExpressions.length === 0) {
|
|
88
|
+
throw new UnusedModuleInterfaceParserError(
|
|
89
|
+
nativeModuleName,
|
|
90
|
+
moduleSpec,
|
|
91
|
+
language,
|
|
92
|
+
);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
function throwIfWrongNumberOfCallExpressionArgs(
|
|
96
|
+
nativeModuleName,
|
|
97
|
+
flowCallExpression,
|
|
98
|
+
methodName,
|
|
99
|
+
numberOfCallExpressionArgs,
|
|
100
|
+
language,
|
|
101
|
+
) {
|
|
102
|
+
if (numberOfCallExpressionArgs !== 1) {
|
|
103
|
+
throw new IncorrectModuleRegistryCallArityParserError(
|
|
104
|
+
nativeModuleName,
|
|
105
|
+
flowCallExpression,
|
|
106
|
+
methodName,
|
|
107
|
+
numberOfCallExpressionArgs,
|
|
108
|
+
language,
|
|
109
|
+
);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
function throwIfIncorrectModuleRegistryCallTypeParameterParserError(
|
|
113
|
+
nativeModuleName,
|
|
114
|
+
typeArguments,
|
|
115
|
+
methodName,
|
|
116
|
+
moduleName,
|
|
117
|
+
parser,
|
|
118
|
+
) {
|
|
119
|
+
function throwError() {
|
|
120
|
+
throw new IncorrectModuleRegistryCallTypeParameterParserError(
|
|
121
|
+
nativeModuleName,
|
|
122
|
+
typeArguments,
|
|
123
|
+
methodName,
|
|
124
|
+
moduleName,
|
|
125
|
+
parser.language(),
|
|
126
|
+
);
|
|
127
|
+
}
|
|
128
|
+
if (parser.checkIfInvalidModule(typeArguments)) {
|
|
129
|
+
throwError();
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
function throwIfUnsupportedFunctionReturnTypeAnnotationParserError(
|
|
133
|
+
nativeModuleName,
|
|
134
|
+
returnTypeAnnotation,
|
|
135
|
+
invalidReturnType,
|
|
136
|
+
language,
|
|
137
|
+
cxxOnly,
|
|
138
|
+
returnType,
|
|
139
|
+
) {
|
|
140
|
+
if (!cxxOnly && returnType === 'FunctionTypeAnnotation') {
|
|
141
|
+
throw new UnsupportedFunctionReturnTypeAnnotationParserError(
|
|
142
|
+
nativeModuleName,
|
|
143
|
+
returnTypeAnnotation.returnType,
|
|
144
|
+
'FunctionTypeAnnotation',
|
|
145
|
+
language,
|
|
146
|
+
);
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
function throwIfUntypedModule(
|
|
150
|
+
typeArguments,
|
|
151
|
+
hasteModuleName,
|
|
152
|
+
callExpression,
|
|
153
|
+
methodName,
|
|
154
|
+
moduleName,
|
|
155
|
+
language,
|
|
156
|
+
) {
|
|
157
|
+
if (typeArguments == null) {
|
|
158
|
+
throw new UntypedModuleRegistryCallParserError(
|
|
159
|
+
hasteModuleName,
|
|
160
|
+
callExpression,
|
|
161
|
+
methodName,
|
|
162
|
+
moduleName,
|
|
163
|
+
language,
|
|
164
|
+
);
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
function throwIfModuleTypeIsUnsupported(
|
|
168
|
+
nativeModuleName,
|
|
169
|
+
propertyValue,
|
|
170
|
+
propertyName,
|
|
171
|
+
propertyValueType,
|
|
172
|
+
language,
|
|
173
|
+
) {
|
|
174
|
+
if (language === 'Flow' && propertyValueType !== 'FunctionTypeAnnotation') {
|
|
175
|
+
throw new UnsupportedModulePropertyParserError(
|
|
176
|
+
nativeModuleName,
|
|
177
|
+
propertyValue,
|
|
178
|
+
propertyName,
|
|
179
|
+
propertyValueType,
|
|
180
|
+
language,
|
|
181
|
+
);
|
|
182
|
+
} else if (
|
|
183
|
+
language === 'TypeScript' &&
|
|
184
|
+
propertyValueType !== 'TSFunctionType' &&
|
|
185
|
+
propertyValueType !== 'TSMethodSignature'
|
|
186
|
+
) {
|
|
187
|
+
throw new UnsupportedModulePropertyParserError(
|
|
188
|
+
nativeModuleName,
|
|
189
|
+
propertyValue,
|
|
190
|
+
propertyName,
|
|
191
|
+
propertyValueType,
|
|
192
|
+
language,
|
|
193
|
+
);
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
const UnsupportedObjectPropertyTypeToInvalidPropertyValueTypeMap = {
|
|
197
|
+
FunctionTypeAnnotation: 'FunctionTypeAnnotation',
|
|
198
|
+
VoidTypeAnnotation: 'void',
|
|
199
|
+
PromiseTypeAnnotation: 'Promise',
|
|
200
|
+
};
|
|
201
|
+
function throwIfPropertyValueTypeIsUnsupported(
|
|
202
|
+
moduleName,
|
|
203
|
+
propertyValue,
|
|
204
|
+
propertyKey,
|
|
205
|
+
type,
|
|
206
|
+
language,
|
|
207
|
+
) {
|
|
208
|
+
const invalidPropertyValueType =
|
|
209
|
+
UnsupportedObjectPropertyTypeToInvalidPropertyValueTypeMap[type];
|
|
210
|
+
throw new UnsupportedObjectPropertyValueTypeAnnotationParserError(
|
|
211
|
+
moduleName,
|
|
212
|
+
propertyValue,
|
|
213
|
+
propertyKey,
|
|
214
|
+
invalidPropertyValueType,
|
|
215
|
+
language,
|
|
216
|
+
);
|
|
217
|
+
}
|
|
218
|
+
function throwIfMoreThanOneModuleInterfaceParserError(
|
|
219
|
+
nativeModuleName,
|
|
220
|
+
moduleSpecs,
|
|
221
|
+
parserType,
|
|
222
|
+
) {
|
|
223
|
+
if (moduleSpecs.length > 1) {
|
|
224
|
+
throw new MoreThanOneModuleInterfaceParserError(
|
|
225
|
+
nativeModuleName,
|
|
226
|
+
moduleSpecs,
|
|
227
|
+
moduleSpecs.map(node => node.id.name),
|
|
228
|
+
parserType,
|
|
229
|
+
);
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
function throwIfUnsupportedFunctionParamTypeAnnotationParserError(
|
|
233
|
+
nativeModuleName,
|
|
234
|
+
languageParamTypeAnnotation,
|
|
235
|
+
paramName,
|
|
236
|
+
paramTypeAnnotationType,
|
|
237
|
+
) {
|
|
238
|
+
throw new UnsupportedFunctionParamTypeAnnotationParserError(
|
|
239
|
+
nativeModuleName,
|
|
240
|
+
languageParamTypeAnnotation,
|
|
241
|
+
paramName,
|
|
242
|
+
paramTypeAnnotationType,
|
|
243
|
+
);
|
|
244
|
+
}
|
|
245
|
+
function throwIfArrayElementTypeAnnotationIsUnsupported(
|
|
246
|
+
hasteModuleName,
|
|
247
|
+
flowElementType,
|
|
248
|
+
flowArrayType,
|
|
249
|
+
type,
|
|
250
|
+
language,
|
|
251
|
+
) {
|
|
252
|
+
const TypeMap = {
|
|
253
|
+
FunctionTypeAnnotation: 'FunctionTypeAnnotation',
|
|
254
|
+
VoidTypeAnnotation: 'void',
|
|
255
|
+
PromiseTypeAnnotation: 'Promise',
|
|
256
|
+
// TODO: Added as a work-around for now until TupleTypeAnnotation are fully supported in both flow and TS
|
|
257
|
+
// Right now they are partially treated as UnionTypeAnnotation
|
|
258
|
+
UnionTypeAnnotation: 'UnionTypeAnnotation',
|
|
259
|
+
};
|
|
260
|
+
if (type in TypeMap) {
|
|
261
|
+
throw new UnsupportedArrayElementTypeAnnotationParserError(
|
|
262
|
+
hasteModuleName,
|
|
263
|
+
flowElementType,
|
|
264
|
+
flowArrayType,
|
|
265
|
+
TypeMap[type],
|
|
266
|
+
language,
|
|
267
|
+
);
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
module.exports = {
|
|
271
|
+
throwIfModuleInterfaceIsMisnamed,
|
|
272
|
+
throwIfUnsupportedFunctionReturnTypeAnnotationParserError,
|
|
273
|
+
throwIfModuleInterfaceNotFound,
|
|
274
|
+
throwIfMoreThanOneModuleRegistryCalls,
|
|
275
|
+
throwIfPropertyValueTypeIsUnsupported,
|
|
276
|
+
throwIfUnusedModuleInterfaceParserError,
|
|
277
|
+
throwIfWrongNumberOfCallExpressionArgs,
|
|
278
|
+
throwIfIncorrectModuleRegistryCallTypeParameterParserError,
|
|
279
|
+
throwIfUntypedModule,
|
|
280
|
+
throwIfModuleTypeIsUnsupported,
|
|
281
|
+
throwIfMoreThanOneModuleInterfaceParserError,
|
|
282
|
+
throwIfUnsupportedFunctionParamTypeAnnotationParserError,
|
|
283
|
+
throwIfArrayElementTypeAnnotationIsUnsupported,
|
|
284
|
+
};
|
|
@@ -0,0 +1,295 @@
|
|
|
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 {NativeModuleTypeAnnotation} from '../CodegenSchema';
|
|
14
|
+
import type {ParserType} from './errors';
|
|
15
|
+
import type {Parser} from './parser';
|
|
16
|
+
|
|
17
|
+
const {
|
|
18
|
+
MisnamedModuleInterfaceParserError,
|
|
19
|
+
UnsupportedFunctionReturnTypeAnnotationParserError,
|
|
20
|
+
ModuleInterfaceNotFoundParserError,
|
|
21
|
+
MoreThanOneModuleRegistryCallsParserError,
|
|
22
|
+
UnusedModuleInterfaceParserError,
|
|
23
|
+
IncorrectModuleRegistryCallArityParserError,
|
|
24
|
+
IncorrectModuleRegistryCallTypeParameterParserError,
|
|
25
|
+
UnsupportedObjectPropertyValueTypeAnnotationParserError,
|
|
26
|
+
UntypedModuleRegistryCallParserError,
|
|
27
|
+
UnsupportedModulePropertyParserError,
|
|
28
|
+
MoreThanOneModuleInterfaceParserError,
|
|
29
|
+
UnsupportedFunctionParamTypeAnnotationParserError,
|
|
30
|
+
UnsupportedArrayElementTypeAnnotationParserError,
|
|
31
|
+
} = require('./errors');
|
|
32
|
+
|
|
33
|
+
function throwIfModuleInterfaceIsMisnamed(
|
|
34
|
+
nativeModuleName: string,
|
|
35
|
+
moduleSpecId: $FlowFixMe,
|
|
36
|
+
parserType: ParserType,
|
|
37
|
+
) {
|
|
38
|
+
if (moduleSpecId.name !== 'Spec') {
|
|
39
|
+
throw new MisnamedModuleInterfaceParserError(
|
|
40
|
+
nativeModuleName,
|
|
41
|
+
moduleSpecId,
|
|
42
|
+
parserType,
|
|
43
|
+
);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
function throwIfModuleInterfaceNotFound(
|
|
48
|
+
numberOfModuleSpecs: number,
|
|
49
|
+
nativeModuleName: string,
|
|
50
|
+
ast: $FlowFixMe,
|
|
51
|
+
parserType: ParserType,
|
|
52
|
+
) {
|
|
53
|
+
if (numberOfModuleSpecs === 0) {
|
|
54
|
+
throw new ModuleInterfaceNotFoundParserError(
|
|
55
|
+
nativeModuleName,
|
|
56
|
+
ast,
|
|
57
|
+
parserType,
|
|
58
|
+
);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
function throwIfMoreThanOneModuleRegistryCalls(
|
|
63
|
+
hasteModuleName: string,
|
|
64
|
+
callExpressions: $FlowFixMe,
|
|
65
|
+
callExpressionsLength: number,
|
|
66
|
+
language: ParserType,
|
|
67
|
+
) {
|
|
68
|
+
if (callExpressions.length > 1) {
|
|
69
|
+
throw new MoreThanOneModuleRegistryCallsParserError(
|
|
70
|
+
hasteModuleName,
|
|
71
|
+
callExpressions,
|
|
72
|
+
callExpressionsLength,
|
|
73
|
+
language,
|
|
74
|
+
);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
function throwIfUnusedModuleInterfaceParserError(
|
|
79
|
+
nativeModuleName: string,
|
|
80
|
+
moduleSpec: $FlowFixMe,
|
|
81
|
+
callExpressions: $FlowFixMe,
|
|
82
|
+
language: ParserType,
|
|
83
|
+
) {
|
|
84
|
+
if (callExpressions.length === 0) {
|
|
85
|
+
throw new UnusedModuleInterfaceParserError(
|
|
86
|
+
nativeModuleName,
|
|
87
|
+
moduleSpec,
|
|
88
|
+
language,
|
|
89
|
+
);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
function throwIfWrongNumberOfCallExpressionArgs(
|
|
94
|
+
nativeModuleName: string,
|
|
95
|
+
flowCallExpression: $FlowFixMe,
|
|
96
|
+
methodName: string,
|
|
97
|
+
numberOfCallExpressionArgs: number,
|
|
98
|
+
language: ParserType,
|
|
99
|
+
) {
|
|
100
|
+
if (numberOfCallExpressionArgs !== 1) {
|
|
101
|
+
throw new IncorrectModuleRegistryCallArityParserError(
|
|
102
|
+
nativeModuleName,
|
|
103
|
+
flowCallExpression,
|
|
104
|
+
methodName,
|
|
105
|
+
numberOfCallExpressionArgs,
|
|
106
|
+
language,
|
|
107
|
+
);
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
function throwIfIncorrectModuleRegistryCallTypeParameterParserError(
|
|
112
|
+
nativeModuleName: string,
|
|
113
|
+
typeArguments: $FlowFixMe,
|
|
114
|
+
methodName: string,
|
|
115
|
+
moduleName: string,
|
|
116
|
+
parser: Parser,
|
|
117
|
+
) {
|
|
118
|
+
function throwError() {
|
|
119
|
+
throw new IncorrectModuleRegistryCallTypeParameterParserError(
|
|
120
|
+
nativeModuleName,
|
|
121
|
+
typeArguments,
|
|
122
|
+
methodName,
|
|
123
|
+
moduleName,
|
|
124
|
+
parser.language(),
|
|
125
|
+
);
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
if (parser.checkIfInvalidModule(typeArguments)) {
|
|
129
|
+
throwError();
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
function throwIfUnsupportedFunctionReturnTypeAnnotationParserError(
|
|
134
|
+
nativeModuleName: string,
|
|
135
|
+
returnTypeAnnotation: $FlowFixMe,
|
|
136
|
+
invalidReturnType: string,
|
|
137
|
+
language: ParserType,
|
|
138
|
+
cxxOnly: boolean,
|
|
139
|
+
returnType: string,
|
|
140
|
+
) {
|
|
141
|
+
if (!cxxOnly && returnType === 'FunctionTypeAnnotation') {
|
|
142
|
+
throw new UnsupportedFunctionReturnTypeAnnotationParserError(
|
|
143
|
+
nativeModuleName,
|
|
144
|
+
returnTypeAnnotation.returnType,
|
|
145
|
+
'FunctionTypeAnnotation',
|
|
146
|
+
language,
|
|
147
|
+
);
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
function throwIfUntypedModule(
|
|
152
|
+
typeArguments: $FlowFixMe,
|
|
153
|
+
hasteModuleName: string,
|
|
154
|
+
callExpression: $FlowFixMe,
|
|
155
|
+
methodName: string,
|
|
156
|
+
moduleName: string,
|
|
157
|
+
language: ParserType,
|
|
158
|
+
) {
|
|
159
|
+
if (typeArguments == null) {
|
|
160
|
+
throw new UntypedModuleRegistryCallParserError(
|
|
161
|
+
hasteModuleName,
|
|
162
|
+
callExpression,
|
|
163
|
+
methodName,
|
|
164
|
+
moduleName,
|
|
165
|
+
language,
|
|
166
|
+
);
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
function throwIfModuleTypeIsUnsupported(
|
|
171
|
+
nativeModuleName: string,
|
|
172
|
+
propertyValue: $FlowFixMe,
|
|
173
|
+
propertyName: string,
|
|
174
|
+
propertyValueType: string,
|
|
175
|
+
language: ParserType,
|
|
176
|
+
) {
|
|
177
|
+
if (language === 'Flow' && propertyValueType !== 'FunctionTypeAnnotation') {
|
|
178
|
+
throw new UnsupportedModulePropertyParserError(
|
|
179
|
+
nativeModuleName,
|
|
180
|
+
propertyValue,
|
|
181
|
+
propertyName,
|
|
182
|
+
propertyValueType,
|
|
183
|
+
language,
|
|
184
|
+
);
|
|
185
|
+
} else if (
|
|
186
|
+
language === 'TypeScript' &&
|
|
187
|
+
propertyValueType !== 'TSFunctionType' &&
|
|
188
|
+
propertyValueType !== 'TSMethodSignature'
|
|
189
|
+
) {
|
|
190
|
+
throw new UnsupportedModulePropertyParserError(
|
|
191
|
+
nativeModuleName,
|
|
192
|
+
propertyValue,
|
|
193
|
+
propertyName,
|
|
194
|
+
propertyValueType,
|
|
195
|
+
language,
|
|
196
|
+
);
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
const UnsupportedObjectPropertyTypeToInvalidPropertyValueTypeMap = {
|
|
201
|
+
FunctionTypeAnnotation: 'FunctionTypeAnnotation',
|
|
202
|
+
VoidTypeAnnotation: 'void',
|
|
203
|
+
PromiseTypeAnnotation: 'Promise',
|
|
204
|
+
};
|
|
205
|
+
|
|
206
|
+
function throwIfPropertyValueTypeIsUnsupported(
|
|
207
|
+
moduleName: string,
|
|
208
|
+
propertyValue: $FlowFixMe,
|
|
209
|
+
propertyKey: string,
|
|
210
|
+
type: string,
|
|
211
|
+
language: ParserType,
|
|
212
|
+
) {
|
|
213
|
+
const invalidPropertyValueType =
|
|
214
|
+
UnsupportedObjectPropertyTypeToInvalidPropertyValueTypeMap[type];
|
|
215
|
+
|
|
216
|
+
throw new UnsupportedObjectPropertyValueTypeAnnotationParserError(
|
|
217
|
+
moduleName,
|
|
218
|
+
propertyValue,
|
|
219
|
+
propertyKey,
|
|
220
|
+
invalidPropertyValueType,
|
|
221
|
+
language,
|
|
222
|
+
);
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
function throwIfMoreThanOneModuleInterfaceParserError(
|
|
226
|
+
nativeModuleName: string,
|
|
227
|
+
moduleSpecs: $ReadOnlyArray<$FlowFixMe>,
|
|
228
|
+
parserType: ParserType,
|
|
229
|
+
) {
|
|
230
|
+
if (moduleSpecs.length > 1) {
|
|
231
|
+
throw new MoreThanOneModuleInterfaceParserError(
|
|
232
|
+
nativeModuleName,
|
|
233
|
+
moduleSpecs,
|
|
234
|
+
moduleSpecs.map(node => node.id.name),
|
|
235
|
+
parserType,
|
|
236
|
+
);
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
function throwIfUnsupportedFunctionParamTypeAnnotationParserError(
|
|
241
|
+
nativeModuleName: string,
|
|
242
|
+
languageParamTypeAnnotation: $FlowFixMe,
|
|
243
|
+
paramName: string,
|
|
244
|
+
paramTypeAnnotationType: NativeModuleTypeAnnotation['type'],
|
|
245
|
+
) {
|
|
246
|
+
throw new UnsupportedFunctionParamTypeAnnotationParserError(
|
|
247
|
+
nativeModuleName,
|
|
248
|
+
languageParamTypeAnnotation,
|
|
249
|
+
paramName,
|
|
250
|
+
paramTypeAnnotationType,
|
|
251
|
+
);
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
function throwIfArrayElementTypeAnnotationIsUnsupported(
|
|
255
|
+
hasteModuleName: string,
|
|
256
|
+
flowElementType: $FlowFixMe,
|
|
257
|
+
flowArrayType: 'Array' | '$ReadOnlyArray' | 'ReadonlyArray',
|
|
258
|
+
type: string,
|
|
259
|
+
language: ParserType,
|
|
260
|
+
) {
|
|
261
|
+
const TypeMap = {
|
|
262
|
+
FunctionTypeAnnotation: 'FunctionTypeAnnotation',
|
|
263
|
+
VoidTypeAnnotation: 'void',
|
|
264
|
+
PromiseTypeAnnotation: 'Promise',
|
|
265
|
+
// TODO: Added as a work-around for now until TupleTypeAnnotation are fully supported in both flow and TS
|
|
266
|
+
// Right now they are partially treated as UnionTypeAnnotation
|
|
267
|
+
UnionTypeAnnotation: 'UnionTypeAnnotation',
|
|
268
|
+
};
|
|
269
|
+
|
|
270
|
+
if (type in TypeMap) {
|
|
271
|
+
throw new UnsupportedArrayElementTypeAnnotationParserError(
|
|
272
|
+
hasteModuleName,
|
|
273
|
+
flowElementType,
|
|
274
|
+
flowArrayType,
|
|
275
|
+
TypeMap[type],
|
|
276
|
+
language,
|
|
277
|
+
);
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
|
|
281
|
+
module.exports = {
|
|
282
|
+
throwIfModuleInterfaceIsMisnamed,
|
|
283
|
+
throwIfUnsupportedFunctionReturnTypeAnnotationParserError,
|
|
284
|
+
throwIfModuleInterfaceNotFound,
|
|
285
|
+
throwIfMoreThanOneModuleRegistryCalls,
|
|
286
|
+
throwIfPropertyValueTypeIsUnsupported,
|
|
287
|
+
throwIfUnusedModuleInterfaceParserError,
|
|
288
|
+
throwIfWrongNumberOfCallExpressionArgs,
|
|
289
|
+
throwIfIncorrectModuleRegistryCallTypeParameterParserError,
|
|
290
|
+
throwIfUntypedModule,
|
|
291
|
+
throwIfModuleTypeIsUnsupported,
|
|
292
|
+
throwIfMoreThanOneModuleInterfaceParserError,
|
|
293
|
+
throwIfUnsupportedFunctionParamTypeAnnotationParserError,
|
|
294
|
+
throwIfArrayElementTypeAnnotationIsUnsupported,
|
|
295
|
+
};
|