UNPKG

bia

Version:

a tool for download git repository

277 lines (263 loc) 7.75 kB
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, }