cli-args
Version:
small command line parser
67 lines (53 loc) • 1.24 kB
JavaScript
/*
eslint
no-multi-spaces: ["error", {exceptions: {"VariableDeclarator": true}}]
padded-blocks: ["error", {"classes": "always"}]
max-len: ["error", 80]
*/
function convert (val) {
if (/^[-+]?(?:\d+(?:\.\d*)?|\.\d+)(e[-+]?\d+)?$/.test(val)) {
return Number(val)
}
if (/^(true|false)$/.test(val)) {
return val === 'true'
}
if (/(\d{4}-\d{2}-\d{1,2}).*/.test(val)) {
return new Date(val)
}
if (/null/.test(val)) {
return null
}
if (/undefined/.test(val)) {
return undefined
}
return val
}
module.exports = parser
function parser (args) {
args = args || process.argv.slice(2)
var key
var obj = {_: []}
for (var i = 0; i < args.length; i++) {
if (/^-\w|^--\w*=\w*/.test(args[i])) {
key = args[i].replace(/^--/, '').replace(/^-/, '')
// passing args this way --app=80 or -p 80
if (/=/.test(key)) {
var splArg = key.split('=')
obj[splArg[0]] = convert(splArg[1])
key = null
}
continue
}
if (key) {
obj[key] = convert(args[i])
key = null
} else {
if (/^--/.test(args[i])) {
args[i] = args[i].replace('--', '')
}
obj._.push(convert(args[i]))
}
}
return obj
}