@nicolastoulemont/std 0.1.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 +1 -0
- package/dist/adt/index.d.mts +2 -0
- package/dist/adt/index.mjs +3 -0
- package/dist/adt-DraJkmij.mjs +318 -0
- package/dist/adt-DraJkmij.mjs.map +1 -0
- package/dist/apply-fn.types-CXDoeA7D.d.mts +8 -0
- package/dist/apply-fn.types-CXDoeA7D.d.mts.map +1 -0
- package/dist/brand/index.d.mts +2 -0
- package/dist/brand/index.mjs +3 -0
- package/dist/brand-CTaxGuU9.mjs +165 -0
- package/dist/brand-CTaxGuU9.mjs.map +1 -0
- package/dist/data/index.d.mts +2 -0
- package/dist/data/index.mjs +3 -0
- package/dist/data-DgzWI4R_.mjs +244 -0
- package/dist/data-DgzWI4R_.mjs.map +1 -0
- package/dist/discriminator.types-DCkkrCj4.d.mts +7 -0
- package/dist/discriminator.types-DCkkrCj4.d.mts.map +1 -0
- package/dist/either/index.d.mts +2 -0
- package/dist/either/index.mjs +3 -0
- package/dist/either-CnOBUH7a.mjs +598 -0
- package/dist/either-CnOBUH7a.mjs.map +1 -0
- package/dist/equality/index.d.mts +86 -0
- package/dist/equality/index.d.mts.map +1 -0
- package/dist/equality/index.mjs +3 -0
- package/dist/equality-YMebYwm1.mjs +201 -0
- package/dist/equality-YMebYwm1.mjs.map +1 -0
- package/dist/err/index.d.mts +2 -0
- package/dist/err/index.mjs +3 -0
- package/dist/err-BqQApH9r.mjs +169 -0
- package/dist/err-BqQApH9r.mjs.map +1 -0
- package/dist/flow/index.d.mts +2 -0
- package/dist/flow/index.mjs +3 -0
- package/dist/flow-pRdnqmMY.mjs +21 -0
- package/dist/flow-pRdnqmMY.mjs.map +1 -0
- package/dist/gen/index.d.mts +3 -0
- package/dist/gen/index.mjs +3 -0
- package/dist/gen-YfMC9sDT.mjs +42 -0
- package/dist/gen-YfMC9sDT.mjs.map +1 -0
- package/dist/index-BCrD3pEs.d.mts +222 -0
- package/dist/index-BCrD3pEs.d.mts.map +1 -0
- package/dist/index-BR7takNf.d.mts +186 -0
- package/dist/index-BR7takNf.d.mts.map +1 -0
- package/dist/index-CcPnhWje.d.mts +72 -0
- package/dist/index-CcPnhWje.d.mts.map +1 -0
- package/dist/index-CtJ8Ks9X.d.mts +105 -0
- package/dist/index-CtJ8Ks9X.d.mts.map +1 -0
- package/dist/index-CvGTIg9L.d.mts +211 -0
- package/dist/index-CvGTIg9L.d.mts.map +1 -0
- package/dist/index-DPVT0yK4.d.mts +50 -0
- package/dist/index-DPVT0yK4.d.mts.map +1 -0
- package/dist/index-DgOAEEpu.d.mts +79 -0
- package/dist/index-DgOAEEpu.d.mts.map +1 -0
- package/dist/index-Dtq3kmln.d.mts +394 -0
- package/dist/index-Dtq3kmln.d.mts.map +1 -0
- package/dist/index-bLRqTe5I.d.mts +80 -0
- package/dist/index-bLRqTe5I.d.mts.map +1 -0
- package/dist/index-tkgTLCoq.d.mts +80 -0
- package/dist/index-tkgTLCoq.d.mts.map +1 -0
- package/dist/index-wTrnFgYg.d.mts +57 -0
- package/dist/index-wTrnFgYg.d.mts.map +1 -0
- package/dist/index-yyBTq8Ys.d.mts +79 -0
- package/dist/index-yyBTq8Ys.d.mts.map +1 -0
- package/dist/index.d.mts +135 -0
- package/dist/index.d.mts.map +1 -0
- package/dist/index.mjs +41 -0
- package/dist/index.mjs.map +1 -0
- package/dist/is-promise-BEl3eGZg.mjs +11 -0
- package/dist/is-promise-BEl3eGZg.mjs.map +1 -0
- package/dist/option/index.d.mts +3 -0
- package/dist/option/index.mjs +3 -0
- package/dist/option-CKHDOVea.mjs +410 -0
- package/dist/option-CKHDOVea.mjs.map +1 -0
- package/dist/option.types-D6TYG_i3.d.mts +89 -0
- package/dist/option.types-D6TYG_i3.d.mts.map +1 -0
- package/dist/pipe/index.d.mts +2 -0
- package/dist/pipe/index.mjs +3 -0
- package/dist/pipe-GYxZNkPB.mjs +10 -0
- package/dist/pipe-GYxZNkPB.mjs.map +1 -0
- package/dist/predicate/index.d.mts +2 -0
- package/dist/predicate/index.mjs +3 -0
- package/dist/predicate-B6-EdVgW.mjs +293 -0
- package/dist/predicate-B6-EdVgW.mjs.map +1 -0
- package/dist/result/index.d.mts +3 -0
- package/dist/result/index.mjs +3 -0
- package/dist/result-C5tPWR60.mjs +422 -0
- package/dist/result-C5tPWR60.mjs.map +1 -0
- package/dist/result-D7XJ96pv.mjs +1 -0
- package/dist/result.types-Ce7AEOzj.d.mts +156 -0
- package/dist/result.types-Ce7AEOzj.d.mts.map +1 -0
- package/dist/run/index.d.mts +2 -0
- package/dist/run/index.mjs +3 -0
- package/dist/run-DpXkImo9.mjs +10 -0
- package/dist/run-DpXkImo9.mjs.map +1 -0
- package/package.json +89 -0
|
@@ -0,0 +1,211 @@
|
|
|
1
|
+
import { g as Yieldable, i as Result } from "./result.types-Ce7AEOzj.mjs";
|
|
2
|
+
import { a as Option } from "./option.types-D6TYG_i3.mjs";
|
|
3
|
+
|
|
4
|
+
//#region src/either/either.types.d.ts
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* A discriminated union representing a choice between two alternatives.
|
|
8
|
+
* By convention: Right = correct/preferred, Left = alternative.
|
|
9
|
+
*
|
|
10
|
+
* Unlike Result, neither side has inherent error semantics. Use Either when
|
|
11
|
+
* both outcomes are valid alternatives (e.g., cached vs fresh data).
|
|
12
|
+
*
|
|
13
|
+
* Use Result when modeling success/failure with error semantics.
|
|
14
|
+
*
|
|
15
|
+
* Implements Yieldable protocol for use in Do computations with yield*.
|
|
16
|
+
*
|
|
17
|
+
* @example
|
|
18
|
+
* ```ts
|
|
19
|
+
* // Either: Valid alternatives
|
|
20
|
+
* type DataSource = Either<CachedData, FreshData>
|
|
21
|
+
*
|
|
22
|
+
* // Result: Success/failure
|
|
23
|
+
* type ApiResult = Result<User, ApiError>
|
|
24
|
+
* ```
|
|
25
|
+
*/
|
|
26
|
+
type Either$1<L, R> = Yieldable<R, L> & ({
|
|
27
|
+
readonly right: true;
|
|
28
|
+
readonly value: R;
|
|
29
|
+
} | {
|
|
30
|
+
readonly right: false;
|
|
31
|
+
readonly value: L;
|
|
32
|
+
});
|
|
33
|
+
/**
|
|
34
|
+
* Extract the left type from an Either
|
|
35
|
+
*/
|
|
36
|
+
type LeftValue<E> = E extends {
|
|
37
|
+
readonly right: false;
|
|
38
|
+
readonly value: infer L;
|
|
39
|
+
} ? L : never;
|
|
40
|
+
/**
|
|
41
|
+
* Extract the right type from an Either
|
|
42
|
+
*/
|
|
43
|
+
type RightValue<E> = E extends {
|
|
44
|
+
readonly right: true;
|
|
45
|
+
readonly value: infer R;
|
|
46
|
+
} ? R : never;
|
|
47
|
+
/**
|
|
48
|
+
* Return type for all() with array input - preserves tuple structure
|
|
49
|
+
*/
|
|
50
|
+
type AllArrayReturn<T extends readonly Either$1<unknown, unknown>[]> = Either$1<LeftValue<T[number]>, { -readonly [K in keyof T]: RightValue<T[K]> }>;
|
|
51
|
+
/**
|
|
52
|
+
* Return type for all() with object input - preserves object structure
|
|
53
|
+
*/
|
|
54
|
+
type AllObjectReturn<T extends Record<string, Either$1<unknown, unknown>>> = Either$1<LeftValue<T[keyof T]>, { -readonly [K in keyof T]: RightValue<T[K]> }>;
|
|
55
|
+
/**
|
|
56
|
+
* Type-safe interface for map() with async detection
|
|
57
|
+
* Async overload must come first for proper type inference
|
|
58
|
+
*/
|
|
59
|
+
type EitherMap = {
|
|
60
|
+
<A, B>(fn: (value: A) => Promise<B>): <L>(either: Either$1<L, A>) => Promise<Either$1<L, B>>;
|
|
61
|
+
<A, B>(fn: (value: A) => B): <L>(either: Either$1<L, A>) => Either$1<L, B>;
|
|
62
|
+
};
|
|
63
|
+
/**
|
|
64
|
+
* Type-safe interface for mapLeft() with async detection
|
|
65
|
+
*/
|
|
66
|
+
type EitherMapLeft = {
|
|
67
|
+
<L1, L2$1>(fn: (value: L1) => Promise<L2$1>): <R>(either: Either$1<L1, R>) => Promise<Either$1<L2$1, R>>;
|
|
68
|
+
<L1, L2$1>(fn: (value: L1) => L2$1): <R>(either: Either$1<L1, R>) => Either$1<L2$1, R>;
|
|
69
|
+
};
|
|
70
|
+
/**
|
|
71
|
+
* Type-safe interface for bimap() with async detection
|
|
72
|
+
*/
|
|
73
|
+
type EitherBimap = {
|
|
74
|
+
<L1, L2$1, R1, R2$1>(fnLeft: (left: L1) => Promise<L2$1>, fnRight: (right: R1) => Promise<R2$1>): (either: Either$1<L1, R1>) => Promise<Either$1<L2$1, R2$1>>;
|
|
75
|
+
<L1, L2$1, R1, R2$1>(fnLeft: (left: L1) => Promise<L2$1>, fnRight: (right: R1) => R2$1): (either: Either$1<L1, R1>) => Promise<Either$1<L2$1, R2$1>>;
|
|
76
|
+
<L1, L2$1, R1, R2$1>(fnLeft: (left: L1) => L2$1, fnRight: (right: R1) => Promise<R2$1>): (either: Either$1<L1, R1>) => Promise<Either$1<L2$1, R2$1>>;
|
|
77
|
+
<L1, L2$1, R1, R2$1>(fnLeft: (left: L1) => L2$1, fnRight: (right: R1) => R2$1): (either: Either$1<L1, R1>) => Either$1<L2$1, R2$1>;
|
|
78
|
+
};
|
|
79
|
+
/**
|
|
80
|
+
* Type-safe interface for flatMap() with async detection and left union
|
|
81
|
+
*/
|
|
82
|
+
type EitherFlatMap = {
|
|
83
|
+
<A, B, L2$1>(fn: (value: A) => Promise<Either$1<L2$1, B>>): <L>(either: Either$1<L, A>) => Promise<Either$1<L | L2$1, B>>;
|
|
84
|
+
<A, B, L2$1>(fn: (value: A) => Either$1<L2$1, B>): <L>(either: Either$1<L, A>) => Either$1<L | L2$1, B>;
|
|
85
|
+
};
|
|
86
|
+
/**
|
|
87
|
+
* Type-safe interface for tap() with async detection
|
|
88
|
+
*/
|
|
89
|
+
type EitherTap = {
|
|
90
|
+
<A>(fn: (value: A) => Promise<void>): <L>(either: Either$1<L, A>) => Promise<Either$1<L, A>>;
|
|
91
|
+
<A>(fn: (value: A) => void): <L>(either: Either$1<L, A>) => Either$1<L, A>;
|
|
92
|
+
};
|
|
93
|
+
/**
|
|
94
|
+
* Type-safe interface for tapLeft() with async detection
|
|
95
|
+
*/
|
|
96
|
+
type EitherTapLeft = {
|
|
97
|
+
<L>(fn: (value: L) => Promise<void>): <R>(either: Either$1<L, R>) => Promise<Either$1<L, R>>;
|
|
98
|
+
<L>(fn: (value: L) => void): <R>(either: Either$1<L, R>) => Either$1<L, R>;
|
|
99
|
+
};
|
|
100
|
+
/**
|
|
101
|
+
* Type-safe interface for orElse() with async detection and right union
|
|
102
|
+
*/
|
|
103
|
+
type EitherOrElse = {
|
|
104
|
+
<L1, L2$1, R2$1>(fn: (left: L1) => Promise<Either$1<L2$1, R2$1>>): <R>(either: Either$1<L1, R>) => Promise<Either$1<L2$1, R | R2$1>>;
|
|
105
|
+
<L1, L2$1, R2$1>(fn: (left: L1) => Either$1<L2$1, R2$1>): <R>(either: Either$1<L1, R>) => Either$1<L2$1, R | R2$1>;
|
|
106
|
+
};
|
|
107
|
+
/**
|
|
108
|
+
* Type-safe interface for filter()
|
|
109
|
+
*/
|
|
110
|
+
type EitherFilter = {
|
|
111
|
+
<R, L2$1>(predicate: (value: R) => boolean, onFail: (value: R) => L2$1): <L>(either: Either$1<L, R>) => Either$1<L | L2$1, R>;
|
|
112
|
+
};
|
|
113
|
+
//#endregion
|
|
114
|
+
//#region src/either/either.d.ts
|
|
115
|
+
|
|
116
|
+
/**
|
|
117
|
+
* Combine multiple Eithers into a single Either.
|
|
118
|
+
* Short-circuits on the first left value.
|
|
119
|
+
*
|
|
120
|
+
* Supports both array and object inputs with full type preservation.
|
|
121
|
+
*
|
|
122
|
+
* @param eithers - Array or object of Eithers to combine
|
|
123
|
+
* @returns Either with all right values or first left
|
|
124
|
+
*
|
|
125
|
+
* @example
|
|
126
|
+
* ```ts
|
|
127
|
+
* // Array form (with const assertion for tuple typing)
|
|
128
|
+
* all([right(1), right("hello")] as const)
|
|
129
|
+
* // => right([1, "hello"])
|
|
130
|
+
*
|
|
131
|
+
* all([right(1), left("error"), right(3)])
|
|
132
|
+
* // => left("error")
|
|
133
|
+
*
|
|
134
|
+
* // Object form
|
|
135
|
+
* all({ a: right(1), b: right("hello") })
|
|
136
|
+
* // => right({ a: 1, b: "hello" })
|
|
137
|
+
* ```
|
|
138
|
+
*/
|
|
139
|
+
declare function all<const T extends readonly Either$1<unknown, unknown>[]>(eithers: T): AllArrayReturn<T>;
|
|
140
|
+
declare function all<const T extends Record<string, Either$1<unknown, unknown>>>(eithers: T): AllObjectReturn<T>;
|
|
141
|
+
/**
|
|
142
|
+
* Either namespace containing all utility functions for working with Either types.
|
|
143
|
+
*
|
|
144
|
+
* Either represents a value that can be one of two types: Left<L> or Right<R>.
|
|
145
|
+
* By convention, Right is the "success" or preferred path, while Left represents
|
|
146
|
+
* an alternative outcome (not necessarily an error, unlike Result).
|
|
147
|
+
*
|
|
148
|
+
* Use Either when both outcomes are valid and meaningful, not just success/failure.
|
|
149
|
+
* For error handling, prefer Result instead.
|
|
150
|
+
*
|
|
151
|
+
* @see {@link Result} for success/error semantics
|
|
152
|
+
* @see {@link Option} for presence/absence semantics
|
|
153
|
+
*
|
|
154
|
+
* @example
|
|
155
|
+
* ```ts
|
|
156
|
+
* import { Either, pipe } from '@repo/std'
|
|
157
|
+
* import type { Either as EitherType } from '@repo/std'
|
|
158
|
+
*
|
|
159
|
+
* // Either for branching logic (cache vs fresh data)
|
|
160
|
+
* const fetchOrCache = (id: number): EitherType<CachedData, FreshData> =>
|
|
161
|
+
* cache.has(id) ? Either.left(cache.get(id)) : Either.right(fetch(id))
|
|
162
|
+
*
|
|
163
|
+
* const result = pipe(
|
|
164
|
+
* fetchOrCache(1),
|
|
165
|
+
* Either.map(data => data.value),
|
|
166
|
+
* Either.unwrapOr(defaultValue)
|
|
167
|
+
* )
|
|
168
|
+
*
|
|
169
|
+
* // Async example
|
|
170
|
+
* const processed = await pipe(
|
|
171
|
+
* Either.right(userId),
|
|
172
|
+
* Either.map(async id => await fetchUser(id)),
|
|
173
|
+
* Either.flatMap(async user => Either.right(await enrichUser(user)))
|
|
174
|
+
* )
|
|
175
|
+
* ```
|
|
176
|
+
*/
|
|
177
|
+
declare const Either: {
|
|
178
|
+
readonly left: <L>(value: L) => Either$1<L, never>;
|
|
179
|
+
readonly right: <R>(value: R) => Either$1<never, R>;
|
|
180
|
+
readonly isLeft: <L, R>(either: Either$1<L, R>) => either is Extract<Either$1<L, R>, {
|
|
181
|
+
right: false;
|
|
182
|
+
}>;
|
|
183
|
+
readonly isRight: <L, R>(either: Either$1<L, R>) => either is Extract<Either$1<L, R>, {
|
|
184
|
+
right: true;
|
|
185
|
+
}>;
|
|
186
|
+
readonly map: EitherMap;
|
|
187
|
+
readonly mapLeft: EitherMapLeft;
|
|
188
|
+
readonly bimap: EitherBimap;
|
|
189
|
+
readonly flatMap: EitherFlatMap;
|
|
190
|
+
readonly tap: EitherTap;
|
|
191
|
+
readonly tapLeft: EitherTapLeft;
|
|
192
|
+
readonly orElse: EitherOrElse;
|
|
193
|
+
readonly swap: <L, R>() => (either: Either$1<L, R>) => Either$1<R, L>;
|
|
194
|
+
readonly filter: EitherFilter;
|
|
195
|
+
readonly all: typeof all;
|
|
196
|
+
readonly unwrapOr: <R>(defaultValue: R) => <L>(either: Either$1<L, R>) => R;
|
|
197
|
+
readonly unwrapOrElse: <L, R>(fn: (left: L) => R) => (either: Either$1<L, R>) => R;
|
|
198
|
+
readonly match: <L, R, U$1>(handlers: {
|
|
199
|
+
left: (value: L) => U$1;
|
|
200
|
+
right: (value: R) => U$1;
|
|
201
|
+
}) => (either: Either$1<L, R>) => U$1;
|
|
202
|
+
readonly fromResult: <R, E>(result: Result<R, E>) => Either$1<E, R>;
|
|
203
|
+
readonly toResult: <L, R>(either: Either$1<L, R>) => Result<R, L>;
|
|
204
|
+
readonly fromOption: <R, L>(option: Option<R>, onNone: () => L) => Either$1<L, R>;
|
|
205
|
+
readonly toOption: <L, R>(either: Either$1<L, R>) => Option<R>;
|
|
206
|
+
readonly fromNullable: <R, L>(value: R | null | undefined, onNull: () => L) => Either$1<L, R>;
|
|
207
|
+
readonly fromPredicate: <R, L>(value: R, predicate: (value: R) => boolean, onFail: (value: R) => L) => Either$1<L, R>;
|
|
208
|
+
};
|
|
209
|
+
//#endregion
|
|
210
|
+
export { EitherFilter as a, EitherMapLeft as c, EitherTapLeft as d, EitherBimap as i, EitherOrElse as l, all as n, EitherFlatMap as o, Either$1 as r, EitherMap as s, Either as t, EitherTap as u };
|
|
211
|
+
//# sourceMappingURL=index-CvGTIg9L.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index-CvGTIg9L.d.mts","names":[],"sources":["../src/either/either.types.ts","../src/either/either.ts"],"sourcesContent":[],"mappings":"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"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { d as AsyncComputation, f as AsyncGenGenerator, h as SyncComputation, m as GenGenerator } from "./result.types-Ce7AEOzj.mjs";
|
|
2
|
+
|
|
3
|
+
//#region src/gen/gen.d.ts
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Create a computation from a sync generator function.
|
|
7
|
+
* Returns a SyncComputation where run() returns Result directly (no Promise).
|
|
8
|
+
*
|
|
9
|
+
* @template A - The success value type
|
|
10
|
+
* @template E - The error type
|
|
11
|
+
* @param generatorFn - A function that returns a sync generator
|
|
12
|
+
* @returns SyncComputation<A, E>
|
|
13
|
+
*
|
|
14
|
+
* @see {@link run} for immediate execution without storing the computation
|
|
15
|
+
*
|
|
16
|
+
* @example
|
|
17
|
+
* ```ts
|
|
18
|
+
* const result = gen(function* () {
|
|
19
|
+
* const a = yield* Result.yield(divide(10, 2))
|
|
20
|
+
* const b = yield* Result.yield(divide(a, 2))
|
|
21
|
+
* return b
|
|
22
|
+
* }).run()
|
|
23
|
+
* // Type: Result<number, "DivisionByZero">
|
|
24
|
+
* ```
|
|
25
|
+
*/
|
|
26
|
+
declare function gen<A, E>(generatorFn: () => GenGenerator<A, E>): SyncComputation<A, E>;
|
|
27
|
+
/**
|
|
28
|
+
* Create a computation from an async generator function.
|
|
29
|
+
* Returns an AsyncComputation where run() returns Promise<Result>.
|
|
30
|
+
*
|
|
31
|
+
* @template A - The success value type
|
|
32
|
+
* @template E - The error type
|
|
33
|
+
* @param generatorFn - A function that returns an async generator
|
|
34
|
+
* @returns AsyncComputation<A, E>
|
|
35
|
+
*
|
|
36
|
+
* @see {@link run} for immediate execution without storing the computation
|
|
37
|
+
*
|
|
38
|
+
* @example
|
|
39
|
+
* ```ts
|
|
40
|
+
* const result = await gen(async function* () {
|
|
41
|
+
* const data = yield* Result.yield(await fetchData(1))
|
|
42
|
+
* return data
|
|
43
|
+
* }).run()
|
|
44
|
+
* // Type: Promise<Result<string, "NetworkError">>
|
|
45
|
+
* ```
|
|
46
|
+
*/
|
|
47
|
+
declare function gen<A, E>(generatorFn: () => AsyncGenGenerator<A, E>): AsyncComputation<A, E>;
|
|
48
|
+
//#endregion
|
|
49
|
+
export { gen as t };
|
|
50
|
+
//# sourceMappingURL=index-DPVT0yK4.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index-DPVT0yK4.d.mts","names":[],"sources":["../src/gen/gen.ts"],"sourcesContent":[],"mappings":";;;;;;AAyBA;;;;;;;;AAsBA;;;;;;;;;;;iBAtBgB,6BAA6B,aAAa,GAAG,KAAK,gBAAgB,GAAG;;;;;;;;;;;;;;;;;;;;;iBAsBrE,6BAA6B,kBAAkB,GAAG,KAAK,iBAAiB,GAAG"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import { a as ResultFilter, c as ResultMapErr, i as Result$1, l as ResultOrElse, n as AllObjectReturn, o as ResultFlatMap, r as FromTryReturn, s as ResultMap, t as AllArrayReturn, u as ResultTap } from "./result.types-Ce7AEOzj.mjs";
|
|
2
|
+
|
|
3
|
+
//#region src/result/result.d.ts
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Combine multiple Results into a single Result.
|
|
7
|
+
* Supports both array and object inputs.
|
|
8
|
+
*
|
|
9
|
+
* - If all Results are ok, returns ok with all values
|
|
10
|
+
* - If any Result is an error, returns the first error (short-circuits)
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* ```ts
|
|
14
|
+
* // Array form (use `as const` for tuple types) - returns Result<[number, string], E>
|
|
15
|
+
* const [num, str] = pipe(
|
|
16
|
+
* Result.all([parseNumber(input), parseString(other)] as const),
|
|
17
|
+
* Result.unwrapOr([0, ''])
|
|
18
|
+
* )
|
|
19
|
+
*
|
|
20
|
+
* // Object form - returns Result<{ user: User, config: Config }, E>
|
|
21
|
+
* pipe(
|
|
22
|
+
* Result.all({ user: fetchUser(id), config: loadConfig() }),
|
|
23
|
+
* Result.tap(({ user, config }) => console.log(user.name, config.theme))
|
|
24
|
+
* )
|
|
25
|
+
* ```
|
|
26
|
+
*/
|
|
27
|
+
declare function all<T extends readonly Result$1<unknown, unknown>[]>(results: T): AllArrayReturn<T>;
|
|
28
|
+
declare function all<T extends Record<string, Result$1<unknown, unknown>>>(results: T): AllObjectReturn<T>;
|
|
29
|
+
/**
|
|
30
|
+
* Result namespace containing all utility functions for working with Result types.
|
|
31
|
+
*
|
|
32
|
+
* Result represents either success (ok) or failure (err). Use this for operations
|
|
33
|
+
* that can fail with typed errors.
|
|
34
|
+
*
|
|
35
|
+
* @see {@link Option} for presence/absence semantics (no error information)
|
|
36
|
+
* @see {@link Either} for two valid outcomes (not just success/failure)
|
|
37
|
+
*
|
|
38
|
+
* @example
|
|
39
|
+
* ```ts
|
|
40
|
+
* import { Result, pipe } from '@repo/std'
|
|
41
|
+
* import type { Result as ResultType } from '@repo/std'
|
|
42
|
+
*
|
|
43
|
+
* const divide = (a: number, b: number): ResultType<number, string> =>
|
|
44
|
+
* b === 0 ? Result.err('division by zero') : Result.ok(a / b)
|
|
45
|
+
*
|
|
46
|
+
* const result = pipe(
|
|
47
|
+
* divide(10, 2),
|
|
48
|
+
* Result.map(n => n * 2),
|
|
49
|
+
* Result.unwrapOr(0)
|
|
50
|
+
* )
|
|
51
|
+
* ```
|
|
52
|
+
*/
|
|
53
|
+
declare const Result: {
|
|
54
|
+
readonly ok: <T>(value: T) => Result$1<T, never>;
|
|
55
|
+
readonly err: <E>(error: E) => Result$1<never, E>;
|
|
56
|
+
readonly isOk: <T, E>(result: Result$1<T, E>) => result is Extract<Result$1<T, E>, {
|
|
57
|
+
ok: true;
|
|
58
|
+
}>;
|
|
59
|
+
readonly isErr: <T, E>(result: Result$1<T, E>) => result is Extract<Result$1<T, E>, {
|
|
60
|
+
ok: false;
|
|
61
|
+
}>;
|
|
62
|
+
readonly map: ResultMap;
|
|
63
|
+
readonly mapErr: ResultMapErr;
|
|
64
|
+
readonly flatMap: ResultFlatMap;
|
|
65
|
+
readonly tap: ResultTap;
|
|
66
|
+
readonly orElse: ResultOrElse;
|
|
67
|
+
readonly filter: ResultFilter;
|
|
68
|
+
readonly all: typeof all;
|
|
69
|
+
readonly unwrapOr: <T>(defaultValue: T) => <E>(result: Result$1<T, E>) => T;
|
|
70
|
+
readonly unwrapOrElse: <E, T>(fn: (error: E) => T) => (result: Result$1<T, E>) => T;
|
|
71
|
+
readonly match: <T, E, U>(handlers: {
|
|
72
|
+
ok: (value: T) => U;
|
|
73
|
+
err: (error: E) => U;
|
|
74
|
+
}) => (result: Result$1<T, E>) => U;
|
|
75
|
+
readonly fromTry: <T>(fn: () => T) => FromTryReturn<T>;
|
|
76
|
+
};
|
|
77
|
+
//#endregion
|
|
78
|
+
export { all as n, Result as t };
|
|
79
|
+
//# sourceMappingURL=index-DgOAEEpu.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index-DgOAEEpu.d.mts","names":[],"sources":["../src/result/result.ts"],"sourcesContent":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;iBAqVgB,uBAAuB,uCAAyC,IAAI,eAAe;iBACnF,cAAc,eAAe,sCAAwC,IAAI,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;cA2K5F;0BApegB,MAAI,SAAW;2BAoBd,MAAI,gBAAkB;gCA2BjB,SAAW,GAAG,iBAAe,QAAQ,SAAW,GAAG;;;iCAgBlD,SAAW,GAAG,iBAAe,QAAQ,SAAW,GAAG;;;;;;;;;;uCAiSnE,kBACN,SAAW,GAAG,OAAK;4CAkBZ,MAAM,eAChB,SAAW,GAAG,OAAK;;gBAqBM,MAAM;iBAAgB,MAAM;iBACrD,SAAW,GAAG,OAAK;kCA+CO,MAAI,cAAc"}
|