From 1313d905356b8ed6621c167fb0e160ee6f0b92ac Mon Sep 17 00:00:00 2001 From: jamesgeorge007 Date: Sat, 10 Oct 2020 14:44:39 +0530 Subject: [PATCH 1/3] fix: cli-executer supplies args further up --- packages/webpack-cli/__tests__/cli-executer.test.js | 8 -------- packages/webpack-cli/lib/bootstrap.js | 10 ++++++++-- packages/webpack-cli/lib/utils/cli-executer.js | 6 +++--- 3 files changed, 11 insertions(+), 13 deletions(-) diff --git a/packages/webpack-cli/__tests__/cli-executer.test.js b/packages/webpack-cli/__tests__/cli-executer.test.js index 74bdde7c346..e2d8ccaf31e 100644 --- a/packages/webpack-cli/__tests__/cli-executer.test.js +++ b/packages/webpack-cli/__tests__/cli-executer.test.js @@ -1,9 +1,5 @@ -jest.mock('../lib/bootstrap'); jest.mock('enquirer'); -const runCLI = require('../lib/bootstrap'); -runCLI.mockImplementation(() => {}); - describe('CLI Executer', () => { let cliExecuter = null; let multiCalls = 0; @@ -47,10 +43,6 @@ describe('CLI Executer', () => { it('runs enquirer options then runs webpack', async () => { await cliExecuter(); - // ensure that the webpack runCLI is called - expect(runCLI.mock.calls.length).toEqual(1); - expect(runCLI.mock.calls[0][0]).toEqual(['--config', 'test1', '--entry', 'test2', '--progress']); - // check that webpack options are actually being displayed that // the user can select from expect(multiCalls).toEqual(1); diff --git a/packages/webpack-cli/lib/bootstrap.js b/packages/webpack-cli/lib/bootstrap.js index 65a1b8809d9..cfd6e415940 100644 --- a/packages/webpack-cli/lib/bootstrap.js +++ b/packages/webpack-cli/lib/bootstrap.js @@ -13,11 +13,15 @@ process.title = 'webpack-cli'; // Create a new instance of the CLI object const cli = new WebpackCLI(); +function parseArgs(args) { + return argParser(core, args, true, process.title); +} + async function runCLI(cliArgs) { let args; const commandIsUsed = isCommandUsed(cliArgs); - const parsedArgs = argParser(core, cliArgs, true, process.title); + const parsedArgs = parseArgs(cliArgs); if (parsedArgs.unknownArgs.includes('help') || parsedArgs.opts.help) { options.enabled = !cliArgs.includes('--no-color'); helpRunner(cliArgs); @@ -56,7 +60,9 @@ async function runCLI(cliArgs) { parsedArgs.unknownArgs.forEach((unknown) => { logger.warn(`Unknown argument: ${unknown}`); }); - await cliExecuter(); + const args = await cliExecuter(); + const { opts } = parseArgs(args); + await cli.run(opts, core); return; } const parsedArgsOpts = parsedArgs.opts; diff --git a/packages/webpack-cli/lib/utils/cli-executer.js b/packages/webpack-cli/lib/utils/cli-executer.js index 6a8af1841c5..b51ee3f92be 100644 --- a/packages/webpack-cli/lib/utils/cli-executer.js +++ b/packages/webpack-cli/lib/utils/cli-executer.js @@ -2,7 +2,6 @@ const { MultiSelect, Input } = require('enquirer'); const { cyan } = require('colorette'); const logger = require('./logger'); const cliArgs = require('./cli-flags').core; -const runCLI = require('../bootstrap'); async function prompter() { const args = []; @@ -55,9 +54,10 @@ async function run() { try { const args = await prompter(); logger.info('\nExecuting CLI\n'); - await runCLI(args); + return args; } catch (err) { - logger.error(`Action Interrupted, use ${cyan('webpack-cli help')} to see possible options.`); + logger.error(`${err} Action Interrupted, use ${cyan('webpack-cli help')} to see possible options.`); + process.exit(1); } } From 3a3c5b22e500a813241ecac9f66caf74dbb5bfd9 Mon Sep 17 00:00:00 2001 From: jamesgeorge007 Date: Sat, 10 Oct 2020 14:51:03 +0530 Subject: [PATCH 2/3] refactor: use arrow functions --- packages/webpack-cli/lib/bootstrap.js | 8 +++----- packages/webpack-cli/lib/utils/arg-parser.js | 4 ++-- packages/webpack-cli/lib/utils/cli-executer.js | 8 ++++---- 3 files changed, 9 insertions(+), 11 deletions(-) diff --git a/packages/webpack-cli/lib/bootstrap.js b/packages/webpack-cli/lib/bootstrap.js index cfd6e415940..5428c5dd74b 100644 --- a/packages/webpack-cli/lib/bootstrap.js +++ b/packages/webpack-cli/lib/bootstrap.js @@ -13,11 +13,9 @@ process.title = 'webpack-cli'; // Create a new instance of the CLI object const cli = new WebpackCLI(); -function parseArgs(args) { - return argParser(core, args, true, process.title); -} +const parseArgs = (args) => argParser(core, args, true, process.title); -async function runCLI(cliArgs) { +const runCLI = async (cliArgs) => { let args; const commandIsUsed = isCommandUsed(cliArgs); @@ -108,6 +106,6 @@ async function runCLI(cliArgs) { return; } } -} +}; module.exports = runCLI; diff --git a/packages/webpack-cli/lib/utils/arg-parser.js b/packages/webpack-cli/lib/utils/arg-parser.js index ef379d735cc..c72ad1bd7d4 100644 --- a/packages/webpack-cli/lib/utils/arg-parser.js +++ b/packages/webpack-cli/lib/utils/arg-parser.js @@ -13,7 +13,7 @@ const { defaultCommands } = require('./commands'); * @param {boolean} argsOnly false if all of process.argv has been provided, true if * args is only a subset of process.argv that removes the first couple elements */ -function argParser(options, args, argsOnly = false, name = '') { +const argParser = (options, args, argsOnly = false, name = '') => { const parser = new commander.Command(); // Set parser name parser.name(name); @@ -155,6 +155,6 @@ function argParser(options, args, argsOnly = false, name = '') { unknownArgs, opts, }; -} +}; module.exports = argParser; diff --git a/packages/webpack-cli/lib/utils/cli-executer.js b/packages/webpack-cli/lib/utils/cli-executer.js index b51ee3f92be..7a699986536 100644 --- a/packages/webpack-cli/lib/utils/cli-executer.js +++ b/packages/webpack-cli/lib/utils/cli-executer.js @@ -3,7 +3,7 @@ const { cyan } = require('colorette'); const logger = require('./logger'); const cliArgs = require('./cli-flags').core; -async function prompter() { +const prompter = async () => { const args = []; const typePrompt = new MultiSelect({ @@ -48,9 +48,9 @@ async function prompter() { } return [...args, ...boolArgs]; -} +}; -async function run() { +const run = async () => { try { const args = await prompter(); logger.info('\nExecuting CLI\n'); @@ -59,6 +59,6 @@ async function run() { logger.error(`${err} Action Interrupted, use ${cyan('webpack-cli help')} to see possible options.`); process.exit(1); } -} +}; module.exports = run; From 27003babe776b7da3e5a37cbabe842030915299f Mon Sep 17 00:00:00 2001 From: jamesgeorge007 Date: Sat, 10 Oct 2020 14:53:20 +0530 Subject: [PATCH 3/3] tests: assert for args length --- packages/webpack-cli/__tests__/cli-executer.test.js | 3 ++- packages/webpack-cli/lib/utils/cli-executer.js | 4 ++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/packages/webpack-cli/__tests__/cli-executer.test.js b/packages/webpack-cli/__tests__/cli-executer.test.js index e2d8ccaf31e..f64847f5084 100644 --- a/packages/webpack-cli/__tests__/cli-executer.test.js +++ b/packages/webpack-cli/__tests__/cli-executer.test.js @@ -41,7 +41,8 @@ describe('CLI Executer', () => { }); it('runs enquirer options then runs webpack', async () => { - await cliExecuter(); + const args = await cliExecuter(); + expect(args.length).toBe(5); // check that webpack options are actually being displayed that // the user can select from diff --git a/packages/webpack-cli/lib/utils/cli-executer.js b/packages/webpack-cli/lib/utils/cli-executer.js index 7a699986536..276981f1285 100644 --- a/packages/webpack-cli/lib/utils/cli-executer.js +++ b/packages/webpack-cli/lib/utils/cli-executer.js @@ -56,8 +56,8 @@ const run = async () => { logger.info('\nExecuting CLI\n'); return args; } catch (err) { - logger.error(`${err} Action Interrupted, use ${cyan('webpack-cli help')} to see possible options.`); - process.exit(1); + logger.error(`Action Interrupted, use ${cyan('webpack-cli help')} to see possible options.`); + process.exit(2); } };