@nlozgachev/pipelined 0.46.0 → 0.48.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
@@ -61,6 +61,26 @@ var Combinable;
61
61
  combine: (b) => (a) => Maybe.is.none(a) ? b : Maybe.is.none(b) ? a : Maybe.make.some(inner.combine(b.value)(a.value))
62
62
  });
63
63
  Combinable2.fold = (c) => (data) => data.reduce((acc, x) => c.combine(x)(acc), c.empty);
64
+ Combinable2.struct = (fields) => {
65
+ const empty = {};
66
+ for (const key in fields) {
67
+ if (Object.hasOwn(fields, key)) {
68
+ empty[key] = fields[key].empty;
69
+ }
70
+ }
71
+ return {
72
+ empty,
73
+ combine: (b) => (a) => {
74
+ const result = {};
75
+ for (const key in fields) {
76
+ if (Object.hasOwn(fields, key)) {
77
+ result[key] = fields[key].combine(b[key])(a[key]);
78
+ }
79
+ }
80
+ return result;
81
+ }
82
+ };
83
+ };
64
84
  })(Combinable || (Combinable = {}));
65
85
 
66
86
  // src/Core/Deferred.ts
@@ -77,6 +97,8 @@ var Deferred;
77
97
  ((to2) => {
78
98
  to2.Promise = (d) => new globalThis.Promise((resolve) => d.then(resolve));
79
99
  })(to = Deferred2.to || (Deferred2.to = {}));
100
+ Deferred2.all = (deferreds) => from.Promise(globalThis.Promise.all(deferreds.map((d) => to.Promise(d))));
101
+ Deferred2.race = (deferreds) => from.Promise(globalThis.Promise.race(deferreds.map((d) => to.Promise(d))));
80
102
  })(Deferred || (Deferred = {}));
81
103
 
82
104
  // src/Core/Equality.ts
@@ -89,6 +111,27 @@ var Equality;
89
111
  Equality2.array = (eq) => (a, b) => a.length === b.length && a.every((x, i) => eq(x, b[i]));
90
112
  Equality2.by = (f) => (eq) => (a, b) => eq(f(a), f(b));
91
113
  Equality2.and = (eq2) => (eq1) => (a, b) => eq1(a, b) && eq2(a, b);
114
+ Equality2.struct = (fields) => (a, b) => {
115
+ for (const key in fields) {
116
+ if (Object.hasOwn(fields, key)) {
117
+ if (!fields[key](a[key], b[key])) {
118
+ return false;
119
+ }
120
+ }
121
+ }
122
+ return true;
123
+ };
124
+ Equality2.tuple = (...equalities) => (a, b) => {
125
+ if (a.length !== b.length) {
126
+ return false;
127
+ }
128
+ for (let i = 0; i < equalities.length; i++) {
129
+ if (!equalities[i](a[i], b[i])) {
130
+ return false;
131
+ }
132
+ }
133
+ return true;
134
+ };
92
135
  })(Equality || (Equality = {}));
93
136
 
94
137
  // src/Core/Lazy.ts
@@ -168,6 +211,10 @@ var Logged;
168
211
  Logged2.bind = (key, f) => (data) => (0, Logged2.chain)(
169
212
  (a) => (0, Logged2.map)((b) => ({ ...a, [key]: b }))(f(a))
170
213
  )(data);
214
+ Logged2.focus = (lens) => (f) => (data) => ({
215
+ value: lens.set(f(lens.get(data.value)))(data.value),
216
+ log: data.log
217
+ });
171
218
  })(Logged || (Logged = {}));
172
219
 
173
220
  // src/Core/Maybe.ts
@@ -227,6 +274,7 @@ var Maybe;
227
274
  }
228
275
  return make.some(result);
229
276
  };
277
+ 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
278
  })(Maybe || (Maybe = {}));
231
279
 
232
280
  // src/Types/Brand.ts
@@ -1406,6 +1454,25 @@ var Ordering;
1406
1454
  return r !== 0 ? r : ord2(a, b);
1407
1455
  };
1408
1456
  Ordering2.by = (f) => (ord) => (a, b) => ord(f(a), f(b));
