@nlozgachev/pipelined 0.47.0 → 0.49.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 +58 -5
- package/dist/Duration-B8joKzro.d.mts +181 -0
- package/dist/Duration-B8joKzro.d.ts +181 -0
- package/dist/{InternalTypes-Mssktd7z.d.ts → InternalTypes-CDiDBAY4.d.mts} +20 -1
- package/dist/{InternalTypes-CLE7qlOc.d.mts → InternalTypes-LdhLQx3N.d.ts} +20 -1
- package/dist/{Validation-BMsvixWH.d.ts → Validation-1OgJJdeA.d.ts} +507 -37
- package/dist/{Validation-v38R0qH-.d.mts → Validation-D-aARYlP.d.mts} +507 -37
- package/dist/{chunk-KOYYDQH4.mjs → chunk-5OFVS5UZ.mjs} +7 -2
- package/dist/{chunk-XTVF5R6R.mjs → chunk-DENXUTKL.mjs} +24 -0
- package/dist/{chunk-W2L244AS.mjs → chunk-EPT3GYGN.mjs} +279 -1
- package/dist/{chunk-VSU36S2K.mjs → chunk-IHLH2XYQ.mjs} +330 -18
- package/dist/composition.d.mts +226 -18
- package/dist/composition.d.ts +226 -18
- package/dist/composition.js +10 -3
- package/dist/composition.mjs +8 -4
- package/dist/core.d.mts +304 -9
- package/dist/core.d.ts +304 -9
- package/dist/core.js +330 -17
- package/dist/core.mjs +4 -2
- package/dist/data.d.mts +619 -41
- package/dist/data.d.ts +619 -41
- package/dist/data.js +424 -17
- package/dist/data.mjs +7 -3
- package/dist/index.d.mts +7 -6
- package/dist/index.d.ts +7 -6
- package/dist/index.js +658 -33
- package/dist/index.mjs +19 -7
- package/dist/types.d.mts +37 -108
- package/dist/types.d.ts +37 -108
- package/dist/types.js +27 -2
- package/dist/types.mjs +5 -3
- package/package.json +4 -4
package/dist/core.js
CHANGED
|
@@ -37,6 +37,7 @@ __export(Core_exports, {
|
|
|
37
37
|
Resource: () => Resource,
|
|
38
38
|
Result: () => Result,
|
|
39
39
|
State: () => State,
|
|
40
|
+
Stream: () => Stream,
|
|
40
41
|
Task: () => Task,
|
|
41
42
|
TaskMaybe: () => TaskMaybe,
|
|
42
43
|
TaskResult: () => TaskResult,
|
|
@@ -61,6 +62,26 @@ var Combinable;
|
|
|
61
62
|
combine: (b) => (a) => Maybe.is.none(a) ? b : Maybe.is.none(b) ? a : Maybe.make.some(inner.combine(b.value)(a.value))
|
|
62
63
|
});
|
|
63
64
|
Combinable2.fold = (c) => (data) => data.reduce((acc, x) => c.combine(x)(acc), c.empty);
|
|
65
|
+
Combinable2.struct = (fields) => {
|
|
66
|
+
const empty = {};
|
|
67
|
+
for (const key in fields) {
|
|
68
|
+
if (Object.hasOwn(fields, key)) {
|
|
69
|
+
empty[key] = fields[key].empty;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
return {
|
|
73
|
+
empty,
|
|
74
|
+
combine: (b) => (a) => {
|
|
75
|
+
const result = {};
|
|
76
|
+
for (const key in fields) {
|
|
77
|
+
if (Object.hasOwn(fields, key)) {
|
|
78
|
+
result[key] = fields[key].combine(b[key])(a[key]);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
return result;
|
|
82
|
+
}
|
|
83
|
+
};
|
|
84
|
+
};
|
|
64
85
|
})(Combinable || (Combinable = {}));
|
|
65
86
|
|
|
66
87
|
// src/Core/Deferred.ts
|
|
@@ -77,6 +98,8 @@ var Deferred;
|
|
|
77
98
|
((to2) => {
|
|
78
99
|
to2.Promise = (d) => new globalThis.Promise((resolve) => d.then(resolve));
|
|
79
100
|
})(to = Deferred2.to || (Deferred2.to = {}));
|
|
101
|
+
Deferred2.all = (deferreds) => from.Promise(globalThis.Promise.all(deferreds.map((d) => to.Promise(d))));
|
|
102
|
+
Deferred2.race = (deferreds) => from.Promise(globalThis.Promise.race(deferreds.map((d) => to.Promise(d))));
|
|
80
103
|
})(Deferred || (Deferred = {}));
|
|
81
104
|
|
|
82
105
|
// src/Core/Equality.ts
|
|
@@ -89,6 +112,27 @@ var Equality;
|
|
|
89
112
|
Equality2.array = (eq) => (a, b) => a.length === b.length && a.every((x, i) => eq(x, b[i]));
|
|
90
113
|
Equality2.by = (f) => (eq) => (a, b) => eq(f(a), f(b));
|
|
91
114
|
Equality2.and = (eq2) => (eq1) => (a, b) => eq1(a, b) && eq2(a, b);
|
|
115
|
+
Equality2.struct = (fields) => (a, b) => {
|
|
116
|
+
for (const key in fields) {
|
|
117
|
+
if (Object.hasOwn(fields, key)) {
|
|
118
|
+
if (!fields[key](a[key], b[key])) {
|
|
119
|
+
return false;
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
return true;
|
|
124
|
+
};
|
|
125
|
+
Equality2.tuple = (...equalities) => (a, b) => {
|
|
126
|
+
if (a.length !== b.length) {
|
|
127
|
+
return false;
|
|
128
|
+
}
|
|
129
|
+
for (let i = 0; i < equalities.length; i++) {
|
|
130
|
+
if (!equalities[i](a[i], b[i])) {
|
|
131
|
+
return false;
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
return true;
|
|
135
|
+
};
|
|
92
136
|
})(Equality || (Equality = {}));
|
|
93
137
|
|
|
94
138
|
// src/Core/Lazy.ts
|
|
@@ -168,6 +212,10 @@ var Logged;
|
|
|
168
212
|
Logged2.bind = (key, f) => (data) => (0, Logged2.chain)(
|
|
169
213
|
(a) => (0, Logged2.map)((b) => ({ ...a, [key]: b }))(f(a))
|
|
170
214
|
)(data);
|
|
215
|
+
Logged2.focus = (lens) => (f) => (data) => ({
|
|
216
|
+
value: lens.set(f(lens.get(data.value)))(data.value),
|
|
217
|
+
log: data.log
|
|
218
|
+
});
|
|
171
219
|
})(Logged || (Logged = {}));
|
|
172
220
|
|
|
173
221
|
// src/Core/Maybe.ts
|
|
@@ -227,6 +275,7 @@ var Maybe;
|
|
|
227
275
|
}
|
|
228
276
|
return make.some(result);
|
|
229
277
|
};
|
|
278
|
+
Maybe3.transposeResult = (data) => is.none(data) ? Result.make.ok(make.none()) : Result.is.ok(data.value) ? Result.make.ok(make.some(data.value.value)) : Result.make.err(data.value.error);
|
|
230
279
|
})(Maybe || (Maybe = {}));
|
|
231
280
|
|
|
232
281
|
// src/Types/Brand.ts
|
|
@@ -1406,6 +1455,25 @@ var Ordering;
|
|
|
1406
1455
|
return r !== 0 ? r : ord2(a, b);
|
|
1407
1456
|
};
|
|
1408
1457
|
Ordering2.by = (f) => (ord) => (a, b) => ord(f(a), f(b));
|
|
1458
|
+
Ordering2.byFields = (orderings) => (a, b) => {
|
|
1459
|
+
for (let i = 0; i < orderings.length; i++) {
|
|
1460
|
+
const res = orderings[i](a, b);
|
|
1461
|
+
if (res !== 0) {
|
|
1462
|
+
return res;
|
|
1463
|
+
}
|
|
1464
|
+
}
|
|
1465
|
+
return 0;
|
|
1466
|
+
};
|
|
1467
|
+
Ordering2.tuple = (...orderings) => (a, b) => {
|
|
1468
|
+
const len = Math.min(a.length, b.length);
|
|
1469
|
+
for (let i = 0; i < len; i++) {
|
|
1470
|
+
const res = orderings[i](a[i], b[i]);
|
|
1471
|
+
if (res !== 0) {
|
|
1472
|
+
return res;
|
|
1473
|
+
}
|
|
1474
|
+
}
|
|
1475
|
+
return a.length - b.length;
|
|
1476
|
+
};
|
|
1409
1477
|
})(Ordering || (Ordering = {}));
|
|
1410
1478
|
|
|
1411
1479
|
// src/Core/Predicate.ts
|
|
@@ -1421,6 +1489,15 @@ var Predicate;
|
|
|
1421
1489
|
((from2) => {
|
|
1422
1490
|
from2.Refinement = (r) => r;
|
|
1423
1491
|
})(from = Predicate2.from || (Predicate2.from = {}));
|
|
1492
|
+
Predicate2.match = (branches, fallback) => (a) => {
|
|
1493
|
+
for (let i = 0; i < branches.length; i++) {
|
|
1494
|
+
const [p, h] = branches[i];
|
|
1495
|
+
if (p(a)) {
|
|
1496
|
+
return h(a);
|
|
1497
|
+
}
|
|
1498
|
+
}
|
|
1499
|
+
return fallback(a);
|
|
1500
|
+
};
|
|
1424
1501
|
})(Predicate || (Predicate = {}));
|
|
1425
1502
|
|
|
1426
1503
|
// src/Core/Reader.ts
|
|
@@ -1620,11 +1697,11 @@ var Result;
|
|
|
1620
1697
|
is2.ok = (data) => data.kind === "Ok";
|
|
1621
1698
|
is2.err = (data) => data.kind === "Err";
|
|
1622
1699
|
})(is = Result4.is || (Result4.is = {}));
|
|
1623
|
-
Result4.tryCatch = (f,
|
|
1700
|
+
Result4.tryCatch = (f, options) => {
|
|
1624
1701
|
try {
|
|
1625
1702
|
return make.ok(f());
|
|
1626
1703
|
} catch (error) {
|
|
1627
|
-
return make.err(onError(error));
|
|
1704
|
+
return make.err(options.onError(error));
|
|
1628
1705
|
}
|
|
1629
1706
|
};
|
|
1630
1707
|
Result4.map = (f) => (data) => is.ok(data) ? make.ok(f(data.value)) : data;
|
|
@@ -1650,20 +1727,23 @@ var Result;
|
|
|
1650
1727
|
from2.Predicate = (pred, onFalse) => (a) => pred(a) ? make.ok(a) : make.err(onFalse(a));
|
|
1651
1728
|
from2.nullable = (onNull) => (value) => value === null || value === void 0 ? make.err(onNull()) : make.ok(value);
|
|
1652
1729
|
from2.Maybe = (onNone) => (maybe) => Maybe.is.none(maybe) ? make.err(onNone()) : make.ok(maybe.value);
|
|
1653
|
-
from2.throwable = (f,
|
|
1730
|
+
from2.throwable = (f, options) => (...args) => {
|
|
1654
1731
|
try {
|
|
1655
1732
|
return make.ok(f(...args));
|
|
1656
1733
|
} catch (error) {
|
|
1657
|
-
return make.err(onError(error));
|
|
1734
|
+
return make.err(options.onError(error));
|
|
1658
1735
|
}
|
|
1659
1736
|
};
|
|
1737
|
+
from2.Validation = (combineErrors) => (val) => Validation.is.passed(val) ? make.ok(val.value) : make.err(combineErrors(val.errors));
|
|
1660
1738
|
})(from = Result4.from || (Result4.from = {}));
|
|
1661
1739
|
Result4.recover = (fallback) => (data) => is.ok(data) ? data : fallback(data.error);
|
|
1662
1740
|
Result4.recoverUnless = (isBlocked, fallback) => (data) => is.err(data) && !isBlocked(data.error) ? fallback() : data;
|
|
1663
1741
|
let to;
|
|
1664
1742
|
((to2) => {
|
|
1665
1743
|
to2.Maybe = (data) => is.ok(data) ? Maybe.make.some(data.value) : Maybe.make.none();
|
|
1744
|
+
to2.Validation = (data) => Validation.from.Result(data);
|
|
1666
1745
|
})(to = Result4.to || (Result4.to = {}));
|
|
1746
|
+
Result4.transposeMaybe = (data) => is.err(data) ? Maybe.make.some(data) : Maybe.is.some(data.value) ? Maybe.make.some(make.ok(data.value.value)) : Maybe.make.none();
|
|
1667
1747
|
Result4.ap = (arg) => (data) => is.ok(data) && is.ok(arg) ? make.ok(data.value(arg.value)) : is.err(data) ? data : arg;
|
|
1668
1748
|
Result4.bindTo = (key) => (data) => (0, Result4.map)((a) => ({ [key]: a }))(data);
|
|
1669
1749
|
Result4.bind = (key, f) => (data) => (0, Result4.chain)(
|
|
@@ -1682,6 +1762,8 @@ var Result;
|
|
|
1682
1762
|
}
|
|
1683
1763
|
return make.ok(result);
|
|
1684
1764
|
};
|
|
1765
|
+
Result4.ensure = (predicate, onFail) => (data) => is.err(data) ? data : predicate(data.value) ? data : make.err(onFail(data.value));
|
|
1766
|
+
Result4.bimap = (onErr, onOk) => (data) => is.ok(data) ? make.ok(onOk(data.value)) : make.err(onErr(data.error));
|
|
1685
1767
|
})(Result || (Result = {}));
|
|
1686
1768
|
|
|
1687
1769
|
// src/Core/State.ts
|
|
@@ -1717,13 +1799,129 @@ var State;
|
|
|
1717
1799
|
State2.bind = (key, f) => (data) => (0, State2.chain)(
|
|
1718
1800
|
(a) => (0, State2.map)((b) => ({ ...a, [key]: b }))(f(a))
|
|
1719
1801
|
)(data);
|
|
1802
|
+
State2.focus = (lens) => (stateOp) => (s) => {
|
|
1803
|
+
const subState = lens.get(s);
|
|
1804
|
+
const [b, newSubState] = stateOp(subState);
|
|
1805
|
+
return [b, lens.set(newSubState)(s)];
|
|
1806
|
+
};
|
|
1720
1807
|
})(State || (State = {}));
|
|
1721
1808
|
|
|
1809
|
+
// src/Core/Stream.ts
|
|
1810
|
+
var Stream;
|
|
1811
|
+
((Stream2) => {
|
|
1812
|
+
Stream2.make = (options) => ({
|
|
1813
|
+
options,
|
|
1814
|
+
_listeners: /* @__PURE__ */ new Set()
|
|
1815
|
+
});
|
|
1816
|
+
Stream2.emit = (target, message) => {
|
|
1817
|
+
const targets = Array.isArray(target) ? target : [target];
|
|
1818
|
+
const msg = message;
|
|
1819
|
+
for (const stream of targets) {
|
|
1820
|
+
const listeners = Array.from(stream._listeners);
|
|
1821
|
+
for (const listener of listeners) {
|
|
1822
|
+
try {
|
|
1823
|
+
listener(msg);
|
|
1824
|
+
} catch (err2) {
|
|
1825
|
+
if (stream.options?.onError) {
|
|
1826
|
+
stream.options.onError(err2);
|
|
1827
|
+
} else {
|
|
1828
|
+
throw err2;
|
|
1829
|
+
}
|
|
1830
|
+
}
|
|
1831
|
+
}
|
|
1832
|
+
}
|
|
1833
|
+
};
|
|
1834
|
+
Stream2.forward = (options) => {
|
|
1835
|
+
const targets = Array.isArray(options.to) ? options.to : [options.to];
|
|
1836
|
+
const filterSet = options.only ? new Set(options.only) : null;
|
|
1837
|
+
const handler = (msg) => {
|
|
1838
|
+
if (filterSet !== null && !filterSet.has(msg.kind)) {
|
|
1839
|
+
return;
|
|
1840
|
+
}
|
|
1841
|
+
for (const target of targets) {
|
|
1842
|
+
(0, Stream2.emit)(target, msg);
|
|
1843
|
+
}
|
|
1844
|
+
};
|
|
1845
|
+
options.from._listeners.add(handler);
|
|
1846
|
+
return () => {
|
|
1847
|
+
options.from._listeners.delete(handler);
|
|
1848
|
+
};
|
|
1849
|
+
};
|
|
1850
|
+
Stream2.listen = (stream, events, options) => {
|
|
1851
|
+
const eventList = Array.isArray(events) ? events : [events];
|
|
1852
|
+
const isOrdered = options?.ordered ?? false;
|
|
1853
|
+
const isStrict = options?.strict ?? false;
|
|
1854
|
+
const isOnce = options?.once ?? false;
|
|
1855
|
+
const resetKinds = options?.reset ? new Set(Array.isArray(options.reset) ? options.reset : [options.reset]) : null;
|
|
1856
|
+
const createMatcher = (onMatch) => {
|
|
1857
|
+
let sequenceIndex = 0;
|
|
1858
|
+
return (msg) => {
|
|
1859
|
+
if (resetKinds !== null && resetKinds.has(msg.kind)) {
|
|
1860
|
+
sequenceIndex = 0;
|
|
1861
|
+
return;
|
|
1862
|
+
}
|
|
1863
|
+
if (!isOrdered) {
|
|
1864
|
+
if (eventList.includes(msg.kind)) {
|
|
1865
|
+
onMatch(msg);
|
|
1866
|
+
}
|
|
1867
|
+
return;
|
|
1868
|
+
}
|
|
1869
|
+
const expectedKind = eventList[sequenceIndex];
|
|
1870
|
+
if (msg.kind === expectedKind) {
|
|
1871
|
+
sequenceIndex++;
|
|
1872
|
+
if (sequenceIndex === eventList.length) {
|
|
1873
|
+
sequenceIndex = 0;
|
|
1874
|
+
onMatch(msg);
|
|
1875
|
+
}
|
|
1876
|
+
} else if (isStrict) {
|
|
1877
|
+
sequenceIndex = msg.kind === eventList[0] ? 1 : 0;
|
|
1878
|
+
} else if (eventList.includes(msg.kind)) {
|
|
1879
|
+
sequenceIndex = msg.kind === eventList[0] ? 1 : 0;
|
|
1880
|
+
}
|
|
1881
|
+
};
|
|
1882
|
+
};
|
|
1883
|
+
return {
|
|
1884
|
+
reduce: (reducer, initialState) => {
|
|
1885
|
+
let currentState = initialState;
|
|
1886
|
+
const listenerFn = createMatcher((msg) => {
|
|
1887
|
+
currentState = reducer(msg, currentState);
|
|
1888
|
+
if (isOnce) {
|
|
1889
|
+
stream._listeners.delete(listenerFn);
|
|
1890
|
+
}
|
|
1891
|
+
});
|
|
1892
|
+
const unsubscribe = () => {
|
|
1893
|
+
stream._listeners.delete(listenerFn);
|
|
1894
|
+
};
|
|
1895
|
+
stream._listeners.add(listenerFn);
|
|
1896
|
+
return { unsubscribe, getState: () => currentState };
|
|
1897
|
+
},
|
|
1898
|
+
tap: (effect) => {
|
|
1899
|
+
const listenerFn = createMatcher((msg) => {
|
|
1900
|
+
effect(msg);
|
|
1901
|
+
if (isOnce) {
|
|
1902
|
+
stream._listeners.delete(listenerFn);
|
|
1903
|
+
}
|
|
1904
|
+
});
|
|
1905
|
+
const unsubscribe = () => {
|
|
1906
|
+
stream._listeners.delete(listenerFn);
|
|
1907
|
+
};
|
|
1908
|
+
stream._listeners.add(listenerFn);
|
|
1909
|
+
return unsubscribe;
|
|
1910
|
+
}
|
|
1911
|
+
};
|
|
1912
|
+
};
|
|
1913
|
+
})(Stream || (Stream = {}));
|
|
1914
|
+
|
|
1722
1915
|
// src/Core/TaskMaybe.ts
|
|
1723
1916
|
var TaskMaybe;
|
|
1724
1917
|
((TaskMaybe2) => {
|
|
1725
|
-
|
|
1726
|
-
|
|
1918
|
+
let make;
|
|
1919
|
+
((make2) => {
|
|
1920
|
+
make2.some = (value) => Task.resolve(Maybe.make.some(value));
|
|
1921
|
+
make2.none = () => Task.resolve(Maybe.make.none());
|
|
1922
|
+
})(make = TaskMaybe2.make || (TaskMaybe2.make = {}));
|
|
1923
|
+
({ some: TaskMaybe2.some } = make);
|
|
1924
|
+
({ none: TaskMaybe2.none } = make);
|
|
1727
1925
|
let from;
|
|
1728
1926
|
((from2) => {
|
|
1729
1927
|
from2.Maybe = (option) => Task.resolve(option);
|
|
@@ -1779,19 +1977,28 @@ var TaskMaybe;
|
|
|
1779
1977
|
// src/Core/TaskResult.ts
|
|
1780
1978
|
var TaskResult;
|
|
1781
1979
|
((TaskResult2) => {
|
|
1782
|
-
|
|
1783
|
-
|
|
1980
|
+
let make;
|
|
1981
|
+
((make2) => {
|
|
1982
|
+
make2.ok = (value) => Task.resolve(Result.make.ok(value));
|
|
1983
|
+
make2.err = (error) => Task.resolve(Result.make.err(error));
|
|
1984
|
+
})(make = TaskResult2.make || (TaskResult2.make = {}));
|
|
1985
|
+
({ ok: TaskResult2.ok } = make);
|
|
1986
|
+
({ err: TaskResult2.err } = make);
|
|
1784
1987
|
let from;
|
|
1785
1988
|
((from2) => {
|
|
1786
1989
|
from2.nullable = (onNull) => (value) => Task.resolve(value === null || value === void 0 ? Result.make.err(onNull()) : Result.make.ok(value));
|
|
1787
1990
|
from2.Maybe = (onNone) => (maybe) => Task.resolve(Maybe.is.none(maybe) ? Result.make.err(onNone()) : Result.make.ok(maybe.value));
|
|
1788
1991
|
from2.Result = (result) => Task.resolve(result);
|
|
1789
|
-
from2.throwable = (f,
|
|
1790
|
-
() => f(...args).then(Result.make.ok).catch((error) => Result.make.err(onError(error)))
|
|
1992
|
+
from2.throwable = (f, options) => (...args) => Task.from.Promise(
|
|
1993
|
+
() => f(...args).then(Result.make.ok).catch((error) => Result.make.err(options.onError(error)))
|
|
1791
1994
|
);
|
|
1792
1995
|
})(from = TaskResult2.from || (TaskResult2.from = {}));
|
|
1793
|
-
|
|
1794
|
-
|
|
1996
|
+
let to;
|
|
1997
|
+
((to2) => {
|
|
1998
|
+
to2.Maybe = (data) => Task.map(Result.to.Maybe)(data);
|
|
1999
|
+
})(to = TaskResult2.to || (TaskResult2.to = {}));
|
|
2000
|
+
TaskResult2.tryCatch = (f, options) => Task.from.Promise(
|
|
2001
|
+
(signal) => Promise.resolve(f(signal)).then(Result.make.ok).catch((error) => Result.make.err(options.onError(error)))
|
|
1795
2002
|
);
|
|
1796
2003
|
TaskResult2.map = (f) => (data) => Task.map(Result.map(f))(data);
|
|
1797
2004
|
TaskResult2.mapError = (f) => (data) => Task.map(Result.mapError(f))(data);
|
|
@@ -1831,6 +2038,60 @@ var TaskResult;
|
|
|
1831
2038
|
return Result.make.ok(record);
|
|
1832
2039
|
});
|
|
1833
2040
|
});
|
|
2041
|
+
TaskResult2.retry = (policy) => (task) => Task.from.Promise((signal) => {
|
|
2042
|
+
const { attempts } = policy;
|
|
2043
|
+
const wait = (duration) => new Promise((res) => {
|
|
2044
|
+
let timerId;
|
|
2045
|
+
const onAbort = () => {
|
|
2046
|
+
clearTimeout(timerId);
|
|
2047
|
+
res();
|
|
2048
|
+
};
|
|
2049
|
+
if (signal) {
|
|
2050
|
+
if (signal.aborted) {
|
|
2051
|
+
return res();
|
|
2052
|
+
}
|
|
2053
|
+
signal.addEventListener("abort", onAbort, { once: true });
|
|
2054
|
+
}
|
|
2055
|
+
timerId = setTimeout(() => {
|
|
2056
|
+
signal?.removeEventListener("abort", onAbort);
|
|
2057
|
+
res();
|
|
2058
|
+
}, Duration.to.milliseconds(duration));
|
|
2059
|
+
});
|
|
2060
|
+
const executeAttempt = (attempt) => Deferred.to.Promise(task(signal)).then((res) => {
|
|
2061
|
+
if (Result.is.ok(res) || attempt >= attempts || signal?.aborted) {
|
|
2062
|
+
return res;
|
|
2063
|
+
}
|
|
2064
|
+
const delay = policy.getDelay(attempt);
|
|
2065
|
+
return wait(delay).then(() => executeAttempt(attempt + 1));
|
|
2066
|
+
});
|
|
2067
|
+
return executeAttempt(1);
|
|
2068
|
+
});
|
|
2069
|
+
TaskResult2.memoize = (task) => Task.memoize(task);
|
|
2070
|
+
TaskResult2.timeout = (options) => (task) => Task.from.Promise((signal) => {
|
|
2071
|
+
const ms = Duration.to.milliseconds(options.duration);
|
|
2072
|
+
return new Promise((resolve) => {
|
|
2073
|
+
let timerId;
|
|
2074
|
+
const onAbort = () => {
|
|
2075
|
+
clearTimeout(timerId);
|
|
2076
|
+
};
|
|
2077
|
+
if (signal) {
|
|
2078
|
+
if (signal.aborted) {
|
|
2079
|
+
return Deferred.to.Promise(task(signal)).then(resolve);
|
|
2080
|
+
}
|
|
2081
|
+
signal.addEventListener("abort", onAbort, { once: true });
|
|
2082
|
+
}
|
|
2083
|
+
timerId = setTimeout(() => {
|
|
2084
|
+
signal?.removeEventListener("abort", onAbort);
|
|
2085
|
+
resolve(Result.make.err(options.onTimeout()));
|
|
2086
|
+
}, ms);
|
|
2087
|
+
Deferred.to.Promise(task(signal)).then((res) => {
|
|
2088
|
+
clearTimeout(timerId);
|
|
2089
|
+
signal?.removeEventListener("abort", onAbort);
|
|
2090
|
+
resolve(res);
|
|
2091
|
+
});
|
|
2092
|
+
});
|
|
2093
|
+
});
|
|
2094
|
+
TaskResult2.allSettled = (tasks) => Task.from.Promise((signal) => Promise.all(tasks.map((task) => Deferred.to.Promise(task(signal)))));
|
|
1834
2095
|
})(TaskResult || (TaskResult = {}));
|
|
1835
2096
|
|
|
1836
2097
|
// src/internal/InternalTypes.ts
|
|
@@ -1839,9 +2100,15 @@ var isNonEmptyArr = (list) => list.length > 0;
|
|
|
1839
2100
|
// src/Core/TaskValidation.ts
|
|
1840
2101
|
var TaskValidation;
|
|
1841
2102
|
((TaskValidation2) => {
|
|
1842
|
-
|
|
1843
|
-
|
|
1844
|
-
|
|
2103
|
+
let make;
|
|
2104
|
+
((make2) => {
|
|
2105
|
+
make2.passed = (value) => Task.resolve(Validation.make.passed(value));
|
|
2106
|
+
make2.failed = (error) => Task.resolve(Validation.make.failed(error));
|
|
2107
|
+
make2.failedAll = (errors) => Task.resolve(Validation.make.failedAll(errors));
|
|
2108
|
+
})(make = TaskValidation2.make || (TaskValidation2.make = {}));
|
|
2109
|
+
({ passed: TaskValidation2.passed } = make);
|
|
2110
|
+
({ failed: TaskValidation2.failed } = make);
|
|
2111
|
+
({ failedAll: TaskValidation2.failedAll } = make);
|
|
1845
2112
|
let from;
|
|
1846
2113
|
((from2) => {
|
|
1847
2114
|
from2.Validation = (validation) => Task.resolve(validation);
|
|
@@ -2059,7 +2326,8 @@ var Task;
|
|
|
2059
2326
|
}
|
|
2060
2327
|
return results;
|
|
2061
2328
|
});
|
|
2062
|
-
Task2.timeout = (
|
|
2329
|
+
Task2.timeout = (options) => (task) => from.Promise((outerSignal) => {
|
|
2330
|
+
const { duration, onTimeout } = options;
|
|
2063
2331
|
const controller = new AbortController();
|
|
2064
2332
|
let timerId;
|
|
2065
2333
|
let cleanUp = () => {
|
|
@@ -2116,6 +2384,30 @@ var Task;
|
|
|
2116
2384
|
Task2.bind = (key, f) => (data) => (0, Task2.chain)(
|
|
2117
2385
|
(a) => (0, Task2.map)((b) => ({ ...a, [key]: b }))(f(a))
|
|
2118
2386
|
)(data);
|
|
2387
|
+
Task2.memoize = (task) => {
|
|
2388
|
+
let cached = null;
|
|
2389
|
+
return (signal) => {
|
|
2390
|
+
if (cached === null) {
|
|
2391
|
+
cached = task(signal);
|
|
2392
|
+
}
|
|
2393
|
+
return cached;
|
|
2394
|
+
};
|
|
2395
|
+
};
|
|
2396
|
+
Task2.withProgress = (onProgress) => (task) => (signal) => {
|
|
2397
|
+
onProgress(0);
|
|
2398
|
+
const d = task(signal);
|
|
2399
|
+
return Deferred.from.Promise(
|
|
2400
|
+
Deferred.to.Promise(d).then((res) => {
|
|
2401
|
+
onProgress(1);
|
|
2402
|
+
return res;
|
|
2403
|
+
})
|
|
2404
|
+
);
|
|
2405
|
+
};
|
|
2406
|
+
Task2.withLabel = (label) => (task) => {
|
|
2407
|
+
const fn = ((signal) => task(signal));
|
|
2408
|
+
Object.defineProperty(fn, "label", { value: label, writable: false, enumerable: true, configurable: true });
|
|
2409
|
+
return fn;
|
|
2410
|
+
};
|
|
2119
2411
|
Task2.Maybe = TaskMaybe;
|
|
2120
2412
|
Task2.Result = TaskResult;
|
|
2121
2413
|
Task2.Validation = TaskValidation;
|
|
@@ -2256,6 +2548,13 @@ var Validation;
|
|
|
2256
2548
|
is2.passed = (data) => data.kind === "Passed";
|
|
2257
2549
|
is2.failed = (data) => data.kind === "Failed";
|
|
2258
2550
|
})(is = Validation2.is || (Validation2.is = {}));
|
|
2551
|
+
Validation2.tryCatch = (f, options) => {
|
|
2552
|
+
try {
|
|
2553
|
+
return make.passed(f());
|
|
2554
|
+
} catch (error) {
|
|
2555
|
+
return make.failed(options.onError(error));
|
|
2556
|
+
}
|
|
2557
|
+
};
|
|
2259
2558
|
let from;
|
|
2260
2559
|
((from2) => {
|
|
2261
2560
|
from2.Predicate = (pred, onFalse) => (a) => pred(a) ? make.passed(a) : make.failed(onFalse(a));
|
|
@@ -2271,6 +2570,12 @@ var Validation;
|
|
|
2271
2570
|
}
|
|
2272
2571
|
return is.passed(arg) ? make.failedAll(data.errors) : make.failedAll([...data.errors, ...arg.errors]);
|
|
2273
2572
|
};
|
|
2573
|
+
Validation2.apCustom = (concat) => (arg) => (data) => {
|
|
2574
|
+
if (is.passed(data)) {
|
|
2575
|
+
return is.passed(arg) ? make.passed(data.value(arg.value)) : make.failedAll(arg.errors);
|
|
2576
|
+
}
|
|
2577
|
+
return is.passed(arg) ? make.failedAll(data.errors) : make.failedAll(concat(data.errors, arg.errors));
|
|
2578
|
+
};
|
|
2274
2579
|
Validation2.fold = (onFailed, onPassed) => (data) => is.passed(data) ? onPassed(data.value) : onFailed(data.errors);
|
|
2275
2580
|
Validation2.match = (cases) => (data) => is.passed(data) ? cases.passed(data.value) : cases.failed(data.errors);
|
|
2276
2581
|
Validation2.getOrElse = (defaultValue) => (data) => is.passed(data) ? data.value : defaultValue();
|
|
@@ -2290,7 +2595,14 @@ var Validation;
|
|
|
2290
2595
|
Validation2.recoverUnless = (isBlocked, fallback) => (data) => is.failed(data) && !data.errors.some(isBlocked) ? fallback() : data;
|
|
2291
2596
|
let to;
|
|
2292
2597
|
((to2) => {
|
|
2293
|
-
|
|
2598
|
+
function Result4(arg) {
|
|
2599
|
+
if (typeof arg === "function") {
|
|
2600
|
+
const combine = arg;
|
|
2601
|
+
return (val) => is.passed(val) ? Result.make.ok(val.value) : Result.make.err(combine(val.errors));
|
|
2602
|
+
}
|
|
2603
|
+
return is.passed(arg) ? Result.make.ok(arg.value) : Result.make.err(arg.errors);
|
|
2604
|
+
}
|
|
2605
|
+
to2.Result = Result4;
|
|
2294
2606
|
to2.Maybe = (data) => is.passed(data) ? Maybe.make.some(data.value) : Maybe.make.none();
|
|
2295
2607
|
})(to = Validation2.to || (Validation2.to = {}));
|
|
2296
2608
|
Validation2.product = (first, second) => {
|
|
@@ -2346,6 +2658,7 @@ var Validation;
|
|
|
2346
2658
|
Resource,
|
|
2347
2659
|
Result,
|
|
2348
2660
|
State,
|
|
2661
|
+
Stream,
|
|
2349
2662
|
Task,
|
|
2350
2663
|
TaskMaybe,
|
|
2351
2664
|
TaskResult,
|
package/dist/core.mjs
CHANGED
|
@@ -16,6 +16,7 @@ import {
|
|
|
16
16
|
Resource,
|
|
17
17
|
Result,
|
|
18
18
|
State,
|
|
19
|
+
Stream,
|
|
19
20
|
Task,
|
|
20
21
|
TaskMaybe,
|
|
21
22
|
TaskResult,
|
|
@@ -23,8 +24,8 @@ import {
|
|
|
23
24
|
These,
|
|
24
25
|
Tuple,
|
|
25
26
|
Validation
|
|
26
|
-
} from "./chunk-
|
|
27
|
-
import "./chunk-
|
|
27
|
+
} from "./chunk-IHLH2XYQ.mjs";
|
|
28
|
+
import "./chunk-DENXUTKL.mjs";
|
|
28
29
|
export {
|
|
29
30
|
Combinable,
|
|
30
31
|
Deferred,
|
|
@@ -43,6 +44,7 @@ export {
|
|
|
43
44
|
Resource,
|
|
44
45
|
Result,
|
|
45
46
|
State,
|
|
47
|
+
Stream,
|
|
46
48
|
Task,
|
|
47
49
|
TaskMaybe,
|
|
48
50
|
TaskResult,
|