@@ -33,49 +33,60 @@ function transform(n:string) {
3333export class ExecutionService {
3434 executeCommands ( pathToExecutable : string , commands : string [ ] , output ? : string ) : Promise < CxCommandOutput > {
3535 return new Promise ( function ( resolve , reject ) {
36- let stderr = '' ;
37- let cxCommandOutput = new CxCommandOutput ( ) ;
38- let output_string = "" ;
39- commands = transformation ( commands ) ;
40- const cp = spawn ( pathToExecutable , commands ) ;
41- cp . stderr . on ( 'data' , function ( chunk : string ) {
42- stderr += chunk ;
36+ let stderr = "" ;
37+ let stdout = "" ;
38+
39+ let cp = spawn ( pathToExecutable , transformation ( commands ) ) ;
40+ cp . on ( 'error' , reject ) ;
41+ cp . on ( 'exit' , ( code : number , signal : any ) => {
42+ logger . info ( "Exit code received from AST-CLI: " + code ) ;
43+ resolve ( ExecutionService . onCloseCommand ( code , stderr , stdout , output ) ) ;
4344 } ) ;
44- cp . on ( 'error' , reject )
45- . on ( 'close' , function ( code : number ) {
46- cxCommandOutput . exitCode = code ;
47- cxCommandOutput . status = stderr ;
48- logger . info ( "Exit code received from AST-CLI: " + code ) ;
49- logger . info ( stderr ) ;
50- resolve ( cxCommandOutput ) ;
51- } ) ;
52- cp . stdout . on ( 'data' , ( data : any ) => {
45+ cp . stdout . on ( 'data' , ( data : { toString : ( ) => string ; } ) => {
5346 if ( data ) {
54- output_string += data ;
47+ logger . info ( data . toString ( ) . replace ( '\n' , '' ) ) ;
48+ stdout += data . toString ( ) ;
5549 }
5650 } ) ;
57- cp . stdout . on ( 'close' , ( data : any ) => {
58- logger . info ( `${ output_string . toString ( ) . trim ( ) } ` ) ;
59- // Check if the json is valid
60- if ( isJsonString ( output_string . toString ( ) ) ) {
61- let resultObject = JSON . parse ( output_string . toString ( ) . split ( '\n' ) [ 0 ] ) ;
62- switch ( output ) {
63- case 'CxScan' :
64- let scans = CxScan . parseProject ( resultObject )
65- cxCommandOutput . payload = scans ;
66- break ;
67- case 'CxProject' :
68- let projects = CxProject . parseProject ( resultObject )
69- cxCommandOutput . payload = projects ;
70- break ;
71- default :
72- cxCommandOutput . payload = resultObject ;
73- }
74- }
51+ cp . stderr . on ( 'data' , ( data : { toString : ( ) => string ; } ) => {
52+ if ( data ) {
53+ logger . error ( data . toString ( ) . replace ( '\n' , '' ) ) ;
54+ stderr += data . toString ( ) ;
55+ }
7556 } ) ;
7657 } ) ;
7758 }
7859
60+ private static onCloseCommand ( code : number , stderr : string , stdout : string , output : string ) : CxCommandOutput {
61+ const cxCommandOutput = new CxCommandOutput ( ) ;
62+ cxCommandOutput . exitCode = code ;
63+ if ( stderr ) {
64+ cxCommandOutput . status = stderr ;
65+ }
66+ if ( stdout ) {
67+ const stdoutSplit = stdout . split ( '\n' ) ;
68+ const data = stdoutSplit . find ( isJsonString ) ;
69+
70+ if ( data ) {
71+ let resultObject = JSON . parse ( data ) ;
72+ switch ( output ) {
73+ case 'CxScan' :
74+ let scans = CxScan . parseProject ( resultObject )
75+ cxCommandOutput . payload = scans ;
76+ break ;
77+ case 'CxProject' :
78+ let projects = CxProject . parseProject ( resultObject )
79+ cxCommandOutput . payload = projects ;
80+ break ;
81+ default :
82+ cxCommandOutput . payload = resultObject ;
83+ }
84+ }
85+ }
86+
87+ return cxCommandOutput ;
88+ }
89+
7990 executeResultsCommands ( pathToExecutable : string , commands : string [ ] ) : Promise < CxCommandOutput > {
8091 return new Promise ( function ( resolve , reject ) {
8192 let stderr = '' ;
0 commit comments