1457
+ Ordering2.byFields = (orderings) => (a, b) => {
1458
+ for (let i = 0; i < orderings.length; i++) {
1459
+ const res = orderings[i](a, b);
1460
+ if (res !== 0) {
1461
+ return res;
1462
+ }
1463
+ }
1464
+ return 0;
1465
+ };
1466
+ Ordering2.tuple = (...orderings) => (a, b) => {
1467
+ const len = Math.min(a.length, b.length);
1468
+ for (let i = 0; i < len; i++) {
1469
+ const res = orderings[i](a[i], b[i]);
1470
+ if (res !== 0) {
1471
+ return res;
1472
+ }
1473
+ }
1474
+ return a.length - b.length;
1475
+ };
1409
1476
  })(Ordering || (Ordering = {}));
1410
1477
 
1411
1478
  // src/Core/Predicate.ts
@@ -1421,6 +1488,15 @@ var Predicate;
1421
1488
  ((from2) => {
1422
1489
  from2.Refinement = (r) => r;
1423
1490
  })(from = Predicate2.from || (Predicate2.from = {}));
1491
+ Predicate2.match = (branches, fallback) => (a) => {
1492
+ for (let i = 0; i < branches.length; i++) {
1493
+ const [p, h] = branches[i];
1494
+ if (p(a)) {
1495
+ return h(a);
1496
+ }
1497
+ }
1498
+ return fallback(a);
1499
+ };
1424
1500
  })(Predicate || (Predicate = {}));
1425
1501
 
1426
1502
  // src/Core/Reader.ts
@@ -1620,11 +1696,11 @@ var Result;
1620
1696
  is2.ok = (data) => data.kind === "Ok";
1621
1697
  is2.err = (data) => data.kind === "Err";
1622
1698
  })(is = Result4.is || (Result4.is = {}));
1623
- Result4.tryCatch = (f, onError) => {
1699
+ Result4.tryCatch = (f, options) => {
1624
1700
  try {
1625
1701
  return make.ok(f());
1626
1702
  } catch (error) {
1627
- return make.err(onError(error));
1703
+ return make.err(options.onError(error));
1628
1704
  }
1629
1705
  };
1630
1706
  Result4.map = (f) => (data) => is.ok(data) ? make.ok(f(data.value)) : data;
@@ -1650,20 +1726,23 @@ var Result;
1650
1726
  from2.Predicate = (pred, onFalse) => (a) => pred(a) ? make.ok(a) : make.err(onFalse(a));
1651
1727
  from2.nullable = (onNull) => (value) => value === null || value === void 0 ? make.err(onNull()) : make.ok(value);
1652
1728
  from2.Maybe = (onNone) => (maybe) => Maybe.is.none(maybe) ? make.err(onNone()) : make.ok(maybe.value);
1653
- from2.throwable = (f, onError) => (...args) => {
1729
+ from2.throwable = (f, options) => (...args) => {
1654
1730
  try {
1655
1731
  return make.ok(f(...args));
1656
1732
  } catch (error) {
1657
- return make.err(onError(error));
1733
+ return make.err(options.onError(error));
1658
1734
  }
1659
1735
  };
1736
+ from2.Validation = (combineErrors) => (val) => Validation.is.passed(val) ? make.ok(val.value) : make.err(combineErrors(val.errors));
1660
1737
  })(from = Result4.from || (Result4.from = {}));
1661
1738
  Result4.recover = (fallback) => (data) => is.ok(data) ? data : fallback(data.error);
1662
1739
  Result4.recoverUnless = (isBlocked, fallback) => (data) => is.err(data) && !isBlocked(data.error) ? fallback() : data;
1663
1740
  let to;
1664
1741
  ((to2) => {
1665
1742
  to2.Maybe = (data) => is.ok(data) ? Maybe.make.some(data.value) : Maybe.make.none();
1743
+ to2.Validation = (data) => Validation.from.Result(data);
1666
1744
  })(to = Result4.to || (Result4.to = {}));
1745
+ 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
1746
  Result4.ap = (arg) => (data) => is.ok(data) && is.ok(arg) ? make.ok(data.value(arg.value)) : is.err(data) ? data : arg;
1668
1747
  Result4.bindTo = (key) => (data) => (0, Result4.map)((a) => ({ [key]: a }))(data);
1669
1748
  Result4.bind = (key, f) => (data) => (0, Result4.chain)(
@@ -1682,6 +1761,8 @@ var Result;
1682
1761
  }
1683
1762
  return make.ok(result);
1684
1763
  };
