| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778 |
- #!/usr/bin/env node
- const chalk = require('chalk')
- const path = require('path')
- const eject = require('./eject')
- const program = require('commander')
- program
- .version(require('../package.json').version)
- .usage('<command> [options]')
- program
- .version(require('../package.json').version)
- .command('eject <dir> [otherDirs...]')
- .description('copy the default skin into .xgplayer/skin for customization.')
- .action((dir = '.', otherDirs = ['custom']) => {
- wrapCommand(eject)(path.resolve(dir), otherDirs[0])
- })
- // output help information on unknown commands
- program
- .arguments('<command>')
- .action((cmd) => {
- program.outputHelp()
- console.log(` ` + chalk.red(`Unknown command ${chalk.yellow(cmd)}.`))
- console.log()
- })
- // add some useful info on help
- program.on('--help', () => {
- console.log()
- console.log(` Run ${chalk.cyan(`xgplayer <command> --help`)} for detailed usage of given command.`)
- console.log()
- })
- program.commands.forEach(c => c.on('--help', () => console.log()))
- // enhance common error messages
- const enhanceErrorMessages = (methodName, log) => {
- program.Command.prototype[methodName] = function (...args) {
- if (methodName === 'unknownOption' && this._allowUnknownOption) {
- return
- }
- this.outputHelp()
- console.log(` ` + chalk.red(log(...args)))
- console.log()
- process.exit(1)
- }
- }
- enhanceErrorMessages('missingArgument', argName => {
- return `Missing required argument ${chalk.yellow(`<${argName}>`)}.`
- })
- enhanceErrorMessages('unknownOption', optionName => {
- return `Unknown option ${chalk.yellow(optionName)}.`
- })
- enhanceErrorMessages('optionMissingArgument', (option, flag) => {
- return `Missing required argument for option ${chalk.yellow(option.flags)}` + (
- flag ? `, got ${chalk.yellow(flag)}` : ``
- )
- })
- program.parse(process.argv)
- if (!process.argv.slice(2).length) {
- program.outputHelp()
- }
- function wrapCommand (fn) {
- return (...args) => {
- return fn(...args).catch(err => {
- console.error(chalk.red(err.stack))
- })
- }
- }
|