diff --git a/index.ts b/index.ts index e7c52a3..baff42e 100644 --- a/index.ts +++ b/index.ts @@ -2,11 +2,10 @@ import util from "node:util"; import { createOpenAICompatible } from "@ai-sdk/openai-compatible"; import { streamText } from "ai"; -import chalk from "chalk"; -import wrapAnsi from "wrap-ansi"; import { initConfig, loadConfig } from "./src/config"; import { Conversation } from "./src/conversation"; +import { handleTopLevel } from "./src/errors"; import Renderer from "./src/render"; async function main() { @@ -104,10 +103,4 @@ Review the above diff for any potential bugs, best practices, performance issues await renderer.renderStats(totalUsage); } -main().catch((err) => { - if ("message" in err) { - const [columns] = process.stderr.getWindowSize(); - console.error(wrapAnsi(chalk.red(err.message), columns)); - } else console.log(err); - process.exit(1); -}); +main().catch(handleTopLevel); diff --git a/src/errors.ts b/src/errors.ts new file mode 100644 index 0000000..a8e9e05 --- /dev/null +++ b/src/errors.ts @@ -0,0 +1,22 @@ +import { chalkStderr } from "chalk"; +import wrapAnsi from "wrap-ansi"; + +export function handleTopLevel(err: unknown) { + if ( + typeof err === "object" && + err !== null && + "message" in err && + typeof err.message === "string" + ) { + if (process.stderr.isTTY) { + const [columns] = process.stderr.getWindowSize(); + console.error(wrapAnsi(chalkStderr.red(err.message), columns)); + } else { + console.error(err.message); + } + } else { + console.error(String(err)); + } + + process.exit(1); +} diff --git a/tts.ts b/tts.ts index 06d3693..920f146 100644 --- a/tts.ts +++ b/tts.ts @@ -11,6 +11,7 @@ import chalk from "chalk"; import { execa } from "execa"; import { Window } from "happy-dom"; import wrapAnsi from "wrap-ansi"; +import { handleTopLevel } from "./src/errors"; async function main() { const start = Date.now(); @@ -179,10 +180,4 @@ async function main() { })`mpv --pause output.wav`; } -main().catch((err) => { - if ("message" in err) { - const [columns] = process.stderr.getWindowSize(); - console.error(wrapAnsi(chalk.red(err.message), columns)); - } else console.log(err); - process.exit(1); -}); +main().catch(handleTopLevel);