@effect/language-service 0.0.20 → 0.1.0

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.
Files changed (99) hide show
  1. package/index.cjs +1457 -0
  2. package/package.json +18 -32
  3. package/README.md +0 -57
  4. package/_mjs/index.mjs +0 -71
  5. package/_mjs/index.mjs.map +0 -1
  6. package/_mjs/refactors/asyncAwaitToGen.mjs +0 -19
  7. package/_mjs/refactors/asyncAwaitToGen.mjs.map +0 -1
  8. package/_mjs/refactors/asyncAwaitToGenTryPromise.mjs +0 -24
  9. package/_mjs/refactors/asyncAwaitToGenTryPromise.mjs.map +0 -1
  10. package/_mjs/refactors/definition.mjs +0 -4
  11. package/_mjs/refactors/definition.mjs.map +0 -1
  12. package/_mjs/refactors/functionToArrow.mjs +0 -39
  13. package/_mjs/refactors/functionToArrow.mjs.map +0 -1
  14. package/_mjs/refactors/index.mjs +0 -19
  15. package/_mjs/refactors/index.mjs.map +0 -1
  16. package/_mjs/refactors/pipeableToDatafirst.mjs +0 -38
  17. package/_mjs/refactors/pipeableToDatafirst.mjs.map +0 -1
  18. package/_mjs/refactors/toggleLazyConst.mjs +0 -32
  19. package/_mjs/refactors/toggleLazyConst.mjs.map +0 -1
  20. package/_mjs/refactors/toggleReturnTypeAnnotation.mjs +0 -40
  21. package/_mjs/refactors/toggleReturnTypeAnnotation.mjs.map +0 -1
  22. package/_mjs/refactors/toggleTypeAnnotation.mjs +0 -32
  23. package/_mjs/refactors/toggleTypeAnnotation.mjs.map +0 -1
  24. package/_mjs/refactors/wrapWithPipe.mjs +0 -18
  25. package/_mjs/refactors/wrapWithPipe.mjs.map +0 -1
  26. package/_mjs/transformer.mjs +0 -163
  27. package/_mjs/transformer.mjs.map +0 -1
  28. package/_mjs/utils/AST.mjs +0 -210
  29. package/_mjs/utils/AST.mjs.map +0 -1
  30. package/_mjs/utils/Function.mjs +0 -31
  31. package/_mjs/utils/Function.mjs.map +0 -1
  32. package/_mjs/utils/Option.mjs +0 -15
  33. package/_mjs/utils/Option.mjs.map +0 -1
  34. package/_mjs/utils/ReadonlyArray.mjs +0 -12
  35. package/_mjs/utils/ReadonlyArray.mjs.map +0 -1
  36. package/index.d.ts +0 -2
  37. package/index.d.ts.map +0 -1
  38. package/index.js +0 -76
  39. package/index.js.map +0 -1
  40. package/refactors/asyncAwaitToGen.d.ts +0 -3
  41. package/refactors/asyncAwaitToGen.d.ts.map +0 -1
  42. package/refactors/asyncAwaitToGen.js +0 -28
  43. package/refactors/asyncAwaitToGen.js.map +0 -1
  44. package/refactors/asyncAwaitToGenTryPromise.d.ts +0 -3
  45. package/refactors/asyncAwaitToGenTryPromise.d.ts.map +0 -1
  46. package/refactors/asyncAwaitToGenTryPromise.js +0 -33
  47. package/refactors/asyncAwaitToGenTryPromise.js.map +0 -1
  48. package/refactors/definition.d.ts +0 -15
  49. package/refactors/definition.d.ts.map +0 -1
  50. package/refactors/definition.js +0 -10
  51. package/refactors/definition.js.map +0 -1
  52. package/refactors/functionToArrow.d.ts +0 -3
  53. package/refactors/functionToArrow.d.ts.map +0 -1
  54. package/refactors/functionToArrow.js +0 -48
  55. package/refactors/functionToArrow.js.map +0 -1
  56. package/refactors/index.d.ts +0 -12
  57. package/refactors/index.d.ts.map +0 -1
  58. package/refactors/index.js +0 -27
  59. package/refactors/index.js.map +0 -1
  60. package/refactors/pipeableToDatafirst.d.ts +0 -3
  61. package/refactors/pipeableToDatafirst.d.ts.map +0 -1
  62. package/refactors/pipeableToDatafirst.js +0 -47
  63. package/refactors/pipeableToDatafirst.js.map +0 -1
  64. package/refactors/toggleLazyConst.d.ts +0 -3
  65. package/refactors/toggleLazyConst.d.ts.map +0 -1
  66. package/refactors/toggleLazyConst.js +0 -41
  67. package/refactors/toggleLazyConst.js.map +0 -1
  68. package/refactors/toggleReturnTypeAnnotation.d.ts +0 -3
  69. package/refactors/toggleReturnTypeAnnotation.d.ts.map +0 -1
  70. package/refactors/toggleReturnTypeAnnotation.js +0 -49
  71. package/refactors/toggleReturnTypeAnnotation.js.map +0 -1
  72. package/refactors/toggleTypeAnnotation.d.ts +0 -3
  73. package/refactors/toggleTypeAnnotation.d.ts.map +0 -1
  74. package/refactors/toggleTypeAnnotation.js +0 -41
  75. package/refactors/toggleTypeAnnotation.js.map +0 -1
  76. package/refactors/wrapWithPipe.d.ts +0 -3
  77. package/refactors/wrapWithPipe.d.ts.map +0 -1
  78. package/refactors/wrapWithPipe.js +0 -27
  79. package/refactors/wrapWithPipe.js.map +0 -1
  80. package/transformer.d.ts +0 -27
  81. package/transformer.d.ts.map +0 -1
  82. package/transformer.js +0 -170
  83. package/transformer.js.map +0 -1
  84. package/utils/AST.d.ts +0 -120
  85. package/utils/AST.d.ts.map +0 -1
  86. package/utils/AST.js +0 -235
  87. package/utils/AST.js.map +0 -1
  88. package/utils/Function.d.ts +0 -21
  89. package/utils/Function.d.ts.map +0 -1
  90. package/utils/Function.js +0 -37
  91. package/utils/Function.js.map +0 -1
  92. package/utils/Option.d.ts +0 -18
  93. package/utils/Option.d.ts.map +0 -1
  94. package/utils/Option.js +0 -30
  95. package/utils/Option.js.map +0 -1
  96. package/utils/ReadonlyArray.d.ts +0 -17
  97. package/utils/ReadonlyArray.d.ts.map +0 -1
  98. package/utils/ReadonlyArray.js +0 -30
  99. package/utils/ReadonlyArray.js.map +0 -1
