flow-api-translator 0.14.0 → 0.15.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/dist/flowDefToTSDef.js +72 -23
- package/dist/flowDefToTSDef.js.flow +84 -22
- package/package.json +5 -5
package/dist/flowDefToTSDef.js
CHANGED
|
@@ -606,10 +606,6 @@ const getTransforms = (originalCode, scopeManager, opts) => {
|
|
|
606
606
|
case 'TupleTypeAnnotation':
|
|
607
607
|
return transform.TupleTypeAnnotation(node);
|
|
608
608
|
|
|
609
|
-
case 'TupleTypeLabeledElement':
|
|
610
|
-
case 'TupleTypeSpreadElement':
|
|
611
|
-
return unsupportedAnnotation(node, node.type);
|
|
612
|
-
|
|
613
609
|
case 'TypeofTypeAnnotation':
|
|
614
610
|
return transform.TypeofTypeAnnotation(node);
|
|
615
611
|
|
|
@@ -1202,6 +1198,17 @@ const getTransforms = (originalCode, scopeManager, opts) => {
|
|
|
1202
1198
|
return unsupportedAnnotation(node, 'existential type');
|
|
1203
1199
|
},
|
|
1204
1200
|
|
|
1201
|
+
ExportAllDeclaration(node) {
|
|
1202
|
+
return {
|
|
1203
|
+
type: 'ExportAllDeclaration',
|
|
1204
|
+
// flow does not currently support import/export assertions
|
|
1205
|
+
assertions: [],
|
|
1206
|
+
exportKind: node.exportKind,
|
|
1207
|
+
source: transform.StringLiteral(node.source),
|
|
1208
|
+
exported: node.exported == null ? null : transform.Identifier(node.exported)
|
|
1209
|
+
};
|
|
1210
|
+
},
|
|
1211
|
+
|
|
1205
1212
|
ExportNamedDeclaration(node) {
|
|
1206
1213
|
if (node.source != null || node.specifiers.length > 0) {
|
|
1207
1214
|
// can never have a declaration with a source
|
|
@@ -1582,23 +1589,6 @@ const getTransforms = (originalCode, scopeManager, opts) => {
|
|
|
1582
1589
|
};
|
|
1583
1590
|
}
|
|
1584
1591
|
|
|
1585
|
-
case '$Shape':
|
|
1586
|
-
case '$Partial':
|
|
1587
|
-
{
|
|
1588
|
-
// `$Partial<T>` => `Partial<T>`
|
|
1589
|
-
return {
|
|
1590
|
-
type: 'TSTypeReference',
|
|
1591
|
-
typeName: {
|
|
1592
|
-
type: 'Identifier',
|
|
1593
|
-
name: 'Partial'
|
|
1594
|
-
},
|
|
1595
|
-
typeParameters: {
|
|
1596
|
-
type: 'TSTypeParameterInstantiation',
|
|
1597
|
-
params: assertHasExactlyNTypeParameters(1)
|
|
1598
|
-
}
|
|
1599
|
-
};
|
|
1600
|
-
}
|
|
1601
|
-
|
|
1602
1592
|
case '$Values':
|
|
1603
1593
|
{
|
|
1604
1594
|
// `$Values<T>` => `T[keyof T]`
|
|
@@ -1971,6 +1961,28 @@ const getTransforms = (originalCode, scopeManager, opts) => {
|
|
|
1971
1961
|
}
|
|
1972
1962
|
};
|
|
1973
1963
|
}
|
|
1964
|
+
// React.ElementProps<A> -> React.ComponentProps<A>
|
|
1965
|
+
// React$ElementProps<A> -> React.ComponentProps<A>
|
|
1966
|
+
|
|
1967
|
+
case 'React.ElementProps':
|
|
1968
|
+
case 'React$ElementProps':
|
|
1969
|
+
{
|
|
1970
|
+
return {
|
|
1971
|
+
type: 'TSTypeReference',
|
|
1972
|
+
typeName: {
|
|
1973
|
+
type: 'TSQualifiedName',
|
|
1974
|
+
left: getReactIdentifier(),
|
|
1975
|
+
right: {
|
|
1976
|
+
type: 'Identifier',
|
|
1977
|
+
name: 'ComponentProps'
|
|
1978
|
+
}
|
|
1979
|
+
},
|
|
1980
|
+
typeParameters: {
|
|
1981
|
+
type: 'TSTypeParameterInstantiation',
|
|
1982
|
+
params: assertHasExactlyNTypeParameters(1)
|
|
1983
|
+
}
|
|
1984
|
+
};
|
|
1985
|
+
}
|
|
1974
1986
|
// React.ElementConfig<A> -> JSX.LibraryManagedAttributes<A, React.ComponentProps<A>>
|
|
1975
1987
|
// React$ElementConfig<A> -> JSX.LibraryManagedAttributes<A, React.ComponentProps<A>>
|
|
1976
1988
|
|
|
@@ -2640,10 +2652,47 @@ const getTransforms = (originalCode, scopeManager, opts) => {
|
|
|
2640
2652
|
},
|
|
2641
2653
|
|
|
2642
2654
|
TupleTypeAnnotation(node) {
|
|
2643
|
-
|
|
2655
|
+
const allReadOnly = node.types.length > 0 && node.types.every(element => element.type === 'TupleTypeLabeledElement' && element.variance != null && element.variance.kind === 'plus');
|
|
2656
|
+
const tupleAnnot = {
|
|
2644
2657
|
type: 'TSTupleType',
|
|
2645
|
-
elementTypes: node.types.map(
|
|
2658
|
+
elementTypes: node.types.map(element => {
|
|
2659
|
+
switch (element.type) {
|
|
2660
|
+
case 'TupleTypeLabeledElement':
|
|
2661
|
+
if (!allReadOnly && element.variance != null) {
|
|
2662
|
+
return unsupportedAnnotation(element, 'tuple type element variance annotations');
|
|
2663
|
+
}
|
|
2664
|
+
|
|
2665
|
+
return {
|
|
2666
|
+
type: 'TSNamedTupleMember',
|
|
2667
|
+
label: transform.Identifier(element.label),
|
|
2668
|
+
optional: element.optional,
|
|
2669
|
+
elementType: transformTypeAnnotationType(element.elementType)
|
|
2670
|
+
};
|
|
2671
|
+
|
|
2672
|
+
case 'TupleTypeSpreadElement':
|
|
2673
|
+
{
|
|
2674
|
+
const annot = transformTypeAnnotationType(element.typeAnnotation);
|
|
2675
|
+
return {
|
|
2676
|
+
type: 'TSRestType',
|
|
2677
|
+
typeAnnotation: element.label != null ? {
|
|
2678
|
+
type: 'TSNamedTupleMember',
|
|
2679
|
+
label: transform.Identifier(element.label),
|
|
2680
|
+
optional: false,
|
|
2681
|
+
elementType: annot
|
|
2682
|
+
} : annot
|
|
2683
|
+
};
|
|
2684
|
+
}
|
|
2685
|
+
|
|
2686
|
+
default:
|
|
2687
|
+
return transformTypeAnnotationType(element);
|
|
2688
|
+
}
|
|
2689
|
+
})
|
|
2646
2690
|
};
|
|
2691
|
+
return allReadOnly ? {
|
|
2692
|
+
type: 'TSTypeOperator',
|
|
2693
|
+
operator: 'readonly',
|
|
2694
|
+
typeAnnotation: tupleAnnot
|
|
2695
|
+
} : tupleAnnot;
|
|
2647
2696
|
},
|
|
2648
2697
|
|
|
2649
2698
|
TypeAlias(node) {
|
|
@@ -650,9 +650,6 @@ const getTransforms = (
|
|
|
650
650
|
return transform.ThisTypeAnnotation(node);
|
|
651
651
|
case 'TupleTypeAnnotation':
|
|
652
652
|
return transform.TupleTypeAnnotation(node);
|
|
653
|
-
case 'TupleTypeLabeledElement':
|
|
654
|
-
case 'TupleTypeSpreadElement':
|
|
655
|
-
return unsupportedAnnotation(node, node.type);
|
|
656
653
|
case 'TypeofTypeAnnotation':
|
|
657
654
|
return transform.TypeofTypeAnnotation(node);
|
|
658
655
|
case 'UnionTypeAnnotation':
|
|
@@ -1337,6 +1334,19 @@ const getTransforms = (
|
|
|
1337
1334
|
// It's also super deprecated - so let's not ever worry
|
|
1338
1335
|
return unsupportedAnnotation(node, 'existential type');
|
|
1339
1336
|
},
|
|
1337
|
+
ExportAllDeclaration(
|
|
1338
|
+
node: FlowESTree.ExportAllDeclaration,
|
|
1339
|
+
): TSESTree.ExportAllDeclaration {
|
|
1340
|
+
return {
|
|
1341
|
+
type: 'ExportAllDeclaration',
|
|
1342
|
+
// flow does not currently support import/export assertions
|
|
1343
|
+
assertions: [],
|
|
1344
|
+
exportKind: node.exportKind,
|
|
1345
|
+
source: transform.StringLiteral(node.source),
|
|
1346
|
+
exported:
|
|
1347
|
+
node.exported == null ? null : transform.Identifier(node.exported),
|
|
1348
|
+
};
|
|
1349
|
+
},
|
|
1340
1350
|
ExportNamedDeclaration(
|
|
1341
1351
|
node: FlowESTree.ExportNamedDeclaration,
|
|
1342
1352
|
):
|
|
@@ -1747,22 +1757,6 @@ const getTransforms = (
|
|
|
1747
1757
|
};
|
|
1748
1758
|
}
|
|
1749
1759
|
|
|
1750
|
-
case '$Shape':
|
|
1751
|
-
case '$Partial': {
|
|
1752
|
-
// `$Partial<T>` => `Partial<T>`
|
|
1753
|
-
return {
|
|
1754
|
-
type: 'TSTypeReference',
|
|
1755
|
-
typeName: {
|
|
1756
|
-
type: 'Identifier',
|
|
1757
|
-
name: 'Partial',
|
|
1758
|
-
},
|
|
1759
|
-
typeParameters: {
|
|
1760
|
-
type: 'TSTypeParameterInstantiation',
|
|
1761
|
-
params: assertHasExactlyNTypeParameters(1),
|
|
1762
|
-
},
|
|
1763
|
-
};
|
|
1764
|
-
}
|
|
1765
|
-
|
|
1766
1760
|
case '$Values': {
|
|
1767
1761
|
// `$Values<T>` => `T[keyof T]`
|
|
1768
1762
|
const transformedType = assertHasExactlyNTypeParameters(1)[0];
|
|
@@ -2133,6 +2127,26 @@ const getTransforms = (
|
|
|
2133
2127
|
},
|
|
2134
2128
|
};
|
|
2135
2129
|
}
|
|
2130
|
+
// React.ElementProps<A> -> React.ComponentProps<A>
|
|
2131
|
+
// React$ElementProps<A> -> React.ComponentProps<A>
|
|
2132
|
+
case 'React.ElementProps':
|
|
2133
|
+
case 'React$ElementProps': {
|
|
2134
|
+
return {
|
|
2135
|
+
type: 'TSTypeReference',
|
|
2136
|
+
typeName: {
|
|
2137
|
+
type: 'TSQualifiedName',
|
|
2138
|
+
left: getReactIdentifier(),
|
|
2139
|
+
right: {
|
|
2140
|
+
type: 'Identifier',
|
|
2141
|
+
name: 'ComponentProps',
|
|
2142
|
+
},
|
|
2143
|
+
},
|
|
2144
|
+
typeParameters: {
|
|
2145
|
+
type: 'TSTypeParameterInstantiation',
|
|
2146
|
+
params: assertHasExactlyNTypeParameters(1),
|
|
2147
|
+
},
|
|
2148
|
+
};
|
|
2149
|
+
}
|
|
2136
2150
|
// React.ElementConfig<A> -> JSX.LibraryManagedAttributes<A, React.ComponentProps<A>>
|
|
2137
2151
|
// React$ElementConfig<A> -> JSX.LibraryManagedAttributes<A, React.ComponentProps<A>>
|
|
2138
2152
|
case 'React.ElementConfig':
|
|
@@ -2895,11 +2909,59 @@ const getTransforms = (
|
|
|
2895
2909
|
},
|
|
2896
2910
|
TupleTypeAnnotation(
|
|
2897
2911
|
node: FlowESTree.TupleTypeAnnotation,
|
|
2898
|
-
): TSESTree.TSTupleType {
|
|
2899
|
-
|
|
2912
|
+
): TSESTree.TSTupleType | TSESTree.TSTypeOperator {
|
|
2913
|
+
const allReadOnly =
|
|
2914
|
+
node.types.length > 0 &&
|
|
2915
|
+
node.types.every(
|
|
2916
|
+
element =>
|
|
2917
|
+
element.type === 'TupleTypeLabeledElement' &&
|
|
2918
|
+
element.variance != null &&
|
|
2919
|
+
element.variance.kind === 'plus',
|
|
2920
|
+
);
|
|
2921
|
+
const tupleAnnot = {
|
|
2900
2922
|
type: 'TSTupleType',
|
|
2901
|
-
elementTypes: node.types.map(
|
|
2923
|
+
elementTypes: node.types.map(element => {
|
|
2924
|
+
switch (element.type) {
|
|
2925
|
+
case 'TupleTypeLabeledElement':
|
|
2926
|
+
if (!allReadOnly && element.variance != null) {
|
|
2927
|
+
return unsupportedAnnotation(
|
|
2928
|
+
element,
|
|
2929
|
+
'tuple type element variance annotations',
|
|
2930
|
+
);
|
|
2931
|
+
}
|
|
2932
|
+
return {
|
|
2933
|
+
type: 'TSNamedTupleMember',
|
|
2934
|
+
label: transform.Identifier(element.label),
|
|
2935
|
+
optional: element.optional,
|
|
2936
|
+
elementType: transformTypeAnnotationType(element.elementType),
|
|
2937
|
+
};
|
|
2938
|
+
case 'TupleTypeSpreadElement': {
|
|
2939
|
+
const annot = transformTypeAnnotationType(element.typeAnnotation);
|
|
2940
|
+
return {
|
|
2941
|
+
type: 'TSRestType',
|
|
2942
|
+
typeAnnotation:
|
|
2943
|
+
element.label != null
|
|
2944
|
+
? {
|
|
2945
|
+
type: 'TSNamedTupleMember',
|
|
2946
|
+
label: transform.Identifier(element.label),
|
|
2947
|
+
optional: false,
|
|
2948
|
+
elementType: annot,
|
|
2949
|
+
}
|
|
2950
|
+
: annot,
|
|
2951
|
+
};
|
|
2952
|
+
}
|
|
2953
|
+
default:
|
|
2954
|
+
return transformTypeAnnotationType(element);
|
|
2955
|
+
}
|
|
2956
|
+
}),
|
|
2902
2957
|
};
|
|
2958
|
+
return allReadOnly
|
|
2959
|
+
? {
|
|
2960
|
+
type: 'TSTypeOperator',
|
|
2961
|
+
operator: 'readonly',
|
|
2962
|
+
typeAnnotation: tupleAnnot,
|
|
2963
|
+
}
|
|
2964
|
+
: tupleAnnot;
|
|
2903
2965
|
},
|
|
2904
2966
|
TypeAlias(node: FlowESTree.TypeAlias): TSESTree.TSTypeAliasDeclaration {
|
|
2905
2967
|
return transform.DeclareTypeAlias(node);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "flow-api-translator",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.15.1",
|
|
4
4
|
"description": "Toolkit for creating Flow and TypeScript compatible libraries from Flow source code.",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"license": "MIT",
|
|
@@ -12,10 +12,10 @@
|
|
|
12
12
|
"@babel/code-frame": "^7.16.0",
|
|
13
13
|
"@typescript-eslint/visitor-keys": "^5.42.0",
|
|
14
14
|
"flow-enums-runtime": "^0.0.6",
|
|
15
|
-
"hermes-eslint": "0.
|
|
16
|
-
"hermes-estree": "0.
|
|
17
|
-
"hermes-parser": "0.
|
|
18
|
-
"hermes-transform": "0.
|
|
15
|
+
"hermes-eslint": "0.15.1",
|
|
16
|
+
"hermes-estree": "0.15.1",
|
|
17
|
+
"hermes-parser": "0.15.1",
|
|
18
|
+
"hermes-transform": "0.15.1"
|
|
19
19
|
},
|
|
20
20
|
"peerDependencies": {
|
|
21
21
|
"prettier": "^3.0.0 || ^2.7.1"
|