bia
Version:
a tool for download git repository
217 lines (204 loc) • 5.91 kB
JavaScript
/*
* @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,
}