@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.
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  Duration
3
- } from "./chunk-XTVF5R6R.mjs";
3
+ } from "./chunk-DENXUTKL.mjs";
4
4
 
5
5
  // src/Core/Combinable.ts
6
6
  var Combinable;
@@ -16,6 +16,26 @@ var Combinable;
16
16
  combine: (b) => (a) => Maybe.is.none(a) ? b : Maybe.is.none(b) ? a : Maybe.make.some(inner.combine(b.value)(a.value))
17
17
  });
18
18
  Combinable2.fold = (c) => (data) => data.reduce((acc, x) => c.combine(x)(acc), c.empty);
19
+ Combinable2.struct = (fields) => {
20
+ const empty = {};
21
+ for (const key in fields) {
22
+ if (Object.hasOwn(fields, key)) {
23
+ empty[key] = fields[key].empty;
24
+ }
25
+ }
26
+ return {
27
+ empty,
28
+ combine: (b) => (a) => {
29
+ const result = {};
30
+ for (const key in fields) {
31
+ if (Object.hasOwn(fields, key)) {
32
+ result[key] = fields[key].combine(b[key])(a[key]);
33
+ }
34
+ }
35
+ return result;
36
+ }
37
+ };
38
+ };
19
39
  })(Combinable || (Combinable = {}));
20
40
 
21
41
  // src/Core/Deferred.ts
@@ -32,6 +52,8 @@ var Deferred;
32
52
  ((to2) => {
33
53
  to2.Promise = (d) => new globalThis.Promise((resolve) => d.then(resolve));
34
54
  })(to = Deferred2.to || (Deferred2.to = {}));
55
+ Deferred2.all = (deferreds) => from.Promise(globalThis.Promise.all(deferreds.map((d) => to.Promise(d))));
56
+ Deferred2.race = (deferreds) => from.Promise(globalThis.Promise.race(deferreds.map((d) => to.Promise(d))));
35
57
  })(Deferred || (Deferred = {}));
36
58
 
37
59
  // src/Core/Equality.ts
@@ -44,6 +66,27 @@ var Equality;
44
66
  Equality2.array = (eq) => (a, b) => a.length === b.length && a.every((x, i) => eq(x, b[i]));
45
67
  Equality2.by = (f) => (eq) => (a, b) => eq(f(a), f(b));
46
68
  Equality2.and = (eq2) => (eq1) => (a, b) => eq1(a, b) && eq2(a, b);
69
+ Equality2.struct = (fields) => (a, b) => {
70
+ for (const key in fields) {
71
+ if (Object.hasOwn(fields, key)) {
72
+ if (!fields[key](a[key], b[key])) {
73
+ return false;
74
+ }
75
+ }
76
+ }
77
+ return true;
78
+ };
79
+ Equality2.tuple = (...equalities) => (a, b) => {
80
+ if (a.length !== b.length) {
81
+ return false;
82
+ }
83
+ for (let i = 0; i < equalities.length; i++) {
84
+ if (!equalities[i](a[i], b[i])) {
85
+ return false;
86
+ }
87
+ }
88
+ return true;
89
+ };
47
90
  })(Equality || (Equality = {}));
48
91
 
49
92
  // src/Core/Lazy.ts
@@ -123,6 +166,10 @@ var Logged;
123
166
  Logged2.bind = (key, f) => (data) => (0, Logged2.chain)(
124
167
  (a) => (0, Logged2.map)((b) => ({ ...a, [key]: b }))(f(a))
125
168
  )(data);
169
+ Logged2.focus = (lens) => (f) => (data) => ({
170
+ value: lens.set(f(lens.get(data.value)))(data.value),
171
+ log: data.log
172
+ });
126
173
  })(Logged || (Logged = {}));
127
174
 
128
175
  // src/Core/Maybe.ts
@@ -182,6 +229,7 @@ var Maybe;
182
229
  }
183
230
  return make.some(result);
184
231
  };
232
+ 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);
185
233
  })(Maybe || (Maybe = {}));
186
234
 
187
235
  // src/internal/Op.util.ts
@@ -1333,6 +1381,25 @@ var Ordering;
1333
1381
  return r !== 0 ? r : ord2(a, b);
1334
1382
  };
1335
1383
  Ordering2.by = (f) => (ord) => (a, b) => ord(f(a), f(b));
