@effect/language-service 0.44.1 → 0.45.1

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.
@@ -26,7 +26,7 @@ __export(effect_lsp_patch_utils_exports, {
26
26
  });
27
27
  module.exports = __toCommonJS(effect_lsp_patch_utils_exports);
28
28
 
29
- // node_modules/.pnpm/effect@3.17.8/node_modules/effect/dist/esm/Function.js
29
+ // node_modules/.pnpm/effect@3.18.4/node_modules/effect/dist/esm/Function.js
30
30
  var isFunction = (input) => typeof input === "function";
31
31
  var dual = function(arity, body) {
32
32
  if (typeof arity === "function") {
@@ -120,7 +120,7 @@ function pipe(a, ab, bc, cd, de, ef, fg, gh, hi) {
120
120
  }
121
121
  }
122
122
 
123
- // node_modules/.pnpm/effect@3.17.8/node_modules/effect/dist/esm/GlobalValue.js
123
+ // node_modules/.pnpm/effect@3.18.4/node_modules/effect/dist/esm/GlobalValue.js
124
124
  var globalStoreId = `effect/GlobalValue`;
125
125
  var globalStore;
126
126
  var globalValue = (id, compute) => {
@@ -134,7 +134,7 @@ var globalValue = (id, compute) => {
134
134
  return globalStore.get(id);
135
135
  };
136
136
 
137
- // node_modules/.pnpm/effect@3.17.8/node_modules/effect/dist/esm/Predicate.js
137
+ // node_modules/.pnpm/effect@3.18.4/node_modules/effect/dist/esm/Predicate.js
138
138
  var isString = (input) => typeof input === "string";
139
139
  var isNumber = (input) => typeof input === "number";
140
140
  var isBoolean = (input) => typeof input === "boolean";
@@ -144,7 +144,7 @@ var isObject = (input) => isRecordOrArray(input) || isFunction2(input);
144
144
  var hasProperty = /* @__PURE__ */ dual(2, (self, property) => isObject(self) && property in self);
145
145
  var isRecord = (input) => isRecordOrArray(input) && !Array.isArray(input);
146
146
 
147
- // node_modules/.pnpm/effect@3.17.8/node_modules/effect/dist/esm/Utils.js
147
+ // node_modules/.pnpm/effect@3.18.4/node_modules/effect/dist/esm/Utils.js
148
148
  var GenKindTypeId = /* @__PURE__ */ Symbol.for("effect/Gen/GenKind");
149
149
  var GenKindImpl = class {
150
150
  value;
@@ -266,7 +266,7 @@ var internalCall = isNotOptimizedAway ? standard.effect_internal_function : forc
266
266
  var genConstructor = function* () {
267
267
  }.constructor;
268
268
 
269
- // node_modules/.pnpm/effect@3.17.8/node_modules/effect/dist/esm/Hash.js
269
+ // node_modules/.pnpm/effect@3.18.4/node_modules/effect/dist/esm/Hash.js
270
270
  var randomHashCache = /* @__PURE__ */ globalValue(/* @__PURE__ */ Symbol.for("effect/Hash/randomHashCache"), () => /* @__PURE__ */ new WeakMap());
271
271
  var symbol = /* @__PURE__ */ Symbol.for("effect/Hash");
272
272
  var hash = (self) => {
@@ -365,7 +365,7 @@ var cached = function() {
365
365
  return hash2;
366
366
  };
367
367
 
368
- // node_modules/.pnpm/effect@3.17.8/node_modules/effect/dist/esm/Equal.js
368
+ // node_modules/.pnpm/effect@3.18.4/node_modules/effect/dist/esm/Equal.js
369
369
  var symbol2 = /* @__PURE__ */ Symbol.for("effect/Equal");
370
370
  function equals() {
371
371
  if (arguments.length === 1) {
@@ -419,7 +419,7 @@ function compareBoth(self, that) {
419
419
  var isEqual = (u) => hasProperty(u, symbol2);
420
420
  var equivalence = () => equals;
421
421
 
422
- // node_modules/.pnpm/effect@3.17.8/node_modules/effect/dist/esm/Inspectable.js
422
+ // node_modules/.pnpm/effect@3.18.4/node_modules/effect/dist/esm/Inspectable.js
423
423
  var NodeInspectSymbol = /* @__PURE__ */ Symbol.for("nodejs.util.inspect.custom");
424
424
  var toJSON = (x) => {
425
425
  try {
@@ -471,7 +471,7 @@ var redact = (u) => {
471
471
  return u;
472
472
  };
473
473
 
474
- // node_modules/.pnpm/effect@3.17.8/node_modules/effect/dist/esm/Pipeable.js
474
+ // node_modules/.pnpm/effect@3.18.4/node_modules/effect/dist/esm/Pipeable.js
475
475
  var pipeArguments = (self, args2) => {
476
476
  switch (args2.length) {
477
477
  case 0:
@@ -504,14 +504,14 @@ var pipeArguments = (self, args2) => {
504
504
  }
505
505
  };
506
506
 
507
- // node_modules/.pnpm/effect@3.17.8/node_modules/effect/dist/esm/internal/opCodes/effect.js
507
+ // node_modules/.pnpm/effect@3.18.4/node_modules/effect/dist/esm/internal/opCodes/effect.js
508
508
  var OP_COMMIT = "Commit";
509
509
 
510
- // node_modules/.pnpm/effect@3.17.8/node_modules/effect/dist/esm/internal/version.js
511
- var moduleVersion = "3.17.8";
510
+ // node_modules/.pnpm/effect@3.18.4/node_modules/effect/dist/esm/internal/version.js
511
+ var moduleVersion = "3.18.4";
512
512
  var getCurrentVersion = () => moduleVersion;
513
513
 
514
- // node_modules/.pnpm/effect@3.17.8/node_modules/effect/dist/esm/internal/effectable.js
514
+ // node_modules/.pnpm/effect@3.18.4/node_modules/effect/dist/esm/internal/effectable.js
515
515
  var EffectTypeId = /* @__PURE__ */ Symbol.for("effect/Effect");
516
516
  var StreamTypeId = /* @__PURE__ */ Symbol.for("effect/Stream");
517
517
  var SinkTypeId = /* @__PURE__ */ Symbol.for("effect/Sink");
@@ -598,7 +598,7 @@ var StructuralCommitPrototype = {
598
598
  ...StructuralPrototype
599
599
  };
600
600
 
601
- // node_modules/.pnpm/effect@3.17.8/node_modules/effect/dist/esm/internal/option.js
601
+ // node_modules/.pnpm/effect@3.18.4/node_modules/effect/dist/esm/internal/option.js
602
602
  var TypeId = /* @__PURE__ */ Symbol.for("effect/Option");
603
603
  var CommonProto = {
604
604
  ...EffectPrototype,
@@ -656,7 +656,7 @@ var some = (value) => {
656
656
  return a;
657
657
  };
658
658
 
659
- // node_modules/.pnpm/effect@3.17.8/node_modules/effect/dist/esm/internal/either.js
659
+ // node_modules/.pnpm/effect@3.18.4/node_modules/effect/dist/esm/internal/either.js
660
660
  var TypeId2 = /* @__PURE__ */ Symbol.for("effect/Either");
661
661
  var CommonProto2 = {
662
662
  ...EffectPrototype,
@@ -718,7 +718,7 @@ var right = (right3) => {
718
718
  return a;
719
719
  };
720
720
 
721
- // node_modules/.pnpm/effect@3.17.8/node_modules/effect/dist/esm/Either.js
721
+ // node_modules/.pnpm/effect@3.18.4/node_modules/effect/dist/esm/Either.js
722
722
  var right2 = right;
723
723
  var left2 = left;
724
724
  var isLeft2 = isLeft;
@@ -726,14 +726,14 @@ var isRight2 = isRight;
726
726
  var map = /* @__PURE__ */ dual(2, (self, f) => isRight2(self) ? right2(f(self.right)) : left2(self.left));
727
727
  var getOrElse = /* @__PURE__ */ dual(2, (self, onLeft) => isLeft2(self) ? onLeft(self.left) : self.right);
728
728
 
729
- // node_modules/.pnpm/effect@3.17.8/node_modules/effect/dist/esm/internal/array.js
729
+ // node_modules/.pnpm/effect@3.18.4/node_modules/effect/dist/esm/internal/array.js
730
730
  var isNonEmptyArray = (self) => self.length > 0;
731
731
 
732
- // node_modules/.pnpm/effect@3.17.8/node_modules/effect/dist/esm/Order.js
732
+ // node_modules/.pnpm/effect@3.18.4/node_modules/effect/dist/esm/Order.js
733
733
  var make = (compare) => (self, that) => self === that ? 0 : compare(self, that);
734
734
  var string2 = /* @__PURE__ */ make((self, that) => self < that ? -1 : 1);
735
735
 
736
- // node_modules/.pnpm/effect@3.17.8/node_modules/effect/dist/esm/Option.js
736
+ // node_modules/.pnpm/effect@3.18.4/node_modules/effect/dist/esm/Option.js
737
737
  var none2 = () => none;
738
738
  var some2 = some;
739
739
  var isNone2 = isNone;
@@ -741,7 +741,7 @@ var isSome2 = isSome;
741
741
  var orElse = /* @__PURE__ */ dual(2, (self, that) => isNone2(self) ? that() : self);
742
742
  var fromNullable = (nullableValue) => nullableValue == null ? none2() : some2(nullableValue);
743
743
 
744
- // node_modules/.pnpm/effect@3.17.8/node_modules/effect/dist/esm/Record.js
744
+ // node_modules/.pnpm/effect@3.18.4/node_modules/effect/dist/esm/Record.js
745
745
  var map2 = /* @__PURE__ */ dual(2, (self, f) => {
746
746
  const out = {
747
747
  ...self
@@ -753,7 +753,7 @@ var map2 = /* @__PURE__ */ dual(2, (self, f) => {
753
753
  });
754
754
  var keys = (self) => Object.keys(self);
755
755
 
756
- // node_modules/.pnpm/effect@3.17.8/node_modules/effect/dist/esm/Array.js
756
+ // node_modules/.pnpm/effect@3.18.4/node_modules/effect/dist/esm/Array.js
757
757
  var fromIterable = (collection) => Array.isArray(collection) ? collection : Array.from(collection);
758
758
  var append = /* @__PURE__ */ dual(2, (self, last) => [...self, last]);
759
759
  var appendAll = /* @__PURE__ */ dual(2, (self, that) => fromIterable(self).concat(fromIterable(that)));
@@ -1190,14 +1190,19 @@ var defaults = {
1190
1190
  target: "service",
1191
1191
  pattern: "default",
1192
1192
  skipLeadingPath: ["src/"]
1193
- }]
1193
+ }, {
1194
+ target: "custom",
1195
+ pattern: "default",
1196
+ skipLeadingPath: ["src/"]
1197
+ }],
1198
+ extendedKeyDetection: false
1194
1199
  };
1195
1200
  function parseKeyPatterns(patterns) {
1196
1201
  const result = [];
1197
1202
  for (const entry of patterns) {
1198
1203
  if (!isObject(entry)) continue;
1199
1204
  result.push({
1200
- target: hasProperty(entry, "target") && isString(entry.target) && ["service", "error"].includes(entry.target.toLowerCase()) ? entry.target.toLowerCase() : "service",
1205
+ target: hasProperty(entry, "target") && isString(entry.target) && ["service", "error", "custom"].includes(entry.target.toLowerCase()) ? entry.target.toLowerCase() : "service",
1201
1206
  pattern: hasProperty(entry, "pattern") && isString(entry.pattern) && ["package-identifier", "default"].includes(entry.pattern.toLowerCase()) ? entry.pattern.toLowerCase() : "default",
1202
1207
  skipLeadingPath: hasProperty(entry, "skipLeadingPath") && isArray(entry.skipLeadingPath) && entry.skipLeadingPath.every(isString) ? entry.skipLeadingPath : ["src/"]
1203
1208
  });
@@ -1223,7 +1228,8 @@ function parse(config) {
1223
1228
  topLevelNamedReexports: isObject(config) && hasProperty(config, "topLevelNamedReexports") && isString(config.topLevelNamedReexports) && ["ignore", "follow"].includes(config.topLevelNamedReexports.toLowerCase()) ? config.topLevelNamedReexports.toLowerCase() : defaults.topLevelNamedReexports,
1224
1229
  renames: isObject(config) && hasProperty(config, "renames") && isBoolean(config.renames) ? config.renames : defaults.renames,
1225
1230
  noExternal: isObject(config) && hasProperty(config, "noExternal") && isBoolean(config.noExternal) ? config.noExternal : defaults.noExternal,
1226
- keyPatterns: isObject(config) && hasProperty(config, "keyPatterns") && isArray(config.keyPatterns) ? parseKeyPatterns(config.keyPatterns) : defaults.keyPatterns
1231
+ keyPatterns: isObject(config) && hasProperty(config, "keyPatterns") && isArray(config.keyPatterns) ? parseKeyPatterns(config.keyPatterns) : defaults.keyPatterns,
1232
+ extendedKeyDetection: isObject(config) && hasProperty(config, "extendedKeyDetection") && isBoolean(config.extendedKeyDetection) ? config.extendedKeyDetection : defaults.extendedKeyDetection
1227
1233
  };
1228
1234
  }
1229
1235
 
@@ -3551,6 +3557,62 @@ var deterministicKeys = createDiagnostic({
3551
3557
  apply: fn("deterministicKeys.apply")(function* (sourceFile, report) {
3552
3558
  const ts = yield* service(TypeScriptApi);
3553
3559
  const typeParser = yield* service(TypeParser);
3560
+ const typeChecker = yield* service(TypeCheckerApi);
3561
+ const typeScriptUtils = yield* service(TypeScriptUtils);
3562
+ const options = yield* service(LanguageServicePluginOptions);
3563
+ const parseExtendsCustom = cachedBy(
3564
+ fn("parseExtendsCustom")(function* (classDeclaration) {
3565
+ if (!options.extendedKeyDetection) {
3566
+ return yield* typeParserIssue("Extended key detection is disabled", void 0, classDeclaration);
3567
+ }
3568
+ if (!classDeclaration.name) {
3569
+ return yield* typeParserIssue("Class has no name", void 0, classDeclaration);
3570
+ }
3571
+ if (!ts.isIdentifier(classDeclaration.name)) {
3572
+ return yield* typeParserIssue("Class name is not an identifier", void 0, classDeclaration);
3573
+ }
3574
+ const heritageClauses = classDeclaration.heritageClauses;
3575
+ if (!heritageClauses) {
3576
+ return yield* typeParserIssue("Class has no heritage clauses", void 0, classDeclaration);
3577
+ }
3578
+ const nodeToVisit2 = [...classDeclaration.heritageClauses];
3579
+ const appendNodeToVisit2 = (node) => {
3580
+ nodeToVisit2.push(node);
3581
+ return void 0;
3582
+ };
3583
+ while (nodeToVisit2.length > 0) {
3584
+ const node = nodeToVisit2.shift();
3585
+ if (ts.isCallExpression(node)) {
3586
+ for (let i = 0; i < node.arguments.length; i++) {
3587
+ const arg = node.arguments[i];
3588
+ if (!ts.isStringLiteral(arg)) continue;
3589
+ const resolvedSignature = typeChecker.getResolvedSignature(node);
3590
+ if (resolvedSignature) {
3591
+ const parameter = resolvedSignature.parameters[i];
3592
+ if (!parameter) continue;
3593
+ if (parameter.declarations) {
3594
+ for (const declaration of parameter.declarations) {
3595
+ const parameterSourceFile = typeScriptUtils.getSourceFileOfNode(declaration);
3596
+ const paramText = parameterSourceFile.text.substring(declaration.pos, declaration.end);
3597
+ if (paramText.toLowerCase().includes("@effect-identifier")) {
3598
+ return { className: classDeclaration.name, keyStringLiteral: arg, target: "custom" };
3599
+ }
3600
+ }
3601
+ }
3602
+ }
3603
+ }
3604
+ }
3605
+ ts.forEachChild(node, appendNodeToVisit2);
3606
+ }
3607
+ return yield* typeParserIssue(
3608
+ "Class does not extend any custom pattern",
3609
+ void 0,
3610
+ classDeclaration
3611
+ );
3612
+ }),
3613
+ "deterministicKeys.parseExtendsCustom",
3614
+ (classDeclaration) => classDeclaration
3615
+ );
3554
3616
  const nodeToVisit = [];
3555
3617
  const appendNodeToVisit = (node) => {
3556
3618
  nodeToVisit.push(node);
@@ -3574,12 +3636,13 @@ var deterministicKeys = createDiagnostic({
3574
3636
  map4(({ className, keyStringLiteral }) => ({ keyStringLiteral, className, target: "error" }))
3575
3637
  )
3576
3638
  ),
3639
+ orElse2(() => parseExtendsCustom(node)),
3577
3640
  orElse2(() => void_)
3578
3641
  );
3579
3642
  if (result && result.keyStringLiteral) {
3580
- const { className, keyStringLiteral } = result;
3643
+ const { className, keyStringLiteral, target } = result;
3581
3644
  const classNameText = ts.idText(className);
3582
- const expectedKey = yield* createString(sourceFile, classNameText, result.target);
3645
+ const expectedKey = yield* createString(sourceFile, classNameText, target);
3583
3646
  if (!expectedKey) continue;
3584
3647
  const actualIdentifier = keyStringLiteral.text;
3585
3648
  if (actualIdentifier !== expectedKey) {
@@ -5077,17 +5140,67 @@ var overriddenSchemaConstructor = createDiagnostic({
5077
5140
  const members = node.members;
5078
5141
  for (const member of members) {
5079
5142
  if (ts.isConstructorDeclaration(member)) {
5143
+ const fixAsStaticNew = {
5144
+ fixName: "overriddenSchemaConstructor_static",
5145
+ description: "Rewrite using the static 'new' pattern",
5146
+ apply: gen(function* () {
5147
+ const changeTracker = yield* service(ChangeTracker);
5148
+ const visitor = (node2) => {
5149
+ if (ts.isExpressionStatement(node2) && ts.isCallExpression(node2.expression) && ts.isToken(node2.expression.expression) && node2.expression.expression.kind === ts.SyntaxKind.SuperKeyword) {
5150
+ const constructThis = ts.factory.createNewExpression(
5151
+ ts.factory.createIdentifier("this"),
5152
+ void 0,
5153
+ node2.expression.arguments
5154
+ );
5155
+ return ts.factory.createVariableStatement(
5156
+ void 0,
5157
+ ts.factory.createVariableDeclarationList(
5158
+ [ts.factory.createVariableDeclaration(
5159
+ "_this",
5160
+ void 0,
5161
+ void 0,
5162
+ constructThis
5163
+ )],
5164
+ ts.NodeFlags.Const
5165
+ )
5166
+ );
5167
+ }
5168
+ if (ts.isToken(node2) && node2.kind === ts.SyntaxKind.ThisKeyword) {
5169
+ return ts.factory.createIdentifier("_this");
5170
+ }
5171
+ return ts.visitEachChild(node2, visitor, ts.nullTransformationContext);
5172
+ };
5173
+ const newBody = visitor(member.body);
5174
+ const bodyWithReturn = ts.factory.updateBlock(
5175
+ newBody,
5176
+ newBody.statements.concat([
5177
+ ts.factory.createReturnStatement(ts.factory.createIdentifier("_this"))
5178
+ ])
5179
+ );
5180
+ const newMethod = ts.factory.createMethodDeclaration(
5181
+ ts.factory.createModifiersFromModifierFlags(ts.ModifierFlags.Public | ts.ModifierFlags.Static),
5182
+ void 0,
5183
+ "new",
5184
+ void 0,
5185
+ member.typeParameters,
5186
+ member.parameters,
5187
+ member.type,
5188
+ bodyWithReturn
5189
+ );
5190
+ changeTracker.replaceNode(sourceFile, member, newMethod);
5191
+ })
5192
+ };
5080
5193
  report({
5081
5194
  location: member,
5082
- messageText: "Classes extending Schema must not override the constructor",
5083
- fixes: [{
5195
+ messageText: "Classes extending Schema must not override the constructor; this is because it silently breaks the schema decoding behaviour. If that's needed, we recommend instead to use a static 'new' method that constructs the instance.",
5196
+ fixes: (member.body ? [fixAsStaticNew] : []).concat([{
5084
5197
  fixName: "overriddenSchemaConstructor_fix",
5085
5198
  description: "Remove the constructor override",
5086
5199
  apply: gen(function* () {
5087
5200
  const changeTracker = yield* service(ChangeTracker);
5088
5201
  changeTracker.delete(sourceFile, member);
5089
5202
  })
5090
- }]
5203
+ }])
5091
5204
  });
5092
5205
  break;
5093
5206
  }