@nlozgachev/pipelined 0.31.0 → 0.32.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.
- package/dist/{Task-BDcKwFAj.d.mts → Task-CJZfcOkO.d.mts} +218 -53
- package/dist/{Task-CnF22Q2o.d.ts → Task-CjYKLeTY.d.ts} +218 -53
- package/dist/{chunk-FWYOEWJ2.mjs → chunk-EHQFUWZW.mjs} +57 -4
- package/dist/{chunk-VIC54JR4.mjs → chunk-L3NC44SN.mjs} +122 -21
- package/dist/{chunk-SDGDJ7CU.mjs → chunk-TK5ZCGP2.mjs} +111 -34
- package/dist/core.d.mts +179 -8
- package/dist/core.d.ts +179 -8
- package/dist/core.js +284 -102
- package/dist/core.mjs +10 -2
- package/dist/index.d.mts +2 -2
- package/dist/index.d.ts +2 -2
- package/dist/index.js +340 -105
- package/dist/index.mjs +11 -3
- package/dist/utils.d.mts +81 -1
- package/dist/utils.d.ts +81 -1
- package/dist/utils.js +156 -26
- package/dist/utils.mjs +2 -2
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -22,14 +22,18 @@ var src_exports = {};
|
|
|
22
22
|
__export(src_exports, {
|
|
23
23
|
Arr: () => Arr,
|
|
24
24
|
Brand: () => Brand,
|
|
25
|
+
Combinable: () => Combinable,
|
|
25
26
|
Deferred: () => Deferred,
|
|
26
27
|
Dict: () => Dict,
|
|
28
|
+
Equality: () => Equality,
|
|
29
|
+
Lazy: () => Lazy,
|
|
27
30
|
Lens: () => Lens,
|
|
28
31
|
Logged: () => Logged,
|
|
29
32
|
Maybe: () => Maybe,
|
|
30
33
|
Num: () => Num,
|
|
31
34
|
Op: () => Op,
|
|
32
35
|
Optional: () => Optional,
|
|
36
|
+
Ordering: () => Ordering,
|
|
33
37
|
Predicate: () => Predicate,
|
|
34
38
|
Reader: () => Reader,
|
|
35
39
|
Rec: () => Rec,
|
|
@@ -288,65 +292,6 @@ function uncurry(f) {
|
|
|
288
292
|
var uncurry3 = (f) => (a, b, c) => f(a)(b)(c);
|
|
289
293
|
var uncurry4 = (f) => (a, b, c, d) => f(a)(b)(c)(d);
|
|
290
294
|
|
|
291
|
-
// src/Core/Deferred.ts
|
|
292
|
-
var Deferred;
|
|
293
|
-
((Deferred2) => {
|
|
294
|
-
Deferred2.fromPromise = (p) => (
|
|
295
|
-
// eslint-disable-next-line unicorn/no-thenable -- Deferred is intentionally thenable; it is the mechanism that makes Task awaitable
|
|
296
|
-
{ then: ((f) => p.then(f)) }
|
|
297
|
-
);
|
|
298
|
-
Deferred2.toPromise = (d) => new Promise((resolve) => d.then(resolve));
|
|
299
|
-
})(Deferred || (Deferred = {}));
|
|
300
|
-
|
|
301
|
-
// src/Core/Lens.ts
|
|
302
|
-
var Lens;
|
|
303
|
-
((Lens2) => {
|
|
304
|
-
Lens2.make = (get2, set2) => ({ get: get2, set: set2 });
|
|
305
|
-
Lens2.prop = () => (key) => (0, Lens2.make)(
|
|
306
|
-
(s) => s[key],
|
|
307
|
-
(a) => (s) => ({ ...s, [key]: a })
|
|
308
|
-
);
|
|
309
|
-
Lens2.get = (lens) => (s) => lens.get(s);
|
|
310
|
-
Lens2.set = (lens) => (a) => (s) => lens.set(a)(s);
|
|
311
|
-
Lens2.modify = (lens) => (f) => (s) => lens.set(f(lens.get(s)))(s);
|
|
312
|
-
Lens2.andThen = (inner) => (outer) => (0, Lens2.make)(
|
|
313
|
-
(s) => inner.get(outer.get(s)),
|
|
314
|
-
(b) => (s) => outer.set(inner.set(b)(outer.get(s)))(s)
|
|
315
|
-
);
|
|
316
|
-
Lens2.andThenOptional = (inner) => (outer) => ({
|
|
317
|
-
get: (s) => inner.get(outer.get(s)),
|
|
318
|
-
set: (b) => (s) => outer.set(inner.set(b)(outer.get(s)))(s)
|
|
319
|
-
});
|
|
320
|
-
Lens2.toOptional = (lens) => ({
|
|
321
|
-
get: (s) => ({ kind: "Some", value: lens.get(s) }),
|
|
322
|
-
set: lens.set
|
|
323
|
-
});
|
|
324
|
-
})(Lens || (Lens = {}));
|
|
325
|
-
|
|
326
|
-
// src/Core/Logged.ts
|
|
327
|
-
var Logged;
|
|
328
|
-
((Logged2) => {
|
|
329
|
-
Logged2.make = (value) => ({ value, log: [] });
|
|
330
|
-
Logged2.tell = (entry) => ({ value: void 0, log: [entry] });
|
|
331
|
-
Logged2.map = (f) => (data) => ({
|
|
332
|
-
value: f(data.value),
|
|
333
|
-
log: data.log
|
|
334
|
-
});
|
|
335
|
-
Logged2.chain = (f) => (data) => {
|
|
336
|
-
const next = f(data.value);
|
|
337
|
-
return { value: next.value, log: [...data.log, ...next.log] };
|
|
338
|
-
};
|
|
339
|
-
Logged2.ap = (arg) => (data) => ({
|
|
340
|
-
value: data.value(arg.value),
|
|
341
|
-
log: [...data.log, ...arg.log]
|
|
342
|
-
});
|
|
343
|
-
Logged2.tap = (f) => (data) => {
|
|
344
|
-
f(data.value);
|
|
345
|
-
return data;
|
|
346
|
-
};
|
|
347
|
-
Logged2.run = (data) => [data.value, data.log];
|
|
348
|
-
})(Logged || (Logged = {}));
|
|
349
|
-
|
|
350
295
|
// src/Core/Result.ts
|
|
351
296
|
var Result;
|
|
352
297
|
((Result2) => {
|
|
@@ -410,6 +355,137 @@ var Maybe;
|
|
|
410
355
|
Maybe2.ap = (arg) => (data) => (0, Maybe2.isSome)(data) && (0, Maybe2.isSome)(arg) ? (0, Maybe2.some)(data.value(arg.value)) : (0, Maybe2.none)();
|
|
411
356
|
})(Maybe || (Maybe = {}));
|
|
412
357
|
|
|
358
|
+
// src/Core/Combinable.ts
|
|
359
|
+
var Combinable;
|
|
360
|
+
((Combinable2) => {
|
|
361
|
+
Combinable2.string = {
|
|
362
|
+
empty: "",
|
|
363
|
+
combine: (b) => (a) => a + b
|
|
364
|
+
};
|
|
365
|
+
Combinable2.sum = {
|
|
366
|
+
empty: 0,
|
|
367
|
+
combine: (b) => (a) => a + b
|
|
368
|
+
};
|
|
369
|
+
Combinable2.product = {
|
|
370
|
+
empty: 1,
|
|
371
|
+
combine: (b) => (a) => a * b
|
|
372
|
+
};
|
|
373
|
+
Combinable2.all = {
|
|
374
|
+
empty: true,
|
|
375
|
+
combine: (b) => (a) => a && b
|
|
376
|
+
};
|
|
377
|
+
Combinable2.any = {
|
|
378
|
+
empty: false,
|
|
379
|
+
combine: (b) => (a) => a || b
|
|
380
|
+
};
|
|
381
|
+
Combinable2.array = () => ({
|
|
382
|
+
empty: [],
|
|
383
|
+
combine: (b) => (a) => [...a, ...b]
|
|
384
|
+
});
|
|
385
|
+
Combinable2.maybe = (inner) => ({
|
|
386
|
+
empty: Maybe.none(),
|
|
387
|
+
combine: (b) => (a) => Maybe.isNone(a) ? b : Maybe.isNone(b) ? a : Maybe.some(inner.combine(b.value)(a.value))
|
|
388
|
+
});
|
|
389
|
+
Combinable2.fold = (c) => (data) => data.reduce((acc, x) => c.combine(x)(acc), c.empty);
|
|
390
|
+
})(Combinable || (Combinable = {}));
|
|
391
|
+
|
|
392
|
+
// src/Core/Deferred.ts
|
|
393
|
+
var Deferred;
|
|
394
|
+
((Deferred2) => {
|
|
395
|
+
Deferred2.fromPromise = (p) => (
|
|
396
|
+
// eslint-disable-next-line unicorn/no-thenable -- Deferred is intentionally thenable; it is the mechanism that makes Task awaitable
|
|
397
|
+
{ then: ((f) => p.then(f)) }
|
|
398
|
+
);
|
|
399
|
+
Deferred2.toPromise = (d) => new Promise((resolve) => d.then(resolve));
|
|
400
|
+
})(Deferred || (Deferred = {}));
|
|
401
|
+
|
|
402
|
+
// src/Core/Equality.ts
|
|
403
|
+
var Equality;
|
|
404
|
+
((Equality2) => {
|
|
405
|
+
Equality2.string = (a, b) => a === b;
|
|
406
|
+
Equality2.number = (a, b) => a === b;
|
|
407
|
+
Equality2.boolean = (a, b) => a === b;
|
|
408
|
+
Equality2.date = (a, b) => a.getTime() === b.getTime();
|
|
409
|
+
Equality2.array = (eq) => (a, b) => a.length === b.length && a.every((x, i) => eq(x, b[i]));
|
|
410
|
+
Equality2.by = (f) => (eq) => (a, b) => eq(f(a), f(b));
|
|
411
|
+
Equality2.and = (eq2) => (eq1) => (a, b) => eq1(a, b) && eq2(a, b);
|
|
412
|
+
})(Equality || (Equality = {}));
|
|
413
|
+
|
|
414
|
+
// src/Core/Lazy.ts
|
|
415
|
+
var Lazy;
|
|
416
|
+
((Lazy2) => {
|
|
417
|
+
Lazy2.from = (f) => {
|
|
418
|
+
let done = false;
|
|
419
|
+
let cache;
|
|
420
|
+
return {
|
|
421
|
+
get: () => {
|
|
422
|
+
if (!done) {
|
|
423
|
+
cache = f();
|
|
424
|
+
done = true;
|
|
425
|
+
}
|
|
426
|
+
return cache;
|
|
427
|
+
}
|
|
428
|
+
};
|
|
429
|
+
};
|
|
430
|
+
Lazy2.evaluate = (lazy) => lazy.get();
|
|
431
|
+
Lazy2.map = (f) => (lazy) => Lazy2.from(() => f(lazy.get()));
|
|
432
|
+
Lazy2.chain = (f) => (lazy) => Lazy2.from(() => f(lazy.get()).get());
|
|
433
|
+
Lazy2.tap = (f) => (lazy) => Lazy2.from(() => {
|
|
434
|
+
const v = lazy.get();
|
|
435
|
+
f(v);
|
|
436
|
+
return v;
|
|
437
|
+
});
|
|
438
|
+
})(Lazy || (Lazy = {}));
|
|
439
|
+
|
|
440
|
+
// src/Core/Lens.ts
|
|
441
|
+
var Lens;
|
|
442
|
+
((Lens2) => {
|
|
443
|
+
Lens2.make = (get2, set2) => ({ get: get2, set: set2 });
|
|
444
|
+
Lens2.prop = () => (key) => (0, Lens2.make)(
|
|
445
|
+
(s) => s[key],
|
|
446
|
+
(a) => (s) => ({ ...s, [key]: a })
|
|
447
|
+
);
|
|
448
|
+
Lens2.get = (lens) => (s) => lens.get(s);
|
|
449
|
+
Lens2.set = (lens) => (a) => (s) => lens.set(a)(s);
|
|
450
|
+
Lens2.modify = (lens) => (f) => (s) => lens.set(f(lens.get(s)))(s);
|
|
451
|
+
Lens2.andThen = (inner) => (outer) => (0, Lens2.make)(
|
|
452
|
+
(s) => inner.get(outer.get(s)),
|
|
453
|
+
(b) => (s) => outer.set(inner.set(b)(outer.get(s)))(s)
|
|
454
|
+
);
|
|
455
|
+
Lens2.andThenOptional = (inner) => (outer) => ({
|
|
456
|
+
get: (s) => inner.get(outer.get(s)),
|
|
457
|
+
set: (b) => (s) => outer.set(inner.set(b)(outer.get(s)))(s)
|
|
458
|
+
});
|
|
459
|
+
Lens2.toOptional = (lens) => ({
|
|
460
|
+
get: (s) => ({ kind: "Some", value: lens.get(s) }),
|
|
461
|
+
set: lens.set
|
|
462
|
+
});
|
|
463
|
+
})(Lens || (Lens = {}));
|
|
464
|
+
|
|
465
|
+
// src/Core/Logged.ts
|
|
466
|
+
var Logged;
|
|
467
|
+
((Logged2) => {
|
|
468
|
+
Logged2.make = (value) => ({ value, log: [] });
|
|
469
|
+
Logged2.tell = (entry) => ({ value: void 0, log: [entry] });
|
|
470
|
+
Logged2.map = (f) => (data) => ({
|
|
471
|
+
value: f(data.value),
|
|
472
|
+
log: data.log
|
|
473
|
+
});
|
|
474
|
+
Logged2.chain = (f) => (data) => {
|
|
475
|
+
const next = f(data.value);
|
|
476
|
+
return { value: next.value, log: [...data.log, ...next.log] };
|
|
477
|
+
};
|
|
478
|
+
Logged2.ap = (arg) => (data) => ({
|
|
479
|
+
value: data.value(arg.value),
|
|
480
|
+
log: [...data.log, ...arg.log]
|
|
481
|
+
});
|
|
482
|
+
Logged2.tap = (f) => (data) => {
|
|
483
|
+
f(data.value);
|
|
484
|
+
return data;
|
|
485
|
+
};
|
|
486
|
+
Logged2.run = (data) => [data.value, data.log];
|
|
487
|
+
})(Logged || (Logged = {}));
|
|
488
|
+
|
|
413
489
|
// src/internal/Op.util.ts
|
|
414
490
|
var _abortedNil = { kind: "OpNil", reason: "aborted" };
|
|
415
491
|
var _droppedNil = { kind: "OpNil", reason: "dropped" };
|
|
@@ -1412,6 +1488,20 @@ var Optional;
|
|
|
1412
1488
|
);
|
|
1413
1489
|
})(Optional || (Optional = {}));
|
|
1414
1490
|
|
|
1491
|
+
// src/Core/Ordering.ts
|
|
1492
|
+
var Ordering;
|
|
1493
|
+
((Ordering2) => {
|
|
1494
|
+
Ordering2.string = (a, b) => a < b ? -1 : a > b ? 1 : 0;
|
|
1495
|
+
Ordering2.number = (a, b) => a - b;
|
|
1496
|
+
Ordering2.date = (a, b) => a.getTime() - b.getTime();
|
|
1497
|
+
Ordering2.reverse = (ord) => (a, b) => ord(b, a);
|
|
1498
|
+
Ordering2.thenBy = (ord2) => (ord1) => (a, b) => {
|
|
1499
|
+
const r = ord1(a, b);
|
|
1500
|
+
return r !== 0 ? r : ord2(a, b);
|
|
1501
|
+
};
|
|
1502
|
+
Ordering2.by = (f) => (ord) => (a, b) => ord(f(a), f(b));
|
|
1503
|
+
})(Ordering || (Ordering = {}));
|
|
1504
|
+
|
|
1415
1505
|
// src/Core/Predicate.ts
|
|
1416
1506
|
var Predicate;
|
|
1417
1507
|
((Predicate2) => {
|
|
@@ -1550,58 +1640,135 @@ var Task;
|
|
|
1550
1640
|
(signal) => Promise.all(tasks.map((t) => toPromise(t, signal)))
|
|
1551
1641
|
);
|
|
1552
1642
|
Task2.delay = (ms) => (data) => (0, Task2.from)(
|
|
1553
|
-
(signal) => new Promise(
|
|
1554
|
-
|
|
1555
|
-
|
|
1556
|
-
|
|
1557
|
-
|
|
1558
|
-
|
|
1643
|
+
(signal) => new Promise((resolve2) => {
|
|
1644
|
+
let timerId = void 0;
|
|
1645
|
+
const onAbort = () => {
|
|
1646
|
+
if (timerId !== void 0) {
|
|
1647
|
+
clearTimeout(timerId);
|
|
1648
|
+
}
|
|
1649
|
+
resolve2(toPromise(data, signal));
|
|
1650
|
+
};
|
|
1651
|
+
if (signal) {
|
|
1652
|
+
if (signal.aborted) {
|
|
1653
|
+
return resolve2(toPromise(data, signal));
|
|
1654
|
+
}
|
|
1655
|
+
signal.addEventListener("abort", onAbort, { once: true });
|
|
1656
|
+
}
|
|
1657
|
+
timerId = setTimeout(() => {
|
|
1658
|
+
signal?.removeEventListener("abort", onAbort);
|
|
1659
|
+
resolve2(toPromise(data, signal));
|
|
1660
|
+
}, ms);
|
|
1661
|
+
})
|
|
1559
1662
|
);
|
|
1560
1663
|
Task2.repeat = (options) => (task) => (0, Task2.from)((signal) => {
|
|
1561
1664
|
const { times, delay: ms } = options;
|
|
1562
1665
|
if (times <= 0) return Promise.resolve([]);
|
|
1563
1666
|
const results = [];
|
|
1564
|
-
const wait = () =>
|
|
1565
|
-
|
|
1566
|
-
|
|
1567
|
-
|
|
1568
|
-
|
|
1569
|
-
|
|
1667
|
+
const wait = () => {
|
|
1668
|
+
if (signal?.aborted) return Promise.resolve();
|
|
1669
|
+
return new Promise((r) => {
|
|
1670
|
+
let timerId = void 0;
|
|
1671
|
+
const onAbort = () => {
|
|
1672
|
+
if (timerId !== void 0) {
|
|
1673
|
+
clearTimeout(timerId);
|
|
1674
|
+
}
|
|
1675
|
+
r();
|
|
1676
|
+
};
|
|
1677
|
+
if (signal) {
|
|
1678
|
+
signal.addEventListener("abort", onAbort, { once: true });
|
|
1679
|
+
}
|
|
1680
|
+
timerId = setTimeout(() => {
|
|
1681
|
+
signal?.removeEventListener("abort", onAbort);
|
|
1682
|
+
r();
|
|
1683
|
+
}, ms || 0);
|
|
1684
|
+
});
|
|
1685
|
+
};
|
|
1686
|
+
const run2 = (left) => {
|
|
1687
|
+
if (signal?.aborted) {
|
|
1688
|
+
return Promise.resolve(results);
|
|
1689
|
+
}
|
|
1690
|
+
return toPromise(task, signal).then((a) => {
|
|
1691
|
+
results.push(a);
|
|
1692
|
+
if (left <= 1 || signal?.aborted) return results;
|
|
1693
|
+
return wait().then(() => run2(left - 1));
|
|
1694
|
+
});
|
|
1695
|
+
};
|
|
1570
1696
|
return run2(times);
|
|
1571
1697
|
});
|
|
1572
1698
|
Task2.repeatUntil = (options) => (task) => (0, Task2.from)((signal) => {
|
|
1573
1699
|
const { when: predicate, delay: ms, maxAttempts } = options;
|
|
1574
|
-
const wait = () =>
|
|
1575
|
-
|
|
1576
|
-
|
|
1577
|
-
|
|
1578
|
-
|
|
1579
|
-
|
|
1700
|
+
const wait = () => {
|
|
1701
|
+
if (signal?.aborted) return Promise.resolve();
|
|
1702
|
+
return new Promise((r) => {
|
|
1703
|
+
let timerId = void 0;
|
|
1704
|
+
const onAbort = () => {
|
|
1705
|
+
if (timerId !== void 0) {
|
|
1706
|
+
clearTimeout(timerId);
|
|
1707
|
+
}
|
|
1708
|
+
r();
|
|
1709
|
+
};
|
|
1710
|
+
if (signal) {
|
|
1711
|
+
signal.addEventListener("abort", onAbort, { once: true });
|
|
1712
|
+
}
|
|
1713
|
+
timerId = setTimeout(() => {
|
|
1714
|
+
signal?.removeEventListener("abort", onAbort);
|
|
1715
|
+
r();
|
|
1716
|
+
}, ms || 0);
|
|
1717
|
+
});
|
|
1718
|
+
};
|
|
1719
|
+
const run2 = (attempt, lastValue) => {
|
|
1720
|
+
if (signal?.aborted && lastValue !== void 0) {
|
|
1721
|
+
return Promise.resolve(lastValue);
|
|
1722
|
+
}
|
|
1723
|
+
return toPromise(task, signal).then((a) => {
|
|
1724
|
+
if (predicate(a)) return a;
|
|
1725
|
+
if (maxAttempts !== void 0 && attempt >= maxAttempts) return a;
|
|
1726
|
+
if (signal?.aborted) return a;
|
|
1727
|
+
return wait().then(() => run2(attempt + 1, a));
|
|
1728
|
+
});
|
|
1729
|
+
};
|
|
1580
1730
|
return run2(1);
|
|
1581
1731
|
});
|
|
1582
1732
|
Task2.race = (tasks) => (0, Task2.from)((signal) => Promise.race(tasks.map((t) => toPromise(t, signal))));
|
|
1583
1733
|
Task2.sequential = (tasks) => (0, Task2.from)(async (signal) => {
|
|
1584
1734
|
const results = [];
|
|
1585
1735
|
for (const task of tasks) {
|
|
1736
|
+
if (signal?.aborted) {
|
|
1737
|
+
break;
|
|
1738
|
+
}
|
|
1586
1739
|
results.push(await toPromise(task, signal));
|
|
1587
1740
|
}
|
|
1588
1741
|
return results;
|
|
1589
1742
|
});
|
|
1590
1743
|
Task2.timeout = (ms, onTimeout) => (task) => (0, Task2.from)((outerSignal) => {
|
|
1591
1744
|
const controller = new AbortController();
|
|
1592
|
-
const onOuterAbort = () => controller.abort();
|
|
1593
|
-
outerSignal?.addEventListener("abort", onOuterAbort, { once: true });
|
|
1594
1745
|
let timerId;
|
|
1746
|
+
const cleanUp = () => {
|
|
1747
|
+
if (timerId !== void 0) {
|
|
1748
|
+
clearTimeout(timerId);
|
|
1749
|
+
}
|
|
1750
|
+
outerSignal?.removeEventListener("abort", onOuterAbort);
|
|
1751
|
+
};
|
|
1752
|
+
const onOuterAbort = () => {
|
|
1753
|
+
cleanUp();
|
|
1754
|
+
controller.abort();
|
|
1755
|
+
};
|
|
1756
|
+
if (outerSignal) {
|
|
1757
|
+
if (outerSignal.aborted) {
|
|
1758
|
+
controller.abort();
|
|
1759
|
+
} else {
|
|
1760
|
+
outerSignal.addEventListener("abort", onOuterAbort, { once: true });
|
|
1761
|
+
}
|
|
1762
|
+
}
|
|
1595
1763
|
return Promise.race([
|
|
1596
1764
|
toPromise(task, controller.signal).then((a) => {
|
|
1597
|
-
|
|
1598
|
-
outerSignal?.removeEventListener("abort", onOuterAbort);
|
|
1765
|
+
cleanUp();
|
|
1599
1766
|
return Result.ok(a);
|
|
1600
1767
|
}),
|
|
1601
1768
|
new Promise((resolve2) => {
|
|
1602
1769
|
timerId = setTimeout(() => {
|
|
1603
1770
|
controller.abort();
|
|
1604
|
-
|
|
1771
|
+
cleanUp();
|
|
1605
1772
|
resolve2(Result.error(onTimeout()));
|
|
1606
1773
|
}, ms);
|
|
1607
1774
|
})
|
|
@@ -1637,28 +1804,33 @@ var Resource;
|
|
|
1637
1804
|
release
|
|
1638
1805
|
});
|
|
1639
1806
|
Resource2.use = (f) => (resource) => Task.from(
|
|
1640
|
-
() => Deferred.toPromise(resource.acquire()).then(async (acquired) => {
|
|
1807
|
+
(signal) => Deferred.toPromise(resource.acquire(signal)).then(async (acquired) => {
|
|
1641
1808
|
if (Result.isError(acquired)) return acquired;
|
|
1642
1809
|
const a = acquired.value;
|
|
1643
|
-
|
|
1644
|
-
|
|
1645
|
-
|
|
1810
|
+
try {
|
|
1811
|
+
const usageResult = await Deferred.toPromise(f(a)(signal));
|
|
1812
|
+
return usageResult;
|
|
1813
|
+
} finally {
|
|
1814
|
+
await Deferred.toPromise(resource.release(a)(signal));
|
|
1815
|
+
}
|
|
1646
1816
|
})
|
|
1647
1817
|
);
|
|
1648
1818
|
Resource2.combine = (resourceA, resourceB) => ({
|
|
1649
1819
|
acquire: Task.from(
|
|
1650
|
-
() => Deferred.toPromise(resourceA.acquire()).then(async (acquiredA) => {
|
|
1820
|
+
(signal) => Deferred.toPromise(resourceA.acquire(signal)).then(async (acquiredA) => {
|
|
1651
1821
|
if (Result.isError(acquiredA)) return acquiredA;
|
|
1652
1822
|
const a = acquiredA.value;
|
|
1653
|
-
const acquiredB = await Deferred.toPromise(resourceB.acquire());
|
|
1823
|
+
const acquiredB = await Deferred.toPromise(resourceB.acquire(signal));
|
|
1654
1824
|
if (Result.isError(acquiredB)) {
|
|
1655
|
-
await Deferred.toPromise(resourceA.release(a)());
|
|
1825
|
+
await Deferred.toPromise(resourceA.release(a)(signal));
|
|
1656
1826
|
return acquiredB;
|
|
1657
1827
|
}
|
|
1658
1828
|
return Result.ok([a, acquiredB.value]);
|
|
1659
1829
|
})
|
|
1660
1830
|
),
|
|
1661
|
-
release: ([a, b]) => Task.from(
|
|
1831
|
+
release: ([a, b]) => Task.from(
|
|
1832
|
+
(signal) => Deferred.toPromise(resourceB.release(b)(signal)).then(() => Deferred.toPromise(resourceA.release(a)(signal)))
|
|
1833
|
+
)
|
|
1662
1834
|
});
|
|
1663
1835
|
})(Resource || (Resource = {}));
|
|
1664
1836
|
|
|
@@ -1701,14 +1873,14 @@ var TaskMaybe;
|
|
|
1701
1873
|
TaskMaybe2.fromMaybe = (option) => Task.resolve(option);
|
|
1702
1874
|
TaskMaybe2.fromTask = (task) => Task.map(Maybe.some)(task);
|
|
1703
1875
|
TaskMaybe2.tryCatch = (f) => Task.from(
|
|
1704
|
-
() => f().then(Maybe.some).catch(() => Maybe.none())
|
|
1876
|
+
(signal) => f(signal).then(Maybe.some).catch(() => Maybe.none())
|
|
1705
1877
|
);
|
|
1706
1878
|
TaskMaybe2.map = (f) => (data) => Task.map(Maybe.map(f))(data);
|
|
1707
1879
|
TaskMaybe2.chain = (f) => (data) => Task.chain((option) => Maybe.isSome(option) ? f(option.value) : Task.resolve(Maybe.none()))(data);
|
|
1708
1880
|
TaskMaybe2.ap = (arg) => (data) => Task.from(
|
|
1709
|
-
() => Promise.all([
|
|
1710
|
-
Deferred.toPromise(data()),
|
|
1711
|
-
Deferred.toPromise(arg())
|
|
1881
|
+
(signal) => Promise.all([
|
|
1882
|
+
Deferred.toPromise(data(signal)),
|
|
1883
|
+
Deferred.toPromise(arg(signal))
|
|
1712
1884
|
]).then(([of_, oa]) => Maybe.ap(oa)(of_))
|
|
1713
1885
|
);
|
|
1714
1886
|
TaskMaybe2.fold = (onNone, onSome) => (data) => Task.map(Maybe.fold(onNone, onSome))(data);
|
|
@@ -1742,6 +1914,12 @@ var TaskResult;
|
|
|
1742
1914
|
TaskResult2.getOrElse = (defaultValue) => (data) => Task.map(Result.getOrElse(defaultValue))(data);
|
|
1743
1915
|
TaskResult2.tap = (f) => (data) => Task.map(Result.tap(f))(data);
|
|
1744
1916
|
TaskResult2.tapError = (f) => (data) => Task.map(Result.tapError(f))(data);
|
|
1917
|
+
TaskResult2.ap = (arg) => (data) => Task.from(
|
|
1918
|
+
(signal) => Promise.all([
|
|
1919
|
+
Deferred.toPromise(data(signal)),
|
|
1920
|
+
Deferred.toPromise(arg(signal))
|
|
1921
|
+
]).then(([of_, oa]) => Result.ap(oa)(of_))
|
|
1922
|
+
);
|
|
1745
1923
|
TaskResult2.run = (signal) => (task) => Deferred.toPromise(task(signal));
|
|
1746
1924
|
})(TaskResult || (TaskResult = {}));
|
|
1747
1925
|
|
|
@@ -1815,13 +1993,13 @@ var TaskValidation;
|
|
|
1815
1993
|
TaskValidation2.invalidAll = (errors) => Task.resolve(Validation.invalidAll(errors));
|
|
1816
1994
|
TaskValidation2.fromValidation = (validation) => Task.resolve(validation);
|
|
1817
1995
|
TaskValidation2.tryCatch = (f, onError) => Task.from(
|
|
1818
|
-
() => f().then(Validation.valid).catch((e) => Validation.invalid(onError(e)))
|
|
1996
|
+
(signal) => f(signal).then(Validation.valid).catch((e) => Validation.invalid(onError(e)))
|
|
1819
1997
|
);
|
|
1820
1998
|
TaskValidation2.map = (f) => (data) => Task.map(Validation.map(f))(data);
|
|
1821
1999
|
TaskValidation2.ap = (arg) => (data) => Task.from(
|
|
1822
|
-
() => Promise.all([
|
|
1823
|
-
Deferred.toPromise(data()),
|
|
1824
|
-
Deferred.toPromise(arg())
|
|
2000
|
+
(signal) => Promise.all([
|
|
2001
|
+
Deferred.toPromise(data(signal)),
|
|
2002
|
+
Deferred.toPromise(arg(signal))
|
|
1825
2003
|
]).then(([vf, va]) => Validation.ap(va)(vf))
|
|
1826
2004
|
);
|
|
1827
2005
|
TaskValidation2.fold = (onInvalid, onValid) => (data) => Task.map(Validation.fold(onInvalid, onValid))(data);
|
|
@@ -1832,13 +2010,13 @@ var TaskValidation;
|
|
|
1832
2010
|
(validation) => Validation.isValid(validation) ? Task.resolve(validation) : fallback(validation.errors)
|
|
1833
2011
|
)(data);
|
|
1834
2012
|
TaskValidation2.product = (first, second) => Task.from(
|
|
1835
|
-
() => Promise.all([
|
|
1836
|
-
Deferred.toPromise(first()),
|
|
1837
|
-
Deferred.toPromise(second())
|
|
2013
|
+
(signal) => Promise.all([
|
|
2014
|
+
Deferred.toPromise(first(signal)),
|
|
2015
|
+
Deferred.toPromise(second(signal))
|
|
1838
2016
|
]).then(([va, vb]) => Validation.product(va, vb))
|
|
1839
2017
|
);
|
|
1840
2018
|
TaskValidation2.productAll = (data) => Task.from(
|
|
1841
|
-
() => Promise.all(data.map((t) => Deferred.toPromise(t()))).then((results) => Validation.productAll(results))
|
|
2019
|
+
(signal) => Promise.all(data.map((t) => Deferred.toPromise(t(signal)))).then((results) => Validation.productAll(results))
|
|
1842
2020
|
);
|
|
1843
2021
|
})(TaskValidation || (TaskValidation = {}));
|
|
1844
2022
|
|
|
@@ -2015,11 +2193,25 @@ var Arr;
|
|
|
2015
2193
|
}
|
|
2016
2194
|
return result;
|
|
2017
2195
|
};
|
|
2196
|
+
Arr2.uniqWith = (eq) => (data) => {
|
|
2197
|
+
const result = [];
|
|
2198
|
+
for (const a of data) {
|
|
2199
|
+
if (!result.some((x) => eq(x, a))) {
|
|
2200
|
+
result.push(a);
|
|
2201
|
+
}
|
|
2202
|
+
}
|
|
2203
|
+
return result;
|
|
2204
|
+
};
|
|
2018
2205
|
Arr2.sortBy = (compare) => (data) => {
|
|
2019
2206
|
const arr = data;
|
|
2020
2207
|
if (typeof arr.toSorted === "function") return arr.toSorted(compare);
|
|
2021
2208
|
return [...data].sort(compare);
|
|
2022
2209
|
};
|
|
2210
|
+
Arr2.sortWith = (ord) => (data) => {
|
|
2211
|
+
const arr = data;
|
|
2212
|
+
if (typeof arr.toSorted === "function") return arr.toSorted(ord);
|
|
2213
|
+
return [...data].sort(ord);
|
|
2214
|
+
};
|
|
2023
2215
|
Arr2.zip = (other) => (data) => {
|
|
2024
2216
|
const len = Math.min(data.length, other.length);
|
|
2025
2217
|
const result = new Array(len);
|
|
@@ -2052,7 +2244,23 @@ var Arr;
|
|
|
2052
2244
|
}
|
|
2053
2245
|
return result;
|
|
2054
2246
|
};
|
|
2055
|
-
Arr2.flatten = (data) =>
|
|
2247
|
+
Arr2.flatten = (data) => {
|
|
2248
|
+
let totalLen = 0;
|
|
2249
|
+
const outerLen = data.length;
|
|
2250
|
+
for (let i = 0; i < outerLen; i++) {
|
|
2251
|
+
totalLen += data[i].length;
|
|
2252
|
+
}
|
|
2253
|
+
const result = new Array(totalLen);
|
|
2254
|
+
let idx = 0;
|
|
2255
|
+
for (let i = 0; i < outerLen; i++) {
|
|
2256
|
+
const chunk = data[i];
|
|
2257
|
+
const innerLen = chunk.length;
|
|
2258
|
+
for (let j = 0; j < innerLen; j++) {
|
|
2259
|
+
result[idx++] = chunk[j];
|
|
2260
|
+
}
|
|
2261
|
+
}
|
|
2262
|
+
return result;
|
|
2263
|
+
};
|
|
2056
2264
|
Arr2.flatMap = (f) => (data) => {
|
|
2057
2265
|
const n = data.length;
|
|
2058
2266
|
const result = [];
|
|
@@ -2291,8 +2499,8 @@ var Num;
|
|
|
2291
2499
|
}
|
|
2292
2500
|
return result;
|
|
2293
2501
|
};
|
|
2294
|
-
Num2.clamp = (
|
|
2295
|
-
Num2.between = (
|
|
2502
|
+
Num2.clamp = (min2, max2) => (n) => Math.min(Math.max(n, min2), max2);
|
|
2503
|
+
Num2.between = (min2, max2) => (n) => n >= min2 && n <= max2;
|
|
2296
2504
|
Num2.parse = (s) => {
|
|
2297
2505
|
if (s.trim() === "") return Maybe.none();
|
|
2298
2506
|
const n = Number(s);
|
|
@@ -2308,6 +2516,28 @@ var Num;
|
|
|
2308
2516
|
Num2.floor = (n) => Math.floor(n);
|
|
2309
2517
|
Num2.ceil = (n) => Math.ceil(n);
|
|
2310
2518
|
Num2.remainder = (divisor) => (n) => divisor === 0 ? Maybe.none() : Maybe.some(n % divisor);
|
|
2519
|
+
Num2.sum = (ns) => {
|
|
2520
|
+
let result = 0;
|
|
2521
|
+
for (let i = 0; i < ns.length; i++) result += ns[i];
|
|
2522
|
+
return result;
|
|
2523
|
+
};
|
|
2524
|
+
Num2.mean = (ns) => ns.length === 0 ? Maybe.none() : Maybe.some((0, Num2.sum)(ns) / ns.length);
|
|
2525
|
+
Num2.min = (ns) => {
|
|
2526
|
+
if (ns.length === 0) return Maybe.none();
|
|
2527
|
+
let [result] = ns;
|
|
2528
|
+
for (let i = 1; i < ns.length; i++) {
|
|
2529
|
+
if (ns[i] < result) result = ns[i];
|
|
2530
|
+
}
|
|
2531
|
+
return Maybe.some(result);
|
|
2532
|
+
};
|
|
2533
|
+
Num2.max = (ns) => {
|
|
2534
|
+
if (ns.length === 0) return Maybe.none();
|
|
2535
|
+
let [result] = ns;
|
|
2536
|
+
for (let i = 1; i < ns.length; i++) {
|
|
2537
|
+
if (ns[i] > result) result = ns[i];
|
|
2538
|
+
}
|
|
2539
|
+
return Maybe.some(result);
|
|
2540
|
+
};
|
|
2311
2541
|
})(Num || (Num = {}));
|
|
2312
2542
|
|
|
2313
2543
|
// src/Utils/Rec.ts
|
|
@@ -2431,6 +2661,7 @@ var Str;
|
|
|
2431
2661
|
Str2.endsWith = (suffix) => (s) => s.endsWith(suffix);
|
|
2432
2662
|
Str2.toUpperCase = (s) => s.toUpperCase();
|
|
2433
2663
|
Str2.toLowerCase = (s) => s.toLowerCase();
|
|
2664
|
+
Str2.capitalize = (s) => s.length === 0 ? "" : s.charAt(0).toUpperCase() + s.slice(1);
|
|
2434
2665
|
Str2.lines = (s) => s.split(/\r?\n|\r/);
|
|
2435
2666
|
Str2.words = (s) => s.trim().split(/\s+/).filter(Boolean);
|
|
2436
2667
|
Str2.isEmpty = (s) => s.length === 0;
|
|
@@ -2548,14 +2779,18 @@ var Uniq;
|
|
|
2548
2779
|
0 && (module.exports = {
|
|
2549
2780
|
Arr,
|
|
2550
2781
|
Brand,
|
|
2782
|
+
Combinable,
|
|
2551
2783
|
Deferred,
|
|
2552
2784
|
Dict,
|
|
2785
|
+
Equality,
|
|
2786
|
+
Lazy,
|
|
2553
2787
|
Lens,
|
|
2554
2788
|
Logged,
|
|
2555
2789
|
Maybe,
|
|
2556
2790
|
Num,
|
|
2557
2791
|
Op,
|
|
2558
2792
|
Optional,
|
|
2793
|
+
Ordering,
|
|
2559
2794
|
Predicate,
|
|
2560
2795
|
Reader,
|
|
2561
2796
|
Rec,
|
package/dist/index.mjs
CHANGED
|
@@ -28,10 +28,14 @@ import {
|
|
|
28
28
|
uncurry4
|
|
29
29
|
} from "./chunk-NRF2FVPZ.mjs";
|
|
30
30
|
import {
|
|
31
|
+
Combinable,
|
|
32
|
+
Equality,
|
|
33
|
+
Lazy,
|
|
31
34
|
Lens,
|
|
32
35
|
Logged,
|
|
33
36
|
Op,
|
|
34
37
|
Optional,
|
|
38
|
+
Ordering,
|
|
35
39
|
Predicate,
|
|
36
40
|
Reader,
|
|
37
41
|
Refinement,
|
|
@@ -44,7 +48,7 @@ import {
|
|
|
44
48
|
These,
|
|
45
49
|
Tuple,
|
|
46
50
|
Validation
|
|
47
|
-
} from "./chunk-
|
|
51
|
+
} from "./chunk-L3NC44SN.mjs";
|
|
48
52
|
import {
|
|
49
53
|
Arr,
|
|
50
54
|
Dict,
|
|
@@ -52,13 +56,13 @@ import {
|
|
|
52
56
|
Rec,
|
|
53
57
|
Str,
|
|
54
58
|
Uniq
|
|
55
|
-
} from "./chunk-
|
|
59
|
+
} from "./chunk-EHQFUWZW.mjs";
|
|
56
60
|
import {
|
|
57
61
|
Deferred,
|
|
58
62
|
Maybe,
|
|
59
63
|
Result,
|
|
60
64
|
Task
|
|
61
|
-
} from "./chunk-
|
|
65
|
+
} from "./chunk-TK5ZCGP2.mjs";
|
|
62
66
|
import {
|
|
63
67
|
Brand
|
|
64
68
|
} from "./chunk-BYWKZLHM.mjs";
|
|
@@ -68,14 +72,18 @@ import {
|
|
|
68
72
|
export {
|
|
69
73
|
Arr,
|
|
70
74
|
Brand,
|
|
75
|
+
Combinable,
|
|
71
76
|
Deferred,
|
|
72
77
|
Dict,
|
|
78
|
+
Equality,
|
|
79
|
+
Lazy,
|
|
73
80
|
Lens,
|
|
74
81
|
Logged,
|
|
75
82
|
Maybe,
|
|
76
83
|
Num,
|
|
77
84
|
Op,
|
|
78
85
|
Optional,
|
|
86
|
+
Ordering,
|
|
79
87
|
Predicate,
|
|
80
88
|
Reader,
|
|
81
89
|
Rec,
|