diff --git a/lib/command.js b/lib/command.js index e4b5d1699..ce9030701 100644 --- a/lib/command.js +++ b/lib/command.js @@ -897,6 +897,21 @@ Expecting one of '${allowedValues.join("', '")}'`); return userArgs; } + /** + * @param {boolean} async + * @param {Function} userArgsCallback + * @param {string[]} [argv] + * @param {Object} [parseOptions] + * @param {string} [parseOptions.from] + * @return {Command|Promise} + * @api private + */ + + _parseSubroutine(async, userArgsCallback, argv, parseOptions) { + const userArgs = this._prepareUserArgs(argv, parseOptions); + return userArgsCallback(userArgs); + } + /** * Parse `argv`, setting options and invoking commands when defined. * @@ -915,10 +930,10 @@ Expecting one of '${allowedValues.join("', '")}'`); */ parse(argv, parseOptions) { - const userArgs = this._prepareUserArgs(argv, parseOptions); - this._parseCommand([], userArgs); - - return this; + return this._parseSubroutine(false, (userArgs) => { + this._parseCommand([], userArgs); + return this; + }, argv, parseOptions); } /** @@ -941,10 +956,10 @@ Expecting one of '${allowedValues.join("', '")}'`); */ async parseAsync(argv, parseOptions) { - const userArgs = this._prepareUserArgs(argv, parseOptions); - await this._parseCommand([], userArgs); - - return this; + return this._parseSubroutine(true, async(userArgs) => { + await this._parseCommand([], userArgs); + return this; + }, argv, parseOptions); } /**