Skip to content

Commit 744dbe9

Browse files
committed
Add validations to plugins
1 parent 41700ee commit 744dbe9

22 files changed

+612
-9
lines changed

lib/BannerPlugin.js

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,10 @@
88
const ConcatSource = require("webpack-sources").ConcatSource;
99
const ModuleFilenameHelpers = require("./ModuleFilenameHelpers");
1010

11+
const validateSchema = require("./validateSchema");
12+
const bannerPluginSchema = require("../schemas/plugins/bannerPluginSchema.json");
13+
const WebpackPluginValidationError = require("./WebpackPluginValidationError");
14+
1115
const wrapComment = (str) => {
1216
if(!str.includes("\n")) return `/*! ${str} */`;
1317
return `/*!\n * ${str.split("\n").join("\n * ")}\n */`;
@@ -17,6 +21,13 @@ class BannerPlugin {
1721
constructor(options) {
1822
if(arguments.length > 1)
1923
throw new Error("BannerPlugin only takes one argument (pass an options object)");
24+
25+
const pluginValidationErrors = validateSchema(bannerPluginSchema, options);
26+
27+
if(pluginValidationErrors.length) {
28+
throw new WebpackPluginValidationError(pluginValidationErrors, bannerPluginSchema);
29+
}
30+
2031
if(typeof options === "string")
2132
options = {
2233
banner: options

lib/DllPlugin.js

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,18 @@ const DllEntryPlugin = require("./DllEntryPlugin");
88
const LibManifestPlugin = require("./LibManifestPlugin");
99
const FlagInitialModulesAsUsedPlugin = require("./FlagInitialModulesAsUsedPlugin");
1010

11+
const validateSchema = require("./validateSchema");
12+
const dllPluginSchema = require("../schemas/plugins/dllPluginSchema.json");
13+
const WebpackPluginValidationError = require("./WebpackPluginValidationError");
14+
1115
class DllPlugin {
1216
constructor(options) {
17+
const pluginValidationErrors = validateSchema(dllPluginSchema, options);
18+
19+
if(pluginValidationErrors.length) {
20+
throw new WebpackPluginValidationError(pluginValidationErrors, dllPluginSchema);
21+
}
22+
1323
this.options = options;
1424
}
1525

lib/DllReferencePlugin.js

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,18 @@ const ExternalModuleFactoryPlugin = require("./ExternalModuleFactoryPlugin");
1010
const DelegatedExportsDependency = require("./dependencies/DelegatedExportsDependency");
1111
const NullFactory = require("./NullFactory");
1212

13+
const validateSchema = require("./validateSchema");
14+
const dllReferencePluginSchema = require("../schemas/plugins/dllReferencePluginSchema.json");
15+
const WebpackPluginValidationError = require("./WebpackPluginValidationError");
16+
1317
class DllReferencePlugin {
1418
constructor(options) {
19+
const pluginValidationErrors = validateSchema(dllReferencePluginSchema, options);
20+
21+
if(pluginValidationErrors.length) {
22+
throw new WebpackPluginValidationError(pluginValidationErrors, dllReferencePluginSchema);
23+
}
24+
1525
this.options = options;
1626
}
1727

lib/HashedModuleIdsPlugin.js

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,18 @@
55
"use strict";
66
const createHash = require("crypto").createHash;
77

8+
const validateSchema = require("./validateSchema");
9+
const hashedModuleIdsPluginSchema = require("../schemas/plugins/hashedModuleIdsPluginSchema.json");
10+
const WebpackPluginValidationError = require("./WebpackPluginValidationError");
11+
812
class HashedModuleIdsPlugin {
913
constructor(options) {
14+
const pluginValidationErrors = validateSchema(hashedModuleIdsPluginSchema, options || {});
15+
16+
if(pluginValidationErrors.length) {
17+
throw new WebpackPluginValidationError(pluginValidationErrors, hashedModuleIdsPluginSchema);
18+
}
19+
1020
this.options = Object.assign({
1121
hashFunction: "md5",
1222
hashDigest: "base64",

lib/LoaderOptionsPlugin.js

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,18 @@
66

77
const ModuleFilenameHelpers = require("./ModuleFilenameHelpers");
88

9+
const validateSchema = require("./validateSchema");
10+
const loaderOptionsPluginSchema = require("../schemas/plugins/loaderOptionsPluginSchema.json");
11+
const WebpackPluginValidationError = require("./WebpackPluginValidationError");
12+
913
class LoaderOptionsPlugin {
1014
constructor(options) {
15+
const pluginValidationErrors = validateSchema(loaderOptionsPluginSchema, options || {});
16+
17+
if(pluginValidationErrors.length) {
18+
throw new WebpackPluginValidationError(pluginValidationErrors, loaderOptionsPluginSchema);
19+
}
20+
1121
if(typeof options !== "object") options = {};
1222
if(!options.test) options.test = {
1323
test: () => true

lib/SourceMapDevToolPlugin.js

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,10 @@ const RawSource = require("webpack-sources").RawSource;
1212
const ModuleFilenameHelpers = require("./ModuleFilenameHelpers");
1313
const SourceMapDevToolModuleOptionsPlugin = require("./SourceMapDevToolModuleOptionsPlugin");
1414

15+
const validateSchema = require("./validateSchema");
16+
const sourceMapDevToolPluginSchema = require("../schemas/plugins/sourceMapDevToolPluginSchema.json");
17+
const WebpackPluginValidationError = require("./WebpackPluginValidationError");
18+
1519
const basename = (name) => {
1620
if(name.indexOf("/") < 0) return name;
1721
return name.substr(name.lastIndexOf("/") + 1);
@@ -53,12 +57,13 @@ class SourceMapDevToolPlugin {
5357
constructor(options) {
5458
if(arguments.length > 1)
5559
throw new Error("SourceMapDevToolPlugin only takes one argument (pass an options object)");
56-
// TODO: remove in webpack 3
57-
if(typeof options === "string") {
58-
options = {
59-
sourceMapFilename: options
60-
};
60+
61+
const pluginValidationErrors = validateSchema(sourceMapDevToolPluginSchema, options || {});
62+
63+
if(pluginValidationErrors.length) {
64+
throw new WebpackPluginValidationError(pluginValidationErrors, sourceMapDevToolPluginSchema);
6165
}
66+
6267
if(!options) options = {};
6368
this.sourceMapFilename = options.filename;
6469
this.sourceMappingURLComment = options.append === false ? false : options.append || "\n//# sourceMappingURL=[url]";

lib/WatchIgnorePlugin.js

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,18 @@
44
*/
55
"use strict";
66

7+
const validateSchema = require("./validateSchema");
8+
const watchIgnorePluginSchema = require("../schemas/plugins/watchIgnorePluginSchema.json");
9+
const WebpackPluginValidationError = require("./WebpackPluginValidationError");
10+
711
class WatchIgnorePlugin {
812
constructor(paths) {
13+
const pluginValidationErrors = validateSchema(watchIgnorePluginSchema, paths);
14+
15+
if(pluginValidationErrors.length) {
16+
throw new WebpackPluginValidationError(pluginValidationErrors, watchIgnorePluginSchema);
17+
}
18+
919
this.paths = paths;
1020
}
1121

lib/optimize/AggressiveSplittingPlugin.js

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,10 @@
66

77
const identifierUtils = require("../util/identifier");
88

9+
const validateSchema = require("../validateSchema");
10+
const aggressiveSplittingPluginSchema = require("../../schemas/plugins/optimize/aggressiveSplittingPluginSchema.json");
11+
const WebpackPluginValidationError = require("../WebpackPluginValidationError");
12+
913
function moveModuleBetween(oldChunk, newChunk) {
1014
return function(module) {
1115
oldChunk.moveModule(module, newChunk);
@@ -30,6 +34,12 @@ function copyWithReason(obj) {
3034

3135
class AggressiveSplittingPlugin {
3236
constructor(options) {
37+
const optionsValidationErrors = validateSchema(aggressiveSplittingPluginSchema, options || {});
38+
39+
if(optionsValidationErrors.length) {
40+
throw new WebpackPluginValidationError(optionsValidationErrors, aggressiveSplittingPluginSchema);
41+
}
42+
3343
this.options = options || {};
3444
if(typeof this.options.minSize !== "number") this.options.minSize = 30 * 1024;
3545
if(typeof this.options.maxSize !== "number") this.options.maxSize = 50 * 1024;

lib/optimize/CommonsChunkPlugin.js

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,10 @@
55
"use strict";
66
let nextIdent = 0;
77

8+
const validateSchema = require("../validateSchema");
9+
const commonsChunkPluginSchema = require("../../schemas/plugins/optimize/commonsChunkPluginSchema.json");
10+
const WebpackPluginValidationError = require("../WebpackPluginValidationError");
11+
812
class CommonsChunkPlugin {
913
constructor(options) {
1014
if(arguments.length > 1) {
@@ -25,6 +29,12 @@ The available options are:
2529
minSize: number`);
2630
}
2731

32+
const optionsValidationErrors = validateSchema(commonsChunkPluginSchema, options);
33+
34+
if(optionsValidationErrors.length) {
35+
throw new WebpackPluginValidationError(optionsValidationErrors, commonsChunkPluginSchema);
36+
}
37+
2838
const normalizedOptions = this.normalizeOptions(options);
2939

3040
this.chunkNames = normalizedOptions.chunkNames;

lib/optimize/LimitChunkCountPlugin.js

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,18 @@
44
*/
55
"use strict";
66

7+
const validateSchema = require("../validateSchema");
8+
const limitChunkCountPluginSchema = require("../../schemas/plugins/optimize/limitChunkCountPluginSchema.json");
9+
const WebpackPluginValidationError = require("../WebpackPluginValidationError");
10+
711
class LimitChunkCountPlugin {
812
constructor(options) {
9-
if(options !== undefined && typeof options !== "object" || Array.isArray(options)) {
10-
throw new Error("Argument should be an options object.\nFor more info on options, see https://webpack.js.org/plugins/");
13+
const pluginValidationErrors = validateSchema(limitChunkCountPluginSchema, options || {});
14+
15+
if(pluginValidationErrors.length) {
16+
throw new WebpackPluginValidationError(pluginValidationErrors, limitChunkCountPluginSchema);
1117
}
18+
1219
this.options = options || {};
1320
}
1421
apply(compiler) {

0 commit comments

Comments
 (0)