@effect/language-service 0.16.6 → 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 +28 -18
  2. package/index.js.map +1 -1
  3. package/package.json +1 -1
package/index.js CHANGED
@@ -3707,7 +3707,7 @@ var createUnsupportedNodeComment = (ts, sourceFile, node) => ts.addSyntheticTrai
3707
3707
  ts.SyntaxKind.MultiLineCommentTrivia,
3708
3708
  " Not supported conversion: " + node.getText(sourceFile) + " "
3709
3709
  );
3710
- var processNode = (node) => gen2(function* () {
3710
+ var processNode = (node, isVirtualTypeNode) => gen2(function* () {
3711
3711
  const { createApiCall, createApiPropertyAccess, entityNameToDataTypeName, sourceFile, ts } = yield* service(
3712
3712
  SchemaGenContext
3713
3713
  );
@@ -3741,12 +3741,12 @@ var processNode = (node) => gen2(function* () {
3741
3741
  if (ts.isUnionTypeNode(node)) {
3742
3742
  const allLiterals = yield* option(parseAllLiterals(node));
3743
3743
  if (isSome2(allLiterals)) return createApiCall("Literal", allLiterals.value);
3744
- const members = yield* all2(...node.types.map((_) => processNode(_)));
3744
+ const members = yield* all2(...node.types.map((_) => processNode(_, isVirtualTypeNode)));
3745
3745
  return createApiCall("Union", members);
3746
3746
  }
3747
3747
  if (ts.isIntersectionTypeNode(node)) {
3748
3748
  const [firstSchema, ...otherSchemas] = yield* all2(
3749
- ...node.types.map((_) => processNode(_))
3749
+ ...node.types.map((_) => processNode(_, isVirtualTypeNode))
3750
3750
  );
3751
3751
  if (otherSchemas.length === 0) return firstSchema;
3752
3752
  return ts.factory.createCallExpression(
@@ -3760,22 +3760,28 @@ var processNode = (node) => gen2(function* () {
3760
3760
  }
3761
3761
  if (ts.isTypeOperatorNode(node)) {
3762
3762
  if (node.operator === ts.SyntaxKind.KeyOfKeyword) {
3763
- return createApiCall("keyof", [yield* processNode(node.type)]);
3763
+ return createApiCall("keyof", [yield* processNode(node.type, isVirtualTypeNode)]);
3764
3764
  } else if (node.operator === ts.SyntaxKind.ReadonlyKeyword) {
3765
- return yield* processNode(node.type);
3765
+ return yield* processNode(node.type, isVirtualTypeNode);
3766
3766
  }
3767
3767
  }
3768
3768
  if (ts.isArrayTypeNode(node)) {
3769
- const typeSchema = yield* processNode(node.elementType);
3769
+ const typeSchema = yield* processNode(node.elementType, isVirtualTypeNode);
3770
3770
  return createApiCall("Array", [typeSchema]);
3771
3771
  }
3772
3772
  if (ts.isTypeLiteralNode(node)) {
3773
- const { properties, records } = yield* processMembers(node.members);
3773
+ const { properties, records } = yield* processMembers(node.members, isVirtualTypeNode);
3774
3774
  return createApiCall(
3775
3775
  "Struct",
3776
3776
  [ts.factory.createObjectLiteralExpression(properties, true)].concat(records)
3777
3777
  );
3778
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
+ }
3779
3785
  if (ts.isTypeReferenceNode(node)) {
3780
3786
  const parsedName = entityNameToDataTypeName(node.typeName);
3781
3787
  if (isSome2(parsedName)) {
@@ -3787,13 +3793,13 @@ var processNode = (node) => gen2(function* () {
3787
3793
  case "Chunk":
3788
3794
  case "Array": {
3789
3795
  const elements = yield* all2(
3790
- ...node.typeArguments ? node.typeArguments.map(processNode) : []
3796
+ ...node.typeArguments ? node.typeArguments.map((_) => processNode(_, isVirtualTypeNode)) : []
3791
3797
  );
3792
3798
  return createApiCall(parsedName.value, elements);
3793
3799
  }
3794
3800
  case "Record": {
3795
3801
  const elements = yield* all2(
3796
- ...node.typeArguments ? node.typeArguments.map(processNode) : []
3802
+ ...node.typeArguments ? node.typeArguments.map((_) => processNode(_, isVirtualTypeNode)) : []
3797
3803
  );
3798
3804
  if (elements.length >= 2) {
3799
3805
  return createApiCall(parsedName.value, [
@@ -3807,7 +3813,7 @@ var processNode = (node) => gen2(function* () {
3807
3813
  }
3808
3814
  case "Either": {
3809
3815
  const elements = yield* all2(
3810
- ...node.typeArguments ? node.typeArguments.map(processNode) : []
3816
+ ...node.typeArguments ? node.typeArguments.map((_) => processNode(_, isVirtualTypeNode)) : []
3811
3817
  );
3812
3818
  if (elements.length >= 2) {
3813
3819
  return createApiCall(parsedName.value, [
@@ -3825,7 +3831,7 @@ var processNode = (node) => gen2(function* () {
3825
3831
  if (typeArguments.length !== 2) {
3826
3832
  return createUnsupportedNodeComment(ts, sourceFile, node);
3827
3833
  }
3828
- const baseType = yield* processNode(typeArguments[0]);
3834
+ const baseType = yield* processNode(typeArguments[0], isVirtualTypeNode);
3829
3835
  const stringLiteralArguments = yield* option(parseAllLiterals(typeArguments[1]));
3830
3836
  if (isNone2(stringLiteralArguments)) {
3831
3837
  return createUnsupportedNodeComment(ts, sourceFile, node);
@@ -3852,7 +3858,7 @@ var processNode = (node) => gen2(function* () {
3852
3858
  var processMembers = fn(
3853
3859
  "SchemaGen.processMembers"
3854
3860
  )(
3855
- function* (members) {
3861
+ function* (members, isVirtualTypeNode) {
3856
3862
  const { createApiCall, ts } = yield* service(
3857
3863
  SchemaGenContext
3858
3864
  );
@@ -3866,7 +3872,7 @@ var processMembers = fn(
3866
3872
  return yield* fail(new RequiredExplicitTypesError(propertySignature));
3867
3873
  }
3868
3874
  const propertyAssignment = pipe(
3869
- yield* processNode(propertySignature.type),
3875
+ yield* processNode(propertySignature.type, isVirtualTypeNode),
3870
3876
  propertySignature.questionToken ? (_) => createApiCall("optional", [_]) : identity,
3871
3877
  (_) => ts.factory.createPropertyAssignment(name, _)
3872
3878
  );
@@ -3880,8 +3886,8 @@ var processMembers = fn(
3880
3886
  const parameter = indexSignature.parameters[0];
3881
3887
  if (!parameter.type) return yield* fail(new RequiredExplicitTypesError(parameter));
3882
3888
  const parameterType = parameter.type;
3883
- const key = yield* processNode(parameterType);
3884
- const value = yield* processNode(indexSignature.type);
3889
+ const key = yield* processNode(parameterType, isVirtualTypeNode);
3890
+ const value = yield* processNode(indexSignature.type, isVirtualTypeNode);
3885
3891
  records.push(
3886
3892
  ts.factory.createObjectLiteralExpression([
3887
3893
  ts.factory.createPropertyAssignment("key", key),
@@ -3900,7 +3906,7 @@ var processInterfaceDeclaration = fn("SchemaGen.processInterfaceDeclaration")(
3900
3906
  const { createApiCall, ts } = yield* service(
3901
3907
  SchemaGenContext
3902
3908
  );
3903
- const { properties, records } = yield* processMembers(node.members);
3909
+ const { properties, records } = yield* processMembers(node.members, false);
3904
3910
  if (preferClass && records.length === 0) {
3905
3911
  return yield* createExportSchemaClassDeclaration(node.name.text, properties);
3906
3912
  }
@@ -3918,12 +3924,12 @@ var processTypeAliasDeclaration = fn("SchemaGen.processInterfaceDeclaration")(
3918
3924
  return yield* fail(new TypeParametersNotSupportedError(node));
3919
3925
  }
3920
3926
  if (preferClass && ts.isTypeLiteralNode(node.type)) {
3921
- const { properties, records } = yield* processMembers(node.type.members);
3927
+ const { properties, records } = yield* processMembers(node.type.members, false);
3922
3928
  if (records.length === 0) {
3923
3929
  return yield* createExportSchemaClassDeclaration(node.name.text, properties);
3924
3930
  }
3925
3931
  }
3926
- const effectSchema = yield* processNode(node.type);
3932
+ const effectSchema = yield* processNode(node.type, false);
3927
3933
  return yield* createExportVariableDeclaration(node.name.text, effectSchema);
3928
3934
  }
3929
3935
  );
@@ -4026,6 +4032,7 @@ var typeToEffectSchema = createRefactor({
4026
4032
  description: "Refactor to Schema",
4027
4033
  apply: fn("typeToEffectSchema.apply")(function* (sourceFile, textRange) {
4028
4034
  const ts = yield* service(TypeScriptApi);
4035
+ const typeChecker = yield* service(TypeCheckerApi);
4029
4036
  const maybeNode = yield* findNodeToProcess(sourceFile, textRange);
4030
4037
  if (isNone2(maybeNode)) return yield* fail(new RefactorNotApplicableError());
4031
4038
  const node = maybeNode.value;
@@ -4034,6 +4041,7 @@ var typeToEffectSchema = createRefactor({
4034
4041
  description: "Refactor to Schema",
4035
4042
  apply: pipe(
4036
4043
  applyAtNode(sourceFile, node, false),
4044
+ provideService(TypeCheckerApi, typeChecker),
4037
4045
  provideService(TypeScriptApi, ts)
4038
4046
  )
4039
4047
  };
@@ -4046,6 +4054,7 @@ var typeToEffectSchemaClass = createRefactor({
4046
4054
  description: "Refactor to Schema.Class",
4047
4055
  apply: fn("typeToEffectSchemaClass.apply")(function* (sourceFile, textRange) {
4048
4056
  const ts = yield* service(TypeScriptApi);
4057
+ const typeChecker = yield* service(TypeCheckerApi);
4049
4058
  const maybeNode = yield* findNodeToProcess(sourceFile, textRange);
4050
4059
  if (isNone2(maybeNode)) return yield* fail(new RefactorNotApplicableError());
4051
4060
  const node = maybeNode.value;
@@ -4054,6 +4063,7 @@ var typeToEffectSchemaClass = createRefactor({
4054
4063
  description: "Refactor to Schema.Class",
4055
4064
  apply: pipe(
4056
4065
  applyAtNode(sourceFile, node, true),
4066
+ provideService(TypeCheckerApi, typeChecker),
4057
4067
  provideService(TypeScriptApi, ts)
4058
4068
  )
4059
4069
  };