11import {
22 Client ,
33 executeMaybeAsyncFunction ,
4- InvokeResult ,
54 Job ,
5+ JobResult ,
6+ JobStatus ,
67 MaybeAsync ,
78 Uri ,
89} from "../types" ;
@@ -19,14 +20,13 @@ export class JobRunner<
1920 TData extends unknown = unknown ,
2021 TUri extends Uri | string = string
2122> {
22- private jobOutput : Map < string , InvokeResult < TData > > ;
23+ private jobOutput : Map < string , JobResult < TData > > ;
2324
2425 constructor (
2526 private client : Client ,
2627 private onExecution ?: (
2728 id : string ,
28- data ?: InvokeResult < TData > [ "data" ] ,
29- error ?: InvokeResult < TData > [ "error" ]
29+ JobResult : JobResult < TData >
3030 ) => MaybeAsync < void >
3131 ) {
3232 this . jobOutput = new Map ( ) ;
@@ -45,27 +45,47 @@ export class JobRunner<
4545 const steps = jobs [ jobId ] . steps ;
4646 if ( steps ) {
4747 for ( let i = 0 ; i < steps . length ; i ++ ) {
48+ let result : JobResult < TData > | undefined ;
49+ let args : Record < string , unknown > | undefined ;
50+
4851 const step = steps [ i ] ;
4952 const absoluteId = parentId
5053 ? `${ parentId } .${ jobId } .${ i } `
5154 : `${ jobId } .${ i } ` ;
52- const args = this . resolveArgs ( absoluteId , step . args ) ;
53- const result = await this . client . invoke < TData , TUri > ( {
54- uri : step . uri ,
55- method : step . method ,
56- config : step . config ,
57- args : args ,
58- } ) ;
59-
60- this . jobOutput . set ( absoluteId , result ) ;
61-
62- if ( this . onExecution && typeof this . onExecution === "function" ) {
63- await executeMaybeAsyncFunction (
64- this . onExecution ,
65- absoluteId ,
66- result . data ,
67- result . error
68- ) ;
55+ try {
56+ args = this . resolveArgs ( absoluteId , step . args ) ;
57+ } catch ( e ) {
58+ result = {
59+ error : e ,
60+ status : JobStatus . SKIPPED ,
61+ } ;
62+ }
63+
64+ if ( args ) {
65+ const invokeResult = await this . client . invoke < TData , TUri > ( {
66+ uri : step . uri ,
67+ method : step . method ,
68+ config : step . config ,
69+ args : args ,
70+ } ) ;
71+
72+ if ( invokeResult . error ) {
73+ result = { ...invokeResult , status : JobStatus . FAILED } ;
74+ } else {
75+ result = { ...invokeResult , status : JobStatus . SUCCEED } ;
76+ }
77+ }
78+
79+ if ( result ) {
80+ this . jobOutput . set ( absoluteId , result ) ;
81+
82+ if ( this . onExecution && typeof this . onExecution === "function" ) {
83+ await executeMaybeAsyncFunction (
84+ this . onExecution ,
85+ absoluteId ,
86+ result
87+ ) ;
88+ }
6989 }
7090 }
7191 }
@@ -124,8 +144,21 @@ export class JobRunner<
124144 }
125145 }
126146 const output = outputs . get ( absStepId ) ;
127- if ( output && output [ dataOrErr ] ) {
128- return output [ dataOrErr ] ;
147+ if (
148+ output &&
149+ dataOrErr === "data" &&
150+ output . status === JobStatus . SUCCEED &&
151+ output . data
152+ ) {
153+ return output . data ;
154+ }
155+ if (
156+ output &&
157+ dataOrErr === "error" &&
158+ output . status === JobStatus . FAILED &&
159+ output . error
160+ ) {
161+ return output . error ;
129162 }
130163 }
131164
0 commit comments