UNPKG

taitan

Version:

小程序开发辅助工具

224 lines (216 loc) 6.13 kB
const { hasProject, getProjectList, getProjectListConfigPath, getProjectByDir, setProjectList, setProjectByDir, logPageList, } = require("../core/tools"); const chalk = require("chalk"); const inquirer = require("inquirer"); const fs = require("fs"); const helper = { //确认框 confirm(message, defaultValue = false) { return inquirer .prompt([ { type: "confirm", name: "confirm", message, default: defaultValue, }, ]) .then((res) => { return res.confirm; }); }, //输入项目名 getProjectNameFromCmd() { return inquirer.prompt([ { type: "input", name: "projectName", message: "请输入项目名称", validate(inp) { if (!inp) { return "项目名称不能为空"; } else if (hasProject(inp)) { return `项目:${chalk.green(inp)} 已存在,请输入其他项目名`; } else { return true; } }, }, ]); }, //选择项目 selectProjectFromCmd(message) { let projectList = getProjectList(); if(!projectList.length){ return Promise.resolve(null) } return inquirer .prompt([ { type: "list", message: message || "请选择项目", name: "selectProject", choices: projectList.map((i) => i.projectName), }, ]) .then((res) => { return projectList.find((i) => i.projectName === res.selectProject); }); }, //添加页面 async selectPage(dir, message, type='select',isConfirmSave=true) { let pagePath = await helper.getPagePath(dir,message,type) let query = await inquirer.prompt([ { type: "input", message: "请输入页面参数,如:a=1&b=2(没有参数直接按回车键)", name: "query", }, ]); let result = { page: pagePath.page, query: query.query, }; if(isConfirmSave){ let isSave = await helper.confirm("是否添加页面到本地编译列表", true); if (isSave) { await helper.savePage(result, dir); } }else{ await helper.savePage(result, dir); } return result; }, //获取页面path async getPagePath(dir, message,type = "select") { if (type === "select") { let project = getProjectByDir(dir); let pages = project.appInfo.pages; console.log(pages) return inquirer.prompt([ { type: "list", message: message || "请选择页面", name: "page", choices: pages, }, ]); } if (type === "input") return inquirer.prompt([ { type: "input", message: message || "请输入页面路径", name: "page", }, ]); }, //选择本地保存的编译 async selectCachePage(dir, message) { let pageList = getProjectByDir(dir).pageList || []; let res = await inquirer.prompt([ { type: "list", name: "pageName", choices: pageList.map((i) => i.pageName), message, }, ]); return pageList.find((i) => i.pageName === res.pageName); }, //保存编辑模式到本地 async savePage(result, dir) { let projectList = getProjectList(); let currentProject = getProjectByDir(dir); let pageList = currentProject.pageList || []; let pageres = await inquirer.prompt([ { type: "input", name: "pageName", message: "请输入页面名称", validate(inp) { if (!inp) { return "页面名称不能为空"; } else if (pageList.find((i) => i.pageName === inp)) { return "页面名称已被占用"; } else { return true; } }, }, ]); pageList.push({ pageName: pageres.pageName, page: result.page, query: result.query, }); projectList.forEach((item) => { if (item.dir === dir) { item.pageList = pageList; } }); setProjectList(projectList); console.log(chalk.green("添加成功")); }, //移除项目 async removeProjectFromList(all) { let list = getProjectList(); if (!list.length) { console.log(chalk.green("暂未添加项目~")); return; } let configPath = getProjectListConfigPath(); if (!all) { let res = await helper.selectProjectFromCmd("请选择要移除的项目"); list = list.filter((p) => { return p.projectName !== res.projectName; }); fs.writeFileSync(configPath, JSON.stringify(list, null, "\t")); console.log(chalk.green(`项目'${res.projectName}'删除成功~`)); } else { let confirm = await helper.confirm(); if (confirm) { fs.writeFileSync(configPath, JSON.stringify([], null, "\t")); console.log(chalk.green("已删除全部项目~")); } else { console.log(chalk.yellow("取消删除全部项目")); } } }, //移除已缓存的编译模式 async removeProjectPage(all){ let project = await helper.selectProjectFromCmd() if(!project) { return console.log(chalk.red('请先保存项目')) } if(!project.pageList?.length){ return console.log(chalk.yellow('该项目暂未保存编译页面')) } if(all){ project.pageList = [] }else{ let page = await helper.selectCachePage(project.dir) project.pageList = project.pageList.filter(i=>i.pageName !== page.pageName) } setProjectByDir(project.dir,project) console.log(chalk.green(`页面删除成功`)) logPageList(project.pageList) }, //添加页面到项目 async addPageToProject(message,type="select", ){ let projectList = getProjectList() if(!projectList.length) { return console.log(chalk.red('请先保存项目')) } let selectProject = await helper.selectProjectFromCmd() await helper.selectPage(selectProject.dir, message||"请输入要保存的页面路径", type,false); } }; module.exports = helper;