@@ -4,42 +4,46 @@ import Emitter from 'events';
44const $spawn = ( cmd , options = { } ) => {
55 const emitter = new Emitter ( ) ;
66 setTimeout ( ( ) => {
7- const [ entry , ...bits ] = cmd . trim ( ) . split ( / \s + / ) ;
8- const ps = spawn ( entry , bits , options ) ;
9- let done = false ;
10- emitter . emit ( 'pid' , ps . pid ) ;
11- ps
12- . on ( 'error' , error => emitter . emit ( 'error' , error ) )
13- . on ( 'exit' , ( status ) => {
14- done = true ;
15- if ( status === 0 ) {
16- emitter . emit ( 'done' ) ;
17- } else {
18- emitter . emit ( 'failed' , status ) ;
19- }
20- } )
21- . on ( 'close' , ( status ) => {
22- if ( ! done ) {
7+ try {
8+ const [ entry , ...bits ] = cmd . trim ( ) . split ( / \s + / ) ;
9+ const ps = spawn ( entry , bits , options ) ;
10+ let done = false ;
11+ emitter . emit ( 'pid' , ps . pid ) ;
12+ ps
13+ . on ( 'error' , error => emitter . emit ( 'error' , error ) )
14+ . on ( 'exit' , ( status ) => {
2315 done = true ;
2416 if ( status === 0 ) {
2517 emitter . emit ( 'done' ) ;
2618 } else {
2719 emitter . emit ( 'failed' , status ) ;
2820 }
29- }
30- } ) ;
31- ps . stdout . on ( 'data' , data => emitter . emit ( 'data' , {
32- std : 'out' ,
33- buffer : data ,
34- message : data . toString ( ) ,
35- } ) ) ;
36- ps . stderr . on ( 'data' , data => emitter . emit ( 'data' , {
37- std : 'err' ,
38- buffer : data ,
39- message : data . toString ( ) ,
40- } ) ) ;
41- emitter . on ( 'write' , message => ps . stdin . write ( message ) ) ;
42- emitter . on ( 'kill' , ( ) => $spawn ( `kill -9 ${ ps . pid } ` ) ) ;
21+ } )
22+ . on ( 'close' , ( status ) => {
23+ if ( ! done ) {
24+ done = true ;
25+ if ( status === 0 ) {
26+ emitter . emit ( 'done' ) ;
27+ } else {
28+ emitter . emit ( 'failed' , status ) ;
29+ }
30+ }
31+ } ) ;
32+ ps . stdout . on ( 'data' , data => emitter . emit ( 'data' , {
33+ std : 'out' ,
34+ buffer : data ,
35+ message : data . toString ( ) ,
36+ } ) ) ;
37+ ps . stderr . on ( 'data' , data => emitter . emit ( 'data' , {
38+ std : 'err' ,
39+ buffer : data ,
40+ message : data . toString ( ) ,
41+ } ) ) ;
42+ emitter . on ( 'write' , message => ps . stdin . write ( message ) ) ;
43+ emitter . on ( 'kill' , ( ) => $spawn ( `kill -9 ${ ps . pid } ` ) ) ;
44+ } catch ( error ) {
45+ console . log ( error . stack ) ;
46+ }
4347 } ) ;
4448 return emitter ;
4549} ;
0 commit comments