1764
+ Result4.ensure = (predicate, onFail) => (data) => is.err(data) ? data : predicate(data.value) ? data : make.err(onFail(data.value));
1765
+ Result4.bimap = (onErr, onOk) => (data) => is.ok(data) ? make.ok(onOk(data.value)) : make.err(onErr(data.error));
1685
1766
  })(Result || (Result = {}));
1686
1767
 
1687
1768
  // src/Core/State.ts
@@ -1717,13 +1798,23 @@ var State;
1717
1798
  State2.bind = (key, f) => (data) => (0, State2.chain)(
1718
1799
  (a) => (0, State2.map)((b) => ({ ...a, [key]: b }))(f(a))
1719
1800
  )(data);
1801
+ State2.focus = (lens) => (stateOp) => (s) => {
1802
+ const subState = lens.get(s);
1803
+ const [b, newSubState] = stateOp(subState);
1804
+ return [b, lens.set(newSubState)(s)];
1805
+ };
1720
1806
  })(State || (State = {}));
1721
1807
 
1722
1808
  // src/Core/TaskMaybe.ts
1723
1809
  var TaskMaybe;
1724
1810
  ((TaskMaybe2) => {
1725
- TaskMaybe2.some = (value) => Task.resolve(Maybe.make.some(value));
1726
- TaskMaybe2.none = () => Task.resolve(Maybe.make.none());
1811
+ let make;
1812
+ ((make2) => {
1813
+ make2.some = (value) => Task.resolve(Maybe.make.some(value));
1814
+ make2.none = () => Task.resolve(Maybe.make.none());
1815
+ })(make = TaskMaybe2.make || (TaskMaybe2.make = {}));
1816
+ ({ some: TaskMaybe2.some } = make);
1817
+ ({ none: TaskMaybe2.none } = make);
1727
1818
  let from;
1728
1819
  ((from2) => {
1729
1820
  from2.Maybe = (option) => Task.resolve(option);
@@ -1779,19 +1870,28 @@ var TaskMaybe;
1779
1870
  // src/Core/TaskResult.ts
1780
1871
  var TaskResult;
1781
1872
  ((TaskResult2) => {
1782
- TaskResult2.ok = (value) => Task.resolve(Result.make.ok(value));
1783
- TaskResult2.err = (error) => Task.resolve(Result.make.err(error));
1873
+ let make;
1874
+ ((make2) => {
1875
+ make2.ok = (value) => Task.resolve(Result.make.ok(value));
1876
+ make2.err = (error) => Task.resolve(Result.make.err(error));
1877
+ })(make = TaskResult2.make || (TaskResult2.make = {}));
1878
+ ({ ok: TaskResult2.ok } = make);
1879
+ ({ err: TaskResult2.err } = make);
1784
1880
  let from;
1785
1881
  ((from2) => {
1786
1882
  from2.nullable = (onNull) => (value) => Task.resolve(value === null || value === void 0 ? Result.make.err(onNull()) : Result.make.ok(value));
1787
1883
  from2.Maybe = (onNone) => (maybe) => Task.resolve(Maybe.is.none(maybe) ? Result.make.err(onNone()) : Result.make.ok(maybe.value));
1788
1884
  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)))
1885
+ from2.throwable = (f, options) => (...args) => Task.from.Promise(
1886
+ () => f(...args).then(Result.make.ok).catch((error) => Result.make.err(options.onError(error)))
1791
1887
  );
1792
1888
  })(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)))
1889
+ let to;
1890
+ ((to2) => {
1891
+ to2.Maybe = (data) => Task.map(Result.to.Maybe)(data);
1892
+ })(to = TaskResult2.to || (TaskResult2.to = {}));
1893
+ TaskResult2.tryCatch = (f, options) => Task.from.Promise(
1894
+ (signal) => Promise.resolve(f(signal)).then(Result.make.ok).catch((error) => Result.make.err(options.onError(error)))
1795
1895
  );
1796
1896
  TaskResult2.map = (f) => (data) => Task.map(Result.map(f))(data);
1797
1897
  TaskResult2.mapError = (f) => (data) => Task.map(Result.mapError(f))(data);
@@ -1831,6 +1931,60 @@ var TaskResult;
1831
1931
  return Result.make.ok(record);
1832
1932
  });
1833
1933
  });
