From 087a32971fe022a8d94c0b106d82ed24f98ef1bc Mon Sep 17 00:00:00 2001 From: Ashiq Firoz <64600806+ashiq-firoz@users.noreply.github.com> Date: Thu, 8 Aug 2024 19:16:51 +0530 Subject: [PATCH] fix(cli): Fix bad docusaurus CLI behavior on for --version, -V, --help, -h (#10368) Co-authored-by: sebastien <lorber.sebastien@gmail.com> --- packages/docusaurus/bin/docusaurus.mjs | 25 +++++++++++++------------ 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/packages/docusaurus/bin/docusaurus.mjs b/packages/docusaurus/bin/docusaurus.mjs index 7429f4f4156e..11ac62cadbfb 100755 --- a/packages/docusaurus/bin/docusaurus.mjs +++ b/packages/docusaurus/bin/docusaurus.mjs @@ -222,7 +222,8 @@ cli cli.arguments('<command>').action((cmd) => { cli.outputHelp(); - logger.error` Unknown command name=${cmd}.`; + logger.error`Unknown Docusaurus CLI command name=${cmd}.`; + process.exit(1); }); // === The above is the commander configuration === @@ -247,24 +248,24 @@ function isInternalCommand(command) { ); } -// process.argv always looks like this: -// [ -// '/path/to/node', -// '/path/to/docusaurus.mjs', -// '<subcommand>', -// ...subcommandArgs -// ] +/** + * @param {string | undefined} command + */ +function isExternalCommand(command) { + return !!(command && !isInternalCommand(command) && !command.startsWith('-')); +} -// There is no subcommand -// TODO: can we use commander to handle this case? -if (process.argv.length < 3 || process.argv[2]?.startsWith('--')) { +// No command? We print the help message because Commander doesn't +// Note argv looks like this: ['../node','../docusaurus.mjs','<command>',...rest] +if (process.argv.length < 3) { cli.outputHelp(); + logger.error`Please provide a Docusaurus CLI command.`; process.exit(1); } // There is an unrecognized subcommand // Let plugins extend the CLI before parsing -if (!isInternalCommand(process.argv[2])) { +if (isExternalCommand(process.argv[2])) { // TODO: in this step, we must assume default site structure because there's // no way to know the siteDir/config yet. Maybe the root cli should be // responsible for parsing these arguments?