resultar 1.1.5 → 1.3.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 +75 -0
- package/dist/{chunk-UPMJ4PST.js → chunk-L5HTB5V7.js} +56 -23
- package/dist/chunk-L5HTB5V7.js.map +1 -0
- package/dist/{chunk-3NDPPYVV.js → chunk-VBI3T5VS.js} +2 -1
- package/dist/chunk-VBI3T5VS.js.map +1 -0
- package/dist/error.cjs +1 -0
- package/dist/error.cjs.map +1 -1
- package/dist/error.d.cts +1 -1
- package/dist/error.d.ts +1 -1
- package/dist/error.js +1 -1
- package/dist/{index-CKLj0kyj.d.cts → index-DUO8gZOZ.d.cts} +170 -126
- package/dist/{index-CKLj0kyj.d.ts → index-DUO8gZOZ.d.ts} +170 -126
- package/dist/index.cjs +54 -18
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +8 -4
- package/dist/result-async.cjs +51 -17
- package/dist/result-async.cjs.map +1 -1
- package/dist/result-async.d.cts +1 -1
- package/dist/result-async.d.ts +1 -1
- package/dist/result-async.js +6 -4
- package/dist/result.cjs +51 -17
- package/dist/result.cjs.map +1 -1
- package/dist/result.d.cts +1 -1
- package/dist/result.d.ts +1 -1
- package/dist/result.js +6 -4
- package/dist/utils.cjs +46 -14
- package/dist/utils.cjs.map +1 -1
- package/dist/utils.d.cts +1 -1
- package/dist/utils.d.ts +1 -1
- package/dist/utils.js +2 -2
- package/package.json +32 -24
- package/dist/chunk-3NDPPYVV.js.map +0 -1
- package/dist/chunk-UPMJ4PST.js.map +0 -1
|
@@ -1,131 +1,82 @@
|
|
|
1
|
-
type
|
|
2
|
-
type MemberListOf<T> = ((T extends unknown ? (t: T) => T : never) extends infer U ? (U extends unknown ? (u: U) => unknown : never) extends (v: infer V) => unknown ? V : never : never) extends (_: unknown) => infer W ? [...MemberListOf<Exclude<T, W>>, W] : [];
|
|
3
|
-
type ExtractOkTypes<T extends ReadonlyArray<Result<unknown, unknown>>> = {
|
|
1
|
+
type ExtractOkTypes<T extends readonly Result<unknown, unknown>[]> = {
|
|
4
2
|
[idx in keyof T]: T[idx] extends Result<infer U, unknown> ? U : never;
|
|
5
3
|
};
|
|
6
|
-
type ExtractOkAsyncTypes<T extends
|
|
4
|
+
type ExtractOkAsyncTypes<T extends readonly ResultAsync<unknown, unknown>[]> = {
|
|
7
5
|
[idx in keyof T]: T[idx] extends ResultAsync<infer U, unknown> ? U : never;
|
|
8
6
|
};
|
|
9
|
-
type ExtractErrTypes<T extends
|
|
7
|
+
type ExtractErrTypes<T extends readonly Result<unknown, unknown>[]> = {
|
|
10
8
|
[idx in keyof T]: T[idx] extends Result<unknown, infer E> ? E : never;
|
|
11
9
|
};
|
|
12
|
-
type ExtractErrAsyncTypes<T extends
|
|
10
|
+
type ExtractErrAsyncTypes<T extends readonly ResultAsync<unknown, unknown>[]> = {
|
|
13
11
|
[idx in keyof T]: T[idx] extends ResultAsync<unknown, infer E> ? E : never;
|
|
14
12
|
};
|
|
15
13
|
type InferOkTypes<R> = R extends Result<infer T, unknown> ? T : never;
|
|
16
14
|
type InferErrTypes<R> = R extends Result<unknown, infer E> ? E : never;
|
|
17
15
|
type InferAsyncOkTypes<R> = R extends ResultAsync<infer T, unknown> ? T : never;
|
|
18
16
|
type InferAsyncErrTypes<R> = R extends ResultAsync<unknown, infer E> ? E : never;
|
|
19
|
-
type IsLiteralArray<T> = T extends {
|
|
20
|
-
length: infer L;
|
|
21
|
-
} ? L extends number ? number extends L ? 0 : 1 : 0 : 0;
|
|
22
|
-
type EmptyArrayToNever<T, NeverArrayToNever extends number = 0> = T extends [] ? never : NeverArrayToNever extends 1 ? T extends [never, ...infer Rest] ? [EmptyArrayToNever<Rest>] extends [never] ? never : T : T : T;
|
|
23
|
-
type Prev = [
|
|
24
|
-
never,
|
|
25
|
-
0,
|
|
26
|
-
1,
|
|
27
|
-
2,
|
|
28
|
-
3,
|
|
29
|
-
4,
|
|
30
|
-
5,
|
|
31
|
-
6,
|
|
32
|
-
7,
|
|
33
|
-
8,
|
|
34
|
-
9,
|
|
35
|
-
10,
|
|
36
|
-
11,
|
|
37
|
-
12,
|
|
38
|
-
13,
|
|
39
|
-
14,
|
|
40
|
-
15,
|
|
41
|
-
16,
|
|
42
|
-
17,
|
|
43
|
-
18,
|
|
44
|
-
19,
|
|
45
|
-
20,
|
|
46
|
-
21,
|
|
47
|
-
22,
|
|
48
|
-
23,
|
|
49
|
-
24,
|
|
50
|
-
25,
|
|
51
|
-
26,
|
|
52
|
-
27,
|
|
53
|
-
28,
|
|
54
|
-
29,
|
|
55
|
-
30,
|
|
56
|
-
31,
|
|
57
|
-
32,
|
|
58
|
-
33,
|
|
59
|
-
34,
|
|
60
|
-
35,
|
|
61
|
-
36,
|
|
62
|
-
37,
|
|
63
|
-
38,
|
|
64
|
-
39,
|
|
65
|
-
40,
|
|
66
|
-
41,
|
|
67
|
-
42,
|
|
68
|
-
43,
|
|
69
|
-
44,
|
|
70
|
-
45,
|
|
71
|
-
46,
|
|
72
|
-
47,
|
|
73
|
-
48,
|
|
74
|
-
49,
|
|
75
|
-
...Array<0>
|
|
76
|
-
];
|
|
77
|
-
type Transpose<A, Transposed extends unknown[][] = [], Depth extends number = 10> = A extends [infer T, ...infer Rest] ? T extends [infer L, infer R] ? Transposed extends [infer PL, infer PR] ? PL extends unknown[] ? PR extends unknown[] ? Transpose<Rest, [[...PL, L], [...PR, R]], Prev[Depth]> : never : never : Transpose<Rest, [[L], [R]], Prev[Depth]> : Transposed : Transposed;
|
|
78
|
-
type CollectResults<T, Collected extends unknown[] = [], Depth extends number = 50> = [
|
|
79
|
-
Depth
|
|
80
|
-
] extends [never] ? [] : T extends [infer H, ...infer Rest] ? H extends Result<infer L, infer R> ? CollectResults<Rest, [
|
|
81
|
-
...Collected,
|
|
82
|
-
[L, R]
|
|
83
|
-
], Prev[Depth]> : never : Collected;
|
|
84
|
-
type UnknownMembersToNever<T> = T extends [infer H, ...infer R] ? [[unknown] extends [H] ? never : H, ...UnknownMembersToNever<R>] : T;
|
|
85
|
-
type MembersToUnion<T> = T extends unknown[] ? T[number] : never;
|
|
86
|
-
type Combine<T, Depth extends number = 5> = Transpose<CollectResults<T>, [], Depth> extends [
|
|
87
|
-
infer L,
|
|
88
|
-
infer R
|
|
89
|
-
] ? [UnknownMembersToNever<L>, UnknownMembersToNever<R>] : Transpose<CollectResults<T>, [], Depth> extends [] ? [[], []] : never;
|
|
90
|
-
type Traverse<T, Depth extends number = 5> = Combine<T, Depth> extends [infer Oks, infer Errs] ? Result<EmptyArrayToNever<Oks, 1>, MembersToUnion<Errs>> : never;
|
|
91
|
-
type TraverseWithAllErrors<T, Depth extends number = 5> = Combine<T, Depth> extends [
|
|
92
|
-
infer Oks,
|
|
93
|
-
infer Errs
|
|
94
|
-
] ? Result<EmptyArrayToNever<Oks>, EmptyArrayToNever<Errs>> : never;
|
|
95
|
-
type CombineResults<T extends ReadonlyArray<Result<unknown, unknown>>> = IsLiteralArray<T> extends 1 ? Traverse<T> : Result<ExtractOkTypes<T>, ExtractErrTypes<T>[number]>;
|
|
96
|
-
type CombineResultsWithAllErrorsArray<T extends ReadonlyArray<Result<unknown, unknown>>> = IsLiteralArray<T> extends 1 ? TraverseWithAllErrors<T> : Result<ExtractOkTypes<T>, Array<ExtractErrTypes<T>[number]>>;
|
|
97
|
-
declare const combineResultAsyncList: <T, E>(asyncResultList: ReadonlyArray<ResultAsync<T, E>>) => ResultAsync<readonly T[], E>;
|
|
98
17
|
/**
|
|
99
18
|
* Short circuits on the FIRST Err value that we find
|
|
100
19
|
*/
|
|
101
|
-
declare const combineResultList: <T, E>(resultList:
|
|
102
|
-
declare const
|
|
20
|
+
declare const combineResultList: <T, E>(resultList: readonly Result<T, E>[]) => Result<readonly T[], E>;
|
|
21
|
+
declare const combineResultAsyncList: <T, E>(asyncResultList: readonly ResultAsync<T, E>[]) => ResultAsync<readonly T[], E>;
|
|
103
22
|
/**
|
|
104
23
|
* Give a list of all the errors we find
|
|
105
24
|
*/
|
|
106
|
-
declare const combineResultListWithAllErrors: <T, E>(resultList:
|
|
25
|
+
declare const combineResultListWithAllErrors: <T, E>(resultList: readonly Result<T, E>[]) => Result<readonly T[], E[]>;
|
|
26
|
+
declare const combineResultAsyncListWithAllErrors: <T, E>(asyncResultList: readonly ResultAsync<T, E>[]) => ResultAsync<readonly T[], E[]>;
|
|
107
27
|
|
|
108
|
-
type CombineResultAsyncs<T extends ReadonlyArray<ResultAsync<unknown, unknown>>> = IsLiteralArray<T> extends 1 ? TraverseAsync<UnwrapAsync<T>> : ResultAsync<ExtractOkAsyncTypes<T>, ExtractErrAsyncTypes<T>[number]>;
|
|
109
|
-
type CombineResultsWithAllErrorsArrayAsync<T extends ReadonlyArray<ResultAsync<unknown, unknown>>> = IsLiteralArray<T> extends 1 ? TraverseWithAllErrorsAsync<UnwrapAsync<T>> : ResultAsync<ExtractOkAsyncTypes<T>, Array<ExtractErrAsyncTypes<T>[number]>>;
|
|
110
|
-
type UnwrapAsync<T> = IsLiteralArray<T> extends 1 ? Writable<T> extends [infer H, ...infer Rest] ? H extends PromiseLike<infer HI> ? HI extends Result<unknown, unknown> ? [Dedup<HI>, ...UnwrapAsync<Rest>] : never : never : [] : T extends Array<infer A> ? A extends PromiseLike<infer HI> ? HI extends Result<infer L, infer R> ? Array<Result<L, R>> : never : never : never;
|
|
111
|
-
type TraverseAsync<T, Depth extends number = 5> = IsLiteralArray<T> extends 1 ? Combine<T, Depth> extends [infer Oks, infer Errs] ? ResultAsync<EmptyArrayToNever<Oks>, MembersToUnion<Errs>> : never : T extends Array<infer I> ? Combine<MemberListOf<I>, Depth> extends [infer Oks, infer Errs] ? Oks extends unknown[] ? Errs extends unknown[] ? ResultAsync<EmptyArrayToNever<Array<Oks[number]>>, MembersToUnion<Array<Errs[number]>>> : ResultAsync<EmptyArrayToNever<Array<Oks[number]>>, Errs> : Errs extends unknown[] ? ResultAsync<Oks, MembersToUnion<Array<Errs[number]>>> : ResultAsync<Oks, Errs> : never : never;
|
|
112
|
-
type TraverseWithAllErrorsAsync<T, Depth extends number = 5> = IsLiteralArray<T> extends 1 ? Combine<T, Depth> extends [infer Oks, infer Errs] ? ResultAsync<EmptyArrayToNever<Oks>, EmptyArrayToNever<Errs>> : never : Writable<T> extends Array<infer I> ? Combine<MemberListOf<I>, Depth> extends [infer Oks, infer Errs] ? Oks extends unknown[] ? Errs extends unknown[] ? ResultAsync<EmptyArrayToNever<Array<Oks[number]>>, EmptyArrayToNever<Array<Errs[number]>>> : ResultAsync<EmptyArrayToNever<Array<Oks[number]>>, Errs> : Errs extends unknown[] ? ResultAsync<Oks, EmptyArrayToNever<Array<Errs[number]>>> : ResultAsync<Oks, Errs> : never : never;
|
|
113
|
-
type Writable<T> = T extends readonly unknown[] ? [...T] : T;
|
|
114
28
|
declare class DisposableResultAsync<T, E> implements PromiseLike<Result<T, E>> {
|
|
115
29
|
private readonly innerPromise;
|
|
116
30
|
constructor(res: Promise<Result<T, E>>);
|
|
117
31
|
then<A, B>(// eslint-disable-line unicorn/no-thenable
|
|
118
32
|
successCallback?: (res: Result<T, E>) => A | PromiseLike<A>, failureCallback?: (reason: unknown) => B | PromiseLike<B>): PromiseLike<A | B>;
|
|
119
33
|
}
|
|
34
|
+
/**
|
|
35
|
+
* The ResultAsync type.
|
|
36
|
+
* This is a union of `Result` and `PromiseLike<Result>`
|
|
37
|
+
*/
|
|
120
38
|
declare class ResultAsync<T, E> implements PromiseLike<Result<T, E>> {
|
|
39
|
+
/**
|
|
40
|
+
* Returns a ResultAsync instance that is immediately resolved with a Result.ok(value).
|
|
41
|
+
*
|
|
42
|
+
* @param {T} value - The value to be wrapped in a Result.ok.
|
|
43
|
+
* @return {ResultAsync<T, E>} A ResultAsync instance with the given value and error type E.
|
|
44
|
+
*/
|
|
121
45
|
static okAsync<T, E = never>(value: T): ResultAsync<T, E>;
|
|
46
|
+
/**
|
|
47
|
+
* Returns a ResultAsync that is immediately resolved with a Result.ok(undefined) value.
|
|
48
|
+
*
|
|
49
|
+
* @return {ResultAsync<undefined, E>} A ResultAsync instance with undefined as the value type and E as the error type.
|
|
50
|
+
*/
|
|
51
|
+
static unitAsync<E = never>(): ResultAsync<undefined, E>;
|
|
52
|
+
/**
|
|
53
|
+
* Returns a ResultAsync instance that is immediately resolved with a Result.err(error).
|
|
54
|
+
*
|
|
55
|
+
* @param {E} error - The error to be wrapped in a Result.err.
|
|
56
|
+
* @return {ResultAsync<T, E>} A ResultAsync instance with the given error and value type T.
|
|
57
|
+
*/
|
|
122
58
|
static errAsync<T = never, E = unknown>(error: E): ResultAsync<T, E>;
|
|
59
|
+
/**
|
|
60
|
+
* Returns a ResultAsync instance that is resolved with a Result.ok(value) or Result.err(error)
|
|
61
|
+
* based on the provided promise.
|
|
62
|
+
*
|
|
63
|
+
* @param {Promise<T>} promise - The promise to be wrapped in a ResultAsync.
|
|
64
|
+
* @return {ResultAsync<T, E>} A ResultAsync instance with the given promise and error type E.
|
|
65
|
+
*/
|
|
123
66
|
static fromSafePromise<T, E = never>(promise: PromiseLike<T>): ResultAsync<T, E>;
|
|
67
|
+
/**
|
|
68
|
+
* Returns a ResultAsync instance that is resolved with a Result.ok(value) or Result.err(error)
|
|
69
|
+
* based on the provided promise.
|
|
70
|
+
*
|
|
71
|
+
* @param {Promise<T>} promise - The promise to be wrapped in a ResultAsync.
|
|
72
|
+
* @param {(e: unknown) => E} errorFn - A function that transforms the error from the promise into the error type E.
|
|
73
|
+
* @return {ResultAsync<T, E>} A ResultAsync instance with the given promise and error type E.
|
|
74
|
+
*/
|
|
124
75
|
static fromPromise<T, E>(promise: PromiseLike<T>, errorFn: (e: unknown) => E): ResultAsync<T, E>;
|
|
125
|
-
static combine<T extends readonly [ResultAsync<unknown, unknown>, ...
|
|
126
|
-
static combine<T extends
|
|
127
|
-
static combineWithAllErrors<T extends readonly [ResultAsync<unknown, unknown>, ...
|
|
128
|
-
static combineWithAllErrors<T extends
|
|
76
|
+
static combine<T extends readonly [ResultAsync<unknown, unknown>, ...ResultAsync<unknown, unknown>[]]>(asyncResultList: T): CombineResultAsyncs<T>;
|
|
77
|
+
static combine<T extends readonly ResultAsync<unknown, unknown>[]>(asyncResultList: T): CombineResultAsyncs<T>;
|
|
78
|
+
static combineWithAllErrors<T extends readonly [ResultAsync<unknown, unknown>, ...ResultAsync<unknown, unknown>[]]>(asyncResultList: T): CombineResultsWithAllErrorsArrayAsync<T>;
|
|
79
|
+
static combineWithAllErrors<T extends readonly ResultAsync<unknown, unknown>[]>(asyncResultList: T): CombineResultsWithAllErrorsArrayAsync<T>;
|
|
129
80
|
/**
|
|
130
81
|
* Wraps a async function with a try catch, creating a new function with the same
|
|
131
82
|
* arguments but returning `Ok` if successful, `Err` if the function throws
|
|
@@ -152,7 +103,7 @@ declare class ResultAsync<T, E> implements PromiseLike<Result<T, E>> {
|
|
|
152
103
|
orElse<R extends Result<unknown, unknown>>(f: (e: E) => R): ResultAsync<InferOkTypes<R> | T, InferErrTypes<R>>;
|
|
153
104
|
orElse<R extends ResultAsync<unknown, unknown>>(f: (e: E) => R): ResultAsync<InferAsyncOkTypes<R> | T, InferAsyncErrTypes<R>>;
|
|
154
105
|
orElse<U, A>(f: (e: E) => Result<U, A> | ResultAsync<U, A>): ResultAsync<U | T, A>;
|
|
155
|
-
match<
|
|
106
|
+
match<A, B = A>(ok: (t: T) => A, fnErr: (e: E) => B): Promise<A | B>;
|
|
156
107
|
unwrapOr<A>(t: A): Promise<T | A>;
|
|
157
108
|
/**
|
|
158
109
|
* Performs a side effect for the `Ok` variant of `ResultAsync`.
|
|
@@ -182,24 +133,25 @@ declare class ResultAsync<T, E> implements PromiseLike<Result<T, E>> {
|
|
|
182
133
|
*/
|
|
183
134
|
safeUnwrap(): AsyncGenerator<Result<never, E>, T>;
|
|
184
135
|
}
|
|
136
|
+
/**
|
|
137
|
+
* @deprecated Use `safeTry` instead.
|
|
138
|
+
* @see `safeTry`
|
|
139
|
+
*
|
|
140
|
+
* This will be removed in the next major version.
|
|
141
|
+
*/
|
|
142
|
+
declare function safeTryAsync<T, E>(body: () => AsyncGenerator<Result<never, E>, Result<T, E>>): ResultAsync<T, E>;
|
|
185
143
|
declare const okAsync: typeof ResultAsync.okAsync;
|
|
186
144
|
declare const errAsync: typeof ResultAsync.errAsync;
|
|
187
145
|
declare const fromPromise: typeof ResultAsync.fromPromise;
|
|
188
146
|
declare const fromSafePromise: typeof ResultAsync.fromSafePromise;
|
|
147
|
+
declare const unitAsync: typeof ResultAsync.unitAsync;
|
|
189
148
|
declare const fromThrowableAsync: typeof ResultAsync.fromThrowable;
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
* See `/tests/safeTry.test.ts` for examples.
|
|
197
|
-
*
|
|
198
|
-
* @param body - What is evaluated. In body, `yield* result.safeUnwrap()` works as
|
|
199
|
-
* Rust's `result?` expression.
|
|
200
|
-
* @returns The first occurence of either an yielded Err or a returned `ResultAsync`.
|
|
201
|
-
*/
|
|
202
|
-
declare function safeTryAsync<T, E>(body: () => AsyncGenerator<Result<never, E>, Result<T, E>>): ResultAsync<T, E>;
|
|
149
|
+
type CombineResultAsyncs<T extends readonly ResultAsync<unknown, unknown>[]> = IsLiteralArray<T> extends 1 ? TraverseAsync<UnwrapAsync<T>> : ResultAsync<ExtractOkAsyncTypes<T>, ExtractErrAsyncTypes<T>[number]>;
|
|
150
|
+
type CombineResultsWithAllErrorsArrayAsync<T extends readonly ResultAsync<unknown, unknown>[]> = IsLiteralArray<T> extends 1 ? TraverseWithAllErrorsAsync<UnwrapAsync<T>> : ResultAsync<ExtractOkAsyncTypes<T>, ExtractErrAsyncTypes<T>[number][]>;
|
|
151
|
+
type UnwrapAsync<T> = IsLiteralArray<T> extends 1 ? Writable<T> extends [infer H, ...infer Rest] ? H extends PromiseLike<infer HI> ? HI extends Result<unknown, unknown> ? [Dedup<HI>, ...UnwrapAsync<Rest>] : never : never : [] : T extends (infer A)[] ? A extends PromiseLike<infer HI> ? HI extends Result<infer L, infer R> ? Result<L, R>[] : never : never : never;
|
|
152
|
+
type TraverseAsync<T, Depth extends number = 5> = IsLiteralArray<T> extends 1 ? Combine<T, Depth> extends [infer Oks, infer Errs] ? ResultAsync<EmptyArrayToNever<Oks>, MembersToUnion<Errs>> : never : T extends (infer I)[] ? Combine<MemberListOf<I>, Depth> extends [infer Oks, infer Errs] ? Oks extends unknown[] ? Errs extends unknown[] ? ResultAsync<EmptyArrayToNever<Oks[number][]>, MembersToUnion<Errs[number][]>> : ResultAsync<EmptyArrayToNever<Oks[number][]>, Errs> : Errs extends unknown[] ? ResultAsync<Oks, MembersToUnion<Errs[number][]>> : ResultAsync<Oks, Errs> : never : never;
|
|
153
|
+
type TraverseWithAllErrorsAsync<T, Depth extends number = 5> = TraverseAsync<T, Depth> extends ResultAsync<infer Oks, infer Errs> ? ResultAsync<Oks, Errs[]> : never;
|
|
154
|
+
type Writable<T> = T extends readonly unknown[] ? [...T] : T;
|
|
203
155
|
|
|
204
156
|
/**
|
|
205
157
|
* A Result interface that is used to define the methods that are available on a
|
|
@@ -262,12 +214,24 @@ declare class Result<T, E> implements Resultable<T, E> {
|
|
|
262
214
|
* @param errorFn when an error is thrown, this will wrap the error result if provided
|
|
263
215
|
*/
|
|
264
216
|
static fromThrowable<Fn extends (...args: readonly any[]) => unknown, E>(fn: Fn, errorFn?: (e: any) => E): (...args: Parameters<Fn>) => Result<ReturnType<Fn>, E>;
|
|
217
|
+
/**
|
|
218
|
+
* Creates a new `Result` instance representing a successful operation.
|
|
219
|
+
*
|
|
220
|
+
* @param {T} value - The value to be wrapped in the `Result` instance.
|
|
221
|
+
* @return {Result<T, E>} A new `Result` instance with the provided value.
|
|
222
|
+
*/
|
|
265
223
|
static ok<T, E = never>(value: T): Result<T, E>;
|
|
224
|
+
/**
|
|
225
|
+
* Creates a new `Result` instance representing a successful operation with an undefined value.
|
|
226
|
+
*
|
|
227
|
+
* @return {Result<undefined, E>} A new `Result` instance with an undefined value.
|
|
228
|
+
*/
|
|
229
|
+
static unit<E = never>(): Result<undefined, E>;
|
|
266
230
|
static err<T = never, E = unknown>(error: E): Result<T, E>;
|
|
267
|
-
static combine<T extends readonly [Result<unknown, unknown>, ...
|
|
268
|
-
static combine<T extends
|
|
269
|
-
static combineWithAllErrors<T extends readonly [Result<unknown, unknown>, ...
|
|
270
|
-
static combineWithAllErrors<T extends
|
|
231
|
+
static combine<T extends readonly [Result<unknown, unknown>, ...Result<unknown, unknown>[]]>(resultList: T): CombineResults<T>;
|
|
232
|
+
static combine<T extends readonly Result<unknown, unknown>[]>(resultList: T): CombineResults<T>;
|
|
233
|
+
static combineWithAllErrors<T extends readonly [Result<unknown, unknown>, ...Result<unknown, unknown>[]]>(resultList: T): CombineResultsWithAllErrorsArray<T>;
|
|
234
|
+
static combineWithAllErrors<T extends readonly Result<unknown, unknown>[]>(resultList: T): CombineResultsWithAllErrorsArray<T>;
|
|
271
235
|
readonly value: T;
|
|
272
236
|
readonly error: E;
|
|
273
237
|
private constructor();
|
|
@@ -364,9 +328,9 @@ declare class Result<T, E> implements Resultable<T, E> {
|
|
|
364
328
|
* @param ok
|
|
365
329
|
* @param err
|
|
366
330
|
*/
|
|
367
|
-
match<
|
|
331
|
+
match<A, B = A>(fnOk: (t: T) => A, fnErr: (e: E) => B): A | B;
|
|
368
332
|
/**
|
|
369
|
-
* Performs a side effect
|
|
333
|
+
* Performs a side effect for the `Ok` or `Err` variant of `Result`.
|
|
370
334
|
*
|
|
371
335
|
* @param fn The function to apply an `OK` value
|
|
372
336
|
* @returns the result of applying `f` or an `Err` untouched
|
|
@@ -420,16 +384,13 @@ declare class DisposableResult<T, E> implements Resultable<T, E>, Disposable {
|
|
|
420
384
|
constructor(result: Resultable<T, E>, finalizer: (value: T, error: E) => void);
|
|
421
385
|
get value(): T;
|
|
422
386
|
get error(): E;
|
|
423
|
-
_unsafeUnwrap(config?: ErrorConfig
|
|
424
|
-
_unsafeUnwrapErr(config?: ErrorConfig
|
|
387
|
+
_unsafeUnwrap(config?: ErrorConfig): T;
|
|
388
|
+
_unsafeUnwrapErr(config?: ErrorConfig): E;
|
|
425
389
|
isOk(): boolean;
|
|
426
390
|
isErr(): boolean;
|
|
427
391
|
unwrapOr<A>(defaultValue: A): T | A;
|
|
428
392
|
[Symbol.dispose](): void;
|
|
429
393
|
}
|
|
430
|
-
declare const ok: typeof Result.ok;
|
|
431
|
-
declare const err: typeof Result.err;
|
|
432
|
-
declare const fromThrowable: typeof Result.fromThrowable;
|
|
433
394
|
/**
|
|
434
395
|
* Evaluates the given generator to a Result returned or an Err yielded from it,
|
|
435
396
|
* whichever comes first.
|
|
@@ -443,6 +404,7 @@ declare const fromThrowable: typeof Result.fromThrowable;
|
|
|
443
404
|
* @returns The first occurence of either an yielded Err or a returned Result.
|
|
444
405
|
*/
|
|
445
406
|
declare function safeTry<T, E>(body: () => Generator<Result<never, E>, Result<T, E>>): Result<T, E>;
|
|
407
|
+
declare function safeTry<YieldErr extends Result<never, unknown>, GeneratorReturnResult extends Result<unknown, unknown>>(body: () => Generator<YieldErr, GeneratorReturnResult>): Result<InferOkTypes<GeneratorReturnResult>, InferErrTypes<YieldErr> | InferErrTypes<GeneratorReturnResult>>;
|
|
446
408
|
/**
|
|
447
409
|
* Evaluates the given generator to a Result returned or an Err yielded from it,
|
|
448
410
|
* whichever comes first.
|
|
@@ -455,12 +417,94 @@ declare function safeTry<T, E>(body: () => Generator<Result<never, E>, Result<T,
|
|
|
455
417
|
* `yield* resultAsync.safeUnwrap()` work as Rust's `result?` expression.
|
|
456
418
|
* @returns The first occurence of either an yielded Err or a returned Result.
|
|
457
419
|
*/
|
|
458
|
-
declare function safeTry<T, E>(body: () => AsyncGenerator<Result<never, E>, Result<T, E>>):
|
|
420
|
+
declare function safeTry<T, E>(body: () => AsyncGenerator<Result<never, E>, Result<T, E>>): ResultAsync<T, E>;
|
|
421
|
+
declare function safeTry<YieldErr extends Result<never, unknown>, GeneratorReturnResult extends Result<unknown, unknown>>(body: () => AsyncGenerator<YieldErr, GeneratorReturnResult>): ResultAsync<InferOkTypes<GeneratorReturnResult>, InferErrTypes<YieldErr> | InferErrTypes<GeneratorReturnResult>>;
|
|
422
|
+
declare const ok: typeof Result.ok;
|
|
423
|
+
declare const err: typeof Result.err;
|
|
424
|
+
declare const fromThrowable: typeof Result.fromThrowable;
|
|
425
|
+
declare const unit: typeof Result.unit;
|
|
426
|
+
type Prev = [
|
|
427
|
+
never,
|
|
428
|
+
0,
|
|
429
|
+
1,
|
|
430
|
+
2,
|
|
431
|
+
3,
|
|
432
|
+
4,
|
|
433
|
+
5,
|
|
434
|
+
6,
|
|
435
|
+
7,
|
|
436
|
+
8,
|
|
437
|
+
9,
|
|
438
|
+
10,
|
|
439
|
+
11,
|
|
440
|
+
12,
|
|
441
|
+
13,
|
|
442
|
+
14,
|
|
443
|
+
15,
|
|
444
|
+
16,
|
|
445
|
+
17,
|
|
446
|
+
18,
|
|
447
|
+
19,
|
|
448
|
+
20,
|
|
449
|
+
21,
|
|
450
|
+
22,
|
|
451
|
+
23,
|
|
452
|
+
24,
|
|
453
|
+
25,
|
|
454
|
+
26,
|
|
455
|
+
27,
|
|
456
|
+
28,
|
|
457
|
+
29,
|
|
458
|
+
30,
|
|
459
|
+
31,
|
|
460
|
+
32,
|
|
461
|
+
33,
|
|
462
|
+
34,
|
|
463
|
+
35,
|
|
464
|
+
36,
|
|
465
|
+
37,
|
|
466
|
+
38,
|
|
467
|
+
39,
|
|
468
|
+
40,
|
|
469
|
+
41,
|
|
470
|
+
42,
|
|
471
|
+
43,
|
|
472
|
+
44,
|
|
473
|
+
45,
|
|
474
|
+
46,
|
|
475
|
+
47,
|
|
476
|
+
48,
|
|
477
|
+
49,
|
|
478
|
+
...0[]
|
|
479
|
+
];
|
|
480
|
+
type CollectResults<T, Collected extends unknown[] = [], Depth extends number = 50> = [
|
|
481
|
+
Depth
|
|
482
|
+
] extends [never] ? [] : T extends [infer H, ...infer Rest] ? H extends Result<infer L, infer R> ? CollectResults<Rest, [
|
|
483
|
+
...Collected,
|
|
484
|
+
[L, R]
|
|
485
|
+
], Prev[Depth]> : never : Collected;
|
|
486
|
+
type Transpose<A, Transposed extends unknown[][] = [], Depth extends number = 10> = A extends [infer T, ...infer Rest] ? T extends [infer L, infer R] ? Transposed extends [infer PL, infer PR] ? PL extends unknown[] ? PR extends unknown[] ? Transpose<Rest, [[...PL, L], [...PR, R]], Prev[Depth]> : never : never : Transpose<Rest, [[L], [R]], Prev[Depth]> : Transposed : Transposed;
|
|
487
|
+
type Combine<T, Depth extends number = 5> = Transpose<CollectResults<T>, [], Depth> extends [
|
|
488
|
+
infer L,
|
|
489
|
+
infer R
|
|
490
|
+
] ? [UnknownMembersToNever<L>, UnknownMembersToNever<R>] : Transpose<CollectResults<T>, [], Depth> extends [] ? [[], []] : never;
|
|
491
|
+
type Dedup<T> = T extends Result<infer RL, infer RR> ? Result<RL, RR> : T;
|
|
492
|
+
type MemberListOf<T> = ((T extends unknown ? (t: T) => T : never) extends infer U ? (U extends unknown ? (u: U) => unknown : never) extends (v: infer V) => unknown ? V : never : never) extends (_: unknown) => infer W ? [...MemberListOf<Exclude<T, W>>, W] : [];
|
|
493
|
+
type EmptyArrayToNever<T, NeverArrayToNever extends number = 0> = T extends [] ? never : NeverArrayToNever extends 1 ? T extends [never, ...infer Rest] ? [EmptyArrayToNever<Rest>] extends [never] ? never : T : T : T;
|
|
494
|
+
type UnknownMembersToNever<T> = T extends [infer H, ...infer R] ? [[unknown] extends [H] ? never : H, ...UnknownMembersToNever<R>] : T;
|
|
495
|
+
type MembersToUnion<T> = T extends unknown[] ? T[number] : never;
|
|
496
|
+
type IsLiteralArray<T> = T extends {
|
|
497
|
+
length: infer L;
|
|
498
|
+
} ? L extends number ? number extends L ? 0 : 1 : 0 : 0;
|
|
499
|
+
type Traverse<T, Depth extends number = 5> = Combine<T, Depth> extends [infer Oks, infer Errs] ? Result<EmptyArrayToNever<Oks, 1>, MembersToUnion<Errs>> : never;
|
|
500
|
+
type TraverseWithAllErrors<T, Depth extends number = 5> = Traverse<T, Depth> extends Result<infer Oks, infer Errs> ? Result<Oks, Errs[]> : never;
|
|
501
|
+
type CombineResults<T extends readonly Result<unknown, unknown>[]> = IsLiteralArray<T> extends 1 ? Traverse<T> : Result<ExtractOkTypes<T>, ExtractErrTypes<T>[number]>;
|
|
502
|
+
type CombineResultsWithAllErrorsArray<T extends readonly Result<unknown, unknown>[]> = IsLiteralArray<T> extends 1 ? TraverseWithAllErrors<T> : Result<ExtractOkTypes<T>, ExtractErrTypes<T>[number][]>;
|
|
459
503
|
|
|
460
504
|
interface ErrorConfig {
|
|
461
505
|
withStackTrace: boolean;
|
|
462
506
|
}
|
|
463
|
-
interface ResultarError<T, E> {
|
|
507
|
+
interface ResultarError<T, E> extends Error {
|
|
464
508
|
data: {
|
|
465
509
|
type: string;
|
|
466
510
|
value: T | undefined;
|
|
@@ -473,4 +517,4 @@ interface ResultarError<T, E> {
|
|
|
473
517
|
}
|
|
474
518
|
declare const createResultarError: <T, E>(message: string, result: Result<T, E>, config?: ErrorConfig) => ResultarError<T, E>;
|
|
475
519
|
|
|
476
|
-
export {
|
|
520
|
+
export { type Dedup as A, type EmptyArrayToNever as B, type CombineResultAsyncs as C, DisposableResultAsync as D, type ExtractOkTypes as E, type MembersToUnion as F, type IsLiteralArray as G, type CombineResults as H, type InferOkTypes as I, type CombineResultsWithAllErrorsArray as J, type ErrorConfig as K, createResultarError as L, type MemberListOf as M, ResultAsync as R, type Transpose as T, type ExtractOkAsyncTypes as a, type ExtractErrTypes as b, type ExtractErrAsyncTypes as c, type InferErrTypes as d, type InferAsyncOkTypes as e, type InferAsyncErrTypes as f, combineResultList as g, combineResultAsyncList as h, combineResultListWithAllErrors as i, combineResultAsyncListWithAllErrors as j, errAsync as k, fromPromise as l, fromSafePromise as m, fromThrowableAsync as n, okAsync as o, type CombineResultsWithAllErrorsArrayAsync as p, Result as q, DisposableResult as r, safeTryAsync as s, safeTry as t, unitAsync as u, ok as v, err as w, fromThrowable as x, unit as y, type Combine as z };
|
package/dist/index.cjs
CHANGED
|
@@ -31,7 +31,9 @@ __export(src_exports, {
|
|
|
31
31
|
ok: () => ok,
|
|
32
32
|
okAsync: () => okAsync,
|
|
33
33
|
safeTry: () => safeTry,
|
|
34
|
-
safeTryAsync: () => safeTryAsync
|
|
34
|
+
safeTryAsync: () => safeTryAsync,
|
|
35
|
+
unit: () => unit,
|
|
36
|
+
unitAsync: () => unitAsync
|
|
35
37
|
});
|
|
36
38
|
module.exports = __toCommonJS(src_exports);
|
|
37
39
|
|
|
@@ -43,6 +45,7 @@ var createResultarError = (message, result, config = defaultErrorConfig) => {
|
|
|
43
45
|
const data = result.isOk() ? { type: "Ok", value: result.value } : { type: "Err", value: result.error };
|
|
44
46
|
const maybeStack = config.withStackTrace ? new Error().stack : void 0;
|
|
45
47
|
return {
|
|
48
|
+
name: "ResultarError",
|
|
46
49
|
data,
|
|
47
50
|
message,
|
|
48
51
|
stack: maybeStack
|
|
@@ -50,9 +53,6 @@ var createResultarError = (message, result, config = defaultErrorConfig) => {
|
|
|
50
53
|
};
|
|
51
54
|
|
|
52
55
|
// src/utils.ts
|
|
53
|
-
var combineResultAsyncList = (asyncResultList) => ResultAsync.fromSafePromise(Promise.all(asyncResultList)).andThen(
|
|
54
|
-
combineResultList
|
|
55
|
-
);
|
|
56
56
|
var combineResultList = (resultList) => {
|
|
57
57
|
let acc = ok([]);
|
|
58
58
|
for (const result of resultList) {
|
|
@@ -65,12 +65,9 @@ var combineResultList = (resultList) => {
|
|
|
65
65
|
}
|
|
66
66
|
return acc;
|
|
67
67
|
};
|
|
68
|
-
var
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
);
|
|
72
|
-
return x;
|
|
73
|
-
};
|
|
68
|
+
var combineResultAsyncList = (asyncResultList) => ResultAsync.fromSafePromise(Promise.all(asyncResultList)).andThen(
|
|
69
|
+
combineResultList
|
|
70
|
+
);
|
|
74
71
|
var combineResultListWithAllErrors = (resultList) => {
|
|
75
72
|
let acc = ok([]);
|
|
76
73
|
for (const result of resultList) {
|
|
@@ -84,6 +81,9 @@ var combineResultListWithAllErrors = (resultList) => {
|
|
|
84
81
|
}
|
|
85
82
|
return acc;
|
|
86
83
|
};
|
|
84
|
+
var combineResultAsyncListWithAllErrors = (asyncResultList) => ResultAsync.fromSafePromise(Promise.all(asyncResultList)).andThen(
|
|
85
|
+
combineResultListWithAllErrors
|
|
86
|
+
);
|
|
87
87
|
|
|
88
88
|
// src/result.ts
|
|
89
89
|
var Ok = class {
|
|
@@ -130,9 +130,23 @@ var Result = class _Result {
|
|
|
130
130
|
}
|
|
131
131
|
};
|
|
132
132
|
}
|
|
133
|
+
/**
|
|
134
|
+
* Creates a new `Result` instance representing a successful operation.
|
|
135
|
+
*
|
|
136
|
+
* @param {T} value - The value to be wrapped in the `Result` instance.
|
|
137
|
+
* @return {Result<T, E>} A new `Result` instance with the provided value.
|
|
138
|
+
*/
|
|
133
139
|
static ok(value) {
|
|
134
140
|
return new _Result(new Ok(value));
|
|
135
141
|
}
|
|
142
|
+
/**
|
|
143
|
+
* Creates a new `Result` instance representing a successful operation with an undefined value.
|
|
144
|
+
*
|
|
145
|
+
* @return {Result<undefined, E>} A new `Result` instance with an undefined value.
|
|
146
|
+
*/
|
|
147
|
+
static unit() {
|
|
148
|
+
return new _Result(new Ok(void 0));
|
|
149
|
+
}
|
|
136
150
|
static err(error) {
|
|
137
151
|
return new _Result(new Err(error));
|
|
138
152
|
}
|
|
@@ -275,7 +289,7 @@ var Result = class _Result {
|
|
|
275
289
|
return fnErr(this.error);
|
|
276
290
|
}
|
|
277
291
|
/**
|
|
278
|
-
* Performs a side effect
|
|
292
|
+
* Performs a side effect for the `Ok` or `Err` variant of `Result`.
|
|
279
293
|
*
|
|
280
294
|
* @param fn The function to apply an `OK` value
|
|
281
295
|
* @returns the result of applying `f` or an `Err` untouched
|
|
@@ -396,14 +410,14 @@ var DisposableResult = class {
|
|
|
396
410
|
this.finalizer(this.result.value, this.result.error);
|
|
397
411
|
}
|
|
398
412
|
};
|
|
399
|
-
var { ok, err, fromThrowable } = Result;
|
|
400
413
|
function safeTry(body) {
|
|
401
414
|
const n = body().next();
|
|
402
415
|
if (n instanceof Promise) {
|
|
403
|
-
return n.then((r) => r.value);
|
|
416
|
+
return new ResultAsync(n.then((r) => r.value));
|
|
404
417
|
}
|
|
405
418
|
return n.value;
|
|
406
419
|
}
|
|
420
|
+
var { ok, err, fromThrowable, unit } = Result;
|
|
407
421
|
|
|
408
422
|
// src/result-async.ts
|
|
409
423
|
var DisposableResultAsync = class {
|
|
@@ -416,9 +430,29 @@ var DisposableResultAsync = class {
|
|
|
416
430
|
}
|
|
417
431
|
};
|
|
418
432
|
var ResultAsync = class _ResultAsync {
|
|
433
|
+
/**
|
|
434
|
+
* Returns a ResultAsync instance that is immediately resolved with a Result.ok(value).
|
|
435
|
+
*
|
|
436
|
+
* @param {T} value - The value to be wrapped in a Result.ok.
|
|
437
|
+
* @return {ResultAsync<T, E>} A ResultAsync instance with the given value and error type E.
|
|
438
|
+
*/
|
|
419
439
|
static okAsync(value) {
|
|
420
440
|
return new _ResultAsync(Promise.resolve(Result.ok(value)));
|
|
421
441
|
}
|
|
442
|
+
/**
|
|
443
|
+
* Returns a ResultAsync that is immediately resolved with a Result.ok(undefined) value.
|
|
444
|
+
*
|
|
445
|
+
* @return {ResultAsync<undefined, E>} A ResultAsync instance with undefined as the value type and E as the error type.
|
|
446
|
+
*/
|
|
447
|
+
static unitAsync() {
|
|
448
|
+
return new _ResultAsync(Promise.resolve(Result.unit()));
|
|
449
|
+
}
|
|
450
|
+
/**
|
|
451
|
+
* Returns a ResultAsync instance that is immediately resolved with a Result.err(error).
|
|
452
|
+
*
|
|
453
|
+
* @param {E} error - The error to be wrapped in a Result.err.
|
|
454
|
+
* @return {ResultAsync<T, E>} A ResultAsync instance with the given error and value type T.
|
|
455
|
+
*/
|
|
422
456
|
static errAsync(error) {
|
|
423
457
|
return new _ResultAsync(Promise.resolve(Result.err(error)));
|
|
424
458
|
}
|
|
@@ -523,8 +557,8 @@ var ResultAsync = class _ResultAsync {
|
|
|
523
557
|
})
|
|
524
558
|
);
|
|
525
559
|
}
|
|
526
|
-
async match(ok2,
|
|
527
|
-
return this.innerPromise.then((res) => res.match(ok2,
|
|
560
|
+
async match(ok2, fnErr) {
|
|
561
|
+
return this.innerPromise.then((res) => res.match(ok2, fnErr));
|
|
528
562
|
}
|
|
529
563
|
async unwrapOr(t) {
|
|
530
564
|
return this.innerPromise.then((res) => res.unwrapOr(t));
|
|
@@ -613,8 +647,6 @@ var ResultAsync = class _ResultAsync {
|
|
|
613
647
|
return yield* await this.innerPromise.then((res) => res.safeUnwrap());
|
|
614
648
|
}
|
|
615
649
|
};
|
|
616
|
-
var { okAsync, errAsync, fromPromise, fromSafePromise } = ResultAsync;
|
|
617
|
-
var fromThrowableAsync = ResultAsync.fromThrowable;
|
|
618
650
|
function safeTryAsync(body) {
|
|
619
651
|
return new ResultAsync(
|
|
620
652
|
(async () => {
|
|
@@ -626,6 +658,8 @@ function safeTryAsync(body) {
|
|
|
626
658
|
})()
|
|
627
659
|
);
|
|
628
660
|
}
|
|
661
|
+
var { okAsync, errAsync, fromPromise, fromSafePromise, unitAsync } = ResultAsync;
|
|
662
|
+
var fromThrowableAsync = ResultAsync.fromThrowable;
|
|
629
663
|
// Annotate the CommonJS export names for ESM import in node:
|
|
630
664
|
0 && (module.exports = {
|
|
631
665
|
Result,
|
|
@@ -639,6 +673,8 @@ function safeTryAsync(body) {
|
|
|
639
673
|
ok,
|
|
640
674
|
okAsync,
|
|
641
675
|
safeTry,
|
|
642
|
-
safeTryAsync
|
|
676
|
+
safeTryAsync,
|
|
677
|
+
unit,
|
|
678
|
+
unitAsync
|
|
643
679
|
});
|
|
644
680
|
//# sourceMappingURL=index.cjs.map
|