Skip to content

Commit f7161b9

Browse files
committed
feat(std/results): improve dx in result merging
1 parent 4000125 commit f7161b9

File tree

3 files changed

+9
-21
lines changed

3 files changed

+9
-21
lines changed

packages/std/src/results/definition.ts

+5-1
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,11 @@ declare global {
7777

7878
type UnionsToResult<
7979
U,
80-
O = Extract<U, Ok<BlobType, BlobType, BlobType>>,
80+
N = Exclude<U, Ok<BlobType, BlobType, BlobType[]> | Err<BlobType, BlobType, BlobType>>,
81+
O = Extract<
82+
U | (N extends never ? never : Ok<N, never, never>),
83+
Ok<BlobType, BlobType, BlobType>
84+
>,
8185
E = Extract<U, Err<BlobType, BlobType, BlobType>>,
8286
> = O | E extends never
8387
? never

packages/std/src/results/utils/fn.ts

+2-13
Original file line numberDiff line numberDiff line change
@@ -3,21 +3,10 @@ import type { BlobType } from '../../shared'
33
import { Err } from './err'
44
import { Ok, ok } from './ok'
55

6-
export const $fn = <
7-
A extends BlobType[],
8-
R,
9-
O extends Exclude<R, Ok<BlobType, BlobType, BlobType[]> | Err<BlobType, BlobType, BlobType>>,
10-
C extends Std.ErrorValues = never,
11-
>(
6+
export const $fn = <A extends BlobType[], R, C extends Std.ErrorValues = never>(
127
fn: (...args: A) => R,
138
additionalCause?: C
14-
): ((
15-
...args: A
16-
) => Std.InjectError<
17-
Std.UnionsToResult<R | (O extends never ? never : Ok<O, never, never>)>,
18-
never,
19-
C extends never ? [] : [C]
20-
>) => {
9+
): ((...args: A) => Std.InjectError<Std.UnionsToResult<R>, never, C extends never ? [] : [C]>) => {
2110
return ((...args: A) => {
2211
const result = fn(...args)
2312

packages/std/src/results/utils/try.ts

+2-7
Original file line numberDiff line numberDiff line change
@@ -7,16 +7,11 @@ import { Ok, ok } from './ok'
77
const invalidUsage = resultTags.get('invalid-usage')
88
const cause = resultTags.get('try')
99

10-
export const $try = <
11-
R,
12-
R2,
13-
O extends Exclude<R | R2, Ok<BlobType, BlobType, BlobType[]> | Err<BlobType, BlobType, BlobType>>,
14-
C extends Std.ErrorValues = never,
15-
>(
10+
export const $try = <R, R2, C extends Std.ErrorValues = never>(
1611
body: () => Generator<R, R2>,
1712
additionalCause?: C
1813
): Std.InjectError<
19-
Std.UnionsToResult<R | R2 | (O extends never ? never : Ok<O, never, never>)>,
14+
Std.UnionsToResult<R | R2>,
2015
typeof invalidUsage,
2116
C extends never ? (typeof cause)[] : (typeof cause | C)[]
2217
> => {

0 commit comments

Comments
 (0)