1- export type IMapFn < A , B > = ( a : A ) => B ;
2- export type ITaskChainFn < A , B , E > = ( value : A ) => Task < B , E > ;
1+ import { catchError , chain , IMapFn , IPipeFn , ITaskChainFn , map } from './operators/basic' ;
2+
33
44export class UncaughtError extends Error {
55 type : 'UncaughtError' ;
@@ -95,52 +95,45 @@ export class Task <T, E> {
9595 } ) ;
9696 }
9797
98- map < TResult > ( fn : IMapFn < T , TResult > ) : Task < TResult , E | UncaughtError > {
98+ pipe ( ) : Task < T , E > ;
99+ pipe < T1 , E1 > ( f1 : IPipeFn < T , T1 , E , E1 > ) : Task < T1 , E1 | UncaughtError > ;
100+ pipe < T1 , T2 , E1 , E2 > ( f1 : IPipeFn < T , T1 , E , E1 > , f2 : IPipeFn < T1 , T2 , E1 , E2 > ) : Task < T2 , E2 | UncaughtError > ;
101+ pipe < T1 , T2 , T3 , E1 , E2 , E3 > ( f1 : IPipeFn < T , T1 , E , E1 > , f2 : IPipeFn < T1 , T2 , E1 , E2 > , f3 : IPipeFn < T2 , T3 , E2 , E3 > ) : Task < T3 , E3 | UncaughtError > ;
102+ pipe < T1 , T2 , T3 , T4 , E1 , E2 , E3 , E4 > ( f1 : IPipeFn < T , T1 , E , E1 > , f2 : IPipeFn < T1 , T2 , E1 , E2 > , f3 : IPipeFn < T2 , T3 , E2 , E3 > , f4 : IPipeFn < T3 , T4 , E3 , E4 > ) : Task < T4 , E4 | UncaughtError > ;
103+ pipe < T1 , T2 , T3 , T4 , T5 , E1 , E2 , E3 , E4 , E5 > ( f1 : IPipeFn < T , T1 , E , E1 > , f2 : IPipeFn < T1 , T2 , E1 , E2 > , f3 : IPipeFn < T2 , T3 , E2 , E3 > , f4 : IPipeFn < T3 , T4 , E3 , E4 > , f5 : IPipeFn < T4 , T5 , E4 , E5 > ) : Task < T5 , E5 | UncaughtError > ;
104+ pipe < T1 , T2 , T3 , T4 , T5 , T6 , E1 , E2 , E3 , E4 , E5 , E6 > ( f1 : IPipeFn < T , T1 , E , E1 > , f2 : IPipeFn < T1 , T2 , E1 , E2 > , f3 : IPipeFn < T2 , T3 , E2 , E3 > , f4 : IPipeFn < T3 , T4 , E3 , E4 > , f5 : IPipeFn < T4 , T5 , E4 , E5 > , f6 : IPipeFn < T5 , T6 , E5 , E6 > ) : Task < T6 , E6 | UncaughtError > ;
105+ pipe < T1 , T2 , T3 , T4 , T5 , T6 , T7 , E1 , E2 , E3 , E4 , E5 , E6 , E7 > ( f1 : IPipeFn < T , T1 , E , E1 > , f2 : IPipeFn < T1 , T2 , E1 , E2 > , f3 : IPipeFn < T2 , T3 , E2 , E3 > , f4 : IPipeFn < T3 , T4 , E3 , E4 > , f5 : IPipeFn < T4 , T5 , E4 , E5 > , f6 : IPipeFn < T5 , T6 , E5 , E6 > , f7 : IPipeFn < T6 , T7 , E6 , E7 > ) : Task < T7 , E7 | UncaughtError > ;
106+ pipe < T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , E1 , E2 , E3 , E4 , E5 , E6 , E7 , E8 > ( f1 : IPipeFn < T , T1 , E , E1 > , f2 : IPipeFn < T1 , T2 , E1 , E2 > , f3 : IPipeFn < T2 , T3 , E2 , E3 > , f4 : IPipeFn < T3 , T4 , E3 , E4 > , f5 : IPipeFn < T4 , T5 , E4 , E5 > , f6 : IPipeFn < T5 , T6 , E5 , E6 > , f7 : IPipeFn < T6 , T7 , E6 , E7 > , f8 : IPipeFn < T7 , T8 , E7 , E8 > ) : Task < T8 , E8 | UncaughtError > ;
107+ pipe < T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , E1 , E2 , E3 , E4 , E5 , E6 , E7 , E8 , E9 > ( f1 : IPipeFn < T , T1 , E , E1 > , f2 : IPipeFn < T1 , T2 , E1 , E2 > , f3 : IPipeFn < T2 , T3 , E2 , E3 > , f4 : IPipeFn < T3 , T4 , E3 , E4 > , f5 : IPipeFn < T4 , T5 , E4 , E5 > , f6 : IPipeFn < T5 , T6 , E5 , E6 > , f7 : IPipeFn < T6 , T7 , E6 , E7 > , f8 : IPipeFn < T7 , T8 , E7 , E8 > , f9 : IPipeFn < T8 , T9 , E8 , E9 > ) : Task < T9 , E9 | UncaughtError > ;
108+ pipe < T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , E1 , E2 , E3 , E4 , E5 , E6 , E7 , E8 , E9 , E10 > ( f1 : IPipeFn < T , T1 , E , E1 > , f2 : IPipeFn < T1 , T2 , E1 , E2 > , f3 : IPipeFn < T2 , T3 , E2 , E3 > , f4 : IPipeFn < T3 , T4 , E3 , E4 > , f5 : IPipeFn < T4 , T5 , E4 , E5 > , f6 : IPipeFn < T5 , T6 , E5 , E6 > , f7 : IPipeFn < T6 , T7 , E6 , E7 > , f8 : IPipeFn < T7 , T8 , E7 , E8 > , f9 : IPipeFn < T8 , T9 , E8 , E9 > , f10 : IPipeFn < T9 , T10 , E9 , E10 > ) : Task < T10 , E10 | UncaughtError > ;
109+ pipe < T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , E1 , E2 , E3 , E4 , E5 , E6 , E7 , E8 , E9 , E10 , E11 > ( f1 : IPipeFn < T , T1 , E , E1 > , f2 : IPipeFn < T1 , T2 , E1 , E2 > , f3 : IPipeFn < T2 , T3 , E2 , E3 > , f4 : IPipeFn < T3 , T4 , E3 , E4 > , f5 : IPipeFn < T4 , T5 , E4 , E5 > , f6 : IPipeFn < T5 , T6 , E5 , E6 > , f7 : IPipeFn < T6 , T7 , E6 , E7 > , f8 : IPipeFn < T7 , T8 , E7 , E8 > , f9 : IPipeFn < T8 , T9 , E8 , E9 > , f10 : IPipeFn < T9 , T10 , E9 , E10 > , f11 : IPipeFn < T10 , T11 , E10 , E11 > ) : Task < T11 , E11 | UncaughtError > ;
110+ pipe < T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , E1 , E2 , E3 , E4 , E5 , E6 , E7 , E8 , E9 , E10 , E11 , E12 > ( f1 : IPipeFn < T , T1 , E , E1 > , f2 : IPipeFn < T1 , T2 , E1 , E2 > , f3 : IPipeFn < T2 , T3 , E2 , E3 > , f4 : IPipeFn < T3 , T4 , E3 , E4 > , f5 : IPipeFn < T4 , T5 , E4 , E5 > , f6 : IPipeFn < T5 , T6 , E5 , E6 > , f7 : IPipeFn < T6 , T7 , E6 , E7 > , f8 : IPipeFn < T7 , T8 , E7 , E8 > , f9 : IPipeFn < T8 , T9 , E8 , E9 > , f10 : IPipeFn < T9 , T10 , E9 , E10 > , f11 : IPipeFn < T10 , T11 , E10 , E11 > , f12 : IPipeFn < T11 , T12 , E11 , E12 > ) : Task < T12 , E12 | UncaughtError > ;
111+ pipe < TFinal , EFinal > ( ...fns : any [ ] ) : Task < TFinal , EFinal | UncaughtError > {
99112 return new Task ( ( outerResolve , outerReject ) => {
100- this . fork (
101- outerReject ,
102- value => {
113+ const newTask = fns . reduce (
114+ ( task , f ) => {
103115 try {
104- const result = fn ( value ) ;
105- outerResolve ( result ) ;
106- } catch ( error ) {
107- outerReject ( new UncaughtError ( error ) ) ;
116+ return f ( task ) ;
117+ } catch ( err ) {
118+ return Task . reject ( new UncaughtError ( err ) ) ;
108119 }
109- }
120+ } ,
121+ this
110122 ) ;
123+ return newTask . fork ( outerReject , outerResolve ) ;
111124 } ) ;
112125 }
113126
127+ map < TResult > ( fn : IMapFn < T , TResult > ) : Task < TResult , E | UncaughtError > {
128+ return map < T , TResult , E > ( fn ) ( this ) ;
129+ }
130+
114131 chain < TResult , EResult > ( fn : ITaskChainFn < T , TResult , EResult > ) : Task < TResult , E | EResult | UncaughtError > {
115- return new Task ( ( outerResolve , outerReject ) => {
116- this . fork (
117- outerReject ,
118- value => {
119- try {
120- fn ( value ) . fork ( outerReject , outerResolve ) ;
121- }
122- catch ( err ) {
123- outerReject ( new UncaughtError ( err ) ) ;
124- }
125- }
126- ) ;
127- } ) ;
132+ return chain < T , TResult , E , EResult > ( fn ) ( this ) ;
128133 }
129134
130135 catch < TResult , EResult > ( fn : ITaskChainFn < E , TResult , EResult > ) : Task < T | TResult , EResult | UncaughtError > {
131- return new Task ( ( outerResolve , outerReject ) => {
132- this . fork (
133- err => {
134- try {
135- fn ( err ) . fork ( outerReject , outerResolve ) ;
136- }
137- catch ( err ) {
138- outerReject ( new UncaughtError ( err ) ) ;
139- }
140- } ,
141- outerResolve
142- ) ;
143- } ) ;
136+ return catchError < T , TResult , E , EResult > ( fn ) ( this ) ;
144137 }
145138
146139 fork ( errorFn : ( error : E ) => any , successFn : ( value : T ) => any ) : void {
@@ -152,3 +145,4 @@ export class Task <T, E> {
152145 ) ;
153146 }
154147}
148+
0 commit comments