From 4c37aedfffd156e37465799c13f8179aea812fba Mon Sep 17 00:00:00 2001 From: undefined Date: Fri, 5 Mar 2021 22:10:14 +0800 Subject: [PATCH] core: remove terminal-kit --- packages/hydrojudge/package.json | 2 +- packages/hydrooj/package.json | 6 +- packages/hydrooj/src/ui.ts | 109 ++++++++++--------------------- 3 files changed, 38 insertions(+), 79 deletions(-) diff --git a/packages/hydrojudge/package.json b/packages/hydrojudge/package.json index 77b79bac7..5c1f60612 100644 --- a/packages/hydrojudge/package.json +++ b/packages/hydrojudge/package.json @@ -1,7 +1,7 @@ { "name": "@hydrooj/hydrojudge", "bin": "bin/hydrojudge.js", - "version": "2.4.5", + "version": "2.4.6", "os": [ "linux" ], diff --git a/packages/hydrooj/package.json b/packages/hydrooj/package.json index e81d01ba1..d7f68cb65 100644 --- a/packages/hydrooj/package.json +++ b/packages/hydrooj/package.json @@ -1,6 +1,6 @@ { "name": "hydrooj", - "version": "2.19.4", + "version": "2.19.5", "bin": "bin/hydrooj.js", "main": "dist/loader.js", "typings": "dist/loader.d.ts", @@ -16,6 +16,7 @@ "cookies": "^0.8.0", "detect-browser": "^5.1.1", "fs-extra": "^9.1.0", + "inquirer": "^8.0.0", "js-yaml": "^4.0.0", "koa": "^2.13.1", "koa-body": "^4.2.0", @@ -33,13 +34,13 @@ "sockjs": "^0.3.20", "superagent": "^6.1.0", "systeminformation": "5.3.3", - "terminal-kit": "^1.47.0", "wtfnode": "^0.8.4", "yargs": "^16.2.0" }, "devDependencies": { "@types/adm-zip": "^0.4.33", "@types/fs-extra": "^9.0.7", + "@types/inquirer": "^7.3.1", "@types/js-yaml": "^4.0.0", "@types/koa": "^2.13.0", "@types/koa-router": "^7.4.1", @@ -52,7 +53,6 @@ "@types/serialize-javascript": "^5.0.0", "@types/sockjs": "^0.3.32", "@types/superagent": "^4.1.8", - "@types/terminal-kit": "^1.28.2", "@types/wtfnode": "^0.7.0", "@types/yargs": "^16.0.0", "formidable": "^1.2.2" diff --git a/packages/hydrooj/src/ui.ts b/packages/hydrooj/src/ui.ts index 356393167..b823db3ae 100644 --- a/packages/hydrooj/src/ui.ts +++ b/packages/hydrooj/src/ui.ts @@ -1,22 +1,11 @@ /* eslint-disable @typescript-eslint/no-shadow */ -// @ts-nocheck import cluster from 'cluster'; -import { - terminal, TextBox, LabeledInput, -} from 'terminal-kit'; -import { ProgressBarOptions } from 'terminal-kit/Terminal'; import { argv } from 'yargs'; +import BottomBar from 'inquirer/lib/ui/bottom-bar'; import { Logger } from './logger'; import * as bus from './service/bus'; const logger = new Logger('ui'); - -declare module 'terminal-kit/Terminal' { - interface ProgressBarOptions { - y?: number; - } -} - const useTerminal = cluster.isMaster && process.stdout.isTTY && !argv.legacy && !argv._.length; export namespace Progress { @@ -38,11 +27,8 @@ export namespace Progress { } } - export function create(args: ProgressBarOptions) { - // TODO handle worker process - return useTerminal - ? terminal.progressBar(args) - : new Progress(args); + export function create(args) { + return new Progress(args); } } @@ -53,71 +39,44 @@ async function terminate() { } catch (e) { hasError = true; } - if (useTerminal) { - terminal.styleReset(); - terminal.resetScrollingRegion(); - terminal.moveTo(terminal.width, terminal.height); - terminal('\n'); - } process.exit(hasError ? 1 : 0); } process.on('SIGINT', terminate); if (useTerminal) { - terminal.clear(); - terminal.grabInput(); - // Clipboard doesn't work well over ssh env, it throws an error. - terminal.getClipboard = () => { }; - terminal.setClipboard = () => { }; - const document = terminal.createDocument({}); - const LogBox = new TextBox({ - parent: document, - contentHasMarkup: true, - scrollable: true, - vScrollBar: true, - lineWrap: true, - x: 0, - y: 0, - width: terminal.width, - height: terminal.height - 1, - }); - const ShellInput = new LabeledInput({ - parent: document, - label: '>', - x: 1, - y: terminal.height - 1, - width: terminal.width, + let current = 0; + const history = ['']; + let input = ''; + const ui = new BottomBar({ bottomBar: '>' }); + process.stdin.on('data', (data) => { + // Control Seq? + const seq = data.toString('hex'); + logger.info(data.toString('hex')); + if (seq === '7f') input = input.substr(0, input.length - 1); + else if (seq === '1b5b41') { + // Arrow up + current--; + input = history[current]; + } else if (seq === '1b5b42') { + // Arrow down + current++; + input = history[current]; + } else if (seq === '0d') { + // Enter + history.push(input); + current = history.length; + if (input[0] === '@') { + for (const i in cluster.workers) { + cluster.workers[i].send({ event: 'message/run', payload: [input.substr(1, input.length - 1)] }); + break; + } + } else bus.parallel('message/run', input); + input = ''; + } else input += data.toString(); + ui.updateBottomBar(`>${input}`); }); bus.on('message/log', (message) => { - LogBox.appendLog(message); - }); - const history = ['']; - let current = 0; - ShellInput.on('submit', async (input: string) => { - history.push(input); - current = history.length; - ShellInput.input.setContent(' '.repeat(terminal.width), false, false); - ShellInput.input.setContent('', false, false); - if (input[0] === '@') { - for (const i in cluster.workers) { - cluster.workers[i].send({ event: 'message/run', payload: [input.substr(1, input.length - 1)] }); - break; - } - } else bus.parallel('message/run', input); - }); - ShellInput.on('key', (key) => { - if (key === 'UP') { - current--; - ShellInput.input.setContent(' '.repeat(terminal.width), false, false); - ShellInput.input.setContent(history[current] || '', false, false); - } else if (key === 'DOWN') { - current++; - ShellInput.input.setContent(' '.repeat(terminal.width), false, false); - ShellInput.input.setContent(history[current] || '', false, false); - } - }); - terminal.on('key', (key) => { - if (key === 'CTRL_C') terminate(); + ui.log.write(message); }); if (process.env.SSH_CLIENT || process.env.SSH_TTY || process.env.SSH_CONNECTION) { logger.warn('Running over ssh detected. Add a --legacy when starting if GUI mode doesn\'t work properly.');