diff --git a/backend/src/api.ts b/backend/src/api.ts index 5105cc8..f6dbe51 100644 --- a/backend/src/api.ts +++ b/backend/src/api.ts @@ -1,5 +1,3 @@ -"use strict"; - import * as fs from "fs"; import * as mkdirp from "mkdirp"; import * as pty from "node-pty"; @@ -13,7 +11,7 @@ import { LangConfig, langs } from "./langs"; export class Session { code: string; config: LangConfig; - term: { pty: IPty; live: boolean }; + term: { pty: IPty | null; live: boolean }; ws: WebSocket; constructor(ws: WebSocket, lang: string) { @@ -39,7 +37,7 @@ export class Session { } else if (typeof msg.input !== "string") { console.error(`terminalInput: missing or malformed input field`); } else { - this.term.pty.write(msg.input); + this.term.pty!.write(msg.input); } break; case "runCode": @@ -132,7 +130,7 @@ export class Session { pty: pty.spawn("bash", ["-c", cmdline], { name: "xterm-color", cwd: tmpdir, - env: process.env, + env: process.env as { [key: string]: string }, }), live: true, }; diff --git a/backend/src/langs.ts b/backend/src/langs.ts index fcfd69a..021d4f8 100644 --- a/backend/src/langs.ts +++ b/backend/src/langs.ts @@ -1,5 +1,3 @@ -"use strict"; - export interface LangConfig { aliases?: string[]; name: string; diff --git a/backend/src/server.ts b/backend/src/server.ts index c2fce2a..9134449 100644 --- a/backend/src/server.ts +++ b/backend/src/server.ts @@ -1,5 +1,3 @@ -"use strict"; - import * as http from "http"; import * as https from "https"; @@ -13,8 +11,8 @@ import * as api from "./api"; import { langs } from "./langs"; const host = process.env.HOST || "localhost"; -const port = parseInt(process.env.PORT) || 6119; -const tlsPort = parseInt(process.env.TLS_PORT) || 6120; +const port = parseInt(process.env.PORT || "") || 6119; +const tlsPort = parseInt(process.env.TLS_PORT || "") || 6120; const useTLS = process.env.TLS ? true : false; const app = express(); @@ -56,7 +54,10 @@ app.get("/:lang", (req, res) => { app.use("/css", express.static(appRoot.path + "/frontend/styles")); app.use("/js", express.static(appRoot.path + "/frontend/out")); -function addWebsocket(baseApp: express.Express, httpsServer: https.Server) { +function addWebsocket( + baseApp: express.Express, + httpsServer: https.Server | undefined +) { const app = ws(baseApp, httpsServer).app; app.ws("/api/v1/ws", (ws, req) => { const lang = getQueryParams(req).get("lang"); @@ -77,7 +78,7 @@ function addWebsocket(baseApp: express.Express, httpsServer: https.Server) { ); ws.close(); } else { - new api.Session(ws, getQueryParams(req).get("lang")); + new api.Session(ws, lang); } }); return app; @@ -86,8 +87,10 @@ function addWebsocket(baseApp: express.Express, httpsServer: https.Server) { if (useTLS) { const httpsServer = https.createServer( { - key: Buffer.from(process.env.TLS_PRIVATE_KEY, "base64").toString("ascii"), - cert: Buffer.from(process.env.TLS_CERTIFICATE, "base64").toString( + key: Buffer.from(process.env.TLS_PRIVATE_KEY || "", "base64").toString( + "ascii" + ), + cert: Buffer.from(process.env.TLS_CERTIFICATE || "", "base64").toString( "ascii" ), }, diff --git a/frontend/src/app.ts b/frontend/src/app.ts index e9a08ad..95deb8d 100644 --- a/frontend/src/app.ts +++ b/frontend/src/app.ts @@ -1,5 +1,3 @@ -"use strict"; - import * as monaco from "monaco-editor"; import { Terminal } from "xterm"; import { FitAddon } from "xterm-addon-fit"; @@ -17,7 +15,7 @@ const config: RijuConfig = (window as any).rijuConfig; const term = new Terminal(); const fitAddon = new FitAddon(); term.loadAddon(fitAddon); -term.open(document.getElementById("terminal")); +term.open(document.getElementById("terminal")!); fitAddon.fit(); window.addEventListener("resize", () => fitAddon.fit()); @@ -81,21 +79,23 @@ function scheduleConnect() { retryDelayMs *= 2; } -let socket = null; +let socket: WebSocket | null = null; tryConnect(); -term.onData((data) => - socket.send(JSON.stringify({ event: "terminalInput", input: data })) +term.onData( + (data) => + socket && + socket.send(JSON.stringify({ event: "terminalInput", input: data })) ); -const editor = monaco.editor.create(document.getElementById("editor"), { +const editor = monaco.editor.create(document.getElementById("editor")!, { minimap: { enabled: false }, scrollbar: { verticalScrollbarSize: 0 }, }); window.addEventListener("resize", () => editor.layout()); -editor.getModel().setValue(config.template); -monaco.editor.setModelLanguage(editor.getModel(), config.monacoLang); +editor.getModel()!.setValue(config.template); +monaco.editor.setModelLanguage(editor.getModel()!, config.monacoLang); -document.getElementById("runButton").addEventListener("click", () => { - socket.send(JSON.stringify({ event: "runCode", code: editor.getValue() })); +document.getElementById("runButton")!.addEventListener("click", () => { + socket?.send(JSON.stringify({ event: "runCode", code: editor.getValue() })); }); diff --git a/package.json b/package.json index c533794..6fdb2a0 100644 --- a/package.json +++ b/package.json @@ -8,6 +8,7 @@ "@types/express": "^4.17.6", "@types/express-ws": "^3.0.0", "@types/lodash": "^4.14.155", + "@types/mkdirp": "^1.0.1", "@types/tmp": "^0.2.0", "app-root-path": "^3.0.0", "css-loader": "^3.5.3", diff --git a/tsconfig.json b/tsconfig.json index a27d286..9e16e58 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -3,7 +3,8 @@ "outDir": "./backend/out", "resolveJsonModule": true, "rootDir": "./backend/src", - "sourceMap": true + "sourceMap": true, + "strict": true }, "include": ["backend/src"] } diff --git a/yarn.lock b/yarn.lock index 04f1960..1fa7b4a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -65,6 +65,13 @@ resolved "https://registry.yarnpkg.com/@types/mime/-/mime-2.0.2.tgz#857a118d8634c84bba7ae14088e4508490cd5da5" integrity sha512-4kPlzbljFcsttWEq6aBW0OZe6BDajAmyvr2xknBG92tejQnvdGtT9+kXSZ580DqpxY9qG2xeQVF9Dq0ymUTo5Q== +"@types/mkdirp@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@types/mkdirp/-/mkdirp-1.0.1.tgz#0930b948914a78587de35458b86c907b6e98bbf6" + integrity sha512-HkGSK7CGAXncr8Qn/0VqNtExEE+PHMWb+qlR1faHMao7ng6P3tAaoWWBMdva0gL5h4zprjIO89GJOLXsMcDm1Q== + dependencies: + "@types/node" "*" + "@types/node@*": version "14.0.11" resolved "https://registry.yarnpkg.com/@types/node/-/node-14.0.11.tgz#61d4886e2424da73b7b25547f59fdcb534c165a3"