@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.
Files changed (3) hide show
  1. package/index.js +50 -30
  2. package/index.js.map +1 -1
  3. 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.parent;
2891
- if (ts.isPropertyAccessExpression(node.parent) && node.parent.name.text === "pipe" && ts.isCallExpression(node.parent.parent)) {
2892
- pipeArgs2 = node.parent.parent.arguments;
2893
- nodeToReplace2 = node.parent.parent.parent;
2894
- }
2895
- while (nodeToReplace2) {
2896
- if (ts.isArrowFunction(nodeToReplace2) || ts.isFunctionDeclaration(nodeToReplace2) || ts.isMethodDeclaration(nodeToReplace2)) {
2897
- return { ...effectGen2, pipeArgs: pipeArgs2, nodeToReplace: nodeToReplace2 };
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.isConciseBody(nodeToReplace2) || ts.isReturnStatement(nodeToReplace2)) {
2900
- nodeToReplace2 = nodeToReplace2.parent;
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.isBlock(nodeToReplace2) && nodeToReplace2.statements.length === 1) {
2904
- nodeToReplace2 = nodeToReplace2.parent;
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
  };