File: /var/www/vhost/disk-apps/pwa.sports-crowd.com/node_modules/webdriver-manager/built/lib/cli/cli.js
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
/**
* The Cli contains the usage and the collection of programs.
*
* Printing help for all the programs in the following order:
* usage, commands, and options. If the options are used in multiple programs,
* it will list it once.
*/
class Cli {
constructor() {
this.programs = {};
}
/**
* Register a program to the command line interface.
* @returns The cli for method chaining.
*/
program(prog) {
this.programs[prog.cmd] = prog;
return this;
}
/**
* Add a usage for the command line interface.
* @returns The cli for method chaining.
*/
usage(usageText) {
this.usageText = usageText;
return this;
}
/**
* Prints help for the programs registered to the cli.
*/
printHelp() {
console.log('Usage: ' + this.usageText);
console.log('\nCommands:');
let cmdDescriptionPos = this.posCmdDescription();
for (let cmd in this.programs) {
let prog = this.programs[cmd];
prog.printCmd(cmdDescriptionPos);
}
let descriptionPos = this.posDescription();
let defaultPos = this.posDefault();
let extOptions = {};
console.log('\nOptions:');
// print all options
for (let cmd in this.programs) {
let prog = this.programs[cmd];
prog.printOptions(descriptionPos, defaultPos, extOptions);
}
}
/**
* For commands, gets the position where the description should start so they
* are aligned.
* @returns The position where the command description should start.
*/
posCmdDescription() {
let position = -1;
for (let cmd in this.programs) {
position = Math.max(position, cmd.length + 6);
}
return position;
}
/**
* For options, gets the position where the description should start so they
* are aligned.
* @returns The position where the option description should start.
*/
posDescription() {
let position = -1;
for (let cmd in this.programs) {
let prog = this.programs[cmd];
position = Math.max(position, prog.posDescription());
}
return position;
}
/**
* For options, get the position where the default values should start so they
* are aligned.
* @returns The position where the option default values should start.
*/
posDefault() {
let position = -1;
for (let cmd in this.programs) {
let prog = this.programs[cmd];
position = Math.max(position, prog.posDefault());
}
return position;
}
/**
* Go through all programs and add options to the collection.
* @returns The options used in the programs.
*/
getOptions() {
let allOptions = {};
for (let cmd in this.programs) {
let prog = this.programs[cmd];
allOptions = prog.getOptions_(allOptions);
}
return allOptions;
}
/**
* Get the options used by the programs and create the minimist options
* to ensure that minimist parses the values properly.
* @returns The options for minimist.
*/
getMinimistOptions() {
let allOptions = this.getOptions();
let minimistOptions = {};
let minimistBoolean = [];
let minimistString = [];
let minimistNumber = [];
let minimistDefault = {};
for (let opt in allOptions) {
let option = allOptions[opt];
if (option.type === 'boolean') {
minimistBoolean.push(option.opt);
}
else if (option.type === 'string') {
minimistString.push(option.opt);
}
else if (option.type === 'number') {
minimistNumber.push(option.opt);
}
if (typeof option.defaultValue !== 'undefined') {
minimistDefault[option.opt] = option.defaultValue;
}
}
minimistOptions['boolean'] = minimistBoolean;
minimistOptions['string'] = minimistString;
minimistOptions['number'] = minimistNumber;
minimistOptions['default'] = minimistDefault;
return minimistOptions;
}
}
exports.Cli = Cli;
//# sourceMappingURL=cli.js.map