@effect/language-service 0.16.5 → 0.16.7
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/index.js +50 -30
- package/index.js.map +1 -1
- package/package.json +1 -1
package/index.js
CHANGED
|
@@ -2887,21 +2887,31 @@ var effectGenToFn = createRefactor({
|
|
|
2887
2887
|
const parseEffectGenNode = fn("asyncAwaitToGen.apply")(function* (node) {
|
|
2888
2888
|
const effectGen2 = yield* effectGen(node);
|
|
2889
2889
|
let pipeArgs2 = ts.factory.createNodeArray([]);
|
|
2890
|
-
let nodeToReplace2 = node
|
|
2891
|
-
|
|
2892
|
-
|
|
2893
|
-
nodeToReplace2
|
|
2894
|
-
|
|
2895
|
-
|
|
2896
|
-
if (ts.
|
|
2897
|
-
return { ...effectGen2, pipeArgs: pipeArgs2, nodeToReplace:
|
|
2890
|
+
let nodeToReplace2 = node;
|
|
2891
|
+
while (nodeToReplace2.parent) {
|
|
2892
|
+
const parent = nodeToReplace2.parent;
|
|
2893
|
+
if (ts.isConciseBody(nodeToReplace2) && ts.isArrowFunction(parent) && parent.body === nodeToReplace2) {
|
|
2894
|
+
return { ...effectGen2, pipeArgs: pipeArgs2, nodeToReplace: parent };
|
|
2895
|
+
}
|
|
2896
|
+
if ((ts.isFunctionDeclaration(parent) || ts.isMethodDeclaration(parent)) && parent.body === nodeToReplace2) {
|
|
2897
|
+
return { ...effectGen2, pipeArgs: pipeArgs2, nodeToReplace: parent };
|
|
2898
|
+
}
|
|
2899
|
+
if (ts.isBlock(parent) && parent.statements.length === 1 && parent.statements[0] === nodeToReplace2) {
|
|
2900
|
+
nodeToReplace2 = parent;
|
|
2901
|
+
continue;
|
|
2902
|
+
}
|
|
2903
|
+
if (ts.isReturnStatement(parent) && parent.expression === nodeToReplace2) {
|
|
2904
|
+
nodeToReplace2 = parent;
|
|
2905
|
+
continue;
|
|
2898
2906
|
}
|
|
2899
|
-
if (ts.
|
|
2900
|
-
|
|
2907
|
+
if (ts.isPropertyAccessExpression(parent) && parent.expression === nodeToReplace2 && parent.name.text === "pipe" && ts.isCallExpression(parent.parent)) {
|
|
2908
|
+
pipeArgs2 = ts.factory.createNodeArray(pipeArgs2.concat(parent.parent.arguments));
|
|
2909
|
+
nodeToReplace2 = parent.parent;
|
|
2901
2910
|
continue;
|
|
2902
2911
|
}
|
|
2903
|
-
if (ts.
|
|
2904
|
-
|
|
2912
|
+
if (ts.isCallExpression(parent) && ts.isIdentifier(parent.expression) && parent.expression.text === "pipe" && parent.arguments.length > 0 && parent.arguments[0] === nodeToReplace2) {
|
|
2913
|
+
pipeArgs2 = ts.factory.createNodeArray(pipeArgs2.concat(parent.arguments.slice(1)));
|
|
2914
|
+
nodeToReplace2 = parent;
|
|
2905
2915
|
continue;
|
|
2906
2916
|
}
|
|
2907
2917
|
break;
|
|
@@ -3697,7 +3707,7 @@ var createUnsupportedNodeComment = (ts, sourceFile, node) => ts.addSyntheticTrai
|
|
|
3697
3707
|
ts.SyntaxKind.MultiLineCommentTrivia,
|
|
3698
3708
|
" Not supported conversion: " + node.getText(sourceFile) + " "
|
|
3699
3709
|
);
|
|
3700
|
-
var processNode = (node) => gen2(function* () {
|
|
3710
|
+
var processNode = (node, isVirtualTypeNode) => gen2(function* () {
|
|
3701
3711
|
const { createApiCall, createApiPropertyAccess, entityNameToDataTypeName, sourceFile, ts } = yield* service(
|
|
3702
3712
|
SchemaGenContext
|
|
3703
3713
|
);
|
|
@@ -3731,12 +3741,12 @@ var processNode = (node) => gen2(function* () {
|
|
|
3731
3741
|
if (ts.isUnionTypeNode(node)) {
|
|
3732
3742
|
const allLiterals = yield* option(parseAllLiterals(node));
|
|
3733
3743
|
if (isSome2(allLiterals)) return createApiCall("Literal", allLiterals.value);
|
|
3734
|
-
const members = yield* all2(...node.types.map((_) => processNode(_)));
|
|
3744
|
+
const members = yield* all2(...node.types.map((_) => processNode(_, isVirtualTypeNode)));
|
|
3735
3745
|
return createApiCall("Union", members);
|
|
3736
3746
|
}
|
|
3737
3747
|
if (ts.isIntersectionTypeNode(node)) {
|
|
3738
3748
|
const [firstSchema, ...otherSchemas] = yield* all2(
|
|
3739
|
-
...node.types.map((_) => processNode(_))
|
|
3749
|
+
...node.types.map((_) => processNode(_, isVirtualTypeNode))
|
|
3740
3750
|
);
|
|
3741
3751
|
if (otherSchemas.length === 0) return firstSchema;
|
|
3742
3752
|
return ts.factory.createCallExpression(
|
|
@@ -3750,22 +3760,28 @@ var processNode = (node) => gen2(function* () {
|
|
|
3750
3760
|
}
|
|
3751
3761
|
if (ts.isTypeOperatorNode(node)) {
|
|
3752
3762
|
if (node.operator === ts.SyntaxKind.KeyOfKeyword) {
|
|
3753
|
-
return createApiCall("keyof", [yield* processNode(node.type)]);
|
|
3763
|
+
return createApiCall("keyof", [yield* processNode(node.type, isVirtualTypeNode)]);
|
|
3754
3764
|
} else if (node.operator === ts.SyntaxKind.ReadonlyKeyword) {
|
|
3755
|
-
return yield* processNode(node.type);
|
|
3765
|
+
return yield* processNode(node.type, isVirtualTypeNode);
|
|
3756
3766
|
}
|
|
3757
3767
|
}
|
|
3758
3768
|
if (ts.isArrayTypeNode(node)) {
|
|
3759
|
-
const typeSchema = yield* processNode(node.elementType);
|
|
3769
|
+
const typeSchema = yield* processNode(node.elementType, isVirtualTypeNode);
|
|
3760
3770
|
return createApiCall("Array", [typeSchema]);
|
|
3761
3771
|
}
|
|
3762
3772
|
if (ts.isTypeLiteralNode(node)) {
|
|
3763
|
-
const { properties, records } = yield* processMembers(node.members);
|
|
3773
|
+
const { properties, records } = yield* processMembers(node.members, isVirtualTypeNode);
|
|
3764
3774
|
return createApiCall(
|
|
3765
3775
|
"Struct",
|
|
3766
3776
|
[ts.factory.createObjectLiteralExpression(properties, true)].concat(records)
|
|
3767
3777
|
);
|
|
3768
3778
|
}
|
|
3779
|
+
if (ts.isTypeQueryNode(node)) {
|
|
3780
|
+
const typeChecker = yield* service(TypeCheckerApi);
|
|
3781
|
+
const type = typeChecker.getTypeAtLocation(node.exprName);
|
|
3782
|
+
const typeNode = typeChecker.typeToTypeNode(type, void 0, ts.NodeBuilderFlags.NoTruncation);
|
|
3783
|
+
if (typeNode) return yield* processNode(typeNode, true);
|
|
3784
|
+
}
|
|
3769
3785
|
if (ts.isTypeReferenceNode(node)) {
|
|
3770
3786
|
const parsedName = entityNameToDataTypeName(node.typeName);
|
|
3771
3787
|
if (isSome2(parsedName)) {
|
|
@@ -3777,13 +3793,13 @@ var processNode = (node) => gen2(function* () {
|
|
|
3777
3793
|
case "Chunk":
|
|
3778
3794
|
case "Array": {
|
|
3779
3795
|
const elements = yield* all2(
|
|
3780
|
-
...node.typeArguments ? node.typeArguments.map(processNode) : []
|
|
3796
|
+
...node.typeArguments ? node.typeArguments.map((_) => processNode(_, isVirtualTypeNode)) : []
|
|
3781
3797
|
);
|
|
3782
3798
|
return createApiCall(parsedName.value, elements);
|
|
3783
3799
|
}
|
|
3784
3800
|
case "Record": {
|
|
3785
3801
|
const elements = yield* all2(
|
|
3786
|
-
...node.typeArguments ? node.typeArguments.map(processNode) : []
|
|
3802
|
+
...node.typeArguments ? node.typeArguments.map((_) => processNode(_, isVirtualTypeNode)) : []
|
|
3787
3803
|
);
|
|
3788
3804
|
if (elements.length >= 2) {
|
|
3789
3805
|
return createApiCall(parsedName.value, [
|
|
@@ -3797,7 +3813,7 @@ var processNode = (node) => gen2(function* () {
|
|
|
3797
3813
|
}
|
|
3798
3814
|
case "Either": {
|
|
3799
3815
|
const elements = yield* all2(
|
|
3800
|
-
...node.typeArguments ? node.typeArguments.map(processNode) : []
|
|
3816
|
+
...node.typeArguments ? node.typeArguments.map((_) => processNode(_, isVirtualTypeNode)) : []
|
|
3801
3817
|
);
|
|
3802
3818
|
if (elements.length >= 2) {
|
|
3803
3819
|
return createApiCall(parsedName.value, [
|
|
@@ -3815,7 +3831,7 @@ var processNode = (node) => gen2(function* () {
|
|
|
3815
3831
|
if (typeArguments.length !== 2) {
|
|
3816
3832
|
return createUnsupportedNodeComment(ts, sourceFile, node);
|
|
3817
3833
|
}
|
|
3818
|
-
const baseType = yield* processNode(typeArguments[0]);
|
|
3834
|
+
const baseType = yield* processNode(typeArguments[0], isVirtualTypeNode);
|
|
3819
3835
|
const stringLiteralArguments = yield* option(parseAllLiterals(typeArguments[1]));
|
|
3820
3836
|
if (isNone2(stringLiteralArguments)) {
|
|
3821
3837
|
return createUnsupportedNodeComment(ts, sourceFile, node);
|
|
@@ -3842,7 +3858,7 @@ var processNode = (node) => gen2(function* () {
|
|
|
3842
3858
|
var processMembers = fn(
|
|
3843
3859
|
"SchemaGen.processMembers"
|
|
3844
3860
|
)(
|
|
3845
|
-
function* (members) {
|
|
3861
|
+
function* (members, isVirtualTypeNode) {
|
|
3846
3862
|
const { createApiCall, ts } = yield* service(
|
|
3847
3863
|
SchemaGenContext
|
|
3848
3864
|
);
|
|
@@ -3856,7 +3872,7 @@ var processMembers = fn(
|
|
|
3856
3872
|
return yield* fail(new RequiredExplicitTypesError(propertySignature));
|
|
3857
3873
|
}
|
|
3858
3874
|
const propertyAssignment = pipe(
|
|
3859
|
-
yield* processNode(propertySignature.type),
|
|
3875
|
+
yield* processNode(propertySignature.type, isVirtualTypeNode),
|
|
3860
3876
|
propertySignature.questionToken ? (_) => createApiCall("optional", [_]) : identity,
|
|
3861
3877
|
(_) => ts.factory.createPropertyAssignment(name, _)
|
|
3862
3878
|
);
|
|
@@ -3870,8 +3886,8 @@ var processMembers = fn(
|
|
|
3870
3886
|
const parameter = indexSignature.parameters[0];
|
|
3871
3887
|
if (!parameter.type) return yield* fail(new RequiredExplicitTypesError(parameter));
|
|
3872
3888
|
const parameterType = parameter.type;
|
|
3873
|
-
const key = yield* processNode(parameterType);
|
|
3874
|
-
const value = yield* processNode(indexSignature.type);
|
|
3889
|
+
const key = yield* processNode(parameterType, isVirtualTypeNode);
|
|
3890
|
+
const value = yield* processNode(indexSignature.type, isVirtualTypeNode);
|
|
3875
3891
|
records.push(
|
|
3876
3892
|
ts.factory.createObjectLiteralExpression([
|
|
3877
3893
|
ts.factory.createPropertyAssignment("key", key),
|
|
@@ -3890,7 +3906,7 @@ var processInterfaceDeclaration = fn("SchemaGen.processInterfaceDeclaration")(
|
|
|
3890
3906
|
const { createApiCall, ts } = yield* service(
|
|
3891
3907
|
SchemaGenContext
|
|
3892
3908
|
);
|
|
3893
|
-
const { properties, records } = yield* processMembers(node.members);
|
|
3909
|
+
const { properties, records } = yield* processMembers(node.members, false);
|
|
3894
3910
|
if (preferClass && records.length === 0) {
|
|
3895
3911
|
return yield* createExportSchemaClassDeclaration(node.name.text, properties);
|
|
3896
3912
|
}
|
|
@@ -3908,12 +3924,12 @@ var processTypeAliasDeclaration = fn("SchemaGen.processInterfaceDeclaration")(
|
|
|
3908
3924
|
return yield* fail(new TypeParametersNotSupportedError(node));
|
|
3909
3925
|
}
|
|
3910
3926
|
if (preferClass && ts.isTypeLiteralNode(node.type)) {
|
|
3911
|
-
const { properties, records } = yield* processMembers(node.type.members);
|
|
3927
|
+
const { properties, records } = yield* processMembers(node.type.members, false);
|
|
3912
3928
|
if (records.length === 0) {
|
|
3913
3929
|
return yield* createExportSchemaClassDeclaration(node.name.text, properties);
|
|
3914
3930
|
}
|
|
3915
3931
|
}
|
|
3916
|
-
const effectSchema = yield* processNode(node.type);
|
|
3932
|
+
const effectSchema = yield* processNode(node.type, false);
|
|
3917
3933
|
return yield* createExportVariableDeclaration(node.name.text, effectSchema);
|
|
3918
3934
|
}
|
|
3919
3935
|
);
|
|
@@ -4016,6 +4032,7 @@ var typeToEffectSchema = createRefactor({
|
|
|
4016
4032
|
description: "Refactor to Schema",
|
|
4017
4033
|
apply: fn("typeToEffectSchema.apply")(function* (sourceFile, textRange) {
|
|
4018
4034
|
const ts = yield* service(TypeScriptApi);
|
|
4035
|
+
const typeChecker = yield* service(TypeCheckerApi);
|
|
4019
4036
|
const maybeNode = yield* findNodeToProcess(sourceFile, textRange);
|
|
4020
4037
|
if (isNone2(maybeNode)) return yield* fail(new RefactorNotApplicableError());
|
|
4021
4038
|
const node = maybeNode.value;
|
|
@@ -4024,6 +4041,7 @@ var typeToEffectSchema = createRefactor({
|
|
|
4024
4041
|
description: "Refactor to Schema",
|
|
4025
4042
|
apply: pipe(
|
|
4026
4043
|
applyAtNode(sourceFile, node, false),
|
|
4044
|
+
provideService(TypeCheckerApi, typeChecker),
|
|
4027
4045
|
provideService(TypeScriptApi, ts)
|
|
4028
4046
|
)
|
|
4029
4047
|
};
|
|
@@ -4036,6 +4054,7 @@ var typeToEffectSchemaClass = createRefactor({
|
|
|
4036
4054
|
description: "Refactor to Schema.Class",
|
|
4037
4055
|
apply: fn("typeToEffectSchemaClass.apply")(function* (sourceFile, textRange) {
|
|
4038
4056
|
const ts = yield* service(TypeScriptApi);
|
|
4057
|
+
const typeChecker = yield* service(TypeCheckerApi);
|
|
4039
4058
|
const maybeNode = yield* findNodeToProcess(sourceFile, textRange);
|
|
4040
4059
|
if (isNone2(maybeNode)) return yield* fail(new RefactorNotApplicableError());
|
|
4041
4060
|
const node = maybeNode.value;
|
|
@@ -4044,6 +4063,7 @@ var typeToEffectSchemaClass = createRefactor({
|
|
|
4044
4063
|
description: "Refactor to Schema.Class",
|
|
4045
4064
|
apply: pipe(
|
|
4046
4065
|
applyAtNode(sourceFile, node, true),
|
|
4066
|
+
provideService(TypeCheckerApi, typeChecker),
|
|
4047
4067
|
provideService(TypeScriptApi, ts)
|
|
4048
4068
|
)
|
|
4049
4069
|
};
|