node-minibase / minibase

:rocket: Minimal framework for creating highly modular and composable Node.js applications powered by plugins
https://github.com/node-minibase
MIT License
9 stars 0 forks source link

minibase-argv #3

Open tunnckoCore opened 7 years ago

tunnckoCore commented 7 years ago

var minimist = require('minimist')
var merge = require('mixin-deep')

module.exports = function minibaseArgv (opts) {
  return function (app) {
    app.define('parseArgv', function (opts) {
      var argv = minimist(process.argv.slice(2), merge({
        alias: { h: 'help', v: 'version' }
      }, opts))
      var keys = Object.keys(argv)
      app.argv = argv

      if (!argv._.length && keys.length === 1) {
        argv.__ = argv.__ || {}
        argv.__.isCommand = true
        argv.__.isFlag = true
        app.emit('help', null, argv)
        return app
      }

      app.emit('_', argv._)
      app.emit('*', '_', argv._)

      argv._.forEach(function (key, idx) {
        argv.__ = argv.__ || {}
        argv.__.isCommand = true
        app.emit(key, idx, argv)
        app.emit(idx, key, argv)
      })

      keys.forEach(function (key) {
        if (key === '_') return
        var val = argv[key]
        argv.__ = argv.__ || {}
        argv.__.isFlag = true
        app.emit(key, val, argv)
        app.emit('*', key, val)
      })
      return app
    })
  }
}

attr to minimist-events