@nlozgachev/pipelined 0.37.0 → 0.38.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/README.md +18 -7
- package/dist/{Task-fn1n--6H.d.mts → Task-DcXhCZYg.d.mts} +429 -403
- package/dist/{Task-DIgwvoIb.d.ts → Task-uupX7xd9.d.ts} +429 -403
- package/dist/{chunk-VWVPHDZO.mjs → chunk-5AFEEFE4.mjs} +5 -1
- package/dist/{chunk-72BGUEQM.mjs → chunk-E7YI5PVW.mjs} +2 -2
- package/dist/{chunk-SHO53CQC.mjs → chunk-M2X7TFKN.mjs} +483 -103
- package/dist/core.d.mts +683 -651
- package/dist/core.d.ts +683 -651
- package/dist/core.js +319 -261
- package/dist/core.mjs +6 -8
- package/dist/index.d.mts +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +336 -278
- package/dist/index.mjs +16 -21
- package/dist/types.d.mts +29 -29
- package/dist/types.d.ts +29 -29
- package/dist/types.mjs +3 -6
- package/dist/utils.d.mts +1 -1
- package/dist/utils.d.ts +1 -1
- package/dist/utils.js +81 -55
- package/dist/utils.mjs +3 -4
- package/package.json +10 -3
- package/dist/chunk-DBIC62UV.mjs +0 -6
- package/dist/chunk-IPP4XFYH.mjs +0 -0
- package/dist/chunk-PUMSVZB4.mjs +0 -334
|
@@ -1,12 +1,6 @@
|
|
|
1
|
-
import {
|
|
2
|
-
Deferred,
|
|
3
|
-
Maybe,
|
|
4
|
-
Result,
|
|
5
|
-
Task
|
|
6
|
-
} from "./chunk-PUMSVZB4.mjs";
|
|
7
1
|
import {
|
|
8
2
|
Duration
|
|
9
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-5AFEEFE4.mjs";
|
|
10
4
|
|
|
11
5
|
// src/Core/Combinable.ts
|
|
12
6
|
var Combinable;
|
|
@@ -24,6 +18,16 @@ var Combinable;
|
|
|
24
18
|
Combinable2.fold = (c) => (data) => data.reduce((acc, x) => c.combine(x)(acc), c.empty);
|
|
25
19
|
})(Combinable || (Combinable = {}));
|
|
26
20
|
|
|
21
|
+
// src/Core/Deferred.ts
|
|
22
|
+
var Deferred;
|
|
23
|
+
((Deferred2) => {
|
|
24
|
+
Deferred2.fromPromise = (p) => (
|
|
25
|
+
// eslint-disable-next-line unicorn/no-thenable -- Deferred is intentionally thenable; it is the mechanism that makes Task awaitable
|
|
26
|
+
{ then: ((f) => p.then(f)) }
|
|
27
|
+
);
|
|
28
|
+
Deferred2.toPromise = (d) => new Promise((resolve) => d.then(resolve));
|
|
29
|
+
})(Deferred || (Deferred = {}));
|
|
30
|
+
|
|
27
31
|
// src/Core/Equality.ts
|
|
28
32
|
var Equality;
|
|
29
33
|
((Equality2) => {
|
|
@@ -64,18 +68,18 @@ var Lazy;
|
|
|
64
68
|
|
|
65
69
|
// src/Core/Lens.ts
|
|
66
70
|
var Lens;
|
|
67
|
-
((
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
71
|
+
((Lens3) => {
|
|
72
|
+
Lens3.make = (get2, set2) => ({ get: get2, set: set2 });
|
|
73
|
+
Lens3.prop = () => (key) => (0, Lens3.make)((s) => s[key], (a) => (s) => ({ ...s, [key]: a }));
|
|
74
|
+
Lens3.get = (lens) => (s) => lens.get(s);
|
|
75
|
+
Lens3.set = (lens) => (a) => (s) => lens.set(a)(s);
|
|
76
|
+
Lens3.modify = (lens) => (f) => (s) => lens.set(f(lens.get(s)))(s);
|
|
77
|
+
Lens3.andThen = (inner) => (outer) => (0, Lens3.make)((s) => inner.get(outer.get(s)), (b) => (s) => outer.set(inner.set(b)(outer.get(s)))(s));
|
|
78
|
+
Lens3.andThenOptional = (inner) => (outer) => ({
|
|
75
79
|
get: (s) => inner.get(outer.get(s)),
|
|
76
80
|
set: (b) => (s) => outer.set(inner.set(b)(outer.get(s)))(s)
|
|
77
81
|
});
|
|
78
|
-
|
|
82
|
+
Lens3.toOptional = (lens) => ({
|
|
79
83
|
get: (s) => ({ kind: "Some", value: lens.get(s) }),
|
|
80
84
|
set: lens.set
|
|
81
85
|
});
|
|
@@ -109,6 +113,53 @@ var Logged;
|
|
|
109
113
|
)(data);
|
|
110
114
|
})(Logged || (Logged = {}));
|
|
111
115
|
|
|
116
|
+
// src/Core/Maybe.ts
|
|
117
|
+
var _none = { kind: "None" };
|
|
118
|
+
var Maybe;
|
|
119
|
+
((Maybe2) => {
|
|
120
|
+
Maybe2.some = (value) => ({ kind: "Some", value });
|
|
121
|
+
Maybe2.isSome = (data) => data.kind === "Some";
|
|
122
|
+
Maybe2.none = () => _none;
|
|
123
|
+
Maybe2.isNone = (data) => data.kind === "None";
|
|
124
|
+
Maybe2.fromNullable = (value) => value === null || value === void 0 ? (0, Maybe2.none)() : (0, Maybe2.some)(value);
|
|
125
|
+
Maybe2.toNullable = (data) => (0, Maybe2.isSome)(data) ? data.value : null;
|
|
126
|
+
Maybe2.toUndefined = (data) => (0, Maybe2.isSome)(data) ? data.value : void 0;
|
|
127
|
+
Maybe2.fromPredicate = (pred) => (a) => pred(a) ? (0, Maybe2.some)(a) : (0, Maybe2.none)();
|
|
128
|
+
Maybe2.toResult = (onNone) => (data) => (0, Maybe2.isSome)(data) ? Result.ok(data.value) : Result.err(onNone());
|
|
129
|
+
Maybe2.fromResult = (data) => Result.isOk(data) ? (0, Maybe2.some)(data.value) : (0, Maybe2.none)();
|
|
130
|
+
Maybe2.map = (f) => (data) => (0, Maybe2.isSome)(data) ? (0, Maybe2.some)(f(data.value)) : data;
|
|
131
|
+
Maybe2.chain = (f) => (data) => (0, Maybe2.isSome)(data) ? f(data.value) : data;
|
|
132
|
+
Maybe2.fold = (onNone, onSome) => (data) => (0, Maybe2.isSome)(data) ? onSome(data.value) : onNone();
|
|
133
|
+
Maybe2.match = (cases) => (data) => (0, Maybe2.isSome)(data) ? cases.some(data.value) : cases.none();
|
|
134
|
+
Maybe2.getOrElse = (defaultValue) => (data) => (0, Maybe2.isSome)(data) ? data.value : defaultValue();
|
|
135
|
+
Maybe2.tap = (f) => (data) => {
|
|
136
|
+
if ((0, Maybe2.isSome)(data)) {
|
|
137
|
+
f(data.value);
|
|
138
|
+
}
|
|
139
|
+
return data;
|
|
140
|
+
};
|
|
141
|
+
Maybe2.filter = (predicate) => (data) => (0, Maybe2.isSome)(data) ? predicate(data.value) ? data : (0, Maybe2.none)() : data;
|
|
142
|
+
Maybe2.recover = (fallback) => (data) => (0, Maybe2.isSome)(data) ? data : fallback();
|
|
143
|
+
Maybe2.ap = (arg) => (data) => (0, Maybe2.isSome)(data) && (0, Maybe2.isSome)(arg) ? (0, Maybe2.some)(data.value(arg.value)) : (0, Maybe2.none)();
|
|
144
|
+
Maybe2.bindTo = (key) => (data) => (0, Maybe2.map)((a) => ({ [key]: a }))(data);
|
|
145
|
+
Maybe2.bind = (key, f) => (data) => (0, Maybe2.chain)(
|
|
146
|
+
(a) => (0, Maybe2.map)((b) => ({ ...a, [key]: b }))(f(a))
|
|
147
|
+
)(data);
|
|
148
|
+
Maybe2.struct = (fields) => {
|
|
149
|
+
const result = {};
|
|
150
|
+
for (const key in fields) {
|
|
151
|
+
if (Object.hasOwn(fields, key)) {
|
|
152
|
+
const res = fields[key];
|
|
153
|
+
if ((0, Maybe2.isNone)(res)) {
|
|
154
|
+
return res;
|
|
155
|
+
}
|
|
156
|
+
result[key] = res.value;
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
return (0, Maybe2.some)(result);
|
|
160
|
+
};
|
|
161
|
+
})(Maybe || (Maybe = {}));
|
|
162
|
+
|
|
112
163
|
// src/internal/Op.util.ts
|
|
113
164
|
var _abortedNil = { kind: "OpNil", reason: "aborted" };
|
|
114
165
|
var _droppedNil = { kind: "OpNil", reason: "dropped" };
|
|
@@ -1428,6 +1479,71 @@ var Resource;
|
|
|
1428
1479
|
});
|
|
1429
1480
|
})(Resource || (Resource = {}));
|
|
1430
1481
|
|
|
1482
|
+
// src/Core/Result.ts
|
|
1483
|
+
var Result;
|
|
1484
|
+
((Result4) => {
|
|
1485
|
+
Result4.ok = (value) => ({ kind: "Ok", value });
|
|
1486
|
+
Result4.err = (e) => ({ kind: "Err", error: e });
|
|
1487
|
+
Result4.isOk = (data) => data.kind === "Ok";
|
|
1488
|
+
Result4.isErr = (data) => data.kind === "Err";
|
|
1489
|
+
Result4.tryCatch = (f, onError) => {
|
|
1490
|
+
try {
|
|
1491
|
+
return (0, Result4.ok)(f());
|
|
1492
|
+
} catch (error) {
|
|
1493
|
+
return (0, Result4.err)(onError(error));
|
|
1494
|
+
}
|
|
1495
|
+
};
|
|
1496
|
+
Result4.map = (f) => (data) => (0, Result4.isOk)(data) ? (0, Result4.ok)(f(data.value)) : data;
|
|
1497
|
+
Result4.mapError = (f) => (data) => (0, Result4.isErr)(data) ? (0, Result4.err)(f(data.error)) : data;
|
|
1498
|
+
Result4.chain = (f) => (data) => (0, Result4.isOk)(data) ? f(data.value) : data;
|
|
1499
|
+
Result4.fold = (onErr, onOk) => (data) => (0, Result4.isOk)(data) ? onOk(data.value) : onErr(data.error);
|
|
1500
|
+
Result4.match = (cases) => (data) => (0, Result4.isOk)(data) ? cases.ok(data.value) : cases.err(data.error);
|
|
1501
|
+
Result4.getOrElse = (defaultValue) => (data) => (0, Result4.isOk)(data) ? data.value : defaultValue();
|
|
1502
|
+
Result4.tap = (f) => (data) => {
|
|
1503
|
+
if ((0, Result4.isOk)(data)) {
|
|
1504
|
+
f(data.value);
|
|
1505
|
+
}
|
|
1506
|
+
return data;
|
|
1507
|
+
};
|
|
1508
|
+
Result4.tapError = (f) => (data) => {
|
|
1509
|
+
if ((0, Result4.isErr)(data)) {
|
|
1510
|
+
f(data.error);
|
|
1511
|
+
}
|
|
1512
|
+
return data;
|
|
1513
|
+
};
|
|
1514
|
+
Result4.fromPredicate = (pred, onFalse) => (a) => pred(a) ? (0, Result4.ok)(a) : (0, Result4.err)(onFalse(a));
|
|
1515
|
+
Result4.fromNullable = (onNull) => (value) => value === null || value === void 0 ? (0, Result4.err)(onNull()) : (0, Result4.ok)(value);
|
|
1516
|
+
Result4.fromMaybe = (onNone) => (maybe) => Maybe.isNone(maybe) ? (0, Result4.err)(onNone()) : (0, Result4.ok)(maybe.value);
|
|
1517
|
+
Result4.fromThrowable = (f, onError) => (...args) => {
|
|
1518
|
+
try {
|
|
1519
|
+
return (0, Result4.ok)(f(...args));
|
|
1520
|
+
} catch (error) {
|
|
1521
|
+
return (0, Result4.err)(onError(error));
|
|
1522
|
+
}
|
|
1523
|
+
};
|
|
1524
|
+
Result4.recover = (fallback) => (data) => (0, Result4.isOk)(data) ? data : fallback(data.error);
|
|
1525
|
+
Result4.recoverUnless = (isBlocked, fallback) => (data) => (0, Result4.isErr)(data) && !isBlocked(data.error) ? fallback() : data;
|
|
1526
|
+
Result4.toMaybe = (data) => (0, Result4.isOk)(data) ? Maybe.some(data.value) : Maybe.none();
|
|
1527
|
+
Result4.ap = (arg) => (data) => (0, Result4.isOk)(data) && (0, Result4.isOk)(arg) ? (0, Result4.ok)(data.value(arg.value)) : (0, Result4.isErr)(data) ? data : arg;
|
|
1528
|
+
Result4.bindTo = (key) => (data) => (0, Result4.map)((a) => ({ [key]: a }))(data);
|
|
1529
|
+
Result4.bind = (key, f) => (data) => (0, Result4.chain)(
|
|
1530
|
+
(a) => (0, Result4.map)((b) => ({ ...a, [key]: b }))(f(a))
|
|
1531
|
+
)(data);
|
|
1532
|
+
Result4.struct = (fields) => {
|
|
1533
|
+
const result = {};
|
|
1534
|
+
for (const key in fields) {
|
|
1535
|
+
if (Object.hasOwn(fields, key)) {
|
|
1536
|
+
const res = fields[key];
|
|
1537
|
+
if ((0, Result4.isErr)(res)) {
|
|
1538
|
+
return res;
|
|
1539
|
+
}
|
|
1540
|
+
result[key] = res.value;
|
|
1541
|
+
}
|
|
1542
|
+
}
|
|
1543
|
+
return (0, Result4.ok)(result);
|
|
1544
|
+
};
|
|
1545
|
+
})(Result || (Result = {}));
|
|
1546
|
+
|
|
1431
1547
|
// src/Core/State.ts
|
|
1432
1548
|
var State;
|
|
1433
1549
|
((State2) => {
|
|
@@ -1463,6 +1579,234 @@ var State;
|
|
|
1463
1579
|
)(data);
|
|
1464
1580
|
})(State || (State = {}));
|
|
1465
1581
|
|
|
1582
|
+
// src/Core/Task.ts
|
|
1583
|
+
var toPromise = (task, signal) => Deferred.toPromise(task(signal));
|
|
1584
|
+
var getMs2 = (duration) => Duration.toMilliseconds(duration);
|
|
1585
|
+
var Task;
|
|
1586
|
+
((Task2) => {
|
|
1587
|
+
Task2.resolve = (value) => () => Deferred.fromPromise(Promise.resolve(value));
|
|
1588
|
+
Task2.from = (f) => (signal) => Deferred.fromPromise(f(signal));
|
|
1589
|
+
Task2.fromSync = (f) => () => Deferred.fromPromise(Promise.resolve(f()));
|
|
1590
|
+
Task2.map = (f) => (data) => (0, Task2.from)((signal) => toPromise(data, signal).then(f));
|
|
1591
|
+
Task2.chain = (f) => (data) => (0, Task2.from)((signal) => toPromise(data, signal).then((a) => toPromise(f(a), signal)));
|
|
1592
|
+
Task2.ap = (arg) => (data) => (0, Task2.from)((signal) => Promise.all([toPromise(data, signal), toPromise(arg, signal)]).then(([f, a]) => f(a)));
|
|
1593
|
+
Task2.tap = (f) => (data) => (0, Task2.from)(
|
|
1594
|
+
(signal) => toPromise(data, signal).then((a) => {
|
|
1595
|
+
f(a);
|
|
1596
|
+
return a;
|
|
1597
|
+
})
|
|
1598
|
+
);
|
|
1599
|
+
Task2.all = (tasks) => (0, Task2.from)(
|
|
1600
|
+
(signal) => Promise.all(tasks.map((t) => toPromise(t, signal)))
|
|
1601
|
+
);
|
|
1602
|
+
Task2.delay = (duration) => (data) => (0, Task2.from)(
|
|
1603
|
+
(signal) => new Promise((res) => {
|
|
1604
|
+
let timerId;
|
|
1605
|
+
const onAbort = () => {
|
|
1606
|
+
if (timerId !== void 0) {
|
|
1607
|
+
clearTimeout(timerId);
|
|
1608
|
+
}
|
|
1609
|
+
res(toPromise(data, signal));
|
|
1610
|
+
};
|
|
1611
|
+
if (signal) {
|
|
1612
|
+
if (signal.aborted) {
|
|
1613
|
+
return res(toPromise(data, signal));
|
|
1614
|
+
}
|
|
1615
|
+
signal.addEventListener("abort", onAbort, { once: true });
|
|
1616
|
+
}
|
|
1617
|
+
timerId = setTimeout(() => {
|
|
1618
|
+
signal?.removeEventListener("abort", onAbort);
|
|
1619
|
+
res(toPromise(data, signal));
|
|
1620
|
+
}, getMs2(duration));
|
|
1621
|
+
})
|
|
1622
|
+
);
|
|
1623
|
+
Task2.repeat = (options) => (task) => (0, Task2.from)((signal) => {
|
|
1624
|
+
const { times, delay: delayDuration } = options;
|
|
1625
|
+
if (times <= 0) {
|
|
1626
|
+
return Promise.resolve([]);
|
|
1627
|
+
}
|
|
1628
|
+
const results = [];
|
|
1629
|
+
const wait = () => {
|
|
1630
|
+
if (signal?.aborted) {
|
|
1631
|
+
return Promise.resolve();
|
|
1632
|
+
}
|
|
1633
|
+
return new Promise((r) => {
|
|
1634
|
+
let timerId;
|
|
1635
|
+
const onAbort = () => {
|
|
1636
|
+
if (timerId !== void 0) {
|
|
1637
|
+
clearTimeout(timerId);
|
|
1638
|
+
}
|
|
1639
|
+
r();
|
|
1640
|
+
};
|
|
1641
|
+
if (signal) {
|
|
1642
|
+
signal.addEventListener("abort", onAbort, { once: true });
|
|
1643
|
+
}
|
|
1644
|
+
timerId = setTimeout(() => {
|
|
1645
|
+
signal?.removeEventListener("abort", onAbort);
|
|
1646
|
+
r();
|
|
1647
|
+
}, delayDuration ? getMs2(delayDuration) : 0);
|
|
1648
|
+
});
|
|
1649
|
+
};
|
|
1650
|
+
const run2 = (left) => {
|
|
1651
|
+
if (signal?.aborted) {
|
|
1652
|
+
return Promise.resolve(results);
|
|
1653
|
+
}
|
|
1654
|
+
return toPromise(task, signal).then((a) => {
|
|
1655
|
+
results.push(a);
|
|
1656
|
+
if (left <= 1 || signal?.aborted) {
|
|
1657
|
+
return results;
|
|
1658
|
+
}
|
|
1659
|
+
return wait().then(() => run2(left - 1));
|
|
1660
|
+
});
|
|
1661
|
+
};
|
|
1662
|
+
return run2(times);
|
|
1663
|
+
});
|
|
1664
|
+
Task2.repeatUntil = (options) => (task) => (0, Task2.from)((signal) => {
|
|
1665
|
+
const { when: predicate, delay: delayDuration, maxAttempts } = options;
|
|
1666
|
+
const wait = () => {
|
|
1667
|
+
if (signal?.aborted) {
|
|
1668
|
+
return Promise.resolve();
|
|
1669
|
+
}
|
|
1670
|
+
return new Promise((r) => {
|
|
1671
|
+
let timerId;
|
|
1672
|
+
const onAbort = () => {
|
|
1673
|
+
if (timerId !== void 0) {
|
|
1674
|
+
clearTimeout(timerId);
|
|
1675
|
+
}
|
|
1676
|
+
r();
|
|
1677
|
+
};
|
|
1678
|
+
if (signal) {
|
|
1679
|
+
signal.addEventListener("abort", onAbort, { once: true });
|
|
1680
|
+
}
|
|
1681
|
+
timerId = setTimeout(() => {
|
|
1682
|
+
signal?.removeEventListener("abort", onAbort);
|
|
1683
|
+
r();
|
|
1684
|
+
}, delayDuration ? getMs2(delayDuration) : 0);
|
|
1685
|
+
});
|
|
1686
|
+
};
|
|
1687
|
+
const run2 = (attempt, lastValue) => {
|
|
1688
|
+
if (signal?.aborted && lastValue !== void 0) {
|
|
1689
|
+
return Promise.resolve(lastValue);
|
|
1690
|
+
}
|
|
1691
|
+
return toPromise(task, signal).then((a) => {
|
|
1692
|
+
if (predicate(a)) {
|
|
1693
|
+
return a;
|
|
1694
|
+
}
|
|
1695
|
+
if (maxAttempts !== void 0 && attempt >= maxAttempts) {
|
|
1696
|
+
return a;
|
|
1697
|
+
}
|
|
1698
|
+
if (signal?.aborted) {
|
|
1699
|
+
return a;
|
|
1700
|
+
}
|
|
1701
|
+
return wait().then(() => run2(attempt + 1, a));
|
|
1702
|
+
});
|
|
1703
|
+
};
|
|
1704
|
+
return run2(1);
|
|
1705
|
+
});
|
|
1706
|
+
Task2.race = (tasks) => {
|
|
1707
|
+
if (tasks.length === 0) {
|
|
1708
|
+
return () => Deferred.fromPromise(new Promise(() => {
|
|
1709
|
+
}));
|
|
1710
|
+
}
|
|
1711
|
+
return (0, Task2.from)((outerSignal) => {
|
|
1712
|
+
const controllers = tasks.map(() => new AbortController());
|
|
1713
|
+
const onOuterAbort = () => {
|
|
1714
|
+
for (const ctrl of controllers) {
|
|
1715
|
+
ctrl.abort();
|
|
1716
|
+
}
|
|
1717
|
+
};
|
|
1718
|
+
if (outerSignal) {
|
|
1719
|
+
if (outerSignal.aborted) {
|
|
1720
|
+
onOuterAbort();
|
|
1721
|
+
} else {
|
|
1722
|
+
outerSignal.addEventListener("abort", onOuterAbort, { once: true });
|
|
1723
|
+
}
|
|
1724
|
+
}
|
|
1725
|
+
const promises = tasks.map((task, idx) => {
|
|
1726
|
+
const ctrl = controllers[idx];
|
|
1727
|
+
return toPromise(task, ctrl.signal).then((result) => {
|
|
1728
|
+
for (let i = 0; i < controllers.length; i++) {
|
|
1729
|
+
if (i !== idx) {
|
|
1730
|
+
controllers[i].abort();
|
|
1731
|
+
}
|
|
1732
|
+
}
|
|
1733
|
+
outerSignal?.removeEventListener("abort", onOuterAbort);
|
|
1734
|
+
return result;
|
|
1735
|
+
});
|
|
1736
|
+
});
|
|
1737
|
+
return Promise.race(promises);
|
|
1738
|
+
});
|
|
1739
|
+
};
|
|
1740
|
+
Task2.sequence = (tasks) => (0, Task2.from)((signal) => Promise.all(tasks.map((t) => toPromise(t, signal))));
|
|
1741
|
+
Task2.sequential = (tasks) => (0, Task2.from)(async (signal) => {
|
|
1742
|
+
const results = [];
|
|
1743
|
+
for (const task of tasks) {
|
|
1744
|
+
if (signal?.aborted) {
|
|
1745
|
+
break;
|
|
1746
|
+
}
|
|
1747
|
+
results.push(await toPromise(task, signal));
|
|
1748
|
+
}
|
|
1749
|
+
return results;
|
|
1750
|
+
});
|
|
1751
|
+
Task2.timeout = (duration, onTimeout) => (task) => (0, Task2.from)((outerSignal) => {
|
|
1752
|
+
const controller = new AbortController();
|
|
1753
|
+
let timerId;
|
|
1754
|
+
function cleanUp() {
|
|
1755
|
+
if (timerId !== void 0) {
|
|
1756
|
+
clearTimeout(timerId);
|
|
1757
|
+
}
|
|
1758
|
+
outerSignal?.removeEventListener("abort", onOuterAbort);
|
|
1759
|
+
}
|
|
1760
|
+
function onOuterAbort() {
|
|
1761
|
+
cleanUp();
|
|
1762
|
+
controller.abort();
|
|
1763
|
+
}
|
|
1764
|
+
if (outerSignal) {
|
|
1765
|
+
if (outerSignal.aborted) {
|
|
1766
|
+
controller.abort();
|
|
1767
|
+
} else {
|
|
1768
|
+
outerSignal.addEventListener("abort", onOuterAbort, { once: true });
|
|
1769
|
+
}
|
|
1770
|
+
}
|
|
1771
|
+
return Promise.race([
|
|
1772
|
+
toPromise(task, controller.signal).then((a) => {
|
|
1773
|
+
cleanUp();
|
|
1774
|
+
return Result.ok(a);
|
|
1775
|
+
}),
|
|
1776
|
+
new Promise((res) => {
|
|
1777
|
+
timerId = setTimeout(() => {
|
|
1778
|
+
controller.abort();
|
|
1779
|
+
cleanUp();
|
|
1780
|
+
res(Result.err(onTimeout()));
|
|
1781
|
+
}, getMs2(duration));
|
|
1782
|
+
})
|
|
1783
|
+
]);
|
|
1784
|
+
});
|
|
1785
|
+
Task2.abortable = (factory) => {
|
|
1786
|
+
let currentController = null;
|
|
1787
|
+
const abort = () => currentController?.abort();
|
|
1788
|
+
const task = (outerSignal) => {
|
|
1789
|
+
currentController?.abort();
|
|
1790
|
+
currentController = new AbortController();
|
|
1791
|
+
const controller = currentController;
|
|
1792
|
+
if (outerSignal) {
|
|
1793
|
+
if (outerSignal.aborted) {
|
|
1794
|
+
controller.abort(outerSignal.reason);
|
|
1795
|
+
} else {
|
|
1796
|
+
outerSignal.addEventListener("abort", () => controller.abort(outerSignal.reason), { once: true });
|
|
1797
|
+
}
|
|
1798
|
+
}
|
|
1799
|
+
return Deferred.fromPromise(factory(controller.signal));
|
|
1800
|
+
};
|
|
1801
|
+
return { task, abort };
|
|
1802
|
+
};
|
|
1803
|
+
Task2.run = (signal) => (task) => Deferred.toPromise(task(signal));
|
|
1804
|
+
Task2.bindTo = (key) => (data) => (0, Task2.map)((a) => ({ [key]: a }))(data);
|
|
1805
|
+
Task2.bind = (key, f) => (data) => (0, Task2.chain)(
|
|
1806
|
+
(a) => (0, Task2.map)((b) => ({ ...a, [key]: b }))(f(a))
|
|
1807
|
+
)(data);
|
|
1808
|
+
})(Task || (Task = {}));
|
|
1809
|
+
|
|
1466
1810
|
// src/Core/TaskMaybe.ts
|
|
1467
1811
|
var TaskMaybe;
|
|
1468
1812
|
((TaskMaybe2) => {
|
|
@@ -1493,100 +1837,56 @@ var TaskMaybe;
|
|
|
1493
1837
|
})(TaskMaybe || (TaskMaybe = {}));
|
|
1494
1838
|
|
|
1495
1839
|
// src/Core/TaskResult.ts
|
|
1496
|
-
var
|
|
1497
|
-
((
|
|
1498
|
-
|
|
1499
|
-
|
|
1500
|
-
|
|
1501
|
-
|
|
1502
|
-
|
|
1503
|
-
|
|
1504
|
-
|
|
1505
|
-
|
|
1506
|
-
|
|
1507
|
-
|
|
1840
|
+
var TaskResult3;
|
|
1841
|
+
((TaskResult4) => {
|
|
1842
|
+
TaskResult4.ok = (value) => Task.resolve(Result.ok(value));
|
|
1843
|
+
TaskResult4.err = (error) => Task.resolve(Result.err(error));
|
|
1844
|
+
TaskResult4.fromNullable = (onNull) => (value) => Task.resolve(value === null || value === void 0 ? Result.err(onNull()) : Result.ok(value));
|
|
1845
|
+
TaskResult4.fromMaybe = (onNone) => (maybe) => Task.resolve(Maybe.isNone(maybe) ? Result.err(onNone()) : Result.ok(maybe.value));
|
|
1846
|
+
TaskResult4.fromResult = (result) => Task.resolve(result);
|
|
1847
|
+
TaskResult4.fromThrowable = (f, onError) => (...args) => Task.from(() => f(...args).then(Result.ok).catch((error) => Result.err(onError(error))));
|
|
1848
|
+
TaskResult4.tryCatch = (f, onError) => Task.from((signal) => f(signal).then(Result.ok).catch((error) => Result.err(onError(error))));
|
|
1849
|
+
TaskResult4.map = (f) => (data) => Task.map(Result.map(f))(data);
|
|
1850
|
+
TaskResult4.mapError = (f) => (data) => Task.map(Result.mapError(f))(data);
|
|
1851
|
+
TaskResult4.chain = (f) => (data) => Task.chain((result) => Result.isOk(result) ? f(result.value) : Task.resolve(Result.err(result.error)))(
|
|
1508
1852
|
data
|
|
1509
1853
|
);
|
|
1510
|
-
|
|
1511
|
-
|
|
1512
|
-
|
|
1854
|
+
TaskResult4.fold = (onErr, onOk) => (data) => Task.map(Result.fold(onErr, onOk))(data);
|
|
1855
|
+
TaskResult4.match = (cases) => (data) => Task.map(Result.match(cases))(data);
|
|
1856
|
+
TaskResult4.recover = (fallback) => (data) => Task.chain(
|
|
1513
1857
|
(result) => Result.isErr(result) ? fallback(result.error) : Task.resolve(result)
|
|
1514
1858
|
)(data);
|
|
1515
|
-
|
|
1516
|
-
|
|
1517
|
-
|
|
1518
|
-
|
|
1859
|
+
TaskResult4.getOrElse = (defaultValue) => (data) => Task.map(Result.getOrElse(defaultValue))(data);
|
|
1860
|
+
TaskResult4.tap = (f) => (data) => Task.map(Result.tap(f))(data);
|
|
1861
|
+
TaskResult4.tapError = (f) => (data) => Task.map(Result.tapError(f))(data);
|
|
1862
|
+
TaskResult4.ap = (arg) => (data) => Task.from(
|
|
1519
1863
|
(signal) => Promise.all([Deferred.toPromise(data(signal)), Deferred.toPromise(arg(signal))]).then(
|
|
1520
1864
|
([of_, oa]) => Result.ap(oa)(of_)
|
|
1521
1865
|
)
|
|
1522
1866
|
);
|
|
1523
|
-
|
|
1524
|
-
|
|
1525
|
-
|
|
1526
|
-
(a) => (0,
|
|
1867
|
+
TaskResult4.run = (signal) => (task) => Deferred.toPromise(task(signal));
|
|
1868
|
+
TaskResult4.bindTo = (key) => (data) => (0, TaskResult4.map)((a) => ({ [key]: a }))(data);
|
|
1869
|
+
TaskResult4.bind = (key, f) => (data) => (0, TaskResult4.chain)(
|
|
1870
|
+
(a) => (0, TaskResult4.map)((b) => ({ ...a, [key]: b }))(f(a))
|
|
1527
1871
|
)(data);
|
|
1528
|
-
|
|
1529
|
-
|
|
1530
|
-
|
|
1531
|
-
|
|
1532
|
-
|
|
1533
|
-
|
|
1534
|
-
|
|
1535
|
-
|
|
1536
|
-
|
|
1537
|
-
|
|
1538
|
-
|
|
1539
|
-
|
|
1540
|
-
|
|
1541
|
-
Validation2.map = (f) => (data) => (0, Validation2.isPassed)(data) ? (0, Validation2.passed)(f(data.value)) : data;
|
|
1542
|
-
Validation2.mapError = (f) => (data) => (0, Validation2.isFailed)(data) ? (0, Validation2.failedAll)(data.errors.map(f)) : data;
|
|
1543
|
-
Validation2.ap = (arg) => (data) => {
|
|
1544
|
-
if ((0, Validation2.isPassed)(data) && (0, Validation2.isPassed)(arg)) {
|
|
1545
|
-
return (0, Validation2.passed)(data.value(arg.value));
|
|
1546
|
-
}
|
|
1547
|
-
const errors = [...(0, Validation2.isFailed)(data) ? data.errors : [], ...(0, Validation2.isFailed)(arg) ? arg.errors : []];
|
|
1548
|
-
return (0, Validation2.failedAll)(errors);
|
|
1549
|
-
};
|
|
1550
|
-
Validation2.fold = (onFailed, onPassed) => (data) => (0, Validation2.isPassed)(data) ? onPassed(data.value) : onFailed(data.errors);
|
|
1551
|
-
Validation2.match = (cases) => (data) => (0, Validation2.isPassed)(data) ? cases.passed(data.value) : cases.failed(data.errors);
|
|
1552
|
-
Validation2.getOrElse = (defaultValue) => (data) => (0, Validation2.isPassed)(data) ? data.value : defaultValue();
|
|
1553
|
-
Validation2.tap = (f) => (data) => {
|
|
1554
|
-
if ((0, Validation2.isPassed)(data)) {
|
|
1555
|
-
f(data.value);
|
|
1556
|
-
}
|
|
1557
|
-
return data;
|
|
1558
|
-
};
|
|
1559
|
-
Validation2.tapError = (f) => (data) => {
|
|
1560
|
-
if ((0, Validation2.isFailed)(data)) {
|
|
1561
|
-
f(data.errors);
|
|
1562
|
-
}
|
|
1563
|
-
return data;
|
|
1564
|
-
};
|
|
1565
|
-
Validation2.recover = (fallback) => (data) => (0, Validation2.isPassed)(data) ? data : fallback(data.errors);
|
|
1566
|
-
Validation2.recoverUnless = (isBlocked, fallback) => (data) => (0, Validation2.isFailed)(data) && !data.errors.some(isBlocked) ? fallback() : data;
|
|
1567
|
-
Validation2.toResult = (data) => (0, Validation2.isPassed)(data) ? Result.ok(data.value) : Result.err(data.errors);
|
|
1568
|
-
Validation2.toMaybe = (data) => (0, Validation2.isPassed)(data) ? Maybe.some(data.value) : Maybe.none();
|
|
1569
|
-
Validation2.fromResult = (data) => data.kind === "Ok" ? (0, Validation2.passed)(data.value) : (0, Validation2.failed)(data.error);
|
|
1570
|
-
Validation2.product = (first, second) => {
|
|
1571
|
-
if ((0, Validation2.isPassed)(first) && (0, Validation2.isPassed)(second)) {
|
|
1572
|
-
return (0, Validation2.passed)([first.value, second.value]);
|
|
1573
|
-
}
|
|
1574
|
-
const errors = [...(0, Validation2.isFailed)(first) ? first.errors : [], ...(0, Validation2.isFailed)(second) ? second.errors : []];
|
|
1575
|
-
return (0, Validation2.failedAll)(errors);
|
|
1576
|
-
};
|
|
1577
|
-
Validation2.productAll = (data) => {
|
|
1578
|
-
const values = [];
|
|
1579
|
-
const errors = [];
|
|
1580
|
-
for (const v of data) {
|
|
1581
|
-
if ((0, Validation2.isPassed)(v)) {
|
|
1582
|
-
values.push(v.value);
|
|
1583
|
-
} else {
|
|
1584
|
-
errors.push(...v.errors);
|
|
1872
|
+
TaskResult4.struct = (fields) => Task.from((signal) => {
|
|
1873
|
+
const keys = Object.keys(fields);
|
|
1874
|
+
const promises = keys.map((key) => Deferred.toPromise(fields[key](signal)).then((res) => ({ key, res })));
|
|
1875
|
+
return Promise.all(promises).then((results) => {
|
|
1876
|
+
const record = {};
|
|
1877
|
+
for (const key of keys) {
|
|
1878
|
+
const found = results.find((r) => r.key === key);
|
|
1879
|
+
if (found) {
|
|
1880
|
+
if (Result.isErr(found.res)) {
|
|
1881
|
+
return found.res;
|
|
1882
|
+
}
|
|
1883
|
+
record[key] = found.res.value;
|
|
1884
|
+
}
|
|
1585
1885
|
}
|
|
1586
|
-
|
|
1587
|
-
|
|
1588
|
-
};
|
|
1589
|
-
})(
|
|
1886
|
+
return Result.ok(record);
|
|
1887
|
+
});
|
|
1888
|
+
});
|
|
1889
|
+
})(TaskResult3 || (TaskResult3 = {}));
|
|
1590
1890
|
|
|
1591
1891
|
// src/Core/TaskValidation.ts
|
|
1592
1892
|
var TaskValidation;
|
|
@@ -1732,12 +2032,90 @@ var Tuple;
|
|
|
1732
2032
|
};
|
|
1733
2033
|
})(Tuple || (Tuple = {}));
|
|
1734
2034
|
|
|
2035
|
+
// src/Core/Validation.ts
|
|
2036
|
+
var Validation;
|
|
2037
|
+
((Validation2) => {
|
|
2038
|
+
Validation2.passed = (value) => ({ kind: "Passed", value });
|
|
2039
|
+
Validation2.failed = (error) => ({ kind: "Failed", errors: [error] });
|
|
2040
|
+
Validation2.failedAll = (errors) => ({ kind: "Failed", errors });
|
|
2041
|
+
Validation2.isPassed = (data) => data.kind === "Passed";
|
|
2042
|
+
Validation2.isFailed = (data) => data.kind === "Failed";
|
|
2043
|
+
Validation2.fromPredicate = (pred, onFalse) => (a) => pred(a) ? (0, Validation2.passed)(a) : (0, Validation2.failed)(onFalse(a));
|
|
2044
|
+
Validation2.fromNullable = (onNull) => (value) => value === null || value === void 0 ? (0, Validation2.failed)(onNull()) : (0, Validation2.passed)(value);
|
|
2045
|
+
Validation2.fromMaybe = (onNone) => (maybe) => Maybe.isNone(maybe) ? (0, Validation2.failed)(onNone()) : (0, Validation2.passed)(maybe.value);
|
|
2046
|
+
Validation2.map = (f) => (data) => (0, Validation2.isPassed)(data) ? (0, Validation2.passed)(f(data.value)) : data;
|
|
2047
|
+
Validation2.mapError = (f) => (data) => (0, Validation2.isFailed)(data) ? (0, Validation2.failedAll)(data.errors.map(f)) : data;
|
|
2048
|
+
Validation2.ap = (arg) => (data) => {
|
|
2049
|
+
if ((0, Validation2.isPassed)(data) && (0, Validation2.isPassed)(arg)) {
|
|
2050
|
+
return (0, Validation2.passed)(data.value(arg.value));
|
|
2051
|
+
}
|
|
2052
|
+
const errors = [...(0, Validation2.isFailed)(data) ? data.errors : [], ...(0, Validation2.isFailed)(arg) ? arg.errors : []];
|
|
2053
|
+
return (0, Validation2.failedAll)(errors);
|
|
2054
|
+
};
|
|
2055
|
+
Validation2.fold = (onFailed, onPassed) => (data) => (0, Validation2.isPassed)(data) ? onPassed(data.value) : onFailed(data.errors);
|
|
2056
|
+
Validation2.match = (cases) => (data) => (0, Validation2.isPassed)(data) ? cases.passed(data.value) : cases.failed(data.errors);
|
|
2057
|
+
Validation2.getOrElse = (defaultValue) => (data) => (0, Validation2.isPassed)(data) ? data.value : defaultValue();
|
|
2058
|
+
Validation2.tap = (f) => (data) => {
|
|
2059
|
+
if ((0, Validation2.isPassed)(data)) {
|
|
2060
|
+
f(data.value);
|
|
2061
|
+
}
|
|
2062
|
+
return data;
|
|
2063
|
+
};
|
|
2064
|
+
Validation2.tapError = (f) => (data) => {
|
|
2065
|
+
if ((0, Validation2.isFailed)(data)) {
|
|
2066
|
+
f(data.errors);
|
|
2067
|
+
}
|
|
2068
|
+
return data;
|
|
2069
|
+
};
|
|
2070
|
+
Validation2.recover = (fallback) => (data) => (0, Validation2.isPassed)(data) ? data : fallback(data.errors);
|
|
2071
|
+
Validation2.recoverUnless = (isBlocked, fallback) => (data) => (0, Validation2.isFailed)(data) && !data.errors.some(isBlocked) ? fallback() : data;
|
|
2072
|
+
Validation2.toResult = (data) => (0, Validation2.isPassed)(data) ? Result.ok(data.value) : Result.err(data.errors);
|
|
2073
|
+
Validation2.toMaybe = (data) => (0, Validation2.isPassed)(data) ? Maybe.some(data.value) : Maybe.none();
|
|
2074
|
+
Validation2.fromResult = (data) => data.kind === "Ok" ? (0, Validation2.passed)(data.value) : (0, Validation2.failed)(data.error);
|
|
2075
|
+
Validation2.product = (first, second) => {
|
|
2076
|
+
if ((0, Validation2.isPassed)(first) && (0, Validation2.isPassed)(second)) {
|
|
2077
|
+
return (0, Validation2.passed)([first.value, second.value]);
|
|
2078
|
+
}
|
|
2079
|
+
const errors = [...(0, Validation2.isFailed)(first) ? first.errors : [], ...(0, Validation2.isFailed)(second) ? second.errors : []];
|
|
2080
|
+
return (0, Validation2.failedAll)(errors);
|
|
2081
|
+
};
|
|
2082
|
+
Validation2.productAll = (data) => {
|
|
2083
|
+
const values = [];
|
|
2084
|
+
const errors = [];
|
|
2085
|
+
for (const v of data) {
|
|
2086
|
+
if ((0, Validation2.isPassed)(v)) {
|
|
2087
|
+
values.push(v.value);
|
|
2088
|
+
} else {
|
|
2089
|
+
errors.push(...v.errors);
|
|
2090
|
+
}
|
|
2091
|
+
}
|
|
2092
|
+
return errors.length > 0 ? (0, Validation2.failedAll)(errors) : (0, Validation2.passed)(values);
|
|
2093
|
+
};
|
|
2094
|
+
Validation2.struct = (fields) => {
|
|
2095
|
+
const record = {};
|
|
2096
|
+
const errors = [];
|
|
2097
|
+
for (const key in fields) {
|
|
2098
|
+
if (Object.hasOwn(fields, key)) {
|
|
2099
|
+
const val = fields[key];
|
|
2100
|
+
if ((0, Validation2.isPassed)(val)) {
|
|
2101
|
+
record[key] = val.value;
|
|
2102
|
+
} else {
|
|
2103
|
+
errors.push(...val.errors);
|
|
2104
|
+
}
|
|
2105
|
+
}
|
|
2106
|
+
}
|
|
2107
|
+
return errors.length > 0 ? (0, Validation2.failedAll)(errors) : (0, Validation2.passed)(record);
|
|
2108
|
+
};
|
|
2109
|
+
})(Validation || (Validation = {}));
|
|
2110
|
+
|
|
1735
2111
|
export {
|
|
1736
2112
|
Combinable,
|
|
2113
|
+
Deferred,
|
|
1737
2114
|
Equality,
|
|
1738
2115
|
Lazy,
|
|
1739
2116
|
Lens,
|
|
1740
2117
|
Logged,
|
|
2118
|
+
Maybe,
|
|
1741
2119
|
Op,
|
|
1742
2120
|
Optional,
|
|
1743
2121
|
Ordering,
|
|
@@ -1746,11 +2124,13 @@ export {
|
|
|
1746
2124
|
Refinement,
|
|
1747
2125
|
RemoteData,
|
|
1748
2126
|
Resource,
|
|
2127
|
+
Result,
|
|
1749
2128
|
State,
|
|
2129
|
+
Task,
|
|
1750
2130
|
TaskMaybe,
|
|
1751
|
-
TaskResult,
|
|
1752
|
-
Validation,
|
|
2131
|
+
TaskResult3 as TaskResult,
|
|
1753
2132
|
TaskValidation,
|
|
1754
2133
|
These,
|
|
1755
|
-
Tuple
|
|
2134
|
+
Tuple,
|
|
2135
|
+
Validation
|
|
1756
2136
|
};
|