lizi-wxapp-cli
Version:
微信小程序快速创建cli脚手架
94 lines (83 loc) • 2.98 kB
text/typescript
import autocomplete from '@moyuyc/inquirer-autocomplete-prompt'
import chalk from 'chalk'
import fuzzy from 'fuzzy'
import inquirer, { Answers, ConfirmQuestion } from 'inquirer'
import jsonFormat from 'json-format'
import ora, { Ora } from 'ora'
import path from 'path'
import Base from './base'
interface DeleteInterface {
init(): Promise<void>
delete(): Promise<void>
}
export default abstract class Delete extends Base implements DeleteInterface {
protected selectList: string = ''
protected constructor() {
super()
}
public async init(): Promise<void> {
await this.getAppJson()
await this.getProjectConfig()
inquirer.registerPrompt('autocomplete', autocomplete)
inquirer.prompt([
this.__selectList(),
this.__isDetele()
]).then(({selectList, isDelete}: any) => {
this.selectList = selectList
if (isDelete) this.delete()
}).catch(console.log)
}
public async delete(): Promise<void> {
const loading: Ora = ora('正在删除...').start()
let deleteRoot: string = path.join(this.projectRoot, this.selectList)
let deleteArr: string[] = deleteRoot.split('/')
deleteArr.splice(deleteArr.length - 1, 1)
deleteRoot = deleteArr.join('/')
// 删除文件
loading.text = '删除文件'
await this.trash(deleteRoot)
// 修改app.json
this.subList.map((v: any, k) => {
if (v.path === this.selectList) {
if (v.subpackage) {
let subIdx: any = this.AppJson.subpackages[v.index]
let idx: number = subIdx[this.typeRoot].findIndex(f => path.join(subIdx.root, f) === v.path)
subIdx[this.typeRoot].splice(idx, 1)
} else {
this.AppJson[this.typeRoot].splice(k, 1)
}
}
})
loading.text = '修改app.json'
await this.writeFile(this.projectRoot, 'app.json', jsonFormat(this.AppJson))
// 如果是page则还需要修改project.config.json
if (this.typeName === '页面') {
let projectIdx = this.projectConfigJson.condition.miniprogram.list
let index = projectIdx.findIndex(v => v.pathName === deleteRoot)
projectIdx.splice(index, 1)
loading.text = '修改project.config.json'
await this.writeFile(this.projectRoot, 'project.config.json', jsonFormat(this.projectConfigJson))
}
loading.succeed(chalk.green(`删除【${this.selectList}】成功`))
}
private __selectList(): object {
return {
type: 'autocomplete',
name: 'selectList',
message: chalk.red(`选择你要删除的${this.typeName}:`),
choices: [],
suggestOnly: false,
source: (_answers, input: string) => {
return Promise.resolve(fuzzy.filter(input, [...this.subList.map(v => v.path)]).map(e => e.original))
}
}
}
private __isDetele(): ConfirmQuestion<Answers> {
return {
type: 'confirm',
name: 'isDelete',
message: '删除后可在回收箱恢复,确认删除?',
default: true
}
}
}