diff --git a/packages/app/src/main.test.ts b/packages/app/src/main.test.ts new file mode 100644 index 0000000..e46197b --- /dev/null +++ b/packages/app/src/main.test.ts @@ -0,0 +1,34 @@ +import { expect, test } from "bun:test"; +import { parseArgs, runTermDrawAppCli } from "./main"; + +test("parseArgs accepts --version and -v", () => { + expect(parseArgs(["--version"])).toEqual({ + fenced: false, + help: false, + version: true, + }); + + expect(parseArgs(["-v"])).toEqual({ + fenced: false, + help: false, + version: true, + }); +}); + +test("runTermDrawAppCli prints the current version", async () => { + const stdoutWrites: string[] = []; + const originalWrite = process.stdout.write.bind(process.stdout); + + process.stdout.write = ((chunk: string | Uint8Array) => { + stdoutWrites.push(typeof chunk === "string" ? chunk : Buffer.from(chunk).toString("utf8")); + return true; + }) as typeof process.stdout.write; + + try { + await runTermDrawAppCli(["--version"]); + } finally { + process.stdout.write = originalWrite; + } + + expect(stdoutWrites.join("")).toBe("0.3.4\n"); +}); diff --git a/packages/app/src/main.tsx b/packages/app/src/main.tsx index ceb1c56..462f4c0 100644 --- a/packages/app/src/main.tsx +++ b/packages/app/src/main.tsx @@ -1,17 +1,20 @@ import { createCliRenderer } from "@opentui/core"; import { createRoot } from "@opentui/react"; import { buildHelpText, formatSavedOutput, TermDrawApp } from "@termdraw/opentui"; +import packageJson from "../package.json"; export interface CliOptions { outputPath?: string; fenced: boolean; help: boolean; + version?: boolean; } export function parseArgs(argv: string[]): CliOptions { const options: CliOptions = { fenced: false, help: false, + version: false, }; for (let i = 0; i < argv.length; i += 1) { @@ -22,6 +25,11 @@ export function parseArgs(argv: string[]): CliOptions { continue; } + if (arg === "-v" || arg === "--version") { + options.version = true; + continue; + } + if (arg === "--fenced") { options.fenced = true; continue; @@ -60,6 +68,11 @@ export async function runTermDrawAppCli(argv = Bun.argv.slice(2)): Promise return; } + if (options.version) { + process.stdout.write(`${packageJson.version}\n`); + return; + } + const renderer = await createCliRenderer({ exitOnCtrlC: false, useMouse: true,