bia
Version:
a tool for download git repository
311 lines (291 loc) • 7.96 kB
JavaScript
/*
* @Author: hzxulin@yeah.net
* @Date: 2018-11-20 20:59:08
* @Last Modified by: hzxulin@yeah.net
* @Last Modified time: 2019-07-25 16:57:50
*/
const path = require('path')
const inquirer = require('inquirer')
const GIT_CONFIG = require('../../config/git.json')
/**
* 选择git的操作
*/
const askGitOperation = () => {
return new Promise((resolve, reject) => {
const question = [{
type: 'list',
name: 'type',
message: '请选择要进行的操作',
choices: [
{
name: '生成excel模板',
value: 'export',
},
{
name: '根据excel批量生成',
value: 'import',
},
],
filter: (val) => {
return val
},
}]
try {
inquirer.prompt(question).then((answer) => {
resolve(answer.type)
})
} catch (err) {
reject(err)
}
})
}
/**
* 选择导出的路径
*/
const askExportPath = () => {
return new Promise((resolve, reject) => {
const question = [
{
type: 'input',
name: 'dist',
message: '选择生成的excel模板的目录(默认当前目录)',
default: process.cwd(),
validate: function (_val) {
if (/\S+/.test(_val)) {
return true
}
return '请输入正确的路径'
},
},
]
try {
inquirer.prompt(question).then((answer) => {
resolve(answer.dist)
})
} catch (err) {
reject(err)
}
})
}
/**
* 填写git的配置信息
*/
const askGitRepoInfo = () => {
return new Promise((resolve, reject) => {
let question = [
{
type: 'input',
name: 'token',
message: '请输入git api的token',
default: GIT_CONFIG.token || '',
validate: function (_val) {
if (/\S+/.test(_val)) {
return true
}
return '请输入正确的token'
},
},
{
type: 'list',
name: 'namespace_id',
message: '请选择初始化git的group',
choices: [
{
name: 'act',
value: '853',
},
{
name: 'eris',
value: '1019',
},
],
},
{
type: 'input',
name: 'name',
message: '请输入git项目名称',
validate: function (_val) {
if (/\S+/.test(_val)) {
return true
}
return '请输入正确的git项目名称'
},
},
{
type: 'input',
name: 'description',
message: '请输入git项目描述',
validate: function (_val) {
if (/\S+/.test(_val)) {
return true
}
return '请输入正确的git项目描述'
},
},
]
try {
inquirer.prompt(question).then(answer => {
resolve(answer)
})
} catch (err) {
reject(err)
}
})
}
/**
* 选择git的runner list
* @param {object} projectOpts git的配置项
*/
const askGitRunner = (projectOpts = {}) => {
return new Promise((resolve, reject) => {
let _list = projectOpts.runnerList
_list.forEach(_v => {
_v.value = _v.id
_v.name = `${_v.id} - ${_v.description}`
})
const question = [
{
type: 'list',
name: 'runner_id',
message: '请选择需要激活的runner',
choices: _list,
},
]
try {
inquirer.prompt(question).then(answer => {
projectOpts = Object.assign(projectOpts, { runner_id: answer.runner_id })
resolve(projectOpts)
})
} catch (err) {
reject(err)
}
})
}
/**
* 选择导入的excel文件
*/
const askImportExcel = () => {
return new Promise((resolve, reject) => {
const question = [
{
type: 'input',
name: 'file',
message: '选择导入的excel模板的目录(默认当前目录的 git-tpl.xlsx)',
default: 'git-tpl.xlsx',
validate: function (_val) {
if (/\.xlsx$/.test(_val)) {
return true
}
return '请输入正确的 xlsx 文件'
},
},
]
try {
inquirer.prompt(question).then((answer) => {
resolve(path.resolve(process.cwd(), answer.file))
})
} catch (err) {
reject(err)
}
})
}
/**
* 选择git配置信息的操作, 这里主要进行 token 设置
*/
const askConfigOperation = () => {
return new Promise((resolve, reject) => {
const emptyFlag = !GIT_CONFIG.token
const choices = emptyFlag
? [
{
name: '设置token',
value: 'set',
},
]
: [
{
name: '设置token',
value: 'set',
},
{
name: '删除token',
value: 'clear',
},
]
const question = [{
type: 'list',
name: 'type',
message: '请选择要进行的操作',
choices,
filter: (val) => {
return val
},
}]
try {
inquirer.prompt(question).then((answer) => {
resolve(answer.type)
})
} catch (err) {
reject(err)
}
})
}
/**
* 查询要输入的 token 内容
*/
const askTokenInput = () => {
return new Promise((resolve, reject) => {
const question = [
{
type: 'input',
name: 'token',
message: '请输入 token 的值',
validate: function (_val) {
if (/\S+/.test(_val)) {
return true
}
return '请输入正确的 token'
},
},
]
try {
inquirer.prompt(question).then((answer) => {
resolve(answer.token)
})
} catch (err) {
reject(err)
}
})
}
/**
* 确认操作是否删除
*/
const askTokenConfirm = () => {
return new Promise((resolve, reject) => {
const question = [
{
type: 'confirm',
name: 'clear',
message: '确认删除?',
default: false,
},
]
try {
inquirer.prompt(question).then((answer) => {
resolve(answer.clear)
})
} catch (err) {
reject(err)
}
})
}
module.exports = {
askGitOperation,
askExportPath,
askGitRepoInfo,
askGitRunner,
askImportExcel,
askConfigOperation,
askTokenInput,
askTokenConfirm,
}