Skip to content

Commit

Permalink
refactor: fix
Browse files Browse the repository at this point in the history
  • Loading branch information
alexander-akait committed Nov 9, 2020
1 parent 97e5df5 commit bf58b58
Show file tree
Hide file tree
Showing 7 changed files with 47 additions and 27 deletions.
15 changes: 9 additions & 6 deletions packages/webpack-cli/lib/bootstrap.js
Expand Up @@ -11,7 +11,13 @@ process.title = 'webpack-cli';
const runCLI = async (cliArgs) => {
const parsedArgs = argParser(flags, cliArgs, true, process.title);

// Enable/Disable colors
if (typeof parsedArgs.opts.color !== 'undefined') {
coloretteOptions.enabled = Boolean(parsedArgs.opts.color);
}

const commandIsUsed = isCommandUsed(cliArgs);

if (commandIsUsed) {
return;
}
Expand All @@ -24,11 +30,6 @@ const runCLI = async (cliArgs) => {
// If the unknown arg starts with a '-', it will be considered an unknown flag rather than an entry
let entry;

// enable/disable colors
if (typeof parsedArgs.opts.color !== 'undefined') {
coloretteOptions.enabled = Boolean(parsedArgs.opts.color);
}

if (parsedArgs.unknownArgs.length > 0) {
entry = [];

Expand All @@ -44,10 +45,12 @@ const runCLI = async (cliArgs) => {
}

if (parsedArgs.unknownArgs.length > 0) {
parsedArgs.unknownArgs.forEach(async (unknown) => {
parsedArgs.unknownArgs.forEach((unknown) => {
logger.error(`Unknown argument: ${unknown}`);

const strippedFlag = unknown.substr(2);
const { name: suggestion } = flags.find((flag) => leven(strippedFlag, flag.name) < 3);

if (suggestion) {
logger.raw(`Did you mean --${suggestion}?`);
}
Expand Down
8 changes: 7 additions & 1 deletion packages/webpack-cli/lib/groups/runHelp.js
@@ -1,10 +1,16 @@
const { green, bold, underline } = require('colorette');
const { options, green, bold, underline } = require('colorette');
const commandLineUsage = require('command-line-usage');

const { commands, flags } = require('../utils/cli-flags');
const logger = require('../utils/logger');

const outputHelp = (args) => {
if (args.includes('--color')) {
options.enabled = true;
} else if (args.includes('--no-color')) {
options.enabled = false;
}

const hasUnknownVersionArgs = (args, commands, flags) => {
return args.filter((arg) => {
if (arg === 'version' || arg === 'help' || arg === '--help' || arg === '-h' || arg === '--no-color') {
Expand Down
9 changes: 8 additions & 1 deletion packages/webpack-cli/lib/groups/runVersion.js
@@ -1,7 +1,14 @@
const logger = require('../utils/logger');
const { commands, flags } = require('../utils/cli-flags');
const { options } = require('colorette');

const outputVersion = (args) => {
if (args.includes('--color')) {
options.enabled = true;
} else if (args.includes('--no-color')) {
options.enabled = false;
}

const hasUnknownVersionArgs = (args, commands, flags) => {
return args.filter((arg) => {
if (arg === 'version' || arg === '--version' || arg === '-v' || arg === '--color' || arg === '--no-color') {
Expand All @@ -23,7 +30,7 @@ const outputVersion = (args) => {

if (invalidArgs.length > 0) {
const argType = invalidArgs[0].startsWith('-') ? 'option' : 'command';
logger.error(`Error: Invalid ${argType} '${invalidArgs[0]}'.`);
logger.error(`Invalid ${argType} '${invalidArgs[0]}'.`);
logger.error('Run webpack --help to see available commands and arguments.');
process.exit(2);
}
Expand Down
1 change: 1 addition & 0 deletions packages/webpack-cli/lib/utils/arg-parser.js
Expand Up @@ -28,6 +28,7 @@ const argParser = (options, args, argsOnly = false, name = '') => {
}

const parser = new commander.Command();

// Set parser name
parser.name(name);
parser.storeOptionsAsProperties(false);
Expand Down
5 changes: 4 additions & 1 deletion packages/webpack-cli/lib/webpack-cli.js
Expand Up @@ -41,6 +41,7 @@ class WebpackCLI {
.filter((arg) => coreFlagMap.has(toKebabCase(arg)))
.reduce((acc, cur) => {
acc[toKebabCase(cur)] = parsedArgs[cur];

return acc;
}, {});
const coreCliArgs = coreCliHelper.getArguments();
Expand Down Expand Up @@ -70,9 +71,11 @@ class WebpackCLI {
.filter((coreFlag) => coreFlag.group === groups.BASIC_GROUP)
.reduce((result, flagObject) => {
result.push(flagObject.name);

if (flagObject.alias) {
result.push(flagObject.alias);
}

return result;
}, []);

Expand Down Expand Up @@ -387,7 +390,7 @@ class WebpackCLI {
}

let colors;

// From flags
if (typeof args.color !== 'undefined') {
colors = args.color;
Expand Down
12 changes: 6 additions & 6 deletions test/version/version-external-packages.test.js
Expand Up @@ -86,26 +86,26 @@ describe('version flag with external packages', () => {
const { stderr, stdout, exitCode } = run(__dirname, ['init', 'abc', '--version'], false);

expect(exitCode).toBe(2);
expect(stderr).toContain(`Error: Invalid command 'abc'`);
expect(stderr).toContain('Run webpack --help to see available commands and arguments');
expect(stderr).toContain(`[webpack-cli] Invalid command 'abc'`);
expect(stderr).toContain('[webpack-cli] Run webpack --help to see available commands and arguments');
expect(stdout).toBe('');
});

it(' should throw error if invalid argument is present with version command', () => {
const { stderr, stdout, exitCode } = run(__dirname, ['init', 'abc', 'version'], false);

expect(exitCode).toBe(2);
expect(stderr).toContain(`Error: Invalid command 'abc'`);
expect(stderr).toContain('Run webpack --help to see available commands and arguments');
expect(stderr).toContain(`[webpack-cli] Invalid command 'abc'`);
expect(stderr).toContain('[webpack-cli] Run webpack --help to see available commands and arguments');
expect(stdout).toBe('');
});

it(' should throw error if invalid argument is present with -v alias', () => {
const { stderr, stdout, exitCode } = run(__dirname, ['init', 'abc', '-v'], false);

expect(exitCode).toBe(2);
expect(stderr).toContain(`Error: Invalid command 'abc'`);
expect(stderr).toContain('Run webpack --help to see available commands and arguments');
expect(stderr).toContain(`[webpack-cli] Invalid command 'abc'`);
expect(stderr).toContain('[webpack-cli] Run webpack --help to see available commands and arguments');
expect(stdout).toBe('');
});
});
24 changes: 12 additions & 12 deletions test/version/version-multi-args.test.js
Expand Up @@ -27,52 +27,52 @@ describe('version flag with multiple arguments', () => {

expect(exitCode).toBe(2);
expect(stdout).not.toContain(pkgJSON.version);
expect(stderr).toContain(`Error: Invalid command 'abc'`);
expect(stderr).toContain('Run webpack --help to see available commands and arguments');
expect(stderr).toContain(`[webpack-cli] Invalid command 'abc'`);
expect(stderr).toContain('[webpack-cli] Run webpack --help to see available commands and arguments');
});

it('throws error if invalid option is passed with version command', () => {
const { stdout, stderr, exitCode } = run(__dirname, ['version', '--abc'], false);

expect(exitCode).toBe(2);
expect(stdout).not.toContain(pkgJSON.version);
expect(stderr).toContain(`Error: Invalid option '--abc'`);
expect(stderr).toContain('Run webpack --help to see available commands and arguments');
expect(stderr).toContain(`[webpack-cli] Invalid option '--abc'`);
expect(stderr).toContain('[webpack-cli] Run webpack --help to see available commands and arguments');
});

it('throws error if invalid command is passed with --version flag', () => {
const { stdout, stderr, exitCode } = run(__dirname, ['--version', 'abc'], false);

expect(exitCode).toBe(2);
expect(stdout).not.toContain(pkgJSON.version);
expect(stderr).toContain(`Error: Invalid command 'abc'`);
expect(stderr).toContain('Run webpack --help to see available commands and arguments');
expect(stderr).toContain(`[webpack-cli] Invalid command 'abc'`);
expect(stderr).toContain('[webpack-cli] Run webpack --help to see available commands and arguments');
});

it('throws error if invalid option is passed with --version flag', () => {
const { stdout, stderr, exitCode } = run(__dirname, ['--version', '--abc'], false);

expect(exitCode).toBe(2);
expect(stdout).not.toContain(pkgJSON.version);
expect(stderr).toContain(`Error: Invalid option '--abc'`);
expect(stderr).toContain('Run webpack --help to see available commands and arguments');
expect(stderr).toContain(`[webpack-cli] Invalid option '--abc'`);
expect(stderr).toContain('[webpack-cli] Run webpack --help to see available commands and arguments');
});

it('throws error if invalid command is passed with -v alias', () => {
const { stdout, stderr, exitCode } = run(__dirname, ['-v', 'abc'], false);

expect(exitCode).toBe(2);
expect(stdout).not.toContain(pkgJSON.version);
expect(stderr).toContain(`Error: Invalid command 'abc'`);
expect(stderr).toContain('Run webpack --help to see available commands and arguments');
expect(stderr).toContain(`[webpack-cli] Invalid command 'abc'`);
expect(stderr).toContain('[webpack-cli] Run webpack --help to see available commands and arguments');
});

it('throws error if invalid option is passed with -v alias', () => {
const { stdout, stderr, exitCode } = run(__dirname, ['-v', '--abc'], false);

expect(exitCode).toBe(2);
expect(stdout).not.toContain(pkgJSON.version);
expect(stderr).toContain(`Error: Invalid option '--abc'`);
expect(stderr).toContain('Run webpack --help to see available commands and arguments');
expect(stderr).toContain(`[webpack-cli] Invalid option '--abc'`);
expect(stderr).toContain('[webpack-cli] Run webpack --help to see available commands and arguments');
});
});

0 comments on commit bf58b58

Please sign in to comment.