@zambit/elevate-ts 0.1.2
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/CLA-CORPORATE.md +72 -0
- package/CLA-INDIVIDUAL.md +71 -0
- package/DUAL-PUBLISHING-STRATEGY.md +571 -0
- package/LICENSE +610 -0
- package/README.md +77 -0
- package/dist/cjs/Either.d.ts +67 -0
- package/dist/cjs/Either.d.ts.map +1 -0
- package/dist/cjs/Either.js +147 -0
- package/dist/cjs/Either.js.map +1 -0
- package/dist/cjs/EitherAsync.d.ts +139 -0
- package/dist/cjs/EitherAsync.d.ts.map +1 -0
- package/dist/cjs/EitherAsync.js +171 -0
- package/dist/cjs/EitherAsync.js.map +1 -0
- package/dist/cjs/Function.d.ts +153 -0
- package/dist/cjs/Function.d.ts.map +1 -0
- package/dist/cjs/Function.js +110 -0
- package/dist/cjs/Function.js.map +1 -0
- package/dist/cjs/List.d.ts +134 -0
- package/dist/cjs/List.d.ts.map +1 -0
- package/dist/cjs/List.js +243 -0
- package/dist/cjs/List.js.map +1 -0
- package/dist/cjs/Maybe.d.ts +64 -0
- package/dist/cjs/Maybe.d.ts.map +1 -0
- package/dist/cjs/Maybe.js +122 -0
- package/dist/cjs/Maybe.js.map +1 -0
- package/dist/cjs/MaybeAsync.d.ts +115 -0
- package/dist/cjs/MaybeAsync.d.ts.map +1 -0
- package/dist/cjs/MaybeAsync.js +151 -0
- package/dist/cjs/MaybeAsync.js.map +1 -0
- package/dist/cjs/NonEmptyList.d.ts +86 -0
- package/dist/cjs/NonEmptyList.d.ts.map +1 -0
- package/dist/cjs/NonEmptyList.js +128 -0
- package/dist/cjs/NonEmptyList.js.map +1 -0
- package/dist/cjs/Reader.d.ts +53 -0
- package/dist/cjs/Reader.d.ts.map +1 -0
- package/dist/cjs/Reader.js +60 -0
- package/dist/cjs/Reader.js.map +1 -0
- package/dist/cjs/State.d.ts +71 -0
- package/dist/cjs/State.d.ts.map +1 -0
- package/dist/cjs/State.js +94 -0
- package/dist/cjs/State.js.map +1 -0
- package/dist/cjs/Tuple.d.ts +69 -0
- package/dist/cjs/Tuple.d.ts.map +1 -0
- package/dist/cjs/Tuple.js +73 -0
- package/dist/cjs/Tuple.js.map +1 -0
- package/dist/cjs/Validation.d.ts +53 -0
- package/dist/cjs/Validation.d.ts.map +1 -0
- package/dist/cjs/Validation.js +77 -0
- package/dist/cjs/Validation.js.map +1 -0
- package/dist/cjs/index.d.ts +12 -0
- package/dist/cjs/index.d.ts.map +1 -0
- package/dist/cjs/index.js +25 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/tokens/config.d.ts +43 -0
- package/dist/cjs/tokens/config.d.ts.map +1 -0
- package/dist/cjs/tokens/config.js +162 -0
- package/dist/cjs/tokens/config.js.map +1 -0
- package/dist/cjs/tokens/cssGen.d.ts +18 -0
- package/dist/cjs/tokens/cssGen.d.ts.map +1 -0
- package/dist/cjs/tokens/cssGen.js +144 -0
- package/dist/cjs/tokens/cssGen.js.map +1 -0
- package/dist/cjs/tokens/generateCSS.d.ts +18 -0
- package/dist/cjs/tokens/generateCSS.d.ts.map +1 -0
- package/dist/cjs/tokens/generateCSS.js +83 -0
- package/dist/cjs/tokens/generateCSS.js.map +1 -0
- package/dist/cjs/tokens/index.d.ts +13 -0
- package/dist/cjs/tokens/index.d.ts.map +1 -0
- package/dist/cjs/tokens/index.js +12 -0
- package/dist/cjs/tokens/index.js.map +1 -0
- package/dist/cjs/tsconfig.tsbuildinfo +1 -0
- package/dist/esm/Either.d.ts +67 -0
- package/dist/esm/Either.d.ts.map +1 -0
- package/dist/esm/Either.js +136 -0
- package/dist/esm/Either.js.map +1 -0
- package/dist/esm/EitherAsync.d.ts +139 -0
- package/dist/esm/EitherAsync.d.ts.map +1 -0
- package/dist/esm/EitherAsync.js +173 -0
- package/dist/esm/EitherAsync.js.map +1 -0
- package/dist/esm/Function.d.ts +153 -0
- package/dist/esm/Function.d.ts.map +1 -0
- package/dist/esm/Function.js +109 -0
- package/dist/esm/Function.js.map +1 -0
- package/dist/esm/List.d.ts +134 -0
- package/dist/esm/List.d.ts.map +1 -0
- package/dist/esm/List.js +243 -0
- package/dist/esm/List.js.map +1 -0
- package/dist/esm/Maybe.d.ts +64 -0
- package/dist/esm/Maybe.d.ts.map +1 -0
- package/dist/esm/Maybe.js +113 -0
- package/dist/esm/Maybe.js.map +1 -0
- package/dist/esm/MaybeAsync.d.ts +115 -0
- package/dist/esm/MaybeAsync.d.ts.map +1 -0
- package/dist/esm/MaybeAsync.js +150 -0
- package/dist/esm/MaybeAsync.js.map +1 -0
- package/dist/esm/NonEmptyList.d.ts +86 -0
- package/dist/esm/NonEmptyList.d.ts.map +1 -0
- package/dist/esm/NonEmptyList.js +128 -0
- package/dist/esm/NonEmptyList.js.map +1 -0
- package/dist/esm/Reader.d.ts +53 -0
- package/dist/esm/Reader.d.ts.map +1 -0
- package/dist/esm/Reader.js +60 -0
- package/dist/esm/Reader.js.map +1 -0
- package/dist/esm/State.d.ts +71 -0
- package/dist/esm/State.d.ts.map +1 -0
- package/dist/esm/State.js +94 -0
- package/dist/esm/State.js.map +1 -0
- package/dist/esm/Tuple.d.ts +69 -0
- package/dist/esm/Tuple.d.ts.map +1 -0
- package/dist/esm/Tuple.js +73 -0
- package/dist/esm/Tuple.js.map +1 -0
- package/dist/esm/Validation.d.ts +53 -0
- package/dist/esm/Validation.d.ts.map +1 -0
- package/dist/esm/Validation.js +79 -0
- package/dist/esm/Validation.js.map +1 -0
- package/dist/esm/index.d.ts +12 -0
- package/dist/esm/index.d.ts.map +1 -0
- package/dist/esm/index.js +22 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/src/Either.d.ts +67 -0
- package/dist/esm/src/Either.d.ts.map +1 -0
- package/dist/esm/src/Either.js +147 -0
- package/dist/esm/src/Either.js.map +1 -0
- package/dist/esm/src/EitherAsync.d.ts +139 -0
- package/dist/esm/src/EitherAsync.d.ts.map +1 -0
- package/dist/esm/src/EitherAsync.js +171 -0
- package/dist/esm/src/EitherAsync.js.map +1 -0
- package/dist/esm/src/Function.d.ts +153 -0
- package/dist/esm/src/Function.d.ts.map +1 -0
- package/dist/esm/src/Function.js +110 -0
- package/dist/esm/src/Function.js.map +1 -0
- package/dist/esm/src/List.d.ts +134 -0
- package/dist/esm/src/List.d.ts.map +1 -0
- package/dist/esm/src/List.js +243 -0
- package/dist/esm/src/List.js.map +1 -0
- package/dist/esm/src/Maybe.d.ts +64 -0
- package/dist/esm/src/Maybe.d.ts.map +1 -0
- package/dist/esm/src/Maybe.js +122 -0
- package/dist/esm/src/Maybe.js.map +1 -0
- package/dist/esm/src/MaybeAsync.d.ts +115 -0
- package/dist/esm/src/MaybeAsync.d.ts.map +1 -0
- package/dist/esm/src/MaybeAsync.js +151 -0
- package/dist/esm/src/MaybeAsync.js.map +1 -0
- package/dist/esm/src/NonEmptyList.d.ts +86 -0
- package/dist/esm/src/NonEmptyList.d.ts.map +1 -0
- package/dist/esm/src/NonEmptyList.js +128 -0
- package/dist/esm/src/NonEmptyList.js.map +1 -0
- package/dist/esm/src/Reader.d.ts +53 -0
- package/dist/esm/src/Reader.d.ts.map +1 -0
- package/dist/esm/src/Reader.js +60 -0
- package/dist/esm/src/Reader.js.map +1 -0
- package/dist/esm/src/State.d.ts +71 -0
- package/dist/esm/src/State.d.ts.map +1 -0
- package/dist/esm/src/State.js +94 -0
- package/dist/esm/src/State.js.map +1 -0
- package/dist/esm/src/Tuple.d.ts +69 -0
- package/dist/esm/src/Tuple.d.ts.map +1 -0
- package/dist/esm/src/Tuple.js +73 -0
- package/dist/esm/src/Tuple.js.map +1 -0
- package/dist/esm/src/Validation.d.ts +53 -0
- package/dist/esm/src/Validation.d.ts.map +1 -0
- package/dist/esm/src/Validation.js +77 -0
- package/dist/esm/src/Validation.js.map +1 -0
- package/dist/esm/src/index.d.ts +12 -0
- package/dist/esm/src/index.d.ts.map +1 -0
- package/dist/esm/src/index.js +25 -0
- package/dist/esm/src/index.js.map +1 -0
- package/dist/esm/tsconfig.esm.tsbuildinfo +1 -0
- package/elevate-ts-vs-effect-critique.md +806 -0
- package/eslint.config.js +104 -0
- package/package.json +139 -0
package/README.md
ADDED
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
# elevate-ts
|
|
2
|
+
|
|
3
|
+
[](./coverage/index.html) [](https://npmjs.com/package/@zambit/elevate-ts)
|
|
4
|
+
[](https://github.com/zambit/elevate-ts/blob/main/LICENSE)
|
|
5
|
+
|
|
6
|
+
Point-free, data-last functional programming for TypeScript. Fantasy Land 5 compliant. Zero dependencies. Cloudflare Workers ready.
|
|
7
|
+
|
|
8
|
+
## Install
|
|
9
|
+
|
|
10
|
+
```bash
|
|
11
|
+
pnpm add @zambit/elevate-ts
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
## Quick Start
|
|
15
|
+
|
|
16
|
+
```typescript
|
|
17
|
+
import { pipe } from '@zambit/elevate-ts/Function';
|
|
18
|
+
import { Just, Nothing, map, chain } from '@zambit/elevate-ts/Maybe';
|
|
19
|
+
|
|
20
|
+
/** Create a Just value */
|
|
21
|
+
const ma = Just(5);
|
|
22
|
+
|
|
23
|
+
/** Use pipe to compose operations */
|
|
24
|
+
const result = pipe(
|
|
25
|
+
ma,
|
|
26
|
+
map((a) => a * 2),
|
|
27
|
+
chain((b) => (b > 5 ? Just(b) : Nothing))
|
|
28
|
+
);
|
|
29
|
+
|
|
30
|
+
// result is Just(10)
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
## Modules
|
|
34
|
+
|
|
35
|
+
| Module | Description |
|
|
36
|
+
| ------------ | ------------------------------------------------------------------------- |
|
|
37
|
+
| Maybe | Optional values; Functor, Applicative, Monad, Alt, Filter |
|
|
38
|
+
| Either | Values with a Left error branch; Bifunctor, Monad, Alt |
|
|
39
|
+
| Validation | Functor for collecting all errors during applicative (not short-circuit) |
|
|
40
|
+
| Reader | Dependency injection / environment access; Monad |
|
|
41
|
+
| State | Pure stateful computation; track state through a sequence of operations |
|
|
42
|
+
| Tuple | Immutable 2-tuple; Bifunctor, Monoid |
|
|
43
|
+
| NonEmptyList | Guaranteed-nonempty array; Functor, Applicative, Monad, Monoid |
|
|
44
|
+
| List | Utilities over plain readonly arrays; map, filter, partition, zip, etc. |
|
|
45
|
+
| Function | Function composition and utilities; pipe, flow, curry, memoize, once, tap |
|
|
46
|
+
| MaybeAsync | Lazy async Maybe; rejects or throws become Nothing; never rejects |
|
|
47
|
+
| EitherAsync | Lazy async Either; rejects become Left; never throws |
|
|
48
|
+
|
|
49
|
+
## Philosophy
|
|
50
|
+
|
|
51
|
+
- **Point-free**: Functions are composed by shape, not by naming intermediate values
|
|
52
|
+
- **Data-last**: Configuration arguments precede the data being transformed
|
|
53
|
+
- **Pure**: No classes, no mutations, ≤15 lines per function
|
|
54
|
+
- **Cloudflare Workers**: No Node.js built-ins, no DOM APIs
|
|
55
|
+
- **Fantasy Land 5**: All applicable types implement the spec
|
|
56
|
+
- **Zero runtime dependencies**: Ship only pure TypeScript
|
|
57
|
+
|
|
58
|
+
## Learning & Examples
|
|
59
|
+
|
|
60
|
+
- **[elevate-ts-learning](https://github.com/zambit/elevate-ts-learning)** - Comprehensive tutorial with interactive todo app and 4 learning guides
|
|
61
|
+
- **[elevate-ts-samples](https://github.com/zambit/elevate-ts-samples)** - Production-ready examples (form validation, state management, list operations, workers)
|
|
62
|
+
|
|
63
|
+
## Roadmap
|
|
64
|
+
|
|
65
|
+
- Audit subsystem with time-travel replay (will use `@paralleldrive/cuid2` for operation-level ID stamping)
|
|
66
|
+
|
|
67
|
+
## Contributing
|
|
68
|
+
|
|
69
|
+
See [CONTRIBUTING.md](./CONTRIBUTING.md) for details on how to contribute. Non-trivial contributions must be covered by the applicable contributor license agreement:
|
|
70
|
+
[CLA-INDIVIDUAL.md](./CLA-INDIVIDUAL.md) or [CLA-CORPORATE.md](./CLA-CORPORATE.md).
|
|
71
|
+
|
|
72
|
+
## License
|
|
73
|
+
|
|
74
|
+
Dual-licensed:
|
|
75
|
+
|
|
76
|
+
- Public license: GNU Affero General Public License v3.0 or later (`AGPL-3.0-or-later`). See [LICENSE](./LICENSE).
|
|
77
|
+
- Commercial license: available from Zambit for customers who want to use `elevate-ts` in closed-source products or services. See [COMMERCIAL-LICENSE.md](./COMMERCIAL-LICENSE.md).
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
/** Represents a Left (error) value. */
|
|
2
|
+
export type Left<L> = {
|
|
3
|
+
readonly tag: 'Left';
|
|
4
|
+
readonly left: L;
|
|
5
|
+
};
|
|
6
|
+
/** Represents a Right (success) value. */
|
|
7
|
+
export type Right<R> = {
|
|
8
|
+
readonly tag: 'Right';
|
|
9
|
+
readonly right: R;
|
|
10
|
+
};
|
|
11
|
+
/** Result type: Left<L> (error) or Right<R> (success). */
|
|
12
|
+
export type Either<L, R> = Left<L> | Right<R>;
|
|
13
|
+
/** Create a Left value. */
|
|
14
|
+
export declare const Left: <L>(left: L) => Left<L>;
|
|
15
|
+
/** Create a Right value. */
|
|
16
|
+
export declare const Right: <R>(right: R) => Right<R>;
|
|
17
|
+
/** Test if Either is Left. */
|
|
18
|
+
export declare const isLeft: <L, R>(ea: Either<L, R>) => ea is Left<L>;
|
|
19
|
+
/** Test if Either is Right. */
|
|
20
|
+
export declare const isRight: <L, R>(ea: Either<L, R>) => ea is Right<R>;
|
|
21
|
+
/** Lift a nullable value into Either. */
|
|
22
|
+
export declare const fromNullable: <L, R>(onNull: L) => ((value: R | null | undefined) => Either<L, R>);
|
|
23
|
+
/** Construct Right if predicate holds, Left otherwise. */
|
|
24
|
+
export declare const fromPredicate: <L, A>(predicate: (a: A) => boolean, onFalse: (a: A) => L) => ((a: A) => Either<L, A>);
|
|
25
|
+
/** Convert Either to Maybe, discarding Left. */
|
|
26
|
+
export declare const toMaybe: <L, R>(ea: Either<L, R>) => {
|
|
27
|
+
tag: "Just";
|
|
28
|
+
value: R;
|
|
29
|
+
} | {
|
|
30
|
+
tag: "Nothing";
|
|
31
|
+
value?: undefined;
|
|
32
|
+
};
|
|
33
|
+
/** Extract Right or null. */
|
|
34
|
+
export declare const toNullable: <L, R>(ea: Either<L, R>) => R | null;
|
|
35
|
+
/** Functor map over Right. */
|
|
36
|
+
export declare const map: <L, A, B>(f: (a: A) => B) => ((ea: Either<L, A>) => Either<L, B>);
|
|
37
|
+
/** Map over Left. */
|
|
38
|
+
export declare const mapLeft: <L, L2, R>(f: (l: L) => L2) => ((ea: Either<L, R>) => Either<L2, R>);
|
|
39
|
+
/** Bifunctor bimap. */
|
|
40
|
+
export declare const bimap: <L, L2, A, B>(f: (l: L) => L2, g: (a: A) => B) => ((ea: Either<L, A>) => Either<L2, B>);
|
|
41
|
+
/** Applicative ap. */
|
|
42
|
+
export declare const ap: <L, A, B>(ef: Either<L, (a: A) => B>) => ((ea: Either<L, A>) => Either<L, B>);
|
|
43
|
+
/** Monadic bind (flatMap). */
|
|
44
|
+
export declare const chain: <L, A, B>(f: (a: A) => Either<L, B>) => ((ea: Either<L, A>) => Either<L, B>);
|
|
45
|
+
/** Chain over Left. */
|
|
46
|
+
export declare const chainLeft: <L, L2, R>(f: (l: L) => Either<L2, R>) => ((ea: Either<L, R>) => Either<L2, R>);
|
|
47
|
+
/** Extract Right or default. */
|
|
48
|
+
export declare const getOrElse: <L, R>(r: R) => ((ea: Either<L, R>) => R);
|
|
49
|
+
/** Extract Right or compute from Left. */
|
|
50
|
+
export declare const getOrElseL: <L, R>(f: (l: L) => R) => ((ea: Either<L, R>) => R);
|
|
51
|
+
/** Case analysis. */
|
|
52
|
+
export declare const fold: <L, R, B>(onLeft: (l: L) => B, onRight: (r: R) => B) => ((ea: Either<L, R>) => B);
|
|
53
|
+
/** Swap Left and Right. */
|
|
54
|
+
export declare const swap: <L, R>(ea: Either<L, R>) => Either<R, L>;
|
|
55
|
+
/** Wrap throwing function in Either. */
|
|
56
|
+
export declare const tryCatch: <L, R>(f: () => R, onError: (e: unknown) => L) => Either<L, R>;
|
|
57
|
+
/** Partition array of Eithers into Left and Right arrays. */
|
|
58
|
+
export declare const partitionEithers: <L, R>(eithers: readonly Either<L, R>[]) => readonly [readonly L[], readonly R[]];
|
|
59
|
+
/** Extract all Lefts. */
|
|
60
|
+
export declare const lefts: <L, R>(eithers: readonly Either<L, R>[]) => readonly L[];
|
|
61
|
+
/** Extract all Rights. */
|
|
62
|
+
export declare const rights: <L, R>(eithers: readonly Either<L, R>[]) => readonly R[];
|
|
63
|
+
/** Sequence all-or-Left. */
|
|
64
|
+
export declare const sequence: <L, A>(eithers: readonly Either<L, A>[]) => Either<L, readonly A[]>;
|
|
65
|
+
/** Traverse a sequence. */
|
|
66
|
+
export declare const traverse: <L, A, B>(f: (a: A) => Either<L, B>) => ((as: readonly A[]) => Either<L, readonly B[]>);
|
|
67
|
+
//# sourceMappingURL=Either.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Either.d.ts","sourceRoot":"","sources":["../../src/Either.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
// Either — Left/Right error handling
|
|
2
|
+
/** Create a Left value. */
|
|
3
|
+
export const Left = (left) => ({ tag: 'Left', left });
|
|
4
|
+
/** Create a Right value. */
|
|
5
|
+
export const Right = (right) => ({ tag: 'Right', right });
|
|
6
|
+
/** Test if Either is Left. */
|
|
7
|
+
export const isLeft = (ea) => ea.tag === 'Left';
|
|
8
|
+
/** Test if Either is Right. */
|
|
9
|
+
export const isRight = (ea) => ea.tag === 'Right';
|
|
10
|
+
/** Lift a nullable value into Either. */
|
|
11
|
+
export const fromNullable = (onNull) => (value) => value == null ? Left(onNull) : Right(value);
|
|
12
|
+
/** Construct Right if predicate holds, Left otherwise. */
|
|
13
|
+
export const fromPredicate = (predicate, onFalse) => (a) => predicate(a) ? Right(a) : Left(onFalse(a));
|
|
14
|
+
/** Convert Either to Maybe, discarding Left. */
|
|
15
|
+
export const toMaybe = (ea) => {
|
|
16
|
+
if (ea.tag === 'Right') {
|
|
17
|
+
return { tag: 'Just', value: ea.right };
|
|
18
|
+
}
|
|
19
|
+
return { tag: 'Nothing' };
|
|
20
|
+
};
|
|
21
|
+
/** Extract Right or null. */
|
|
22
|
+
export const toNullable = (ea) => (ea.tag === 'Right' ? ea.right : null);
|
|
23
|
+
/** Functor map over Right. */
|
|
24
|
+
export const map = (f) => (ea) => ea.tag === 'Right' ? Right(f(ea.right)) : ea;
|
|
25
|
+
/** Map over Left. */
|
|
26
|
+
export const mapLeft = (f) => (ea) => ea.tag === 'Left' ? Left(f(ea.left)) : ea;
|
|
27
|
+
/** Bifunctor bimap. */
|
|
28
|
+
export const bimap = (f, g) => (ea) => ea.tag === 'Left' ? Left(f(ea.left)) : Right(g(ea.right));
|
|
29
|
+
/** Applicative ap. */
|
|
30
|
+
export const ap = (ef) => (ea) => ef.tag === 'Left' ? ef : ea.tag === 'Left' ? ea : Right(ef.right(ea.right));
|
|
31
|
+
/** Monadic bind (flatMap). */
|
|
32
|
+
export const chain = (f) => (ea) => ea.tag === 'Left' ? ea : f(ea.right);
|
|
33
|
+
/** Chain over Left. */
|
|
34
|
+
export const chainLeft = (f) => (ea) => ea.tag === 'Left' ? f(ea.left) : ea;
|
|
35
|
+
/** Extract Right or default. */
|
|
36
|
+
export const getOrElse = (r) => (ea) => ea.tag === 'Right' ? ea.right : r;
|
|
37
|
+
/** Extract Right or compute from Left. */
|
|
38
|
+
export const getOrElseL = (f) => (ea) => ea.tag === 'Right' ? ea.right : f(ea.left);
|
|
39
|
+
/** Case analysis. */
|
|
40
|
+
export const fold = (onLeft, onRight) => (ea) => ea.tag === 'Left' ? onLeft(ea.left) : onRight(ea.right);
|
|
41
|
+
/** Swap Left and Right. */
|
|
42
|
+
export const swap = (ea) => (ea.tag === 'Left' ? Right(ea.left) : Left(ea.right));
|
|
43
|
+
/** Wrap throwing function in Either. */
|
|
44
|
+
export const tryCatch = (f, onError) => {
|
|
45
|
+
try {
|
|
46
|
+
return Right(f());
|
|
47
|
+
}
|
|
48
|
+
catch (e) {
|
|
49
|
+
return Left(onError(e));
|
|
50
|
+
}
|
|
51
|
+
};
|
|
52
|
+
/** Partition array of Eithers into Left and Right arrays. */
|
|
53
|
+
export const partitionEithers = (eithers) => {
|
|
54
|
+
const lefts = [];
|
|
55
|
+
const rights = [];
|
|
56
|
+
for (const ea of eithers) {
|
|
57
|
+
if (ea.tag === 'Left') {
|
|
58
|
+
lefts.push(ea.left);
|
|
59
|
+
}
|
|
60
|
+
else {
|
|
61
|
+
rights.push(ea.right);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
return [lefts, rights];
|
|
65
|
+
};
|
|
66
|
+
/** Extract all Lefts. */
|
|
67
|
+
export const lefts = (eithers) => eithers.flatMap((ea) => (ea.tag === 'Left' ? [ea.left] : []));
|
|
68
|
+
/** Extract all Rights. */
|
|
69
|
+
export const rights = (eithers) => eithers.flatMap((ea) => (ea.tag === 'Right' ? [ea.right] : []));
|
|
70
|
+
/** Sequence all-or-Left. */
|
|
71
|
+
export const sequence = (eithers) => {
|
|
72
|
+
const result = [];
|
|
73
|
+
for (const ea of eithers) {
|
|
74
|
+
if (ea.tag === 'Left')
|
|
75
|
+
return ea;
|
|
76
|
+
result.push(ea.right);
|
|
77
|
+
}
|
|
78
|
+
return Right(result);
|
|
79
|
+
};
|
|
80
|
+
/** Traverse a sequence. */
|
|
81
|
+
export const traverse = (f) => (as) => sequence(as.map(f));
|
|
82
|
+
// Fantasy Land symbols
|
|
83
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
84
|
+
const flMap = (f) => map(f);
|
|
85
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
86
|
+
const flAp = (ef) => ap(ef);
|
|
87
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
88
|
+
const flChain = (f) => chain(f);
|
|
89
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
90
|
+
const flBimap = (f, g) => bimap(f, g);
|
|
91
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
92
|
+
const flReduce = (f, b) => (ea) => ea.tag === 'Right' ? f(b, ea.right) : b;
|
|
93
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
94
|
+
const flEquals = (other) => (ea) => ea.tag === 'Left' ? other.tag === 'Left' && ea.left === other.left : other.tag === 'Right' && ea.right === other.right;
|
|
95
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
96
|
+
const flAlt = (ealt) => (ea) => ea.tag === 'Right' ? ea : ealt;
|
|
97
|
+
Object.defineProperty(Right, 'fantasy-land/of', { value: Right });
|
|
98
|
+
const rightProto = Object.getPrototypeOf(Right(0));
|
|
99
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
100
|
+
rightProto['fantasy-land/map'] = function (f) {
|
|
101
|
+
return Right(f(this.right));
|
|
102
|
+
};
|
|
103
|
+
rightProto['fantasy-land/ap'] = function (ea) {
|
|
104
|
+
return ap(this)(ea);
|
|
105
|
+
};
|
|
106
|
+
rightProto['fantasy-land/chain'] = function (f) {
|
|
107
|
+
return f(this.right);
|
|
108
|
+
};
|
|
109
|
+
rightProto['fantasy-land/bimap'] = function (f, g) {
|
|
110
|
+
return Right(g(this.right));
|
|
111
|
+
};
|
|
112
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
113
|
+
rightProto['fantasy-land/reduce'] = function (f, b) {
|
|
114
|
+
return f(b, this.right);
|
|
115
|
+
};
|
|
116
|
+
rightProto['fantasy-land/equals'] = function (other) {
|
|
117
|
+
return other.tag === 'Right' && this.right === other.right;
|
|
118
|
+
};
|
|
119
|
+
rightProto['fantasy-land/alt'] = function (_ealt) {
|
|
120
|
+
return this;
|
|
121
|
+
};
|
|
122
|
+
const leftProto = Object.getPrototypeOf(Left(0));
|
|
123
|
+
leftProto['fantasy-land/map'] = function (_f) {
|
|
124
|
+
return this;
|
|
125
|
+
};
|
|
126
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
127
|
+
leftProto['fantasy-land/ap'] = function (_ea) {
|
|
128
|
+
return this;
|
|
129
|
+
};
|
|
130
|
+
leftProto['fantasy-land/chain'] = function (_f) {
|
|
131
|
+
return this;
|
|
132
|
+
};
|
|
133
|
+
leftProto['fantasy-land/bimap'] = function (f, _g) {
|
|
134
|
+
return Left(f(this.left));
|
|
135
|
+
};
|
|
136
|
+
leftProto['fantasy-land/reduce'] = function (f, b) {
|
|
137
|
+
return b;
|
|
138
|
+
};
|
|
139
|
+
// istanbul ignore next
|
|
140
|
+
leftProto['fantasy-land/equals'] = function (other) {
|
|
141
|
+
return other.tag === 'Left' && this.left === other.left;
|
|
142
|
+
};
|
|
143
|
+
// istanbul ignore next
|
|
144
|
+
leftProto['fantasy-land/alt'] = function (ealt) {
|
|
145
|
+
return ealt;
|
|
146
|
+
};
|
|
147
|
+
//# sourceMappingURL=Either.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Either.js","sourceRoot":"","sources":["../../src/Either.ts"],"names":[],"mappings":"AAAA,qCAAqC;AAWrC,2BAA2B;AAC3B,MAAM,CAAC,MAAM,IAAI,GAAG,CAAI,IAAO,EAAW,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;AAErE,4BAA4B;AAC5B,MAAM,CAAC,MAAM,KAAK,GAAG,CAAI,KAAQ,EAAY,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;AAE1E,8BAA8B;AAC9B,MAAM,CAAC,MAAM,MAAM,GAAG,CAAO,EAAgB,EAAiB,EAAE,CAAC,EAAE,CAAC,GAAG,KAAK,MAAM,CAAC;AAEnF,+BAA+B;AAC/B,MAAM,CAAC,MAAM,OAAO,GAAG,CAAO,EAAgB,EAAkB,EAAE,CAAC,EAAE,CAAC,GAAG,KAAK,OAAO,CAAC;AAEtF,yCAAyC;AACzC,MAAM,CAAC,MAAM,YAAY,GACvB,CAAO,MAAS,EAAmD,EAAE,CACrE,CAAC,KAAK,EAAE,EAAE,CACR,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AAEhD,0DAA0D;AAC1D,MAAM,CAAC,MAAM,aAAa,GACxB,CAAO,SAA4B,EAAE,OAAoB,EAA4B,EAAE,CACvF,CAAC,CAAC,EAAE,EAAE,CACJ,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;AAE/C,gDAAgD;AAChD,MAAM,CAAC,MAAM,OAAO,GAAG,CAAO,EAAgB,EAAE,EAAE;IAChD,IAAI,EAAE,CAAC,GAAG,KAAK,OAAO,EAAE,CAAC;QACvB,OAAO,EAAE,GAAG,EAAE,MAAe,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,EAAE,CAAC;IACnD,CAAC;IACD,OAAO,EAAE,GAAG,EAAE,SAAkB,EAAE,CAAC;AACrC,CAAC,CAAC;AAEF,6BAA6B;AAC7B,MAAM,CAAC,MAAM,UAAU,GAAG,CAAO,EAAgB,EAAY,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG,KAAK,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;AAEvG,8BAA8B;AAC9B,MAAM,CAAC,MAAM,GAAG,GACd,CAAU,CAAc,EAAwC,EAAE,CAClE,CAAC,EAAE,EAAE,EAAE,CACL,EAAE,CAAC,GAAG,KAAK,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AAEjD,qBAAqB;AACrB,MAAM,CAAC,MAAM,OAAO,GAClB,CAAW,CAAe,EAAyC,EAAE,CACrE,CAAC,EAAE,EAAE,EAAE,CACL,EAAE,CAAC,GAAG,KAAK,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AAE9C,uBAAuB;AACvB,MAAM,CAAC,MAAM,KAAK,GAChB,CAAc,CAAe,EAAE,CAAc,EAAyC,EAAE,CACxF,CAAC,EAAE,EAAE,EAAE,CACL,EAAE,CAAC,GAAG,KAAK,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;AAE9D,sBAAsB;AACtB,MAAM,CAAC,MAAM,EAAE,GACb,CAAU,EAA0B,EAAwC,EAAE,CAC9E,CAAC,EAAE,EAAE,EAAE,CACL,EAAE,CAAC,GAAG,KAAK,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,KAAK,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;AAEhF,8BAA8B;AAC9B,MAAM,CAAC,MAAM,KAAK,GAChB,CAAU,CAAyB,EAAwC,EAAE,CAC7E,CAAC,EAAE,EAAE,EAAE,CACL,EAAE,CAAC,GAAG,KAAK,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;AAEzC,uBAAuB;AACvB,MAAM,CAAC,MAAM,SAAS,GACpB,CAAW,CAA0B,EAAyC,EAAE,CAChF,CAAC,EAAE,EAAE,EAAE,CACL,EAAE,CAAC,GAAG,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AAExC,gCAAgC;AAChC,MAAM,CAAC,MAAM,SAAS,GACpB,CAAO,CAAI,EAA6B,EAAE,CAC1C,CAAC,EAAE,EAAE,EAAE,CACL,EAAE,CAAC,GAAG,KAAK,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AAEtC,0CAA0C;AAC1C,MAAM,CAAC,MAAM,UAAU,GACrB,CAAO,CAAc,EAA6B,EAAE,CACpD,CAAC,EAAE,EAAE,EAAE,CACL,EAAE,CAAC,GAAG,KAAK,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;AAE/C,qBAAqB;AACrB,MAAM,CAAC,MAAM,IAAI,GACf,CAAU,MAAmB,EAAE,OAAoB,EAA6B,EAAE,CAClF,CAAC,EAAE,EAAE,EAAE,CACL,EAAE,CAAC,GAAG,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;AAE5D,2BAA2B;AAC3B,MAAM,CAAC,MAAM,IAAI,GAAG,CAAO,EAAgB,EAAgB,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG,KAAK,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;AAEpH,wCAAwC;AACxC,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAO,CAAU,EAAE,OAA0B,EAAgB,EAAE;IACrF,IAAI,CAAC;QACH,OAAO,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;IACpB,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1B,CAAC;AACH,CAAC,CAAC;AAEF,6DAA6D;AAC7D,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAO,OAAgC,EAAyC,EAAE;IAChH,MAAM,KAAK,GAAQ,EAAE,CAAC;IACtB,MAAM,MAAM,GAAQ,EAAE,CAAC;IACvB,KAAK,MAAM,EAAE,IAAI,OAAO,EAAE,CAAC;QACzB,IAAI,EAAE,CAAC,GAAG,KAAK,MAAM,EAAE,CAAC;YACtB,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;QACtB,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;QACxB,CAAC;IACH,CAAC;IACD,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;AACzB,CAAC,CAAC;AAEF,yBAAyB;AACzB,MAAM,CAAC,MAAM,KAAK,GAAG,CAAO,OAAgC,EAAgB,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAE7I,0BAA0B;AAC1B,MAAM,CAAC,MAAM,MAAM,GAAG,CAAO,OAAgC,EAAgB,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAEhJ,4BAA4B;AAC5B,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAO,OAAgC,EAA2B,EAAE;IAC1F,MAAM,MAAM,GAAQ,EAAE,CAAC;IACvB,KAAK,MAAM,EAAE,IAAI,OAAO,EAAE,CAAC;QACzB,IAAI,EAAE,CAAC,GAAG,KAAK,MAAM;YAAE,OAAO,EAAE,CAAC;QACjC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;IACxB,CAAC;IACD,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC;AACvB,CAAC,CAAC;AAEF,2BAA2B;AAC3B,MAAM,CAAC,MAAM,QAAQ,GACnB,CAAU,CAAyB,EAAmD,EAAE,CACxF,CAAC,EAAE,EAAE,EAAE,CACL,QAAQ,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AAExB,uBAAuB;AACvB,6DAA6D;AAC7D,MAAM,KAAK,GAAG,CAAU,CAAc,EAAwC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AACxF,6DAA6D;AAC7D,MAAM,IAAI,GAAG,CAAU,EAA0B,EAAwC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AACnG,6DAA6D;AAC7D,MAAM,OAAO,GAAG,CAAU,CAAyB,EAAwC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACvG,6DAA6D;AAC7D,MAAM,OAAO,GAAG,CAAc,CAAe,EAAE,CAAc,EAAyC,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACrH,6DAA6D;AAC7D,MAAM,QAAQ,GACZ,CAAU,CAAoB,EAAE,CAAI,EAA6B,EAAE,CACnE,CAAC,EAAE,EAAE,EAAE,CACL,EAAE,CAAC,GAAG,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC5C,6DAA6D;AAC7D,MAAM,QAAQ,GACZ,CAAO,KAAmB,EAAmC,EAAE,CAC/D,CAAC,EAAE,EAAE,EAAE,CACL,EAAE,CAAC,GAAG,KAAK,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,KAAK,MAAM,IAAI,EAAE,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,KAAK,OAAO,IAAI,EAAE,CAAC,KAAK,KAAK,KAAK,CAAC,KAAK,CAAC;AAC3H,6DAA6D;AAC7D,MAAM,KAAK,GACT,CAAO,IAAkB,EAAwC,EAAE,CACnE,CAAC,EAAE,EAAE,EAAE,CACL,EAAE,CAAC,GAAG,KAAK,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;AAEnC,MAAM,CAAC,cAAc,CAAC,KAAK,EAAE,iBAAiB,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;AAElE,MAAM,UAAU,GAAG,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AACnD,6DAA6D;AAC7D,UAAU,CAAC,kBAAkB,CAAC,GAAG,UAAmC,CAAc;IAChF,OAAO,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;AAC9B,CAAC,CAAC;AACF,UAAU,CAAC,iBAAiB,CAAC,GAAG,UAA6C,EAAgB;IAC3F,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;AACtB,CAAC,CAAC;AACF,UAAU,CAAC,oBAAoB,CAAC,GAAG,UAAmC,CAAyB;IAC7F,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACvB,CAAC,CAAC;AACF,UAAU,CAAC,oBAAoB,CAAC,GAAG,UAAuC,CAAe,EAAE,CAAc;IACvG,OAAO,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;AAC9B,CAAC,CAAC;AACF,6DAA6D;AAC7D,UAAU,CAAC,qBAAqB,CAAC,GAAG,UAAmC,CAAoB,EAAE,CAAI;IAC/F,OAAO,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;AAC1B,CAAC,CAAC;AACF,UAAU,CAAC,qBAAqB,CAAC,GAAG,UAAgC,KAAmB;IACrF,OAAO,KAAK,CAAC,GAAG,KAAK,OAAO,IAAI,IAAI,CAAC,KAAK,KAAK,KAAK,CAAC,KAAK,CAAC;AAC7D,CAAC,CAAC;AACF,UAAU,CAAC,kBAAkB,CAAC,GAAG,UAAgC,KAAmB;IAClF,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AAEF,MAAM,SAAS,GAAG,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AACjD,SAAS,CAAC,kBAAkB,CAAC,GAAG,UAAkC,EAAe;IAC/E,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AACF,6DAA6D;AAC7D,SAAS,CAAC,iBAAiB,CAAC,GAAG,UAAmC,GAAiB;IACjF,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AACF,SAAS,CAAC,oBAAoB,CAAC,GAAG,UAAkC,EAA0B;IAC5F,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AACF,SAAS,CAAC,oBAAoB,CAAC,GAAG,UAAsC,CAAe,EAAE,EAAe;IACtG,OAAO,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AAC5B,CAAC,CAAC;AACF,SAAS,CAAC,qBAAqB,CAAC,GAAG,UAAkC,CAAoB,EAAE,CAAI;IAC7F,OAAO,CAAC,CAAC;AACX,CAAC,CAAC;AACF,uBAAuB;AACvB,SAAS,CAAC,qBAAqB,CAAC,GAAG,UAA+B,KAAmB;IACnF,OAAO,KAAK,CAAC,GAAG,KAAK,MAAM,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,CAAC;AAC1D,CAAC,CAAC;AACF,uBAAuB;AACvB,SAAS,CAAC,kBAAkB,CAAC,GAAG,UAA+B,IAAkB;IAC/E,OAAO,IAAI,CAAC;AACd,CAAC,CAAC"}
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
import * as Either from './Either.js';
|
|
2
|
+
import type * as MaybeAsyncModule from './MaybeAsync.js';
|
|
3
|
+
/**
|
|
4
|
+
* Lazy async Either: wraps Promise<Either<L, R>>.
|
|
5
|
+
* Critical: Rejected Promises and thrown exceptions become Left; never throws or rejects.
|
|
6
|
+
*/
|
|
7
|
+
export type EitherAsync<L, R> = {
|
|
8
|
+
readonly tag: 'EitherAsync';
|
|
9
|
+
readonly run: () => Promise<Either.Either<L, R>>;
|
|
10
|
+
};
|
|
11
|
+
/**
|
|
12
|
+
* Construct an EitherAsync from a lazy computation.
|
|
13
|
+
* @param run - A function returning Promise<Either<L, R>>.
|
|
14
|
+
* @returns An EitherAsync that encapsulates the computation.
|
|
15
|
+
*/
|
|
16
|
+
export declare const EitherAsync: <L, R>(run: () => Promise<Either.Either<L, R>>) => EitherAsync<L, R>;
|
|
17
|
+
/**
|
|
18
|
+
* Lift a synchronous Either into EitherAsync.
|
|
19
|
+
* @param ea - The synchronous Either.
|
|
20
|
+
* @returns An EitherAsync that immediately resolves to the Either.
|
|
21
|
+
*/
|
|
22
|
+
export declare const liftEither: <L, R>(ea: Either.Either<L, R>) => EitherAsync<L, R>;
|
|
23
|
+
/**
|
|
24
|
+
* Lift a Promise into EitherAsync.
|
|
25
|
+
* Rejected Promises and thrown exceptions become Left; never throws or rejects.
|
|
26
|
+
* @param p - The Promise to lift.
|
|
27
|
+
* @param onError - Function to transform errors to Left.
|
|
28
|
+
* @returns An EitherAsync that resolves to Right or Left.
|
|
29
|
+
*/
|
|
30
|
+
export declare const fromPromise: <L, R>(p: Promise<R>, onError: (e: unknown) => L) => EitherAsync<L, R>;
|
|
31
|
+
/**
|
|
32
|
+
* Wrap an async function with error handling.
|
|
33
|
+
* Rejected Promises and thrown exceptions become Left; never throws or rejects.
|
|
34
|
+
* @param f - An async function.
|
|
35
|
+
* @param onError - Function to transform errors to Left.
|
|
36
|
+
* @returns An EitherAsync that captures the result or Left on error.
|
|
37
|
+
*/
|
|
38
|
+
export declare const tryCatch: <L, R>(f: () => Promise<R>, onError: (e: unknown) => L) => EitherAsync<L, R>;
|
|
39
|
+
/**
|
|
40
|
+
* Functor map over the Right value.
|
|
41
|
+
* Rejected Promises and thrown exceptions become Left; never throws or rejects.
|
|
42
|
+
* @param f - Function to transform the Right value.
|
|
43
|
+
* @returns A function taking EitherAsync and returning a new EitherAsync.
|
|
44
|
+
*/
|
|
45
|
+
export declare const map: <L, A, B>(f: (a: A) => B) => ((ea: EitherAsync<L, A>) => EitherAsync<L, B>);
|
|
46
|
+
/**
|
|
47
|
+
* Map over the Left value.
|
|
48
|
+
* Rejected Promises and thrown exceptions become Left; never throws or rejects.
|
|
49
|
+
* @param f - Function to transform the Left value.
|
|
50
|
+
* @returns A function taking EitherAsync and returning a new EitherAsync.
|
|
51
|
+
*/
|
|
52
|
+
export declare const mapLeft: <L, L2, R>(f: (l: L) => L2) => ((ea: EitherAsync<L, R>) => EitherAsync<L2, R>);
|
|
53
|
+
/**
|
|
54
|
+
* Bifunctor bimap: map over both Left and Right.
|
|
55
|
+
* Rejected Promises and thrown exceptions become Left; never throws or rejects.
|
|
56
|
+
* @param f - Function to transform Left.
|
|
57
|
+
* @param g - Function to transform Right.
|
|
58
|
+
* @returns A function taking EitherAsync and returning a new EitherAsync.
|
|
59
|
+
*/
|
|
60
|
+
export declare const bimap: <L, L2, A, B>(f: (l: L) => L2, g: (a: A) => B) => ((ea: EitherAsync<L, A>) => EitherAsync<L2, B>);
|
|
61
|
+
/**
|
|
62
|
+
* Monadic bind: sequentially compose EitherAsync computations.
|
|
63
|
+
* Rejected Promises and thrown exceptions become Left; never throws or rejects.
|
|
64
|
+
* @param f - Function that returns an EitherAsync.
|
|
65
|
+
* @returns A function taking EitherAsync and returning a flattened EitherAsync.
|
|
66
|
+
*/
|
|
67
|
+
export declare const chain: <L, A, B>(f: (a: A) => EitherAsync<L, B>) => ((ea: EitherAsync<L, A>) => EitherAsync<L, B>);
|
|
68
|
+
/**
|
|
69
|
+
* Chain over the Left value.
|
|
70
|
+
* Rejected Promises and thrown exceptions become Left; never throws or rejects.
|
|
71
|
+
* @param f - Function that returns an EitherAsync.
|
|
72
|
+
* @returns A function taking EitherAsync and returning a new EitherAsync.
|
|
73
|
+
*/
|
|
74
|
+
export declare const chainLeft: <L, L2, R>(f: (l: L) => EitherAsync<L2, R>) => ((ea: EitherAsync<L, R>) => EitherAsync<L2, R>);
|
|
75
|
+
/**
|
|
76
|
+
* Applicative ap: apply an EitherAsync function to an EitherAsync value.
|
|
77
|
+
* Rejected Promises and thrown exceptions become Left; never throws or rejects.
|
|
78
|
+
* @param ef - An EitherAsync of a function.
|
|
79
|
+
* @returns A function taking EitherAsync and returning a new EitherAsync.
|
|
80
|
+
*/
|
|
81
|
+
export declare const ap: <L, A, B>(ef: EitherAsync<L, (a: A) => B>) => ((ea: EitherAsync<L, A>) => EitherAsync<L, B>);
|
|
82
|
+
/**
|
|
83
|
+
* Extract the Right value or provide a default.
|
|
84
|
+
* Rejected Promises and thrown exceptions become Left; never throws or rejects.
|
|
85
|
+
* @param r - The default value.
|
|
86
|
+
* @returns A function taking EitherAsync and returning a Promise of the value.
|
|
87
|
+
*/
|
|
88
|
+
export declare const getOrElse: <L, R>(r: R) => ((ea: EitherAsync<L, R>) => Promise<R>);
|
|
89
|
+
/**
|
|
90
|
+
* Extract the Right value or compute from Left.
|
|
91
|
+
* Rejected Promises and thrown exceptions become Left; never throws or rejects.
|
|
92
|
+
* @param f - Function computing the default from Left.
|
|
93
|
+
* @returns A function taking EitherAsync and returning a Promise of the value.
|
|
94
|
+
*/
|
|
95
|
+
export declare const getOrElseL: <L, R>(f: (l: L) => Promise<R>) => ((ea: EitherAsync<L, R>) => Promise<R>);
|
|
96
|
+
/**
|
|
97
|
+
* Case analysis on EitherAsync.
|
|
98
|
+
* Rejected Promises and thrown exceptions become Left; never throws or rejects.
|
|
99
|
+
* @param onLeft - Function for Left.
|
|
100
|
+
* @param onRight - Function for Right.
|
|
101
|
+
* @returns A function taking EitherAsync and returning Promise of result.
|
|
102
|
+
*/
|
|
103
|
+
export declare const fold: <L, R, B>(onLeft: (l: L) => Promise<B>, onRight: (r: R) => Promise<B>) => ((ea: EitherAsync<L, R>) => Promise<B>);
|
|
104
|
+
/**
|
|
105
|
+
* Swap Left and Right.
|
|
106
|
+
* Rejected Promises and thrown exceptions become Left; never throws or rejects.
|
|
107
|
+
* @param ea - The EitherAsync to swap.
|
|
108
|
+
* @returns A new EitherAsync with Left and Right swapped.
|
|
109
|
+
*/
|
|
110
|
+
export declare const swap: <L, R>(ea: EitherAsync<L, R>) => EitherAsync<R, L>;
|
|
111
|
+
/**
|
|
112
|
+
* Convert EitherAsync to MaybeAsync, discarding Left.
|
|
113
|
+
* Rejected Promises and thrown exceptions become Left which becomes Nothing; never throws or rejects.
|
|
114
|
+
* @param ea - The EitherAsync to convert.
|
|
115
|
+
* @returns A MaybeAsync that ignores the Left value.
|
|
116
|
+
*/
|
|
117
|
+
export declare const toMaybeAsync: <L, R>(ea: EitherAsync<L, R>) => MaybeAsyncModule.MaybeAsync<R>;
|
|
118
|
+
/**
|
|
119
|
+
* All-or-Left: if any EitherAsync is Left, result is Left with the first error.
|
|
120
|
+
* Rejected Promises and thrown exceptions become Left; never throws or rejects.
|
|
121
|
+
* @param eas - Array of EitherAsync.
|
|
122
|
+
* @returns An EitherAsync that is Right of array if all are Right, else the first Left.
|
|
123
|
+
*/
|
|
124
|
+
export declare const all: <L, R>(eas: readonly EitherAsync<L, R>[]) => EitherAsync<L, readonly R[]>;
|
|
125
|
+
/**
|
|
126
|
+
* Extract all Left values from an array of EitherAsync.
|
|
127
|
+
* Rejected Promises and thrown exceptions become Left; never throws or rejects.
|
|
128
|
+
* @param eas - Array of EitherAsync.
|
|
129
|
+
* @returns Promise of collected Left values.
|
|
130
|
+
*/
|
|
131
|
+
export declare const lefts: <L, R>(eas: readonly EitherAsync<L, R>[]) => Promise<readonly L[]>;
|
|
132
|
+
/**
|
|
133
|
+
* Extract all Right values from an array of EitherAsync.
|
|
134
|
+
* Rejected Promises and thrown exceptions become Left; never throws or rejects.
|
|
135
|
+
* @param eas - Array of EitherAsync.
|
|
136
|
+
* @returns Promise of collected Right values.
|
|
137
|
+
*/
|
|
138
|
+
export declare const rights: <L, R>(eas: readonly EitherAsync<L, R>[]) => Promise<readonly R[]>;
|
|
139
|
+
//# sourceMappingURL=EitherAsync.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EitherAsync.d.ts","sourceRoot":"","sources":["../../src/EitherAsync.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
// EitherAsync — Lazy Async Either
|
|
2
|
+
import * as Either from './Either.js';
|
|
3
|
+
/**
|
|
4
|
+
* Construct an EitherAsync from a lazy computation.
|
|
5
|
+
* @param run - A function returning Promise<Either<L, R>>.
|
|
6
|
+
* @returns An EitherAsync that encapsulates the computation.
|
|
7
|
+
*/
|
|
8
|
+
export const EitherAsync = (run) => ({ tag: 'EitherAsync', run });
|
|
9
|
+
/**
|
|
10
|
+
* Lift a synchronous Either into EitherAsync.
|
|
11
|
+
* @param ea - The synchronous Either.
|
|
12
|
+
* @returns An EitherAsync that immediately resolves to the Either.
|
|
13
|
+
*/
|
|
14
|
+
export const liftEither = (ea) => EitherAsync(() => Promise.resolve(ea));
|
|
15
|
+
/**
|
|
16
|
+
* Lift a Promise into EitherAsync.
|
|
17
|
+
* Rejected Promises and thrown exceptions become Left; never throws or rejects.
|
|
18
|
+
* @param p - The Promise to lift.
|
|
19
|
+
* @param onError - Function to transform errors to Left.
|
|
20
|
+
* @returns An EitherAsync that resolves to Right or Left.
|
|
21
|
+
*/
|
|
22
|
+
export const fromPromise = (p, onError) => EitherAsync(() => p.then((r) => Either.Right(r), (e) => Either.Left(onError(e))));
|
|
23
|
+
/**
|
|
24
|
+
* Wrap an async function with error handling.
|
|
25
|
+
* Rejected Promises and thrown exceptions become Left; never throws or rejects.
|
|
26
|
+
* @param f - An async function.
|
|
27
|
+
* @param onError - Function to transform errors to Left.
|
|
28
|
+
* @returns An EitherAsync that captures the result or Left on error.
|
|
29
|
+
*/
|
|
30
|
+
export const tryCatch = (f, onError) => EitherAsync(() => Promise.resolve()
|
|
31
|
+
.then(() => f())
|
|
32
|
+
.then((r) => Either.Right(r), (e) => Either.Left(onError(e))));
|
|
33
|
+
/**
|
|
34
|
+
* Functor map over the Right value.
|
|
35
|
+
* Rejected Promises and thrown exceptions become Left; never throws or rejects.
|
|
36
|
+
* @param f - Function to transform the Right value.
|
|
37
|
+
* @returns A function taking EitherAsync and returning a new EitherAsync.
|
|
38
|
+
*/
|
|
39
|
+
export const map = (f) => (ea) => EitherAsync(() => ea.run().then((either) => Either.map(f)(either)));
|
|
40
|
+
/**
|
|
41
|
+
* Map over the Left value.
|
|
42
|
+
* Rejected Promises and thrown exceptions become Left; never throws or rejects.
|
|
43
|
+
* @param f - Function to transform the Left value.
|
|
44
|
+
* @returns A function taking EitherAsync and returning a new EitherAsync.
|
|
45
|
+
*/
|
|
46
|
+
export const mapLeft = (f) => (ea) => EitherAsync(() => ea.run().then((either) => Either.mapLeft(f)(either)));
|
|
47
|
+
/**
|
|
48
|
+
* Bifunctor bimap: map over both Left and Right.
|
|
49
|
+
* Rejected Promises and thrown exceptions become Left; never throws or rejects.
|
|
50
|
+
* @param f - Function to transform Left.
|
|
51
|
+
* @param g - Function to transform Right.
|
|
52
|
+
* @returns A function taking EitherAsync and returning a new EitherAsync.
|
|
53
|
+
*/
|
|
54
|
+
export const bimap = (f, g) => (ea) => EitherAsync(() => ea.run().then((either) => Either.bimap(f, g)(either)));
|
|
55
|
+
/**
|
|
56
|
+
* Monadic bind: sequentially compose EitherAsync computations.
|
|
57
|
+
* Rejected Promises and thrown exceptions become Left; never throws or rejects.
|
|
58
|
+
* @param f - Function that returns an EitherAsync.
|
|
59
|
+
* @returns A function taking EitherAsync and returning a flattened EitherAsync.
|
|
60
|
+
*/
|
|
61
|
+
export const chain = (f) => (ea) => EitherAsync(async () => {
|
|
62
|
+
const either = await ea.run();
|
|
63
|
+
if (either.tag === 'Right') {
|
|
64
|
+
return f(either.right).run();
|
|
65
|
+
}
|
|
66
|
+
return either;
|
|
67
|
+
});
|
|
68
|
+
/**
|
|
69
|
+
* Chain over the Left value.
|
|
70
|
+
* Rejected Promises and thrown exceptions become Left; never throws or rejects.
|
|
71
|
+
* @param f - Function that returns an EitherAsync.
|
|
72
|
+
* @returns A function taking EitherAsync and returning a new EitherAsync.
|
|
73
|
+
*/
|
|
74
|
+
export const chainLeft = (f) => (ea) => EitherAsync(async () => {
|
|
75
|
+
const either = await ea.run();
|
|
76
|
+
if (either.tag === 'Left') {
|
|
77
|
+
return await f(either.left).run();
|
|
78
|
+
}
|
|
79
|
+
return { tag: 'Right', right: either.right };
|
|
80
|
+
});
|
|
81
|
+
/**
|
|
82
|
+
* Applicative ap: apply an EitherAsync function to an EitherAsync value.
|
|
83
|
+
* Rejected Promises and thrown exceptions become Left; never throws or rejects.
|
|
84
|
+
* @param ef - An EitherAsync of a function.
|
|
85
|
+
* @returns A function taking EitherAsync and returning a new EitherAsync.
|
|
86
|
+
*/
|
|
87
|
+
export const ap = (ef) => (ea) => EitherAsync(async () => {
|
|
88
|
+
const [f, a] = await Promise.all([ef.run(), ea.run()]);
|
|
89
|
+
return Either.ap(f)(a);
|
|
90
|
+
});
|
|
91
|
+
/**
|
|
92
|
+
* Extract the Right value or provide a default.
|
|
93
|
+
* Rejected Promises and thrown exceptions become Left; never throws or rejects.
|
|
94
|
+
* @param r - The default value.
|
|
95
|
+
* @returns A function taking EitherAsync and returning a Promise of the value.
|
|
96
|
+
*/
|
|
97
|
+
export const getOrElse = (r) => (ea) => ea.run().then((either) => Either.getOrElse(r)(either));
|
|
98
|
+
/**
|
|
99
|
+
* Extract the Right value or compute from Left.
|
|
100
|
+
* Rejected Promises and thrown exceptions become Left; never throws or rejects.
|
|
101
|
+
* @param f - Function computing the default from Left.
|
|
102
|
+
* @returns A function taking EitherAsync and returning a Promise of the value.
|
|
103
|
+
*/
|
|
104
|
+
export const getOrElseL = (f) => (ea) => ea.run().then(async (either) => {
|
|
105
|
+
if (either.tag === 'Right')
|
|
106
|
+
return either.right;
|
|
107
|
+
return f(either.left);
|
|
108
|
+
});
|
|
109
|
+
/**
|
|
110
|
+
* Case analysis on EitherAsync.
|
|
111
|
+
* Rejected Promises and thrown exceptions become Left; never throws or rejects.
|
|
112
|
+
* @param onLeft - Function for Left.
|
|
113
|
+
* @param onRight - Function for Right.
|
|
114
|
+
* @returns A function taking EitherAsync and returning Promise of result.
|
|
115
|
+
*/
|
|
116
|
+
export const fold = (onLeft, onRight) => (ea) => ea.run().then((either) => Either.fold(onLeft, onRight)(either));
|
|
117
|
+
/**
|
|
118
|
+
* Swap Left and Right.
|
|
119
|
+
* Rejected Promises and thrown exceptions become Left; never throws or rejects.
|
|
120
|
+
* @param ea - The EitherAsync to swap.
|
|
121
|
+
* @returns A new EitherAsync with Left and Right swapped.
|
|
122
|
+
*/
|
|
123
|
+
export const swap = (ea) => EitherAsync(() => ea.run().then((either) => Either.swap(either)));
|
|
124
|
+
/**
|
|
125
|
+
* Convert EitherAsync to MaybeAsync, discarding Left.
|
|
126
|
+
* Rejected Promises and thrown exceptions become Left which becomes Nothing; never throws or rejects.
|
|
127
|
+
* @param ea - The EitherAsync to convert.
|
|
128
|
+
* @returns A MaybeAsync that ignores the Left value.
|
|
129
|
+
*/
|
|
130
|
+
export const toMaybeAsync = (ea) => {
|
|
131
|
+
// Dynamic import to avoid circular dependencies
|
|
132
|
+
return {
|
|
133
|
+
tag: 'MaybeAsync',
|
|
134
|
+
run: async () => {
|
|
135
|
+
const either = await ea.run();
|
|
136
|
+
const Maybe = await import('./Maybe.js');
|
|
137
|
+
return either.tag === 'Right' ? Maybe.Just(either.right) : Maybe.Nothing;
|
|
138
|
+
}
|
|
139
|
+
};
|
|
140
|
+
};
|
|
141
|
+
/**
|
|
142
|
+
* All-or-Left: if any EitherAsync is Left, result is Left with the first error.
|
|
143
|
+
* Rejected Promises and thrown exceptions become Left; never throws or rejects.
|
|
144
|
+
* @param eas - Array of EitherAsync.
|
|
145
|
+
* @returns An EitherAsync that is Right of array if all are Right, else the first Left.
|
|
146
|
+
*/
|
|
147
|
+
export const all = (eas) => EitherAsync(async () => {
|
|
148
|
+
const results = await Promise.all(eas.map((ea) => ea.run()));
|
|
149
|
+
const values = [];
|
|
150
|
+
for (const either of results) {
|
|
151
|
+
if (either.tag === 'Left')
|
|
152
|
+
return either;
|
|
153
|
+
values.push(either.right);
|
|
154
|
+
}
|
|
155
|
+
return Either.Right(values);
|
|
156
|
+
});
|
|
157
|
+
/**
|
|
158
|
+
* Extract all Left values from an array of EitherAsync.
|
|
159
|
+
* Rejected Promises and thrown exceptions become Left; never throws or rejects.
|
|
160
|
+
* @param eas - Array of EitherAsync.
|
|
161
|
+
* @returns Promise of collected Left values.
|
|
162
|
+
*/
|
|
163
|
+
export const lefts = (eas) => Promise.all(eas.map((ea) => ea.run())).then((results) => results.flatMap((either) => (either.tag === 'Left' ? [either.left] : [])));
|
|
164
|
+
/**
|
|
165
|
+
* Extract all Right values from an array of EitherAsync.
|
|
166
|
+
* Rejected Promises and thrown exceptions become Left; never throws or rejects.
|
|
167
|
+
* @param eas - Array of EitherAsync.
|
|
168
|
+
* @returns Promise of collected Right values.
|
|
169
|
+
*/
|
|
170
|
+
export const rights = (eas) => Promise.all(eas.map((ea) => ea.run())).then((results) => results.flatMap((either) => (either.tag === 'Right' ? [either.right] : [])));
|
|
171
|
+
//# sourceMappingURL=EitherAsync.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EitherAsync.js","sourceRoot":"","sources":["../../src/EitherAsync.ts"],"names":[],"mappings":"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"}
|