ninjs-lodash
Version:
lodash wrapper + utils
73 lines (59 loc) • 3.18 kB
JavaScript
const _ = require('lodash')
const path = require('path')
const xjargv = require('./jargv')
module.exports = jav
_.mixin({ jav: jav })
// node pad modules.publish -v --version -h -? --help -H --usage -s --silent --loglevel=info -q -d -dd -ddd
// node pad ams.modules.publish -v --version -h -? --help -H --usage -s --silent --loglevel=info -q -d -dd -ddd
function jav() {
let jargv = _.jargv()
let jargs = jargv ? _.get(jargv, '_') || [] : []
let sw = jargv ? _.omit(jargv, '_') || {} : {}
let exe_path = jargv ? _.get(jargv, '_[0]') : ''
let exe_name = exe_path ? path.parse(exe_path).name : ''
let exe_base = exe_path ? path.parse(exe_path).base : ''
let isLocal = exe_name === 'node'
let cmd_path = isLocal ? _.get(jargv, '_[1]') || '' : exe_path
let ns = isLocal ? _.get(jargv, '_[2]') || _.get(jargv, '_[1]') || '' : _.get(jargv, '_[1]') || ''
// use path.base here for edge case -> snapptop ams.modules.blah
// path.name would return ams.modules where path.base returns ams.modules.blah
let cmd_name = cmd_path ? path.parse(cmd_path).base : ''
let split = ns ? _.compact(ns.split(/\./g)) || [] : []
let api = isLocal ? '' : split.shift() || ''
let model = split.shift() || ''
let keys = _.compact(split || [])
let key = _.join(keys, '.')
keys.unshift(model)
let keypath = _.join(_.compact(keys), '.')
let logLevel = _.toLower(_.get(sw, 'loglevel') || '')
let isHelp = _.get(sw, 'h') || _.get(sw, '?') || _.get(sw, 'help') || _.get(sw, 'H') || _.get(sw, 'usage') || false
isHelp = isHelp ? true : false
return {
"_": jargs,
"exe": { "path": exe_path, "name": exe_name, "base": exe_base },
"cmd": { "path": cmd_path, "name": cmd_name },
"ns": { "path": ns, "keypath": keypath, "api": api, "model": model, "key": key, "keys": keys },
"args": isLocal ? _.drop(jargs, 3) : _.drop(jargs, 2),
"sw": sw,
"log_level": logLevel || 'silent',
"is_local": isLocal,
"is_help": isHelp,
"is_version": _.get(sw, 'v') || _.get(sw, 'version') || false,
// log levels -> from quietest to loudest
"is_silent": _.get(sw, 's') || _.get(sw, 'silent') || logLevel === 'silent' || false,
"is_quiet": _.get(sw, 'q') || _.get(sw, 'quiet') || logLevel === 'warn' || false,
"is_info": _.get(sw, 'd') || logLevel === 'info' || false,
"is_verbose": _.get(sw, 'dd') || _.get(sw, 'verbose') || logLevel === 'verbose' || false,
"is_silly": _.get(sw, 'ddd') || logLevel === 'silly' || false,
"is_global": _.get(sw, 'g') || _.get(sw, 'global') || false,
"is_prefix": _.get(sw, 'C') || _.get(sw, 'prefix') || false,
"is_long": _.get(sw, 'l') || _.get(sw, 'long') || false,
"is_message": _.get(sw, 'm') || _.get(sw, 'message') || false,
"is_parseable": _.get(sw, 'p') || _.get(sw, 'porcelain') || _.get(sw, 'parseable') || false,
"is_registry": _.get(sw, 'reg') || _.get(sw, 'registry') || false,
"is_force": _.get(sw, 'f') || _.get(sw, 'force') || false,
"is_yes": _.get(sw, 'y') || _.get(sw, 'yes') || false,
"is_no": _.get(sw, 'n') || _.get(sw, 'no') || false
}
}