1384
+ Ordering2.byFields = (orderings) => (a, b) => {
1385
+ for (let i = 0; i < orderings.length; i++) {
1386
+ const res = orderings[i](a, b);
1387
+ if (res !== 0) {
1388
+ return res;
1389
+ }
1390
+ }
1391
+ return 0;
1392
+ };
1393
+ Ordering2.tuple = (...orderings) => (a, b) => {
1394
+ const len = Math.min(a.length, b.length);
1395
+ for (let i = 0; i < len; i++) {
1396
+ const res = orderings[i](a[i], b[i]);
1397
+ if (res !== 0) {
1398
+ return res;
1399
+ }
1400
+ }
1401
+ return a.length - b.length;
1402
+ };
1336
1403
  })(Ordering || (Ordering = {}));
1337
1404
 
1338
1405
  // src/Core/Predicate.ts
@@ -1348,6 +1415,15 @@ var Predicate;
1348
1415
  ((from2) => {
1349
1416
  from2.Refinement = (r) => r;
1350
1417
  })(from = Predicate2.from || (Predicate2.from = {}));
1418
+ Predicate2.match = (branches, fallback) => (a) => {
1419
+ for (let i = 0; i < branches.length; i++) {
1420
+ const [p, h] = branches[i];
1421
+ if (p(a)) {
1422
+ return h(a);
1423
+ }
1424
+ }
1425
+ return fallback(a);
1426
+ };
1351
1427
  })(Predicate || (Predicate = {}));
1352
1428
 
1353
1429
  // src/Core/Reader.ts
@@ -1547,11 +1623,11 @@ var Result;
1547
1623
  is2.ok = (data) => data.kind === "Ok";
1548
1624
  is2.err = (data) => data.kind === "Err";
1549
1625
  })(is = Result4.is || (Result4.is = {}));
1550
- Result4.tryCatch = (f, onError) => {
1626
+ Result4.tryCatch = (f, options) => {
1551
1627
  try {
1552
1628
  return make.ok(f());
1553
1629
  } catch (error) {
1554
- return make.err(onError(error));
1630
+ return make.err(options.onError(error));
1555
1631
  }
1556
1632
  };
1557
1633
  Result4.map = (f) => (data) => is.ok(data) ? make.ok(f(data.value)) : data;
@@ -1577,20 +1653,23 @@ var Result;
1577
1653
  from2.Predicate = (pred, onFalse) => (a) => pred(a) ? make.ok(a) : make.err(onFalse(a));
1578
1654
  from2.nullable = (onNull) => (value) => value === null || value === void 0 ? make.err(onNull()) : make.ok(value);
1579
1655
  from2.Maybe = (onNone) => (maybe) => Maybe.is.none(maybe) ? make.err(onNone()) : make.ok(maybe.value);
1580
- from2.throwable = (f, onError) => (...args) => {
1656
+ from2.throwable = (f, options) => (...args) => {
1581
1657
  try {
1582
1658
  return make.ok(f(...args));
1583
1659
  } catch (error) {
1584
- return make.err(onError(error));
1660
+ return make.err(options.onError(error));
1585
1661
  }
1586
1662
  };
1663
+ from2.Validation = (combineErrors) => (val) => Validation.is.passed(val) ? make.ok(val.value) : make.err(combineErrors(val.errors));
1587
1664
  })(from = Result4.from || (Result4.from = {}));
1588
1665
  Result4.recover = (fallback) => (data) => is.ok(data) ? data : fallback(data.error);
1589
1666
  Result4.recoverUnless = (isBlocked, fallback) => (data) => is.err(data) && !isBlocked(data.error) ? fallback() : data;
1590
1667
  let to;
1591
1668
  ((to2) => {
1592
1669
  to2.Maybe = (data) => is.ok(data) ? Maybe.make.some(data.value) : Maybe.make.none();
1670
+ to2.Validation = (data) => Validation.from.Result(data);
1593
1671
  })(to = Result4.to || (Result4.to = {}));
1672
+ 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();
1594
1673
  Result4.ap = (arg) => (data) => is.ok(data) && is.ok(arg) ? make.ok(data.value(arg.value)) : is.err(data) ? data : arg;
1595
1674
  Result4.bindTo = (key) => (data) => (0, Result4.map)((a) => ({ [key]: a }))(data);
1596
1675
  Result4.bind = (key, f) => (data) => (0, Result4.chain)(
@@ -1609,6 +1688,8 @@ var Result;
1609
1688
  }
1610
1689
  return make.ok(result);
1611
1690
  };