1934
+ TaskResult2.retry = (policy) => (task) => Task.from.Promise((signal) => {
1935
+ const { attempts } = policy;
1936
+ const wait = (duration) => new Promise((res) => {
1937
+ let timerId;
1938
+ const onAbort = () => {
1939
+ clearTimeout(timerId);
1940
+ res();
1941
+ };
1942
+ if (signal) {
1943
+ if (signal.aborted) {
1944
+ return res();
1945
+ }
1946
+ signal.addEventListener("abort", onAbort, { once: true });
1947
+ }
1948
+ timerId = setTimeout(() => {
1949
+ signal?.removeEventListener("abort", onAbort);
1950
+ res();
1951
+ }, Duration.to.milliseconds(duration));
1952
+ });
1953
+ const executeAttempt = (attempt) => Deferred.to.Promise(task(signal)).then((res) => {
1954
+ if (Result.is.ok(res) || attempt >= attempts || signal?.aborted) {
1955
+ return res;
1956
+ }
1957
+ const delay = policy.getDelay(attempt);
1958
+ return wait(delay).then(() => executeAttempt(attempt + 1));
1959
+ });
1960
+ return executeAttempt(1);
1961
+ });
1962
+ TaskResult2.memoize = (task) => Task.memoize(task);
1963
+ TaskResult2.timeout = (options) => (task) => Task.from.Promise((signal) => {
1964
+ const ms = Duration.to.milliseconds(options.duration);
1965
+ return new Promise((resolve) => {
1966
+ let timerId;
1967
+ const onAbort = () => {
1968
+ clearTimeout(timerId);
1969
+ };
1970
+ if (signal) {
1971
+ if (signal.aborted) {
1972
+ return Deferred.to.Promise(task(signal)).then(resolve);
1973
+ }
1974
+ signal.addEventListener("abort", onAbort, { once: true });
1975
+ }
1976
+ timerId = setTimeout(() => {
1977
+ signal?.removeEventListener("abort", onAbort);
1978
+ resolve(Result.make.err(options.onTimeout()));
1979
+ }, ms);
1980
+ Deferred.to.Promise(task(signal)).then((res) => {
1981
+ clearTimeout(timerId);
1982
+ signal?.removeEventListener("abort", onAbort);
1983
+ resolve(res);
1984
+ });
1985
+ });
1986
+ });
1987
+ TaskResult2.allSettled = (tasks) => Task.from.Promise((signal) => Promise.all(tasks.map((task) => Deferred.to.Promise(task(signal)))));
1834
1988
  })(TaskResult || (TaskResult = {}));
1835
1989
 
1836
1990
  // src/internal/InternalTypes.ts
@@ -1839,9 +1993,15 @@ var isNonEmptyArr = (list) => list.length > 0;
1839
1993
  // src/Core/TaskValidation.ts
1840
1994
  var TaskValidation;
1841
1995
  ((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));
1996
+ let make;
1997
+ ((make2) => {
1998
+ make2.passed = (value) => Task.resolve(Validation.make.passed(value));
1999
+ make2.failed = (error) => Task.resolve(Validation.make.failed(error));
2000
+ make2.failedAll = (errors) => Task.resolve(Validation.make.failedAll(errors));
2001
+ })(make = TaskValidation2.make || (TaskValidation2.make = {}));
2002
+ ({ passed: TaskValidation2.passed } = make);
2003
+ ({ failed: TaskValidation2.failed } = make);
2004
+ ({ failedAll: TaskValidation2.failedAll } = make);
1845
2005
  let from;
1846
2006
  ((from2) => {
1847
2007
  from2.Validation = (validation) => Task.resolve(validation);
@@ -2059,7 +2219,8 @@ var Task;
2059
2219
  }
2060
2220
  return results;
2061
2221
  });
