UNPKG

unbag

Version:

一个专门用来开发npm工具的包

118 lines 5.24 kB
import { Command, Option } from "commander"; import { TransformCommand } from "../commands/transform/index.mjs"; import { parallel } from "../commands/parallel/index.mjs"; import { WaitCmdName, checkWaitFile } from "../commands/parallel/wait.mjs"; import { resolveUserConfig, mergeDefaultConfig, useDefaultConfig, mergeConfig, deepFreezeConfig } from "./config.mjs"; import { ReleaseCommand } from "../commands/release/index.mjs"; import { CommitCommand } from "../commands/commit/index.mjs"; import { AbsolutePath } from "./path.mjs"; import path from "node:path"; import { CommitLintCommand } from "./../commands/commit/lint.mjs"; import { resolveUserConfigFromCli } from "./../core/user-config.mjs"; class CustomCliCommand extends Command { addOptions(options) { for (const option of options) { this.addOption(option); } return this; } } const getCommonOptions = () => { const options = [new Option("-c,--config <string>", "\u914D\u7F6E\u6587\u4EF6\u8DEF\u5F84"), new Option("-r,--root <string>", "\u6839\u8DEF\u5F84"), new Option("-l,--local <string>", "\u672C\u5730\u5316\u8BED\u8A00")]; return options; }; const resolveCliUserConfig = async options => { const { config, root, overrides, locale } = options; const defaultConfig = useDefaultConfig(); const absoluteRoot = new AbsolutePath({ content: path.resolve(root || defaultConfig.root) }); const userConfig = await resolveUserConfig({ root: absoluteRoot, filePath: config, locale: locale || defaultConfig.locale }); let mergedConfig = mergeDefaultConfig(userConfig); mergedConfig = mergeConfig(mergedConfig, { root: absoluteRoot.content }); mergedConfig = mergeConfig(mergedConfig, { ...overrides }); const freezedConfig = deepFreezeConfig(mergedConfig); return freezedConfig; }; const read = () => { const program = new CustomCliCommand(); program.name("unbag").description("unbag CLI").version("0.8.0"); program.addCommand(new CustomCliCommand().name("transform").description("\u8F6C\u6362\u6587\u4EF6").addOptions(getCommonOptions()).option("-w,--watch", "\u542F\u7528\u89C2\u5BDF\u6A21\u5F0F").action(async options => { const userConfig = await resolveUserConfigFromCli({ cliOptions: options, overrides: { transform: { watch: options.watch } } }); const cmd = new TransformCommand(userConfig); await cmd.run(); })).addCommand(new CustomCliCommand().name("commit").description("\u63D0\u4EA4\u6587\u4EF6").addOptions(getCommonOptions()).action(async options => { const userConfig = await resolveUserConfigFromCli({ cliOptions: options }); const cmd = new CommitCommand(userConfig); await cmd.run(); }).addCommand(new CustomCliCommand().name("lint").description("\u6821\u9A8C\u63D0\u4EA4\u4FE1\u606F").addOptions(getCommonOptions()).option("-m,--message <string>", "\u4FE1\u606F").action(async options => { const { message } = options; const userConfig = await resolveUserConfigFromCli({ cliOptions: options }); const cmd = new CommitLintCommand(userConfig); await cmd.run(message); }))).addCommand(new CustomCliCommand().name("release").description("release").addOptions(getCommonOptions()).option("-d,--dry", "\u542F\u7528\u8BD5\u8FD0\u884C\u6A21\u5F0F").action(async options => { const userConfig = await resolveUserConfigFromCli({ cliOptions: options, overrides: { release: { dry: options.dry } } }); const cmd = new ReleaseCommand(userConfig); await cmd.run(); })).addCommand(new CustomCliCommand().name("clean").action(() => { console.log("clean"); }).addCommand(new CustomCliCommand().name("cleansss").action(() => { console.log("cleansss"); }))).addCommand(new CustomCliCommand().name("parallel").description("\u8FD0\u884C\u591A\u4E2Anpm script").option("-c,--config <string>", "\u914D\u7F6E\u6587\u4EF6\u8DEF\u5F84").addOptions(getCommonOptions()).action(async options => { const cliUserConfig = await resolveCliUserConfig(options); const finalConfig = mergeConfig(cliUserConfig, {}); await parallel(finalConfig); })).addCommand(new CustomCliCommand().name(WaitCmdName).description("parallel\u547D\u4EE4\u5229\u7528\u6B64\u547D\u4EE4\u6765\u8FBE\u5230wait\u529F\u80FD").option("-n,--name <string>", "\u7B49\u5F85\u7684\u547D\u4EE4\u540D\u79F0").option("-f,--absoluteFilePath <string>", "\u8981\u8F6E\u8BE2\u68C0\u67E5\u7684\u6587\u4EF6\u7684\u7EDD\u5BF9\u8DEF\u5F84").option("-tg,--tag <string>", "\u7B49\u5F85\u7684\u51FD\u6570\u8FD0\u884C\u6807\u5FD7").option("-td,--tempDir <string>", "\u4E34\u65F6\u6587\u4EF6\u5939").option("-i,--interval <string>", "\u68C0\u6D4B\u95F4\u9694").option("-tm,--timeout <string>", "\u8D85\u65F6\u65F6\u95F4").action(async options => { const { name = "", absoluteFilePath = "" } = options; let checkResult = void 0; if (absoluteFilePath && name) { checkResult = await checkWaitFile({ name, absoluteFilePath }); } if (checkResult?.content.result) { process.exit(0); } else { process.exit(1); } })); program.parse(); }; export { read };