import consola from "consola" import inquirer from "inquirer" import { addGitCommit } from "./addGitCommit" import { backupFirst } from "./backupFirst" import { hasChangeNoCommit } from "./hasChangeNoCommit" import { isRepository } from "./isRepository" /** * 包装一个操作,在执行前进行备份 * @param action 要执行的操作 * @param message 提交信息 * @returns 包装后的函数 */ export function actionWithBackup Promise>(action: T, message?: string): (...args: Parameters) => Promise export function actionWithBackup Promise>(action: T, message: string): (...args: Parameters) => Promise export function actionWithBackup(action: (...args: any[]) => Promise, message?: string) { return async (...args: any[]) => { const skip = await backupFirst() const msg = await action(...args) if (!(await isRepository()) || skip || !(await hasChangeNoCommit())) return const { commit } = await inquirer.prompt({ type: "confirm", name: "commit", message: "是否自动提交代码", default: true, }) if (!commit) return let commitMessage: string if (typeof message === "string") commitMessage = message else { if (typeof msg === "string") commitMessage = msg else { consola.warn("请提供提交信息") throw new Error("请提供提交信息") } } await addGitCommit(commitMessage) } }