aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJan Tuomi <jans.tuomi@gmail.com>2022-02-06 22:52:58 +0200
committerJan Tuomi <jans.tuomi@gmail.com>2022-02-06 22:52:58 +0200
commitd8773f844a6698bb11d947847733d7b314f3abfd (patch)
tree2769165a6b12b0a50c1aef7456d6e800660355c4
parent5dfbbf191c24fc88c2677a03f66c2777484a6400 (diff)
Add common types
-rw-r--r--package-lock.json56
-rw-r--r--package.json1
-rw-r--r--src/index.ts27
3 files changed, 34 insertions, 50 deletions
diff --git a/package-lock.json b/package-lock.json
index 8d33959..d00a134 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -12,15 +12,16 @@
"@tinyhttp/app": "2.0.16",
"@tinyhttp/logger": "1.3.0",
"milliparsec": "2.2.1",
- "tmp": "0.2.1"
+ "slam-types": "git://github.com/jantuomi/slam-types.git#a401431",
+ "tmp": "0.2.1",
+ "tsm": "2.2.1"
},
"devDependencies": {
"@types/node": "17.0.15",
"@typescript-eslint/eslint-plugin": "5.10.2",
"@typescript-eslint/parser": "5.10.2",
"eslint": "8.8.0",
- "nodemon": "2.0.15",
- "tsm": "2.2.1"
+ "nodemon": "2.0.15"
}
},
"node_modules/@eslint/eslintrc": {
@@ -1253,7 +1254,6 @@
"version": "0.14.18",
"resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.14.18.tgz",
"integrity": "sha512-vCUoISSltnX7ax01w70pWOSQT+e55o+2P/a+A9MSTukJAt3T4aDZajcjeG4fnZbkvOEv+dkKgdkvljz6vVQD4A==",
- "dev": true,
"hasInstallScript": true,
"bin": {
"esbuild": "bin/esbuild"
@@ -1289,7 +1289,6 @@
"cpu": [
"arm64"
],
- "dev": true,
"optional": true,
"os": [
"android"
@@ -1305,7 +1304,6 @@
"cpu": [
"x64"
],
- "dev": true,
"optional": true,
"os": [
"darwin"
@@ -1321,7 +1319,6 @@
"cpu": [
"arm64"
],
- "dev": true,
"optional": true,
"os": [
"darwin"
@@ -1337,7 +1334,6 @@
"cpu": [
"x64"
],
- "dev": true,
"optional": true,
"os": [
"freebsd"
@@ -1353,7 +1349,6 @@
"cpu": [
"arm64"
],
- "dev": true,
"optional": true,
"os": [
"freebsd"
@@ -1369,7 +1364,6 @@
"cpu": [
"ia32"
],
- "dev": true,
"optional": true,
"os": [
"linux"
@@ -1385,7 +1379,6 @@
"cpu": [
"x64"
],
- "dev": true,
"optional": true,
"os": [
"linux"
@@ -1401,7 +1394,6 @@
"cpu": [
"arm"
],
- "dev": true,
"optional": true,
"os": [
"linux"
@@ -1417,7 +1409,6 @@
"cpu": [
"arm64"
],
- "dev": true,
"optional": true,
"os": [
"linux"
@@ -1433,7 +1424,6 @@
"cpu": [
"mips64el"
],
- "dev": true,
"optional": true,
"os": [
"linux"
@@ -1449,7 +1439,6 @@
"cpu": [
"ppc64"
],
- "dev": true,
"optional": true,
"os": [
"linux"
@@ -1465,7 +1454,6 @@
"cpu": [
"s390x"
],
- "dev": true,
"optional": true,
"os": [
"linux"
@@ -1481,7 +1469,6 @@
"cpu": [
"x64"
],
- "dev": true,
"optional": true,
"os": [
"netbsd"
@@ -1497,7 +1484,6 @@
"cpu": [
"x64"
],
- "dev": true,
"optional": true,
"os": [
"openbsd"
@@ -1513,7 +1499,6 @@
"cpu": [
"x64"
],
- "dev": true,
"optional": true,
"os": [
"sunos"
@@ -1529,7 +1514,6 @@
"cpu": [
"ia32"
],
- "dev": true,
"optional": true,
"os": [
"win32"
@@ -1545,7 +1529,6 @@
"cpu": [
"x64"
],
- "dev": true,
"optional": true,
"os": [
"win32"
@@ -1561,7 +1544,6 @@
"cpu": [
"arm64"
],
- "dev": true,
"optional": true,
"os": [
"win32"
@@ -2914,6 +2896,11 @@
"integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==",
"dev": true
},
+ "node_modules/slam-types": {
+ "version": "1.0.0",
+ "resolved": "git+ssh://git@github.com/jantuomi/slam-types.git#a401431df444d5e1f8c4367226969ca7930b1991",
+ "license": "ISC"
+ },
"node_modules/slash": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
@@ -3030,7 +3017,6 @@
"version": "2.2.1",
"resolved": "https://registry.npmjs.org/tsm/-/tsm-2.2.1.tgz",
"integrity": "sha512-qvJB0baPnxQJolZru11mRgGTdNlx17WqgJnle7eht3Vhb+VUR4/zFA5hFl6NqRe7m8BD9w/6yu0B2XciRrdoJA==",
- "dev": true,
"dependencies": {
"esbuild": "^0.14.0"
},
@@ -4146,7 +4132,6 @@
"version": "0.14.18",
"resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.14.18.tgz",
"integrity": "sha512-vCUoISSltnX7ax01w70pWOSQT+e55o+2P/a+A9MSTukJAt3T4aDZajcjeG4fnZbkvOEv+dkKgdkvljz6vVQD4A==",
- "dev": true,
"requires": {
"esbuild-android-arm64": "0.14.18",
"esbuild-darwin-64": "0.14.18",
@@ -4172,126 +4157,108 @@
"version": "0.14.18",
"resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.14.18.tgz",
"integrity": "sha512-AuE8vIwc6QLquwykyscFk0Ji3RFczoOvjka64FJlcjLLhD6VsS584RYlQrSnPpRkv69PunUvyrBoEF7JFTJijg==",
- "dev": true,
"optional": true
},
"esbuild-darwin-64": {
"version": "0.14.18",
"resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.14.18.tgz",
"integrity": "sha512-nN1XziZtDy8QYOggaXC3zu0vVh8YJpS8Bol7bHaxx0enTLDSFBCXUUJEKYpmAAJ4OZRPgjXv8NzEHHQWQvLzXg==",
- "dev": true,
"optional": true
},
"esbuild-darwin-arm64": {
"version": "0.14.18",
"resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.18.tgz",
"integrity": "sha512-v0i2n6TCsbxco/W1fN8RgQt3RW00Q9zJO2eqiAdmLWg6Hx0HNHloZyfhF11i7nMUUgW8r5n++ZweIXjAFPE/gQ==",
- "dev": true,
"optional": true
},
"esbuild-freebsd-64": {
"version": "0.14.18",
"resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.18.tgz",
"integrity": "sha512-XLyJZTWbSuQJOqw867tBxvto6GjxULvWZYKs6RFHYQPCqgQ0ODLRtBmp4Fqqpde52yOe45npaaoup9IXNfr32A==",
- "dev": true,
"optional": true
},
"esbuild-freebsd-arm64": {
"version": "0.14.18",
"resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.18.tgz",
"integrity": "sha512-0ItfrR8hePnDcUXxUQxY+VfICcBfeMJCdK6mcNUXnXw6LyHjyUYXWpFXF+J18pg1/YUWRWO1HbsJ7FEwELcQIA==",
- "dev": true,
"optional": true
},
"esbuild-linux-32": {
"version": "0.14.18",
"resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.14.18.tgz",
"integrity": "sha512-mnG84D9NsEsoQdBpBT0IsFjm5iAwnd81SP4tRMXZLl09lPvIWjHHSq6LDlb4+L5H5K5y68WC//X5Dr2MtNY3DQ==",
- "dev": true,
"optional": true
},
"esbuild-linux-64": {
"version": "0.14.18",
"resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.14.18.tgz",
"integrity": "sha512-HvExRtkeA8l/p+7Lf6aBrnLH+jTCFJTUMJxGKExh2RD8lCXGTeDJFyP+BOEetP80fuuH+Syj79+LVQ9MihdBsg==",
- "dev": true,
"optional": true
},
"esbuild-linux-arm": {
"version": "0.14.18",
"resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.14.18.tgz",
"integrity": "sha512-+ZL8xfXVNaeaZ2Kxqlw2VYZWRDZ7NSK4zOV9GKNAtkkWURLsPUU84aUOBatRe9BH1O5FDo3LLQSlaA04ed6lhA==",
- "dev": true,
"optional": true
},
"esbuild-linux-arm64": {
"version": "0.14.18",
"resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.18.tgz",
"integrity": "sha512-CCWmilODE1ckw+M7RVqoqKWA4UB0alCyK2bv0ikEeEAwkzinlJeoe94t9CnT/ECSQ2sL+C16idsr+aUviGp7sg==",
- "dev": true,
"optional": true
},
"esbuild-linux-mips64le": {
"version": "0.14.18",
"resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.18.tgz",
"integrity": "sha512-8LjO4+6Vxz5gbyCHO4OONYMF689nLderCtzb8lG1Bncs4ZXHpo6bjvuWeTMRbGUkvAhp+P6hMTzia7RHOC53wQ==",
- "dev": true,
"optional": true
},
"esbuild-linux-ppc64le": {
"version": "0.14.18",
"resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.18.tgz",
"integrity": "sha512-0OJk/6iYEmF1J7LXY6+cqf6Ga5vG4an7n1nubTKce7kYqaTyNGfYcTjDZce6lnDVlZTJtwntIMszq1+ZX7Kenw==",
- "dev": true,
"optional": true
},
"esbuild-linux-s390x": {
"version": "0.14.18",
"resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.18.tgz",
"integrity": "sha512-UNY7YKZHjY31KcNanJK4QaT2/aoIQyS+jViP3QuDRIoYAogRnc6WydylzIkkEzGMaC4fzaXOmQ8fxwpLAXK4Yg==",
- "dev": true,
"optional": true
},
"esbuild-netbsd-64": {
"version": "0.14.18",
"resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.18.tgz",
"integrity": "sha512-wE/2xT9KNzLCfEBw24YbVmMmXH92cFIzrRPUlwWH9dIizjvEYYcyQ+peTMVkqzUum7pdlVLZ2CDDqAaZo/nW/w==",
- "dev": true,
"optional": true
},
"esbuild-openbsd-64": {
"version": "0.14.18",
"resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.18.tgz",
"integrity": "sha512-vdymE2jyuH/FRmTvrguCYSrq81/rUwuhMYyvt/6ibv9ac7xQ674c8qTdT+RH73sR9/2WUD/NsYxrBA/wUVTxcg==",
- "dev": true,
"optional": true
},
"esbuild-sunos-64": {
"version": "0.14.18",
"resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.14.18.tgz",
"integrity": "sha512-X/Tesy6K1MdJF1d5cbzFDxrIMMn0ye+VgTQRI8P5Vo2CcKxOdckwsKUwpRAvg+VDZ6MxrSOTYS9OOoggPUjxTg==",
- "dev": true,
"optional": true
},
"esbuild-windows-32": {
"version": "0.14.18",
"resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.14.18.tgz",
"integrity": "sha512-glG23I/JzCL4lu7DWFUtVwqFwNwlL0g+ks+mcjjUisHcINoSXTeCNToUN0bHhzn6IlXXnggNQ38Ew/idHPM8+g==",
- "dev": true,
"optional": true
},
"esbuild-windows-64": {
"version": "0.14.18",
"resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.14.18.tgz",
"integrity": "sha512-zEiFKHgV/3z14wsVamV98/5mxeOwz+ecyg0pD3fWcBz9j4EOIT1Tg47axypD4QLwiKFvve9mUBYX1cD99qxOyw==",
- "dev": true,
"optional": true
},
"esbuild-windows-arm64": {
"version": "0.14.18",
"resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.18.tgz",
"integrity": "sha512-Mh8lZFcPLat13dABN7lZThGUOn9YxoH5RYkhBq0U3WqQohHzKRhllYh7ibFixnkpMLnv8OZEbl8bGLMy03MpfA==",
- "dev": true,
"optional": true
},
"escape-goat": {
@@ -5277,6 +5244,10 @@
"integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==",
"dev": true
},
+ "slam-types": {
+ "version": "git+ssh://git@github.com/jantuomi/slam-types.git#a401431df444d5e1f8c4367226969ca7930b1991",
+ "from": "slam-types@git://github.com/jantuomi/slam-types.git#a401431"
+ },
"slash": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
@@ -5366,7 +5337,6 @@
"version": "2.2.1",
"resolved": "https://registry.npmjs.org/tsm/-/tsm-2.2.1.tgz",
"integrity": "sha512-qvJB0baPnxQJolZru11mRgGTdNlx17WqgJnle7eht3Vhb+VUR4/zFA5hFl6NqRe7m8BD9w/6yu0B2XciRrdoJA==",
- "dev": true,
"requires": {
"esbuild": "^0.14.0"
}
diff --git a/package.json b/package.json
index 30a11c8..56e87aa 100644
--- a/package.json
+++ b/package.json
@@ -11,6 +11,7 @@
"author": "",
"license": "ISC",
"dependencies": {
+ "slam-types": "git://github.com/jantuomi/slam-types.git#a401431",
"@tinyhttp/app": "2.0.16",
"@tinyhttp/logger": "1.3.0",
"milliparsec": "2.2.1",
diff --git a/src/index.ts b/src/index.ts
index 68cdadf..8e90fbe 100644
--- a/src/index.ts
+++ b/src/index.ts
@@ -5,6 +5,7 @@ import { promisify } from "util"
import { exec as cb_exec } from "child_process"
import tmp from "tmp"
import fs from "fs"
+import { RunnerApiSubmitRequest, RunnerApiSubmitResponse } from "slam-types"
const exec = promisify(cb_exec)
const app = new App()
@@ -12,23 +13,35 @@ const app = new App()
const PORT = Number(process.env.PORT) || 3000
console.log(`Serving API on port ${PORT}`)
+const interpretFile = async (sourceFile: string) => {
+ const cmd = `./interpreter ${sourceFile}`
+ try {
+ const result = await exec(cmd)
+ return result.stdout
+ } catch (err) {
+ console.error(err)
+ return err.stdout // the interpreter only outputs to stdout
+ }
+}
+
app
.use(logger({
timestamp: { format: "YYYY-MM-DDTHH:mm:ssZ" },
}))
.use(json())
- .post("/submit", async (req, res) => {
- if (!req.body || !req.body.source) {
+ .post(RunnerApiSubmitRequest.path, async (req, res) => {
+ const body: RunnerApiSubmitRequest.Body | undefined = req.body
+ if (!body || !body.source) {
return res.sendStatus(400)
}
- const { name: sourceFile } = tmp.fileSync()
- fs.writeFileSync(sourceFile, req.body.source)
+ const { name: sourceFile } = tmp.fileSync() as { name: string }
+ fs.writeFileSync(sourceFile, body.source)
- const cmd = `./interpreter ${sourceFile}`
- const result = await exec(cmd)
+ const result = await interpretFile(sourceFile)
fs.rmSync(sourceFile)
- res.send({ result })
+ const response: RunnerApiSubmitResponse.Body = { result }
+ res.send(response)
})
.listen(PORT)