resultar 1.2.0 → 1.3.1

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.
@@ -1,116 +1,30 @@
1
- type Dedup<T> = T extends Result<infer RL, infer RR> ? Result<RL, RR> : T;
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 ReadonlyArray<ResultAsync<unknown, unknown>>> = {
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 ReadonlyArray<Result<unknown, unknown>>> = {
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 ReadonlyArray<ResultAsync<unknown, unknown>>> = {
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: ReadonlyArray<Result<T, E>>) => Result<readonly T[], E>;
102
- declare const combineResultAsyncListWithAllErrors: <T, E>(asyncResultList: ReadonlyArray<ResultAsync<T, E>>) => ResultAsync<readonly T[], E[]>;
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: ReadonlyArray<Result<T, E>>) => Result<readonly T[], E[]>;
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>>);
@@ -159,10 +73,10 @@ declare class ResultAsync<T, E> implements PromiseLike<Result<T, E>> {
159
73
  * @return {ResultAsync<T, E>} A ResultAsync instance with the given promise and error type E.
160
74
  */
161
75
  static fromPromise<T, E>(promise: PromiseLike<T>, errorFn: (e: unknown) => E): ResultAsync<T, E>;
162
- static combine<T extends readonly [ResultAsync<unknown, unknown>, ...Array<ResultAsync<unknown, unknown>>]>(asyncResultList: T): CombineResultAsyncs<T>;
163
- static combine<T extends ReadonlyArray<ResultAsync<unknown, unknown>>>(asyncResultList: T): CombineResultAsyncs<T>;
164
- static combineWithAllErrors<T extends readonly [ResultAsync<unknown, unknown>, ...Array<ResultAsync<unknown, unknown>>]>(asyncResultList: T): CombineResultsWithAllErrorsArrayAsync<T>;
165
- static combineWithAllErrors<T extends ReadonlyArray<ResultAsync<unknown, unknown>>>(asyncResultList: T): CombineResultsWithAllErrorsArrayAsync<T>;
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>;
166
80
  /**
167
81
  * Wraps a async function with a try catch, creating a new function with the same
168
82
  * arguments but returning `Ok` if successful, `Err` if the function throws
@@ -189,7 +103,7 @@ declare class ResultAsync<T, E> implements PromiseLike<Result<T, E>> {
189
103
  orElse<R extends Result<unknown, unknown>>(f: (e: E) => R): ResultAsync<InferOkTypes<R> | T, InferErrTypes<R>>;
190
104
  orElse<R extends ResultAsync<unknown, unknown>>(f: (e: E) => R): ResultAsync<InferAsyncOkTypes<R> | T, InferAsyncErrTypes<R>>;
191
105
  orElse<U, A>(f: (e: E) => Result<U, A> | ResultAsync<U, A>): ResultAsync<U | T, A>;
192
- match<X>(ok: (t: T) => X, err: (e: E) => X): Promise<X>;
106
+ match<A, B = A>(ok: (t: T) => A, fnErr: (e: E) => B): Promise<A | B>;
193
107
  unwrapOr<A>(t: A): Promise<T | A>;
194
108
  /**
195
109
  * Performs a side effect for the `Ok` variant of `ResultAsync`.
@@ -219,25 +133,25 @@ declare class ResultAsync<T, E> implements PromiseLike<Result<T, E>> {
219
133
  */
220
134
  safeUnwrap(): AsyncGenerator<Result<never, E>, T>;
221
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>;
222
143
  declare const okAsync: typeof ResultAsync.okAsync;
223
144
  declare const errAsync: typeof ResultAsync.errAsync;
224
145
  declare const fromPromise: typeof ResultAsync.fromPromise;
225
146
  declare const fromSafePromise: typeof ResultAsync.fromSafePromise;
226
147
  declare const unitAsync: typeof ResultAsync.unitAsync;
227
148
  declare const fromThrowableAsync: typeof ResultAsync.fromThrowable;
228
- /**
229
- * Evaluates the given generator to a Result returned or an Err yielded from it,
230
- * whichever comes first.
231
- *
232
- * This function, in combination with `Result.safeUnwrap()`, is intended to emulate
233
- * Rust's ? operator.
234
- * See `/tests/safeTry.test.ts` for examples.
235
- *
236
- * @param body - What is evaluated. In body, `yield* result.safeUnwrap()` works as
237
- * Rust's `result?` expression.
238
- * @returns The first occurence of either an yielded Err or a returned `ResultAsync`.
239
- */
240
- 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;
241
155
 
242
156
  /**
243
157
  * A Result interface that is used to define the methods that are available on a
@@ -314,10 +228,10 @@ declare class Result<T, E> implements Resultable<T, E> {
314
228
  */
315
229
  static unit<E = never>(): Result<undefined, E>;
316
230
  static err<T = never, E = unknown>(error: E): Result<T, E>;
317
- static combine<T extends readonly [Result<unknown, unknown>, ...Array<Result<unknown, unknown>>]>(resultList: T): CombineResults<T>;
318
- static combine<T extends ReadonlyArray<Result<unknown, unknown>>>(resultList: T): CombineResults<T>;
319
- static combineWithAllErrors<T extends readonly [Result<unknown, unknown>, ...Array<Result<unknown, unknown>>]>(resultList: T): CombineResultsWithAllErrorsArray<T>;
320
- static combineWithAllErrors<T extends ReadonlyArray<Result<unknown, unknown>>>(resultList: T): CombineResultsWithAllErrorsArray<T>;
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>;
321
235
  readonly value: T;
322
236
  readonly error: E;
323
237
  private constructor();
@@ -414,7 +328,7 @@ declare class Result<T, E> implements Resultable<T, E> {
414
328
  * @param ok
415
329
  * @param err
416
330
  */
417
- match<X>(fnOk: (t: T) => X, fnErr: (e: E) => X): X;
331
+ match<A, B = A>(fnOk: (t: T) => A, fnErr: (e: E) => B): A | B;
418
332
  /**
419
333
  * Performs a side effect for the `Ok` or `Err` variant of `Result`.
420
334
  *
@@ -470,17 +384,13 @@ declare class DisposableResult<T, E> implements Resultable<T, E>, Disposable {
470
384
  constructor(result: Resultable<T, E>, finalizer: (value: T, error: E) => void);
471
385
  get value(): T;
472
386
  get error(): E;
473
- _unsafeUnwrap(config?: ErrorConfig | undefined): T;
474
- _unsafeUnwrapErr(config?: ErrorConfig | undefined): E;
387
+ _unsafeUnwrap(config?: ErrorConfig): T;
388
+ _unsafeUnwrapErr(config?: ErrorConfig): E;
475
389
  isOk(): boolean;
476
390
  isErr(): boolean;
477
391
  unwrapOr<A>(defaultValue: A): T | A;
478
392
  [Symbol.dispose](): void;
479
393
  }
480
- declare const ok: typeof Result.ok;
481
- declare const err: typeof Result.err;
482
- declare const fromThrowable: typeof Result.fromThrowable;
483
- declare const unit: typeof Result.unit;
484
394
  /**
485
395
  * Evaluates the given generator to a Result returned or an Err yielded from it,
486
396
  * whichever comes first.
@@ -494,6 +404,7 @@ declare const unit: typeof Result.unit;
494
404
  * @returns The first occurence of either an yielded Err or a returned Result.
495
405
  */
496
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>>;
497
408
  /**
498
409
  * Evaluates the given generator to a Result returned or an Err yielded from it,
499
410
  * whichever comes first.
@@ -506,7 +417,89 @@ declare function safeTry<T, E>(body: () => Generator<Result<never, E>, Result<T,
506
417
  * `yield* resultAsync.safeUnwrap()` work as Rust's `result?` expression.
507
418
  * @returns The first occurence of either an yielded Err or a returned Result.
508
419
  */
509
- declare function safeTry<T, E>(body: () => AsyncGenerator<Result<never, E>, Result<T, E>>): Promise<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][]>;
510
503
 
511
504
  interface ErrorConfig {
512
505
  withStackTrace: boolean;
@@ -524,4 +517,4 @@ interface ResultarError<T, E> extends Error {
524
517
  }
525
518
  declare const createResultarError: <T, E>(message: string, result: Result<T, E>, config?: ErrorConfig) => ResultarError<T, E>;
526
519
 
527
- export { DisposableResult as A, ok as B, type Combine as C, type Dedup as D, type ExtractOkTypes as E, err as F, fromThrowable as G, unit as H, type InferOkTypes as I, safeTry 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, type IsLiteralArray as g, type EmptyArrayToNever as h, type MembersToUnion as i, type CombineResults as j, type CombineResultsWithAllErrorsArray as k, combineResultAsyncList as l, combineResultList as m, combineResultAsyncListWithAllErrors as n, combineResultListWithAllErrors as o, type CombineResultAsyncs as p, type CombineResultsWithAllErrorsArrayAsync as q, DisposableResultAsync as r, okAsync as s, errAsync as t, fromPromise as u, fromSafePromise as v, unitAsync as w, fromThrowableAsync as x, safeTryAsync as y, Result as z };
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
@@ -53,9 +53,6 @@ var createResultarError = (message, result, config = defaultErrorConfig) => {
53
53
  };
54
54
 
55
55
  // src/utils.ts
56
- var combineResultAsyncList = (asyncResultList) => ResultAsync.fromSafePromise(Promise.all(asyncResultList)).andThen(
57
- combineResultList
58
- );
59
56
  var combineResultList = (resultList) => {
60
57
  let acc = ok([]);
61
58
  for (const result of resultList) {
@@ -68,12 +65,9 @@ var combineResultList = (resultList) => {
68
65
  }
69
66
  return acc;
70
67
  };
71
- var combineResultAsyncListWithAllErrors = (asyncResultList) => {
72
- const x = ResultAsync.fromSafePromise(Promise.all(asyncResultList)).andThen(
73
- combineResultListWithAllErrors
74
- );
75
- return x;
76
- };
68
+ var combineResultAsyncList = (asyncResultList) => ResultAsync.fromSafePromise(Promise.all(asyncResultList)).andThen(
69
+ combineResultList
70
+ );
77
71
  var combineResultListWithAllErrors = (resultList) => {
78
72
  let acc = ok([]);
79
73
  for (const result of resultList) {
@@ -87,6 +81,9 @@ var combineResultListWithAllErrors = (resultList) => {
87
81
  }
88
82
  return acc;
89
83
  };
84
+ var combineResultAsyncListWithAllErrors = (asyncResultList) => ResultAsync.fromSafePromise(Promise.all(asyncResultList)).andThen(
85
+ combineResultListWithAllErrors
86
+ );
90
87
 
91
88
  // src/result.ts
92
89
  var Ok = class {
@@ -413,14 +410,17 @@ var DisposableResult = class {
413
410
  this.finalizer(this.result.value, this.result.error);
414
411
  }
415
412
  };
416
- var { ok, err, fromThrowable, unit } = Result;
417
413
  function safeTry(body) {
418
414
  const n = body().next();
419
415
  if (n instanceof Promise) {
420
- return n.then((r) => r.value);
416
+ return new ResultAsync(n.then((r) => r.value));
421
417
  }
422
418
  return n.value;
423
419
  }
420
+ var ok = Result.ok;
421
+ var err = Result.err;
422
+ var fromThrowable = Result.fromThrowable;
423
+ var unit = Result.unit;
424
424
 
425
425
  // src/result-async.ts
426
426
  var DisposableResultAsync = class {
@@ -560,8 +560,8 @@ var ResultAsync = class _ResultAsync {
560
560
  })
561
561
  );
562
562
  }
563
- async match(ok2, err2) {
564
- return this.innerPromise.then((res) => res.match(ok2, err2));
563
+ async match(ok2, fnErr) {
564
+ return this.innerPromise.then((res) => res.match(ok2, fnErr));
565
565
  }
566
566
  async unwrapOr(t) {
567
567
  return this.innerPromise.then((res) => res.unwrapOr(t));
@@ -650,8 +650,6 @@ var ResultAsync = class _ResultAsync {
650
650
  return yield* await this.innerPromise.then((res) => res.safeUnwrap());
651
651
  }
652
652
  };
653
- var { okAsync, errAsync, fromPromise, fromSafePromise, unitAsync } = ResultAsync;
654
- var fromThrowableAsync = ResultAsync.fromThrowable;
655
653
  function safeTryAsync(body) {
656
654
  return new ResultAsync(
657
655
  (async () => {
@@ -663,6 +661,12 @@ function safeTryAsync(body) {
663
661
  })()
664
662
  );
665
663
  }
664
+ var okAsync = ResultAsync.okAsync;
665
+ var errAsync = ResultAsync.errAsync;
666
+ var fromPromise = ResultAsync.fromPromise;
667
+ var fromSafePromise = ResultAsync.fromSafePromise;
668
+ var unitAsync = ResultAsync.unitAsync;
669
+ var fromThrowableAsync = ResultAsync.fromThrowable;
666
670
  // Annotate the CommonJS export names for ESM import in node:
667
671
  0 && (module.exports = {
668
672
  Result,