@nlozgachev/pipelined 0.16.0 → 0.18.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/README.md +39 -21
- package/dist/{Task-Bd3gXPRQ.d.mts → Task-DBW4nOZR.d.mts} +79 -79
- package/dist/{Task-BjAkkD6t.d.ts → Task-DUdIQm-Q.d.ts} +79 -79
- package/dist/{chunk-KXAWFKQQ.mjs → chunk-5HMYR4XB.mjs} +0 -2
- package/dist/{chunk-FAZN3IWZ.mjs → chunk-B3YNH6GZ.mjs} +39 -19
- package/dist/{chunk-QPTGO5AS.mjs → chunk-EAR4TIGH.mjs} +26 -26
- package/dist/{chunk-2XKWSZEU.mjs → chunk-UWGFO7BH.mjs} +40 -29
- package/dist/composition.d.mts +18 -18
- package/dist/composition.d.ts +18 -18
- package/dist/composition.js +0 -2
- package/dist/composition.mjs +1 -1
- package/dist/core.d.mts +83 -53
- package/dist/core.d.ts +83 -53
- package/dist/core.js +66 -55
- package/dist/core.mjs +6 -6
- package/dist/index.d.mts +2 -2
- package/dist/index.d.ts +2 -2
- package/dist/index.js +103 -74
- package/dist/index.mjs +8 -8
- package/dist/utils.d.mts +65 -41
- package/dist/utils.d.ts +65 -41
- package/dist/utils.js +62 -42
- package/dist/utils.mjs +2 -2
- package/package.json +1 -1
package/dist/core.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
export { D as Deferred, E as Err, N as None, O as Ok, S as Some } from './Task-
|
|
1
|
+
import { M as Maybe, W as WithValue, a as WithLog, R as Result, b as WithKind, c as WithError, T as Task, d as WithErrors, e as WithFirst, f as WithSecond } from './Task-DUdIQm-Q.js';
|
|
2
|
+
export { D as Deferred, E as Err, N as None, O as Ok, S as Some } from './Task-DUdIQm-Q.js';
|
|
3
3
|
import { N as NonEmptyList } from './NonEmptyList-BlGFjor5.js';
|
|
4
4
|
|
|
5
5
|
/** Keys of T for which undefined is assignable (i.e. optional fields). */
|
|
@@ -8,7 +8,7 @@ type OptionalKeys<T> = {
|
|
|
8
8
|
}[keyof T];
|
|
9
9
|
/**
|
|
10
10
|
* Optional<S, A> focuses on a value A inside a structure S that may or may
|
|
11
|
-
* not be present. Like a Lens, but get returns
|
|
11
|
+
* not be present. Like a Lens, but get returns Maybe<A>.
|
|
12
12
|
*
|
|
13
13
|
* Compose with other Optionals via `andThen`, or with a Lens via `andThenLens`.
|
|
14
14
|
* Convert a Lens to an Optional with `Lens.toOptional`.
|
|
@@ -25,22 +25,22 @@ type OptionalKeys<T> = {
|
|
|
25
25
|
* ```
|
|
26
26
|
*/
|
|
27
27
|
type Optional<S, A> = {
|
|
28
|
-
readonly get: (s: S) =>
|
|
28
|
+
readonly get: (s: S) => Maybe<A>;
|
|
29
29
|
readonly set: (a: A) => (s: S) => S;
|
|
30
30
|
};
|
|
31
31
|
declare namespace Optional {
|
|
32
32
|
/**
|
|
33
|
-
* Constructs an Optional from a getter (returning
|
|
33
|
+
* Constructs an Optional from a getter (returning Maybe<A>) and a setter.
|
|
34
34
|
*
|
|
35
35
|
* @example
|
|
36
36
|
* ```ts
|
|
37
37
|
* const firstChar = Optional.make(
|
|
38
|
-
* (s: string) => s.length > 0 ?
|
|
38
|
+
* (s: string) => s.length > 0 ? Maybe.some(s[0]) : Maybe.none(),
|
|
39
39
|
* (c) => (s) => s.length > 0 ? c + s.slice(1) : s,
|
|
40
40
|
* );
|
|
41
41
|
* ```
|
|
42
42
|
*/
|
|
43
|
-
const make: <S, A>(get: (s: S) =>
|
|
43
|
+
const make: <S, A>(get: (s: S) => Maybe<A>, set: (a: A) => (s: S) => S) => Optional<S, A>;
|
|
44
44
|
/**
|
|
45
45
|
* Creates an Optional that focuses on an optional property of an object.
|
|
46
46
|
* Only keys whose type includes undefined (i.e. `field?: T`) are accepted.
|
|
@@ -67,14 +67,14 @@ declare namespace Optional {
|
|
|
67
67
|
*/
|
|
68
68
|
const index: <A>(i: number) => Optional<A[], A>;
|
|
69
69
|
/**
|
|
70
|
-
* Reads the focused value from a structure, returning
|
|
70
|
+
* Reads the focused value from a structure, returning Maybe<A>.
|
|
71
71
|
*
|
|
72
72
|
* @example
|
|
73
73
|
* ```ts
|
|
74
74
|
* pipe(profile, Optional.get(bioOpt)); // Some("...") or None
|
|
75
75
|
* ```
|
|
76
76
|
*/
|
|
77
|
-
const get: <S, A>(opt: Optional<S, A>) => (s: S) =>
|
|
77
|
+
const get: <S, A>(opt: Optional<S, A>) => (s: S) => Maybe<A>;
|
|
78
78
|
/**
|
|
79
79
|
* Replaces the focused value within a structure.
|
|
80
80
|
* For indexed focuses, this is a no-op when the index is out of bounds.
|
|
@@ -500,10 +500,10 @@ declare namespace Refinement {
|
|
|
500
500
|
*/
|
|
501
501
|
const or: <A, C extends A>(second: Refinement<A, C>) => <B extends A>(first: Refinement<A, B>) => Refinement<A, B | C>;
|
|
502
502
|
/**
|
|
503
|
-
* Converts a `Refinement<A, B>` into a function `(a: A) =>
|
|
503
|
+
* Converts a `Refinement<A, B>` into a function `(a: A) => Maybe<B>`.
|
|
504
504
|
*
|
|
505
505
|
* Returns `Some(a)` when the refinement holds, `None` otherwise. Useful for
|
|
506
|
-
* integrating runtime validation into an `
|
|
506
|
+
* integrating runtime validation into an `Maybe`-based pipeline.
|
|
507
507
|
*
|
|
508
508
|
* @example
|
|
509
509
|
* ```ts
|
|
@@ -515,7 +515,7 @@ declare namespace Refinement {
|
|
|
515
515
|
* pipe(42, Refinement.toFilter(isPositive)); // Some(42)
|
|
516
516
|
* ```
|
|
517
517
|
*/
|
|
518
|
-
const toFilter: <A, B extends A>(r: Refinement<A, B>) => (a: A) =>
|
|
518
|
+
const toFilter: <A, B extends A>(r: Refinement<A, B>) => (a: A) => Maybe<B>;
|
|
519
519
|
/**
|
|
520
520
|
* Converts a `Refinement<A, B>` into a function `(a: A) => Result<E, B>`.
|
|
521
521
|
*
|
|
@@ -1025,10 +1025,10 @@ declare namespace RemoteData {
|
|
|
1025
1025
|
*/
|
|
1026
1026
|
const recover: <E, A, B>(fallback: (e: E) => RemoteData<E, B>) => (data: RemoteData<E, A>) => RemoteData<E, A | B>;
|
|
1027
1027
|
/**
|
|
1028
|
-
* Converts a RemoteData to an
|
|
1028
|
+
* Converts a RemoteData to an Maybe.
|
|
1029
1029
|
* Success becomes Some, all other states become None.
|
|
1030
1030
|
*/
|
|
1031
|
-
const
|
|
1031
|
+
const toMaybe: <E, A>(data: RemoteData<E, A>) => Maybe<A>;
|
|
1032
1032
|
/**
|
|
1033
1033
|
* Converts a RemoteData to a Result.
|
|
1034
1034
|
* Success becomes Ok, Failure becomes Err.
|
|
@@ -1148,8 +1148,38 @@ declare namespace TaskResult {
|
|
|
1148
1148
|
backoff?: number | ((attempt: number) => number);
|
|
1149
1149
|
when?: (error: E) => boolean;
|
|
1150
1150
|
}) => <A>(data: TaskResult<E, A>) => TaskResult<E, A>;
|
|
1151
|
+
/**
|
|
1152
|
+
* Polls a TaskResult repeatedly until the success value satisfies a predicate.
|
|
1153
|
+
* Stops immediately and returns `Err` if the task fails.
|
|
1154
|
+
*
|
|
1155
|
+
* `delay` accepts a fixed number of milliseconds or a function `(attempt) => ms`
|
|
1156
|
+
* for a computed delay — useful for starting fast and slowing down over time.
|
|
1157
|
+
*
|
|
1158
|
+
* @example
|
|
1159
|
+
* ```ts
|
|
1160
|
+
* const checkJob = (id: string): TaskResult<string, { status: "pending" | "done" }> =>
|
|
1161
|
+
* TaskResult.tryCatch(() => fetch(`/jobs/${id}`).then(r => r.json()), String);
|
|
1162
|
+
*
|
|
1163
|
+
* // Fixed delay: poll every 2s
|
|
1164
|
+
* pipe(
|
|
1165
|
+
* checkJob(jobId),
|
|
1166
|
+
* TaskResult.pollUntil({ when: job => job.status === "done", delay: 2000 }),
|
|
1167
|
+
* );
|
|
1168
|
+
*
|
|
1169
|
+
* // Computed delay: 1s, 2s, 3s, ...
|
|
1170
|
+
* pipe(
|
|
1171
|
+
* checkJob(jobId),
|
|
1172
|
+
* TaskResult.pollUntil({ when: job => job.status === "done", delay: n => n * 1000 }),
|
|
1173
|
+
* );
|
|
1174
|
+
* ```
|
|
1175
|
+
*/
|
|
1176
|
+
const pollUntil: <A>(options: {
|
|
1177
|
+
when: (a: A) => boolean;
|
|
1178
|
+
delay?: number | ((attempt: number) => number);
|
|
1179
|
+
}) => <E>(task: TaskResult<E, A>) => TaskResult<E, A>;
|
|
1151
1180
|
/**
|
|
1152
1181
|
* Fails a TaskResult with a typed error if it does not resolve within the given time.
|
|
1182
|
+
* Uses `Promise.race` — the underlying operation keeps running after the timeout fires.
|
|
1153
1183
|
*
|
|
1154
1184
|
* @example
|
|
1155
1185
|
* ```ts
|
|
@@ -1451,84 +1481,84 @@ declare namespace State {
|
|
|
1451
1481
|
|
|
1452
1482
|
/**
|
|
1453
1483
|
* A Task that resolves to an optional value.
|
|
1454
|
-
* Combines async operations with the
|
|
1484
|
+
* Combines async operations with the Maybe type for values that may not exist.
|
|
1455
1485
|
*
|
|
1456
1486
|
* @example
|
|
1457
1487
|
* ```ts
|
|
1458
|
-
* const findUser = (id: string):
|
|
1459
|
-
*
|
|
1488
|
+
* const findUser = (id: string): TaskMaybe<User> =>
|
|
1489
|
+
* TaskMaybe.tryCatch(() => db.users.findById(id));
|
|
1460
1490
|
*
|
|
1461
1491
|
* pipe(
|
|
1462
1492
|
* findUser("123"),
|
|
1463
|
-
*
|
|
1464
|
-
*
|
|
1493
|
+
* TaskMaybe.map(user => user.name),
|
|
1494
|
+
* TaskMaybe.getOrElse(() => "Unknown")
|
|
1465
1495
|
* )();
|
|
1466
1496
|
* ```
|
|
1467
1497
|
*/
|
|
1468
|
-
type
|
|
1469
|
-
declare namespace
|
|
1498
|
+
type TaskMaybe<A> = Task<Maybe<A>>;
|
|
1499
|
+
declare namespace TaskMaybe {
|
|
1470
1500
|
/**
|
|
1471
1501
|
* Wraps a value in a Some inside a Task.
|
|
1472
1502
|
*/
|
|
1473
|
-
const some: <A>(value: A) =>
|
|
1503
|
+
const some: <A>(value: A) => TaskMaybe<A>;
|
|
1474
1504
|
/**
|
|
1475
|
-
* Creates a
|
|
1505
|
+
* Creates a TaskMaybe that resolves to None.
|
|
1476
1506
|
*/
|
|
1477
|
-
const none: <A = never>() =>
|
|
1507
|
+
const none: <A = never>() => TaskMaybe<A>;
|
|
1478
1508
|
/**
|
|
1479
|
-
* Lifts an Option into a
|
|
1509
|
+
* Lifts an Option into a TaskMaybe.
|
|
1480
1510
|
*/
|
|
1481
|
-
const
|
|
1511
|
+
const fromMaybe: <A>(option: Maybe<A>) => TaskMaybe<A>;
|
|
1482
1512
|
/**
|
|
1483
|
-
* Lifts a Task into a
|
|
1513
|
+
* Lifts a Task into a TaskMaybe by wrapping its result in Some.
|
|
1484
1514
|
*/
|
|
1485
|
-
const fromTask: <A>(task: Task<A>) =>
|
|
1515
|
+
const fromTask: <A>(task: Task<A>) => TaskMaybe<A>;
|
|
1486
1516
|
/**
|
|
1487
|
-
* Creates a
|
|
1517
|
+
* Creates a TaskMaybe from a Promise-returning function.
|
|
1488
1518
|
* Returns Some if the promise resolves, None if it rejects.
|
|
1489
1519
|
*
|
|
1490
1520
|
* @example
|
|
1491
1521
|
* ```ts
|
|
1492
|
-
* const fetchUser =
|
|
1522
|
+
* const fetchUser = TaskMaybe.tryCatch(() =>
|
|
1493
1523
|
* fetch("/user/1").then(r => r.json())
|
|
1494
1524
|
* );
|
|
1495
1525
|
* ```
|
|
1496
1526
|
*/
|
|
1497
|
-
const tryCatch: <A>(f: () => Promise<A>) =>
|
|
1527
|
+
const tryCatch: <A>(f: () => Promise<A>) => TaskMaybe<A>;
|
|
1498
1528
|
/**
|
|
1499
|
-
* Transforms the value inside a
|
|
1529
|
+
* Transforms the value inside a TaskMaybe.
|
|
1500
1530
|
*/
|
|
1501
|
-
const map: <A, B>(f: (a: A) => B) => (data:
|
|
1531
|
+
const map: <A, B>(f: (a: A) => B) => (data: TaskMaybe<A>) => TaskMaybe<B>;
|
|
1502
1532
|
/**
|
|
1503
|
-
* Chains
|
|
1533
|
+
* Chains TaskMaybe computations. If the first resolves to Some, passes the
|
|
1504
1534
|
* value to f. If the first resolves to None, propagates None.
|
|
1505
1535
|
*
|
|
1506
1536
|
* @example
|
|
1507
1537
|
* ```ts
|
|
1508
1538
|
* pipe(
|
|
1509
1539
|
* findUser("123"),
|
|
1510
|
-
*
|
|
1540
|
+
* TaskMaybe.chain(user => findOrg(user.orgId))
|
|
1511
1541
|
* )();
|
|
1512
1542
|
* ```
|
|
1513
1543
|
*/
|
|
1514
|
-
const chain: <A, B>(f: (a: A) =>
|
|
1544
|
+
const chain: <A, B>(f: (a: A) => TaskMaybe<B>) => (data: TaskMaybe<A>) => TaskMaybe<B>;
|
|
1515
1545
|
/**
|
|
1516
|
-
* Applies a function wrapped in a
|
|
1546
|
+
* Applies a function wrapped in a TaskMaybe to a value wrapped in a TaskMaybe.
|
|
1517
1547
|
* Both Tasks run in parallel.
|
|
1518
1548
|
*/
|
|
1519
|
-
const ap: <A>(arg:
|
|
1549
|
+
const ap: <A>(arg: TaskMaybe<A>) => <B>(data: TaskMaybe<(a: A) => B>) => TaskMaybe<B>;
|
|
1520
1550
|
/**
|
|
1521
|
-
* Extracts a value from a
|
|
1551
|
+
* Extracts a value from a TaskMaybe by providing handlers for both cases.
|
|
1522
1552
|
*/
|
|
1523
|
-
const fold: <A, B>(onNone: () => B, onSome: (a: A) => B) => (data:
|
|
1553
|
+
const fold: <A, B>(onNone: () => B, onSome: (a: A) => B) => (data: TaskMaybe<A>) => Task<B>;
|
|
1524
1554
|
/**
|
|
1525
|
-
* Pattern matches on a
|
|
1555
|
+
* Pattern matches on a TaskMaybe, returning a Task of the result.
|
|
1526
1556
|
*
|
|
1527
1557
|
* @example
|
|
1528
1558
|
* ```ts
|
|
1529
1559
|
* pipe(
|
|
1530
1560
|
* findUser("123"),
|
|
1531
|
-
*
|
|
1561
|
+
* TaskMaybe.match({
|
|
1532
1562
|
* some: user => `Hello, ${user.name}`,
|
|
1533
1563
|
* none: () => "User not found"
|
|
1534
1564
|
* })
|
|
@@ -1538,33 +1568,33 @@ declare namespace TaskOption {
|
|
|
1538
1568
|
const match: <A, B>(cases: {
|
|
1539
1569
|
none: () => B;
|
|
1540
1570
|
some: (a: A) => B;
|
|
1541
|
-
}) => (data:
|
|
1571
|
+
}) => (data: TaskMaybe<A>) => Task<B>;
|
|
1542
1572
|
/**
|
|
1543
|
-
* Returns the value or a default if the
|
|
1573
|
+
* Returns the value or a default if the TaskMaybe resolves to None.
|
|
1544
1574
|
* The default can be a different type, widening the result to `Task<A | B>`.
|
|
1545
1575
|
*/
|
|
1546
|
-
const getOrElse: <A, B>(defaultValue: () => B) => (data:
|
|
1576
|
+
const getOrElse: <A, B>(defaultValue: () => B) => (data: TaskMaybe<A>) => Task<A | B>;
|
|
1547
1577
|
/**
|
|
1548
|
-
* Executes a side effect on the value without changing the
|
|
1578
|
+
* Executes a side effect on the value without changing the TaskMaybe.
|
|
1549
1579
|
* Useful for logging or debugging.
|
|
1550
1580
|
*/
|
|
1551
|
-
const tap: <A>(f: (a: A) => void) => (data:
|
|
1581
|
+
const tap: <A>(f: (a: A) => void) => (data: TaskMaybe<A>) => TaskMaybe<A>;
|
|
1552
1582
|
/**
|
|
1553
|
-
* Filters the value inside a
|
|
1583
|
+
* Filters the value inside a TaskMaybe. Returns None if the predicate fails.
|
|
1554
1584
|
*/
|
|
1555
|
-
const filter: <A>(predicate: (a: A) => boolean) => (data:
|
|
1585
|
+
const filter: <A>(predicate: (a: A) => boolean) => (data: TaskMaybe<A>) => TaskMaybe<A>;
|
|
1556
1586
|
/**
|
|
1557
|
-
* Converts a
|
|
1587
|
+
* Converts a TaskMaybe to a TaskResult, using onNone to produce the error value.
|
|
1558
1588
|
*
|
|
1559
1589
|
* @example
|
|
1560
1590
|
* ```ts
|
|
1561
1591
|
* pipe(
|
|
1562
1592
|
* findUser("123"),
|
|
1563
|
-
*
|
|
1593
|
+
* TaskMaybe.toTaskResult(() => "User not found")
|
|
1564
1594
|
* );
|
|
1565
1595
|
* ```
|
|
1566
1596
|
*/
|
|
1567
|
-
const toTaskResult: <E>(onNone: () => E) => <A>(data:
|
|
1597
|
+
const toTaskResult: <E>(onNone: () => E) => <A>(data: TaskMaybe<A>) => TaskResult<E, A>;
|
|
1568
1598
|
}
|
|
1569
1599
|
|
|
1570
1600
|
type Valid<A> = WithKind<"Valid"> & WithValue<A>;
|
|
@@ -2262,4 +2292,4 @@ declare namespace Tuple {
|
|
|
2262
2292
|
const tap: <A, B>(f: (a: A, b: B) => void) => (tuple: Tuple<A, B>) => Tuple<A, B>;
|
|
2263
2293
|
}
|
|
2264
2294
|
|
|
2265
|
-
export { type Failure, type Invalid, Lens, type Loading, Logged, type NotAsked,
|
|
2295
|
+
export { type Failure, type Invalid, Lens, type Loading, Logged, Maybe, type NotAsked, Optional, Predicate, Reader, Refinement, RemoteData, Resource, Result, State, type Success, Task, TaskMaybe, TaskResult, TaskValidation, These, type TheseBoth, type TheseFirst, type TheseSecond, Tuple, type Valid, Validation };
|
package/dist/core.js
CHANGED
|
@@ -23,7 +23,7 @@ __export(Core_exports, {
|
|
|
23
23
|
Deferred: () => Deferred,
|
|
24
24
|
Lens: () => Lens,
|
|
25
25
|
Logged: () => Logged,
|
|
26
|
-
|
|
26
|
+
Maybe: () => Maybe,
|
|
27
27
|
Optional: () => Optional,
|
|
28
28
|
Predicate: () => Predicate,
|
|
29
29
|
Reader: () => Reader,
|
|
@@ -33,7 +33,7 @@ __export(Core_exports, {
|
|
|
33
33
|
Result: () => Result,
|
|
34
34
|
State: () => State,
|
|
35
35
|
Task: () => Task,
|
|
36
|
-
|
|
36
|
+
TaskMaybe: () => TaskMaybe,
|
|
37
37
|
TaskResult: () => TaskResult,
|
|
38
38
|
TaskValidation: () => TaskValidation,
|
|
39
39
|
These: () => These,
|
|
@@ -129,37 +129,37 @@ var Result;
|
|
|
129
129
|
};
|
|
130
130
|
Result2.recover = (fallback) => (data) => (0, Result2.isOk)(data) ? data : fallback(data.error);
|
|
131
131
|
Result2.recoverUnless = (blockedErr, fallback) => (data) => (0, Result2.isErr)(data) && data.error !== blockedErr ? fallback() : data;
|
|
132
|
-
Result2.
|
|
132
|
+
Result2.toMaybe = (data) => (0, Result2.isOk)(data) ? Maybe.some(data.value) : Maybe.none();
|
|
133
133
|
Result2.ap = (arg) => (data) => (0, Result2.isOk)(data) && (0, Result2.isOk)(arg) ? (0, Result2.ok)(data.value(arg.value)) : (0, Result2.isErr)(data) ? data : arg;
|
|
134
134
|
})(Result || (Result = {}));
|
|
135
135
|
|
|
136
|
-
// src/Core/
|
|
136
|
+
// src/Core/Maybe.ts
|
|
137
137
|
var _none = { kind: "None" };
|
|
138
|
-
var
|
|
139
|
-
((
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
if ((0,
|
|
138
|
+
var Maybe;
|
|
139
|
+
((Maybe2) => {
|
|
140
|
+
Maybe2.some = (value) => ({ kind: "Some", value });
|
|
141
|
+
Maybe2.isSome = (data) => data.kind === "Some";
|
|
142
|
+
Maybe2.none = () => _none;
|
|
143
|
+
Maybe2.isNone = (data) => data.kind === "None";
|
|
144
|
+
Maybe2.fromNullable = (value) => value === null || value === void 0 ? (0, Maybe2.none)() : (0, Maybe2.some)(value);
|
|
145
|
+
Maybe2.toNullable = (data) => (0, Maybe2.isSome)(data) ? data.value : null;
|
|
146
|
+
Maybe2.toUndefined = (data) => (0, Maybe2.isSome)(data) ? data.value : void 0;
|
|
147
|
+
Maybe2.fromUndefined = (value) => value === void 0 ? (0, Maybe2.none)() : (0, Maybe2.some)(value);
|
|
148
|
+
Maybe2.toResult = (onNone) => (data) => (0, Maybe2.isSome)(data) ? Result.ok(data.value) : Result.err(onNone());
|
|
149
|
+
Maybe2.fromResult = (data) => Result.isOk(data) ? (0, Maybe2.some)(data.value) : (0, Maybe2.none)();
|
|
150
|
+
Maybe2.map = (f) => (data) => (0, Maybe2.isSome)(data) ? (0, Maybe2.some)(f(data.value)) : data;
|
|
151
|
+
Maybe2.chain = (f) => (data) => (0, Maybe2.isSome)(data) ? f(data.value) : data;
|
|
152
|
+
Maybe2.fold = (onNone, onSome) => (data) => (0, Maybe2.isSome)(data) ? onSome(data.value) : onNone();
|
|
153
|
+
Maybe2.match = (cases) => (data) => (0, Maybe2.isSome)(data) ? cases.some(data.value) : cases.none();
|
|
154
|
+
Maybe2.getOrElse = (defaultValue) => (data) => (0, Maybe2.isSome)(data) ? data.value : defaultValue();
|
|
155
|
+
Maybe2.tap = (f) => (data) => {
|
|
156
|
+
if ((0, Maybe2.isSome)(data)) f(data.value);
|
|
157
157
|
return data;
|
|
158
158
|
};
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
})(
|
|
159
|
+
Maybe2.filter = (predicate) => (data) => (0, Maybe2.isSome)(data) ? predicate(data.value) ? data : (0, Maybe2.none)() : data;
|
|
160
|
+
Maybe2.recover = (fallback) => (data) => (0, Maybe2.isSome)(data) ? data : fallback();
|
|
161
|
+
Maybe2.ap = (arg) => (data) => (0, Maybe2.isSome)(data) && (0, Maybe2.isSome)(arg) ? (0, Maybe2.some)(data.value(arg.value)) : (0, Maybe2.none)();
|
|
162
|
+
})(Maybe || (Maybe = {}));
|
|
163
163
|
|
|
164
164
|
// src/Core/Optional.ts
|
|
165
165
|
var Optional;
|
|
@@ -168,12 +168,12 @@ var Optional;
|
|
|
168
168
|
Optional2.prop = () => (key) => (0, Optional2.make)(
|
|
169
169
|
(s) => {
|
|
170
170
|
const val = s[key];
|
|
171
|
-
return val !== null && val !== void 0 ?
|
|
171
|
+
return val !== null && val !== void 0 ? Maybe.some(val) : Maybe.none();
|
|
172
172
|
},
|
|
173
173
|
(a) => (s) => ({ ...s, [key]: a })
|
|
174
174
|
);
|
|
175
175
|
Optional2.index = (i) => (0, Optional2.make)(
|
|
176
|
-
(arr) => i >= 0 && i < arr.length ?
|
|
176
|
+
(arr) => i >= 0 && i < arr.length ? Maybe.some(arr[i]) : Maybe.none(),
|
|
177
177
|
(a) => (arr) => {
|
|
178
178
|
if (i < 0 || i >= arr.length) return arr;
|
|
179
179
|
const copy = [...arr];
|
|
@@ -202,7 +202,7 @@ var Optional;
|
|
|
202
202
|
Optional2.andThen = (inner) => (outer) => (0, Optional2.make)(
|
|
203
203
|
(s) => {
|
|
204
204
|
const mid = outer.get(s);
|
|
205
|
-
return mid.kind === "None" ?
|
|
205
|
+
return mid.kind === "None" ? Maybe.none() : inner.get(mid.value);
|
|
206
206
|
},
|
|
207
207
|
(b) => (s) => {
|
|
208
208
|
const mid = outer.get(s);
|
|
@@ -212,7 +212,7 @@ var Optional;
|
|
|
212
212
|
Optional2.andThenLens = (inner) => (outer) => (0, Optional2.make)(
|
|
213
213
|
(s) => {
|
|
214
214
|
const mid = outer.get(s);
|
|
215
|
-
return mid.kind === "None" ?
|
|
215
|
+
return mid.kind === "None" ? Maybe.none() : Maybe.some(inner.get(mid.value));
|
|
216
216
|
},
|
|
217
217
|
(b) => (s) => {
|
|
218
218
|
const mid = outer.get(s);
|
|
@@ -258,7 +258,7 @@ var Refinement;
|
|
|
258
258
|
Refinement2.compose = (bc) => (ab) => (a) => ab(a) && bc(a);
|
|
259
259
|
Refinement2.and = (second) => (first) => (a) => first(a) && second(a);
|
|
260
260
|
Refinement2.or = (second) => (first) => (a) => first(a) || second(a);
|
|
261
|
-
Refinement2.toFilter = (r) => (a) => r(a) ?
|
|
261
|
+
Refinement2.toFilter = (r) => (a) => r(a) ? Maybe.some(a) : Maybe.none();
|
|
262
262
|
Refinement2.toResult = (r, onFail) => (a) => r(a) ? Result.ok(a) : Result.err(onFail(a));
|
|
263
263
|
})(Refinement || (Refinement = {}));
|
|
264
264
|
|
|
@@ -323,7 +323,7 @@ var RemoteData;
|
|
|
323
323
|
return data;
|
|
324
324
|
};
|
|
325
325
|
RemoteData2.recover = (fallback) => (data) => (0, RemoteData2.isFailure)(data) ? fallback(data.error) : data;
|
|
326
|
-
RemoteData2.
|
|
326
|
+
RemoteData2.toMaybe = (data) => (0, RemoteData2.isSuccess)(data) ? Maybe.some(data.value) : Maybe.none();
|
|
327
327
|
RemoteData2.toResult = (onNotReady) => (data) => (0, RemoteData2.isSuccess)(data) ? Result.ok(data.value) : Result.err((0, RemoteData2.isFailure)(data) ? data.error : onNotReady());
|
|
328
328
|
})(RemoteData || (RemoteData = {}));
|
|
329
329
|
|
|
@@ -466,31 +466,31 @@ var State;
|
|
|
466
466
|
State2.execute = (initialState) => (st) => st(initialState)[1];
|
|
467
467
|
})(State || (State = {}));
|
|
468
468
|
|
|
469
|
-
// src/Core/
|
|
470
|
-
var
|
|
471
|
-
((
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
() => f().then(
|
|
469
|
+
// src/Core/TaskMaybe.ts
|
|
470
|
+
var TaskMaybe;
|
|
471
|
+
((TaskMaybe2) => {
|
|
472
|
+
TaskMaybe2.some = (value) => Task.resolve(Maybe.some(value));
|
|
473
|
+
TaskMaybe2.none = () => Task.resolve(Maybe.none());
|
|
474
|
+
TaskMaybe2.fromMaybe = (option) => Task.resolve(option);
|
|
475
|
+
TaskMaybe2.fromTask = (task) => Task.map(Maybe.some)(task);
|
|
476
|
+
TaskMaybe2.tryCatch = (f) => Task.from(
|
|
477
|
+
() => f().then(Maybe.some).catch(() => Maybe.none())
|
|
478
478
|
);
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
479
|
+
TaskMaybe2.map = (f) => (data) => Task.map(Maybe.map(f))(data);
|
|
480
|
+
TaskMaybe2.chain = (f) => (data) => Task.chain((option) => Maybe.isSome(option) ? f(option.value) : Task.resolve(Maybe.none()))(data);
|
|
481
|
+
TaskMaybe2.ap = (arg) => (data) => Task.from(
|
|
482
482
|
() => Promise.all([
|
|
483
483
|
Deferred.toPromise(data()),
|
|
484
484
|
Deferred.toPromise(arg())
|
|
485
|
-
]).then(([of_, oa]) =>
|
|
485
|
+
]).then(([of_, oa]) => Maybe.ap(oa)(of_))
|
|
486
486
|
);
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
})(
|
|
487
|
+
TaskMaybe2.fold = (onNone, onSome) => (data) => Task.map(Maybe.fold(onNone, onSome))(data);
|
|
488
|
+
TaskMaybe2.match = (cases) => (data) => Task.map(Maybe.match(cases))(data);
|
|
489
|
+
TaskMaybe2.getOrElse = (defaultValue) => (data) => Task.map(Maybe.getOrElse(defaultValue))(data);
|
|
490
|
+
TaskMaybe2.tap = (f) => (data) => Task.map(Maybe.tap(f))(data);
|
|
491
|
+
TaskMaybe2.filter = (predicate) => (data) => Task.map(Maybe.filter(predicate))(data);
|
|
492
|
+
TaskMaybe2.toTaskResult = (onNone) => (data) => Task.map(Maybe.toResult(onNone))(data);
|
|
493
|
+
})(TaskMaybe || (TaskMaybe = {}));
|
|
494
494
|
|
|
495
495
|
// src/Core/TaskResult.ts
|
|
496
496
|
var TaskResult;
|
|
@@ -526,6 +526,17 @@ var TaskResult;
|
|
|
526
526
|
});
|
|
527
527
|
return run(attempts);
|
|
528
528
|
});
|
|
529
|
+
TaskResult2.pollUntil = (options) => (task) => Task.from(() => {
|
|
530
|
+
const { when: predicate, delay } = options;
|
|
531
|
+
const getDelay = (attempt) => delay === void 0 ? 0 : typeof delay === "function" ? delay(attempt) : delay;
|
|
532
|
+
const run = (attempt) => Deferred.toPromise(task()).then((result) => {
|
|
533
|
+
if (Result.isErr(result)) return result;
|
|
534
|
+
if (predicate(result.value)) return result;
|
|
535
|
+
const ms = getDelay(attempt);
|
|
536
|
+
return (ms > 0 ? new Promise((r) => setTimeout(r, ms)) : Promise.resolve()).then(() => run(attempt + 1));
|
|
537
|
+
});
|
|
538
|
+
return run(1);
|
|
539
|
+
});
|
|
529
540
|
TaskResult2.timeout = (ms, onTimeout) => (data) => Task.from(() => {
|
|
530
541
|
let timerId;
|
|
531
542
|
return Promise.race([
|
|
@@ -715,7 +726,7 @@ var Tuple;
|
|
|
715
726
|
Deferred,
|
|
716
727
|
Lens,
|
|
717
728
|
Logged,
|
|
718
|
-
|
|
729
|
+
Maybe,
|
|
719
730
|
Optional,
|
|
720
731
|
Predicate,
|
|
721
732
|
Reader,
|
|
@@ -725,7 +736,7 @@ var Tuple;
|
|
|
725
736
|
Result,
|
|
726
737
|
State,
|
|
727
738
|
Task,
|
|
728
|
-
|
|
739
|
+
TaskMaybe,
|
|
729
740
|
TaskResult,
|
|
730
741
|
TaskValidation,
|
|
731
742
|
These,
|
package/dist/core.mjs
CHANGED
|
@@ -8,24 +8,24 @@ import {
|
|
|
8
8
|
RemoteData,
|
|
9
9
|
Resource,
|
|
10
10
|
State,
|
|
11
|
-
|
|
11
|
+
TaskMaybe,
|
|
12
12
|
TaskResult,
|
|
13
13
|
TaskValidation,
|
|
14
14
|
These,
|
|
15
15
|
Tuple,
|
|
16
16
|
Validation
|
|
17
|
-
} from "./chunk-
|
|
17
|
+
} from "./chunk-UWGFO7BH.mjs";
|
|
18
18
|
import {
|
|
19
19
|
Deferred,
|
|
20
|
-
|
|
20
|
+
Maybe,
|
|
21
21
|
Result,
|
|
22
22
|
Task
|
|
23
|
-
} from "./chunk-
|
|
23
|
+
} from "./chunk-EAR4TIGH.mjs";
|
|
24
24
|
export {
|
|
25
25
|
Deferred,
|
|
26
26
|
Lens,
|
|
27
27
|
Logged,
|
|
28
|
-
|
|
28
|
+
Maybe,
|
|
29
29
|
Optional,
|
|
30
30
|
Predicate,
|
|
31
31
|
Reader,
|
|
@@ -35,7 +35,7 @@ export {
|
|
|
35
35
|
Result,
|
|
36
36
|
State,
|
|
37
37
|
Task,
|
|
38
|
-
|
|
38
|
+
TaskMaybe,
|
|
39
39
|
TaskResult,
|
|
40
40
|
TaskValidation,
|
|
41
41
|
These,
|
package/dist/index.d.mts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
export { and, compose, constFalse, constNull, constTrue, constUndefined, constVoid, constant, converge, curry, curry3, curry4, flip, flow, identity, juxt, memoize, memoizeWeak, not, on, once, or, pipe, tap, uncurry, uncurry3, uncurry4 } from './composition.mjs';
|
|
2
|
-
export { D as Deferred, E as Err,
|
|
3
|
-
export { Failure, Invalid, Lens, Loading, Logged, NotAsked, Optional, Predicate, Reader, Refinement, RemoteData, Resource, State, Success,
|
|
2
|
+
export { D as Deferred, E as Err, M as Maybe, N as None, O as Ok, R as Result, S as Some, T as Task } from './Task-DBW4nOZR.mjs';
|
|
3
|
+
export { Failure, Invalid, Lens, Loading, Logged, NotAsked, Optional, Predicate, Reader, Refinement, RemoteData, Resource, State, Success, TaskMaybe, TaskResult, TaskValidation, These, TheseBoth, TheseFirst, TheseSecond, Tuple, Valid, Validation } from './core.mjs';
|
|
4
4
|
export { Brand } from './types.mjs';
|
|
5
5
|
export { N as NonEmptyList, i as isNonEmptyList } from './NonEmptyList-BlGFjor5.mjs';
|
|
6
6
|
export { Arr, Dict, Num, Rec, Str, Uniq } from './utils.mjs';
|
package/dist/index.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
export { and, compose, constFalse, constNull, constTrue, constUndefined, constVoid, constant, converge, curry, curry3, curry4, flip, flow, identity, juxt, memoize, memoizeWeak, not, on, once, or, pipe, tap, uncurry, uncurry3, uncurry4 } from './composition.js';
|
|
2
|
-
export { D as Deferred, E as Err,
|
|
3
|
-
export { Failure, Invalid, Lens, Loading, Logged, NotAsked, Optional, Predicate, Reader, Refinement, RemoteData, Resource, State, Success,
|
|
2
|
+
export { D as Deferred, E as Err, M as Maybe, N as None, O as Ok, R as Result, S as Some, T as Task } from './Task-DUdIQm-Q.js';
|
|
3
|
+
export { Failure, Invalid, Lens, Loading, Logged, NotAsked, Optional, Predicate, Reader, Refinement, RemoteData, Resource, State, Success, TaskMaybe, TaskResult, TaskValidation, These, TheseBoth, TheseFirst, TheseSecond, Tuple, Valid, Validation } from './core.js';
|
|
4
4
|
export { Brand } from './types.js';
|
|
5
5
|
export { N as NonEmptyList, i as isNonEmptyList } from './NonEmptyList-BlGFjor5.js';
|
|
6
6
|
export { Arr, Dict, Num, Rec, Str, Uniq } from './utils.js';
|