UNPKG

capitano

Version:

Powerful, non opitionated command line parser for serious applications

77 lines (66 loc) 2.04 kB
var Option, Signature, _, isValidAlias, parse; _ = require('lodash'); parse = require('./parse'); Signature = require('./signature'); isValidAlias = function(alias) { return _.isString(alias) || _.isArray(alias); }; module.exports = Option = (function() { function Option(options) { if (options == null) { options = {}; } if (!(options.signature instanceof Signature)) { throw new Error('Missing or invalid option signature'); } if (options.signature.hasParameters()) { throw new Error('Use the parameter option attribute'); } if ((options.alias != null) && !isValidAlias(options.alias)) { throw new Error('Invalid alias'); } if ((options.parameter != null) && !_.isString(options.parameter)) { throw new Error('Invalid parameter'); } if (options.boolean && (options.parameter != null)) { throw new Error('Boolean options can\'t have parameters'); } if (!options.boolean && (options.parameter == null)) { throw new Error('Missing parameter'); } _.defaults(options, { boolean: false, alias: [] }); _.extend(this, options); } Option.prototype.getOptionsValue = function(options) { var value; value = options[this.signature]; if (value == null) { value = _.chain(options).pick(this.alias).values().first().value(); } return value; }; Option.prototype.matches = function(value) { if (value == null) { return false; } return !_.some([this.boolean && !_.isBoolean(value), !this.boolean && _.isBoolean(value)]); }; Option.prototype.toString = function() { var result, signatures; signatures = _.map([this.signature.toString()].concat(this.alias), function(signature) { if (signature.length <= 1) { return "-" + signature; } return "--" + signature; }); result = signatures.join(', '); if (this.parameter != null) { result += " <" + this.parameter + ">"; } return result; }; return Option; })();