in src/program.js [136:202]
getArguments() {
// To support looking up required parameters via config files, we need to
// temporarily disable the requiredArguments validation. Otherwise yargs
// would exit early. Validation is enforced by the checkRequiredArguments()
// method, after reading configuration files.
//
// This is an undocumented internal API of yargs! Unit tests to avoid
// regressions are located at: tests/functional/test.cli.sign.js
//
// Replace hack if possible: https://github.com/mozilla/web-ext/issues/1930
const validationInstance = this.yargs
.getInternalMethods()
.getValidationInstance();
const { requiredArguments } = validationInstance;
// Initialize demandedOptions (which is going to be set to an object with one
// property for each mandatory global options, then the arrow function below
// will receive as its demandedOptions parameter a new one that also includes
// all mandatory options for the sub command selected).
this.demandedOptions = this.yargs.getDemandedOptions();
validationInstance.requiredArguments = (args, demandedOptions) => {
this.demandedOptions = demandedOptions;
};
let argv;
try {
argv = this.yargs.argv;
} catch (err) {
if (
err.name === 'YError' &&
err.message.startsWith('Unknown argument: ')
) {
throw new UsageError(err.message);
}
throw err;
}
validationInstance.requiredArguments = requiredArguments;
// Yargs boolean options doesn't define the no* counterpart
// with negate-boolean on Yargs 15. Define as expected by the
// web-ext execute method.
if (argv.configDiscovery != null) {
argv.noConfigDiscovery = !argv.configDiscovery;
}
if (argv.reload != null) {
argv.noReload = !argv.reload;
}
// Yargs doesn't accept --no-input as a valid option if there isn't a
// --input option defined to be negated, to fix that the --input is
// defined and hidden from the yargs help output and we define here
// the negated argument name that we expect to be set in the parsed
// arguments (and fix https://github.com/mozilla/web-ext/issues/1860).
if (argv.input != null) {
argv.noInput = !argv.input;
}
// Replacement for the "requiresArg: true" parameter until the following bug
// is fixed: https://github.com/yargs/yargs/issues/1098
if (argv.ignoreFiles && !argv.ignoreFiles.length) {
throw new UsageError('Not enough arguments following: ignore-files');
}
if (argv.startUrl && !argv.startUrl.length) {
throw new UsageError('Not enough arguments following: start-url');
}
return argv;
}