123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136 |
- "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
|