@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/dist/core.d.ts CHANGED
@@ -1,5 +1,5 @@
1
- import { a as Option, W as WithValue, b as WithLog, R as Result, c as WithKind, d as WithError, T as Task, e as WithErrors, f as WithFirst, g as WithSecond } from './Task-BjAkkD6t.js';
2
- export { D as Deferred, E as Err, N as None, O as Ok, S as Some } from './Task-BjAkkD6t.js';
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 Option<A>.
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) => Option<A>;
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 Option<A>) and a setter.
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 ? Option.some(s[0]) : Option.none(),
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) => Option<A>, set: (a: A) => (s: S) => S) => Optional<S, A>;
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 Option<A>.
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) => Option<A>;
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) => Option<B>`.
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 `Option`-based pipeline.
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) => Option<B>;
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 Option.
1028
+ * Converts a RemoteData to an Maybe.
1029
1029
  * Success becomes Some, all other states become None.
1030
1030
  */
1031
- const toOption: <E, A>(data: RemoteData<E, A>) => Option<A>;
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 Option type for values that may not exist.
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): TaskOption<User> =>
1459
- * TaskOption.tryCatch(() => db.users.findById(id));
1488
+ * const findUser = (id: string): TaskMaybe<User> =>
1489
+ * TaskMaybe.tryCatch(() => db.users.findById(id));
1460
1490
  *
1461
1491
  * pipe(
1462
1492
  * findUser("123"),
1463
- * TaskOption.map(user => user.name),
1464
- * TaskOption.getOrElse(() => "Unknown")
1493
+ * TaskMaybe.map(user => user.name),
1494
+ * TaskMaybe.getOrElse(() => "Unknown")
1465
1495
  * )();
1466
1496
  * ```
1467
1497
  */
1468
- type TaskOption<A> = Task<Option<A>>;
1469
- declare namespace TaskOption {
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) => TaskOption<A>;
1503
+ const some: <A>(value: A) => TaskMaybe<A>;
1474
1504
  /**
1475
- * Creates a TaskOption that resolves to None.
1505
+ * Creates a TaskMaybe that resolves to None.
1476
1506
  */
1477
- const none: <A = never>() => TaskOption<A>;
1507
+ const none: <A = never>() => TaskMaybe<A>;
1478
1508
  /**
1479
- * Lifts an Option into a TaskOption.
1509
+ * Lifts an Option into a TaskMaybe.
1480
1510
  */
1481
- const fromOption: <A>(option: Option<A>) => TaskOption<A>;
1511
+ const fromMaybe: <A>(option: Maybe<A>) => TaskMaybe<A>;
1482
1512
  /**
1483
- * Lifts a Task into a TaskOption by wrapping its result in Some.
1513
+ * Lifts a Task into a TaskMaybe by wrapping its result in Some.
1484
1514
  */
1485
- const fromTask: <A>(task: Task<A>) => TaskOption<A>;
1515
+ const fromTask: <A>(task: Task<A>) => TaskMaybe<A>;
1486
1516
  /**
1487
- * Creates a TaskOption from a Promise-returning function.
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 = TaskOption.tryCatch(() =>
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>) => TaskOption<A>;
1527
+ const tryCatch: <A>(f: () => Promise<A>) => TaskMaybe<A>;
1498
1528
  /**
1499
- * Transforms the value inside a TaskOption.
1529
+ * Transforms the value inside a TaskMaybe.
1500
1530
  */
1501
- const map: <A, B>(f: (a: A) => B) => (data: TaskOption<A>) => TaskOption<B>;
1531
+ const map: <A, B>(f: (a: A) => B) => (data: TaskMaybe<A>) => TaskMaybe<B>;
1502
1532
  /**
1503
- * Chains TaskOption computations. If the first resolves to Some, passes the
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
- * TaskOption.chain(user => findOrg(user.orgId))
1540
+ * TaskMaybe.chain(user => findOrg(user.orgId))
1511
1541
  * )();
1512
1542
  * ```
1513
1543
  */
1514
- const chain: <A, B>(f: (a: A) => TaskOption<B>) => (data: TaskOption<A>) => TaskOption<B>;
1544
+ const chain: <A, B>(f: (a: A) => TaskMaybe<B>) => (data: TaskMaybe<A>) => TaskMaybe<B>;
1515
1545
  /**
1516
- * Applies a function wrapped in a TaskOption to a value wrapped in a TaskOption.
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: TaskOption<A>) => <B>(data: TaskOption<(a: A) => B>) => TaskOption<B>;
1549
+ const ap: <A>(arg: TaskMaybe<A>) => <B>(data: TaskMaybe<(a: A) => B>) => TaskMaybe<B>;
1520
1550
  /**
1521
- * Extracts a value from a TaskOption by providing handlers for both cases.
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: TaskOption<A>) => Task<B>;
1553
+ const fold: <A, B>(onNone: () => B, onSome: (a: A) => B) => (data: TaskMaybe<A>) => Task<B>;
1524
1554
  /**
1525
- * Pattern matches on a TaskOption, returning a Task of the result.
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
- * TaskOption.match({
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: TaskOption<A>) => Task<B>;
1571
+ }) => (data: TaskMaybe<A>) => Task<B>;
1542
1572
  /**
1543
- * Returns the value or a default if the TaskOption resolves to None.
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: TaskOption<A>) => Task<A | B>;
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 TaskOption.
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: TaskOption<A>) => TaskOption<A>;
1581
+ const tap: <A>(f: (a: A) => void) => (data: TaskMaybe<A>) => TaskMaybe<A>;
1552
1582
  /**
1553
- * Filters the value inside a TaskOption. Returns None if the predicate fails.
1583
+ * Filters the value inside a TaskMaybe. Returns None if the predicate fails.
1554
1584
  */
1555
- const filter: <A>(predicate: (a: A) => boolean) => (data: TaskOption<A>) => TaskOption<A>;
1585
+ const filter: <A>(predicate: (a: A) => boolean) => (data: TaskMaybe<A>) => TaskMaybe<A>;
1556
1586
  /**
1557
- * Converts a TaskOption to a TaskResult, using onNone to produce the error value.
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
- * TaskOption.toTaskResult(() => "User not found")
1593
+ * TaskMaybe.toTaskResult(() => "User not found")
1564
1594
  * );
1565
1595
  * ```
1566
1596
  */
1567
- const toTaskResult: <E>(onNone: () => E) => <A>(data: TaskOption<A>) => TaskResult<E, A>;
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, Option, Optional, Predicate, Reader, Refinement, RemoteData, Resource, Result, State, type Success, Task, TaskOption, TaskResult, TaskValidation, These, type TheseBoth, type TheseFirst, type TheseSecond, Tuple, type Valid, Validation };
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
- Option: () => Option,
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
- TaskOption: () => TaskOption,
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.toOption = (data) => (0, Result2.isOk)(data) ? Option.some(data.value) : Option.none();
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/Option.ts
136
+ // src/Core/Maybe.ts
137
137
  var _none = { kind: "None" };
