52 lines
1.5 KiB
JavaScript
52 lines
1.5 KiB
JavaScript
#!/usr/bin/env node
|
||
import color from "picocolors";
|
||
import { execSync } from "child_process";
|
||
import { createRequire } from "module";
|
||
import { showMainMenu, setUpdateInfo } from "./lib/menu.js";
|
||
import { checkUpdate } from "./lib/update.js";
|
||
|
||
const require = createRequire(import.meta.url);
|
||
const pkg = require("./package.json");
|
||
|
||
const updateResult = await checkUpdate();
|
||
if (updateResult) {
|
||
setUpdateInfo(updateResult);
|
||
}
|
||
|
||
while (true) {
|
||
const selected = await showMainMenu();
|
||
|
||
console.clear();
|
||
|
||
if (selected.isUpdate) {
|
||
console.log(color.cyan("\n正在更新...\n"));
|
||
try {
|
||
execSync(`npm i -g ${pkg.name}@latest`, { stdio: "inherit" });
|
||
console.log(color.green("\n✅ 更新完成!请重新运行 yinx\n"));
|
||
process.exit(0);
|
||
} catch {
|
||
console.log(color.red("\n❌ 更新失败,请手动运行: npm i -g " + pkg.name + "@latest\n"));
|
||
process.exit(1);
|
||
}
|
||
}
|
||
|
||
console.log(color.cyan("\n正在启动: " + selected.name + "...\n"));
|
||
|
||
try {
|
||
const result = await selected.tool.run();
|
||
if (result === "back") continue;
|
||
break;
|
||
} catch (err) {
|
||
console.log(color.yellow("\n⚠️ " + selected.name + " 模块尚未实现"));
|
||
console.log(color.dim(err.message));
|
||
console.log(color.dim("\n按任意键返回主菜单..."));
|
||
await new Promise(resolve => {
|
||
process.stdin.setRawMode(true);
|
||
process.stdin.once("data", () => {
|
||
process.stdin.setRawMode(false);
|
||
resolve();
|
||
});
|
||
});
|
||
}
|
||
}
|