import inquirer, {Questions} from 'inquirer' import fs from 'fs-extra'; import globby from 'globby' import fuzzy from 'fuzzy' import {LegoOptions} from '../core/resolveOption' import log from '../utils/log' type DelOptions = { configType: 'form' | 'queryForm', configListToDel: string[] } type ConfigPathMap = { form: string[], queryForm: string[] } type DelQuestions = {[propName: string]: any;}[] | Questions let legoOption: LegoOptions const configPathMapIns: ConfigPathMap = { form: [], queryForm: [] } const questions: DelQuestions = [ { type: 'list', name: 'configType', message: '请选择删除哪种配置', choices: ['form', 'queryForm'] }, { type: 'checkbox-plus', name: 'configListToDel', message: '请选择要删除的配置文件(多选)', pageSize: 10, highlight: true, searchable: true, source: async function (answers: DelOptions, input: string) { let configPathList: string[] = [] if (configPathMapIns[answers.configType].length === 0) { configPathList = await globby( answers.configType === 'form' ? legoOption.customFormMatch : legoOption.queryFormMatch ) } return fuzzy.filter(input, configPathList).map(function(element) { return element.original; }); }, validate: (input?: string[]) => { if (!input || input.length === 0) { return '请至少选择一个配置文件' } return true } }, { type: 'confirm', name: 'ensureToDel', message: '删除后配置文件将无法恢复, 确认要删除吗?' } ] export default function(option: LegoOptions) { legoOption = option inquirer.prompt(questions) .then((answers: DelOptions) => { answers.configListToDel.forEach((configPath: string) => { fs.removeSync(configPath) log.success(`成功删除${configPath}`) }) }) }