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