refactor: init 命令使用 CommandError

This commit is contained in:
2026-06-08 22:34:47 +08:00
parent 1fbec93d55
commit c63912dc0d
2 changed files with 13 additions and 5 deletions

View File

@@ -4,6 +4,7 @@ import { join } from "node:path";
import { CHANGES_DIR, ARCHIVE_DIR, RUNE_DIR, CONFIG_FILE } from "../types.ts"; import { CHANGES_DIR, ARCHIVE_DIR, RUNE_DIR, CONFIG_FILE } from "../types.ts";
import { injectOpenCode } from "../adapters/opencode.ts"; import { injectOpenCode } from "../adapters/opencode.ts";
import { injectClaudeCode } from "../adapters/claude-code.ts"; import { injectClaudeCode } from "../adapters/claude-code.ts";
import { CommandError } from "../cli/errors.ts";
const SUPPORTED_TOOLS: Record<string, (root: string) => Promise<void>> = { const SUPPORTED_TOOLS: Record<string, (root: string) => Promise<void>> = {
opencode: injectOpenCode, opencode: injectOpenCode,
@@ -16,7 +17,9 @@ export async function runInit(
): Promise<void> { ): Promise<void> {
for (const tool of tools) { for (const tool of tools) {
if (!SUPPORTED_TOOLS[tool]) { if (!SUPPORTED_TOOLS[tool]) {
throw new Error(`不支持的工具: ${tool}`); throw new CommandError(`不支持的工具: ${tool}`, {
hint: `支持的工具: ${Object.keys(SUPPORTED_TOOLS).join(", ")}`,
});
} }
} }

View File

@@ -3,6 +3,7 @@ import { existsSync } from "node:fs";
import { mkdir, rm, readFile, writeFile } from "node:fs/promises"; import { mkdir, rm, readFile, writeFile } from "node:fs/promises";
import { join } from "node:path"; import { join } from "node:path";
import { runInit } from "../../src/commands/init.ts"; import { runInit } from "../../src/commands/init.ts";
import { CommandError } from "../../src/cli/errors.ts";
const TMP_DIR = join(import.meta.dir, "__tmp_init_test__"); const TMP_DIR = join(import.meta.dir, "__tmp_init_test__");
@@ -57,9 +58,13 @@ describe("runInit", () => {
expect(content).toBe("自定义内容"); expect(content).toBe("自定义内容");
}); });
it("不支持的工具名抛出错误", async () => { it("不支持的工具名抛出 CommandError", async () => {
await expect(runInit(TMP_DIR, ["unknown-tool"])).rejects.toThrow( try {
"不支持的工具", await runInit(TMP_DIR, ["unknown-tool"]);
); expect.unreachable("应抛出错误");
} catch (e) {
expect(e).toBeInstanceOf(CommandError);
expect((e as CommandError).message).toContain("不支持的工具: unknown-tool");
}
}); });
}); });