all files / mlpm/lib/ args.js

100% Statements 23/23
100% Branches 8/8
100% Functions 2/2
100% Lines 23/23
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110    10×         10×                             10×         10×                                                                                         96×                               10×        
'use strict'
 
var yargs = require('yargs')
  , _ = require('lodash')
 
// for each array, the first item must be the command filename in ./lib
// the following items are command synonyms
var cmds = [
  ['deploy'],
  ['info', 'v', 'show', 'view'],
  ['init', 'new'],
  ['install', 'i', 'isntall'],
  ['login', 'adduser', 'add-user'],
  ['ls'],
  ['publish'],
  ['search'],
  ['uninstall', 'rm', 'unisntall'],
  ['unpublish'],
  ['version'],
  ['whoami']
]
 
var usage = 'mlpm <command>\n\n' +
            'where <command> is one of:\n    ' +
            'deploy, init, info, install, login, ls,\n    ' +
            'publish, search, uninstall, unpublish, version, whoami'
 
var argv = yargs
  .boolean('h')
  .alias('h', 'help')
  .boolean('q')
  .alias('q', 'quiet')
  .alias('q', 'silent')
  // install
  .boolean('save')
  // unpublish
  .boolean('f')
  .alias('f', 'force')
  // publish
  .boolean('dryrun')
  .alias('dryrun', 'dry-run')
  .alias('zip', 'export')
  // deploy
  .alias('H', 'host')
  .alias('P', 'port')
  .alias('u', 'username')
  .alias('user', 'username')
  .alias('p', 'password')
  // version
  .alias('m', 'message')
  // help
  .boolean('version')
  .alias('v', 'version')
  .usage(usage)
  .argv
 
function parse() {
  var args = {
    usage: yargs.help,
    help: argv.help,
    q: argv.q,
    force: argv.force,
    dryrun: argv.dryrun,
    export: argv.export,
    save: argv.save,
    host: argv.host,
    port: argv.port,
    username: argv.username,
    password: argv.password,
    message: argv.message,
    version: argv.version,
    argv: argv
  }
 
  var synonyms = _.filter(cmds, function(arr) {
    return _.contains(arr, argv._[0])
  })
 
  if ( synonyms.length === 1 ) {
   args.command = synonyms[0][0]
  } else {
    args.unknown = argv._[0]
  }
 
  switch( args.command ) {
    case 'search':
      args.query = argv._.splice(1).join(' ')
      break
    case 'login':
      args.token = argv._[1]
      break
    case 'version':
      args.version = argv._[1]
      break
    default:
      // TODO: match package(@version)? with regex?
      if ( argv._[1] ) {
        args.package = argv._[1].split('@')[0]
        args.version = argv._[1].split('@')[1]
      }
  }
 
  return args
}
 
module.exports = {
  cmds: cmds,
  parse: parse
}