@@ -88,77 +88,79 @@ const startJob = (
8888 return { ctx, task } ;
8989} ;
9090
91- if ( process . send ) {
92- // process.argv:
93- // [0] `node'
94- // [1] import.meta.filename
95- // [2] import.meta.filename of function containing entry file
96- const moduleFile = process . argv [ 2 ] ;
97- const agent : Agent = await import ( pathToFileURL ( moduleFile ! ) . href ) . then ( ( module ) => {
98- const agent = module . default ;
99- if ( agent === undefined || ! isAgent ( agent ) ) {
100- throw new Error ( `Unable to load agent: Missing or invalid default export in ${ moduleFile } ` ) ;
101- }
102- return agent ;
103- } ) ;
104- if ( ! agent . prewarm ) {
105- agent . prewarm = defaultInitializeProcessFunc ;
106- }
107-
108- // don't do anything on C-c
109- // this is handled in cli, triggering a termination of all child processes at once.
110- process . on ( 'SIGINT' , ( ) => { } ) ;
111-
112- await once ( process , 'message' ) . then ( ( [ msg ] : IPCMessage [ ] ) => {
113- msg = msg ! ;
114- if ( msg . case !== 'initializeRequest' ) {
115- throw new Error ( 'first message must be InitializeRequest' ) ;
91+ ( async ( ) => {
92+ if ( process . send ) {
93+ // process.argv:
94+ // [0] `node'
95+ // [1] import.meta.filename
96+ // [2] import.meta.filename of function containing entry file
97+ const moduleFile = process . argv [ 2 ] ;
98+ const agent : Agent = await import ( pathToFileURL ( moduleFile ! ) . pathname ) . then ( ( module ) => {
99+ const agent = module . default ;
100+ if ( agent === undefined || ! isAgent ( agent ) ) {
101+ throw new Error ( `Unable to load agent: Missing or invalid default export in ${ moduleFile } ` ) ;
102+ }
103+ return agent ;
104+ } ) ;
105+ if ( ! agent . prewarm ) {
106+ agent . prewarm = defaultInitializeProcessFunc ;
116107 }
117- initializeLogger ( msg . value . loggerOptions ) ;
118- } ) ;
119- const proc = new JobProcess ( ) ;
120- let logger = log ( ) . child ( { pid : proc . pid } ) ;
121-
122- logger . debug ( 'initializing job runner' ) ;
123- agent . prewarm ( proc ) ;
124- logger . debug ( 'job runner initialized' ) ;
125- process . send ( { case : 'initializeResponse' } ) ;
126108
127- let job : JobTask | undefined = undefined ;
128- const closeEvent = new EventEmitter ( ) ;
109+ // don't do anything on C-c
110+ // this is handled in cli, triggering a termination of all child processes at once.
111+ process . on ( 'SIGINT' , ( ) => { } ) ;
129112
130- const orphanedTimeout = setTimeout ( ( ) => {
131- logger . warn ( 'process orphaned, shutting down' ) ;
132- process . exit ( ) ;
133- } , ORPHANED_TIMEOUT ) ;
134-
135- process . on ( 'message' , ( msg : IPCMessage ) => {
136- switch ( msg . case ) {
137- case 'pingRequest' : {
138- orphanedTimeout . refresh ( ) ;
139- process . send ! ( {
140- case : 'pongResponse' ,
141- value : { lastTimestamp : msg . value . timestamp , timestamp : Date . now ( ) } ,
142- } ) ;
143- break ;
113+ await once ( process , 'message' ) . then ( ( [ msg ] : IPCMessage [ ] ) => {
114+ msg = msg ! ;
115+ if ( msg . case !== 'initializeRequest' ) {
116+ throw new Error ( 'first message must be InitializeRequest' ) ;
144117 }
145- case 'startJobRequest' : {
146- if ( job ) {
147- throw new Error ( 'job task already running' ) ;
118+ initializeLogger ( msg . value . loggerOptions ) ;
119+ } ) ;
120+ const proc = new JobProcess ( ) ;
121+ let logger = log ( ) . child ( { pid : proc . pid } ) ;
122+
123+ logger . debug ( 'initializing job runner' ) ;
124+ agent . prewarm ( proc ) ;
125+ logger . debug ( 'job runner initialized' ) ;
126+ process . send ( { case : 'initializeResponse' } ) ;
127+
128+ let job : JobTask | undefined = undefined ;
129+ const closeEvent = new EventEmitter ( ) ;
130+
131+ const orphanedTimeout = setTimeout ( ( ) => {
132+ logger . warn ( 'process orphaned, shutting down' ) ;
133+ process . exit ( ) ;
134+ } , ORPHANED_TIMEOUT ) ;
135+
136+ process . on ( 'message' , ( msg : IPCMessage ) => {
137+ switch ( msg . case ) {
138+ case 'pingRequest' : {
139+ orphanedTimeout . refresh ( ) ;
140+ process . send ! ( {
141+ case : 'pongResponse' ,
142+ value : { lastTimestamp : msg . value . timestamp , timestamp : Date . now ( ) } ,
143+ } ) ;
144+ break ;
148145 }
146+ case 'startJobRequest' : {
147+ if ( job ) {
148+ throw new Error ( 'job task already running' ) ;
149+ }
149150
150- logger = logger . child ( { jobID : msg . value . runningJob . job . id } ) ;
151+ logger = logger . child ( { jobID : msg . value . runningJob . job . id } ) ;
151152
152- job = startJob ( proc , agent . entry , msg . value . runningJob , closeEvent , logger ) ;
153- logger . debug ( 'job started' ) ;
154- break ;
155- }
156- case 'shutdownRequest' : {
157- if ( ! job ) {
153+ job = startJob ( proc , agent . entry , msg . value . runningJob , closeEvent , logger ) ;
154+ logger . debug ( 'job started' ) ;
158155 break ;
159156 }
160- closeEvent . emit ( 'close' , '' ) ;
157+ case 'shutdownRequest' : {
158+ if ( ! job ) {
159+ break ;
160+ }
161+ closeEvent . emit ( 'close' , '' ) ;
162+ }
161163 }
162- }
163- } ) ;
164- }
164+ } ) ;
165+ }
166+ } ) ( ) ;
0 commit comments