expand-args
Advanced tools
Comparing version 0.3.2 to 0.3.3
241
index.js
@@ -11,132 +11,142 @@ /*! | ||
var utils = require('./utils'); | ||
var sep = /[ =:]/; | ||
function expandArgs(argv) { | ||
function expand(argv) { | ||
var res = {}; | ||
var segs; | ||
var val; | ||
var key; | ||
for (var key in argv) { | ||
if (!argv.hasOwnProperty(key)) { | ||
continue; | ||
function merge(key, val) { | ||
if (key === '_') { | ||
utils.merge(res, val); | ||
} else { | ||
utils.set(res, key, val); | ||
} | ||
} | ||
var orig = argv[key]; | ||
if (utils.typeOf(orig) === 'object') { | ||
res[key] = expandArgs(orig); | ||
continue; | ||
} | ||
for (key in argv) { | ||
if (argv.hasOwnProperty(key)) { | ||
val = argv[key]; | ||
if (Array.isArray(orig)) { | ||
if (key !== '_') { | ||
res[key] = expandEach(orig); | ||
continue; | ||
} else { | ||
var len = orig.length, i = -1; | ||
while (++i < len) { | ||
var ele = orig[i]; | ||
if (/\W/.test(ele)) { | ||
extend(res, utils.expand(ele, { | ||
toBoolean: true | ||
})); | ||
// '{'a b': true}' | ||
if (sep.test(key) && isBoolean(val)) { | ||
segs = key.split(sep); | ||
val = segs.pop(); | ||
key = segs.join('.'); | ||
} | ||
switch (utils.typeOf(val)) { | ||
case 'object': | ||
res[key] = expand(val); | ||
break; | ||
case 'string': | ||
if (~val.indexOf('|')) { | ||
val = val.split('|'); | ||
utils.set(res, key, expandEach(val)); | ||
} else if (isUrl(val)) { | ||
utils.set(res, key, expandString(val)); | ||
} else if (~val.indexOf(',')) { | ||
val = expandString(val); | ||
if (Array.isArray(val) && hasObjects(val)) { | ||
val.forEach(function(ele) { | ||
merge(key, ele); | ||
}); | ||
} else { | ||
merge(key, val); | ||
} | ||
} else { | ||
res._ = res._ || []; | ||
res._.push(ele); | ||
var str = key + ':' + val; | ||
segs = str.split(sep); | ||
val = segs.pop(); | ||
key = segs.join('.'); | ||
utils.set(res, key, expandString(val)); | ||
} | ||
break; | ||
case 'array': | ||
if (hasObjects(val)) { | ||
merge(key, expandEach(val)); | ||
} else { | ||
res[key] = val; | ||
} | ||
break; | ||
case 'boolean': | ||
default: { | ||
res[key] = val; | ||
break; | ||
} | ||
} | ||
continue; | ||
} | ||
} | ||
return res; | ||
} | ||
var val = orig.toString(); | ||
if (/\w:\/\/\w/.test(val)) { | ||
res[key] = val; | ||
continue; | ||
} | ||
function expandString(val) { | ||
if (isUrl(val)) { | ||
return val; | ||
} | ||
if ((/[\\\/]/.test(val) || /\/\./.test(val))) { | ||
if (/:/.test(val)) { | ||
res[key] = val.split('|').reduce(function(acc, ele) { | ||
var o = {}; | ||
var segs = ele.split(':'); | ||
var v = segs[1].split('\\.').join('.'); | ||
if (/,/.test(v)) { | ||
v = v.split(','); | ||
} | ||
utils.set(o, segs[0], v); | ||
extend(acc, o); | ||
return acc; | ||
}, {}); | ||
continue; | ||
} | ||
if (/,/.test(val)) { | ||
res[key] = val.split('|').reduce(function(acc, ele) { | ||
var arr = ele.split('\\.').join('.').split(','); | ||
return acc.concat(arr); | ||
}, []); | ||
continue; | ||
} | ||
if (val.indexOf('./') === 0) { | ||
res[key] = val; | ||
continue; | ||
} | ||
if (isPath(val)) { | ||
val = unescape(val); | ||
if (~val.indexOf(':')) { | ||
return toObject(val); | ||
} | ||
if (~key.indexOf(':') && val === 'true') { | ||
var parts = key.split(':'); | ||
res[parts[0]] = parts[1]; | ||
continue; | ||
if (~val.indexOf(',')) { | ||
return val.split(','); | ||
} | ||
return val; | ||
} | ||
if (typeof orig === 'object' && key !== '_') { | ||
res[key] = expandArgs(orig); | ||
continue; | ||
} | ||
if (!/\W/.test(val)) { | ||
return val; | ||
} | ||
if (typeof orig === 'string' && /\W/.test(orig)) { | ||
res[key] = utils.expand(orig, {toBoolean: true}); | ||
continue; | ||
} | ||
return utils.expand(val, { | ||
toBoolean: true | ||
}); | ||
} | ||
res[key] = orig; | ||
function expandEach(arr) { | ||
var len = arr.length; | ||
var idx = -1; | ||
var res = {}; | ||
while (++idx < len) { | ||
utils.merge(res, expand(utils.expand(arr[idx], {toBoolean: true}))); | ||
} | ||
res = normalize(res); | ||
return res; | ||
} | ||
function extend(a, b) { | ||
for (var key in b) { | ||
a[key] = b[key]; | ||
} | ||
return a; | ||
function isBoolean(val) { | ||
return val === 'false' | ||
|| val === 'true' | ||
|| val === false | ||
|| val === true; | ||
} | ||
function normalize(argv) { | ||
var res = {}; | ||
for (var key in argv) { | ||
var val = argv[key]; | ||
if (typeof val === 'string') { | ||
argv[key] = val.split('\\').join(''); | ||
} else if (isObject(val)) { | ||
argv[key] = normalize(val); | ||
} else if (Array.isArray(val)) { | ||
var len = val.length; | ||
var idx = -1; | ||
function isUrl(val) { | ||
return /\w:\/\/\w/.test(val); | ||
} | ||
while (++idx < len) { | ||
var ele = val[idx]; | ||
if (isObject(ele)) { | ||
res[key] = res[key] || {}; | ||
extend(res[key], ele); | ||
} else { | ||
argv[key] = val; | ||
} | ||
} | ||
function isPath(val) { | ||
return /(?:[\\\/]|\\\.)/.test(val); | ||
} | ||
} else { | ||
argv[key] = val; | ||
function unescape(val) { | ||
if (isString(val)) { | ||
return val.split('\\').join(''); | ||
} | ||
if (isObject(val)) { | ||
for (var key in val) { | ||
val[key] = unescape(val[key]); | ||
} | ||
return val; | ||
} | ||
if (Array.isArray(val)) { | ||
return val.map(unescape); | ||
} | ||
return val; | ||
} | ||
var actual = utils.merge({}, argv, res); | ||
return actual; | ||
function isString(val) { | ||
return typeof val === 'string'; | ||
} | ||
@@ -148,15 +158,26 @@ | ||
function expandEach(arr) { | ||
return arr.map(function(ele) { | ||
if (!/\W/.test(ele)) return ele; | ||
return utils.expand(ele, { | ||
toBoolean: true | ||
}); | ||
}); | ||
function toObject(str) { | ||
var res = {}; | ||
var segs = str.split(':'); | ||
var val = segs.pop(); | ||
res[segs.join('.')] = val; | ||
return res; | ||
} | ||
function hasObjects(arr) { | ||
var len = arr.length; | ||
var idx = -1; | ||
while (++idx < len) { | ||
if (isObject(arr[idx]) || /[:=|,]/.test(arr[idx])) { | ||
return true; | ||
} | ||
} | ||
return false; | ||
} | ||
/** | ||
* Expose `expandArgs` | ||
* Expose `expand` | ||
*/ | ||
module.exports = expandArgs; | ||
module.exports = expand; |
{ | ||
"name": "expand-args", | ||
"description": "Expand parsed command line arguments using expand-object.", | ||
"version": "0.3.2", | ||
"version": "0.3.3", | ||
"homepage": "https://github.com/jonschlinkert/expand-args", | ||
@@ -6,0 +6,0 @@ "author": "Jon Schlinkert (https://github.com/jonschlinkert)", |
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
Found 1 instance in 1 package
8492
174
1