refactor: init 命令使用 CommandError
This commit is contained in:
@@ -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(", ")}`,
|
||||||
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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");
|
||||||
|
}
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
Reference in New Issue
Block a user