UNPKG

bia

Version:

a tool for download git repository

217 lines (204 loc) 5.91 kB
/* * @Author: hzxulin@yeah.net * @Date: 2018-12-05 11:03:01 * @Last Modified by: hzxulin@yeah.net * @Last Modified time: 2018-12-12 12:43:46 */ const path = require('path') const inquirer = require('inquirer') const NPM_CONFIG = require('../../config/npm.json') /** * 选择对配置进行的操作 */ const chooseConfigOperate = () => { return new Promise((resolve, reject) => { const question = [{ type: 'list', name: 'type', message: '请选择要进行的操作', choices: [ { name: '添加配置信息', value: 'add', }, { name: '更新配置信息', value: 'update', }, { name: '删除配置信息', value: 'delete', }, { name: '导入配置', value: 'import', }, { name: '导出配置', value: 'export', }, ], filter: (val) => { return val }, }] try { inquirer.prompt(question).then((answer) => { resolve(answer.type) }) } catch (err) { reject(err) } }) } /** * 添加/更新配置信息 * @param {object} npmInfo 配置信息的一条数据 */ const getUpdateConfig = (npmInfo = {}) => { return new Promise((resolve, reject) => { const questionName = [ { type: 'input', name: 'name', message: 'npm源的名称(英文)', validate: (val) => { if (/^\S+$/.test(val)) { return true } return '请填写npm源的名称' }, }, ] const questionList = [ { type: 'input', name: 'registry', message: 'npm源的地址', validate: (val) => { if (/^\S+$/.test(val)) { return true } return '请填写npm源的地址' }, }, ] let res = {} if (npmInfo.name) { try { res = Object.assign({}, { name: npmInfo.name, }) inquirer.prompt(questionList).then((answer) => { res = Object.assign(res, answer) resolve(res) }) } catch (err) { reject(err) } } else { try { inquirer.prompt(questionName).then((answer) => { for (let i = 0; i < NPM_CONFIG.list.length; i++) { if (answer.name == NPM_CONFIG.list[i].name) { console.log('== 该name已存在, 请重新输入 ==') return resolve(getUpdateConfig()) } } res = Object.assign({}, answer) inquirer.prompt(questionList).then((answer) => { res = Object.assign(res, answer) resolve(res) }) }) } catch (err) { reject(err) } } }) } /** * 选择列表中的一个npm name * @param {array} list 名称列表 */ const getConfigNameIndex = (list) => { return new Promise((resolve, reject) => { const question = [{ type: 'list', name: 'index', message: '请选择要操作的 npm 名称', choices: list, filter: (val) => { return val }, }] try { inquirer.prompt(question).then((answer) => { resolve(answer.index) }) } catch (err) { reject(err) } }) } /** * 选择要导入的文件名称 * @param {string} file 导入的目标文件 */ const chooseImportFile = (file) => { return new Promise((resolve, reject) => { const question = [{ type: 'input', name: 'file', message: `请输入要导入的文件:${process.cwd()}`, default: 'npm.json', validate: (val) => { if (/\.json$/i.test(val)) { return true } return '请输入正确的文件名' }, }] try { inquirer.prompt(question).then((answer) => { resolve(path.resolve(process.cwd(), answer.file)) }) } catch (err) { reject(err) } }) } /** * 选择导出的文件名称 * @param {string} file 导出的文件名称 */ const chooseOutputFile = (file) => { return new Promise((resolve, reject) => { const question = [{ type: 'input', name: 'file', message: `请输入要导出的文件名称:${process.cwd()}`, default: 'npm.json', validate: (val) => { if (/\.json$/i.test(val)) { return true } return '请输入正确的文件名' }, }] try { inquirer.prompt(question).then((answer) => { resolve(path.resolve(process.cwd(), answer.file)) }) } catch (err) { reject(err) } }) } module.exports = { chooseConfigOperate, getUpdateConfig, getConfigNameIndex, chooseImportFile, chooseOutputFile, }