版博士V2.0程序
25개 이상의 토픽을 선택하실 수 없습니다. Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

74 lines
1.5 KiB

  1. const fg = require('fast-glob')
  2. const fse = require('fs-extra')
  3. const { basename } = require('path')
  4. const { showDir, moduleTypes } = require('./shared/base.cjs')
  5. /**
  6. * 自动删除
  7. * @param {import('plop').NodePlopAPI} plop
  8. */
  9. function remove(plop) {
  10. plop.setActionType('remove', (answers) => {
  11. const { name, type, shouldRemove } = answers
  12. const dir = showDir(type)
  13. const target = `./src/${dir}/${name}`
  14. if (shouldRemove) {
  15. return fse.removeSync(target)
  16. }
  17. throw new Error(`删除 ${target} 失败`)
  18. })
  19. plop.setGenerator('controller', {
  20. description: '自动删除',
  21. prompts: [
  22. {
  23. name: 'type',
  24. type: 'list',
  25. message: '请选择您要删除的类型',
  26. async choices() {
  27. const dirs = await fg('./src/**/*', {
  28. deep: 1,
  29. onlyDirectories: true,
  30. })
  31. const types = moduleTypes.filter((type) => {
  32. const dir = showDir(type)
  33. return dirs.includes(`./src/${dir}`)
  34. })
  35. return types
  36. },
  37. },
  38. {
  39. name: 'name',
  40. type: 'list',
  41. message({ type }) {
  42. return `请选择您要删除的 ${type} 模块`
  43. },
  44. async choices({ type }) {
  45. const dir = showDir(type)
  46. let modules = await fg(`./src/${dir}/*.*`, {
  47. deep: 1,
  48. onlyFiles: true,
  49. })
  50. modules = modules.map((module) => {
  51. return basename(module)
  52. })
  53. return modules
  54. },
  55. },
  56. {
  57. name: 'shouldRemove',
  58. type: 'confirm',
  59. default: false,
  60. message: '再次确认是否删除',
  61. },
  62. ],
  63. actions: [
  64. {
  65. type: 'remove',
  66. },
  67. ],
  68. })
  69. }
  70. module.exports = remove