2062
- Task2.timeout = (duration, onTimeout) => (task) => from.Promise((outerSignal) => {
2222
+ Task2.timeout = (options) => (task) => from.Promise((outerSignal) => {
2223
+ const { duration, onTimeout } = options;
2063
2224
  const controller = new AbortController();
2064
2225
  let timerId;
2065
2226
  let cleanUp = () => {
@@ -2116,6 +2277,30 @@ var Task;
2116
2277
  Task2.bind = (key, f) => (data) => (0, Task2.chain)(
2117
2278
  (a) => (0, Task2.map)((b) => ({ ...a, [key]: b }))(f(a))
2118
2279
  )(data);
2280
+ Task2.memoize = (task) => {
2281
+ let cached = null;
2282
+ return (signal) => {
2283
+ if (cached === null) {
2284
+ cached = task(signal);
2285
+ }
2286
+ return cached;
2287
+ };
2288
+ };
2289
+ Task2.withProgress = (onProgress) => (task) => (signal) => {
2290
+ onProgress(0);
2291
+ const d = task(signal);
2292
+ return Deferred.from.Promise(
2293
+ Deferred.to.Promise(d).then((res) => {
2294
+ onProgress(1);
2295
+ return res;
2296
+ })
2297
+ );
2298
+ };
2299
+ Task2.withLabel = (label) => (task) => {
2300
+ const fn = ((signal) => task(signal));
2301
+ Object.defineProperty(fn, "label", { value: label, writable: false, enumerable: true, configurable: true });
2302
+ return fn;
2303
+ };
2119
2304
  Task2.Maybe = TaskMaybe;
2120
2305
  Task2.Result = TaskResult;
2121
2306
  Task2.Validation = TaskValidation;
@@ -2256,6 +2441,13 @@ var Validation;
2256
2441
  is2.passed = (data) => data.kind === "Passed";
2257
2442
  is2.failed = (data) => data.kind === "Failed";
2258
2443
  })(is = Validation2.is || (Validation2.is = {}));
2444
+ Validation2.tryCatch = (f, options) => {
2445
+ try {
2446
+ return make.passed(f());
2447
+ } catch (error) {
2448
+ return make.failed(options.onError(error));
2449
+ }
2450
+ };
2259
2451
  let from;
2260
2452
  ((from2) => {
2261
2453
  from2.Predicate = (pred, onFalse) => (a) => pred(a) ? make.passed(a) : make.failed(onFalse(a));
@@ -2271,6 +2463,12 @@ var Validation;
2271
2463
  }
2272
2464
  return is.passed(arg) ? make.failedAll(data.errors) : make.failedAll([...data.errors, ...arg.errors]);
2273
2465
  };
2466
+ Validation2.apCustom = (concat) => (arg) => (data) => {
2467
+ if (is.passed(data)) {
2468
+ return is.passed(arg) ? make.passed(data.value(arg.value)) : make.failedAll(arg.errors);
2469
+ }
2470
+ return is.passed(arg) ? make.failedAll(data.errors) : make.failedAll(concat(data.errors, arg.errors));
2471
+ };
2274
2472
  Validation2.fold = (onFailed, onPassed) => (data) => is.passed(data) ? onPassed(data.value) : onFailed(data.errors);
2275
2473
  Validation2.match = (cases) => (data) => is.passed(data) ? cases.passed(data.value) : cases.failed(data.errors);
2276
2474
  Validation2.getOrElse = (defaultValue) => (data) => is.passed(data) ? data.value : defaultValue();
@@ -2290,7 +2488,14 @@ var Validation;
2290
2488
  Validation2.recoverUnless = (isBlocked, fallback) => (data) => is.failed(data) && !data.errors.some(isBlocked) ? fallback() : data;
2291
2489
  let to;
2292
2490
  ((to2) => {
2293
- to2.Result = (data) => is.passed(data) ? Result.make.ok(data.value) : Result.make.err(data.errors);
2491
+ function Result4(arg) {
2492
+ if (typeof arg === "function") {
2493
+ const combine = arg;
2494
+ return (val) => is.passed(val) ? Result.make.ok(val.value) : Result.make.err(combine(val.errors));
2495
+ }
2496
+ return is.passed(arg) ? Result.make.ok(arg.value) : Result.make.err(arg.errors);
2497
+ }
2498
+ to2.Result = Result4;
2294
2499
  to2.Maybe = (data) => is.passed(data) ? Maybe.make.some(data.value) : Maybe.make.none();
2295
2500
  })(to = Validation2.to || (Validation2.to = {}));
2296
2501
  Validation2.product = (first, second) => {
package/dist/core.mjs CHANGED
@@ -23,8 +23,8 @@ import {
23
23
  These,
24
24
  Tuple,
25
25
  Validation
26
- } from "./chunk-VSU36S2K.mjs";
27
- import "./chunk-XTVF5R6R.mjs";
26
+ } from "./chunk-LR63GW6J.mjs";
27
+ import "./chunk-DENXUTKL.mjs";
28
28
  export {
29
29
  Combinable,
30
30
  Deferred,