@nlozgachev/pipelined 0.30.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-PV7JOUKL.mjs → chunk-L3NC44SN.mjs} +122 -25
- package/dist/{chunk-SDGDJ7CU.mjs → chunk-TK5ZCGP2.mjs} +111 -34
- package/dist/core.d.mts +179 -23
- package/dist/core.d.ts +179 -23
- package/dist/core.js +284 -106
- 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 -109
- 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" };
|
|
@@ -1312,10 +1388,6 @@ var Op;
|
|
|
1312
1388
|
Op2.wire = (source, f) => source.subscribe((state) => {
|
|
1313
1389
|
if ((0, Op2.isOk)(state)) f(state.value);
|
|
1314
1390
|
});
|
|
1315
|
-
Op2.wireAll = (...pairs) => {
|
|
1316
|
-
const cleanups = pairs.map(([source, f]) => (0, Op2.wire)(source, f));
|
|
1317
|
-
return () => cleanups.forEach((c) => c());
|
|
1318
|
-
};
|
|
1319
1391
|
function interpret(op, options) {
|
|
1320
1392
|
const { strategy, retry: retryOptions, timeout: timeoutOptions } = options;
|
|
1321
1393
|
switch (strategy) {
|
|
@@ -1416,6 +1488,20 @@ var Optional;
|
|
|
1416
1488
|
);
|
|
1417
1489
|
})(Optional || (Optional = {}));
|
|
1418
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
|
+
|
|
1419
1505
|
// src/Core/Predicate.ts
|
|
1420
1506
|
var Predicate;
|
|
1421
1507
|
((Predicate2) => {
|
|
@@ -1554,58 +1640,135 @@ var Task;
|
|
|
1554
1640
|
(signal) => Promise.all(tasks.map((t) => toPromise(t, signal)))
|
|
1555
1641
|
);
|
|
1556
1642
|
Task2.delay = (ms) => (data) => (0, Task2.from)(
|
|
1557
|
-
(signal) => new Promise(
|
|
1558
|
-
|
|
1559
|
-
|
|
1560
|
-
|
|
1561
|
-
|
|
1562
|
-
|
|
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
|
+
})
|
|
1563
1662
|
);
|
|
1564
1663
|
Task2.repeat = (options) => (task) => (0, Task2.from)((signal) => {
|
|
1565
1664
|
const { times, delay: ms } = options;
|
|
1566
1665
|
if (times <= 0) return Promise.resolve([]);
|
|
1567
1666
|
const results = [];
|
|
1568
|
-
const wait = () =>
|
|
1569
|
-
|
|
1570
|
-
|
|
1571
|
-
|
|
1572
|
-
|
|
1573
|
-
|
|
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
|
+
};
|
|
1574
1696
|
return run2(times);
|
|
1575
1697
|
});
|
|
1576
1698
|
Task2.repeatUntil = (options) => (task) => (0, Task2.from)((signal) => {
|
|
1577
1699
|
const { when: predicate, delay: ms, maxAttempts } = options;
|
|
1578
|
-
const wait = () =>
|
|
1579
|
-
|
|
1580
|
-
|
|
1581
|
-
|
|
1582
|
-
|
|
1583
|
-
|
|
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
|
+
};
|
|
1584
1730
|
return run2(1);
|
|
1585
1731
|
});
|
|
1586
1732
|
Task2.race = (tasks) => (0, Task2.from)((signal) => Promise.race(tasks.map((t) => toPromise(t, signal))));
|
|
1587
1733
|
Task2.sequential = (tasks) => (0, Task2.from)(async (signal) => {
|
|
1588
1734
|
const results = [];
|
|
1589
1735
|
for (const task of tasks) {
|
|
1736
|
+
if (signal?.aborted) {
|
|
1737
|
+
break;
|
|
1738
|
+
}
|
|
1590
1739
|
results.push(await toPromise(task, signal));
|
|
1591
1740
|
}
|
|
1592
1741
|
return results;
|
|
1593
1742
|
});
|
|
1594
1743
|
Task2.timeout = (ms, onTimeout) => (task) => (0, Task2.from)((outerSignal) => {
|
|
1595
1744
|
const controller = new AbortController();
|
|
1596
|
-
const onOuterAbort = () => controller.abort();
|
|
1597
|
-
outerSignal?.addEventListener("abort", onOuterAbort, { once: true });
|
|
1598
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
|
+
}
|
|
1599
1763
|
return Promise.race([
|
|
1600
1764
|
toPromise(task, controller.signal).then((a) => {
|
|
1601
|
-
|
|
1602
|
-
outerSignal?.removeEventListener("abort", onOuterAbort);
|
|
1765
|
+
cleanUp();
|
|
1603
1766
|
return Result.ok(a);
|
|
1604
1767
|
}),
|
|
1605
1768
|
new Promise((resolve2) => {
|
|
1606
1769
|
timerId = setTimeout(() => {
|
|
1607
1770
|
controller.abort();
|
|
1608
|
-
|
|
1771
|
+
cleanUp();
|
|
1609
1772
|
resolve2(Result.error(onTimeout()));
|
|
1610
1773
|
}, ms);
|
|
1611
1774
|
})
|
|
@@ -1641,28 +1804,33 @@ var Resource;
|
|
|
1641
1804
|
release
|
|
1642
1805
|
});
|
|
1643
1806
|
Resource2.use = (f) => (resource) => Task.from(
|
|
1644
|
-
() => Deferred.toPromise(resource.acquire()).then(async (acquired) => {
|
|
1807
|
+
(signal) => Deferred.toPromise(resource.acquire(signal)).then(async (acquired) => {
|
|
1645
1808
|
if (Result.isError(acquired)) return acquired;
|
|
1646
1809
|
const a = acquired.value;
|
|
1647
|
-
|
|
1648
|
-
|
|
1649
|
-
|
|
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
|
+
}
|
|
1650
1816
|
})
|
|
1651
1817
|
);
|
|
1652
1818
|
Resource2.combine = (resourceA, resourceB) => ({
|
|
1653
1819
|
acquire: Task.from(
|
|
1654
|
-
() => Deferred.toPromise(resourceA.acquire()).then(async (acquiredA) => {
|
|
1820
|
+
(signal) => Deferred.toPromise(resourceA.acquire(signal)).then(async (acquiredA) => {
|
|
1655
1821
|
if (Result.isError(acquiredA)) return acquiredA;
|
|
1656
1822
|
const a = acquiredA.value;
|
|
1657
|
-
const acquiredB = await Deferred.toPromise(resourceB.acquire());
|
|
1823
|
+
const acquiredB = await Deferred.toPromise(resourceB.acquire(signal));
|
|
1658
1824
|
if (Result.isError(acquiredB)) {
|
|
1659
|
-
await Deferred.toPromise(resourceA.release(a)());
|
|
1825
|
+
await Deferred.toPromise(resourceA.release(a)(signal));
|
|
1660
1826
|
return acquiredB;
|
|
1661
1827
|
}
|
|
1662
1828
|
return Result.ok([a, acquiredB.value]);
|
|
1663
1829
|
})
|
|
1664
1830
|
),
|
|
1665
|
-
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
|
+
)
|
|
1666
1834
|
});
|
|
1667
1835
|
})(Resource || (Resource = {}));
|
|
1668
1836
|
|
|
@@ -1705,14 +1873,14 @@ var TaskMaybe;
|
|
|
1705
1873
|
TaskMaybe2.fromMaybe = (option) => Task.resolve(option);
|
|
1706
1874
|
TaskMaybe2.fromTask = (task) => Task.map(Maybe.some)(task);
|
|
1707
1875
|
TaskMaybe2.tryCatch = (f) => Task.from(
|
|
1708
|
-
() => f().then(Maybe.some).catch(() => Maybe.none())
|
|
1876
|
+
(signal) => f(signal).then(Maybe.some).catch(() => Maybe.none())
|
|
1709
1877
|
);
|
|
1710
1878
|
TaskMaybe2.map = (f) => (data) => Task.map(Maybe.map(f))(data);
|
|
1711
1879
|
TaskMaybe2.chain = (f) => (data) => Task.chain((option) => Maybe.isSome(option) ? f(option.value) : Task.resolve(Maybe.none()))(data);
|
|
1712
1880
|
TaskMaybe2.ap = (arg) => (data) => Task.from(
|
|
1713
|
-
() => Promise.all([
|
|
1714
|
-
Deferred.toPromise(data()),
|
|
1715
|
-
Deferred.toPromise(arg())
|
|
1881
|
+
(signal) => Promise.all([
|
|
1882
|
+
Deferred.toPromise(data(signal)),
|
|
1883
|
+
Deferred.toPromise(arg(signal))
|
|
1716
1884
|
]).then(([of_, oa]) => Maybe.ap(oa)(of_))
|
|
1717
1885
|
);
|
|
1718
1886
|
TaskMaybe2.fold = (onNone, onSome) => (data) => Task.map(Maybe.fold(onNone, onSome))(data);
|
|
@@ -1746,6 +1914,12 @@ var TaskResult;
|
|
|
1746
1914
|
TaskResult2.getOrElse = (defaultValue) => (data) => Task.map(Result.getOrElse(defaultValue))(data);
|
|
1747
1915
|
TaskResult2.tap = (f) => (data) => Task.map(Result.tap(f))(data);
|
|
1748
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
|
+
);
|
|
1749
1923
|
TaskResult2.run = (signal) => (task) => Deferred.toPromise(task(signal));
|
|
1750
1924
|
})(TaskResult || (TaskResult = {}));
|
|
1751
1925
|
|
|
@@ -1819,13 +1993,13 @@ var TaskValidation;
|
|
|
1819
1993
|
TaskValidation2.invalidAll = (errors) => Task.resolve(Validation.invalidAll(errors));
|
|
1820
1994
|
TaskValidation2.fromValidation = (validation) => Task.resolve(validation);
|
|
1821
1995
|
TaskValidation2.tryCatch = (f, onError) => Task.from(
|
|
1822
|
-
() => f().then(Validation.valid).catch((e) => Validation.invalid(onError(e)))
|
|
1996
|
+
(signal) => f(signal).then(Validation.valid).catch((e) => Validation.invalid(onError(e)))
|
|
1823
1997
|
);
|
|
1824
1998
|
TaskValidation2.map = (f) => (data) => Task.map(Validation.map(f))(data);
|
|
1825
1999
|
TaskValidation2.ap = (arg) => (data) => Task.from(
|
|
1826
|
-
() => Promise.all([
|
|
1827
|
-
Deferred.toPromise(data()),
|
|
1828
|
-
Deferred.toPromise(arg())
|
|
2000
|
+
(signal) => Promise.all([
|
|
2001
|
+
Deferred.toPromise(data(signal)),
|
|
2002
|
+
Deferred.toPromise(arg(signal))
|
|
1829
2003
|
]).then(([vf, va]) => Validation.ap(va)(vf))
|
|
1830
2004
|
);
|
|
1831
2005
|
TaskValidation2.fold = (onInvalid, onValid) => (data) => Task.map(Validation.fold(onInvalid, onValid))(data);
|
|
@@ -1836,13 +2010,13 @@ var TaskValidation;
|
|
|
1836
2010
|
(validation) => Validation.isValid(validation) ? Task.resolve(validation) : fallback(validation.errors)
|
|
1837
2011
|
)(data);
|
|
1838
2012
|
TaskValidation2.product = (first, second) => Task.from(
|
|
1839
|
-
() => Promise.all([
|
|
1840
|
-
Deferred.toPromise(first()),
|
|
1841
|
-
Deferred.toPromise(second())
|
|
2013
|
+
(signal) => Promise.all([
|
|
2014
|
+
Deferred.toPromise(first(signal)),
|
|
2015
|
+
Deferred.toPromise(second(signal))
|
|
1842
2016
|
]).then(([va, vb]) => Validation.product(va, vb))
|
|
1843
2017
|
);
|
|
1844
2018
|
TaskValidation2.productAll = (data) => Task.from(
|
|
1845
|
-
() => 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))
|
|
1846
2020
|
);
|
|
1847
2021
|
})(TaskValidation || (TaskValidation = {}));
|
|
1848
2022
|
|
|
@@ -2019,11 +2193,25 @@ var Arr;
|
|
|
2019
2193
|
}
|
|
2020
2194
|
return result;
|
|
2021
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
|
+
};
|
|
2022
2205
|
Arr2.sortBy = (compare) => (data) => {
|
|
2023
2206
|
const arr = data;
|
|
2024
2207
|
if (typeof arr.toSorted === "function") return arr.toSorted(compare);
|
|
2025
2208
|
return [...data].sort(compare);
|
|
2026
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
|
+
};
|
|
2027
2215
|
Arr2.zip = (other) => (data) => {
|
|
2028
2216
|
const len = Math.min(data.length, other.length);
|
|
2029
2217
|
const result = new Array(len);
|
|
@@ -2056,7 +2244,23 @@ var Arr;
|
|
|
2056
2244
|
}
|
|
2057
2245
|
return result;
|
|
2058
2246
|
};
|
|
2059
|
-
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
|
+
};
|
|
2060
2264
|
Arr2.flatMap = (f) => (data) => {
|
|
2061
2265
|
const n = data.length;
|
|
2062
2266
|
const result = [];
|
|
@@ -2295,8 +2499,8 @@ var Num;
|
|
|
2295
2499
|
}
|
|
2296
2500
|
return result;
|
|
2297
2501
|
};
|
|
2298
|
-
Num2.clamp = (
|
|
2299
|
-
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;
|
|
2300
2504
|
Num2.parse = (s) => {
|
|
2301
2505
|
if (s.trim() === "") return Maybe.none();
|
|
2302
2506
|
const n = Number(s);
|
|
@@ -2312,6 +2516,28 @@ var Num;
|
|
|
2312
2516
|
Num2.floor = (n) => Math.floor(n);
|
|
2313
2517
|
Num2.ceil = (n) => Math.ceil(n);
|
|
2314
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
|
+
};
|
|
2315
2541
|
})(Num || (Num = {}));
|
|
2316
2542
|
|
|
2317
2543
|
// src/Utils/Rec.ts
|
|
@@ -2435,6 +2661,7 @@ var Str;
|
|
|
2435
2661
|
Str2.endsWith = (suffix) => (s) => s.endsWith(suffix);
|
|
2436
2662
|
Str2.toUpperCase = (s) => s.toUpperCase();
|
|
2437
2663
|
Str2.toLowerCase = (s) => s.toLowerCase();
|
|
2664
|
+
Str2.capitalize = (s) => s.length === 0 ? "" : s.charAt(0).toUpperCase() + s.slice(1);
|
|
2438
2665
|
Str2.lines = (s) => s.split(/\r?\n|\r/);
|
|
2439
2666
|
Str2.words = (s) => s.trim().split(/\s+/).filter(Boolean);
|
|
2440
2667
|
Str2.isEmpty = (s) => s.length === 0;
|
|
@@ -2552,14 +2779,18 @@ var Uniq;
|
|
|
2552
2779
|
0 && (module.exports = {
|
|
2553
2780
|
Arr,
|
|
2554
2781
|
Brand,
|
|
2782
|
+
Combinable,
|
|
2555
2783
|
Deferred,
|
|
2556
2784
|
Dict,
|
|
2785
|
+
Equality,
|
|
2786
|
+
Lazy,
|
|
2557
2787
|
Lens,
|
|
2558
2788
|
Logged,
|
|
2559
2789
|
Maybe,
|
|
2560
2790
|
Num,
|
|
2561
2791
|
Op,
|
|
2562
2792
|
Optional,
|
|
2793
|
+
Ordering,
|
|
2563
2794
|
Predicate,
|
|
2564
2795
|
Reader,
|
|
2565
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,
|