@quicksand-cloud/specs
Version:
QuickSand Cloud Specs CLI 工具 - 开发规范配置管理命令行工具,提供项目初始化、配置更新和验证功能
74 lines (72 loc) • 2.32 kB
JavaScript
#!/usr/bin/env node
import { intro, confirm, isCancel, cancel, log, multiselect, outro } from '@clack/prompts';
import { e as editorconfig, c as cSpell, g as git, h as husky, l as lintStaged, p as prettier, t as typescript, o as oxlint, a as commitlint, S as Specs } from './shared/specs.CwFHFXDN.mjs';
import 'node:path';
import 'deepmerge-ts';
import 'fs-extra';
const allPlugins = [
editorconfig,
cSpell,
git,
husky,
lintStaged,
prettier,
typescript,
oxlint,
commitlint
];
intro("\u{1F680} QuickSand Cloud Specs \u914D\u7F6E\u751F\u6210\u5668");
const isDevelopment = await confirm({
message: "\u662F\u5426\u542F\u7528\u5F00\u53D1\u6A21\u5F0F\uFF1F",
initialValue: false
});
if (isCancel(isDevelopment)) {
cancel("\u64CD\u4F5C\u5DF2\u53D6\u6D88");
process.exit(0);
}
if (isDevelopment) {
log.info("\u{1F527} \u5F00\u53D1\u6A21\u5F0F\u5DF2\u542F\u7528 - \u5C06\u4FDD\u6301 workspace:^ \u4F9D\u8D56");
} else {
log.info("\u{1F4E6} \u751F\u4EA7\u6A21\u5F0F\u5DF2\u542F\u7528 - \u5C06 workspace:^ \u4F9D\u8D56\u66FF\u6362\u4E3A latest");
}
const pluginOptions = [
{
value: "all",
label: "\u5168\u90E8\u63D2\u4EF6",
hint: "\u6267\u884C\u6240\u6709\u53EF\u7528\u7684\u63D2\u4EF6\u914D\u7F6E"
},
...allPlugins.map((plugin) => ({
value: plugin.name,
label: plugin.name,
hint: plugin.description
}))
];
const selectedPlugins = await multiselect({
message: "\u8BF7\u9009\u62E9\u8981\u6267\u884C\u7684\u63D2\u4EF6\u914D\u7F6E\uFF1A",
options: pluginOptions,
required: true
});
if (isCancel(selectedPlugins)) {
cancel("\u64CD\u4F5C\u5DF2\u53D6\u6D88");
process.exit(0);
}
let pluginsToRun;
if (selectedPlugins.includes("all")) {
pluginsToRun = allPlugins;
console.log("\u2728 \u5C06\u6267\u884C\u6240\u6709\u63D2\u4EF6\u914D\u7F6E");
} else {
pluginsToRun = allPlugins.filter(
(plugin) => selectedPlugins.includes(plugin.name)
);
console.log(`\u2728 \u5C06\u6267\u884C ${pluginsToRun.length} \u4E2A\u63D2\u4EF6\u914D\u7F6E`);
}
const specs = new Specs(process.cwd(), pluginsToRun, isDevelopment);
try {
await specs.run();
outro("\u{1F389} \u914D\u7F6E\u751F\u6210\u5B8C\u6210\uFF01");
} catch (error) {
cancel(
`\u274C \u6267\u884C\u5931\u8D25: ${error instanceof Error ? error.message : String(error)}`
);
process.exit(1);
}