Add CLI written in Node

This commit is contained in:
Vrganj 2021-01-16 13:14:17 +01:00
parent d666e5c19d
commit d8b6379b9a
9 changed files with 321 additions and 192 deletions

43
shared/execute.js Normal file
View file

@ -0,0 +1,43 @@
const { writeFile } = require('fs/promises');
const { spawn } = require('child_process');
function execute(language, source, args) {
return new Promise(async resolve => {
const stamp = new Date().getTime();
const sourceFile = `/tmp/${stamp}.code`;
await writeFile(sourceFile, source);
const process = spawn(__dirname + '/../lxc/execute', [
language.name,
sourceFile,
args?.join('\n') ?? '',
]);
let stdout = '';
let stderr = '';
let output = '';
process.stderr.on('data', chunk => {
stderr += chunk;
output += chunk;
});
process.stdout.on('data', chunk => {
stdout += chunk;
output += chunk;
});
process.on('exit', () => {
stderr = stderr.trim().substring(0, 65535);
stdout = stdout.trim().substring(0, 65535);
output = output.trim().substring(0, 65535);
resolve({ stdout, stderr, output });
});
});
}
module.exports = {
execute,
};

194
shared/languages.json Normal file
View file

@ -0,0 +1,194 @@
[
{
"name": "nasm",
"aliases": [
"asm",
"nasm"
]
},
{
"name": "nasm64",
"aliases": [
"asm64",
"nasm64"
]
},
{
"name": "awk",
"aliases": [
"awk"
]
},
{
"name": "bash",
"aliases": [
"bash"
]
},
{
"name": "brainfuck",
"aliases": [
"bf",
"brainfuck"
]
},
{
"name": "c",
"aliases": [
"c"
]
},
{
"name": "csharp",
"aliases": [
"c#",
"cs",
"csharp"
]
},
{
"name": "cpp",
"aliases": [
"c++",
"cpp"
]
},
{
"name": "deno",
"aliases": [
"deno",
"denojs",
"denots"
]
},
{
"name": "ruby",
"aliases": [
"duby",
"rb",
"ruby"
]
},
{
"name": "emacs",
"aliases": [
"el",
"elisp",
"emacs"
]
},
{
"name": "elixir",
"aliases": [
"elixir"
]
},
{
"name": "haskell",
"aliases": [
"haskell",
"hs"
]
},
{
"name": "go",
"aliases": [
"go"
]
},
{
"name": "java",
"aliases": [
"java"
]
},
{
"name": "node",
"aliases": [
"javascript",
"js",
"node"
]
},
{
"name": "jelly",
"aliases": [
"jelly"
]
},
{
"name": "julia",
"aliases": [
"jl",
"julia"
]
},
{
"name": "kotlin",
"aliases": [
"kotlin"
]
},
{
"name": "lua",
"aliases": [
"lua"
]
},
{
"name": "paradoc",
"aliases": [
"paradoc"
]
},
{
"name": "perl",
"aliases": [
"perl"
]
},
{
"name": "php",
"aliases": [
"php",
"php3",
"php4",
"php5"
]
},
{
"name": "python3",
"aliases": [
"py",
"py3",
"python",
"python3"
]
},
{
"name": "python2",
"aliases": [
"python2"
]
},
{
"name": "rust",
"aliases": [
"rs",
"rust"
]
},
{
"name": "swift",
"aliases": [
"swift"
]
},
{
"name": "typescript",
"aliases": [
"ts",
"typescript"
]
}
]