From f6feb0b7b3b5ceb727119056e44e756a8105ec5b Mon Sep 17 00:00:00 2001 From: Mariusz Nowak Date: Mon, 13 Dec 2021 17:01:43 +0100 Subject: [PATCH] fix(CLI): Do not crash on help request --- lib/cli/parse-args.js | 10 ++++++++++ test/unit/lib/cli/parse-args.test.js | 5 +++++ 2 files changed, 15 insertions(+) diff --git a/lib/cli/parse-args.js b/lib/cli/parse-args.js index 3b19fc5b36a..4bfdc1c0c49 100644 --- a/lib/cli/parse-args.js +++ b/lib/cli/parse-args.js @@ -14,6 +14,7 @@ module.exports = ( ) => { const result = Object.create(null); result._ = []; + const isHelpRequest = args.includes('-h') || args.includes('--help'); for (let i = 0, arg; (arg = args[i]); ++i) { if (arg === '--') { result._.push(...args.slice(i + 1)); @@ -32,6 +33,7 @@ module.exports = ( if (aliasNames) { if (aliasNames.length > 1) { if (value != null) { + if (isHelpRequest) return result; throw new ServerlessError( `Unexpected value for "-${aliasNames}"`, 'UNEXPECTED_CLI_PARAM_VALUE' @@ -40,6 +42,7 @@ module.exports = ( for (const aliasName of aliasNames) { paramName = alias.get(aliasName) || aliasName; if (result[paramName] != null) { + if (isHelpRequest) return result; throw new ServerlessError( `Unexpected multiple "--${paramName}" (aliased by "-${aliasName}") values`, 'UNEXPECTED_CLI_PARAM_MULTIPLE_VALUE' @@ -56,6 +59,7 @@ module.exports = ( if (string.has(paramName) || multiple.has(paramName)) { if (isBoolean) { + if (isHelpRequest) return result; throw new ServerlessError(`Unexpected boolean "--${paramName}"`, 'MISSING_CLI_PARAM_VALUE'); } if (multiple.has(paramName)) { @@ -64,6 +68,7 @@ module.exports = ( continue; } if (result[paramName] !== undefined) { + if (isHelpRequest) return result; throw new ServerlessError( `Unexpected multiple "--${paramName}"`, 'UNEXPECTED_CLI_PARAM_MULTIPLE_VALUE' @@ -76,12 +81,14 @@ module.exports = ( if (paramName.startsWith('no-') && (boolean.has(paramName.slice(3)) || isBoolean)) { paramName = paramName.slice(3); if (value != null) { + if (isHelpRequest) return result; throw new ServerlessError( `Unexpected value for "--${paramName}"`, 'UNEXPECTED_CLI_PARAM_VALUE' ); } if (result[paramName] !== undefined) { + if (isHelpRequest) return result; throw new ServerlessError( `Unexpected multiple "--${paramName}"`, 'UNEXPECTED_CLI_PARAM_MULTIPLE_VALUE' @@ -93,12 +100,14 @@ module.exports = ( if (boolean.has(paramName) || isBoolean) { if (value != null) { + if (isHelpRequest) return result; throw new ServerlessError( `Unexpected value for "--${paramName}"`, 'UNEXPECTED_CLI_PARAM_VALUE' ); } if (result[paramName] !== undefined) { + if (isHelpRequest) return result; throw new ServerlessError( `Unexpected multiple "--${paramName}"`, 'UNEXPECTED_CLI_PARAM_MULTIPLE_VALUE' @@ -112,6 +121,7 @@ module.exports = ( if (Array.isArray(result[paramName])) { result[paramName].push(value == null ? args[++i] : value || null); } else if (typeof result[paramName] === 'boolean') { + if (isHelpRequest) return result; throw new ServerlessError( `Unexpected multiple "--${paramName}"`, 'UNEXPECTED_CLI_PARAM_MULTIPLE_VALUE' diff --git a/test/unit/lib/cli/parse-args.test.js b/test/unit/lib/cli/parse-args.test.js index 2323ed4a396..a474cc55099 100644 --- a/test/unit/lib/cli/parse-args.test.js +++ b/test/unit/lib/cli/parse-args.test.js @@ -139,6 +139,11 @@ describe('test/unit/lib/cli/parse-args.test.js', () => { expect(parsedArgs).to.deep.equal({}); }); + it('should not throw if -h or --help param', () => { + parseArgs(['-ab=foo', '--help'], {}); + parseArgs(['--boolean=value', '-h'], { boolean: new Set(['boolean']) }); + }); + it('should reject value for mutliple boolean properties alias', () => expect(() => parseArgs(['-ab=foo'], {})) .to.throw(ServerlessError)