Skip to content

Commit

Permalink
fix: configtest for v4
Browse files Browse the repository at this point in the history
  • Loading branch information
snitin315 committed Jan 5, 2021
1 parent b94c067 commit 1377748
Show file tree
Hide file tree
Showing 3 changed files with 22 additions and 13 deletions.
29 changes: 19 additions & 10 deletions packages/configtest/src/index.ts
@@ -1,5 +1,3 @@
import webpack from 'webpack';

class ConfigTestCommand {
async apply(cli): Promise<void> {
const { logger } = cli;
Expand All @@ -13,22 +11,33 @@ class ConfigTestCommand {
pkg: '@webpack-cli/configtest',
},
[],
async (configPath: string) => {
async (configPath: string): Promise<void> => {
//eslint-disable-next-line @typescript-eslint/no-var-requires
const { validate, version, ValidationError, WebpackOptionsValidationError } = require('webpack');

const isWebpack5: boolean = version.startsWith('5');
const { options } = await cli.resolveConfig({ config: [configPath] });

const isValidationError = (error) => {
const isValidationError = (error): boolean => {
// https://github.com/webpack/webpack/blob/master/lib/index.js#L267
// https://github.com/webpack/webpack/blob/v4.44.2/lib/webpack.js#L90
const ValidationError: any = webpack.ValidationError || webpack.WebpackOptionsValidationError;
//eslint-disable-next-line @typescript-eslint/no-explicit-any
const webpackValidationError: any = ValidationError || WebpackOptionsValidationError;

return error instanceof ValidationError;
return error instanceof webpackValidationError;
};

//eslint-disable-next-line @typescript-eslint/no-explicit-any
const error: any = webpack.validate(options);

if (error) {
logger.error(isValidationError(error) ? error.message : error);
const error: any = validate(options);

if (error && error.length) {
if (isWebpack5) {
logger.error(isValidationError(error) ? error.message : error);
} else {
// eslint-disable-next-line @typescript-eslint/ban-ts-ignore
// @ts-ignore
logger.error(new WebpackOptionsValidationError(error));
}
process.exit(2);
}

Expand Down
2 changes: 1 addition & 1 deletion packages/webpack-cli/README.md
Expand Up @@ -72,7 +72,7 @@ npx webpack-cli --help verbose
plugin | p Scaffold a plugin repository
info | i Outputs information about your system and dependencies
serve | s Run the webpack Dev Server
configtest | t Run the webpack Dev Server
configtest | t Test your webpack configuration against validation errors.
```

### webpack 4
Expand Down
4 changes: 2 additions & 2 deletions test/configtest/configtest.test.js
Expand Up @@ -15,7 +15,7 @@ describe('basic info usage', () => {
const { exitCode, stderr, stdout } = run(__dirname, ['configtest', './error.config.js'], false);

expect(exitCode).toBe(2);
expect(stderr).toContain('ValidationError: Invalid configuration object.');
expect(stderr).toContain('Invalid configuration object.');
expect(stderr).toContain('configuration.mode should be one of these:');
expect(stdout).toBeFalsy();
});
Expand All @@ -32,7 +32,7 @@ describe('basic info usage', () => {
const { exitCode, stderr, stdout } = run(__dirname, ['t', './error.config.js'], false);

expect(exitCode).toBe(2);
expect(stderr).toContain('ValidationError: Invalid configuration object.');
expect(stderr).toContain('Invalid configuration object.');
expect(stderr).toContain('configuration.mode should be one of these:');
expect(stdout).toBeFalsy();
});
Expand Down

0 comments on commit 1377748

Please sign in to comment.