@nlozgachev/pipelined 0.36.0 → 0.37.1

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,12 +1,6 @@
1
- import {
2
- Deferred,
3
- Maybe,
4
- Result,
5
- Task
6
- } from "./chunk-DLBHVYII.mjs";
7
1
  import {
8
2
  Duration
9
- } from "./chunk-VWVPHDZO.mjs";
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
- ((Lens2) => {
68
- Lens2.make = (get2, set2) => ({ get: get2, set: set2 });
69
- Lens2.prop = () => (key) => (0, Lens2.make)((s) => s[key], (a) => (s) => ({ ...s, [key]: a }));
70
- Lens2.get = (lens) => (s) => lens.get(s);
71
- Lens2.set = (lens) => (a) => (s) => lens.set(a)(s);
72
- Lens2.modify = (lens) => (f) => (s) => lens.set(f(lens.get(s)))(s);
73
- Lens2.andThen = (inner) => (outer) => (0, Lens2.make)((s) => inner.get(outer.get(s)), (b) => (s) => outer.set(inner.set(b)(outer.get(s)))(s));
74
- Lens2.andThenOptional = (inner) => (outer) => ({
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
- Lens2.toOptional = (lens) => ({
82
+ Lens3.toOptional = (lens) => ({
79
83
  get: (s) => ({ kind: "Some", value: lens.get(s) }),
80
84
  set: lens.set
81
85
  });
@@ -103,8 +107,59 @@ var Logged;
103
107
  return data;
104
108
  };
105
109
  Logged2.run = (data) => [data.value, data.log];
110
+ Logged2.bindTo = (key) => (data) => (0, Logged2.map)((a) => ({ [key]: a }))(data);
111
+ Logged2.bind = (key, f) => (data) => (0, Logged2.chain)(
112
+ (a) => (0, Logged2.map)((b) => ({ ...a, [key]: b }))(f(a))
113
+ )(data);
106
114
  })(Logged || (Logged = {}));
107
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
+
108
163
  // src/internal/Op.util.ts
109
164
  var _abortedNil = { kind: "OpNil", reason: "aborted" };
110
165
  var _droppedNil = { kind: "OpNil", reason: "dropped" };
@@ -1277,6 +1332,10 @@ var Reader;
1277
1332
  };
1278
1333
  Reader2.local = (f) => (data) => (env) => data(f(env));
1279
1334
  Reader2.run = (env) => (data) => data(env);
1335
+ Reader2.bindTo = (key) => (data) => (0, Reader2.map)((a) => ({ [key]: a }))(data);
1336
+ Reader2.bind = (key, f) => (data) => (0, Reader2.chain)(
1337
+ (a) => (0, Reader2.map)((b) => ({ ...a, [key]: b }))(f(a))
1338
+ )(data);
1280
1339
  })(Reader || (Reader = {}));
1281
1340
 
1282
1341
  // src/Core/Refinement.ts
@@ -1420,6 +1479,71 @@ var Resource;
1420
1479
  });
1421
1480
  })(Resource || (Resource = {}));
1422
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
+
1423
1547
  // src/Core/State.ts
1424
1548
  var State;
1425
1549
  ((State2) => {
@@ -1449,8 +1573,240 @@ var State;
1449
1573
  State2.run = (initialState) => (st) => st(initialState);
1450
1574
  State2.evaluate = (initialState) => (st) => st(initialState)[0];
1451
1575
  State2.execute = (initialState) => (st) => st(initialState)[1];
1576
+ State2.bindTo = (key) => (data) => (0, State2.map)((a) => ({ [key]: a }))(data);
1577
+ State2.bind = (key, f) => (data) => (0, State2.chain)(
1578
+ (a) => (0, State2.map)((b) => ({ ...a, [key]: b }))(f(a))
1579
+ )(data);
1452
1580
  })(State || (State = {}));
1453
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
+
1454
1810
  // src/Core/TaskMaybe.ts
1455
1811
  var TaskMaybe;
1456
1812
  ((TaskMaybe2) => {
@@ -1474,99 +1830,63 @@ var TaskMaybe;
1474
1830
  TaskMaybe2.tap = (f) => (data) => Task.map(Maybe.tap(f))(data);
1475
1831
  TaskMaybe2.filter = (predicate) => (data) => Task.map(Maybe.filter(predicate))(data);
1476
1832
  TaskMaybe2.toTaskResult = (onNone) => (data) => Task.map(Maybe.toResult(onNone))(data);
1833
+ TaskMaybe2.bindTo = (key) => (data) => (0, TaskMaybe2.map)((a) => ({ [key]: a }))(data);
1834
+ TaskMaybe2.bind = (key, f) => (data) => (0, TaskMaybe2.chain)(
1835
+ (a) => (0, TaskMaybe2.map)((b) => ({ ...a, [key]: b }))(f(a))
1836
+ )(data);
1477
1837
  })(TaskMaybe || (TaskMaybe = {}));