1691
+ Result4.ensure = (predicate, onFail) => (data) => is.err(data) ? data : predicate(data.value) ? data : make.err(onFail(data.value));
1692
+ Result4.bimap = (onErr, onOk) => (data) => is.ok(data) ? make.ok(onOk(data.value)) : make.err(onErr(data.error));
1612
1693
  })(Result || (Result = {}));
1613
1694
 
1614
1695
  // src/Core/State.ts
@@ -1644,13 +1725,129 @@ var State;
1644
1725
  State2.bind = (key, f) => (data) => (0, State2.chain)(
1645
1726
  (a) => (0, State2.map)((b) => ({ ...a, [key]: b }))(f(a))
1646
1727
  )(data);
1728
+ State2.focus = (lens) => (stateOp) => (s) => {
1729
+ const subState = lens.get(s);
1730
+ const [b, newSubState] = stateOp(subState);
1731
+ return [b, lens.set(newSubState)(s)];
1732
+ };
1647
1733
  })(State || (State = {}));
1648
1734
 
1735
+ // src/Core/Stream.ts
1736
+ var Stream;
1737
+ ((Stream2) => {
1738
+ Stream2.make = (options) => ({
1739
+ options,
1740
+ _listeners: /* @__PURE__ */ new Set()
1741
+ });
1742
+ Stream2.emit = (target, message) => {
1743
+ const targets = Array.isArray(target) ? target : [target];
1744
+ const msg = message;
1745
+ for (const stream of targets) {
1746
+ const listeners = Array.from(stream._listeners);
1747
+ for (const listener of listeners) {
1748
+ try {
1749
+ listener(msg);
1750
+ } catch (err2) {
1751
+ if (stream.options?.onError) {
1752
+ stream.options.onError(err2);
1753
+ } else {
1754
+ throw err2;
1755
+ }
1756
+ }
1757
+ }
1758
+ }
1759
+ };
1760
+ Stream2.forward = (options) => {
1761
+ const targets = Array.isArray(options.to) ? options.to : [options.to];
1762
+ const filterSet = options.only ? new Set(options.only) : null;
1763
+ const handler = (msg) => {
1764
+ if (filterSet !== null && !filterSet.has(msg.kind)) {
1765
+ return;
1766
+ }
1767
+ for (const target of targets) {
1768
+ (0, Stream2.emit)(target, msg);
1769
+ }
1770
+ };
1771
+ options.from._listeners.add(handler);
1772
+ return () => {
1773
+ options.from._listeners.delete(handler);
1774
+ };
1775
+ };
1776
+ Stream2.listen = (stream, events, options) => {
1777
+ const eventList = Array.isArray(events) ? events : [events];
1778
+ const isOrdered = options?.ordered ?? false;
1779
+ const isStrict = options?.strict ?? false;
1780
+ const isOnce = options?.once ?? false;
1781
+ const resetKinds = options?.reset ? new Set(Array.isArray(options.reset) ? options.reset : [options.reset]) : null;
1782
+ const createMatcher = (onMatch) => {
1783
+ let sequenceIndex = 0;
1784
+ return (msg) => {
1785
+ if (resetKinds !== null && resetKinds.has(msg.kind)) {
1786
+ sequenceIndex = 0;
1787
+ return;
1788
+ }
1789
+ if (!isOrdered) {
1790
+ if (eventList.includes(msg.kind)) {
1791
+ onMatch(msg);
1792
+ }
1793
+ return;
1794
+ }
1795
+ const expectedKind = eventList[sequenceIndex];
1796
+ if (msg.kind === expectedKind) {
1797
+ sequenceIndex++;
1798
+ if (sequenceIndex === eventList.length) {
1799
+ sequenceIndex = 0;
1800
+ onMatch(msg);
1801
+ }
1802
+ } else if (isStrict) {
1803
+ sequenceIndex = msg.kind === eventList[0] ? 1 : 0;
1804
+ } else if (eventList.includes(msg.kind)) {
1805
+ sequenceIndex = msg.kind === eventList[0] ? 1 : 0;
1806
+ }
1807
+ };
1808
+ };
1809
+ return {
1810
+ reduce: (reducer, initialState) => {
1811
+ let currentState = initialState;
1812
+ const listenerFn = createMatcher((msg) => {
1813
+ currentState = reducer(msg, currentState);
1814
+ if (isOnce) {
1815
+ stream._listeners.delete(listenerFn);
1816
+ }
1817
+ });
1818
+ const unsubscribe = () => {
1819
+ stream._listeners.delete(listenerFn);
1820
+ };
1821
+ stream._listeners.add(listenerFn);
1822
+ return { unsubscribe, getState: () => currentState };
1823
+ },
1824
+ tap: (effect) => {
1825
+ const listenerFn = createMatcher((msg) => {
1826
+ effect(msg);
1827
+ if (isOnce) {
1828
+ stream._listeners.delete(listenerFn);
1829
+ }
1830
+ });
1831
+ const unsubscribe = () => {
1832
+ stream._listeners.delete(listenerFn);
1833
+ };
1834
+ stream._listeners.add(listenerFn);
1835
+ return unsubscribe;
1836
+ }
1837
+ };
1838
+ };
1839
+ })(Stream || (Stream = {}));
1840
+
1649
1841
  // src/Core/TaskMaybe.ts
