bia
Version:
a tool for download git repository
277 lines (263 loc) • 7.75 kB
JavaScript
const path = require('path')
const inquirer = require('inquirer')
const IOS_CONFIG = require('../../config/ios.json')
/**
* 选择iphone启动
* @param {array} list iphone的列表
*/
const chooseIphone = (list) => {
return new Promise((resolve, reject) => {
const question = [{
type: 'list',
name: 'iphone',
message: '请选择设备',
choices: list,
filter: (val) => {
return val
},
}]
try {
inquirer.prompt(question).then((answer) => {
resolve(answer.iphone)
})
} catch (err) {
reject(err)
}
})
}
/**
* 选择对配置进行的操作
*/
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 {string} file 导入的目标文件
*/
const chooseImportFile = (file) => {
return new Promise((resolve, reject) => {
const question = [{
type: 'input',
name: 'file',
message: `请输入要导入的文件:${process.cwd()}`,
default: 'ios.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: 'ios.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)
}
})
}
/**
* 选择列表中的一个app name
* @param {array} list 名称列表
*/
const getConfigNameIndex = (list) => {
return new Promise((resolve, reject) => {
const question = [{
type: 'list',
name: 'index',
message: '请选择要操作的 app 名称',
choices: list,
filter: (val) => {
return val
},
}]
try {
inquirer.prompt(question).then((answer) => {
resolve(answer.index)
})
} catch (err) {
reject(err)
}
})
}
/**
* 添加/更新配置信息
* @param {object} appInfo 配置信息的一条数据
*/
const getUpdateConfig = (appInfo = {}) => {
return new Promise((resolve, reject) => {
const questionName = [
{
type: 'input',
name: 'name',
message: 'app的英文名(用于启动指令)',
validate: (val) => {
if (/^\S+$/.test(val)) {
return true
}
return '请填写app的英文名'
},
},
]
const questionList = [
{
type: 'input',
name: 'cname',
default: appInfo.cname || null,
message: 'app的中文名(用于list展示)',
validate: (val) => {
if (/^\S+$/.test(val)) {
return true
}
return '请填写app的中文名'
},
},
{
type: 'input',
name: 'packageName',
message: 'app文件名(xxx.app)',
default: appInfo.packageName || '',
validate: (val) => {
if (/\.app$/i.test(val)) {
return true
}
return '请填写正确的packageName'
},
},
{
type: 'input',
name: 'boundId',
message: '请填写boundId(com.xxx.xxx)',
default: appInfo.boundId || '',
},
{
type: 'input',
name: 'scheme',
message: '请填写scheme(用于调用对应app打开H5页面,如:xxx://webview?url=)',
default: appInfo.scheme || '',
},
{
type: 'list',
name: 'repoType',
message: 'app包存放的类型',
choices: ['git', 'other'],
filter: (val) => {
return val
},
},
{
type: 'input',
name: 'repoUrl',
message: 'app包存放的地址',
default: appInfo.repoUrl || '',
},
]
let res = {}
if (appInfo.name) {
try {
res = Object.assign({}, {
name: appInfo.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 < IOS_CONFIG.list.length; i++) {
if (answer.name == IOS_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)
}
}
})
}
module.exports = {
chooseIphone,
chooseConfigOperate,
chooseImportFile,
chooseOutputFile,
getConfigNameIndex,
getUpdateConfig,
}