1478
1838
 
1479
1839
  // src/Core/TaskResult.ts
1480
- var TaskResult;
1481
- ((TaskResult2) => {
1482
- TaskResult2.ok = (value) => Task.resolve(Result.ok(value));
1483
- TaskResult2.err = (error) => Task.resolve(Result.err(error));
1484
- TaskResult2.fromNullable = (onNull) => (value) => Task.resolve(value === null || value === void 0 ? Result.err(onNull()) : Result.ok(value));
1485
- TaskResult2.fromMaybe = (onNone) => (maybe) => Task.resolve(Maybe.isNone(maybe) ? Result.err(onNone()) : Result.ok(maybe.value));
1486
- TaskResult2.fromResult = (result) => Task.resolve(result);
1487
- TaskResult2.fromThrowable = (f, onError) => (...args) => Task.from(() => f(...args).then(Result.ok).catch((error) => Result.err(onError(error))));
1488
- TaskResult2.tryCatch = (f, onError) => Task.from((signal) => f(signal).then(Result.ok).catch((error) => Result.err(onError(error))));
1489
- TaskResult2.map = (f) => (data) => Task.map(Result.map(f))(data);
1490
- TaskResult2.mapError = (f) => (data) => Task.map(Result.mapError(f))(data);
1491
- TaskResult2.chain = (f) => (data) => Task.chain((result) => Result.isOk(result) ? f(result.value) : Task.resolve(Result.err(result.error)))(
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)))(
1492
1852
  data
1493
1853
  );
