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 };
|