@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.
@@ -1224,10 +1224,10 @@ function makeTypeScriptUtils(ts) {
1224
1224
  if (!hasProperty(packageJsonScope.contents, "packageJsonContent")) return;
1225
1225
  const packageJsonContent = packageJsonScope.contents.packageJsonContent;
1226
1226
  if (!hasProperty(packageJsonContent, "name")) return;
1227
- if (!hasProperty(packageJsonContent, "version")) return;
1228
1227
  if (!hasProperty(packageJsonScope, "packageDirectory")) return;
1229
1228
  if (!isString(packageJsonScope.packageDirectory)) return;
1230
- const { name, version } = packageJsonContent;
1229
+ const { name } = packageJsonContent;
1230
+ const version = hasProperty(packageJsonScope, "version") ? packageJsonScope.version : "";
1231
1231
  if (!isString(name)) return;
1232
1232
  if (!isString(version)) return;
1233
1233
  const hasEffectInPeerDependencies = hasProperty(packageJsonContent, "peerDependencies") && isObject(packageJsonContent.peerDependencies) && hasProperty(packageJsonContent.peerDependencies, "effect");
@@ -1249,9 +1249,20 @@ function makeTypeScriptUtils(ts) {
1249
1249
  exportsKeys
1250
1250
  };
1251
1251
  }
1252
- function resolveModulePattern(sourceFile, pattern) {
1252
+ function resolveModulePattern(program, sourceFile, pattern) {
1253
1253
  if (pattern.indexOf("*") === -1) return [pattern.toLowerCase()];
1254
- const packageJsonScope = parsePackageContentNameAndVersionFromScope(sourceFile);
1254
+ let packageJsonScope = parsePackageContentNameAndVersionFromScope(sourceFile);
1255
+ if (!packageJsonScope && hasProperty(ts, "getPackageScopeForPath") && isFunction2(ts.getPackageScopeForPath) && hasProperty(ts, "getTemporaryModuleResolutionState") && isFunction2(ts.getTemporaryModuleResolutionState) && hasProperty(ts, "getPackageScopeForPath") && isFunction2(ts.getPackageScopeForPath)) {
1256
+ const temporaryModuleResolutionState = ts.getTemporaryModuleResolutionState(
1257
+ void 0,
1258
+ program,
1259
+ program.getCompilerOptions()
1260
+ );
1261
+ packageJsonScope = parsePackageContentNameAndVersionFromScope({
1262
+ ...sourceFile,
1263
+ packageJsonScope: ts.getPackageScopeForPath(sourceFile.fileName, temporaryModuleResolutionState)
1264
+ });
1265
+ }
1255
1266
  const referencedPackages = [];
1256
1267
  for (const statement of sourceFile.statements) {
1257
1268
  if (ts.isImportDeclaration(statement) && ts.isStringLiteral(statement.moduleSpecifier)) {
@@ -3554,7 +3565,7 @@ var importFromBarrel = createDiagnostic({
3554
3565
  const program = yield* service(TypeScriptProgram);
3555
3566
  const packageNamesToCheck = flatten(
3556
3567
  languageServicePluginOptions.namespaceImportPackages.map(
3557
- (packageName) => tsUtils.resolveModulePattern(sourceFile, packageName)
3568
+ (packageName) => tsUtils.resolveModulePattern(program, sourceFile, packageName)
3558
3569
  )
3559
3570
  );
3560
3571
  const isImportedFromBarrelExport = (element) => {
@@ -4514,6 +4525,7 @@ var parse2 = fn("writeTagClassAccessors.parse")(function* (node) {
4514
4525
  const ts = yield* service(TypeScriptApi);
4515
4526
  const typeChecker = yield* service(TypeCheckerApi);
4516
4527
  const typeParser = yield* service(TypeParser);
4528
+ const typeCheckerUtils = yield* service(TypeCheckerUtils);
4517
4529
  if (!ts.isClassDeclaration(node)) return yield* fail("not a class declaration");
4518
4530
  const { Service, accessors: accessors2, className } = yield* pipe(
4519
4531
  typeParser.extendsEffectService(node),
@@ -4522,12 +4534,18 @@ var parse2 = fn("writeTagClassAccessors.parse")(function* (node) {
4522
4534
  );
4523
4535
  if (accessors2 !== true) return yield* fail("accessors are not enabled in the Effect.Service call");
4524
4536
  const involvedMembers = [];
4525
- for (const property of typeChecker.getPropertiesOfType(Service)) {
4526
- const propertyType = typeChecker.getTypeOfSymbolAtLocation(property, node);
4527
- const callSignatures = typeChecker.getSignaturesOfType(propertyType, ts.SignatureKind.Call);
4528
- if (callSignatures.length > 0) {
4529
- const withTypeParameters = callSignatures.filter((_) => _.typeParameters && _.typeParameters.length > 0);
4530
- if (callSignatures.length > 1 || withTypeParameters.length > 0) involvedMembers.push({ property, propertyType });
4537
+ const nonPrimitiveServices = typeCheckerUtils.unrollUnionMembers(Service).filter(
4538
+ (_) => !(_.flags & ts.TypeFlags.Number || _.flags & ts.TypeFlags.String || _.flags & ts.TypeFlags.Boolean || _.flags & ts.TypeFlags.Literal)
4539
+ );
4540
+ if (nonPrimitiveServices.length === 0) return yield* fail("Service type is a primitive type");
4541
+ for (const serviceShape of nonPrimitiveServices) {
4542
+ for (const property of typeChecker.getPropertiesOfType(serviceShape)) {
4543
+ const propertyType = typeChecker.getTypeOfSymbolAtLocation(property, node);
4544
+ const callSignatures = typeChecker.getSignaturesOfType(propertyType, ts.SignatureKind.Call);
4545
+ if (callSignatures.length > 0) {
4546
+ const withTypeParameters = callSignatures.filter((_) => _.typeParameters && _.typeParameters.length > 0);
4547
+ if (callSignatures.length > 1 || withTypeParameters.length > 0) involvedMembers.push({ property, propertyType });
4548
+ }
4531
4549
  }
4532
4550
  }
4533
4551
  const hash2 = involvedMembers.map(({ property, propertyType }) => {
@@ -4573,6 +4591,7 @@ var accessors = createCodegen({
4573
4591
  const tsUtils = yield* service(TypeScriptUtils);
4574
4592
  const typeChecker = yield* service(TypeCheckerApi);
4575
4593
  const typeParser = yield* service(TypeParser);
4594
+ const typeCheckerUtils = yield* service(TypeCheckerUtils);
4576
4595
  const nodeAndCommentRange = tsUtils.findNodeWithLeadingCommentAtPosition(sourceFile, textRange.pos);
4577
4596
  if (!nodeAndCommentRange) return yield* fail(new CodegenNotApplicableError("no node and comment range"));
4578
4597
  return yield* pipe(
@@ -4586,7 +4605,8 @@ var accessors = createCodegen({
4586
4605
  provideService(TypeScriptApi, ts),
4587
4606
  provideService(TypeScriptUtils, tsUtils),
4588
4607
  provideService(TypeCheckerApi, typeChecker),
4589
- provideService(TypeParser, typeParser)
4608
+ provideService(TypeParser, typeParser),
4609
+ provideService(TypeCheckerUtils, typeCheckerUtils)
4590
4610
  )
4591
4611
  })
4592
4612
  ),