cli: merge with api-client
This commit is contained in:
parent
e5000917e8
commit
a1536ffe56
|
@ -1 +0,0 @@
|
||||||
node_modules
|
|
|
@ -1,70 +0,0 @@
|
||||||
const fetch = require('node-fetch')
|
|
||||||
|
|
||||||
function url_join(base, endpoint){
|
|
||||||
return base + endpoint
|
|
||||||
//return new URL(endpoint, base).href;
|
|
||||||
}
|
|
||||||
|
|
||||||
class APIWrapper {
|
|
||||||
#base;
|
|
||||||
constructor(base_url){
|
|
||||||
this.#base = base_url.toString()
|
|
||||||
}
|
|
||||||
|
|
||||||
async query(endpoint, options={}){
|
|
||||||
const url = url_join(this.#base, endpoint);
|
|
||||||
return await fetch(url, options)
|
|
||||||
.then(res=>res.json())
|
|
||||||
.then(res=>{if(res.data)return res.data; throw new Error(res.message)});
|
|
||||||
}
|
|
||||||
|
|
||||||
get(endpoint){
|
|
||||||
return this.query(endpoint);
|
|
||||||
}
|
|
||||||
|
|
||||||
post(endpoint, body={}){
|
|
||||||
return this.query(endpoint, {
|
|
||||||
method: 'post',
|
|
||||||
headers: {'Content-Type': 'application/json'},
|
|
||||||
body: JSON.stringify(body)
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
delete(endpoint, body={}){
|
|
||||||
return this.query(endpoint, {
|
|
||||||
method: 'delete',
|
|
||||||
headers: {'Content-Type': 'application/json'},
|
|
||||||
body: JSON.stringify(body)
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
get url_base(){
|
|
||||||
return this.#base
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
class PistonEngine extends APIWrapper {
|
|
||||||
constructor(base_url = 'http://127.0.0.1:6969'){
|
|
||||||
super(base_url);
|
|
||||||
}
|
|
||||||
|
|
||||||
run_job({language, version, files, main, args, stdin, compile_timeout, run_timeout}){
|
|
||||||
return this.post(`/jobs`, {language, version, files, main, args, stdin, compile_timeout, run_timeout})
|
|
||||||
}
|
|
||||||
|
|
||||||
list_packages(){
|
|
||||||
return this.get('/packages').then(x=>x.packages)
|
|
||||||
}
|
|
||||||
|
|
||||||
install_package({language, version}){
|
|
||||||
return this.post(`/packages/${language}/${version}`);
|
|
||||||
}
|
|
||||||
|
|
||||||
uninstall_package({language, version}){
|
|
||||||
return this.post(`/packages/${language}/${version}`);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
module.exports = {PistonEngine}
|
|
|
@ -1,11 +0,0 @@
|
||||||
{
|
|
||||||
"name": "piston-api-client",
|
|
||||||
"version": "1.0.0",
|
|
||||||
"description": "Wraps API of Piston Engine API",
|
|
||||||
"main": "index.cjs",
|
|
||||||
"author": "Thomas Hobson <thomas@hexf.me>",
|
|
||||||
"license": "MIT",
|
|
||||||
"dependencies": {
|
|
||||||
"node-fetch": "^2.6.1"
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,4 +1,4 @@
|
||||||
const {PistonEngine} = require('piston-api-client');
|
const fetch = require('node-fetch');
|
||||||
const fs = require('fs');
|
const fs = require('fs');
|
||||||
const path = require('path');
|
const path = require('path');
|
||||||
const chalk = require('chalk');
|
const chalk = require('chalk');
|
||||||
|
@ -34,8 +34,6 @@ exports.builder = {
|
||||||
|
|
||||||
exports.handler = async function(argv){
|
exports.handler = async function(argv){
|
||||||
|
|
||||||
const api = new PistonEngine(argv['piston-url']);
|
|
||||||
|
|
||||||
const files = [...(argv.files || []),argv.file]
|
const files = [...(argv.files || []),argv.file]
|
||||||
.map(file_path => ({
|
.map(file_path => ({
|
||||||
name: path.basename(file_path),
|
name: path.basename(file_path),
|
||||||
|
@ -50,7 +48,7 @@ exports.handler = async function(argv){
|
||||||
})) || "";
|
})) || "";
|
||||||
|
|
||||||
|
|
||||||
const response = await api.run_job({
|
const request = {
|
||||||
language: argv.language,
|
language: argv.language,
|
||||||
version: argv['language-version'],
|
version: argv['language-version'],
|
||||||
files: files,
|
files: files,
|
||||||
|
@ -59,7 +57,16 @@ exports.handler = async function(argv){
|
||||||
stdin,
|
stdin,
|
||||||
compile_timeout: argv.ct,
|
compile_timeout: argv.ct,
|
||||||
run_timeout: argv.rt
|
run_timeout: argv.rt
|
||||||
})
|
};
|
||||||
|
|
||||||
|
const response = await fetch(argv['piston-url'] + '/jobs', {
|
||||||
|
method: 'post',
|
||||||
|
headers: {'Content-Type': 'application/json'},
|
||||||
|
body: JSON.stringify(request)
|
||||||
|
})
|
||||||
|
.then(res=>res.json())
|
||||||
|
.then(res=>{if(res.data)return res.data; throw new Error(res.message)})
|
||||||
|
.catch(x=>x);
|
||||||
|
|
||||||
function step(name, ctx){
|
function step(name, ctx){
|
||||||
console.log(chalk.bold(`== ${name} ==`))
|
console.log(chalk.bold(`== ${name} ==`))
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
const {PistonEngine} = require('piston-api-client');
|
const fetch = require('node-fetch');
|
||||||
const chalk = require('chalk');
|
const chalk = require('chalk');
|
||||||
|
|
||||||
exports.command = ['install <language> <language-version>']
|
exports.command = ['install <language> <language-version>']
|
||||||
|
@ -14,14 +14,14 @@ const msg_format = {
|
||||||
}
|
}
|
||||||
|
|
||||||
exports.handler = async function(argv){
|
exports.handler = async function(argv){
|
||||||
const api = new PistonEngine(argv['piston-url']);
|
const install = await fetch(
|
||||||
|
`${argv['piston-url']}/packages/${argv['language']}/${argv['language-version']}`,
|
||||||
|
{method: 'post'}
|
||||||
|
)
|
||||||
|
.then(res=>res.json())
|
||||||
|
.then(res=>{if(res.data)return res.data; throw new Error(res.message)})
|
||||||
|
.catch(x=>x);
|
||||||
|
|
||||||
const opts = {
|
|
||||||
language: argv['language'],
|
|
||||||
version: argv['language-version']
|
|
||||||
};
|
|
||||||
|
|
||||||
const install = await api.install_package(opts).catch(x=>x);
|
|
||||||
|
|
||||||
console.log(msg_format.color(install));
|
console.log(msg_format.color(install));
|
||||||
}
|
}
|
|
@ -1,4 +1,4 @@
|
||||||
const {PistonEngine} = require('piston-api-client');
|
const fetch = require('node-fetch');
|
||||||
const chalk = require('chalk');
|
const chalk = require('chalk');
|
||||||
|
|
||||||
exports.command = ['list']
|
exports.command = ['list']
|
||||||
|
@ -18,6 +18,12 @@ exports.handler = async function(argv){
|
||||||
|
|
||||||
const packages = await api.list_packages();
|
const packages = await api.list_packages();
|
||||||
|
|
||||||
|
const packages = await fetch(argv['piston-url'] + '/packages')
|
||||||
|
.then(res=>res.json())
|
||||||
|
.then(res=>{if(res.data)return res.data; throw new Error(res.message)});
|
||||||
|
.then(res=>res.packages)
|
||||||
|
.catch(x=>x)
|
||||||
|
|
||||||
|
|
||||||
const pkg_msg = packages
|
const pkg_msg = packages
|
||||||
.map(msg_format.color)
|
.map(msg_format.color)
|
||||||
|
|
|
@ -7,7 +7,7 @@
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"chalk": "^4.1.0",
|
"chalk": "^4.1.0",
|
||||||
"piston-api-client": "file:../api-client",
|
"node-fetch": "^2.6.1",
|
||||||
"yargs": "^16.2.0"
|
"yargs": "^16.2.0"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -73,11 +73,6 @@ node-fetch@^2.6.1:
|
||||||
resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.1.tgz#045bd323631f76ed2e2b55573394416b639a0052"
|
resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.1.tgz#045bd323631f76ed2e2b55573394416b639a0052"
|
||||||
integrity sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==
|
integrity sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==
|
||||||
|
|
||||||
"piston-api-client@file:../api-client":
|
|
||||||
version "1.0.0"
|
|
||||||
dependencies:
|
|
||||||
node-fetch "^2.6.1"
|
|
||||||
|
|
||||||
require-directory@^2.1.1:
|
require-directory@^2.1.1:
|
||||||
version "2.1.1"
|
version "2.1.1"
|
||||||
resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42"
|
resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42"
|
||||||
|
|
Loading…
Reference in New Issue