@effect/language-service 0.38.3 → 0.38.4

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 CHANGED
@@ -3594,6 +3594,7 @@ var parse2 = fn("writeTagClassAccessors.parse")(function* (node) {
3594
3594
  const ts = yield* service(TypeScriptApi);
3595
3595
  const typeChecker = yield* service(TypeCheckerApi);
3596
3596
  const typeParser = yield* service(TypeParser);
3597
+ const typeCheckerUtils = yield* service(TypeCheckerUtils);
3597
3598
  if (!ts.isClassDeclaration(node)) return yield* fail("not a class declaration");
3598
3599
  const { Service, accessors: accessors2, className } = yield* pipe(
3599
3600
  typeParser.extendsEffectService(node),
@@ -3602,12 +3603,18 @@ var parse2 = fn("writeTagClassAccessors.parse")(function* (node) {
3602
3603
  );
3603
3604
  if (accessors2 !== true) return yield* fail("accessors are not enabled in the Effect.Service call");
3604
3605
  const involvedMembers = [];
3605
- for (const property of typeChecker.getPropertiesOfType(Service)) {
3606
- const propertyType = typeChecker.getTypeOfSymbolAtLocation(property, node);
3607
- const callSignatures = typeChecker.getSignaturesOfType(propertyType, ts.SignatureKind.Call);
3608
- if (callSignatures.length > 0) {
3609
- const withTypeParameters = callSignatures.filter((_) => _.typeParameters && _.typeParameters.length > 0);
3610
- if (callSignatures.length > 1 || withTypeParameters.length > 0) involvedMembers.push({ property, propertyType });
3606
+ const nonPrimitiveServices = typeCheckerUtils.unrollUnionMembers(Service).filter(
3607
+ (_) => !(_.flags & ts.TypeFlags.Number || _.flags & ts.TypeFlags.String || _.flags & ts.TypeFlags.Boolean || _.flags & ts.TypeFlags.Literal)
3608
+ );
3609
+ if (nonPrimitiveServices.length === 0) return yield* fail("Service type is a primitive type");
3610
+ for (const serviceShape of nonPrimitiveServices) {
3611
+ for (const property of typeChecker.getPropertiesOfType(serviceShape)) {
3612
+ const propertyType = typeChecker.getTypeOfSymbolAtLocation(property, node);
3613
+ const callSignatures = typeChecker.getSignaturesOfType(propertyType, ts.SignatureKind.Call);
3614
+ if (callSignatures.length > 0) {
3615
+ const withTypeParameters = callSignatures.filter((_) => _.typeParameters && _.typeParameters.length > 0);
3616
+ if (callSignatures.length > 1 || withTypeParameters.length > 0) involvedMembers.push({ property, propertyType });
3617
+ }
3611
3618
  }
3612
3619
  }
3613
3620
  const hash2 = involvedMembers.map(({ property, propertyType }) => {
@@ -3653,6 +3660,7 @@ var accessors = createCodegen({
3653
3660
  const tsUtils = yield* service(TypeScriptUtils);
3654
3661
  const typeChecker = yield* service(TypeCheckerApi);
3655
3662
  const typeParser = yield* service(TypeParser);
3663
+ const typeCheckerUtils = yield* service(TypeCheckerUtils);
3656
3664
  const nodeAndCommentRange = tsUtils.findNodeWithLeadingCommentAtPosition(sourceFile, textRange.pos);
3657
3665
  if (!nodeAndCommentRange) return yield* fail(new CodegenNotApplicableError("no node and comment range"));
3658
3666
  return yield* pipe(
@@ -3666,7 +3674,8 @@ var accessors = createCodegen({
3666
3674
  provideService(TypeScriptApi, ts),
3667
3675
  provideService(TypeScriptUtils, tsUtils),
3668
3676
  provideService(TypeCheckerApi, typeChecker),
3669
- provideService(TypeParser, typeParser)
3677
+ provideService(TypeParser, typeParser),
3678
+ provideService(TypeCheckerUtils, typeCheckerUtils)
3670
3679
  )
3671
3680
  })
3672
3681
  ),