1- import fs from "fs" ;
2- import path from " path" ;
3- import util from " util" ;
4- import { execFile , spawn , exec } from " child_process" ;
5- import ValidationService from " ./validation.service" ;
1+ import fs from 'fs' ;
2+ import path from ' path' ;
3+ import util from ' util' ;
4+ import { execFile , spawn , exec } from ' child_process' ;
5+ import ValidationService from ' ./validation.service' ;
66const ROOT_DIR = `${ process . cwd ( ) } ` ;
7- const SOURCE_DIR = path . join ( ROOT_DIR , " executor" ) ;
7+ const SOURCE_DIR = path . join ( ROOT_DIR , ' executor' ) ;
88const TARGET_DIR = `/app/codes` ;
9- const IMAGE_NAME = " executor:1.0" ;
10- const VOL_NAME = `my_vol` ;
11- // const VOL_NAME = SOURCE_DIR;
9+ const IMAGE_NAME = ' executor:1.0' ;
10+ // const VOL_NAME = `my_vol`;
11+ const VOL_NAME = SOURCE_DIR ;
1212
1313class CodeService {
1414 async execute ( code , input , lang , id ) {
1515 //console.log('code', code);
1616 try {
17- ! input ? ( input = "" ) : null ;
17+ ! input ? ( input = '' ) : null ;
1818
1919 // validating code
2020 // await this.validateCode(code, input, lang, id);
@@ -26,7 +26,7 @@ class CodeService {
2626 ) ;
2727 if ( ! isValid ) {
2828 throw {
29- message,
29+ message
3030 } ;
3131 }
3232
@@ -52,7 +52,7 @@ class CodeService {
5252 ) ;
5353
5454 if ( OUTPUT ) {
55- console . log ( " output" , OUTPUT . toString ( ) ) ;
55+ console . log ( ' output' , OUTPUT . toString ( ) ) ;
5656 return OUTPUT . toString ( ) ;
5757 }
5858 } catch ( error ) {
@@ -63,28 +63,28 @@ class CodeService {
6363 async writeFile ( code , lang , input , id ) {
6464 let fileName = `${ id } code` ;
6565 switch ( lang ) {
66- case " javascript" : {
67- fileName += " .js" ;
66+ case ' javascript' : {
67+ fileName += ' .js' ;
6868 break ;
6969 }
70- case " cpp" : {
71- fileName += " .cpp" ;
70+ case ' cpp' : {
71+ fileName += ' .cpp' ;
7272 break ;
7373 }
74- case " python" : {
75- fileName += " .py" ;
74+ case ' python' : {
75+ fileName += ' .py' ;
7676 break ;
7777 }
78- case " java" : {
79- fileName += " .java" ;
78+ case ' java' : {
79+ fileName += ' .java' ;
8080 break ;
8181 }
82- case "c" : {
83- fileName += ".c" ;
82+ case 'c' : {
83+ fileName += '.c' ;
8484 break ;
8585 }
8686 default : {
87- throw { message : " Invalid language" } ;
87+ throw { message : ' Invalid language' } ;
8888 }
8989 }
9090 const write = util . promisify ( fs . writeFile ) ;
@@ -94,38 +94,38 @@ class CodeService {
9494 await write ( path . join ( SOURCE_DIR , `${ id } input.txt` ) , input ) ;
9595 return {
9696 file : fileName ,
97- inputFile : `${ id } input.txt` ,
97+ inputFile : `${ id } input.txt`
9898 } ;
9999 } catch ( error ) {
100100 throw { message : error } ;
101101 }
102102 }
103103
104104 async writeCommand ( lang , file , input , id ) {
105- let command = "" ;
105+ let command = '' ;
106106 switch ( lang ) {
107- case " javascript" : {
107+ case ' javascript' : {
108108 command = `cd ${ TARGET_DIR } && node ${ file } < ${ input } ` ;
109109 break ;
110110 }
111- case " cpp" : {
111+ case ' cpp' : {
112112 command = `cd ${ TARGET_DIR } && g++ -o ${ id } ${ file } && ./${ id } < ${ input } ` ;
113113 break ;
114114 }
115- case " python" : {
115+ case ' python' : {
116116 command = `cd ${ TARGET_DIR } && python ${ file } < ${ input } ` ;
117117 break ;
118118 }
119- case " java" : {
119+ case ' java' : {
120120 command = `cd ${ TARGET_DIR } && javac ${ file } && java Input < ${ input } ` ;
121121 break ;
122122 }
123- case "c" : {
123+ case 'c' : {
124124 command = `cd ${ TARGET_DIR } && gcc -o ${ id } ${ file } && ./${ id } < ${ input } ` ;
125125 break ;
126126 }
127127 default : {
128- throw { message : " Invalid language" } ;
128+ throw { message : ' Invalid language' } ;
129129 }
130130 }
131131
@@ -141,10 +141,10 @@ class CodeService {
141141 async execChild ( runCode , runContainer , id , file , inputFile , lang ) {
142142 return new Promise ( ( resolve , reject ) => {
143143 const execCont = exec ( `${ runContainer } ` ) ;
144- execCont . on ( " error" , ( err ) => {
145- throw { status : " 404" , message : err } ;
144+ execCont . on ( ' error' , err => {
145+ throw { status : ' 404' , message : err } ;
146146 } ) ;
147- execCont . stdout . on ( " data" , ( ) => {
147+ execCont . stdout . on ( ' data' , ( ) => {
148148 exec ( `${ runCode } ` , async ( error , stdout , stderr ) => {
149149 await this . endContainer ( id ) ;
150150 await this . deleteFiles ( file , inputFile , lang , id ) ;
@@ -159,24 +159,25 @@ class CodeService {
159159 }
160160
161161 async deleteFiles ( fileName , inputName , lang , id ) {
162- fs . unlinkSync ( path . join ( SOURCE_DIR , fileName ) , ( err ) => {
162+ fs . unlinkSync ( path . join ( SOURCE_DIR , fileName ) , err => {
163163 if ( err ) throw { message : err } ;
164164 } ) ;
165165 if ( inputName ) {
166- fs . unlinkSync ( path . join ( SOURCE_DIR , inputName ) , ( err ) => {
166+ fs . unlinkSync ( path . join ( SOURCE_DIR , inputName ) , err => {
167167 if ( err ) throw { message : err } ;
168168 } ) ;
169169 }
170- if ( lang == " cpp" || lang == "c" ) {
170+ if ( lang == ' cpp' || lang == 'c' ) {
171171 if ( fs . existsSync ( path . join ( SOURCE_DIR , id ) ) )
172- fs . unlinkSync ( path . join ( SOURCE_DIR , id ) , ( err ) => {
172+ fs . unlinkSync ( path . join ( SOURCE_DIR , id ) , err => {
173173 if ( err ) throw err ;
174174 } ) ;
175175 }
176- if ( lang == "java" ) {
177- fs . unlinkSync ( path . join ( SOURCE_DIR , "Input.class" ) , ( err ) => {
178- if ( err ) throw err ;
179- } ) ;
176+ if ( lang == 'java' ) {
177+ if ( fs . existsSync ( path . join ( SOURCE_DIR , 'Input.class' ) ) )
178+ fs . unlinkSync ( path . join ( SOURCE_DIR , 'Input.class' ) , err => {
179+ if ( err ) throw err ;
180+ } ) ;
180181 }
181182 }
182183
@@ -186,7 +187,7 @@ class CodeService {
186187 exec ( `${ exit } ` , ( error , stdout , stderr ) => {
187188 if ( error ) {
188189 console . log ( error ) ;
189- } else console . log ( " Container stoped and deleted" ) ;
190+ } else console . log ( ' Container stoped and deleted' ) ;
190191 } ) ;
191192 }
192193}
0 commit comments