| Index: node_modules/vulcanize/node_modules/uglify-js/node_modules/optimist/index.js
|
| diff --git a/node_modules/karma/node_modules/optimist/index.js b/node_modules/vulcanize/node_modules/uglify-js/node_modules/optimist/index.js
|
| similarity index 61%
|
| copy from node_modules/karma/node_modules/optimist/index.js
|
| copy to node_modules/vulcanize/node_modules/uglify-js/node_modules/optimist/index.js
|
| index 4da5a6d876819e64c1551f8c060024d5d565ba90..8ac67eb31737c297e11603fb7643d22751d4319b 100644
|
| --- a/node_modules/karma/node_modules/optimist/index.js
|
| +++ b/node_modules/vulcanize/node_modules/uglify-js/node_modules/optimist/index.js
|
| @@ -1,5 +1,4 @@
|
| var path = require('path');
|
| -var minimist = require('minimist');
|
| var wordwrap = require('wordwrap');
|
|
|
| /* Hack an instance of Argv with process.argv into Argv
|
| @@ -18,7 +17,7 @@ Object.keys(inst).forEach(function (key) {
|
| });
|
|
|
| var exports = module.exports = Argv;
|
| -function Argv (processArgs, cwd) {
|
| +function Argv (args, cwd) {
|
| var self = {};
|
| if (!cwd) cwd = process.cwd();
|
|
|
| @@ -38,44 +37,50 @@ function Argv (processArgs, cwd) {
|
| );
|
| }
|
|
|
| - var options = {
|
| - boolean: [],
|
| - string: [],
|
| - alias: {},
|
| - default: []
|
| - };
|
| + var flags = { bools : {}, strings : {} };
|
|
|
| self.boolean = function (bools) {
|
| - options.boolean.push.apply(options.boolean, [].concat(bools));
|
| + if (!Array.isArray(bools)) {
|
| + bools = [].slice.call(arguments);
|
| + }
|
| +
|
| + bools.forEach(function (name) {
|
| + flags.bools[name] = true;
|
| + });
|
| +
|
| return self;
|
| };
|
|
|
| self.string = function (strings) {
|
| - 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]);
|
| - });
|
| - }
|
| - else {
|
| - options.default[key] = value;
|
| + if (!Array.isArray(strings)) {
|
| + strings = [].slice.call(arguments);
|
| }
|
| +
|
| + strings.forEach(function (name) {
|
| + flags.strings[name] = true;
|
| + });
|
| +
|
| return self;
|
| };
|
|
|
| + var aliases = {};
|
| self.alias = function (x, y) {
|
| if (typeof x === 'object') {
|
| Object.keys(x).forEach(function (key) {
|
| self.alias(key, x[key]);
|
| });
|
| }
|
| + else if (Array.isArray(y)) {
|
| + y.forEach(function (yy) {
|
| + self.alias(x, yy);
|
| + });
|
| + }
|
| else {
|
| - options.alias[x] = (options.alias[x] || []).concat(y);
|
| + 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 });
|
| }
|
| +
|
| return self;
|
| };
|
|
|
| @@ -123,6 +128,20 @@ function Argv (processArgs, cwd) {
|
| return self;
|
| };
|
|
|
| + 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 = {};
|
| self.describe = function (key, desc) {
|
| if (typeof key === 'object') {
|
| @@ -137,7 +156,7 @@ function Argv (processArgs, cwd) {
|
| };
|
|
|
| self.parse = function (args) {
|
| - return parseArgs(args);
|
| + return Argv(args).argv;
|
| };
|
|
|
| self.option = self.options = function (key, opt) {
|
| @@ -184,7 +203,7 @@ function Argv (processArgs, cwd) {
|
| var keys = Object.keys(
|
| Object.keys(descriptions)
|
| .concat(Object.keys(demanded))
|
| - .concat(Object.keys(options.default))
|
| + .concat(Object.keys(defaults))
|
| .reduce(function (acc, key) {
|
| if (key !== '_') acc[key] = true;
|
| return acc;
|
| @@ -198,7 +217,7 @@ function Argv (processArgs, cwd) {
|
| }
|
|
|
| var switches = keys.reduce(function (acc, key) {
|
| - acc[key] = [ key ].concat(options.alias[key] || [])
|
| + acc[key] = [ key ].concat(aliases[key] || [])
|
| .map(function (sw) {
|
| return (sw.length > 1 ? '--' : '-') + sw
|
| })
|
| @@ -235,8 +254,8 @@ function Argv (processArgs, cwd) {
|
|
|
| var type = null;
|
|
|
| - if (options.boolean[key]) type = '[boolean]';
|
| - if (options.string[key]) type = '[string]';
|
| + if (flags.bools[key]) type = '[boolean]';
|
| + if (flags.strings[key]) type = '[string]';
|
|
|
| if (!wrap && dpadding.length > 0) {
|
| desc += dpadding;
|
| @@ -249,8 +268,8 @@ function Argv (processArgs, cwd) {
|
| ? '[required]'
|
| : null
|
| ,
|
| - options.default[key] !== undefined
|
| - ? '[default: ' + JSON.stringify(options.default[key]) + ']'
|
| + defaults[key] !== undefined
|
| + ? '[default: ' + JSON.stringify(defaults[key]) + ']'
|
| : null
|
| ,
|
| ].filter(Boolean).join(' ');
|
| @@ -279,13 +298,110 @@ function Argv (processArgs, cwd) {
|
| };
|
|
|
| Object.defineProperty(self, 'argv', {
|
| - get : function () { return parseArgs(processArgs) },
|
| + get : parseArgs,
|
| enumerable : true,
|
| });
|
|
|
| - function parseArgs (args) {
|
| - var argv = minimist(args, options);
|
| - argv.$0 = self.$0;
|
| + function parseArgs () {
|
| + var argv = { _ : [], $0 : self.$0 };
|
| + Object.keys(flags.bools).forEach(function (key) {
|
| + setArg(key, defaults[key] || false);
|
| + });
|
| +
|
| + function setArg (key, val) {
|
| + var num = Number(val);
|
| + var value = typeof val !== 'string' || isNaN(num) ? val : num;
|
| + if (flags.strings[key]) value = 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++) {
|
| + if (letters[j+1] && letters[j+1].match(/\W/)) {
|
| + setArg(letters[j], arg.slice(j+2));
|
| + broken = true;
|
| + break;
|
| + }
|
| + else {
|
| + setArg(letters[j], true);
|
| + }
|
| + }
|
| +
|
| + if (!broken) {
|
| + var key = arg.slice(-1)[0];
|
| +
|
| + if (args[i+1] && !args[i+1].match(/^-/)
|
| + && !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 {
|
| + var n = Number(arg);
|
| + argv._.push(flags.strings['_'] || isNaN(n) ? arg : n);
|
| + }
|
| + }
|
| +
|
| + 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._) {
|
| fail('Not enough non-option arguments: got '
|
| @@ -341,3 +457,22 @@ function rebase (base, dir) {
|
| ).replace(/\/$/,'').replace(/^$/, '.');
|
| return p.match(/^[.\/]/) ? p : './' + p;
|
| };
|
| +
|
| +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 ];
|
| + }
|
| +}
|
|
|