@effect/language-service 0.38.2 → 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
@@ -1194,10 +1194,10 @@ function makeTypeScriptUtils(ts) {
1194
1194
  if (!hasProperty(packageJsonScope.contents, "packageJsonContent")) return;
1195
1195
  const packageJsonContent = packageJsonScope.contents.packageJsonContent;
1196
1196
  if (!hasProperty(packageJsonContent, "name")) return;
1197
- if (!hasProperty(packageJsonContent, "version")) return;
1198
1197
  if (!hasProperty(packageJsonScope, "packageDirectory")) return;
1199
1198
  if (!isString(packageJsonScope.packageDirectory)) return;
1200
- const { name, version } = packageJsonContent;
1199
+ const { name } = packageJsonContent;
1200
+ const version = hasProperty(packageJsonScope, "version") ? packageJsonScope.version : "";
1201
1201
  if (!isString(name)) return;
1202
1202
  if (!isString(version)) return;
1203
1203
  const hasEffectInPeerDependencies = hasProperty(packageJsonContent, "peerDependencies") && isObject(packageJsonContent.peerDependencies) && hasProperty(packageJsonContent.peerDependencies, "effect");
@@ -1219,9 +1219,20 @@ function makeTypeScriptUtils(ts) {
1219
1219
  exportsKeys
1220
1220
  };
1221
1221
  }
1222
- function resolveModulePattern(sourceFile, pattern) {
1222
+ function resolveModulePattern(program, sourceFile, pattern) {
1223
1223
  if (pattern.indexOf("*") === -1) return [pattern.toLowerCase()];
1224
- const packageJsonScope = parsePackageContentNameAndVersionFromScope(sourceFile);
1224
+ let packageJsonScope = parsePackageContentNameAndVersionFromScope(sourceFile);
1225
+ if (!packageJsonScope && hasProperty(ts, "getPackageScopeForPath") && isFunction2(ts.getPackageScopeForPath) && hasProperty(ts, "getTemporaryModuleResolutionState") && isFunction2(ts.getTemporaryModuleResolutionState) && hasProperty(ts, "getPackageScopeForPath") && isFunction2(ts.getPackageScopeForPath)) {
1226
+ const temporaryModuleResolutionState = ts.getTemporaryModuleResolutionState(
1227
+ void 0,
1228
+ program,
1229
+ program.getCompilerOptions()
1230
+ );
1231
+ packageJsonScope = parsePackageContentNameAndVersionFromScope({
1232
+ ...sourceFile,
1233
+ packageJsonScope: ts.getPackageScopeForPath(sourceFile.fileName, temporaryModuleResolutionState)
1234
+ });
1235
+ }
1225
1236
  const referencedPackages = [];
1226
1237
  for (const statement of sourceFile.statements) {
1227
1238
  if (ts.isImportDeclaration(statement) && ts.isStringLiteral(statement.moduleSpecifier)) {
@@ -3583,6 +3594,7 @@ var parse2 = fn("writeTagClassAccessors.parse")(function* (node) {
3583
3594
  const ts = yield* service(TypeScriptApi);
3584
3595
  const typeChecker = yield* service(TypeCheckerApi);
3585
3596
  const typeParser = yield* service(TypeParser);
3597
+ const typeCheckerUtils = yield* service(TypeCheckerUtils);
3586
3598
  if (!ts.isClassDeclaration(node)) return yield* fail("not a class declaration");
3587
3599
  const { Service, accessors: accessors2, className } = yield* pipe(
3588
3600
  typeParser.extendsEffectService(node),
@@ -3591,12 +3603,18 @@ var parse2 = fn("writeTagClassAccessors.parse")(function* (node) {
3591
3603
  );
3592
3604
  if (accessors2 !== true) return yield* fail("accessors are not enabled in the Effect.Service call");
3593
3605
  const involvedMembers = [];
3594
- for (const property of typeChecker.getPropertiesOfType(Service)) {
3595
- const propertyType = typeChecker.getTypeOfSymbolAtLocation(property, node);
3596
- const callSignatures = typeChecker.getSignaturesOfType(propertyType, ts.SignatureKind.Call);
3597
- if (callSignatures.length > 0) {
3598
- const withTypeParameters = callSignatures.filter((_) => _.typeParameters && _.typeParameters.length > 0);
3599
- 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
+ }
3600
3618
  }
3601
3619
  }
3602
3620
  const hash2 = involvedMembers.map(({ property, propertyType }) => {
@@ -3642,6 +3660,7 @@ var accessors = createCodegen({
3642
3660
  const tsUtils = yield* service(TypeScriptUtils);
3643
3661
  const typeChecker = yield* service(TypeCheckerApi);
3644
3662
  const typeParser = yield* service(TypeParser);
3663
+ const typeCheckerUtils = yield* service(TypeCheckerUtils);
3645
3664
  const nodeAndCommentRange = tsUtils.findNodeWithLeadingCommentAtPosition(sourceFile, textRange.pos);
3646
3665
  if (!nodeAndCommentRange) return yield* fail(new CodegenNotApplicableError("no node and comment range"));
3647
3666
  return yield* pipe(
@@ -3655,7 +3674,8 @@ var accessors = createCodegen({
3655
3674
  provideService(TypeScriptApi, ts),
3656
3675
  provideService(TypeScriptUtils, tsUtils),
3657
3676
  provideService(TypeCheckerApi, typeChecker),
3658
- provideService(TypeParser, typeParser)
3677
+ provideService(TypeParser, typeParser),
3678
+ provideService(TypeCheckerUtils, typeCheckerUtils)
3659
3679
  )
3660
3680
  })
3661
3681
  ),
@@ -4029,7 +4049,7 @@ var importFromBarrel = createDiagnostic({
4029
4049
  const program = yield* service(TypeScriptProgram);
4030
4050
  const packageNamesToCheck = flatten(
4031
4051
  languageServicePluginOptions.namespaceImportPackages.map(
4032
- (packageName) => tsUtils.resolveModulePattern(sourceFile, packageName)
4052
+ (packageName) => tsUtils.resolveModulePattern(program, sourceFile, packageName)
4033
4053
  )
4034
4054
  );
4035
4055
  const isImportedFromBarrelExport = (element) => {
@@ -5767,7 +5787,7 @@ var makeAutoImportProvider = fn("TypeScriptApi")(function* (fromSourceFile) {
5767
5787
  const collectImportCache = fn("TypeScriptApi")(
5768
5788
  function* (packagePatterns, kind, topLevelNamedReexports) {
5769
5789
  for (const packagePattern of packagePatterns) {
5770
- const packageNames = tsUtils.resolveModulePattern(fromSourceFile, packagePattern);
5790
+ const packageNames = tsUtils.resolveModulePattern(program, fromSourceFile, packagePattern);
5771
5791
  for (const packageName of packageNames) {
5772
5792
  const packageInfo = getPackageInfo(fromSourceFile.fileName, packageName);
5773
5793
  if (!packageInfo) continue;