.
This commit is contained in:
		
							
								
								
									
										149
									
								
								qwen/nodejs/node_modules/argparse/lib/action/subparsers.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										149
									
								
								qwen/nodejs/node_modules/argparse/lib/action/subparsers.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,149 @@
 | 
			
		||||
/** internal
 | 
			
		||||
 * class ActionSubparsers
 | 
			
		||||
 *
 | 
			
		||||
 * Support the creation of such sub-commands with the addSubparsers()
 | 
			
		||||
 *
 | 
			
		||||
 * This class inherited from [[Action]]
 | 
			
		||||
 **/
 | 
			
		||||
'use strict';
 | 
			
		||||
 | 
			
		||||
var util    = require('util');
 | 
			
		||||
var format  = require('util').format;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
var Action = require('../action');
 | 
			
		||||
 | 
			
		||||
// Constants
 | 
			
		||||
var c = require('../const');
 | 
			
		||||
 | 
			
		||||
// Errors
 | 
			
		||||
var argumentErrorHelper = require('../argument/error');
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/*:nodoc:*
 | 
			
		||||
 * new ChoicesPseudoAction(name, help)
 | 
			
		||||
 *
 | 
			
		||||
 * Create pseudo action for correct help text
 | 
			
		||||
 *
 | 
			
		||||
 **/
 | 
			
		||||
function ChoicesPseudoAction(name, help) {
 | 
			
		||||
  var options = {
 | 
			
		||||
    optionStrings: [],
 | 
			
		||||
    dest: name,
 | 
			
		||||
    help: help
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  Action.call(this, options);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
util.inherits(ChoicesPseudoAction, Action);
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * new ActionSubparsers(options)
 | 
			
		||||
 * - options (object): options hash see [[Action.new]]
 | 
			
		||||
 *
 | 
			
		||||
 **/
 | 
			
		||||
function ActionSubparsers(options) {
 | 
			
		||||
  options = options || {};
 | 
			
		||||
  options.dest = options.dest || c.SUPPRESS;
 | 
			
		||||
  options.nargs = c.PARSER;
 | 
			
		||||
 | 
			
		||||
  this.debug = (options.debug === true);
 | 
			
		||||
 | 
			
		||||
  this._progPrefix = options.prog;
 | 
			
		||||
  this._parserClass = options.parserClass;
 | 
			
		||||
  this._nameParserMap = {};
 | 
			
		||||
  this._choicesActions = [];
 | 
			
		||||
 | 
			
		||||
  options.choices = this._nameParserMap;
 | 
			
		||||
  Action.call(this, options);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
util.inherits(ActionSubparsers, Action);
 | 
			
		||||
 | 
			
		||||
/*:nodoc:*
 | 
			
		||||
 * ActionSubparsers#addParser(name, options) -> ArgumentParser
 | 
			
		||||
 * - name (string): sub-command name
 | 
			
		||||
 * - options (object): see [[ArgumentParser.new]]
 | 
			
		||||
 *
 | 
			
		||||
 *  Note:
 | 
			
		||||
 *  addParser supports an additional aliases option,
 | 
			
		||||
 *  which allows multiple strings to refer to the same subparser.
 | 
			
		||||
 *  This example, like svn, aliases co as a shorthand for checkout
 | 
			
		||||
 *
 | 
			
		||||
 **/
 | 
			
		||||
ActionSubparsers.prototype.addParser = function (name, options) {
 | 
			
		||||
  var parser;
 | 
			
		||||
 | 
			
		||||
  var self = this;
 | 
			
		||||
 | 
			
		||||
  options = options || {};
 | 
			
		||||
 | 
			
		||||
  options.debug = (this.debug === true);
 | 
			
		||||
 | 
			
		||||
  // set program from the existing prefix
 | 
			
		||||
  if (!options.prog) {
 | 
			
		||||
    options.prog = this._progPrefix + ' ' + name;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  var aliases = options.aliases || [];
 | 
			
		||||
 | 
			
		||||
  // create a pseudo-action to hold the choice help
 | 
			
		||||
  if (!!options.help || typeof options.help === 'string') {
 | 
			
		||||
    var help = options.help;
 | 
			
		||||
    delete options.help;
 | 
			
		||||
 | 
			
		||||
    var choiceAction = new ChoicesPseudoAction(name, help);
 | 
			
		||||
    this._choicesActions.push(choiceAction);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  // create the parser and add it to the map
 | 
			
		||||
  parser = new this._parserClass(options);
 | 
			
		||||
  this._nameParserMap[name] = parser;
 | 
			
		||||
 | 
			
		||||
  // make parser available under aliases also
 | 
			
		||||
  aliases.forEach(function (alias) {
 | 
			
		||||
    self._nameParserMap[alias] = parser;
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
  return parser;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
ActionSubparsers.prototype._getSubactions = function () {
 | 
			
		||||
  return this._choicesActions;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/*:nodoc:*
 | 
			
		||||
 * ActionSubparsers#call(parser, namespace, values, optionString) -> Void
 | 
			
		||||
 * - parser (ArgumentParser): current parser
 | 
			
		||||
 * - namespace (Namespace): namespace for output data
 | 
			
		||||
 * - values (Array): parsed values
 | 
			
		||||
 * - optionString (Array): input option string(not parsed)
 | 
			
		||||
 *
 | 
			
		||||
 * Call the action. Parse input aguments
 | 
			
		||||
 **/
 | 
			
		||||
ActionSubparsers.prototype.call = function (parser, namespace, values) {
 | 
			
		||||
  var parserName = values[0];
 | 
			
		||||
  var argStrings = values.slice(1);
 | 
			
		||||
 | 
			
		||||
  // set the parser name if requested
 | 
			
		||||
  if (this.dest !== c.SUPPRESS) {
 | 
			
		||||
    namespace[this.dest] = parserName;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  // select the parser
 | 
			
		||||
  if (this._nameParserMap[parserName]) {
 | 
			
		||||
    parser = this._nameParserMap[parserName];
 | 
			
		||||
  } else {
 | 
			
		||||
    throw argumentErrorHelper(format(
 | 
			
		||||
      'Unknown parser "%s" (choices: [%s]).',
 | 
			
		||||
        parserName,
 | 
			
		||||
        Object.keys(this._nameParserMap).join(', ')
 | 
			
		||||
    ));
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  // parse all the remaining options into the namespace
 | 
			
		||||
  parser.parseArgs(argStrings, namespace);
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
module.exports = ActionSubparsers;
 | 
			
		||||
		Reference in New Issue
	
	Block a user