| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152 | 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 };
 |