refactor new cli mechanism
parent
f2f26ffbf6
commit
641c1a95de
|
@ -76,11 +76,13 @@ function generateTemplate(config) {
|
|||
fs.writeFileSync(config.output, output);
|
||||
}
|
||||
|
||||
|
||||
module.exports = function(args) {
|
||||
function run(args) {
|
||||
if(args.silent) {
|
||||
return doSilentGeneration(args);
|
||||
}
|
||||
return doInteractiveGeneration(args);
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
run
|
||||
}
|
|
@ -1,6 +1,22 @@
|
|||
module.exports = function(args) {
|
||||
function printVersion(verbose) {
|
||||
let { version, description, name } = require('../../package.json');
|
||||
|
||||
let output = verbose ? { name, description, version } : { version }
|
||||
console.log(output);
|
||||
return output
|
||||
}
|
||||
|
||||
let { name, description, version } = require('../package.json');
|
||||
console.log({ name, description, version });
|
||||
function run(args) {
|
||||
return printVersion(args.v || args.verbose)
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
name: 'version',
|
||||
description: 'Output the current version of apicli.',
|
||||
run,
|
||||
usage: {
|
||||
options: {
|
||||
'-v, --verbose': 'verbose output. Includes name and description.',
|
||||
}
|
||||
}
|
||||
}
|
25
src/index.js
25
src/index.js
|
@ -2,23 +2,22 @@
|
|||
|
||||
const path = require('path');
|
||||
const fs = require('fs');
|
||||
const loader = require('./loader')
|
||||
|
||||
let required_command = process.argv[2]
|
||||
let args = require('args-parser')(process.argv);
|
||||
let commands = loader.load()
|
||||
let command = commands[required_command]
|
||||
|
||||
let cmds = fs.readdirSync(path.join(__dirname, 'cmd'))
|
||||
.filter(file => file.startsWith("cmd"))
|
||||
.reduce((result, item) => {
|
||||
let name = item.replace(/^cmd\./, '').replace(/\.js$/, '');
|
||||
result[name] = path.join(__dirname, 'cmd', item);
|
||||
return result
|
||||
}, {})
|
||||
|
||||
if(!cmds[required_command]) {
|
||||
if(!command) {
|
||||
console.error(`Command '${required_command}' not found!`);
|
||||
console.log("Available commands:")
|
||||
Object.keys(cmds).forEach(item => console.log(`\t${item}`))
|
||||
process.exit(-1);
|
||||
command = commands.help
|
||||
}
|
||||
|
||||
require(cmds[required_command])(args);
|
||||
|
||||
try {
|
||||
command.run(args)
|
||||
}catch(err) {
|
||||
console.error(err)
|
||||
printCommandUsage(command)
|
||||
}
|
||||
|
|
|
@ -0,0 +1,39 @@
|
|||
const fs = require('fs')
|
||||
const path = require('path')
|
||||
|
||||
function printCommandUsage(command) {
|
||||
console.log(`- <${command.name}> ${command.description || ''}`)
|
||||
if(command.usage && command.usage.options) {
|
||||
Object.entries(command.usage.options)
|
||||
.forEach(entry => console.log(`\t ${entry[0]} | ${entry[1]}`))
|
||||
}
|
||||
}
|
||||
|
||||
function printCompleteUsage(commands) {
|
||||
Object.values(commands).forEach(printCommandUsage)
|
||||
}
|
||||
|
||||
function load() {
|
||||
|
||||
let commands = fs.readdirSync(path.join(__dirname, 'cmd'))
|
||||
.filter(file => file.startsWith("cmd"))
|
||||
.reduce((result, item) => {
|
||||
let name = item.replace(/^cmd\./, '').replace(/\.js$/, '');
|
||||
let command_path = path.join(__dirname, 'cmd', item);
|
||||
let command = require(command_path)
|
||||
|
||||
command.name = result.name || name
|
||||
command.printUsage = () => printCommandUsage(command)
|
||||
|
||||
result[name] = command
|
||||
return result
|
||||
}, {})
|
||||
|
||||
commands.help = { name: 'help', run: () => printCompleteUsage(commands) }
|
||||
commands['?'] = { name: '?', run: () => printCompleteUsage(commands) }
|
||||
|
||||
|
||||
return commands
|
||||
}
|
||||
|
||||
module.exports.load = load
|
|
@ -0,0 +1,8 @@
|
|||
const assert = require('assert').strict
|
||||
|
||||
describe("version command", () => {
|
||||
it('should return only the version if not in verbose mode', () => {
|
||||
|
||||
expect()
|
||||
})
|
||||
})
|
Loading…
Reference in New Issue