@@ -6,13 +6,22 @@ const logError = (err: unknown, output: string[]) => {
66}
77
88export const spawnProcess = async ( command : string , args : string [ ] , cwd : string ) => {
9- const childProcess = child_process . spawn ( command , args , { stdio : 'inherit' , cwd } )
9+ const childProcess = child_process . spawn ( command , args , { cwd } )
1010 return new Promise < string > ( ( resolve , reject ) => {
1111 const output : string [ ] = [ ]
12- childProcess . stdout ?. on ( 'data' , ( d ) => output . push ( d . toString ( ) ) )
13- childProcess . stderr ?. on ( 'data' , ( d ) => output . push ( d . toString ( ) ) )
12+ const r1 = childProcess . stdout ?. on ( 'data' , ( d ) => output . push ( d . toString ( ) ) )
13+ const r2 = childProcess . stderr ?. on ( 'data' , ( d ) => output . push ( d . toString ( ) ) )
14+
15+ const p1 = new Promise < void > ( ( resolve ) => ( r1 ? r1 . once ( 'close' , resolve ) : resolve ( ) ) )
16+ const p2 = new Promise < void > ( ( resolve ) => ( r2 ? r2 . once ( 'close' , resolve ) : resolve ( ) ) )
1417
1518 childProcess . once ( 'error' , ( err ) => reject ( logError ( err , output ) ) )
16- childProcess . once ( 'exit' , ( code : unknown ) => ( code === 0 ? resolve ( output . join ( '' ) ) : reject ( logError ( code , output ) ) ) )
19+ childProcess . once ( 'exit' , async ( code : unknown ) => {
20+ r1 ?. removeAllListeners ( 'data' )
21+ r2 ?. removeAllListeners ( 'data' )
22+ await p1
23+ await p2
24+ return code === 0 ? resolve ( output . join ( '' ) ) : reject ( logError ( code , output ) )
25+ } )
1726 } )
1827}
0 commit comments