Socket
Socket
Sign inDemoInstall

optimist

Package Overview
Dependencies
Maintainers
1
Versions
39
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

optimist - npm Package Compare versions

Comparing version 0.5.2 to 0.6.0

223

index.js
var path = require('path');
var minimist = require('minimist');
var wordwrap = require('wordwrap');

@@ -20,3 +21,3 @@

var exports = module.exports = Argv;
function Argv (args, cwd) {
function Argv (processArgs, cwd) {
var self = {};

@@ -41,13 +42,11 @@ if (!cwd) cwd = process.cwd();

var flags = { bools : {}, strings : {} };
var options = {
boolean: [],
string: [],
alias: {},
default: []
};
self.boolean = function (bools) {
if (!Array.isArray(bools)) {
bools = [].slice.call(arguments);
}
bools.forEach(function (name) {
flags.bools[name] = true;
});
options.boolean.push.apply(options.boolean, [].concat(bools));
return self;

@@ -57,14 +56,18 @@ };

self.string = function (strings) {
if (!Array.isArray(strings)) {
strings = [].slice.call(arguments);
options.string.push.apply(options.string, [].concat(strings));
return self;
};
self.default = function (key, value) {
if (typeof key === 'object') {
Object.keys(key).forEach(function (k) {
self.default(k, key[k]);
});
}
strings.forEach(function (name) {
flags.strings[name] = true;
});
else {
options.default[key] = value;
}
return self;
};
var aliases = {};
self.alias = function (x, y) {

@@ -76,13 +79,5 @@ if (typeof x === 'object') {

}
else if (Array.isArray(y)) {
y.forEach(function (yy) {
self.alias(x, yy);
});
}
else {
var zs = (aliases[x] || []).concat(aliases[y] || []).concat(x, y);
aliases[x] = zs.filter(function (z) { return z != x });
aliases[y] = zs.filter(function (z) { return z != y });
options.alias[x] = (options.alias[x] || []).concat(y);
}
return self;

@@ -135,16 +130,2 @@ };

var defaults = {};
self.default = function (key, value) {
if (typeof key === 'object') {
Object.keys(key).forEach(function (k) {
self.default(k, key[k]);
});
}
else {
defaults[key] = value;
}
return self;
};
var descriptions = {};

@@ -163,5 +144,4 @@ self.describe = function (key, desc) {

self.parse = function (args_) {
args = args_;
return self.argv;
self.parse = function (args) {
return parseArgs(args);
};

@@ -213,3 +193,3 @@

.concat(Object.keys(demanded))
.concat(Object.keys(defaults))
.concat(Object.keys(options.default))
.reduce(function (acc, key) {

@@ -228,3 +208,3 @@ if (key !== '_') acc[key] = true;

var switches = keys.reduce(function (acc, key) {
acc[key] = [ key ].concat(aliases[key] || [])
acc[key] = [ key ].concat(options.alias[key] || [])
.map(function (sw) {

@@ -266,4 +246,4 @@ return (sw.length > 1 ? '--' : '-') + sw

if (flags.bools[key]) type = '[boolean]';
if (flags.strings[key]) type = '[string]';
if (options.boolean[key]) type = '[boolean]';
if (options.string[key]) type = '[string]';

@@ -281,4 +261,4 @@ if (!wrap && dpadding.length > 0) {

,
defaults[key] !== undefined
? '[default: ' + JSON.stringify(defaults[key]) + ']'
options.default[key] !== undefined
? '[default: ' + JSON.stringify(options.default[key]) + ']'
: null

@@ -312,120 +292,10 @@ ,

Object.defineProperty(self, 'argv', {
get : parseArgs,
get : function () { return parseArgs(processArgs) },
enumerable : true,
});
function parseArgs () {
var argv = { _ : [], $0 : self.$0 };
Object.keys(flags.bools).forEach(function (key) {
setArg(key, defaults[key] || false);
});
function parseArgs (args) {
var argv = minimist(args, options);
argv.$0 = self.$0;
function setArg (key, val) {
var value = !flags.strings[key] && isNumber(val)
? Number(val) : val
;
setKey(argv, key.split('.'), value);
(aliases[key] || []).forEach(function (x) {
argv[x] = argv[key];
});
}
for (var i = 0; i < args.length; i++) {
var arg = args[i];
if (arg === '--') {
argv._.push.apply(argv._, args.slice(i + 1));
break;
}
else if (arg.match(/^--.+=/)) {
// Using [\s\S] instead of . because js doesn't support the
// 'dotall' regex modifier. See:
// http://stackoverflow.com/a/1068308/13216
var m = arg.match(/^--([^=]+)=([\s\S]*)$/);
setArg(m[1], m[2]);
}
else if (arg.match(/^--no-.+/)) {
var key = arg.match(/^--no-(.+)/)[1];
setArg(key, false);
}
else if (arg.match(/^--.+/)) {
var key = arg.match(/^--(.+)/)[1];
var next = args[i + 1];
if (next !== undefined && !next.match(/^-/)
&& !flags.bools[key]
&& (aliases[key] ? !flags.bools[aliases[key]] : true)) {
setArg(key, next);
i++;
}
else if (/^(true|false)$/.test(next)) {
setArg(key, next === 'true');
i++;
}
else {
setArg(key, true);
}
}
else if (arg.match(/^-[^-]+/)) {
var letters = arg.slice(1,-1).split('');
var broken = false;
for (var j = 0; j < letters.length; j++) {
var next = arg.slice(j+2);
if (next === '-') {
setArg(letters[j], next)
continue;
}
if (/[A-Za-z]/.test(letters[j])
&& /-?\d+(\.\d*)?(e-?\d+)?$/.test(next)) {
setArg(letters[j], next);
break;
}
if (letters[j+1] && letters[j+1].match(/\W/)) {
setArg(letters[j], arg.slice(j+2));
broken = true;
break;
}
else {
setArg(letters[j], true);
}
}
var key = arg.slice(-1)[0];
if (!broken && key !== '-') {
if (args[i+1] && !/^(-|--)[^-]/.test(args[i+1])
&& !flags.bools[key]
&& (aliases[key] ? !flags.bools[aliases[key]] : true)) {
setArg(key, args[i+1]);
i++;
}
else if (args[i+1] && /true|false/.test(args[i+1])) {
setArg(key, args[i+1] === 'true');
i++;
}
else {
setArg(key, true);
}
}
}
else {
argv._.push(
flags.strings['_'] || !isNumber(arg) ? arg : Number(arg)
);
}
}
Object.keys(defaults).forEach(function (key) {
if (!(key in argv)) {
argv[key] = defaults[key];
if (key in aliases) {
argv[aliases[key]] = defaults[key];
}
}
});
if (demanded._ && argv._.length < demanded._) {

@@ -485,26 +355,1 @@ fail('Not enough non-option arguments: got '

};
function setKey (obj, keys, value) {
var o = obj;
keys.slice(0,-1).forEach(function (key) {
if (o[key] === undefined) o[key] = {};
o = o[key];
});
var key = keys[keys.length - 1];
if (o[key] === undefined || typeof o[key] === 'boolean') {
o[key] = value;
}
else if (Array.isArray(o[key])) {
o[key].push(value);
}
else {
o[key] = [ o[key], value ];
}
}
function isNumber (x) {
if (typeof x === 'number') return true;
if (/^0x[0-9a-f]+$/i.test(x)) return true;
return /^[-+]?(?:\d+(?:\.\d*)?|\.\d+)(e[-+]?\d+)?$/.test(x);
}

5

package.json
{
"name" : "optimist",
"version" : "0.5.2",
"version" : "0.6.0",
"description" : "Light-weight option parsing with an argv hash. No optstrings attached.",
"main" : "./index.js",
"dependencies" : {
"wordwrap" : "~0.0.2"
"wordwrap" : "~0.0.2",
"minimist" : "~0.0.1"
},

@@ -9,0 +10,0 @@ "devDependencies" : {

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