1494
- TaskResult2.fold = (onErr, onOk) => (data) => Task.map(Result.fold(onErr, onOk))(data);
1495
- TaskResult2.match = (cases) => (data) => Task.map(Result.match(cases))(data);
1496
- TaskResult2.recover = (fallback) => (data) => Task.chain(
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(
1497
1857
  (result) => Result.isErr(result) ? fallback(result.error) : Task.resolve(result)
1498
1858
  )(data);
1499
- TaskResult2.getOrElse = (defaultValue) => (data) => Task.map(Result.getOrElse(defaultValue))(data);
1500
- TaskResult2.tap = (f) => (data) => Task.map(Result.tap(f))(data);
1501
- TaskResult2.tapError = (f) => (data) => Task.map(Result.tapError(f))(data);
1502
- TaskResult2.ap = (arg) => (data) => Task.from(
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(
1503
1863
  (signal) => Promise.all([Deferred.toPromise(data(signal)), Deferred.toPromise(arg(signal))]).then(
1504
1864
  ([of_, oa]) => Result.ap(oa)(of_)
1505
1865
  )
1506
1866
  );
1507
- TaskResult2.run = (signal) => (task) => Deferred.toPromise(task(signal));
1508
- })(TaskResult || (TaskResult = {}));
1509
-
1510
- // src/Core/Validation.ts
1511
- var Validation;
1512
- ((Validation2) => {
1513
- Validation2.passed = (value) => ({ kind: "Passed", value });
1514
- Validation2.failed = (error) => ({ kind: "Failed", errors: [error] });
1515
- Validation2.failedAll = (errors) => ({ kind: "Failed", errors });
1516
- Validation2.isPassed = (data) => data.kind === "Passed";
1517
- Validation2.isFailed = (data) => data.kind === "Failed";
1518
- Validation2.fromPredicate = (pred, onFalse) => (a) => pred(a) ? (0, Validation2.passed)(a) : (0, Validation2.failed)(onFalse(a));
1519
- Validation2.fromNullable = (onNull) => (value) => value === null || value === void 0 ? (0, Validation2.failed)(onNull()) : (0, Validation2.passed)(value);
1520
- Validation2.fromMaybe = (onNone) => (maybe) => Maybe.isNone(maybe) ? (0, Validation2.failed)(onNone()) : (0, Validation2.passed)(maybe.value);
1521
- Validation2.map = (f) => (data) => (0, Validation2.isPassed)(data) ? (0, Validation2.passed)(f(data.value)) : data;
1522
- Validation2.mapError = (f) => (data) => (0, Validation2.isFailed)(data) ? (0, Validation2.failedAll)(data.errors.map(f)) : data;
1523
- Validation2.ap = (arg) => (data) => {
1524
- if ((0, Validation2.isPassed)(data) && (0, Validation2.isPassed)(arg)) {
1525
- return (0, Validation2.passed)(data.value(arg.value));
1526
- }
1527
- const errors = [...(0, Validation2.isFailed)(data) ? data.errors : [], ...(0, Validation2.isFailed)(arg) ? arg.errors : []];
1528
- return (0, Validation2.failedAll)(errors);
1529
- };
1530
- Validation2.fold = (onFailed, onPassed) => (data) => (0, Validation2.isPassed)(data) ? onPassed(data.value) : onFailed(data.errors);
1531
- Validation2.match = (cases) => (data) => (0, Validation2.isPassed)(data) ? cases.passed(data.value) : cases.failed(data.errors);
1532
- Validation2.getOrElse = (defaultValue) => (data) => (0, Validation2.isPassed)(data) ? data.value : defaultValue();
1533
- Validation2.tap = (f) => (data) => {
1534
- if ((0, Validation2.isPassed)(data)) {
1535
- f(data.value);
1536
- }
1537
- return data;
1538
- };
1539
- Validation2.tapError = (f) => (data) => {
1540
- if ((0, Validation2.isFailed)(data)) {
1541
- f(data.errors);
1542
- }
1543
- return data;
1544
- };
1545
- Validation2.recover = (fallback) => (data) => (0, Validation2.isPassed)(data) ? data : fallback(data.errors);
1546
- Validation2.recoverUnless = (isBlocked, fallback) => (data) => (0, Validation2.isFailed)(data) && !data.errors.some(isBlocked) ? fallback() : data;
1547
- Validation2.toResult = (data) => (0, Validation2.isPassed)(data) ? Result.ok(data.value) : Result.err(data.errors);
1548
- Validation2.toMaybe = (data) => (0, Validation2.isPassed)(data) ? Maybe.some(data.value) : Maybe.none();
1549
- Validation2.fromResult = (data) => data.kind === "Ok" ? (0, Validation2.passed)(data.value) : (0, Validation2.failed)(data.error);
1550
- Validation2.product = (first, second) => {
1551
- if ((0, Validation2.isPassed)(first) && (0, Validation2.isPassed)(second)) {
1552
- return (0, Validation2.passed)([first.value, second.value]);
1553
- }
1554
- const errors = [...(0, Validation2.isFailed)(first) ? first.errors : [], ...(0, Validation2.isFailed)(second) ? second.errors : []];
1555
- return (0, Validation2.failedAll)(errors);
1556
- };
1557
- Validation2.productAll = (data) => {
1558
- const values = [];
1559
- const errors = [];
1560
- for (const v of data) {
1561
- if ((0, Validation2.isPassed)(v)) {
1562
- values.push(v.value);
1563
- } else {
1564
- errors.push(...v.errors);
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))
1871
+ )(data);
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
+ }
1565
1885
  }
1566
- }
1567
- return errors.length > 0 ? (0, Validation2.failedAll)(errors) : (0, Validation2.passed)(values);
1568
- };
1569
- })(Validation || (Validation = {}));
1886
+ return Result.ok(record);
1887
+ });
1888
+ });
1889
+ })(TaskResult3 || (TaskResult3 = {}));
1570
1890
 
1571
1891
  // src/Core/TaskValidation.ts
1572
1892
  var TaskValidation;
@@ -1712,12 +2032,90 @@ var Tuple;
1712
2032
  };
1713
2033
  })(Tuple || (Tuple = {}));
1714
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
+
1715
2111
  export {
1716
2112
  Combinable,
2113
+ Deferred,
1717
2114
  Equality,
1718
2115
  Lazy,
1719
2116
  Lens,
1720
2117
  Logged,
2118
+ Maybe,
1721
2119
  Op,
1722
2120
  Optional,
1723
2121
  Ordering,
@@ -1726,11 +2124,13 @@ export {
1726
2124
  Refinement,
1727
2125
  RemoteData,
1728
2126
  Resource,
2127
+ Result,
1729
2128
  State,
2129
+ Task,
1730
2130
  TaskMaybe,
1731
- TaskResult,
1732
- Validation,
2131
+ TaskResult3 as TaskResult,
1733
2132
  TaskValidation,
1734
2133
  These,
1735
- Tuple
2134
+ Tuple,
2135
+ Validation
1736
2136
  };