@nlozgachev/pipelined 0.31.0 → 0.32.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/index.js CHANGED
@@ -22,14 +22,18 @@ var src_exports = {};
22
22
  __export(src_exports, {
23
23
  Arr: () => Arr,
24
24
  Brand: () => Brand,
25
+ Combinable: () => Combinable,
25
26
  Deferred: () => Deferred,
26
27
  Dict: () => Dict,
28
+ Equality: () => Equality,
29
+ Lazy: () => Lazy,
27
30
  Lens: () => Lens,
28
31
  Logged: () => Logged,
29
32
  Maybe: () => Maybe,
30
33
  Num: () => Num,
31
34
  Op: () => Op,
32
35
  Optional: () => Optional,
36
+ Ordering: () => Ordering,
33
37
  Predicate: () => Predicate,
34
38
  Reader: () => Reader,
35
39
  Rec: () => Rec,
@@ -288,65 +292,6 @@ function uncurry(f) {
288
292
  var uncurry3 = (f) => (a, b, c) => f(a)(b)(c);
289
293
  var uncurry4 = (f) => (a, b, c, d) => f(a)(b)(c)(d);
290
294
 
291
- // src/Core/Deferred.ts
292
- var Deferred;
293
- ((Deferred2) => {
294
- Deferred2.fromPromise = (p) => (
295
- // eslint-disable-next-line unicorn/no-thenable -- Deferred is intentionally thenable; it is the mechanism that makes Task awaitable
296
- { then: ((f) => p.then(f)) }
297
- );
298
- Deferred2.toPromise = (d) => new Promise((resolve) => d.then(resolve));
299
- })(Deferred || (Deferred = {}));
300
-
301
- // src/Core/Lens.ts
302
- var Lens;
303
- ((Lens2) => {
304
- Lens2.make = (get2, set2) => ({ get: get2, set: set2 });
305
- Lens2.prop = () => (key) => (0, Lens2.make)(
306
- (s) => s[key],
307
- (a) => (s) => ({ ...s, [key]: a })
308
- );
309
- Lens2.get = (lens) => (s) => lens.get(s);
310
- Lens2.set = (lens) => (a) => (s) => lens.set(a)(s);
311
- Lens2.modify = (lens) => (f) => (s) => lens.set(f(lens.get(s)))(s);
312
- Lens2.andThen = (inner) => (outer) => (0, Lens2.make)(
313
- (s) => inner.get(outer.get(s)),
314
- (b) => (s) => outer.set(inner.set(b)(outer.get(s)))(s)
315
- );
316
- Lens2.andThenOptional = (inner) => (outer) => ({
317
- get: (s) => inner.get(outer.get(s)),
318
- set: (b) => (s) => outer.set(inner.set(b)(outer.get(s)))(s)
319
- });
320
- Lens2.toOptional = (lens) => ({
321
- get: (s) => ({ kind: "Some", value: lens.get(s) }),
322
- set: lens.set
323
- });
324
- })(Lens || (Lens = {}));
325
-
326
- // src/Core/Logged.ts
327
- var Logged;
328
- ((Logged2) => {
329
- Logged2.make = (value) => ({ value, log: [] });
330
- Logged2.tell = (entry) => ({ value: void 0, log: [entry] });
331
- Logged2.map = (f) => (data) => ({
332
- value: f(data.value),
333
- log: data.log
334
- });
335
- Logged2.chain = (f) => (data) => {
336
- const next = f(data.value);
337
- return { value: next.value, log: [...data.log, ...next.log] };
338
- };
339
- Logged2.ap = (arg) => (data) => ({
340
- value: data.value(arg.value),
341
- log: [...data.log, ...arg.log]
342
- });
343
- Logged2.tap = (f) => (data) => {
344
- f(data.value);
345
- return data;
346
- };
347
- Logged2.run = (data) => [data.value, data.log];
348
- })(Logged || (Logged = {}));
349
-
350
295
  // src/Core/Result.ts
351
296
  var Result;
352
297
  ((Result2) => {
@@ -410,6 +355,137 @@ var Maybe;
410
355
  Maybe2.ap = (arg) => (data) => (0, Maybe2.isSome)(data) && (0, Maybe2.isSome)(arg) ? (0, Maybe2.some)(data.value(arg.value)) : (0, Maybe2.none)();
411
356
  })(Maybe || (Maybe = {}));
412
357
 
358
+ // src/Core/Combinable.ts
359
+ var Combinable;
360
+ ((Combinable2) => {
361
+ Combinable2.string = {
362
+ empty: "",
363
+ combine: (b) => (a) => a + b
364
+ };
365
+ Combinable2.sum = {
366
+ empty: 0,
367
+ combine: (b) => (a) => a + b
368
+ };
369
+ Combinable2.product = {
370
+ empty: 1,
371
+ combine: (b) => (a) => a * b
372
+ };
373
+ Combinable2.all = {
374
+ empty: true,
375
+ combine: (b) => (a) => a && b
376
+ };
377
+ Combinable2.any = {
378
+ empty: false,
379
+ combine: (b) => (a) => a || b
380
+ };
381
+ Combinable2.array = () => ({
382
+ empty: [],
383
+ combine: (b) => (a) => [...a, ...b]
384
+ });
385
+ Combinable2.maybe = (inner) => ({
386
+ empty: Maybe.none(),
387
+ combine: (b) => (a) => Maybe.isNone(a) ? b : Maybe.isNone(b) ? a : Maybe.some(inner.combine(b.value)(a.value))
388
+ });
389
+ Combinable2.fold = (c) => (data) => data.reduce((acc, x) => c.combine(x)(acc), c.empty);
390
+ })(Combinable || (Combinable = {}));
391
+
392
+ // src/Core/Deferred.ts
393
+ var Deferred;
394
+ ((Deferred2) => {
395
+ Deferred2.fromPromise = (p) => (
396
+ // eslint-disable-next-line unicorn/no-thenable -- Deferred is intentionally thenable; it is the mechanism that makes Task awaitable
397
+ { then: ((f) => p.then(f)) }
398
+ );
399
+ Deferred2.toPromise = (d) => new Promise((resolve) => d.then(resolve));
400
+ })(Deferred || (Deferred = {}));
401
+
402
+ // src/Core/Equality.ts
403
+ var Equality;
404
+ ((Equality2) => {
405
+ Equality2.string = (a, b) => a === b;
406
+ Equality2.number = (a, b) => a === b;
407
+ Equality2.boolean = (a, b) => a === b;
408
+ Equality2.date = (a, b) => a.getTime() === b.getTime();
409
+ Equality2.array = (eq) => (a, b) => a.length === b.length && a.every((x, i) => eq(x, b[i]));
410
+ Equality2.by = (f) => (eq) => (a, b) => eq(f(a), f(b));
411
+ Equality2.and = (eq2) => (eq1) => (a, b) => eq1(a, b) && eq2(a, b);
412
+ })(Equality || (Equality = {}));
413
+
414
+ // src/Core/Lazy.ts
415
+ var Lazy;
416
+ ((Lazy2) => {
417
+ Lazy2.from = (f) => {
418
+ let done = false;
419
+ let cache;
420
+ return {
421
+ get: () => {
422
+ if (!done) {
423
+ cache = f();
424
+ done = true;
425
+ }
426
+ return cache;
427
+ }
428
+ };
429
+ };
430
+ Lazy2.evaluate = (lazy) => lazy.get();
431
+ Lazy2.map = (f) => (lazy) => Lazy2.from(() => f(lazy.get()));
432
+ Lazy2.chain = (f) => (lazy) => Lazy2.from(() => f(lazy.get()).get());
433
+ Lazy2.tap = (f) => (lazy) => Lazy2.from(() => {
434
+ const v = lazy.get();
435
+ f(v);
436
+ return v;
437
+ });
438
+ })(Lazy || (Lazy = {}));
439
+
440
+ // src/Core/Lens.ts
441
+ var Lens;
442
+ ((Lens2) => {
443
+ Lens2.make = (get2, set2) => ({ get: get2, set: set2 });
444
+ Lens2.prop = () => (key) => (0, Lens2.make)(
445
+ (s) => s[key],
446
+ (a) => (s) => ({ ...s, [key]: a })
447
+ );
448
+ Lens2.get = (lens) => (s) => lens.get(s);
449
+ Lens2.set = (lens) => (a) => (s) => lens.set(a)(s);
450
+ Lens2.modify = (lens) => (f) => (s) => lens.set(f(lens.get(s)))(s);
451
+ Lens2.andThen = (inner) => (outer) => (0, Lens2.make)(
452
+ (s) => inner.get(outer.get(s)),
453
+ (b) => (s) => outer.set(inner.set(b)(outer.get(s)))(s)
454
+ );
455
+ Lens2.andThenOptional = (inner) => (outer) => ({
456
+ get: (s) => inner.get(outer.get(s)),
457
+ set: (b) => (s) => outer.set(inner.set(b)(outer.get(s)))(s)
458
+ });
459
+ Lens2.toOptional = (lens) => ({
460
+ get: (s) => ({ kind: "Some", value: lens.get(s) }),
461
+ set: lens.set
462
+ });
463
+ })(Lens || (Lens = {}));
464
+
465
+ // src/Core/Logged.ts
466
+ var Logged;
467
+ ((Logged2) => {
468
+ Logged2.make = (value) => ({ value, log: [] });
469
+ Logged2.tell = (entry) => ({ value: void 0, log: [entry] });
470
+ Logged2.map = (f) => (data) => ({
471
+ value: f(data.value),
472
+ log: data.log
473
+ });
474
+ Logged2.chain = (f) => (data) => {
475
+ const next = f(data.value);
476
+ return { value: next.value, log: [...data.log, ...next.log] };
477
+ };
478
+ Logged2.ap = (arg) => (data) => ({
479
+ value: data.value(arg.value),
480
+ log: [...data.log, ...arg.log]
481
+ });
482
+ Logged2.tap = (f) => (data) => {
483
+ f(data.value);
484
+ return data;
485
+ };
486
+ Logged2.run = (data) => [data.value, data.log];
487
+ })(Logged || (Logged = {}));
488
+
413
489
  // src/internal/Op.util.ts
414
490
  var _abortedNil = { kind: "OpNil", reason: "aborted" };
415
491
  var _droppedNil = { kind: "OpNil", reason: "dropped" };
@@ -1412,6 +1488,20 @@ var Optional;
1412
1488
  );
1413
1489
  })(Optional || (Optional = {}));
