Unicode / server.js
HuuDatLego's picture
Upload folder using huggingface_hub
f3f9912 verified
const express = require('express');
const cors = require('cors');
const bodyParser = require('body-parser');
const { exec } = require('child_process');
const fs = require('fs');
const path = require('path');
const { v4: uuidv4 } = require('uuid');
const app = express();
const port = process.env.PORT || 7860;
app.set('view engine', 'ejs');
app.set('views', path.join(__dirname, 'views'));
app.use(cors());
app.use(bodyParser.json());
app.use(express.static(__dirname));
app.get('/', (req, res) => {
res.render('index');
});
app.get('/subject', (req, res) => {
res.render('subject');
});
const TEMP_DIR = path.join(__dirname, 'temp');
if (!fs.existsSync(TEMP_DIR)) {
fs.mkdirSync(TEMP_DIR);
}
app.post('/run', (req, res) => {
const { code, language, input } = req.body;
const id = uuidv4();
let fileName, compileCmd, runCmd;
switch (language) {
case 'c':
fileName = `main_${id}.c`;
const exeName = `main_${id}.exe`;
fs.writeFileSync(path.join(TEMP_DIR, fileName), code);
compileCmd = `gcc ${path.join(TEMP_DIR, fileName)} -o ${path.join(TEMP_DIR, exeName)}`;
runCmd = `${path.join(TEMP_DIR, exeName)}`;
break;
case 'python':
fileName = `main_${id}.py`;
fs.writeFileSync(path.join(TEMP_DIR, fileName), code);
runCmd = `python3 ${path.join(TEMP_DIR, fileName)}`;
break;
case 'java':
fileName = `Main_${id.replace(/-/g, '_')}.java`;
// Note: Java requires class name to match file name
const javaCode = code.replace(/public class \w+/, `public class Main_${id.replace(/-/g, '_')}`);
fs.writeFileSync(path.join(TEMP_DIR, fileName), javaCode);
compileCmd = `javac ${path.join(TEMP_DIR, fileName)}`;
runCmd = `java -cp ${TEMP_DIR} Main_${id.replace(/-/g, '_')}`;
break;
default:
return res.status(400).json({ error: 'Unsupported language' });
}
const execute = () => {
const process = exec(runCmd, { timeout: 10000 }, (runErr, stdout, stderr) => {
// Cleanup
fs.readdirSync(TEMP_DIR).forEach(file => {
if (file.includes(id) || file.includes(id.replace(/-/g, '_'))) {
try { fs.unlinkSync(path.join(TEMP_DIR, file)); } catch (e) {}
}
});
if (runErr && runErr.killed) {
return res.json({
stdout: stdout,
stderr: 'Error: Execution timed out (limit: 10s)',
exitCode: 124
});
}
res.json({
stdout: stdout,
stderr: stderr || (runErr ? runErr.message : ''),
exitCode: runErr ? runErr.code : 0
});
});
if (input) {
process.stdin.write(input);
process.stdin.end();
}
};
if (compileCmd) {
exec(compileCmd, (compErr, stdout, stderr) => {
if (compErr) {
return res.json({
stdout: stdout,
stderr: stderr || compErr.message,
exitCode: compErr.code
});
}
execute();
});
} else {
execute();
}
});
app.listen(port, "0.0.0.0", () => {
console.log(`Server is running on port ${port}`);
});