138
- var Option;
139
- ((Option2) => {
140
- Option2.some = (value) => ({ kind: "Some", value });
141
- Option2.isSome = (data) => data.kind === "Some";
142
- Option2.none = () => _none;
143
- Option2.isNone = (data) => data.kind === "None";
144
- Option2.fromNullable = (value) => value === null || value === void 0 ? (0, Option2.none)() : (0, Option2.some)(value);
145
- Option2.toNullable = (data) => (0, Option2.isSome)(data) ? data.value : null;
146
- Option2.toUndefined = (data) => (0, Option2.isSome)(data) ? data.value : void 0;
147
- Option2.fromUndefined = (value) => value === void 0 ? (0, Option2.none)() : (0, Option2.some)(value);
148
- Option2.toResult = (onNone) => (data) => (0, Option2.isSome)(data) ? Result.ok(data.value) : Result.err(onNone());
149
- Option2.fromResult = (data) => Result.isOk(data) ? (0, Option2.some)(data.value) : (0, Option2.none)();
150
- Option2.map = (f) => (data) => (0, Option2.isSome)(data) ? (0, Option2.some)(f(data.value)) : data;
151
- Option2.chain = (f) => (data) => (0, Option2.isSome)(data) ? f(data.value) : data;
152
- Option2.fold = (onNone, onSome) => (data) => (0, Option2.isSome)(data) ? onSome(data.value) : onNone();
153
- Option2.match = (cases) => (data) => (0, Option2.isSome)(data) ? cases.some(data.value) : cases.none();
154
- Option2.getOrElse = (defaultValue) => (data) => (0, Option2.isSome)(data) ? data.value : defaultValue();
155
- Option2.tap = (f) => (data) => {
156
- if ((0, Option2.isSome)(data)) f(data.value);
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
- Option2.filter = (predicate) => (data) => (0, Option2.isSome)(data) ? predicate(data.value) ? data : (0, Option2.none)() : data;
160
- Option2.recover = (fallback) => (data) => (0, Option2.isSome)(data) ? data : fallback();
161
- Option2.ap = (arg) => (data) => (0, Option2.isSome)(data) && (0, Option2.isSome)(arg) ? (0, Option2.some)(data.value(arg.value)) : (0, Option2.none)();
162
- })(Option || (Option = {}));
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 ? Option.some(val) : Option.none();
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 ? Option.some(arr[i]) : Option.none(),
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" ? Option.none() : inner.get(mid.value);
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" ? Option.none() : Option.some(inner.get(mid.value));
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) ? Option.some(a) : Option.none();
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.toOption = (data) => (0, RemoteData2.isSuccess)(data) ? Option.some(data.value) : Option.none();
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/TaskOption.ts
470
- var TaskOption;
471
- ((TaskOption2) => {
472
- TaskOption2.some = (value) => Task.resolve(Option.some(value));
473
- TaskOption2.none = () => Task.resolve(Option.none());
474
- TaskOption2.fromOption = (option) => Task.resolve(option);
475
- TaskOption2.fromTask = (task) => Task.map(Option.some)(task);
476
- TaskOption2.tryCatch = (f) => Task.from(
477
- () => f().then(Option.some).catch(() => Option.none())
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
- TaskOption2.map = (f) => (data) => Task.map(Option.map(f))(data);
480
- TaskOption2.chain = (f) => (data) => Task.chain((option) => Option.isSome(option) ? f(option.value) : Task.resolve(Option.none()))(data);
481
- TaskOption2.ap = (arg) => (data) => Task.from(
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]) => Option.ap(oa)(of_))
485
+ ]).then(([of_, oa]) => Maybe.ap(oa)(of_))
486
486
  );
487
- TaskOption2.fold = (onNone, onSome) => (data) => Task.map(Option.fold(onNone, onSome))(data);
488
- TaskOption2.match = (cases) => (data) => Task.map(Option.match(cases))(data);
489
- TaskOption2.getOrElse = (defaultValue) => (data) => Task.map(Option.getOrElse(defaultValue))(data);
490
- TaskOption2.tap = (f) => (data) => Task.map(Option.tap(f))(data);
491
- TaskOption2.filter = (predicate) => (data) => Task.map(Option.filter(predicate))(data);
492
- TaskOption2.toTaskResult = (onNone) => (data) => Task.map(Option.toResult(onNone))(data);
493
- })(TaskOption || (TaskOption = {}));
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
- Option,
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
- TaskOption,
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
- TaskOption,
11
+ TaskMaybe,
12
12
  TaskResult,
13
13
  TaskValidation,
14
14
  These,
15
15
  Tuple,
16
16
  Validation
17
- } from "./chunk-2XKWSZEU.mjs";
17
+ } from "./chunk-UWGFO7BH.mjs";
18
18
  import {
19
19
  Deferred,
20
- Option,
20
+ Maybe,
21
21
  Result,
22
22
  Task
23
- } from "./chunk-QPTGO5AS.mjs";
23
+ } from "./chunk-EAR4TIGH.mjs";
24
24
  export {
25
25
  Deferred,
26
26
  Lens,
27
27
  Logged,
28
- Option,
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
- TaskOption,
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, N as None, O as Ok, a as Option, R as Result, S as Some, T as Task } from './Task-Bd3gXPRQ.mjs';
3
- export { Failure, Invalid, Lens, Loading, Logged, NotAsked, Optional, Predicate, Reader, Refinement, RemoteData, Resource, State, Success, TaskOption, TaskResult, TaskValidation, These, TheseBoth, TheseFirst, TheseSecond, Tuple, Valid, Validation } from './core.mjs';
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, N as None, O as Ok, a as Option, R as Result, S as Some, T as Task } from './Task-BjAkkD6t.js';
3
- export { Failure, Invalid, Lens, Loading, Logged, NotAsked, Optional, Predicate, Reader, Refinement, RemoteData, Resource, State, Success, TaskOption, TaskResult, TaskValidation, These, TheseBoth, TheseFirst, TheseSecond, Tuple, Valid, Validation } from './core.js';
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';