@@ -3,12 +3,10 @@ import { IResultMatchPattern, IResult } from './result.interface'
33
44export abstract class Result < TOk , TFail > implements IResult < TOk , TFail > {
55 public static ok < TOk , TFail > ( value : TOk ) : IResult < TOk , TFail > {
6- // eslint-disable-next-line @typescript-eslint/no-use-before-define
76 return new OkResult < TOk , TFail > ( value )
87 }
98
109 public static fail < TOk , TFail > ( value : TFail ) : IResult < TOk , TFail > {
11- // eslint-disable-next-line @typescript-eslint/no-use-before-define
1210 return new FailResult < TOk , TFail > ( value )
1311 }
1412
@@ -25,6 +23,9 @@ export abstract class Result<TOk, TFail> implements IResult<TOk, TFail> {
2523 abstract flatMap < M > ( fn : ( val : TOk ) => IResult < M , TFail > ) : IResult < M , TFail >
2624 abstract toFailWhenOk ( fn : ( val : TOk ) => TFail ) : IResult < TOk , TFail >
2725 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
2829}
2930
3031export class OkResult < TOk , TFail > extends Result < TOk , TFail > {
@@ -83,6 +84,16 @@ export class OkResult<TOk, TFail> extends Result<TOk, TFail> {
8384 toFailWhenOkFrom ( val : TFail ) : IResult < TOk , TFail > {
8485 return Result . fail ( val )
8586 }
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 { }
8697}
8798
8899export 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
141152 toFailWhenOkFrom ( val : TFail ) : IResult < TOk , TFail > {
142153 return Result . fail ( val )
143154 }
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+ }
144165}
0 commit comments