@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/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, onError) => {
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, onError) => (...args) => {
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
- TaskMaybe2.some = (value) => Task.resolve(Maybe.make.some(value));
1726
- TaskMaybe2.none = () => Task.resolve(Maybe.make.none());
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
- TaskResult2.ok = (value) => Task.resolve(Result.make.ok(value));
1783
- TaskResult2.err = (error) => Task.resolve(Result.make.err(error));
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, onError) => (...args) => Task.from.Promise(
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
- TaskResult2.tryCatch = (f, onError) => Task.from.Promise(
1794
- (signal) => Promise.resolve(f(signal)).then(Result.make.ok).catch((error) => Result.make.err(onError(error)))
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
- TaskValidation2.passed = (value) => Task.resolve(Validation.make.passed(value));
1843
- TaskValidation2.failed = (error) => Task.resolve(Validation.make.failed(error));
1844
- TaskValidation2.failedAll = (errors) => Task.resolve(Validation.make.failedAll(errors));
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 = (duration, onTimeout) => (task) => from.Promise((outerSignal) => {
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
- to2.Result = (data) => is.passed(data) ? Result.make.ok(data.value) : Result.make.err(data.errors);
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-VSU36S2K.mjs";
27
- import "./chunk-XTVF5R6R.mjs";
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,