@effect/language-service 0.47.1 → 0.47.3

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/cli.js CHANGED
@@ -31570,10 +31570,10 @@ var TypeCheckerUtils = Tag4("TypeCheckerUtils");
31570
31570
  var nanoLayer2 = (fa) => pipe(
31571
31571
  service2(TypeScriptApi),
31572
31572
  flatMap18(
31573
- (ts) => flatMap18(service2(TypeCheckerApi), (typeChecker) => pipe(fa, provideService7(TypeCheckerUtils, makeTypeCheckerUtils(ts, typeChecker))))
31573
+ (ts) => flatMap18(service2(TypeCheckerApi), (typeChecker) => flatMap18(service2(TypeScriptUtils), (typeScriptUtils) => pipe(fa, provideService7(TypeCheckerUtils, makeTypeCheckerUtils(ts, typeChecker, typeScriptUtils)))))
31574
31574
  )
31575
31575
  );
31576
- function makeTypeCheckerUtils(ts, typeChecker) {
31576
+ function makeTypeCheckerUtils(ts, typeChecker, tsUtils) {
31577
31577
  function isUnion4(type2) {
31578
31578
  return !!(type2.flags & ts.TypeFlags.Union);
31579
31579
  }
@@ -31813,6 +31813,74 @@ function makeTypeCheckerUtils(ts, typeChecker) {
31813
31813
  expectedAndRealTypeCache.set(sourceFile, result);
31814
31814
  return result;
31815
31815
  };
31816
+ function typeToSimplifiedTypeNode(type2, enclosingNode, flags) {
31817
+ const fallbackStandard = () => {
31818
+ const typeNode = typeChecker.typeToTypeNode(type2, enclosingNode, flags);
31819
+ if (!typeNode) return void 0;
31820
+ return tsUtils.simplifyTypeNode(typeNode);
31821
+ };
31822
+ const members = unrollUnionMembers(type2);
31823
+ if (members.length > 1) {
31824
+ const typeNodes = [];
31825
+ members.sort(deterministicTypeOrder);
31826
+ for (const member of members) {
31827
+ const memberNode = typeToSimplifiedTypeNode(member, enclosingNode, flags);
31828
+ if (!memberNode) return fallbackStandard();
31829
+ typeNodes.push(memberNode);
31830
+ }
31831
+ return tsUtils.simplifyTypeNode(ts.factory.createUnionTypeNode(typeNodes));
31832
+ }
31833
+ if (type2.flags & ts.TypeFlags.Intersection) {
31834
+ const intersectionType = type2;
31835
+ const typeNodes = [];
31836
+ for (const member of intersectionType.types) {
31837
+ const memberNode = typeToSimplifiedTypeNode(member, enclosingNode, flags);
31838
+ if (!memberNode) return fallbackStandard();
31839
+ typeNodes.push(memberNode);
31840
+ }
31841
+ return tsUtils.simplifyTypeNode(ts.factory.createIntersectionTypeNode(typeNodes));
31842
+ }
31843
+ if (type2.flags & ts.TypeFlags.Object && type2.objectFlags & ts.ObjectFlags.Reference) {
31844
+ const typeReference = type2;
31845
+ const standard2 = fallbackStandard();
31846
+ if (!standard2) return void 0;
31847
+ if (!ts.isTypeReferenceNode(standard2)) return standard2;
31848
+ if (typeReference.target.typeParameters?.length !== typeReference.typeArguments?.length) return standard2;
31849
+ if (standard2.typeArguments?.length !== typeReference.typeArguments?.length) return standard2;
31850
+ const typeParametersCount = (typeReference.target.typeParameters || []).length;
31851
+ for (let i = typeParametersCount - 1; i >= 0; i--) {
31852
+ const typeParameter = typeReference.target.typeParameters[i];
31853
+ const typeArgument = typeReference.typeArguments[i];
31854
+ const defaultType = typeChecker.getDefaultFromTypeParameter(typeParameter);
31855
+ if (defaultType !== typeArgument || i === 0) {
31856
+ return tsUtils.simplifyTypeNode(ts.factory.updateTypeReferenceNode(
31857
+ standard2,
31858
+ standard2.typeName,
31859
+ ts.factory.createNodeArray((standard2.typeArguments || []).slice(0, Math.min(typeParametersCount, i + 1)))
31860
+ ));
31861
+ }
31862
+ }
31863
+ return standard2;
31864
+ }
31865
+ if (type2.flags & ts.TypeFlags.Object) {
31866
+ const standard2 = fallbackStandard();
31867
+ if (!standard2) return void 0;
31868
+ if (!ts.isFunctionTypeNode(standard2)) return standard2;
31869
+ const signatures = typeChecker.getSignaturesOfType(type2, ts.SignatureKind.Call);
31870
+ if (signatures.length !== 1) return standard2;
31871
+ const returnType = typeChecker.getReturnTypeOfSignature(signatures[0]);
31872
+ if (!returnType) return standard2;
31873
+ const returnTypeNode = typeToSimplifiedTypeNode(returnType, enclosingNode, flags);
31874
+ if (!returnTypeNode) return standard2;
31875
+ return tsUtils.simplifyTypeNode(ts.factory.updateFunctionTypeNode(
31876
+ standard2,
31877
+ standard2.typeParameters,
31878
+ standard2.parameters,
31879
+ returnTypeNode
31880
+ ));
31881
+ }
31882
+ return fallbackStandard();
31883
+ }
31816
31884
  return {
31817
31885
  isUnion: isUnion4,
31818
31886
  getTypeParameterAtPosition,
@@ -31821,7 +31889,8 @@ function makeTypeCheckerUtils(ts, typeChecker) {
31821
31889
  appendToUniqueTypesMap,
31822
31890
  deterministicTypeOrder,
31823
31891
  getInferredReturnType,
31824
- expectedAndRealType
31892
+ expectedAndRealType,
31893
+ typeToSimplifiedTypeNode
31825
31894
  };
31826
31895
  }
31827
31896
 
@@ -33010,6 +33079,10 @@ var makeKeyBuilder = fn2("KeyBuilder")(
33010
33079
  );
33011
33080
  var keyBuilderCache = /* @__PURE__ */ new Map();
33012
33081
  var getOrMakeKeyBuilder = fn2("getOrMakeKeyBuilder")(function* (sourceFile) {
33082
+ while (keyBuilderCache.size > 5) {
33083
+ const oldest = keyBuilderCache.keys().next().value;
33084
+ if (oldest) keyBuilderCache.delete(oldest);
33085
+ }
33013
33086
  const keyBuilder = keyBuilderCache.get(sourceFile.fileName) || (yield* makeKeyBuilder(sourceFile));
33014
33087
  keyBuilderCache.set(sourceFile.fileName, keyBuilder);
33015
33088
  return keyBuilder;