@@ -3,12 +3,10 @@ import { IResultMatchPattern, IResult } from './result.interface'
3
3
4
4
export abstract class Result < TOk , TFail > implements IResult < TOk , TFail > {
5
5
public static ok < TOk , TFail > ( value : TOk ) : IResult < TOk , TFail > {
6
- // eslint-disable-next-line @typescript-eslint/no-use-before-define
7
6
return new OkResult < TOk , TFail > ( value )
8
7
}
9
8
10
9
public static fail < TOk , TFail > ( value : TFail ) : IResult < TOk , TFail > {
11
- // eslint-disable-next-line @typescript-eslint/no-use-before-define
12
10
return new FailResult < TOk , TFail > ( value )
13
11
}
14
12
@@ -25,6 +23,9 @@ export abstract class Result<TOk, TFail> implements IResult<TOk, TFail> {
25
23
abstract flatMap < M > ( fn : ( val : TOk ) => IResult < M , TFail > ) : IResult < M , TFail >
26
24
abstract toFailWhenOk ( fn : ( val : TOk ) => TFail ) : IResult < TOk , TFail >
27
25
abstract toFailWhenOkFrom ( val : TFail ) : IResult < TOk , TFail >
26
+ abstract tap ( val : IResultMatchPattern < TOk , TFail , void > ) : void
27
+ abstract tapOk ( f : ( val : TOk ) => void ) : void
28
+ abstract tapFail ( f : ( val : TFail ) => void ) : void
28
29
}
29
30
30
31
export class OkResult < TOk , TFail > extends Result < TOk , TFail > {
@@ -83,6 +84,16 @@ export class OkResult<TOk, TFail> extends Result<TOk, TFail> {
83
84
toFailWhenOkFrom ( val : TFail ) : IResult < TOk , TFail > {
84
85
return Result . fail ( val )
85
86
}
87
+
88
+ tap ( val : Partial < IResultMatchPattern < TOk , TFail , void > > ) : void {
89
+ typeof val . ok === 'function' && val . ok ( this . successValue )
90
+ }
91
+
92
+ tapOk ( fn : ( val : TOk ) => void ) : void {
93
+ fn ( this . successValue )
94
+ }
95
+
96
+ tapFail ( ) : void { }
86
97
}
87
98
88
99
export class FailResult < TOk , TFail > extends Result < TOk , TFail > implements IResult < TOk , TFail > {
@@ -141,4 +152,14 @@ export class FailResult<TOk, TFail> extends Result<TOk, TFail> implements IResul
141
152
toFailWhenOkFrom ( val : TFail ) : IResult < TOk , TFail > {
142
153
return Result . fail ( val )
143
154
}
155
+
156
+ tap ( val : Partial < IResultMatchPattern < TOk , TFail , void > > ) : void {
157
+ typeof val . fail === 'function' && val . fail ( this . failureValue )
158
+ }
159
+
160
+ tapOk ( ) : void { }
161
+
162
+ tapFail ( fn : ( val : TFail ) => void ) : void {
163
+ fn ( this . failureValue )
164
+ }
144
165
}
0 commit comments