New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More
Socket
Sign inDemoInstall
Socket

expand-args

Package Overview
Dependencies
Maintainers
1
Versions
16
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

expand-args - npm Package Compare versions

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)",

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc