@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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@effect/language-service",
3
- "version": "0.38.2",
3
+ "version": "0.38.4",
4
4
  "description": "A Language-Service Plugin to Refactor and Diagnostic effect-ts projects",
5
5
  "main": "index.cjs",
6
6
  "bin": {
package/transform.js CHANGED
@@ -1229,10 +1229,10 @@ function makeTypeScriptUtils(ts) {
1229
1229
  if (!hasProperty(packageJsonScope.contents, "packageJsonContent")) return;
1230
1230
  const packageJsonContent = packageJsonScope.contents.packageJsonContent;
1231
1231
  if (!hasProperty(packageJsonContent, "name")) return;
1232
- if (!hasProperty(packageJsonContent, "version")) return;
1233
1232
  if (!hasProperty(packageJsonScope, "packageDirectory")) return;
1234
1233
  if (!isString(packageJsonScope.packageDirectory)) return;
1235
- const { name, version } = packageJsonContent;
1234
+ const { name } = packageJsonContent;
1235
+ const version = hasProperty(packageJsonScope, "version") ? packageJsonScope.version : "";
1236
1236
  if (!isString(name)) return;
1237
1237
  if (!isString(version)) return;
1238
1238
  const hasEffectInPeerDependencies = hasProperty(packageJsonContent, "peerDependencies") && isObject(packageJsonContent.peerDependencies) && hasProperty(packageJsonContent.peerDependencies, "effect");
@@ -1254,9 +1254,20 @@ function makeTypeScriptUtils(ts) {
1254
1254
  exportsKeys
1255
1255
  };
1256
1256
  }
1257
- function resolveModulePattern(sourceFile, pattern) {
1257
+ function resolveModulePattern(program, sourceFile, pattern) {
1258
1258
  if (pattern.indexOf("*") === -1) return [pattern.toLowerCase()];
1259
- const packageJsonScope = parsePackageContentNameAndVersionFromScope(sourceFile);
1259
+ let packageJsonScope = parsePackageContentNameAndVersionFromScope(sourceFile);
1260
+ if (!packageJsonScope && hasProperty(ts, "getPackageScopeForPath") && isFunction2(ts.getPackageScopeForPath) && hasProperty(ts, "getTemporaryModuleResolutionState") && isFunction2(ts.getTemporaryModuleResolutionState) && hasProperty(ts, "getPackageScopeForPath") && isFunction2(ts.getPackageScopeForPath)) {
1261
+ const temporaryModuleResolutionState = ts.getTemporaryModuleResolutionState(
1262
+ void 0,
1263
+ program,
1264
+ program.getCompilerOptions()
1265
+ );
1266
+ packageJsonScope = parsePackageContentNameAndVersionFromScope({
1267
+ ...sourceFile,
1268
+ packageJsonScope: ts.getPackageScopeForPath(sourceFile.fileName, temporaryModuleResolutionState)
1269
+ });
1270
+ }
1260
1271
  const referencedPackages = [];
1261
1272
  for (const statement of sourceFile.statements) {
1262
1273
  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
  ),