Sha256: e4ae2c9dfa3e7cb89bfd9ac095194dc97e9cb0a6f6368df2f7b0ab64a542fb35

Contents?: true

Size: 1.46 KB

Versions: 26

Compression:

Stored size: 1.46 KB

Contents

import { removeBrackets, camelcaseOptionName } from "./utils.ts";
interface OptionConfig {
  default?: any;
  type?: any[];
}
export default class Option {
  /** Option name */
  name: string;
  /** Option name and aliases */

  names: string[];
  isBoolean?: boolean; // `required` will be a boolean for options with brackets

  required?: boolean;
  config: OptionConfig;
  negated: boolean;

  constructor(public rawName: string, public description: string, config?: OptionConfig) {
    this.config = Object.assign({}, config); // You may use cli.option('--env.* [value]', 'desc') to denote a dot-nested option

    rawName = rawName.replace(/\.\*/g, '');
    this.negated = false;
    this.names = removeBrackets(rawName).split(',').map((v: string) => {
      let name = v.trim().replace(/^-{1,2}/, '');

      if (name.startsWith('no-')) {
        this.negated = true;
        name = name.replace(/^no-/, '');
      }

      return camelcaseOptionName(name);
    }).sort((a, b) => a.length > b.length ? 1 : -1); // Sort names
    // Use the longest name (last one) as actual option name

    this.name = this.names[this.names.length - 1];

    if (this.negated && this.config.default == null) {
      this.config.default = true;
    }

    if (rawName.includes('<')) {
      this.required = true;
    } else if (rawName.includes('[')) {
      this.required = false;
    } else {
      // No arg needed, it's boolean flag
      this.isBoolean = true;
    }
  }

}
export type { OptionConfig };

Version data entries

26 entries across 26 versions & 1 rubygems

Version Path
clapton-0.0.26 lib/clapton/javascripts/node_modules/cac/deno/Option.ts
clapton-0.0.25 lib/clapton/javascripts/node_modules/cac/deno/Option.ts
clapton-0.0.24 lib/clapton/javascripts/node_modules/cac/deno/Option.ts
clapton-0.0.23 lib/clapton/javascripts/node_modules/cac/deno/Option.ts
clapton-0.0.22 lib/clapton/javascripts/node_modules/cac/deno/Option.ts
clapton-0.0.21 lib/clapton/javascripts/node_modules/cac/deno/Option.ts
clapton-0.0.20 lib/clapton/javascripts/node_modules/cac/deno/Option.ts
clapton-0.0.19 lib/clapton/javascripts/node_modules/cac/deno/Option.ts
clapton-0.0.18 lib/clapton/javascripts/node_modules/cac/deno/Option.ts
clapton-0.0.17 lib/clapton/javascripts/node_modules/cac/deno/Option.ts
clapton-0.0.16 lib/clapton/javascripts/node_modules/cac/deno/Option.ts
clapton-0.0.15 lib/clapton/javascripts/node_modules/cac/deno/Option.ts
clapton-0.0.14 lib/clapton/javascripts/node_modules/cac/deno/Option.ts
clapton-0.0.13 lib/clapton/javascripts/node_modules/cac/deno/Option.ts
clapton-0.0.12 lib/clapton/javascripts/node_modules/cac/deno/Option.ts
clapton-0.0.11 lib/clapton/javascripts/node_modules/cac/deno/Option.ts
clapton-0.0.10 lib/clapton/javascripts/node_modules/cac/deno/Option.ts
clapton-0.0.9 lib/clapton/javascripts/node_modules/cac/deno/Option.ts
clapton-0.0.8 lib/clapton/javascripts/node_modules/cac/deno/Option.ts
clapton-0.0.7 lib/clapton/javascripts/node_modules/cac/deno/Option.ts