1650
1842
  var TaskMaybe;
1651
1843
  ((TaskMaybe2) => {
1652
- TaskMaybe2.some = (value) => Task.resolve(Maybe.make.some(value));
1653
- TaskMaybe2.none = () => Task.resolve(Maybe.make.none());
1844
+ let make;
1845
+ ((make2) => {
1846
+ make2.some = (value) => Task.resolve(Maybe.make.some(value));
1847
+ make2.none = () => Task.resolve(Maybe.make.none());
1848
+ })(make = TaskMaybe2.make || (TaskMaybe2.make = {}));
1849
+ ({ some: TaskMaybe2.some } = make);
1850
+ ({ none: TaskMaybe2.none } = make);
1654
1851
  let from;
1655
1852
  ((from2) => {
1656
1853
  from2.Maybe = (option) => Task.resolve(option);
@@ -1706,19 +1903,28 @@ var TaskMaybe;
1706
1903
  // src/Core/TaskResult.ts
1707
1904
  var TaskResult;
1708
1905
  ((TaskResult2) => {
1709
- TaskResult2.ok = (value) => Task.resolve(Result.make.ok(value));
1710
- TaskResult2.err = (error) => Task.resolve(Result.make.err(error));
1906
+ let make;
1907
+ ((make2) => {
1908
+ make2.ok = (value) => Task.resolve(Result.make.ok(value));
1909
+ make2.err = (error) => Task.resolve(Result.make.err(error));
1910
+ })(make = TaskResult2.make || (TaskResult2.make = {}));
1911
+ ({ ok: TaskResult2.ok } = make);
1912
+ ({ err: TaskResult2.err } = make);
1711
1913
  let from;
1712
1914
  ((from2) => {
1713
1915
  from2.nullable = (onNull) => (value) => Task.resolve(value === null || value === void 0 ? Result.make.err(onNull()) : Result.make.ok(value));
1714
1916
  from2.Maybe = (onNone) => (maybe) => Task.resolve(Maybe.is.none(maybe) ? Result.make.err(onNone()) : Result.make.ok(maybe.value));
1715
1917
  from2.Result = (result) => Task.resolve(result);
1716
- from2.throwable = (f, onError) => (...args) => Task.from.Promise(
1717
- () => f(...args).then(Result.make.ok).catch((error) => Result.make.err(onError(error)))
1918
+ from2.throwable = (f, options) => (...args) => Task.from.Promise(
1919
+ () => f(...args).then(Result.make.ok).catch((error) => Result.make.err(options.onError(error)))
1718
1920
  );
1719
1921
  })(from = TaskResult2.from || (TaskResult2.from = {}));
1720
- TaskResult2.tryCatch = (f, onError) => Task.from.Promise(
1721
- (signal) => Promise.resolve(f(signal)).then(Result.make.ok).catch((error) => Result.make.err(onError(error)))
1922
+ let to;
1923
+ ((to2) => {
1924
+ to2.Maybe = (data) => Task.map(Result.to.Maybe)(data);
1925
+ })(to = TaskResult2.to || (TaskResult2.to = {}));
1926
+ TaskResult2.tryCatch = (f, options) => Task.from.Promise(
1927
+ (signal) => Promise.resolve(f(signal)).then(Result.make.ok).catch((error) => Result.make.err(options.onError(error)))
1722
1928
  );
1723
1929
  TaskResult2.map = (f) => (data) => Task.map(Result.map(f))(data);
1724
1930
  TaskResult2.mapError = (f) => (data) => Task.map(Result.mapError(f))(data);
@@ -1758,6 +1964,60 @@ var TaskResult;
1758
1964
  return Result.make.ok(record);
1759
1965
  });
1760
1966
  });
1967
+ TaskResult2.retry = (policy) => (task) => Task.from.Promise((signal) => {
1968
+ const { attempts } = policy;
1969
+ const wait = (duration) => new Promise((res) => {
1970
+ let timerId;
1971
+ const onAbort = () => {
1972
+ clearTimeout(timerId);
1973
+ res();
1974
+ };
1975
+ if (signal) {
1976
+ if (signal.aborted) {
1977
+ return res();
1978
+ }
1979
+ signal.addEventListener("abort", onAbort, { once: true });
1980
+ }
1981
+ timerId = setTimeout(() => {
1982
+ signal?.removeEventListener("abort", onAbort);
1983
+ res();
1984
+ }, Duration.to.milliseconds(duration));
1985
+ });
1986
+ const executeAttempt = (attempt) => Deferred.to.Promise(task(signal)).then((res) => {
1987
+ if (Result.is.ok(res) || attempt >= attempts || signal?.aborted) {
1988
+ return res;
1989
+ }
1990
+ const delay = policy.getDelay(attempt);
1991
+ return wait(delay).then(() => executeAttempt(attempt + 1));
1992
+ });
1993
+ return executeAttempt(1);
1994
+ });
1995
+ TaskResult2.memoize = (task) => Task.memoize(task);
1996
+ TaskResult2.timeout = (options) => (task) => Task.from.Promise((signal) => {
1997
+ const ms = Duration.to.milliseconds(options.duration);
1998
+ return new Promise((resolve) => {
1999
+ let timerId;
2000
+ const onAbort = () => {
2001
+ clearTimeout(timerId);
2002
+ };
2003
+ if (signal) {
2004
+ if (signal.aborted) {
2005
+ return Deferred.to.Promise(task(signal)).then(resolve);
2006
+ }
2007
+ signal.addEventListener("abort", onAbort, { once: true });
2008
+ }
2009
+ timerId = setTimeout(() => {
2010
+ signal?.removeEventListener("abort", onAbort);
2011
+ resolve(Result.make.err(options.onTimeout()));
2012
+ }, ms);
2013
+ Deferred.to.Promise(task(signal)).then((res) => {
2014
+ clearTimeout(timerId);
2015
+ signal?.removeEventListener("abort", onAbort);
2016
+ resolve(res);
2017
+ });
2018
+ });
2019
+ });
2020
+ TaskResult2.allSettled = (tasks) => Task.from.Promise((signal) => Promise.all(tasks.map((task) => Deferred.to.Promise(task(signal)))));
1761
2021
  })(TaskResult || (TaskResult = {}));
1762
2022
 
1763
2023
  // src/internal/InternalTypes.ts
@@ -1766,9 +2026,15 @@ var isNonEmptyArr = (list) => list.length > 0;
1766
2026
  // src/Core/TaskValidation.ts
1767
2027
  var TaskValidation;
1768
2028
  ((TaskValidation2) => {
1769
- TaskValidation2.passed = (value) => Task.resolve(Validation.make.passed(value));
1770
- TaskValidation2.failed = (error) => Task.resolve(Validation.make.failed(error));
1771
- TaskValidation2.failedAll = (errors) => Task.resolve(Validation.make.failedAll(errors));
2029
+ let make;
2030
+ ((make2) => {
2031
+ make2.passed = (value) => Task.resolve(Validation.make.passed(value));
2032
+ make2.failed = (error) => Task.resolve(Validation.make.failed(error));
2033
+ make2.failedAll = (errors) => Task.resolve(Validation.make.failedAll(errors));
2034
+ })(make = TaskValidation2.make || (TaskValidation2.make = {}));
2035
+ ({ passed: TaskValidation2.passed } = make);
2036
+ ({ failed: TaskValidation2.failed } = make);
2037
+ ({ failedAll: TaskValidation2.failedAll } = make);
1772
2038
  let from;
1773
2039
  ((from2) => {
1774
2040
  from2.Validation = (validation) => Task.resolve(validation);
@@ -1986,7 +2252,8 @@ var Task;
1986
2252
  }
1987
2253
  return results;
1988
2254
  });
1989
- Task2.timeout = (duration, onTimeout) => (task) => from.Promise((outerSignal) => {
2255
+ Task2.timeout = (options) => (task) => from.Promise((outerSignal) => {
2256
+ const { duration, onTimeout } = options;
1990
2257
  const controller = new AbortController();
1991
2258
  let timerId;
1992
2259
  let cleanUp = () => {
@@ -2043,6 +2310,30 @@ var Task;
2043
2310
  Task2.bind = (key, f) => (data) => (0, Task2.chain)(
2044
2311
  (a) => (0, Task2.map)((b) => ({ ...a, [key]: b }))(f(a))
2045
2312
  )(data);
2313
+ Task2.memoize = (task) => {
2314
+ let cached = null;
2315
+ return (signal) => {
2316
+ if (cached === null) {
2317
+ cached = task(signal);
2318
+ }
2319
+ return cached;
2320
+ };
2321
+ };
2322
+ Task2.withProgress = (onProgress) => (task) => (signal) => {
2323
+ onProgress(0);
2324
+ const d = task(signal);
2325
+ return Deferred.from.Promise(
2326
+ Deferred.to.Promise(d).then((res) => {
2327
+ onProgress(1);
2328
+ return res;
2329
+ })
2330
+ );
2331
+ };
2332
+ Task2.withLabel = (label) => (task) => {
2333
+ const fn = ((signal) => task(signal));
2334
+ Object.defineProperty(fn, "label", { value: label, writable: false, enumerable: true, configurable: true });
2335
+ return fn;
2336
+ };
2046
2337
  Task2.Maybe = TaskMaybe;
2047
2338
  Task2.Result = TaskResult;
2048
2339
  Task2.Validation = TaskValidation;
@@ -2183,6 +2474,13 @@ var Validation;
2183
2474
  is2.passed = (data) => data.kind === "Passed";
2184
2475
  is2.failed = (data) => data.kind === "Failed";
2185
2476
  })(is = Validation2.is || (Validation2.is = {}));
2477
+ Validation2.tryCatch = (f, options) => {
2478
+ try {
2479
+ return make.passed(f());
2480
+ } catch (error) {
2481
+ return make.failed(options.onError(error));
2482
+ }
2483
+ };
2186
2484
  let from;
2187
2485
  ((from2) => {
2188
2486
  from2.Predicate = (pred, onFalse) => (a) => pred(a) ? make.passed(a) : make.failed(onFalse(a));
@@ -2198,6 +2496,12 @@ var Validation;
2198
2496
  }
2199
2497
  return is.passed(arg) ? make.failedAll(data.errors) : make.failedAll([...data.errors, ...arg.errors]);
2200
2498
  };
2499
+ Validation2.apCustom = (concat) => (arg) => (data) => {
2500
+ if (is.passed(data)) {
2501
+ return is.passed(arg) ? make.passed(data.value(arg.value)) : make.failedAll(arg.errors);
2502
+ }
2503
+ return is.passed(arg) ? make.failedAll(data.errors) : make.failedAll(concat(data.errors, arg.errors));
2504
+ };
2201
2505
  Validation2.fold = (onFailed, onPassed) => (data) => is.passed(data) ? onPassed(data.value) : onFailed(data.errors);
2202
2506
  Validation2.match = (cases) => (data) => is.passed(data) ? cases.passed(data.value) : cases.failed(data.errors);
2203
2507
  Validation2.getOrElse = (defaultValue) => (data) => is.passed(data) ? data.value : defaultValue();
@@ -2217,7 +2521,14 @@ var Validation;
2217
2521
  Validation2.recoverUnless = (isBlocked, fallback) => (data) => is.failed(data) && !data.errors.some(isBlocked) ? fallback() : data;
2218
2522
  let to;
2219
2523
  ((to2) => {
2220
- to2.Result = (data) => is.passed(data) ? Result.make.ok(data.value) : Result.make.err(data.errors);
2524
+ function Result4(arg) {
2525
+ if (typeof arg === "function") {
2526
+ const combine = arg;
2527
+ return (val) => is.passed(val) ? Result.make.ok(val.value) : Result.make.err(combine(val.errors));
2528
+ }
2529
+ return is.passed(arg) ? Result.make.ok(arg.value) : Result.make.err(arg.errors);
2530
+ }
2531
+ to2.Result = Result4;
2221
2532
  to2.Maybe = (data) => is.passed(data) ? Maybe.make.some(data.value) : Maybe.make.none();
2222
2533
  })(to = Validation2.to || (Validation2.to = {}));
2223
2534
  Validation2.product = (first, second) => {
@@ -2273,6 +2584,7 @@ export {
2273
2584
  Resource,
2274
2585
  Result,
2275
2586
  State,
2587
+ Stream,
2276
2588
  TaskMaybe,
2277
2589
  TaskResult,
2278
2590
  isNonEmptyArr,