package/index.cjs ADDED
@@ -0,0 +1,1457 @@
1
+ "use strict";
2
+
3
+ // node_modules/.pnpm/effect@2.0.0-next.59/node_modules/effect/dist/esm/Function.js
4
+ var isFunction = (input) => typeof input === "function";
5
+ var dual = function(arity, body) {
6
+ if (typeof arity === "function") {
7
+ return function() {
8
+ if (arity(arguments)) {
9
+ return body.apply(this, arguments);
10
+ }
11
+ return (self) => body(self, ...arguments);
12
+ };
13
+ }
14
+ switch (arity) {
15
+ case 0:
16
+ case 1:
17
+ throw new RangeError(`Invalid arity ${arity}`);
18
+ case 2:
19
+ return function(a, b) {
20
+ if (arguments.length >= 2) {
21
+ return body(a, b);
22
+ }
23
+ return function(self) {
24
+ return body(self, a);
25
+ };
26
+ };
27
+ case 3:
28
+ return function(a, b, c) {
29
+ if (arguments.length >= 3) {
30
+ return body(a, b, c);
31
+ }
32
+ return function(self) {
33
+ return body(self, a, b);
34
+ };
35
+ };
36
+ case 4:
37
+ return function(a, b, c, d) {
38
+ if (arguments.length >= 4) {
39
+ return body(a, b, c, d);
40
+ }
41
+ return function(self) {
42
+ return body(self, a, b, c);
43
+ };
44
+ };
45
+ case 5:
46
+ return function(a, b, c, d, e) {
47
+ if (arguments.length >= 5) {
48
+ return body(a, b, c, d, e);
49
+ }
50
+ return function(self) {
51
+ return body(self, a, b, c, d);
52
+ };
53
+ };
54
+ default:
55
+ return function() {
56
+ if (arguments.length >= arity) {
57
+ return body.apply(this, arguments);
58
+ }
59
+ const args = arguments;
60
+ return function(self) {
61
+ return body(self, ...args);
62
+ };
63
+ };
64
+ }
65
+ };
66
+ var identity = (a) => a;
67
+ function pipe(a, ab, bc, cd, de, ef, fg, gh, hi) {
68
+ switch (arguments.length) {
69
+ case 1:
70
+ return a;
71
+ case 2:
72
+ return ab(a);
73
+ case 3:
74
+ return bc(ab(a));
75
+ case 4:
76
+ return cd(bc(ab(a)));
77
+ case 5:
78
+ return de(cd(bc(ab(a))));
79
+ case 6:
80
+ return ef(de(cd(bc(ab(a)))));
81
+ case 7:
82
+ return fg(ef(de(cd(bc(ab(a))))));
83
+ case 8:
84
+ return gh(fg(ef(de(cd(bc(ab(a)))))));
85
+ case 9:
86
+ return hi(gh(fg(ef(de(cd(bc(ab(a))))))));
87
+ default: {
88
+ let ret = arguments[0];
89
+ for (let i = 1; i < arguments.length; i++) {
90
+ ret = arguments[i](ret);
91
+ }
92
+ return ret;
93
+ }
94
+ }
95
+ }
96
+
97
+ // node_modules/.pnpm/effect@2.0.0-next.59/node_modules/effect/dist/esm/internal/version.js
98
+ var moduleVersion = "2.0.0-next.59";
99
+
100
+ // node_modules/.pnpm/effect@2.0.0-next.59/node_modules/effect/dist/esm/GlobalValue.js
101
+ var globalStoreId = /* @__PURE__ */ Symbol.for(`effect/GlobalValue/globalStoreId/${moduleVersion}`);
102
+ if (!(globalStoreId in globalThis)) {
103
+ ;
104
+ globalThis[globalStoreId] = /* @__PURE__ */ new Map();
105
+ }
106
+ var globalStore = globalThis[globalStoreId];
107
+ var globalValue = (id, compute) => {
108
+ if (!globalStore.has(id)) {
109
+ globalStore.set(id, compute());
110
+ }
111
+ return globalStore.get(id);
112
+ };
113
+
114
+ // node_modules/.pnpm/effect@2.0.0-next.59/node_modules/effect/dist/esm/Predicate.js
115
+ var isFunction2 = isFunction;
116
+ var isRecordOrArray = (input) => typeof input === "object" && input !== null;
117
+ var isObject = (input) => isRecordOrArray(input) || isFunction2(input);
118
+ var hasProperty = /* @__PURE__ */ dual(2, (self, property) => isObject(self) && property in self);
119
+ var isNullable = (input) => input === null || input === void 0;
120
+
121
+ // node_modules/.pnpm/effect@2.0.0-next.59/node_modules/effect/dist/esm/Utils.js
122
+ var GenKindTypeId = /* @__PURE__ */ Symbol.for("effect/Gen/GenKind");
123
+ var GenKindImpl = class {
124
+ value;
125
+ constructor(value) {
126
+ this.value = value;
127
+ }
128
+ /**
129
+ * @since 2.0.0
130
+ */
131
+ get _F() {
132
+ return identity;
133
+ }
134
+ /**
135
+ * @since 2.0.0
136
+ */
137
+ get _R() {
138
+ return (_) => _;
139
+ }
140
+ /**
141
+ * @since 2.0.0
142
+ */
143
+ get _O() {
144
+ return (_) => _;
145
+ }
146
+ /**
147
+ * @since 2.0.0
148
+ */
149
+ get _E() {
150
+ return (_) => _;
151
+ }
152
+ /**
153
+ * @since 2.0.0
154
+ */
155
+ [GenKindTypeId] = GenKindTypeId;
156
+ /**
157
+ * @since 2.0.0
158
+ */
159
+ [Symbol.iterator]() {
160
+ return new SingleShotGen(this);
161
+ }
162
+ };
163
+ var SingleShotGen = class _SingleShotGen {
164
+ self;
165
+ called = false;
166
+ constructor(self) {
167
+ this.self = self;
168
+ }
169
+ /**
170
+ * @since 2.0.0
171
+ */
172
+ next(a) {
173
+ return this.called ? {
174
+ value: a,
175
+ done: true
176
+ } : (this.called = true, {
177
+ value: this.self,
178
+ done: false
179
+ });
180
+ }
181
+ /**
182
+ * @since 2.0.0
183
+ */
184
+ return(a) {
185
+ return {
186
+ value: a,
187
+ done: true
188
+ };
189
+ }
190
+ /**
191
+ * @since 2.0.0
192
+ */
193
+ throw(e) {
194
+ throw e;
195
+ }
196
+ /**
197
+ * @since 2.0.0
198
+ */
199
+ [Symbol.iterator]() {
200
+ return new _SingleShotGen(this.self);
201
+ }
202
+ };
203
+ var defaultIncHi = 335903614;
204
+ var defaultIncLo = 4150755663;
205
+ var MUL_HI = 1481765933 >>> 0;
206
+ var MUL_LO = 1284865837 >>> 0;
207
+ var BIT_53 = 9007199254740992;
208
+ var BIT_27 = 134217728;
209
+ var PCGRandom = class {
210
+ _state;
211
+ constructor(seedHi, seedLo, incHi, incLo) {
212
+ if (isNullable(seedLo) && isNullable(seedHi)) {
213
+ seedLo = Math.random() * 4294967295 >>> 0;
214
+ seedHi = 0;
215
+ } else if (isNullable(seedLo)) {
216
+ seedLo = seedHi;
217
+ seedHi = 0;
218
+ }
219
+ if (isNullable(incLo) && isNullable(incHi)) {
220
+ incLo = this._state ? this._state[3] : defaultIncLo;
221
+ incHi = this._state ? this._state[2] : defaultIncHi;
222
+ } else if (isNullable(incLo)) {
223
+ incLo = incHi;
224
+ incHi = 0;
225
+ }
226
+ this._state = new Int32Array([0, 0, incHi >>> 0, ((incLo || 0) | 1) >>> 0]);
227
+ this._next();
228
+ add64(this._state, this._state[0], this._state[1], seedHi >>> 0, seedLo >>> 0);
229
+ this._next();
230
+ return this;
231
+ }
232
+ /**
233
+ * Returns a copy of the internal state of this random number generator as a
234
+ * JavaScript Array.
235
+ *
236
+ * @category getters
237
+ * @since 2.0.0
238
+ */
239
+ getState() {
240
+ return [this._state[0], this._state[1], this._state[2], this._state[3]];
241
+ }
242
+ /**
243
+ * Restore state previously retrieved using `getState()`.
244
+ *
245
+ * @since 2.0.0
246
+ */
247
+ setState(state) {
248
+ this._state[0] = state[0];
249
+ this._state[1] = state[1];
250
+ this._state[2] = state[2];
251
+ this._state[3] = state[3] | 1;
252
+ }
253
+ /**
254
+ * Get a uniformly distributed 32 bit integer between [0, max).
255
+ *
256
+ * @category getter
257
+ * @since 2.0.0
258
+ */
259
+ integer(max) {
260
+ if (!max) {
261
+ return this._next();
262
+ }
263
+ max = max >>> 0;
264
+ if ((max & max - 1) === 0) {
265
+ return this._next() & max - 1;
266
+ }
267
+ let num = 0;
268
+ const skew = (-max >>> 0) % max >>> 0;
269
+ for (num = this._next(); num < skew; num = this._next()) {
270
+ }
271
+ return num % max;
272
+ }
273
+ /**
274
+ * Get a uniformly distributed IEEE-754 double between 0.0 and 1.0, with
275
+ * 53 bits of precision (every bit of the mantissa is randomized).
276
+ *
277
+ * @category getters
278
+ * @since 2.0.0
279
+ */
280
+ number() {
281
+ const hi = (this._next() & 67108863) * 1;
282
+ const lo = (this._next() & 134217727) * 1;
283
+ return (hi * BIT_27 + lo) / BIT_53;
284
+ }
285
+ /** @internal */
286
+ _next() {
287
+ const oldHi = this._state[0] >>> 0;
288
+ const oldLo = this._state[1] >>> 0;
289
+ mul64(this._state, oldHi, oldLo, MUL_HI, MUL_LO);
290
+ add64(this._state, this._state[0], this._state[1], this._state[2], this._state[3]);
291
+ let xsHi = oldHi >>> 18;
292
+ let xsLo = (oldLo >>> 18 | oldHi << 14) >>> 0;
293
+ xsHi = (xsHi ^ oldHi) >>> 0;
294
+ xsLo = (xsLo ^ oldLo) >>> 0;
295
+ const xorshifted = (xsLo >>> 27 | xsHi << 5) >>> 0;
296
+ const rot = oldHi >>> 27;
297
+ const rot2 = (-rot >>> 0 & 31) >>> 0;
298
+ return (xorshifted >>> rot | xorshifted << rot2) >>> 0;
299
+ }
300
+ };
301
+ function mul64(out, aHi, aLo, bHi, bLo) {
302
+ let c1 = (aLo >>> 16) * (bLo & 65535) >>> 0;
303
+ let c0 = (aLo & 65535) * (bLo >>> 16) >>> 0;
304
+ let lo = (aLo & 65535) * (bLo & 65535) >>> 0;
305
+ let hi = (aLo >>> 16) * (bLo >>> 16) + ((c0 >>> 16) + (c1 >>> 16)) >>> 0;
306
+ c0 = c0 << 16 >>> 0;
307
+ lo = lo + c0 >>> 0;
308
+ if (lo >>> 0 < c0 >>> 0) {
309
+ hi = hi + 1 >>> 0;
310
+ }
311
+ c1 = c1 << 16 >>> 0;
312
+ lo = lo + c1 >>> 0;
313
+ if (lo >>> 0 < c1 >>> 0) {
314
+ hi = hi + 1 >>> 0;
315
+ }
316
+ hi = hi + Math.imul(aLo, bHi) >>> 0;
317
+ hi = hi + Math.imul(aHi, bLo) >>> 0;
318
+ out[0] = hi;
319
+ out[1] = lo;
320
+ }
321
+ function add64(out, aHi, aLo, bHi, bLo) {
322
+ let hi = aHi + bHi >>> 0;
323
+ const lo = aLo + bLo >>> 0;
324
+ if (lo >>> 0 < aLo >>> 0) {
325
+ hi = hi + 1 | 0;
326
+ }
327
+ out[0] = hi;
328
+ out[1] = lo;
329
+ }
330
+
331
+ // node_modules/.pnpm/effect@2.0.0-next.59/node_modules/effect/dist/esm/Hash.js
332
+ var randomHashCache = /* @__PURE__ */ globalValue(/* @__PURE__ */ Symbol.for("effect/Hash/randomHashCache"), () => /* @__PURE__ */ new WeakMap());
333
+ var pcgr = /* @__PURE__ */ globalValue(/* @__PURE__ */ Symbol.for("effect/Hash/pcgr"), () => new PCGRandom());
334
+ var symbol = /* @__PURE__ */ Symbol.for("effect/Hash");
335
+ var hash = (self) => {
336
+ switch (typeof self) {
337
+ case "number":
338
+ return number(self);
339
+ case "bigint":
340
+ return string(self.toString(10));
341
+ case "boolean":
342
+ return string(String(self));
343
+ case "symbol":
344
+ return string(String(self));
345
+ case "string":
346
+ return string(self);
347
+ case "undefined":
348
+ return string("undefined");
349
+ case "function":
350
+ case "object": {
351
+ if (self === null) {
352
+ return string("null");
353
+ }
354
+ if (isHash(self)) {
355
+ return self[symbol]();
356
+ } else {
357
+ return random(self);
358
+ }
359
+ }
360
+ default:
361
+ throw new Error(`BUG: unhandled typeof ${typeof self} - please report an issue at https://github.com/Effect-TS/effect/issues`);
362
+ }
363
+ };
364
+ var random = (self) => {
365
+ if (!randomHashCache.has(self)) {
366
+ randomHashCache.set(self, number(pcgr.integer(Number.MAX_SAFE_INTEGER)));
367
+ }
368
+ return randomHashCache.get(self);
369
+ };
370
+ var combine = (b) => (self) => self * 53 ^ b;
371
+ var optimize = (n) => n & 3221225471 | n >>> 1 & 1073741824;
372
+ var isHash = (u) => hasProperty(u, symbol);
373
+ var number = (n) => {
374
+ if (n !== n || n === Infinity) {
375
+ return 0;
376
+ }
377
+ let h = n | 0;
378
+ if (h !== n) {
379
+ h ^= n * 4294967295;
380
+ }
381
+ while (n > 4294967295) {
382
+ h ^= n /= 4294967295;
383
+ }
384
+ return optimize(n);
385
+ };
386
+ var string = (str) => {
387
+ let h = 5381, i = str.length;
388
+ while (i) {
389
+ h = h * 33 ^ str.charCodeAt(--i);
390
+ }
391
+ return optimize(h);
392
+ };
393
+ var structureKeys = (o, keys) => {
394
+ let h = 12289;
395
+ for (let i = 0; i < keys.length; i++) {
396
+ h ^= pipe(string(keys[i]), combine(hash(o[keys[i]])));
397
+ }
398
+ return optimize(h);
399
+ };
400
+ var structure = (o) => structureKeys(o, Object.keys(o));
401
+
402
+ // node_modules/.pnpm/effect@2.0.0-next.59/node_modules/effect/dist/esm/Equal.js
403
+ var symbol2 = /* @__PURE__ */ Symbol.for("effect/Equal");
404
+ function equals() {
405
+ if (arguments.length === 1) {
406
+ return (self) => compareBoth(self, arguments[0]);
407
+ }
408
+ return compareBoth(arguments[0], arguments[1]);
409
+ }
410
+ function compareBoth(self, that) {
411
+ if (self === that) {
412
+ return true;
413
+ }
414
+ const selfType = typeof self;
415
+ if (selfType !== typeof that) {
416
+ return false;
417
+ }
418
+ if ((selfType === "object" || selfType === "function") && self !== null && that !== null) {
419
+ if (isEqual(self) && isEqual(that)) {
420
+ return hash(self) === hash(that) && self[symbol2](that);
421
+ }
422
+ }
423
+ return false;
424
+ }
425
+ var isEqual = (u) => hasProperty(u, symbol2);
426
+
427
+ // node_modules/.pnpm/effect@2.0.0-next.59/node_modules/effect/dist/esm/Inspectable.js
428
+ var NodeInspectSymbol = /* @__PURE__ */ Symbol.for("nodejs.util.inspect.custom");
429
+ var toJSON = (x) => {
430
+ if (hasProperty(x, "toJSON") && isFunction2(x["toJSON"]) && x["toJSON"].length === 0) {
431
+ return x.toJSON();
432
+ } else if (Array.isArray(x)) {
433
+ return x.map(toJSON);
434
+ }
435
+ return x;
436
+ };
437
+ var format = (x) => JSON.stringify(x, null, 2);
438
+
439
+ // node_modules/.pnpm/effect@2.0.0-next.59/node_modules/effect/dist/esm/Pipeable.js
440
+ var pipeArguments = (self, args) => {
441
+ switch (args.length) {
442
+ case 1:
443
+ return args[0](self);
444
+ case 2:
445
+ return args[1](args[0](self));
446
+ case 3:
447
+ return args[2](args[1](args[0](self)));
448
+ case 4:
449
+ return args[3](args[2](args[1](args[0](self))));
450
+ case 5:
451
+ return args[4](args[3](args[2](args[1](args[0](self)))));
452
+ case 6:
453
+ return args[5](args[4](args[3](args[2](args[1](args[0](self))))));
454
+ case 7:
455
+ return args[6](args[5](args[4](args[3](args[2](args[1](args[0](self)))))));
456
+ case 8:
457
+ return args[7](args[6](args[5](args[4](args[3](args[2](args[1](args[0](self))))))));
458
+ case 9:
459
+ return args[8](args[7](args[6](args[5](args[4](args[3](args[2](args[1](args[0](self)))))))));
460
+ default: {
461
+ let ret = self;
462
+ for (let i = 0, len = args.length; i < len; i++) {
463
+ ret = args[i](ret);
464
+ }
465
+ return ret;
466
+ }
467
+ }
468
+ };
469
+
470
+ // node_modules/.pnpm/effect@2.0.0-next.59/node_modules/effect/dist/esm/internal/opCodes/effect.js
471
+ var OP_COMMIT = "Commit";
472
+
473
+ // node_modules/.pnpm/effect@2.0.0-next.59/node_modules/effect/dist/esm/internal/effectable.js
474
+ var EffectTypeId = /* @__PURE__ */ Symbol.for("effect/Effect");
475
+ var StreamTypeId = /* @__PURE__ */ Symbol.for("effect/Stream");
476
+ var SinkTypeId = /* @__PURE__ */ Symbol.for("effect/Sink");
477
+ var ChannelTypeId = /* @__PURE__ */ Symbol.for("effect/Channel");
478
+ var effectVariance = {
479
+ /* c8 ignore next */
480
+ _R: (_) => _,
481
+ /* c8 ignore next */
482
+ _E: (_) => _,
483
+ /* c8 ignore next */
484
+ _A: (_) => _,
485
+ _V: moduleVersion
486
+ };
487
+ var sinkVariance = {
488
+ /* c8 ignore next */
489
+ _R: (_) => _,
490
+ /* c8 ignore next */
491
+ _E: (_) => _,
492
+ /* c8 ignore next */
493
+ _In: (_) => _,
494
+ /* c8 ignore next */
495
+ _L: (_) => _,
496
+ /* c8 ignore next */
497
+ _Z: (_) => _
498
+ };
499
+ var channelVariance = {
500
+ /* c8 ignore next */
501
+ _Env: (_) => _,
502
+ /* c8 ignore next */
503
+ _InErr: (_) => _,
504
+ /* c8 ignore next */
505
+ _InElem: (_) => _,
506
+ /* c8 ignore next */
507
+ _InDone: (_) => _,
508
+ /* c8 ignore next */
509
+ _OutErr: (_) => _,
510
+ /* c8 ignore next */
511
+ _OutElem: (_) => _,
512
+ /* c8 ignore next */
513
+ _OutDone: (_) => _
514
+ };
515
+ var EffectPrototype = {
516
+ [EffectTypeId]: effectVariance,
517
+ [StreamTypeId]: effectVariance,
518
+ [SinkTypeId]: sinkVariance,
519
+ [ChannelTypeId]: channelVariance,
520
+ [symbol2](that) {
521
+ return this === that;
522
+ },
523
+ [symbol]() {
524
+ return random(this);
525
+ },
526
+ pipe() {
527
+ return pipeArguments(this, arguments);
528
+ }
529
+ };
530
+ var StructuralPrototype = {
531
+ [symbol]() {
532
+ return structure(this);
533
+ },
534
+ [symbol2](that) {
535
+ const selfKeys = Object.keys(this);
536
+ const thatKeys = Object.keys(that);
537
+ if (selfKeys.length !== thatKeys.length) {
538
+ return false;
539
+ }
540
+ for (const key of selfKeys) {
541
+ if (!(key in that && equals(this[key], that[key]))) {
542
+ return false;
543
+ }
544
+ }
545
+ return true;
546
+ }
547
+ };
548
+ var CommitPrototype = {
549
+ ...EffectPrototype,
550
+ _op: OP_COMMIT
551
+ };
552
+ var StructuralCommitPrototype = {
553
+ ...CommitPrototype,
554
+ ...StructuralPrototype
555
+ };
556
+
557
+ // node_modules/.pnpm/effect@2.0.0-next.59/node_modules/effect/dist/esm/internal/option.js
558
+ var TypeId = /* @__PURE__ */ Symbol.for("effect/Option");
559
+ var CommonProto = {
560
+ ...EffectPrototype,
561
+ [TypeId]: {
562
+ _A: (_) => _
563
+ },
564
+ [NodeInspectSymbol]() {
565
+ return this.toJSON();
566
+ },
567
+ toString() {
568
+ return format(this.toJSON());
569
+ }
570
+ };
571
+ var SomeProto = /* @__PURE__ */ Object.assign(/* @__PURE__ */ Object.create(CommonProto), {
572
+ _tag: "Some",
573
+ _op: "Some",
574
+ [symbol2](that) {
575
+ return isOption(that) && isSome(that) && equals(that.value, this.value);
576
+ },
577
+ [symbol]() {
578
+ return combine(hash(this._tag))(hash(this.value));
579
+ },
580
+ toJSON() {
581
+ return {
582
+ _id: "Option",
583
+ _tag: this._tag,
584
+ value: toJSON(this.value)
585
+ };
586
+ }
587
+ });
588
+ var NoneProto = /* @__PURE__ */ Object.assign(/* @__PURE__ */ Object.create(CommonProto), {
589
+ _tag: "None",
590
+ _op: "None",
591
+ [symbol2](that) {
592
+ return isOption(that) && isNone(that);
593
+ },
594
+ [symbol]() {
595
+ return combine(hash(this._tag));
596
+ },
597
+ toJSON() {
598
+ return {
599
+ _id: "Option",
600
+ _tag: this._tag
601
+ };
602
+ }
603
+ });
604
+ var isOption = (input) => hasProperty(input, TypeId);
605
+ var isNone = (fa) => fa._tag === "None";
606
+ var isSome = (fa) => fa._tag === "Some";
607
+ var none = /* @__PURE__ */ Object.create(NoneProto);
608
+ var some = (value) => {
609
+ const a = Object.create(SomeProto);
610
+ a.value = value;
611
+ return a;
612
+ };
613
+
614
+ // node_modules/.pnpm/effect@2.0.0-next.59/node_modules/effect/dist/esm/Option.js
615
+ var none2 = () => none;
616
+ var some2 = some;
617
+ var isNone2 = isNone;
618
+ var isSome2 = isSome;
619
+ var getOrElse = /* @__PURE__ */ dual(2, (self, onNone) => isNone2(self) ? onNone() : self.value);
620
+ var orElse = /* @__PURE__ */ dual(2, (self, that) => isNone2(self) ? that() : self);
621
+ var fromNullable = (nullableValue) => nullableValue == null ? none2() : some2(nullableValue);
622
+ var map = /* @__PURE__ */ dual(2, (self, f) => isNone2(self) ? none2() : some2(f(self.value)));
623
+ var flatMap = /* @__PURE__ */ dual(2, (self, f) => isNone2(self) ? none2() : f(self.value));
624
+
625
+ // node_modules/.pnpm/effect@2.0.0-next.59/node_modules/effect/dist/esm/ReadonlyArray.js
626
+ var fromIterable = (collection) => Array.isArray(collection) ? collection : Array.from(collection);
627
+ var append = /* @__PURE__ */ dual(2, (self, last) => [...self, last]);
628
+ var appendAll = /* @__PURE__ */ dual(2, (self, that) => fromIterable(self).concat(fromIterable(that)));
629
+ var isOutOfBound = (i, as) => i < 0 || i >= as.length;
630
+ var get = /* @__PURE__ */ dual(2, (self, index) => {
631
+ const i = Math.floor(index);
632
+ return isOutOfBound(i, self) ? none2() : some2(self[i]);
633
+ });
634
+ var head = /* @__PURE__ */ get(0);
635
+ var empty = () => [];
636
+ var map2 = /* @__PURE__ */ dual(2, (self, f) => self.map(f));
637
+ var filter = /* @__PURE__ */ dual(2, (self, predicate) => {
638
+ const as = fromIterable(self);
639
+ const out = [];
640
+ for (let i = 0; i < as.length; i++) {
641
+ if (predicate(as[i], i)) {
642
+ out.push(as[i]);
643
+ }
644
+ }
645
+ return out;
646
+ });
647
+
648
+ // src/definition.ts
649
+ function createRefactor(definition) {
650
+ return definition;
651
+ }
652
+
653
+ // src/utils/AST.ts
654
+ var NoSuchSourceFile = class {
655
+ constructor(fileName) {
656
+ this.fileName = fileName;
657
+ }
658
+ _tag = "NoSuchSourceFile";
659
+ };
660
+ function getSourceFile(program) {
661
+ return (fileName) => {
662
+ const sourceFile = program.getSourceFile(fileName);
663
+ if (!sourceFile) {
664
+ throw new NoSuchSourceFile(fileName);
665
+ }
666
+ return sourceFile;
667
+ };
668
+ }
669
+ function getNodesContainingRange(ts) {
670
+ return (sourceFile, textRange) => {
671
+ const precedingToken = ts.findPrecedingToken(textRange.pos, sourceFile);
672
+ if (!precedingToken)
673
+ return empty();
674
+ let result = empty();
675
+ let parent = precedingToken;
676
+ while (parent) {
677
+ result = pipe(result, append(parent));
678
+ parent = parent.parent;
679
+ }
680
+ return result;
681
+ };
682
+ }
683
+ function toTextRange(positionOrRange) {
684
+ return typeof positionOrRange === "number" ? { end: positionOrRange, pos: positionOrRange } : positionOrRange;
685
+ }
686
+ function isNodeInRange(textRange) {
687
+ return (node) => node.pos <= textRange.pos && node.end >= textRange.end;
688
+ }
689
+ function findModuleNamedBindings(ts) {
690
+ return (sourceFile, moduleName) => fromNullable(ts.forEachChild(sourceFile, (node) => {
691
+ if (!ts.isImportDeclaration(node))
692
+ return;
693
+ const moduleSpecifier = node.moduleSpecifier;
694
+ if (!ts.isStringLiteral(moduleSpecifier))
695
+ return;
696
+ if (moduleSpecifier.text !== moduleName)
697
+ return;
698
+ const importClause = node.importClause;
699
+ if (!importClause)
700
+ return;
701
+ const namedBindings = importClause.namedBindings;
702
+ if (!namedBindings)
703
+ return;
704
+ return namedBindings;
705
+ }));
706
+ }
707
+ function findModuleNamespaceImportIdentifierName(ts) {
708
+ return (sourceFile, moduleName) => pipe(
709
+ findModuleNamedBindings(ts)(sourceFile, moduleName),
710
+ map(
711
+ (namedBindings) => {
712
+ if (!ts.isNamespaceImport(namedBindings))
713
+ return;
714
+ return namedBindings.name.text;
715
+ }
716
+ ),
717
+ flatMap(fromNullable)
718
+ );
719
+ }
720
+ function findModuleNamedImportIdentifierName(ts) {
721
+ return (sourceFile, moduleName, namedImport) => pipe(
722
+ findModuleNamedBindings(ts)(sourceFile, moduleName),
723
+ map((namedBindings) => {
724
+ if (!ts.isNamedImports(namedBindings))
725
+ return;
726
+ for (const importSpecifier of namedBindings.elements) {
727
+ if (importSpecifier.propertyName?.escapedText === namedImport) {
728
+ return importSpecifier.name?.escapedText || importSpecifier.propertyName?.escapedText;
729
+ }
730
+ }
731
+ }),
732
+ flatMap(fromNullable)
733
+ );
734
+ }
735
+ function findModuleImportIdentifierNameViaTypeChecker(ts, typeChecker) {
736
+ return (sourceFile, importName) => {
737
+ return fromNullable(ts.forEachChild(sourceFile, (node) => {
738
+ if (!ts.isImportDeclaration(node))
739
+ return;
740
+ if (!node.importClause)
741
+ return;
742
+ const namedBindings = node.importClause.namedBindings;
743
+ if (!namedBindings)
744
+ return;
745
+ if (ts.isNamespaceImport(namedBindings)) {
746
+ const symbol3 = typeChecker.getTypeAtLocation(namedBindings).getSymbol();
747
+ if (!symbol3 || !symbol3.exports)
748
+ return;
749
+ if (!symbol3.exports.has(importName))
750
+ return;
751
+ return namedBindings.name.escapedText;
752
+ }
753
+ if (ts.isNamedImports(namedBindings)) {
754
+ for (const importSpecifier of namedBindings.elements) {
755
+ const symbol3 = typeChecker.getTypeAtLocation(importSpecifier).getSymbol();
756
+ if (!symbol3 || !symbol3.exports)
757
+ return;
758
+ if (!symbol3.exports.has(importName))
759
+ return;
760
+ return importSpecifier.name?.escapedText || importSpecifier.propertyName?.escapedText;
761
+ }
762
+ }
763
+ }));
764
+ };
765
+ }
766
+ function transformAsyncAwaitToEffectGen(ts, preferredEffectGenAdapterName) {
767
+ return (node, effectName, onAwait) => {
768
+ function visitor(_) {
769
+ if (ts.isAwaitExpression(_)) {
770
+ const expression = ts.visitEachChild(_.expression, visitor, ts.nullTransformationContext);
771
+ return ts.factory.createYieldExpression(
772
+ ts.factory.createToken(ts.SyntaxKind.AsteriskToken),
773
+ ts.factory.createCallExpression(
774
+ ts.factory.createIdentifier(preferredEffectGenAdapterName),
775
+ void 0,
776
+ [
777
+ onAwait(expression)
778
+ ]
779
+ )
780
+ );
781
+ }
782
+ return ts.visitEachChild(_, visitor, ts.nullTransformationContext);
783
+ }
784
+ const generatorBody = visitor(node.body);
785
+ const generator = ts.factory.createFunctionExpression(
786
+ void 0,
787
+ ts.factory.createToken(ts.SyntaxKind.AsteriskToken),
788
+ void 0,
789
+ [],
790
+ [ts.factory.createParameterDeclaration(void 0, void 0, preferredEffectGenAdapterName)],
791
+ void 0,
792
+ generatorBody
793
+ // NOTE(mattia): intended, to use same routine for both ConciseBody and Body
794
+ );
795
+ const effectGenCallExp = ts.factory.createCallExpression(
796
+ ts.factory.createPropertyAccessExpression(
797
+ ts.factory.createIdentifier(effectName),
798
+ "gen"
799
+ ),
800
+ void 0,
801
+ [generator]
802
+ );
803
+ let currentFlags = ts.getCombinedModifierFlags(node);
804
+ currentFlags &= ~ts.ModifierFlags.Async;
805
+ const newModifiers = ts.factory.createModifiersFromModifierFlags(currentFlags);
806
+ if (ts.isArrowFunction(node)) {
807
+ return ts.factory.createArrowFunction(
808
+ newModifiers,
809
+ node.typeParameters,
810
+ node.parameters,
811
+ void 0,
812
+ node.equalsGreaterThanToken,
813
+ effectGenCallExp
814
+ );
815
+ }
816
+ const newBody = ts.factory.createBlock([
817
+ ts.factory.createReturnStatement(effectGenCallExp)
818
+ ]);
819
+ if (ts.isFunctionDeclaration(node)) {
820
+ return ts.factory.createFunctionDeclaration(
821
+ newModifiers,
822
+ node.asteriskToken,
823
+ node.name,
824
+ node.typeParameters,
825
+ node.parameters,
826
+ void 0,
827
+ newBody
828
+ );
829
+ }
830
+ return ts.factory.createFunctionExpression(
831
+ newModifiers,
832
+ node.asteriskToken,
833
+ node.name,
834
+ node.typeParameters,
835
+ node.parameters,
836
+ void 0,
837
+ newBody
838
+ );
839
+ };
840
+ }
841
+ function addReturnTypeAnnotation(ts, changes) {
842
+ return (sourceFile, declaration, typeNode) => {
843
+ const closeParen = ts.findChildOfKind(declaration, ts.SyntaxKind.CloseParenToken, sourceFile);
844
+ const needParens = ts.isArrowFunction(declaration) && closeParen === void 0;
845
+ const endNode = needParens ? declaration.parameters[0] : closeParen;
846
+ if (endNode) {
847
+ if (needParens) {
848
+ changes.insertNodeBefore(
849
+ sourceFile,
850
+ endNode,
851
+ ts.factory.createToken(ts.SyntaxKind.OpenParenToken)
852
+ );
853
+ changes.insertNodeAfter(
854
+ sourceFile,
855
+ endNode,
856
+ ts.factory.createToken(ts.SyntaxKind.CloseParenToken)
857
+ );
858
+ }
859
+ changes.insertNodeAt(sourceFile, endNode.end, typeNode, { prefix: ": " });
860
+ }
861
+ };
862
+ }
863
+ function removeReturnTypeAnnotation(ts, changes) {
864
+ return (sourceFile, declaration) => {
865
+ const closeParen = ts.findChildOfKind(declaration, ts.SyntaxKind.CloseParenToken, sourceFile);
866
+ const needParens = ts.isArrowFunction(declaration) && closeParen === void 0;
867
+ const endNode = needParens ? declaration.parameters[0] : closeParen;
868
+ if (endNode && declaration.type) {
869
+ changes.deleteRange(sourceFile, { pos: endNode.end, end: declaration.type.end });
870
+ }
871
+ };
872
+ }
873
+ function getEffectModuleIdentifier(ts, typeChecker) {
874
+ return (sourceFile) => pipe(
875
+ findModuleNamespaceImportIdentifierName(ts)(sourceFile, "effect/Effect"),
876
+ orElse(() => findModuleNamedImportIdentifierName(ts)(sourceFile, "effect", "Effect")),
877
+ orElse(
878
+ () => findModuleImportIdentifierNameViaTypeChecker(ts, typeChecker)(sourceFile, "Effect")
879
+ ),
880
+ getOrElse(
881
+ () => "Effect"
882
+ )
883
+ );
884
+ }
885
+ function simplifyTypeNode(ts) {
886
+ function collectCallable(typeNode) {
887
+ if (ts.isParenthesizedTypeNode(typeNode))
888
+ return collectCallable(typeNode.type);
889
+ if (ts.isFunctionTypeNode(typeNode)) {
890
+ return some2([
891
+ ts.factory.createCallSignature(typeNode.typeParameters, typeNode.parameters, typeNode.type)
892
+ ]);
893
+ }
894
+ if (ts.isTypeLiteralNode(typeNode)) {
895
+ const allCallSignatures = typeNode.members.every(ts.isCallSignatureDeclaration);
896
+ if (allCallSignatures) {
897
+ return some2(typeNode.members);
898
+ }
899
+ }
900
+ if (ts.isIntersectionTypeNode(typeNode)) {
901
+ const members = typeNode.types.map(collectCallable);
902
+ if (members.every(isSome2)) {
903
+ return some2(members.map((_) => isSome2(_) ? _.value : []).flat());
904
+ }
905
+ }
906
+ return none2();
907
+ }
908
+ return (typeNode) => {
909
+ const callSignatures = collectCallable(typeNode);
910
+ if (isSome2(callSignatures) && callSignatures.value.length > 1) {
911
+ return ts.factory.createTypeLiteralNode(callSignatures.value);
912
+ }
913
+ return typeNode;
914
+ };
915
+ }
916
+ function isPipeCall(ts) {
917
+ return (node) => {
918
+ if (!ts.isCallExpression(node))
919
+ return false;
920
+ const expression = node.expression;
921
+ if (!ts.isIdentifier(expression))
922
+ return false;
923
+ if (expression.text !== "pipe")
924
+ return false;
925
+ return true;
926
+ };
927
+ }
928
+ function asDataFirstExpression(ts, checker) {
929
+ return (node, self) => {
930
+ if (!ts.isCallExpression(node))
931
+ return none2();
932
+ const signature = checker.getResolvedSignature(node);
933
+ if (!signature)
934
+ return none2();
935
+ const callSignatures = checker.getTypeAtLocation(node.expression).getCallSignatures();
936
+ for (let i = 0; i < callSignatures.length; i++) {
937
+ const callSignature = callSignatures[i];
938
+ if (callSignature.parameters.length === node.arguments.length + 1) {
939
+ return some2(
940
+ ts.factory.createCallExpression(
941
+ node.expression,
942
+ [],
943
+ [self].concat(node.arguments)
944
+ )
945
+ );
946
+ }
947
+ }
948
+ return none2();
949
+ };
950
+ }
951
+
952
+ // src/refactors/asyncAwaitToGen.ts
953
+ var asyncAwaitToGen = createRefactor({
954
+ name: "effect/asyncAwaitToGen",
955
+ description: "Convert to Effect.gen",
956
+ apply: (ts, program, options) => (sourceFile, textRange) => pipe(
957
+ getNodesContainingRange(ts)(sourceFile, textRange),
958
+ filter(ts.isFunctionDeclaration),
959
+ filter((node) => !!node.body),
960
+ filter((node) => !!(ts.getCombinedModifierFlags(node) & ts.ModifierFlags.Async)),
961
+ head,
962
+ map((node) => ({
963
+ kind: "refactor.rewrite.effect.asyncAwaitToGen",
964
+ description: "Rewrite to Effect.gen",
965
+ apply: (changeTracker) => {
966
+ const effectName = getEffectModuleIdentifier(ts, program.getTypeChecker())(sourceFile);
967
+ const newDeclaration = transformAsyncAwaitToEffectGen(
968
+ ts,
969
+ options.preferredEffectGenAdapterName
970
+ )(
971
+ node,
972
+ effectName,
973
+ (expression) => ts.factory.createCallExpression(
974
+ ts.factory.createPropertyAccessExpression(
975
+ ts.factory.createIdentifier(effectName),
976
+ "promise"
977
+ ),
978
+ void 0,
979
+ [
980
+ ts.factory.createArrowFunction(
981
+ void 0,
982
+ void 0,
983
+ [],
984
+ void 0,
985
+ void 0,
986
+ expression
987
+ )
988
+ ]
989
+ )
990
+ );
991
+ changeTracker.replaceNode(sourceFile, node, newDeclaration);
992
+ }
993
+ }))
994
+ )
995
+ });
996
+
997
+ // src/refactors/asyncAwaitToGenTryPromise.ts
998
+ var asyncAwaitToGenTryPromise = createRefactor({
999
+ name: "effect/asyncAwaitToGenTryPromise",
1000
+ description: "Convert to Effect.gen with failures",
1001
+ apply: (ts, program, options) => (sourceFile, textRange) => pipe(
1002
+ getNodesContainingRange(ts)(sourceFile, textRange),
1003
+ filter(ts.isFunctionDeclaration),
1004
+ filter((node) => !!node.body),
1005
+ filter((node) => !!(ts.getCombinedModifierFlags(node) & ts.ModifierFlags.Async)),
1006
+ head,
1007
+ map((node) => ({
1008
+ kind: "refactor.rewrite.effect.asyncAwaitToGenTryPromise",
1009
+ description: "Rewrite to Effect.gen with failures",
1010
+ apply: (changeTracker) => {
1011
+ const effectName = getEffectModuleIdentifier(ts, program.getTypeChecker())(sourceFile);
1012
+ let errorCount = 0;
1013
+ function createErrorADT() {
1014
+ errorCount++;
1015
+ return ts.factory.createObjectLiteralExpression([
1016
+ ts.factory.createPropertyAssignment(
1017
+ "_tag",
1018
+ ts.factory.createAsExpression(
1019
+ ts.factory.createStringLiteral("Error" + errorCount),
1020
+ ts.factory.createTypeReferenceNode("const")
1021
+ )
1022
+ ),
1023
+ ts.factory.createShorthandPropertyAssignment("error")
1024
+ ]);
1025
+ }
1026
+ const newDeclaration = transformAsyncAwaitToEffectGen(
1027
+ ts,
1028
+ options.preferredEffectGenAdapterName
1029
+ )(
1030
+ node,
1031
+ effectName,
1032
+ (expression) => ts.factory.createCallExpression(
1033
+ ts.factory.createPropertyAccessExpression(
1034
+ ts.factory.createIdentifier(effectName),
1035
+ "tryPromise"
1036
+ ),
1037
+ void 0,
1038
+ [
1039
+ ts.factory.createObjectLiteralExpression([
1040
+ ts.factory.createPropertyAssignment(
1041
+ ts.factory.createIdentifier("try"),
1042
+ ts.factory.createArrowFunction(
1043
+ void 0,
1044
+ void 0,
1045
+ [],
1046
+ void 0,
1047
+ void 0,
1048
+ expression
1049
+ )
1050
+ ),
1051
+ ts.factory.createPropertyAssignment(
1052
+ ts.factory.createIdentifier("catch"),
1053
+ ts.factory.createArrowFunction(
1054
+ void 0,
1055
+ void 0,
1056
+ [ts.factory.createParameterDeclaration(void 0, void 0, "error")],
1057
+ void 0,
1058
+ void 0,
1059
+ createErrorADT()
1060
+ )
1061
+ )
1062
+ ])
1063
+ ]
1064
+ )
1065
+ );
1066
+ changeTracker.replaceNode(sourceFile, node, newDeclaration);
1067
+ }
1068
+ }))
1069
+ )
1070
+ });
1071
+
1072
+ // src/refactors/functionToArrow.ts
1073
+ var functionToArrow = createRefactor({
1074
+ name: "effect/functionToArrow",
1075
+ description: "Convert to arrow",
1076
+ apply: (ts) => (sourceFile, textRange) => pipe(
1077
+ pipe(
1078
+ getNodesContainingRange(ts)(sourceFile, textRange),
1079
+ filter(ts.isFunctionDeclaration)
1080
+ ),
1081
+ appendAll(
1082
+ pipe(
1083
+ getNodesContainingRange(ts)(sourceFile, textRange),
1084
+ filter(ts.isMethodDeclaration)
1085
+ )
1086
+ ),
1087
+ filter((node) => !!node.body),
1088
+ filter((node) => !!node.name && isNodeInRange(textRange)(node.name)),
1089
+ head,
1090
+ map(
1091
+ (node) => ({
1092
+ kind: "refactor.rewrite.effect.functionToArrow",
1093
+ description: "Convert to arrow",
1094
+ apply: (changeTracker) => {
1095
+ const body = node.body;
1096
+ let newBody = ts.factory.createBlock(body.statements);
1097
+ if (body.statements.length === 1) {
1098
+ const statement = body.statements[0];
1099
+ if (statement && ts.isReturnStatement(statement) && statement.expression) {
1100
+ newBody = statement.expression;
1101
+ }
1102
+ }
1103
+ let arrowFlags = ts.getCombinedModifierFlags(node);
1104
+ arrowFlags &= ~ts.ModifierFlags.Export;
1105
+ arrowFlags &= ~ts.ModifierFlags.Default;
1106
+ const arrowModifiers = ts.factory.createModifiersFromModifierFlags(arrowFlags);
1107
+ const arrowFunction = ts.factory.createArrowFunction(
1108
+ arrowModifiers,
1109
+ node.typeParameters,
1110
+ node.parameters,
1111
+ void 0,
1112
+ ts.factory.createToken(ts.SyntaxKind.EqualsGreaterThanToken),
1113
+ newBody
1114
+ );
1115
+ let constFlags = ts.getCombinedModifierFlags(node);
1116
+ constFlags &= ~arrowFlags;
1117
+ const constModifiers = ts.factory.createModifiersFromModifierFlags(constFlags);
1118
+ let newDeclaration = node;
1119
+ if (ts.isMethodDeclaration(node)) {
1120
+ newDeclaration = ts.factory.createPropertyDeclaration(
1121
+ constModifiers,
1122
+ node.name,
1123
+ void 0,
1124
+ void 0,
1125
+ arrowFunction
1126
+ );
1127
+ } else if (ts.isFunctionDeclaration(node)) {
1128
+ newDeclaration = ts.factory.createVariableStatement(
1129
+ constModifiers,
1130
+ ts.factory.createVariableDeclarationList(
1131
+ [
1132
+ ts.factory.createVariableDeclaration(
1133
+ node.name,
1134
+ void 0,
1135
+ void 0,
1136
+ arrowFunction
1137
+ )
1138
+ ],
1139
+ ts.NodeFlags.Const
1140
+ )
1141
+ );
1142
+ }
1143
+ changeTracker.replaceNode(sourceFile, node, newDeclaration);
1144
+ }
1145
+ })
1146
+ )
1147
+ )
1148
+ });
1149
+
1150
+ // src/refactors/pipeableToDatafirst.ts
1151
+ var pipeableToDatafirst = createRefactor({
1152
+ name: "effect/pipeableToDatafirst",
1153
+ description: "Rewrite to datafirst",
1154
+ apply: (ts, program) => (sourceFile, textRange) => pipe(
1155
+ getNodesContainingRange(ts)(sourceFile, textRange),
1156
+ filter(isPipeCall(ts)),
1157
+ filter((node) => isNodeInRange(textRange)(node.expression)),
1158
+ filter(
1159
+ (node) => node.arguments.length > 0
1160
+ ),
1161
+ map2((node) => {
1162
+ let newNode = node.arguments[0];
1163
+ let didSomething = false;
1164
+ for (let i = 1; i < node.arguments.length; i++) {
1165
+ const arg = node.arguments[i];
1166
+ const a = asDataFirstExpression(ts, program.getTypeChecker())(arg, newNode);
1167
+ if (isSome2(a)) {
1168
+ newNode = a.value;
1169
+ didSomething = true;
1170
+ } else {
1171
+ if (isPipeCall(ts)(newNode)) {
1172
+ newNode = ts.factory.createCallExpression(
1173
+ ts.factory.createIdentifier("pipe"),
1174
+ [],
1175
+ newNode.arguments.concat([arg])
1176
+ );
1177
+ } else {
1178
+ newNode = ts.factory.createCallExpression(ts.factory.createIdentifier("pipe"), [], [
1179
+ newNode,
1180
+ arg
1181
+ ]);
1182
+ }
1183
+ }
1184
+ }
1185
+ return didSomething ? some2([node, newNode]) : none2();
1186
+ }),
1187
+ filter(isSome2),
1188
+ map2((_) => _.value),
1189
+ head,
1190
+ map(([node, newNode]) => ({
1191
+ kind: "refactor.rewrite.effect.pipeableToDatafirst",
1192
+ description: "Rewrite to datafirst",
1193
+ apply: (changeTracker) => {
1194
+ changeTracker.replaceNode(sourceFile, node, newNode);
1195
+ }
1196
+ }))
1197
+ )
1198
+ });
1199
+
1200
+ // src/refactors/toggleLazyConst.ts
1201
+ var toggleLazyConst = createRefactor({
1202
+ name: "effect/toggleLazyConst",
1203
+ description: "Toggle type annotation",
1204
+ apply: (ts) => (sourceFile, textRange) => pipe(
1205
+ getNodesContainingRange(ts)(sourceFile, textRange),
1206
+ filter(ts.isVariableDeclaration),
1207
+ filter((node) => isNodeInRange(textRange)(node.name)),
1208
+ filter(
1209
+ (node) => !!node.initializer && !(ts.isArrowFunction(node.initializer) && ts.isBlock(node.initializer.body))
1210
+ ),
1211
+ head,
1212
+ map(
1213
+ (node) => ({
1214
+ kind: "refactor.rewrite.effect.toggleLazyConst",
1215
+ description: "Toggle lazy const",
1216
+ apply: (changeTracker) => {
1217
+ const initializer = node.initializer;
1218
+ if (ts.isArrowFunction(initializer) && initializer.parameters.length === 0) {
1219
+ changeTracker.deleteRange(sourceFile, {
1220
+ pos: initializer.body.end,
1221
+ end: initializer.end
1222
+ });
1223
+ changeTracker.deleteRange(sourceFile, {
1224
+ pos: initializer.pos,
1225
+ end: initializer.body.pos
1226
+ });
1227
+ return;
1228
+ }
1229
+ changeTracker.insertText(sourceFile, initializer.pos, " () =>");
1230
+ }
1231
+ })
1232
+ )
1233
+ )
1234
+ });
1235
+
1236
+ // src/refactors/toggleReturnTypeAnnotation.ts
1237
+ var toggleReturnTypeAnnotation = createRefactor({
1238
+ name: "effect/toggleReturnTypeAnnotation",
1239
+ description: "Toggle return type annotation",
1240
+ apply: (ts, program) => (sourceFile, textRange) => {
1241
+ function isConvertibleDeclaration(node) {
1242
+ switch (node.kind) {
1243
+ case ts.SyntaxKind.FunctionDeclaration:
1244
+ case ts.SyntaxKind.FunctionExpression:
1245
+ case ts.SyntaxKind.ArrowFunction:
1246
+ case ts.SyntaxKind.MethodDeclaration:
1247
+ return true;
1248
+ default:
1249
+ return false;
1250
+ }
1251
+ }
1252
+ return pipe(
1253
+ getNodesContainingRange(ts)(sourceFile, textRange),
1254
+ filter(isConvertibleDeclaration),
1255
+ head,
1256
+ map(
1257
+ (node) => ({
1258
+ kind: "refactor.rewrite.effect.toggleReturnTypeAnnotation",
1259
+ description: "Toggle return type annotation",
1260
+ apply: (changeTracker) => {
1261
+ const typeChecker = program.getTypeChecker();
1262
+ if (node.type) {
1263
+ removeReturnTypeAnnotation(ts, changeTracker)(sourceFile, node);
1264
+ return;
1265
+ }
1266
+ const callableType = typeChecker.getTypeAtLocation(node);
1267
+ const returnTypes = callableType.getCallSignatures().map((s) => s.getReturnType());
1268
+ const returnTypeNodes = returnTypes.map(
1269
+ (type) => typeChecker.typeToTypeNode(type, node, ts.NodeBuilderFlags.NoTruncation)
1270
+ ).filter((node2) => !!node2);
1271
+ if (returnTypeNodes.length === 0)
1272
+ return;
1273
+ const returnTypeNode = returnTypeNodes.length === 1 ? returnTypeNodes[0] : ts.factory.createUnionTypeNode(returnTypeNodes);
1274
+ addReturnTypeAnnotation(ts, changeTracker)(
1275
+ sourceFile,
1276
+ node,
1277
+ simplifyTypeNode(ts)(returnTypeNode)
1278
+ );
1279
+ }
1280
+ })
1281
+ )
1282
+ );
1283
+ }
1284
+ });
1285
+
1286
+ // src/refactors/toggleTypeAnnotation.ts
1287
+ var toggleTypeAnnotation = createRefactor({
1288
+ name: "effect/toggleTypeAnnotation",
1289
+ description: "Toggle type annotation",
1290
+ apply: (ts, program) => (sourceFile, textRange) => pipe(
1291
+ getNodesContainingRange(ts)(sourceFile, textRange),
1292
+ filter(ts.isVariableDeclaration),
1293
+ filter((node) => isNodeInRange(textRange)(node.name)),
1294
+ filter((node) => !!node.initializer),
1295
+ head,
1296
+ map(
1297
+ (node) => ({
1298
+ kind: "refactor.rewrite.effect.toggleTypeAnnotation",
1299
+ description: "Toggle type annotation",
1300
+ apply: (changeTracker) => {
1301
+ const typeChecker = program.getTypeChecker();
1302
+ if (node.type) {
1303
+ changeTracker.deleteRange(sourceFile, { pos: node.name.end, end: node.type.end });
1304
+ return;
1305
+ }
1306
+ const initializer = node.initializer;
1307
+ const initializerType = typeChecker.getTypeAtLocation(initializer);
1308
+ const initializerTypeNode = typeChecker.typeToTypeNode(
1309
+ initializerType,
1310
+ node,
1311
+ ts.NodeBuilderFlags.NoTruncation
1312
+ );
1313
+ if (initializerTypeNode) {
1314
+ changeTracker.insertNodeAt(
1315
+ sourceFile,
1316
+ node.name.end,
1317
+ simplifyTypeNode(ts)(initializerTypeNode),
1318
+ {
1319
+ prefix: ": "
1320
+ }
1321
+ );
1322
+ }
1323
+ }
1324
+ })
1325
+ )
1326
+ )
1327
+ });
1328
+
1329
+ // src/refactors/wrapWithPipe.ts
1330
+ var wrapWithPipe = createRefactor({
1331
+ name: "effect/wrapWithPipe",
1332
+ description: "Wrap with pipe",
1333
+ apply: () => (sourceFile, textRange) => {
1334
+ if (textRange.end - textRange.pos === 0)
1335
+ return none2();
1336
+ return some2({
1337
+ kind: "refactor.rewrite.effect.wrapWithPipe",
1338
+ description: `Wrap with pipe(...)`,
1339
+ apply: (changeTracker) => {
1340
+ changeTracker.insertText(sourceFile, textRange.pos, "pipe(");
1341
+ changeTracker.insertText(sourceFile, textRange.end, ")");
1342
+ }
1343
+ });
1344
+ }
1345
+ });
1346
+
1347
+ // src/refactors.ts
1348
+ var refactors = {
1349
+ asyncAwaitToGen,
1350
+ asyncAwaitToGenTryPromise,
1351
+ functionToArrow,
1352
+ pipeableToDatafirst,
1353
+ toggleLazyConst,
1354
+ toggleReturnTypeAnnotation,
1355
+ toggleTypeAnnotation,
1356
+ wrapWithPipe
1357
+ };
1358
+
1359
+ // src/index.ts
1360
+ var init = (modules) => {
1361
+ const ts = modules.typescript;
1362
+ function create(info) {
1363
+ const languageService = info.languageService;
1364
+ const pluginOptions = {
1365
+ preferredEffectGenAdapterName: info.config.preferredEffectGenAdapterName ?? "_"
1366
+ };
1367
+ const proxy = /* @__PURE__ */ Object.create(null);
1368
+ for (const k of Object.keys(info.languageService)) {
1369
+ proxy[k] = (...args) => languageService[k].apply(languageService, args);
1370
+ }
1371
+ proxy.getApplicableRefactors = (...args) => {
1372
+ const applicableRefactors = languageService.getApplicableRefactors(...args);
1373
+ const [fileName, positionOrRange] = args;
1374
+ const program = languageService.getProgram();
1375
+ if (program) {
1376
+ const textRange = toTextRange(positionOrRange);
1377
+ const effectRefactors = pipe(
1378
+ getSourceFile(program)(fileName),
1379
+ (sourceFile) => pipe(
1380
+ Object.values(refactors).map(
1381
+ (refactor) => pipe(
1382
+ refactor.apply(modules.typescript, program, pluginOptions)(
1383
+ sourceFile,
1384
+ textRange
1385
+ ),
1386
+ map((_) => ({
1387
+ name: refactor.name,
1388
+ description: refactor.description,
1389
+ actions: [{
1390
+ name: refactor.name,
1391
+ description: _.description,
1392
+ kind: _.kind
1393
+ }]
1394
+ }))
1395
+ )
1396
+ ),
1397
+ (_) => _.reduce(
1398
+ (arr, maybeRefactor) => arr.concat(isSome2(maybeRefactor) ? [maybeRefactor.value] : []),
1399
+ []
1400
+ )
1401
+ )
1402
+ );
1403
+ info.project.projectService.logger.info(
1404
+ "[@effect/language-service] possible refactors are " + JSON.stringify(effectRefactors)
1405
+ );
1406
+ return applicableRefactors.concat(effectRefactors);
1407
+ }
1408
+ return applicableRefactors;
1409
+ };
1410
+ proxy.getEditsForRefactor = (fileName, formatOptions, positionOrRange, refactorName, actionName, preferences, ...args) => {
1411
+ const program = languageService.getProgram();
1412
+ if (program) {
1413
+ for (const refactor of Object.values(refactors)) {
1414
+ if (refactor.name === refactorName) {
1415
+ const sourceFile = getSourceFile(program)(fileName);
1416
+ const textRange = toTextRange(positionOrRange);
1417
+ const possibleRefactor = refactor.apply(modules.typescript, program, pluginOptions)(
1418
+ sourceFile,
1419
+ textRange
1420
+ );
1421
+ if (isNone2(possibleRefactor)) {
1422
+ info.project.projectService.logger.info(
1423
+ "[@effect/language-service] requested refactor " + refactorName + " is not applicable"
1424
+ );
1425
+ return { edits: [] };
1426
+ }
1427
+ const formatContext = ts.formatting.getFormatContext(
1428
+ formatOptions,
1429
+ info.languageServiceHost
1430
+ );
1431
+ const edits = ts.textChanges.ChangeTracker.with(
1432
+ {
1433
+ formatContext,
1434
+ host: info.languageServiceHost,
1435
+ preferences: preferences || {}
1436
+ },
1437
+ (changeTracker) => possibleRefactor.value.apply(changeTracker)
1438
+ );
1439
+ return { edits };
1440
+ }
1441
+ }
1442
+ }
1443
+ return languageService.getEditsForRefactor(
1444
+ fileName,
1445
+ formatOptions,
1446
+ positionOrRange,
1447
+ refactorName,
1448
+ actionName,
1449
+ preferences,
1450
+ ...args
1451
+ );
1452
+ };
1453
+ return proxy;
1454
+ }
1455
+ return { create };
1456
+ };
1457
+ module.exports = init;