static parse()

in packages/flow-dev-tools/src/command/Base.js [119:176]


  static parse(): any {
    const boolean = [];
    const string = [];
    const defaults = {};
    const alias = {};

    const flags = this.getAllFlags();
    for (const flag of flags) {
      if (flag.type === 'string' || flag.type === 'enum') {
        string.push(flag.name);
        flag.default !== undefined && (defaults[flag.name] = flag.default);
      } else {
        boolean.push(flag.name);
      }
      if (flag.aliases !== undefined) {
        for (const aliasName of flag.aliases) {
          alias[aliasName] = flag.name;
        }
      }
    }

    const argv = parseArgs(process.argv.slice(3), {
      boolean,
      string,
      alias,
      default: defaults,
      unknown: flag => {
        if (flag.match(/^-/)) {
          process.stderr.write(format('Unsupported flag:', flag, '\n'));
          this.showUsage(this.BAD_ARGS);
        }
        return true;
      },
    });
    for (const flag of flags) {
      if (flag.type === 'string' || flag.type === 'enum') {
        if (argv[flag.name] === '') {
          process.stderr.write(
            format('Missing required argument for flag: %s\n', flag.name),
          ),
            this.showUsage(this.BAD_ARGS);
        }
      }
      if (flag.type === 'enum') {
        if (flag.validValues.find(v => argv[flag.name] === v) === undefined) {
          process.stderr.write(
            format(
              '%s is not a support value for enum flag %s\n',
              argv[flag.name],
              flag.name,
            ),
          );
          this.showUsage(this.BAD_ARGS);
        }
      }
    }
    return argv;
  }