From ec90c484b46737182a6f8150675f4ffada9dcfb3 Mon Sep 17 00:00:00 2001 From: wancat Date: Mon, 31 Jul 2023 15:42:42 +0800 Subject: [PATCH] feat: add parameters and subcommand to client.js - Added `"commander": "^11.0.0"` as a dependency in the `package.json` file - Added an `import { program } from 'commander'` statement in the `client.js` file - Modified the `createdSession` function in the `client.js` file to use `program.opts().host` instead of `API_ENDPOINT` - Added a `getSessionList` function in the `client.js` file to fetch the list of sessions - Added a `lastSession` function in the `client.js` file to get the last session from the session list - Added a `connect` function in the `client.js` file to establish a socket connection - Modified the `main` function in the `client.js` file to use `program.opts().session` instead of `process.argv[2]` to get the session ID - Modified the `main` function in the `client.js` file to use `program.opts().host` instead of `API_ENDPOINT` to initialize the socket connection - Added a `program` object with options and actions in the `client.js` file - Added `.bash_history` to the `.gitignore` file - Added `.viminfo` to the `.gitignore` file - Added `*.swp` to the `.gitignore` file Signed-off-by: wancat --- .gitignore | 3 ++ server/package.json | 1 + server/src/client.js | 73 ++++++++++++++++++++++++++++++++++++++------ yarn.lock | 5 +++ 4 files changed, 73 insertions(+), 9 deletions(-) diff --git a/.gitignore b/.gitignore index 42d9320..a389d25 100644 --- a/.gitignore +++ b/.gitignore @@ -6,6 +6,9 @@ yarn-debug.log* yarn-error.log* lerna-debug.log* .pnpm-debug.log* +.bash_history +.viminfo +*.swp # Diagnostic reports (https://nodejs.org/api/report.html) report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json diff --git a/server/package.json b/server/package.json index b5ec08a..6a40895 100644 --- a/server/package.json +++ b/server/package.json @@ -10,6 +10,7 @@ "test": "yarn node --experimental-vm-modules $(yarn bin jest)" }, "dependencies": { + "commander": "^11.0.0", "dockerode": "^3.3.5", "express": "^4.18.2", "jsonwebtoken": "^9.0.1", diff --git a/server/src/client.js b/server/src/client.js index 5e30c93..557b88d 100644 --- a/server/src/client.js +++ b/server/src/client.js @@ -1,16 +1,16 @@ /* eslint-disable no-underscore-dangle */ import { stdin, stdout, exit } from 'process' import { io } from 'socket.io-client' +import { program } from 'commander' import { get } from './utils/env.js' -const API_ENDPOINT = get('API_ENDPOINT', 'http://localhost:3000') - stdin.setRawMode(true) stdin.resume() stdin.setEncoding('utf8') -async function getSessionId() { - const res = await fetch(`${API_ENDPOINT}/api/v1/sessions`, { +async function createdSession() { + console.log('Creating a new session...') + const res = await fetch(`${program.opts().host}/api/v1/sessions`, { method: 'POST', headers: { 'Content-Type': 'application/json', @@ -20,15 +20,37 @@ async function getSessionId() { }), }) const data = await res.json() - return data._id + console.log('Created Session ID:', data._id) + return data } -async function main() { - const sessionId = process.argv[2] || (await getSessionId()) +async function getSessionList() { + const res = await fetch(`${program.opts().host}/api/v1/sessions`) + const data = await res.json() + return data +} + +async function lastSession() { + const sessions = await getSessionList() + if (sessions.length === 0) { + console.log( + 'No session found. Please use --create to create a new session.' + ) + exit(1) + } + const session = sessions[sessions.length - 1] + console.log( + `Last Session ID: ${session._id}, Quest: ${session.quest}, Created At: ${session.createdAt}` + ) + return session +} + +async function connect(sessionId) { console.log(`Session ID: ${sessionId}`) + console.log('Use Ctrl + D to exit.') if (!sessionId) exit() - const socket = io(API_ENDPOINT, { + const socket = io(program.opts().host, { query: { session_id: sessionId, }, @@ -57,4 +79,37 @@ async function main() { }) } -main() +async function main() { + console.log(program.opts().session) + // main() + + const sessionId = + program.opts().session || + (program.opts().create ? (await createdSession())._id : null) || + (await lastSession())._id + + await connect(sessionId) +} + +program + .option('-s, --session ', 'Session ID') + .option('-c, --create', 'Create a new session') + .option( + '-h, --host ', + 'Server host', + get('API_ENDPOINT', 'http://localhost:3000') + ) + .action(main) + +program + .command('list') + .description('List all sessions') + .action(async () => { + const sessions = await getSessionList() + sessions.forEach(({ _id, quest, createdAt }) => { + console.log(`${_id} ${quest} ${createdAt}`) + }) + exit() + }) + +program.parse() diff --git a/yarn.lock b/yarn.lock index 3d1cf5e..c888fdb 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1486,6 +1486,11 @@ color-name@~1.1.4: resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== +commander@^11.0.0: + version "11.0.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-11.0.0.tgz#43e19c25dbedc8256203538e8d7e9346877a6f67" + integrity sha512-9HMlXtt/BNoYr8ooyjjNRdIilOTkVJXB+GhxMTtOKwk0R4j4lS4NpjuqmRxroBfnfTSHQIHQB7wryHhXarNjmQ== + commander@^4.0.0: version "4.1.1" resolved "https://registry.yarnpkg.com/commander/-/commander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068"