import type { Command } from 'commander'; import { CliError, isVerbose } from './error-handler'; import { type CommandOutput, createOutput, type GlobalCliOptions } from './output'; function getGlobalCliOptions(program: Command): GlobalCliOptions { const opts = program.opts() as Partial; return { database: opts.database, json: Boolean(opts.json), quiet: Boolean(opts.quiet), }; } export async function runCommand(program: Command, fn: (output: CommandOutput) => Promise): Promise { const output = createOutput(getGlobalCliOptions(program)); try { await fn(output); } catch (error) { const message = error instanceof Error ? error.message : String(error); const stack = isVerbose() && error instanceof Error ? error.stack : undefined; output.error(message, { code: error instanceof CliError ? error.code : undefined, stack }); process.exit(1); } }