import { parseCliArguments } from "./args-parser.js"; import { printHelp } from "./help.js"; import { CliError } from "./errors.js"; import { runDevCommand } from "../commands/dev.js"; import { runDoctorCommand } from "../commands/doctor.js"; import { runGenCommand } from "../commands/gen.js"; import { runInspectCommand } from "../commands/inspect.js"; export interface CommandExecutionOptions { configPath?: string; cwd?: string; json: boolean; positional: string[]; } type CommandHandler = (options: CommandExecutionOptions) => Promise; const COMMANDS = new Map([ ["dev", runDevCommand], ["doctor", runDoctorCommand], ["gen", runGenCommand], ["inspect", runInspectCommand], ]); export async function runCli(argv: string[]): Promise { const parsed = parseCliArguments(argv); const commandName = parsed.command; const flags = parsed.flags; if (flags.help || commandName === "help" || !commandName) { printHelp(); return; } const handler = COMMANDS.get(commandName); if (!handler) { printHelp(); throw new CliError(`Unknown command: ${commandName}`); } const options: CommandExecutionOptions = { configPath: readStringFlag(flags.config), cwd: readStringFlag(flags.cwd), json: readBooleanFlag(flags.json) ?? false, positional: parsed.positional, }; await handler(options); } function readStringFlag(value: string | boolean | undefined): string | undefined { return typeof value === "string" && value.length > 0 ? value : undefined; } function readBooleanFlag(value: string | boolean | undefined): boolean | undefined { if (value === undefined) return undefined; if (typeof value === "boolean") return value; if (value === "true") return true; if (value === "false") return false; return undefined; }