1414
1490
 
1491
+ // src/Core/Ordering.ts
1492
+ var Ordering;
1493
+ ((Ordering2) => {
1494
+ Ordering2.string = (a, b) => a < b ? -1 : a > b ? 1 : 0;
1495
+ Ordering2.number = (a, b) => a - b;
1496
+ Ordering2.date = (a, b) => a.getTime() - b.getTime();
1497
+ Ordering2.reverse = (ord) => (a, b) => ord(b, a);
1498
+ Ordering2.thenBy = (ord2) => (ord1) => (a, b) => {
1499
+ const r = ord1(a, b);
1500
+ return r !== 0 ? r : ord2(a, b);
1501
+ };
1502
+ Ordering2.by = (f) => (ord) => (a, b) => ord(f(a), f(b));
1503
+ })(Ordering || (Ordering = {}));
1504
+
1415
1505
  // src/Core/Predicate.ts
1416
1506
  var Predicate;
1417
1507
  ((Predicate2) => {
@@ -1550,58 +1640,135 @@ var Task;
1550
1640
  (signal) => Promise.all(tasks.map((t) => toPromise(t, signal)))
1551
1641
  );
1552
1642
  Task2.delay = (ms) => (data) => (0, Task2.from)(
1553
- (signal) => new Promise(
1554
- (resolve2) => setTimeout(
1555
- () => toPromise(data, signal).then(resolve2),
1556
- ms
1557
- )
1558
- )
1643
+ (signal) => new Promise((resolve2) => {
1644
+ let timerId = void 0;
1645
+ const onAbort = () => {
1646
+ if (timerId !== void 0) {
1647
+ clearTimeout(timerId);
1648
+ }
1649
+ resolve2(toPromise(data, signal));
1650
+ };
1651
+ if (signal) {
1652
+ if (signal.aborted) {
1653
+ return resolve2(toPromise(data, signal));
1654
+ }
1655
+ signal.addEventListener("abort", onAbort, { once: true });
1656
+ }
1657
+ timerId = setTimeout(() => {
1658
+ signal?.removeEventListener("abort", onAbort);
1659
+ resolve2(toPromise(data, signal));
1660
+ }, ms);
1661
+ })
1559
1662
  );
1560
1663
  Task2.repeat = (options) => (task) => (0, Task2.from)((signal) => {
1561
1664
  const { times, delay: ms } = options;
1562
1665
  if (times <= 0) return Promise.resolve([]);
1563
1666
  const results = [];
1564
- const wait = () => ms !== void 0 && ms > 0 ? new Promise((r) => setTimeout(r, ms)) : Promise.resolve();
1565
- const run2 = (left) => toPromise(task, signal).then((a) => {
1566
- results.push(a);
1567
- if (left <= 1) return results;
1568
- return wait().then(() => run2(left - 1));
1569
- });
1667
+ const wait = () => {
1668
+ if (signal?.aborted) return Promise.resolve();
1669
+ return new Promise((r) => {
1670
+ let timerId = void 0;
1671
+ const onAbort = () => {
1672
+ if (timerId !== void 0) {
1673
+ clearTimeout(timerId);
1674
+ }
1675
+ r();
1676
+ };
1677
+ if (signal) {
1678
+ signal.addEventListener("abort", onAbort, { once: true });
1679
+ }
1680
+ timerId = setTimeout(() => {
1681
+ signal?.removeEventListener("abort", onAbort);
1682
+ r();
1683
+ }, ms || 0);
1684
+ });
1685
+ };
1686
+ const run2 = (left) => {
1687
+ if (signal?.aborted) {
1688
+ return Promise.resolve(results);
1689
+ }
1690
+ return toPromise(task, signal).then((a) => {
1691
+ results.push(a);
1692
+ if (left <= 1 || signal?.aborted) return results;
1693
+ return wait().then(() => run2(left - 1));
1694
+ });
1695
+ };
1570
1696
  return run2(times);
1571
1697
  });
1572
1698
  Task2.repeatUntil = (options) => (task) => (0, Task2.from)((signal) => {
1573
1699
  const { when: predicate, delay: ms, maxAttempts } = options;
1574
- const wait = () => ms !== void 0 && ms > 0 ? new Promise((r) => setTimeout(r, ms)) : Promise.resolve();
1575
- const run2 = (attempt) => toPromise(task, signal).then((a) => {
1576
- if (predicate(a)) return a;
1577
- if (maxAttempts !== void 0 && attempt >= maxAttempts) return a;
1578
- return wait().then(() => run2(attempt + 1));
1579
- });
1700
+ const wait = () => {
1701
+ if (signal?.aborted) return Promise.resolve();
1702
+ return new Promise((r) => {
1703
+ let timerId = void 0;
1704
+ const onAbort = () => {
1705
+ if (timerId !== void 0) {
1706
+ clearTimeout(timerId);
1707
+ }
1708
+ r();
1709
+ };
1710
+ if (signal) {
1711
+ signal.addEventListener("abort", onAbort, { once: true });
1712
+ }
1713
+ timerId = setTimeout(() => {
1714
+ signal?.removeEventListener("abort", onAbort);
1715
+ r();
1716
+ }, ms || 0);
1717
+ });
1718
+ };
1719
+ const run2 = (attempt, lastValue) => {
1720
+ if (signal?.aborted && lastValue !== void 0) {
1721
+ return Promise.resolve(lastValue);
1722
+ }
1723
+ return toPromise(task, signal).then((a) => {
1724
+ if (predicate(a)) return a;
1725
+ if (maxAttempts !== void 0 && attempt >= maxAttempts) return a;
1726
+ if (signal?.aborted) return a;
1727
+ return wait().then(() => run2(attempt + 1, a));
1728
+ });
1729
+ };
1580
1730
  return run2(1);
1581
1731
  });
1582
1732
  Task2.race = (tasks) => (0, Task2.from)((signal) => Promise.race(tasks.map((t) => toPromise(t, signal))));
1583
1733
  Task2.sequential = (tasks) => (0, Task2.from)(async (signal) => {
1584
1734
  const results = [];
1585
1735
  for (const task of tasks) {
1736
+ if (signal?.aborted) {
1737
+ break;
1738
+ }
1586
1739
  results.push(await toPromise(task, signal));
1587
1740
  }
1588
1741
  return results;
1589
1742
  });
1590
1743
  Task2.timeout = (ms, onTimeout) => (task) => (0, Task2.from)((outerSignal) => {
1591
1744
  const controller = new AbortController();
1592
- const onOuterAbort = () => controller.abort();
1593
- outerSignal?.addEventListener("abort", onOuterAbort, { once: true });
1594
1745
  let timerId;
1746
+ const cleanUp = () => {
1747
+ if (timerId !== void 0) {
1748
+ clearTimeout(timerId);
1749
+ }
1750
+ outerSignal?.removeEventListener("abort", onOuterAbort);
1751
+ };
1752
+ const onOuterAbort = () => {
1753
+ cleanUp();
1754
+ controller.abort();
1755
+ };
1756
+ if (outerSignal) {
1757
+ if (outerSignal.aborted) {
1758
+ controller.abort();
1759
+ } else {
1760
+ outerSignal.addEventListener("abort", onOuterAbort, { once: true });
1761
+ }
1762
+ }
1595
1763
  return Promise.race([
1596
1764
  toPromise(task, controller.signal).then((a) => {
1597
- clearTimeout(timerId);
1598
- outerSignal?.removeEventListener("abort", onOuterAbort);
1765
+ cleanUp();
1599
1766
  return Result.ok(a);
1600
1767
  }),
1601
1768
  new Promise((resolve2) => {
1602
1769
  timerId = setTimeout(() => {
1603
1770
  controller.abort();
1604
- outerSignal?.removeEventListener("abort", onOuterAbort);
1771
+ cleanUp();
1605
1772
  resolve2(Result.error(onTimeout()));
1606
1773
  }, ms);
1607
1774
  })
@@ -1637,28 +1804,33 @@ var Resource;
1637
1804
  release
1638
1805
  });
1639
1806
  Resource2.use = (f) => (resource) => Task.from(
1640
- () => Deferred.toPromise(resource.acquire()).then(async (acquired) => {
1807
+ (signal) => Deferred.toPromise(resource.acquire(signal)).then(async (acquired) => {
1641
1808
  if (Result.isError(acquired)) return acquired;
1642
1809
  const a = acquired.value;
1643
- const usageResult = await Deferred.toPromise(f(a)());
1644
- await Deferred.toPromise(resource.release(a)());
1645
- return usageResult;
1810
+ try {
1811
+ const usageResult = await Deferred.toPromise(f(a)(signal));
1812
+ return usageResult;
1813
+ } finally {
1814
+ await Deferred.toPromise(resource.release(a)(signal));
1815
+ }
1646
1816
  })
1647
1817
  );
1648
1818
  Resource2.combine = (resourceA, resourceB) => ({
1649
1819
  acquire: Task.from(
1650
- () => Deferred.toPromise(resourceA.acquire()).then(async (acquiredA) => {
1820
+ (signal) => Deferred.toPromise(resourceA.acquire(signal)).then(async (acquiredA) => {
1651
1821
  if (Result.isError(acquiredA)) return acquiredA;
1652
1822
  const a = acquiredA.value;
1653
- const acquiredB = await Deferred.toPromise(resourceB.acquire());
1823
+ const acquiredB = await Deferred.toPromise(resourceB.acquire(signal));
1654
1824
  if (Result.isError(acquiredB)) {
1655
- await Deferred.toPromise(resourceA.release(a)());
1825
+ await Deferred.toPromise(resourceA.release(a)(signal));
1656
1826
  return acquiredB;
1657
1827
  }
1658
1828
  return Result.ok([a, acquiredB.value]);
1659
1829
  })
1660
1830
  ),
1661
- release: ([a, b]) => Task.from(() => Deferred.toPromise(resourceB.release(b)()).then(() => Deferred.toPromise(resourceA.release(a)())))
1831
+ release: ([a, b]) => Task.from(
1832
+ (signal) => Deferred.toPromise(resourceB.release(b)(signal)).then(() => Deferred.toPromise(resourceA.release(a)(signal)))
1833
+ )
1662
1834
  });
1663
1835
  })(Resource || (Resource = {}));
1664
1836
 
@@ -1701,14 +1873,14 @@ var TaskMaybe;
1701
1873
  TaskMaybe2.fromMaybe = (option) => Task.resolve(option);
1702
1874
  TaskMaybe2.fromTask = (task) => Task.map(Maybe.some)(task);
1703
1875
  TaskMaybe2.tryCatch = (f) => Task.from(
1704
- () => f().then(Maybe.some).catch(() => Maybe.none())
1876
+ (signal) => f(signal).then(Maybe.some).catch(() => Maybe.none())
1705
1877
  );
1706
1878
  TaskMaybe2.map = (f) => (data) => Task.map(Maybe.map(f))(data);
1707
1879
  TaskMaybe2.chain = (f) => (data) => Task.chain((option) => Maybe.isSome(option) ? f(option.value) : Task.resolve(Maybe.none()))(data);
1708
1880
  TaskMaybe2.ap = (arg) => (data) => Task.from(
1709
- () => Promise.all([
1710
- Deferred.toPromise(data()),
1711
- Deferred.toPromise(arg())
1881
+ (signal) => Promise.all([
1882
+ Deferred.toPromise(data(signal)),
1883
+ Deferred.toPromise(arg(signal))
1712
1884
  ]).then(([of_, oa]) => Maybe.ap(oa)(of_))
1713
1885
  );
1714
1886
  TaskMaybe2.fold = (onNone, onSome) => (data) => Task.map(Maybe.fold(onNone, onSome))(data);
@@ -1742,6 +1914,12 @@ var TaskResult;
1742
1914
  TaskResult2.getOrElse = (defaultValue) => (data) => Task.map(Result.getOrElse(defaultValue))(data);
1743
1915
  TaskResult2.tap = (f) => (data) => Task.map(Result.tap(f))(data);
1744
1916
  TaskResult2.tapError = (f) => (data) => Task.map(Result.tapError(f))(data);
1917
+ TaskResult2.ap = (arg) => (data) => Task.from(
1918
+ (signal) => Promise.all([
1919
+ Deferred.toPromise(data(signal)),
1920
+ Deferred.toPromise(arg(signal))
1921
+ ]).then(([of_, oa]) => Result.ap(oa)(of_))
1922
+ );
1745
1923
  TaskResult2.run = (signal) => (task) => Deferred.toPromise(task(signal));
1746
1924
  })(TaskResult || (TaskResult = {}));
1747
1925
 
@@ -1815,13 +1993,13 @@ var TaskValidation;
1815
1993
  TaskValidation2.invalidAll = (errors) => Task.resolve(Validation.invalidAll(errors));
1816
1994
  TaskValidation2.fromValidation = (validation) => Task.resolve(validation);
1817
1995
  TaskValidation2.tryCatch = (f, onError) => Task.from(
1818
- () => f().then(Validation.valid).catch((e) => Validation.invalid(onError(e)))
1996
+ (signal) => f(signal).then(Validation.valid).catch((e) => Validation.invalid(onError(e)))
1819
1997
  );
1820
1998
  TaskValidation2.map = (f) => (data) => Task.map(Validation.map(f))(data);
1821
1999
  TaskValidation2.ap = (arg) => (data) => Task.from(
1822
- () => Promise.all([
1823
- Deferred.toPromise(data()),
1824
- Deferred.toPromise(arg())
2000
+ (signal) => Promise.all([
2001
+ Deferred.toPromise(data(signal)),
2002
+ Deferred.toPromise(arg(signal))
1825
2003
  ]).then(([vf, va]) => Validation.ap(va)(vf))
1826
2004
  );
1827
2005
  TaskValidation2.fold = (onInvalid, onValid) => (data) => Task.map(Validation.fold(onInvalid, onValid))(data);
@@ -1832,13 +2010,13 @@ var TaskValidation;
1832
2010
  (validation) => Validation.isValid(validation) ? Task.resolve(validation) : fallback(validation.errors)
1833
2011
  )(data);
1834
2012
  TaskValidation2.product = (first, second) => Task.from(
1835
- () => Promise.all([
1836
- Deferred.toPromise(first()),
1837
- Deferred.toPromise(second())
2013
+ (signal) => Promise.all([
2014
+ Deferred.toPromise(first(signal)),
2015
+ Deferred.toPromise(second(signal))
1838
2016
  ]).then(([va, vb]) => Validation.product(va, vb))
1839
2017
  );
1840
2018
  TaskValidation2.productAll = (data) => Task.from(
1841
- () => Promise.all(data.map((t) => Deferred.toPromise(t()))).then((results) => Validation.productAll(results))
2019
+ (signal) => Promise.all(data.map((t) => Deferred.toPromise(t(signal)))).then((results) => Validation.productAll(results))
1842
2020
  );
1843
2021
  })(TaskValidation || (TaskValidation = {}));
1844
2022
 
@@ -2015,11 +2193,25 @@ var Arr;
2015
2193
  }
2016
2194
  return result;
2017
2195
  };
2196
+ Arr2.uniqWith = (eq) => (data) => {
2197
+ const result = [];
2198
+ for (const a of data) {
2199
+ if (!result.some((x) => eq(x, a))) {
2200
+ result.push(a);
2201
+ }
2202
+ }
2203
+ return result;
2204
+ };
2018
2205
  Arr2.sortBy = (compare) => (data) => {
2019
2206
  const arr = data;
2020
2207
  if (typeof arr.toSorted === "function") return arr.toSorted(compare);
2021
2208
  return [...data].sort(compare);
2022
2209
  };
2210
+ Arr2.sortWith = (ord) => (data) => {
2211
+ const arr = data;
2212
+ if (typeof arr.toSorted === "function") return arr.toSorted(ord);
2213
+ return [...data].sort(ord);
2214
+ };
2023
2215
  Arr2.zip = (other) => (data) => {
2024
2216
  const len = Math.min(data.length, other.length);
2025
2217
  const result = new Array(len);
@@ -2052,7 +2244,23 @@ var Arr;
2052
2244
  }
2053
2245
  return result;
2054
2246
  };
2055
- Arr2.flatten = (data) => [].concat(...data);
2247
+ Arr2.flatten = (data) => {
2248
+ let totalLen = 0;
2249
+ const outerLen = data.length;
2250
+ for (let i = 0; i < outerLen; i++) {
2251
+ totalLen += data[i].length;
2252
+ }
2253
+ const result = new Array(totalLen);
2254
+ let idx = 0;
2255
+ for (let i = 0; i < outerLen; i++) {
2256
+ const chunk = data[i];
2257
+ const innerLen = chunk.length;
2258
+ for (let j = 0; j < innerLen; j++) {
2259
+ result[idx++] = chunk[j];
2260
+ }
2261
+ }
2262
+ return result;
2263
+ };
2056
2264
  Arr2.flatMap = (f) => (data) => {
2057
2265
  const n = data.length;
2058
2266
  const result = [];
@@ -2291,8 +2499,8 @@ var Num;
2291
2499
  }
2292
2500
  return result;
2293
2501
  };
2294
- Num2.clamp = (min, max) => (n) => Math.min(Math.max(n, min), max);
2295
- Num2.between = (min, max) => (n) => n >= min && n <= max;
2502
+ Num2.clamp = (min2, max2) => (n) => Math.min(Math.max(n, min2), max2);
2503
+ Num2.between = (min2, max2) => (n) => n >= min2 && n <= max2;
2296
2504
  Num2.parse = (s) => {
2297
2505
  if (s.trim() === "") return Maybe.none();
2298
2506
  const n = Number(s);
@@ -2308,6 +2516,28 @@ var Num;
2308
2516
  Num2.floor = (n) => Math.floor(n);
2309
2517
  Num2.ceil = (n) => Math.ceil(n);
2310
2518
  Num2.remainder = (divisor) => (n) => divisor === 0 ? Maybe.none() : Maybe.some(n % divisor);
2519
+ Num2.sum = (ns) => {
2520
+ let result = 0;
2521
+ for (let i = 0; i < ns.length; i++) result += ns[i];
2522
+ return result;
2523
+ };
2524
+ Num2.mean = (ns) => ns.length === 0 ? Maybe.none() : Maybe.some((0, Num2.sum)(ns) / ns.length);
2525
+ Num2.min = (ns) => {
2526
+ if (ns.length === 0) return Maybe.none();
2527
+ let [result] = ns;
2528
+ for (let i = 1; i < ns.length; i++) {
2529
+ if (ns[i] < result) result = ns[i];
2530
+ }
2531
+ return Maybe.some(result);
2532
+ };
2533
+ Num2.max = (ns) => {
2534
+ if (ns.length === 0) return Maybe.none();
2535
+ let [result] = ns;
2536
+ for (let i = 1; i < ns.length; i++) {
2537
+ if (ns[i] > result) result = ns[i];
2538
+ }
2539
+ return Maybe.some(result);
2540
+ };
2311
2541
  })(Num || (Num = {}));
2312
2542
 
2313
2543
  // src/Utils/Rec.ts
@@ -2431,6 +2661,7 @@ var Str;
2431
2661
  Str2.endsWith = (suffix) => (s) => s.endsWith(suffix);
2432
2662
  Str2.toUpperCase = (s) => s.toUpperCase();
2433
2663
  Str2.toLowerCase = (s) => s.toLowerCase();
2664
+ Str2.capitalize = (s) => s.length === 0 ? "" : s.charAt(0).toUpperCase() + s.slice(1);
2434
2665
  Str2.lines = (s) => s.split(/\r?\n|\r/);
2435
2666
  Str2.words = (s) => s.trim().split(/\s+/).filter(Boolean);
2436
2667
  Str2.isEmpty = (s) => s.length === 0;
@@ -2548,14 +2779,18 @@ var Uniq;
2548
2779
  0 && (module.exports = {
2549
2780
  Arr,
2550
2781
  Brand,
2782
+ Combinable,
2551
2783
  Deferred,
2552
2784
  Dict,
2785
+ Equality,
2786
+ Lazy,
2553
2787
  Lens,
2554
2788
  Logged,
2555
2789
  Maybe,
2556
2790
  Num,
2557
2791
  Op,
2558
2792
  Optional,
2793
+ Ordering,
2559
2794
  Predicate,
2560
2795
  Reader,
2561
2796
  Rec,
package/dist/index.mjs CHANGED
@@ -28,10 +28,14 @@ import {
28
28
  uncurry4
29
29
  } from "./chunk-NRF2FVPZ.mjs";
30
30
  import {
31
+ Combinable,
32
+ Equality,
33
+ Lazy,
31
34
  Lens,
32
35
  Logged,
33
36
  Op,
34
37
  Optional,
38
+ Ordering,
35
39
  Predicate,
36
40
  Reader,
37
41
  Refinement,
@@ -44,7 +48,7 @@ import {
44
48
  These,
45
49
  Tuple,
46
50
  Validation
47
- } from "./chunk-VIC54JR4.mjs";
51
+ } from "./chunk-L3NC44SN.mjs";
48
52
  import {
49
53
  Arr,
50
54
  Dict,
@@ -52,13 +56,13 @@ import {
52
56
  Rec,
53
57
  Str,
54
58
  Uniq
55
- } from "./chunk-FWYOEWJ2.mjs";
59
+ } from "./chunk-EHQFUWZW.mjs";
56
60
  import {
57
61
  Deferred,
58
62
  Maybe,
59
63
  Result,
60
64
  Task
61
- } from "./chunk-SDGDJ7CU.mjs";
65
+ } from "./chunk-TK5ZCGP2.mjs";
62
66
  import {
63
67
  Brand
64
68
  } from "./chunk-BYWKZLHM.mjs";
@@ -68,14 +72,18 @@ import {
68
72
  export {
69
73
  Arr,
70
74
  Brand,
75
+ Combinable,
71
76
  Deferred,
72
77
  Dict,
78
+ Equality,
79
+ Lazy,
73
80
  Lens,
74
81
  Logged,
75
82
  Maybe,
76
83
  Num,
77
84
  Op,
78
85
  Optional,
86
+ Ordering,
79
87
  Predicate,
80
88
  Reader,
81
89
  Rec,