react / wstein / node_modules / jest-cli / node_modules / istanbul / node_modules / mkdirp / node_modules / minimist / index.js
80698 viewsmodule.exports = function (args, opts) {1if (!opts) opts = {};23var flags = { bools : {}, strings : {} };45[].concat(opts['boolean']).filter(Boolean).forEach(function (key) {6flags.bools[key] = true;7});89[].concat(opts.string).filter(Boolean).forEach(function (key) {10flags.strings[key] = true;11});1213var aliases = {};14Object.keys(opts.alias || {}).forEach(function (key) {15aliases[key] = [].concat(opts.alias[key]);16aliases[key].forEach(function (x) {17aliases[x] = [key].concat(aliases[key].filter(function (y) {18return x !== y;19}));20});21});2223var defaults = opts['default'] || {};2425var argv = { _ : [] };26Object.keys(flags.bools).forEach(function (key) {27setArg(key, defaults[key] === undefined ? false : defaults[key]);28});2930var notFlags = [];3132if (args.indexOf('--') !== -1) {33notFlags = args.slice(args.indexOf('--')+1);34args = args.slice(0, args.indexOf('--'));35}3637function setArg (key, val) {38var value = !flags.strings[key] && isNumber(val)39? Number(val) : val40;41setKey(argv, key.split('.'), value);4243(aliases[key] || []).forEach(function (x) {44setKey(argv, x.split('.'), value);45});46}4748for (var i = 0; i < args.length; i++) {49var arg = args[i];5051if (/^--.+=/.test(arg)) {52// Using [\s\S] instead of . because js doesn't support the53// 'dotall' regex modifier. See:54// http://stackoverflow.com/a/1068308/1321655var m = arg.match(/^--([^=]+)=([\s\S]*)$/);56setArg(m[1], m[2]);57}58else if (/^--no-.+/.test(arg)) {59var key = arg.match(/^--no-(.+)/)[1];60setArg(key, false);61}62else if (/^--.+/.test(arg)) {63var key = arg.match(/^--(.+)/)[1];64var next = args[i + 1];65if (next !== undefined && !/^-/.test(next)66&& !flags.bools[key]67&& (aliases[key] ? !flags.bools[aliases[key]] : true)) {68setArg(key, next);69i++;70}71else if (/^(true|false)$/.test(next)) {72setArg(key, next === 'true');73i++;74}75else {76setArg(key, flags.strings[key] ? '' : true);77}78}79else if (/^-[^-]+/.test(arg)) {80var letters = arg.slice(1,-1).split('');8182var broken = false;83for (var j = 0; j < letters.length; j++) {84var next = arg.slice(j+2);8586if (next === '-') {87setArg(letters[j], next)88continue;89}9091if (/[A-Za-z]/.test(letters[j])92&& /-?\d+(\.\d*)?(e-?\d+)?$/.test(next)) {93setArg(letters[j], next);94broken = true;95break;96}9798if (letters[j+1] && letters[j+1].match(/\W/)) {99setArg(letters[j], arg.slice(j+2));100broken = true;101break;102}103else {104setArg(letters[j], flags.strings[letters[j]] ? '' : true);105}106}107108var key = arg.slice(-1)[0];109if (!broken && key !== '-') {110if (args[i+1] && !/^(-|--)[^-]/.test(args[i+1])111&& !flags.bools[key]112&& (aliases[key] ? !flags.bools[aliases[key]] : true)) {113setArg(key, args[i+1]);114i++;115}116else if (args[i+1] && /true|false/.test(args[i+1])) {117setArg(key, args[i+1] === 'true');118i++;119}120else {121setArg(key, flags.strings[key] ? '' : true);122}123}124}125else {126argv._.push(127flags.strings['_'] || !isNumber(arg) ? arg : Number(arg)128);129}130}131132Object.keys(defaults).forEach(function (key) {133if (!hasKey(argv, key.split('.'))) {134setKey(argv, key.split('.'), defaults[key]);135136(aliases[key] || []).forEach(function (x) {137setKey(argv, x.split('.'), defaults[key]);138});139}140});141142notFlags.forEach(function(key) {143argv._.push(key);144});145146return argv;147};148149function hasKey (obj, keys) {150var o = obj;151keys.slice(0,-1).forEach(function (key) {152o = (o[key] || {});153});154155var key = keys[keys.length - 1];156return key in o;157}158159function setKey (obj, keys, value) {160var o = obj;161keys.slice(0,-1).forEach(function (key) {162if (o[key] === undefined) o[key] = {};163o = o[key];164});165166var key = keys[keys.length - 1];167if (o[key] === undefined || typeof o[key] === 'boolean') {168o[key] = value;169}170else if (Array.isArray(o[key])) {171o[key].push(value);172}173else {174o[key] = [ o[key], value ];175}176}177178function isNumber (x) {179if (typeof x === 'number') return true;180if (/^0x[0-9a-f]+$/i.test(x)) return true;181return /^[-+]?(?:\d+(?:\.\d*)?|\.\d+)(e[-+]?\d+)?$/.test(x);182}183184function longest (xs) {185return Math.max.apply(null, xs.map(function (x) { return x.length }));186}187188189