74 lines
1.5 KiB
JavaScript
74 lines
1.5 KiB
JavaScript
const fg = require('fast-glob')
|
|
const fse = require('fs-extra')
|
|
const { basename } = require('path')
|
|
const { showDir, moduleTypes } = require('./shared/base.cjs')
|
|
|
|
/**
|
|
* 自动删除
|
|
* @param {import('plop').NodePlopAPI} plop
|
|
*/
|
|
function remove(plop) {
|
|
plop.setActionType('remove', (answers) => {
|
|
const { name, type, shouldRemove } = answers
|
|
const dir = showDir(type)
|
|
const target = `./src/${dir}/${name}`
|
|
if (shouldRemove) {
|
|
return fse.removeSync(target)
|
|
}
|
|
throw new Error(`删除 ${target} 失败`)
|
|
})
|
|
|
|
plop.setGenerator('controller', {
|
|
description: '自动删除',
|
|
prompts: [
|
|
{
|
|
name: 'type',
|
|
type: 'list',
|
|
message: '请选择您要删除的类型',
|
|
async choices() {
|
|
const dirs = await fg('./src/**/*', {
|
|
deep: 1,
|
|
onlyDirectories: true,
|
|
})
|
|
const types = moduleTypes.filter((type) => {
|
|
const dir = showDir(type)
|
|
return dirs.includes(`./src/${dir}`)
|
|
})
|
|
return types
|
|
},
|
|
},
|
|
{
|
|
name: 'name',
|
|
type: 'list',
|
|
message({ type }) {
|
|
return `请选择您要删除的 ${type} 模块`
|
|
},
|
|
async choices({ type }) {
|
|
const dir = showDir(type)
|
|
let modules = await fg(`./src/${dir}/*.*`, {
|
|
deep: 1,
|
|
onlyFiles: true,
|
|
})
|
|
modules = modules.map((module) => {
|
|
return basename(module)
|
|
})
|
|
return modules
|
|
},
|
|
},
|
|
{
|
|
name: 'shouldRemove',
|
|
type: 'confirm',
|
|
default: false,
|
|
message: '再次确认是否删除',
|
|
},
|
|
],
|
|
actions: [
|
|
{
|
|
type: 'remove',
|
|
},
|
|
],
|
|
})
|
|
}
|
|
|
|
module.exports = remove
|