@nlozgachev/pipelined 0.31.0 → 0.33.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/{Task-CnF22Q2o.d.ts → Task-5na0QzS4.d.mts} +281 -66
- package/dist/{Task-BDcKwFAj.d.mts → Task-DeiWgoeJ.d.ts} +281 -66
- package/dist/{chunk-VIC54JR4.mjs → chunk-FZX4MTRI.mjs} +135 -21
- package/dist/{chunk-SDGDJ7CU.mjs → chunk-GSTKY7MF.mjs} +158 -35
- package/dist/chunk-IPP4XFYH.mjs +0 -0
- package/dist/chunk-VWVPHDZO.mjs +29 -0
- package/dist/{chunk-FWYOEWJ2.mjs → chunk-W53ZYTLX.mjs} +98 -4
- package/dist/core.d.mts +249 -9
- package/dist/core.d.ts +249 -9
- package/dist/core.js +366 -104
- package/dist/core.mjs +11 -2
- package/dist/index.d.mts +3 -4
- package/dist/index.d.ts +3 -4
- package/dist/index.js +465 -114
- package/dist/index.mjs +17 -6
- package/dist/types.d.mts +104 -2
- package/dist/types.d.ts +104 -2
- package/dist/types.js +20 -0
- package/dist/types.mjs +6 -3
- package/dist/utils.d.mts +124 -2
- package/dist/utils.d.ts +124 -2
- package/dist/utils.js +266 -28
- package/dist/utils.mjs +3 -2
- package/package.json +1 -1
- package/dist/NonEmptyList-BlGFjor5.d.mts +0 -30
- package/dist/NonEmptyList-BlGFjor5.d.ts +0 -30
- package/dist/chunk-BYWKZLHM.mjs +0 -10
package/dist/index.js
CHANGED
|
@@ -22,14 +22,19 @@ 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
|
+
Duration: () => Duration,
|
|
29
|
+
Equality: () => Equality,
|
|
30
|
+
Lazy: () => Lazy,
|
|
27
31
|
Lens: () => Lens,
|
|
28
32
|
Logged: () => Logged,
|
|
29
33
|
Maybe: () => Maybe,
|
|
30
34
|
Num: () => Num,
|
|
31
35
|
Op: () => Op,
|
|
32
36
|
Optional: () => Optional,
|
|
37
|
+
Ordering: () => Ordering,
|
|
33
38
|
Predicate: () => Predicate,
|
|
34
39
|
Reader: () => Reader,
|
|
35
40
|
Rec: () => Rec,
|
|
@@ -288,65 +293,6 @@ function uncurry(f) {
|
|
|
288
293
|
var uncurry3 = (f) => (a, b, c) => f(a)(b)(c);
|
|
289
294
|
var uncurry4 = (f) => (a, b, c, d) => f(a)(b)(c)(d);
|
|
290
295
|
|
|
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
296
|
// src/Core/Result.ts
|
|
351
297
|
var Result;
|
|
352
298
|
((Result2) => {
|
|
@@ -376,6 +322,15 @@ var Result;
|
|
|
376
322
|
return data;
|
|
377
323
|
};
|
|
378
324
|
Result2.fromPredicate = (pred, onFalse) => (a) => pred(a) ? (0, Result2.ok)(a) : (0, Result2.error)(onFalse(a));
|
|
325
|
+
Result2.fromNullable = (onNull) => (value) => value === null || value === void 0 ? (0, Result2.error)(onNull()) : (0, Result2.ok)(value);
|
|
326
|
+
Result2.fromMaybe = (onNone) => (maybe) => Maybe.isNone(maybe) ? (0, Result2.error)(onNone()) : (0, Result2.ok)(maybe.value);
|
|
327
|
+
Result2.fromThrowable = (f, onError) => (...args) => {
|
|
328
|
+
try {
|
|
329
|
+
return (0, Result2.ok)(f(...args));
|
|
330
|
+
} catch (e) {
|
|
331
|
+
return (0, Result2.error)(onError(e));
|
|
332
|
+
}
|
|
333
|
+
};
|
|
379
334
|
Result2.recover = (fallback) => (data) => (0, Result2.isOk)(data) ? data : fallback(data.error);
|
|
380
335
|
Result2.recoverUnless = (isBlocked, fallback) => (data) => (0, Result2.isError)(data) && !isBlocked(data.error) ? fallback() : data;
|
|
381
336
|
Result2.toMaybe = (data) => (0, Result2.isOk)(data) ? Maybe.some(data.value) : Maybe.none();
|
|
@@ -410,6 +365,137 @@ var Maybe;
|
|
|
410
365
|
Maybe2.ap = (arg) => (data) => (0, Maybe2.isSome)(data) && (0, Maybe2.isSome)(arg) ? (0, Maybe2.some)(data.value(arg.value)) : (0, Maybe2.none)();
|
|
411
366
|
})(Maybe || (Maybe = {}));
|
|
412
367
|
|
|
368
|
+
// src/Core/Combinable.ts
|
|
369
|
+
var Combinable;
|
|
370
|
+
((Combinable2) => {
|
|
371
|
+
Combinable2.string = {
|
|
372
|
+
empty: "",
|
|
373
|
+
combine: (b) => (a) => a + b
|
|
374
|
+
};
|
|
375
|
+
Combinable2.sum = {
|
|
376
|
+
empty: 0,
|
|
377
|
+
combine: (b) => (a) => a + b
|
|
378
|
+
};
|
|
379
|
+
Combinable2.product = {
|
|
380
|
+
empty: 1,
|
|
381
|
+
combine: (b) => (a) => a * b
|
|
382
|
+
};
|
|
383
|
+
Combinable2.all = {
|
|
384
|
+
empty: true,
|
|
385
|
+
combine: (b) => (a) => a && b
|
|
386
|
+
};
|
|
387
|
+
Combinable2.any = {
|
|
388
|
+
empty: false,
|
|
389
|
+
combine: (b) => (a) => a || b
|
|
390
|
+
};
|
|
391
|
+
Combinable2.array = () => ({
|
|
392
|
+
empty: [],
|
|
393
|
+
combine: (b) => (a) => [...a, ...b]
|
|
394
|
+
});
|
|
395
|
+
Combinable2.maybe = (inner) => ({
|
|
396
|
+
empty: Maybe.none(),
|
|
397
|
+
combine: (b) => (a) => Maybe.isNone(a) ? b : Maybe.isNone(b) ? a : Maybe.some(inner.combine(b.value)(a.value))
|
|
398
|
+
});
|
|
399
|
+
Combinable2.fold = (c) => (data) => data.reduce((acc, x) => c.combine(x)(acc), c.empty);
|
|
400
|
+
})(Combinable || (Combinable = {}));
|
|
401
|
+
|
|
402
|
+
// src/Core/Deferred.ts
|
|
403
|
+
var Deferred;
|
|
404
|
+
((Deferred2) => {
|
|
405
|
+
Deferred2.fromPromise = (p) => (
|
|
406
|
+
// eslint-disable-next-line unicorn/no-thenable -- Deferred is intentionally thenable; it is the mechanism that makes Task awaitable
|
|
407
|
+
{ then: ((f) => p.then(f)) }
|
|
408
|
+
);
|
|
409
|
+
Deferred2.toPromise = (d) => new Promise((resolve) => d.then(resolve));
|
|
410
|
+
})(Deferred || (Deferred = {}));
|
|
411
|
+
|
|
412
|
+
// src/Core/Equality.ts
|
|
413
|
+
var Equality;
|
|
414
|
+
((Equality2) => {
|
|
415
|
+
Equality2.string = (a, b) => a === b;
|
|
416
|
+
Equality2.number = (a, b) => a === b;
|
|
417
|
+
Equality2.boolean = (a, b) => a === b;
|
|
418
|
+
Equality2.date = (a, b) => a.getTime() === b.getTime();
|
|
419
|
+
Equality2.array = (eq) => (a, b) => a.length === b.length && a.every((x, i) => eq(x, b[i]));
|
|
420
|
+
Equality2.by = (f) => (eq) => (a, b) => eq(f(a), f(b));
|
|
421
|
+
Equality2.and = (eq2) => (eq1) => (a, b) => eq1(a, b) && eq2(a, b);
|
|
422
|
+
})(Equality || (Equality = {}));
|
|
423
|
+
|
|
424
|
+
// src/Core/Lazy.ts
|
|
425
|
+
var Lazy;
|
|
426
|
+
((Lazy2) => {
|
|
427
|
+
Lazy2.from = (f) => {
|
|
428
|
+
let done = false;
|
|
429
|
+
let cache;
|
|
430
|
+
return {
|
|
431
|
+
get: () => {
|
|
432
|
+
if (!done) {
|
|
433
|
+
cache = f();
|
|
434
|
+
done = true;
|
|
435
|
+
}
|
|
436
|
+
return cache;
|
|
437
|
+
}
|
|
438
|
+
};
|
|
439
|
+
};
|
|
440
|
+
Lazy2.evaluate = (lazy) => lazy.get();
|
|
441
|
+
Lazy2.map = (f) => (lazy) => Lazy2.from(() => f(lazy.get()));
|
|
442
|
+
Lazy2.chain = (f) => (lazy) => Lazy2.from(() => f(lazy.get()).get());
|
|
443
|
+
Lazy2.tap = (f) => (lazy) => Lazy2.from(() => {
|
|
444
|
+
const v = lazy.get();
|
|
445
|
+
f(v);
|
|
446
|
+
return v;
|
|
447
|
+
});
|
|
448
|
+
})(Lazy || (Lazy = {}));
|
|
449
|
+
|
|
450
|
+
// src/Core/Lens.ts
|
|
451
|
+
var Lens;
|
|
452
|
+
((Lens2) => {
|
|
453
|
+
Lens2.make = (get2, set2) => ({ get: get2, set: set2 });
|
|
454
|
+
Lens2.prop = () => (key) => (0, Lens2.make)(
|
|
455
|
+
(s) => s[key],
|
|
456
|
+
(a) => (s) => ({ ...s, [key]: a })
|
|
457
|
+
);
|
|
458
|
+
Lens2.get = (lens) => (s) => lens.get(s);
|
|
459
|
+
Lens2.set = (lens) => (a) => (s) => lens.set(a)(s);
|
|
460
|
+
Lens2.modify = (lens) => (f) => (s) => lens.set(f(lens.get(s)))(s);
|
|
461
|
+
Lens2.andThen = (inner) => (outer) => (0, Lens2.make)(
|
|
462
|
+
(s) => inner.get(outer.get(s)),
|
|
463
|
+
(b) => (s) => outer.set(inner.set(b)(outer.get(s)))(s)
|
|
464
|
+
);
|
|
465
|
+
Lens2.andThenOptional = (inner) => (outer) => ({
|
|
466
|
+
get: (s) => inner.get(outer.get(s)),
|
|
467
|
+
set: (b) => (s) => outer.set(inner.set(b)(outer.get(s)))(s)
|
|
468
|
+
});
|
|
469
|
+
Lens2.toOptional = (lens) => ({
|
|
470
|
+
get: (s) => ({ kind: "Some", value: lens.get(s) }),
|
|
471
|
+
set: lens.set
|
|
472
|
+
});
|
|
473
|
+
})(Lens || (Lens = {}));
|
|
474
|
+
|
|
475
|
+
// src/Core/Logged.ts
|
|
476
|
+
var Logged;
|
|
477
|
+
((Logged2) => {
|
|
478
|
+
Logged2.make = (value) => ({ value, log: [] });
|
|
479
|
+
Logged2.tell = (entry) => ({ value: void 0, log: [entry] });
|
|
480
|
+
Logged2.map = (f) => (data) => ({
|
|
481
|
+
value: f(data.value),
|
|
482
|
+
log: data.log
|
|
483
|
+
});
|
|
484
|
+
Logged2.chain = (f) => (data) => {
|
|
485
|
+
const next = f(data.value);
|
|
486
|
+
return { value: next.value, log: [...data.log, ...next.log] };
|
|
487
|
+
};
|
|
488
|
+
Logged2.ap = (arg) => (data) => ({
|
|
489
|
+
value: data.value(arg.value),
|
|
490
|
+
log: [...data.log, ...arg.log]
|
|
491
|
+
});
|
|
492
|
+
Logged2.tap = (f) => (data) => {
|
|
493
|
+
f(data.value);
|
|
494
|
+
return data;
|
|
495
|
+
};
|
|
496
|
+
Logged2.run = (data) => [data.value, data.log];
|
|
497
|
+
})(Logged || (Logged = {}));
|
|
498
|
+
|
|
413
499
|
// src/internal/Op.util.ts
|
|
414
500
|
var _abortedNil = { kind: "OpNil", reason: "aborted" };
|
|
415
501
|
var _droppedNil = { kind: "OpNil", reason: "dropped" };
|
|
@@ -1412,6 +1498,20 @@ var Optional;
|
|
|
1412
1498
|
);
|
|
1413
1499
|
})(Optional || (Optional = {}));
|
|
1414
1500
|
|
|
1501
|
+
// src/Core/Ordering.ts
|
|
1502
|
+
var Ordering;
|
|
1503
|
+
((Ordering2) => {
|
|
1504
|
+
Ordering2.string = (a, b) => a < b ? -1 : a > b ? 1 : 0;
|
|
1505
|
+
Ordering2.number = (a, b) => a - b;
|
|
1506
|
+
Ordering2.date = (a, b) => a.getTime() - b.getTime();
|
|
1507
|
+
Ordering2.reverse = (ord) => (a, b) => ord(b, a);
|
|
1508
|
+
Ordering2.thenBy = (ord2) => (ord1) => (a, b) => {
|
|
1509
|
+
const r = ord1(a, b);
|
|
1510
|
+
return r !== 0 ? r : ord2(a, b);
|
|
1511
|
+
};
|
|
1512
|
+
Ordering2.by = (f) => (ord) => (a, b) => ord(f(a), f(b));
|
|
1513
|
+
})(Ordering || (Ordering = {}));
|
|
1514
|
+
|
|
1415
1515
|
// src/Core/Predicate.ts
|
|
1416
1516
|
var Predicate;
|
|
1417
1517
|
((Predicate2) => {
|
|
@@ -1525,8 +1625,34 @@ var RemoteData;
|
|
|
1525
1625
|
RemoteData2.filter = (pred, onFalse) => (data) => (0, RemoteData2.isSuccess)(data) ? pred(data.value) ? data : (0, RemoteData2.failure)(onFalse(data.value)) : data;
|
|
1526
1626
|
})(RemoteData || (RemoteData = {}));
|
|
1527
1627
|
|
|
1628
|
+
// src/Types/Brand.ts
|
|
1629
|
+
var Brand;
|
|
1630
|
+
((Brand2) => {
|
|
1631
|
+
Brand2.wrap = () => (value) => value;
|
|
1632
|
+
Brand2.unwrap = (branded) => branded;
|
|
1633
|
+
})(Brand || (Brand = {}));
|
|
1634
|
+
|
|
1635
|
+
// src/Types/Duration.ts
|
|
1636
|
+
var Duration;
|
|
1637
|
+
((Duration2) => {
|
|
1638
|
+
const wrap = Brand.wrap();
|
|
1639
|
+
Duration2.milliseconds = (ms) => wrap(ms);
|
|
1640
|
+
Duration2.seconds = (s) => wrap(s * 1e3);
|
|
1641
|
+
Duration2.minutes = (m) => wrap(m * 60 * 1e3);
|
|
1642
|
+
Duration2.hours = (h) => wrap(h * 60 * 60 * 1e3);
|
|
1643
|
+
Duration2.days = (d) => wrap(d * 24 * 60 * 60 * 1e3);
|
|
1644
|
+
Duration2.toMilliseconds = (d) => Brand.unwrap(d);
|
|
1645
|
+
Duration2.toSeconds = (d) => Brand.unwrap(d) / 1e3;
|
|
1646
|
+
Duration2.toMinutes = (d) => Brand.unwrap(d) / (60 * 1e3);
|
|
1647
|
+
Duration2.toHours = (d) => Brand.unwrap(d) / (60 * 60 * 1e3);
|
|
1648
|
+
Duration2.toDays = (d) => Brand.unwrap(d) / (24 * 60 * 60 * 1e3);
|
|
1649
|
+
Duration2.add = (other) => (self) => wrap(Brand.unwrap(self) + Brand.unwrap(other));
|
|
1650
|
+
Duration2.subtract = (other) => (self) => wrap(Brand.unwrap(self) - Brand.unwrap(other));
|
|
1651
|
+
})(Duration || (Duration = {}));
|
|
1652
|
+
|
|
1528
1653
|
// src/Core/Task.ts
|
|
1529
1654
|
var toPromise = (task, signal) => Deferred.toPromise(task(signal));
|
|
1655
|
+
var getMs = (ms) => typeof ms === "number" ? ms : Duration.toMilliseconds(ms);
|
|
1530
1656
|
var Task;
|
|
1531
1657
|
((Task2) => {
|
|
1532
1658
|
Task2.resolve = (value) => () => Deferred.fromPromise(Promise.resolve(value));
|
|
@@ -1550,60 +1676,169 @@ var Task;
|
|
|
1550
1676
|
(signal) => Promise.all(tasks.map((t) => toPromise(t, signal)))
|
|
1551
1677
|
);
|
|
1552
1678
|
Task2.delay = (ms) => (data) => (0, Task2.from)(
|
|
1553
|
-
(signal) => new Promise(
|
|
1554
|
-
|
|
1555
|
-
|
|
1556
|
-
|
|
1557
|
-
|
|
1558
|
-
|
|
1679
|
+
(signal) => new Promise((resolve2) => {
|
|
1680
|
+
let timerId = void 0;
|
|
1681
|
+
const onAbort = () => {
|
|
1682
|
+
if (timerId !== void 0) {
|
|
1683
|
+
clearTimeout(timerId);
|
|
1684
|
+
}
|
|
1685
|
+
resolve2(toPromise(data, signal));
|
|
1686
|
+
};
|
|
1687
|
+
if (signal) {
|
|
1688
|
+
if (signal.aborted) {
|
|
1689
|
+
return resolve2(toPromise(data, signal));
|
|
1690
|
+
}
|
|
1691
|
+
signal.addEventListener("abort", onAbort, { once: true });
|
|
1692
|
+
}
|
|
1693
|
+
timerId = setTimeout(() => {
|
|
1694
|
+
signal?.removeEventListener("abort", onAbort);
|
|
1695
|
+
resolve2(toPromise(data, signal));
|
|
1696
|
+
}, getMs(ms));
|
|
1697
|
+
})
|
|
1559
1698
|
);
|
|
1560
1699
|
Task2.repeat = (options) => (task) => (0, Task2.from)((signal) => {
|
|
1561
1700
|
const { times, delay: ms } = options;
|
|
1562
1701
|
if (times <= 0) return Promise.resolve([]);
|
|
1563
1702
|
const results = [];
|
|
1564
|
-
const wait = () =>
|
|
1565
|
-
|
|
1566
|
-
|
|
1567
|
-
|
|
1568
|
-
|
|
1569
|
-
|
|
1703
|
+
const wait = () => {
|
|
1704
|
+
if (signal?.aborted) return Promise.resolve();
|
|
1705
|
+
return new Promise((r) => {
|
|
1706
|
+
let timerId = void 0;
|
|
1707
|
+
const onAbort = () => {
|
|
1708
|
+
if (timerId !== void 0) {
|
|
1709
|
+
clearTimeout(timerId);
|
|
1710
|
+
}
|
|
1711
|
+
r();
|
|
1712
|
+
};
|
|
1713
|
+
if (signal) {
|
|
1714
|
+
signal.addEventListener("abort", onAbort, { once: true });
|
|
1715
|
+
}
|
|
1716
|
+
timerId = setTimeout(() => {
|
|
1717
|
+
signal?.removeEventListener("abort", onAbort);
|
|
1718
|
+
r();
|
|
1719
|
+
}, getMs(ms || 0));
|
|
1720
|
+
});
|
|
1721
|
+
};
|
|
1722
|
+
const run2 = (left) => {
|
|
1723
|
+
if (signal?.aborted) {
|
|
1724
|
+
return Promise.resolve(results);
|
|
1725
|
+
}
|
|
1726
|
+
return toPromise(task, signal).then((a) => {
|
|
1727
|
+
results.push(a);
|
|
1728
|
+
if (left <= 1 || signal?.aborted) return results;
|
|
1729
|
+
return wait().then(() => run2(left - 1));
|
|
1730
|
+
});
|
|
1731
|
+
};
|
|
1570
1732
|
return run2(times);
|
|
1571
1733
|
});
|
|
1572
1734
|
Task2.repeatUntil = (options) => (task) => (0, Task2.from)((signal) => {
|
|
1573
1735
|
const { when: predicate, delay: ms, maxAttempts } = options;
|
|
1574
|
-
const wait = () =>
|
|
1575
|
-
|
|
1576
|
-
|
|
1577
|
-
|
|
1578
|
-
|
|
1579
|
-
|
|
1736
|
+
const wait = () => {
|
|
1737
|
+
if (signal?.aborted) return Promise.resolve();
|
|
1738
|
+
return new Promise((r) => {
|
|
1739
|
+
let timerId = void 0;
|
|
1740
|
+
const onAbort = () => {
|
|
1741
|
+
if (timerId !== void 0) {
|
|
1742
|
+
clearTimeout(timerId);
|
|
1743
|
+
}
|
|
1744
|
+
r();
|
|
1745
|
+
};
|
|
1746
|
+
if (signal) {
|
|
1747
|
+
signal.addEventListener("abort", onAbort, { once: true });
|
|
1748
|
+
}
|
|
1749
|
+
timerId = setTimeout(() => {
|
|
1750
|
+
signal?.removeEventListener("abort", onAbort);
|
|
1751
|
+
r();
|
|
1752
|
+
}, getMs(ms || 0));
|
|
1753
|
+
});
|
|
1754
|
+
};
|
|
1755
|
+
const run2 = (attempt, lastValue) => {
|
|
1756
|
+
if (signal?.aborted && lastValue !== void 0) {
|
|
1757
|
+
return Promise.resolve(lastValue);
|
|
1758
|
+
}
|
|
1759
|
+
return toPromise(task, signal).then((a) => {
|
|
1760
|
+
if (predicate(a)) return a;
|
|
1761
|
+
if (maxAttempts !== void 0 && attempt >= maxAttempts) return a;
|
|
1762
|
+
if (signal?.aborted) return a;
|
|
1763
|
+
return wait().then(() => run2(attempt + 1, a));
|
|
1764
|
+
});
|
|
1765
|
+
};
|
|
1580
1766
|
return run2(1);
|
|
1581
1767
|
});
|
|
1582
|
-
Task2.race = (tasks) =>
|
|
1768
|
+
Task2.race = (tasks) => {
|
|
1769
|
+
if (tasks.length === 0) {
|
|
1770
|
+
return () => Deferred.fromPromise(new Promise(() => {
|
|
1771
|
+
}));
|
|
1772
|
+
}
|
|
1773
|
+
return (0, Task2.from)((outerSignal) => {
|
|
1774
|
+
const controllers = tasks.map(() => new AbortController());
|
|
1775
|
+
const onOuterAbort = () => {
|
|
1776
|
+
for (const ctrl of controllers) ctrl.abort();
|
|
1777
|
+
};
|
|
1778
|
+
if (outerSignal) {
|
|
1779
|
+
if (outerSignal.aborted) {
|
|
1780
|
+
onOuterAbort();
|
|
1781
|
+
} else {
|
|
1782
|
+
outerSignal.addEventListener("abort", onOuterAbort, { once: true });
|
|
1783
|
+
}
|
|
1784
|
+
}
|
|
1785
|
+
const promises = tasks.map((task, idx) => {
|
|
1786
|
+
const ctrl = controllers[idx];
|
|
1787
|
+
return toPromise(task, ctrl.signal).then((result) => {
|
|
1788
|
+
for (let i = 0; i < controllers.length; i++) {
|
|
1789
|
+
if (i !== idx) {
|
|
1790
|
+
controllers[i].abort();
|
|
1791
|
+
}
|
|
1792
|
+
}
|
|
1793
|
+
outerSignal?.removeEventListener("abort", onOuterAbort);
|
|
1794
|
+
return result;
|
|
1795
|
+
});
|
|
1796
|
+
});
|
|
1797
|
+
return Promise.race(promises);
|
|
1798
|
+
});
|
|
1799
|
+
};
|
|
1800
|
+
Task2.sequence = (tasks) => (0, Task2.from)((signal) => Promise.all(tasks.map((t) => toPromise(t, signal))));
|
|
1583
1801
|
Task2.sequential = (tasks) => (0, Task2.from)(async (signal) => {
|
|
1584
1802
|
const results = [];
|
|
1585
1803
|
for (const task of tasks) {
|
|
1804
|
+
if (signal?.aborted) {
|
|
1805
|
+
break;
|
|
1806
|
+
}
|
|
1586
1807
|
results.push(await toPromise(task, signal));
|
|
1587
1808
|
}
|
|
1588
1809
|
return results;
|
|
1589
1810
|
});
|
|
1590
1811
|
Task2.timeout = (ms, onTimeout) => (task) => (0, Task2.from)((outerSignal) => {
|
|
1591
1812
|
const controller = new AbortController();
|
|
1592
|
-
const onOuterAbort = () => controller.abort();
|
|
1593
|
-
outerSignal?.addEventListener("abort", onOuterAbort, { once: true });
|
|
1594
1813
|
let timerId;
|
|
1814
|
+
const cleanUp = () => {
|
|
1815
|
+
if (timerId !== void 0) {
|
|
1816
|
+
clearTimeout(timerId);
|
|
1817
|
+
}
|
|
1818
|
+
outerSignal?.removeEventListener("abort", onOuterAbort);
|
|
1819
|
+
};
|
|
1820
|
+
const onOuterAbort = () => {
|
|
1821
|
+
cleanUp();
|
|
1822
|
+
controller.abort();
|
|
1823
|
+
};
|
|
1824
|
+
if (outerSignal) {
|
|
1825
|
+
if (outerSignal.aborted) {
|
|
1826
|
+
controller.abort();
|
|
1827
|
+
} else {
|
|
1828
|
+
outerSignal.addEventListener("abort", onOuterAbort, { once: true });
|
|
1829
|
+
}
|
|
1830
|
+
}
|
|
1595
1831
|
return Promise.race([
|
|
1596
1832
|
toPromise(task, controller.signal).then((a) => {
|
|
1597
|
-
|
|
1598
|
-
outerSignal?.removeEventListener("abort", onOuterAbort);
|
|
1833
|
+
cleanUp();
|
|
1599
1834
|
return Result.ok(a);
|
|
1600
1835
|
}),
|
|
1601
1836
|
new Promise((resolve2) => {
|
|
1602
1837
|
timerId = setTimeout(() => {
|
|
1603
1838
|
controller.abort();
|
|
1604
|
-
|
|
1839
|
+
cleanUp();
|
|
1605
1840
|
resolve2(Result.error(onTimeout()));
|
|
1606
|
-
}, ms);
|
|
1841
|
+
}, getMs(ms));
|
|
1607
1842
|
})
|
|
1608
1843
|
]);
|
|
1609
1844
|
});
|
|
@@ -1637,28 +1872,33 @@ var Resource;
|
|
|
1637
1872
|
release
|
|
1638
1873
|
});
|
|
1639
1874
|
Resource2.use = (f) => (resource) => Task.from(
|
|
1640
|
-
() => Deferred.toPromise(resource.acquire()).then(async (acquired) => {
|
|
1875
|
+
(signal) => Deferred.toPromise(resource.acquire(signal)).then(async (acquired) => {
|
|
1641
1876
|
if (Result.isError(acquired)) return acquired;
|
|
1642
1877
|
const a = acquired.value;
|
|
1643
|
-
|
|
1644
|
-
|
|
1645
|
-
|
|
1878
|
+
try {
|
|
1879
|
+
const usageResult = await Deferred.toPromise(f(a)(signal));
|
|
1880
|
+
return usageResult;
|
|
1881
|
+
} finally {
|
|
1882
|
+
await Deferred.toPromise(resource.release(a)(signal));
|
|
1883
|
+
}
|
|
1646
1884
|
})
|
|
1647
1885
|
);
|
|
1648
1886
|
Resource2.combine = (resourceA, resourceB) => ({
|
|
1649
1887
|
acquire: Task.from(
|
|
1650
|
-
() => Deferred.toPromise(resourceA.acquire()).then(async (acquiredA) => {
|
|
1888
|
+
(signal) => Deferred.toPromise(resourceA.acquire(signal)).then(async (acquiredA) => {
|
|
1651
1889
|
if (Result.isError(acquiredA)) return acquiredA;
|
|
1652
1890
|
const a = acquiredA.value;
|
|
1653
|
-
const acquiredB = await Deferred.toPromise(resourceB.acquire());
|
|
1891
|
+
const acquiredB = await Deferred.toPromise(resourceB.acquire(signal));
|
|
1654
1892
|
if (Result.isError(acquiredB)) {
|
|
1655
|
-
await Deferred.toPromise(resourceA.release(a)());
|
|
1893
|
+
await Deferred.toPromise(resourceA.release(a)(signal));
|
|
1656
1894
|
return acquiredB;
|
|
1657
1895
|
}
|
|
1658
1896
|
return Result.ok([a, acquiredB.value]);
|
|
1659
1897
|
})
|
|
1660
1898
|
),
|
|
1661
|
-
release: ([a, b]) => Task.from(
|
|
1899
|
+
release: ([a, b]) => Task.from(
|
|
1900
|
+
(signal) => Deferred.toPromise(resourceB.release(b)(signal)).then(() => Deferred.toPromise(resourceA.release(a)(signal)))
|
|
1901
|
+
)
|
|
1662
1902
|
});
|
|
1663
1903
|
})(Resource || (Resource = {}));
|
|
1664
1904
|
|
|
@@ -1699,16 +1939,18 @@ var TaskMaybe;
|
|
|
1699
1939
|
TaskMaybe2.some = (value) => Task.resolve(Maybe.some(value));
|
|
1700
1940
|
TaskMaybe2.none = () => Task.resolve(Maybe.none());
|
|
1701
1941
|
TaskMaybe2.fromMaybe = (option) => Task.resolve(option);
|
|
1942
|
+
TaskMaybe2.fromNullable = (value) => Task.resolve(Maybe.fromNullable(value));
|
|
1943
|
+
TaskMaybe2.fromResult = (result) => Task.resolve(Result.toMaybe(result));
|
|
1702
1944
|
TaskMaybe2.fromTask = (task) => Task.map(Maybe.some)(task);
|
|
1703
1945
|
TaskMaybe2.tryCatch = (f) => Task.from(
|
|
1704
|
-
() => f().then(Maybe.some).catch(() => Maybe.none())
|
|
1946
|
+
(signal) => f(signal).then(Maybe.some).catch(() => Maybe.none())
|
|
1705
1947
|
);
|
|
1706
1948
|
TaskMaybe2.map = (f) => (data) => Task.map(Maybe.map(f))(data);
|
|
1707
1949
|
TaskMaybe2.chain = (f) => (data) => Task.chain((option) => Maybe.isSome(option) ? f(option.value) : Task.resolve(Maybe.none()))(data);
|
|
1708
1950
|
TaskMaybe2.ap = (arg) => (data) => Task.from(
|
|
1709
|
-
() => Promise.all([
|
|
1710
|
-
Deferred.toPromise(data()),
|
|
1711
|
-
Deferred.toPromise(arg())
|
|
1951
|
+
(signal) => Promise.all([
|
|
1952
|
+
Deferred.toPromise(data(signal)),
|
|
1953
|
+
Deferred.toPromise(arg(signal))
|
|
1712
1954
|
]).then(([of_, oa]) => Maybe.ap(oa)(of_))
|
|
1713
1955
|
);
|
|
1714
1956
|
TaskMaybe2.fold = (onNone, onSome) => (data) => Task.map(Maybe.fold(onNone, onSome))(data);
|
|
@@ -1724,6 +1966,12 @@ var TaskResult;
|
|
|
1724
1966
|
((TaskResult2) => {
|
|
1725
1967
|
TaskResult2.ok = (value) => Task.resolve(Result.ok(value));
|
|
1726
1968
|
TaskResult2.err = (error) => Task.resolve(Result.error(error));
|
|
1969
|
+
TaskResult2.fromNullable = (onNull) => (value) => Task.resolve(value === null || value === void 0 ? Result.error(onNull()) : Result.ok(value));
|
|
1970
|
+
TaskResult2.fromMaybe = (onNone) => (maybe) => Task.resolve(Maybe.isNone(maybe) ? Result.error(onNone()) : Result.ok(maybe.value));
|
|
1971
|
+
TaskResult2.fromResult = (result) => Task.resolve(result);
|
|
1972
|
+
TaskResult2.fromThrowable = (f, onError) => (...args) => Task.from(
|
|
1973
|
+
() => f(...args).then(Result.ok).catch((e) => Result.error(onError(e)))
|
|
1974
|
+
);
|
|
1727
1975
|
TaskResult2.tryCatch = (f, onError) => Task.from(
|
|
1728
1976
|
(signal) => f(signal).then(Result.ok).catch((e) => Result.error(onError(e)))
|
|
1729
1977
|
);
|
|
@@ -1742,6 +1990,12 @@ var TaskResult;
|
|
|
1742
1990
|
TaskResult2.getOrElse = (defaultValue) => (data) => Task.map(Result.getOrElse(defaultValue))(data);
|
|
1743
1991
|
TaskResult2.tap = (f) => (data) => Task.map(Result.tap(f))(data);
|
|
1744
1992
|
TaskResult2.tapError = (f) => (data) => Task.map(Result.tapError(f))(data);
|
|
1993
|
+
TaskResult2.ap = (arg) => (data) => Task.from(
|
|
1994
|
+
(signal) => Promise.all([
|
|
1995
|
+
Deferred.toPromise(data(signal)),
|
|
1996
|
+
Deferred.toPromise(arg(signal))
|
|
1997
|
+
]).then(([of_, oa]) => Result.ap(oa)(of_))
|
|
1998
|
+
);
|
|
1745
1999
|
TaskResult2.run = (signal) => (task) => Deferred.toPromise(task(signal));
|
|
1746
2000
|
})(TaskResult || (TaskResult = {}));
|
|
1747
2001
|
|
|
@@ -1763,6 +2017,8 @@ var Validation;
|
|
|
1763
2017
|
Validation2.isValid = (data) => data.kind === "Valid";
|
|
1764
2018
|
Validation2.isInvalid = (data) => data.kind === "Invalid";
|
|
1765
2019
|
Validation2.fromPredicate = (pred, onFalse) => (a) => pred(a) ? (0, Validation2.valid)(a) : (0, Validation2.invalid)(onFalse(a));
|
|
2020
|
+
Validation2.fromNullable = (onNull) => (value) => value === null || value === void 0 ? (0, Validation2.invalid)(onNull()) : (0, Validation2.valid)(value);
|
|
2021
|
+
Validation2.fromMaybe = (onNone) => (maybe) => Maybe.isNone(maybe) ? (0, Validation2.invalid)(onNone()) : (0, Validation2.valid)(maybe.value);
|
|
1766
2022
|
Validation2.map = (f) => (data) => (0, Validation2.isValid)(data) ? (0, Validation2.valid)(f(data.value)) : data;
|
|
1767
2023
|
Validation2.ap = (arg) => (data) => {
|
|
1768
2024
|
if ((0, Validation2.isValid)(data) && (0, Validation2.isValid)(arg)) return (0, Validation2.valid)(data.value(arg.value));
|
|
@@ -1814,14 +2070,17 @@ var TaskValidation;
|
|
|
1814
2070
|
TaskValidation2.invalid = (error) => Task.resolve(Validation.invalid(error));
|
|
1815
2071
|
TaskValidation2.invalidAll = (errors) => Task.resolve(Validation.invalidAll(errors));
|
|
1816
2072
|
TaskValidation2.fromValidation = (validation) => Task.resolve(validation);
|
|
2073
|
+
TaskValidation2.fromNullable = (onNull) => (value) => Task.resolve(value === null || value === void 0 ? Validation.invalid(onNull()) : Validation.valid(value));
|
|
2074
|
+
TaskValidation2.fromMaybe = (onNone) => (maybe) => Task.resolve(Maybe.isNone(maybe) ? Validation.invalid(onNone()) : Validation.valid(maybe.value));
|
|
2075
|
+
TaskValidation2.fromResult = (result) => Task.resolve(Validation.fromResult(result));
|
|
1817
2076
|
TaskValidation2.tryCatch = (f, onError) => Task.from(
|
|
1818
|
-
() => f().then(Validation.valid).catch((e) => Validation.invalid(onError(e)))
|
|
2077
|
+
(signal) => f(signal).then(Validation.valid).catch((e) => Validation.invalid(onError(e)))
|
|
1819
2078
|
);
|
|
1820
2079
|
TaskValidation2.map = (f) => (data) => Task.map(Validation.map(f))(data);
|
|
1821
2080
|
TaskValidation2.ap = (arg) => (data) => Task.from(
|
|
1822
|
-
() => Promise.all([
|
|
1823
|
-
Deferred.toPromise(data()),
|
|
1824
|
-
Deferred.toPromise(arg())
|
|
2081
|
+
(signal) => Promise.all([
|
|
2082
|
+
Deferred.toPromise(data(signal)),
|
|
2083
|
+
Deferred.toPromise(arg(signal))
|
|
1825
2084
|
]).then(([vf, va]) => Validation.ap(va)(vf))
|
|
1826
2085
|
);
|
|
1827
2086
|
TaskValidation2.fold = (onInvalid, onValid) => (data) => Task.map(Validation.fold(onInvalid, onValid))(data);
|
|
@@ -1832,13 +2091,13 @@ var TaskValidation;
|
|
|
1832
2091
|
(validation) => Validation.isValid(validation) ? Task.resolve(validation) : fallback(validation.errors)
|
|
1833
2092
|
)(data);
|
|
1834
2093
|
TaskValidation2.product = (first, second) => Task.from(
|
|
1835
|
-
() => Promise.all([
|
|
1836
|
-
Deferred.toPromise(first()),
|
|
1837
|
-
Deferred.toPromise(second())
|
|
2094
|
+
(signal) => Promise.all([
|
|
2095
|
+
Deferred.toPromise(first(signal)),
|
|
2096
|
+
Deferred.toPromise(second(signal))
|
|
1838
2097
|
]).then(([va, vb]) => Validation.product(va, vb))
|
|
1839
2098
|
);
|
|
1840
2099
|
TaskValidation2.productAll = (data) => Task.from(
|
|
1841
|
-
() => Promise.all(data.map((t) => Deferred.toPromise(t()))).then((results) => Validation.productAll(results))
|
|
2100
|
+
(signal) => Promise.all(data.map((t) => Deferred.toPromise(t(signal)))).then((results) => Validation.productAll(results))
|
|
1842
2101
|
);
|
|
1843
2102
|
})(TaskValidation || (TaskValidation = {}));
|
|
1844
2103
|
|
|
@@ -1924,13 +2183,6 @@ var Tuple;
|
|
|
1924
2183
|
};
|
|
1925
2184
|
})(Tuple || (Tuple = {}));
|
|
1926
2185
|
|
|
1927
|
-
// src/Types/Brand.ts
|
|
1928
|
-
var Brand;
|
|
1929
|
-
((Brand2) => {
|
|
1930
|
-
Brand2.wrap = () => (value) => value;
|
|
1931
|
-
Brand2.unwrap = (branded) => branded;
|
|
1932
|
-
})(Brand || (Brand = {}));
|
|
1933
|
-
|
|
1934
2186
|
// src/Types/NonEmptyList.ts
|
|
1935
2187
|
var isNonEmptyList = (list) => list.length > 0;
|
|
1936
2188
|
|
|
@@ -1991,6 +2243,40 @@ var Arr;
|
|
|
1991
2243
|
}
|
|
1992
2244
|
return [pass, fail];
|
|
1993
2245
|
};
|
|
2246
|
+
Arr2.compact = (data) => {
|
|
2247
|
+
const result = [];
|
|
2248
|
+
for (const item of data) {
|
|
2249
|
+
if (item.kind === "Some") {
|
|
2250
|
+
result.push(item.value);
|
|
2251
|
+
}
|
|
2252
|
+
}
|
|
2253
|
+
return result;
|
|
2254
|
+
};
|
|
2255
|
+
Arr2.separate = (data) => {
|
|
2256
|
+
const errors = [];
|
|
2257
|
+
const successes = [];
|
|
2258
|
+
for (const item of data) {
|
|
2259
|
+
if (item.kind === "Ok") {
|
|
2260
|
+
successes.push(item.value);
|
|
2261
|
+
} else {
|
|
2262
|
+
errors.push(item.error);
|
|
2263
|
+
}
|
|
2264
|
+
}
|
|
2265
|
+
return [errors, successes];
|
|
2266
|
+
};
|
|
2267
|
+
Arr2.partitionMap = (f) => (data) => {
|
|
2268
|
+
const errors = [];
|
|
2269
|
+
const successes = [];
|
|
2270
|
+
for (const item of data) {
|
|
2271
|
+
const mapped = f(item);
|
|
2272
|
+
if (mapped.kind === "Ok") {
|
|
2273
|
+
successes.push(mapped.value);
|
|
2274
|
+
} else {
|
|
2275
|
+
errors.push(mapped.error);
|
|
2276
|
+
}
|
|
2277
|
+
}
|
|
2278
|
+
return [errors, successes];
|
|
2279
|
+
};
|
|
1994
2280
|
Arr2.groupBy = (f) => (data) => {
|
|
1995
2281
|
const result = {};
|
|
1996
2282
|
for (const a of data) {
|
|
@@ -2015,11 +2301,25 @@ var Arr;
|
|
|
2015
2301
|
}
|
|
2016
2302
|
return result;
|
|
2017
2303
|
};
|
|
2304
|
+
Arr2.uniqWith = (eq) => (data) => {
|
|
2305
|
+
const result = [];
|
|
2306
|
+
for (const a of data) {
|
|
2307
|
+
if (!result.some((x) => eq(x, a))) {
|
|
2308
|
+
result.push(a);
|
|
2309
|
+
}
|
|
2310
|
+
}
|
|
2311
|
+
return result;
|
|
2312
|
+
};
|
|
2018
2313
|
Arr2.sortBy = (compare) => (data) => {
|
|
2019
2314
|
const arr = data;
|
|
2020
2315
|
if (typeof arr.toSorted === "function") return arr.toSorted(compare);
|
|
2021
2316
|
return [...data].sort(compare);
|
|
2022
2317
|
};
|
|
2318
|
+
Arr2.sortWith = (ord) => (data) => {
|
|
2319
|
+
const arr = data;
|
|
2320
|
+
if (typeof arr.toSorted === "function") return arr.toSorted(ord);
|
|
2321
|
+
return [...data].sort(ord);
|
|
2322
|
+
};
|
|
2023
2323
|
Arr2.zip = (other) => (data) => {
|
|
2024
2324
|
const len = Math.min(data.length, other.length);
|
|
2025
2325
|
const result = new Array(len);
|
|
@@ -2052,7 +2352,23 @@ var Arr;
|
|
|
2052
2352
|
}
|
|
2053
2353
|
return result;
|
|
2054
2354
|
};
|
|
2055
|
-
Arr2.flatten = (data) =>
|
|
2355
|
+
Arr2.flatten = (data) => {
|
|
2356
|
+
let totalLen = 0;
|
|
2357
|
+
const outerLen = data.length;
|
|
2358
|
+
for (let i = 0; i < outerLen; i++) {
|
|
2359
|
+
totalLen += data[i].length;
|
|
2360
|
+
}
|
|
2361
|
+
const result = new Array(totalLen);
|
|
2362
|
+
let idx = 0;
|
|
2363
|
+
for (let i = 0; i < outerLen; i++) {
|
|
2364
|
+
const chunk = data[i];
|
|
2365
|
+
const innerLen = chunk.length;
|
|
2366
|
+
for (let j = 0; j < innerLen; j++) {
|
|
2367
|
+
result[idx++] = chunk[j];
|
|
2368
|
+
}
|
|
2369
|
+
}
|
|
2370
|
+
return result;
|
|
2371
|
+
};
|
|
2056
2372
|
Arr2.flatMap = (f) => (data) => {
|
|
2057
2373
|
const n = data.length;
|
|
2058
2374
|
const result = [];
|
|
@@ -2291,8 +2607,8 @@ var Num;
|
|
|
2291
2607
|
}
|
|
2292
2608
|
return result;
|
|
2293
2609
|
};
|
|
2294
|
-
Num2.clamp = (
|
|
2295
|
-
Num2.between = (
|
|
2610
|
+
Num2.clamp = (min2, max2) => (n) => Math.min(Math.max(n, min2), max2);
|
|
2611
|
+
Num2.between = (min2, max2) => (n) => n >= min2 && n <= max2;
|
|
2296
2612
|
Num2.parse = (s) => {
|
|
2297
2613
|
if (s.trim() === "") return Maybe.none();
|
|
2298
2614
|
const n = Number(s);
|
|
@@ -2308,6 +2624,28 @@ var Num;
|
|
|
2308
2624
|
Num2.floor = (n) => Math.floor(n);
|
|
2309
2625
|
Num2.ceil = (n) => Math.ceil(n);
|
|
2310
2626
|
Num2.remainder = (divisor) => (n) => divisor === 0 ? Maybe.none() : Maybe.some(n % divisor);
|
|
2627
|
+
Num2.sum = (ns) => {
|
|
2628
|
+
let result = 0;
|
|
2629
|
+
for (let i = 0; i < ns.length; i++) result += ns[i];
|
|
2630
|
+
return result;
|
|
2631
|
+
};
|
|
2632
|
+
Num2.mean = (ns) => ns.length === 0 ? Maybe.none() : Maybe.some((0, Num2.sum)(ns) / ns.length);
|
|
2633
|
+
Num2.min = (ns) => {
|
|
2634
|
+
if (ns.length === 0) return Maybe.none();
|
|
2635
|
+
let [result] = ns;
|
|
2636
|
+
for (let i = 1; i < ns.length; i++) {
|
|
2637
|
+
if (ns[i] < result) result = ns[i];
|
|
2638
|
+
}
|
|
2639
|
+
return Maybe.some(result);
|
|
2640
|
+
};
|
|
2641
|
+
Num2.max = (ns) => {
|
|
2642
|
+
if (ns.length === 0) return Maybe.none();
|
|
2643
|
+
let [result] = ns;
|
|
2644
|
+
for (let i = 1; i < ns.length; i++) {
|
|
2645
|
+
if (ns[i] > result) result = ns[i];
|
|
2646
|
+
}
|
|
2647
|
+
return Maybe.some(result);
|
|
2648
|
+
};
|
|
2311
2649
|
})(Num || (Num = {}));
|
|
2312
2650
|
|
|
2313
2651
|
// src/Utils/Rec.ts
|
|
@@ -2431,6 +2769,7 @@ var Str;
|
|
|
2431
2769
|
Str2.endsWith = (suffix) => (s) => s.endsWith(suffix);
|
|
2432
2770
|
Str2.toUpperCase = (s) => s.toUpperCase();
|
|
2433
2771
|
Str2.toLowerCase = (s) => s.toLowerCase();
|
|
2772
|
+
Str2.capitalize = (s) => s.length === 0 ? "" : s.charAt(0).toUpperCase() + s.slice(1);
|
|
2434
2773
|
Str2.lines = (s) => s.split(/\r?\n|\r/);
|
|
2435
2774
|
Str2.words = (s) => s.trim().split(/\s+/).filter(Boolean);
|
|
2436
2775
|
Str2.isEmpty = (s) => s.length === 0;
|
|
@@ -2469,6 +2808,13 @@ var Str;
|
|
|
2469
2808
|
return isNaN(n) ? Maybe.none() : Maybe.some(n);
|
|
2470
2809
|
}
|
|
2471
2810
|
};
|
|
2811
|
+
Str2.parseJson = (s) => {
|
|
2812
|
+
try {
|
|
2813
|
+
return Result.ok(JSON.parse(s));
|
|
2814
|
+
} catch (e) {
|
|
2815
|
+
return Result.error(e);
|
|
2816
|
+
}
|
|
2817
|
+
};
|
|
2472
2818
|
})(Str || (Str = {}));
|
|
2473
2819
|
|
|
2474
2820
|
// src/Utils/Uniq.ts
|
|
@@ -2548,14 +2894,19 @@ var Uniq;
|
|
|
2548
2894
|
0 && (module.exports = {
|
|
2549
2895
|
Arr,
|
|
2550
2896
|
Brand,
|
|
2897
|
+
Combinable,
|
|
2551
2898
|
Deferred,
|
|
2552
2899
|
Dict,
|
|
2900
|
+
Duration,
|
|
2901
|
+
Equality,
|
|
2902
|
+
Lazy,
|
|
2553
2903
|
Lens,
|
|
2554
2904
|
Logged,
|
|
2555
2905
|
Maybe,
|
|
2556
2906
|
Num,
|
|
2557
2907
|
Op,
|
|
2558
2908
|
Optional,
|
|
2909
|
+
Ordering,
|
|
2559
2910
|
Predicate,
|
|
2560
2911
|
Reader,
|
|
2561
2912
|
Rec,
|