| 
									
										
										
										
											2016-09-09 18:52:34 +08:00
										 |  |  | /* | 
					
						
							|  |  |  | 	MIT License http://www.opensource.org/licenses/mit-license.php
 | 
					
						
							|  |  |  | 	Author Gajus Kuizinas @gajus | 
					
						
							|  |  |  | */ | 
					
						
							| 
									
										
										
										
											2018-07-30 23:08:51 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-01-05 00:33:49 +08:00
										 |  |  | "use strict"; | 
					
						
							| 
									
										
										
										
											2016-09-19 06:54:35 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-11-11 20:05:55 +08:00
										 |  |  | const webpackOptionsSchema = require("../schemas/WebpackOptions.json"); | 
					
						
							| 
									
										
										
										
											2018-07-30 23:08:51 +08:00
										 |  |  | const WebpackError = require("./WebpackError"); | 
					
						
							| 
									
										
										
										
											2017-01-05 00:33:49 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-10-28 20:15:39 +08:00
										 |  |  | const getSchemaPart = (path, parents, additionalPath) => { | 
					
						
							|  |  |  | 	parents = parents || 0; | 
					
						
							|  |  |  | 	path = path.split("/"); | 
					
						
							|  |  |  | 	path = path.slice(0, path.length - parents); | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +08:00
										 |  |  | 	if (additionalPath) { | 
					
						
							| 
									
										
										
										
											2017-10-28 20:15:39 +08:00
										 |  |  | 		additionalPath = additionalPath.split("/"); | 
					
						
							|  |  |  | 		path = path.concat(additionalPath); | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	let schemaPart = webpackOptionsSchema; | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +08:00
										 |  |  | 	for (let i = 1; i < path.length; i++) { | 
					
						
							| 
									
										
										
										
											2017-10-28 20:15:39 +08:00
										 |  |  | 		const inner = schemaPart[path[i]]; | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +08:00
										 |  |  | 		if (inner) schemaPart = inner; | 
					
						
							| 
									
										
										
										
											2017-10-28 20:15:39 +08:00
										 |  |  | 	} | 
					
						
							|  |  |  | 	return schemaPart; | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | const getSchemaPartText = (schemaPart, additionalPath) => { | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +08:00
										 |  |  | 	if (additionalPath) { | 
					
						
							|  |  |  | 		for (let i = 0; i < additionalPath.length; i++) { | 
					
						
							| 
									
										
										
										
											2017-10-28 20:15:39 +08:00
										 |  |  | 			const inner = schemaPart[additionalPath[i]]; | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +08:00
										 |  |  | 			if (inner) schemaPart = inner; | 
					
						
							| 
									
										
										
										
											2017-10-28 20:15:39 +08:00
										 |  |  | 		} | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2018-05-29 20:50:40 +08:00
										 |  |  | 	while (schemaPart.$ref) { | 
					
						
							|  |  |  | 		schemaPart = getSchemaPart(schemaPart.$ref); | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2017-10-28 20:15:39 +08:00
										 |  |  | 	let schemaText = WebpackOptionsValidationError.formatSchema(schemaPart); | 
					
						
							| 
									
										
										
										
											2018-05-29 20:50:40 +08:00
										 |  |  | 	if (schemaPart.description) { | 
					
						
							|  |  |  | 		schemaText += `\n-> ${schemaPart.description}`; | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2017-10-28 20:15:39 +08:00
										 |  |  | 	return schemaText; | 
					
						
							|  |  |  | }; | 
					
						
							| 
									
										
										
										
											2017-01-05 00:33:49 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-11-16 20:56:34 +08:00
										 |  |  | const getSchemaPartDescription = schemaPart => { | 
					
						
							| 
									
										
										
										
											2018-05-29 20:50:40 +08:00
										 |  |  | 	while (schemaPart.$ref) { | 
					
						
							|  |  |  | 		schemaPart = getSchemaPart(schemaPart.$ref); | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	if (schemaPart.description) { | 
					
						
							|  |  |  | 		return `\n-> ${schemaPart.description}`; | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2017-11-16 15:59:22 +08:00
										 |  |  | 	return ""; | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | const filterChildren = children => { | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +08:00
										 |  |  | 	return children.filter( | 
					
						
							|  |  |  | 		err => | 
					
						
							|  |  |  | 			err.keyword !== "anyOf" && | 
					
						
							|  |  |  | 			err.keyword !== "allOf" && | 
					
						
							|  |  |  | 			err.keyword !== "oneOf" | 
					
						
							|  |  |  | 	); | 
					
						
							| 
									
										
										
										
											2017-11-16 15:59:22 +08:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-10-28 20:15:39 +08:00
										 |  |  | const indent = (str, prefix, firstLine) => { | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +08:00
										 |  |  | 	if (firstLine) { | 
					
						
							| 
									
										
										
										
											2017-10-28 20:15:39 +08:00
										 |  |  | 		return prefix + str.replace(/\n(?!$)/g, "\n" + prefix); | 
					
						
							|  |  |  | 	} else { | 
					
						
							|  |  |  | 		return str.replace(/\n(?!$)/g, `\n${prefix}`); | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | }; | 
					
						
							| 
									
										
										
										
											2017-01-05 00:33:49 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-25 05:17:47 +08:00
										 |  |  | class WebpackOptionsValidationError extends WebpackError { | 
					
						
							| 
									
										
										
										
											2017-01-05 00:33:49 +08:00
										 |  |  | 	constructor(validationErrors) { | 
					
						
							| 
									
										
										
										
											2018-06-04 16:10:23 +08:00
										 |  |  | 		super( | 
					
						
							|  |  |  | 			"Invalid configuration object. " + | 
					
						
							|  |  |  | 				"Webpack has been initialised using a configuration object that does not match the API schema.\n" + | 
					
						
							|  |  |  | 				validationErrors | 
					
						
							|  |  |  | 					.map( | 
					
						
							|  |  |  | 						err => | 
					
						
							|  |  |  | 							" - " + | 
					
						
							|  |  |  | 							indent( | 
					
						
							|  |  |  | 								WebpackOptionsValidationError.formatValidationError(err), | 
					
						
							|  |  |  | 								"   ", | 
					
						
							|  |  |  | 								false | 
					
						
							|  |  |  | 							) | 
					
						
							|  |  |  | 					) | 
					
						
							|  |  |  | 					.join("\n") | 
					
						
							|  |  |  | 		); | 
					
						
							| 
									
										
										
										
											2017-01-05 00:33:49 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 		this.name = "WebpackOptionsValidationError"; | 
					
						
							|  |  |  | 		this.validationErrors = validationErrors; | 
					
						
							| 
									
										
										
										
											2017-02-11 06:35:11 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-02-17 00:16:47 +08:00
										 |  |  | 		Error.captureStackTrace(this, this.constructor); | 
					
						
							| 
									
										
										
										
											2017-01-05 00:33:49 +08:00
										 |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-10-28 20:15:39 +08:00
										 |  |  | 	static formatSchema(schema, prevSchemas) { | 
					
						
							|  |  |  | 		prevSchemas = prevSchemas || []; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		const formatInnerSchema = (innerSchema, addSelf) => { | 
					
						
							| 
									
										
										
										
											2018-05-29 20:50:40 +08:00
										 |  |  | 			if (!addSelf) { | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +08:00
										 |  |  | 				return WebpackOptionsValidationError.formatSchema( | 
					
						
							|  |  |  | 					innerSchema, | 
					
						
							|  |  |  | 					prevSchemas | 
					
						
							|  |  |  | 				); | 
					
						
							| 
									
										
										
										
											2018-05-29 20:50:40 +08:00
										 |  |  | 			} | 
					
						
							|  |  |  | 			if (prevSchemas.includes(innerSchema)) { | 
					
						
							|  |  |  | 				return "(recursive)"; | 
					
						
							|  |  |  | 			} | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +08:00
										 |  |  | 			return WebpackOptionsValidationError.formatSchema( | 
					
						
							|  |  |  | 				innerSchema, | 
					
						
							|  |  |  | 				prevSchemas.concat(schema) | 
					
						
							|  |  |  | 			); | 
					
						
							| 
									
										
										
										
											2017-10-28 20:15:39 +08:00
										 |  |  | 		}; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +08:00
										 |  |  | 		if (schema.type === "string") { | 
					
						
							| 
									
										
										
										
											2018-05-29 20:50:40 +08:00
										 |  |  | 			if (schema.minLength === 1) { | 
					
						
							|  |  |  | 				return "non-empty string"; | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 			if (schema.minLength > 1) { | 
					
						
							| 
									
										
										
										
											2017-10-28 20:15:39 +08:00
										 |  |  | 				return `string (min length ${schema.minLength})`; | 
					
						
							| 
									
										
										
										
											2018-05-29 20:50:40 +08:00
										 |  |  | 			} | 
					
						
							| 
									
										
										
										
											2017-10-28 20:15:39 +08:00
										 |  |  | 			return "string"; | 
					
						
							| 
									
										
										
										
											2018-05-29 20:50:40 +08:00
										 |  |  | 		} | 
					
						
							|  |  |  | 		if (schema.type === "boolean") { | 
					
						
							| 
									
										
										
										
											2017-10-28 20:15:39 +08:00
										 |  |  | 			return "boolean"; | 
					
						
							| 
									
										
										
										
											2018-05-29 20:50:40 +08:00
										 |  |  | 		} | 
					
						
							|  |  |  | 		if (schema.type === "number") { | 
					
						
							| 
									
										
										
										
											2017-10-28 20:15:39 +08:00
										 |  |  | 			return "number"; | 
					
						
							| 
									
										
										
										
											2018-05-29 20:50:40 +08:00
										 |  |  | 		} | 
					
						
							|  |  |  | 		if (schema.type === "object") { | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +08:00
										 |  |  | 			if (schema.properties) { | 
					
						
							| 
									
										
										
										
											2017-10-28 20:15:39 +08:00
										 |  |  | 				const required = schema.required || []; | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +08:00
										 |  |  | 				return `object { ${Object.keys(schema.properties) | 
					
						
							|  |  |  | 					.map(property => { | 
					
						
							|  |  |  | 						if (!required.includes(property)) return property + "?"; | 
					
						
							|  |  |  | 						return property; | 
					
						
							|  |  |  | 					}) | 
					
						
							| 
									
										
										
										
											2018-03-22 17:54:18 +08:00
										 |  |  | 					.concat(schema.additionalProperties ? ["…"] : []) | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +08:00
										 |  |  | 					.join(", ")} }`;
 | 
					
						
							| 
									
										
										
										
											2017-10-28 20:15:39 +08:00
										 |  |  | 			} | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +08:00
										 |  |  | 			if (schema.additionalProperties) { | 
					
						
							|  |  |  | 				return `object { <key>: ${formatInnerSchema( | 
					
						
							|  |  |  | 					schema.additionalProperties | 
					
						
							|  |  |  | 				)} }`;
 | 
					
						
							| 
									
										
										
										
											2017-10-28 20:15:39 +08:00
										 |  |  | 			} | 
					
						
							|  |  |  | 			return "object"; | 
					
						
							| 
									
										
										
										
											2018-05-29 20:50:40 +08:00
										 |  |  | 		} | 
					
						
							|  |  |  | 		if (schema.type === "array") { | 
					
						
							| 
									
										
										
										
											2017-10-28 20:15:39 +08:00
										 |  |  | 			return `[${formatInnerSchema(schema.items)}]`; | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +08:00
										 |  |  | 		switch (schema.instanceof) { | 
					
						
							| 
									
										
										
										
											2017-10-28 20:15:39 +08:00
										 |  |  | 			case "Function": | 
					
						
							|  |  |  | 				return "function"; | 
					
						
							|  |  |  | 			case "RegExp": | 
					
						
							|  |  |  | 				return "RegExp"; | 
					
						
							|  |  |  | 		} | 
					
						
							| 
									
										
										
										
											2018-05-29 20:50:40 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 		if (schema.$ref) { | 
					
						
							|  |  |  | 			return formatInnerSchema(getSchemaPart(schema.$ref), true); | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 		if (schema.allOf) { | 
					
						
							|  |  |  | 			return schema.allOf.map(formatInnerSchema).join(" & "); | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 		if (schema.oneOf) { | 
					
						
							|  |  |  | 			return schema.oneOf.map(formatInnerSchema).join(" | "); | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 		if (schema.anyOf) { | 
					
						
							|  |  |  | 			return schema.anyOf.map(formatInnerSchema).join(" | "); | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 		if (schema.enum) { | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +08:00
										 |  |  | 			return schema.enum.map(item => JSON.stringify(item)).join(" | "); | 
					
						
							| 
									
										
										
										
											2018-05-29 20:50:40 +08:00
										 |  |  | 		} | 
					
						
							| 
									
										
										
										
											2018-04-08 09:17:23 +08:00
										 |  |  | 		return JSON.stringify(schema, null, 2); | 
					
						
							| 
									
										
										
										
											2017-10-28 20:15:39 +08:00
										 |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-01-05 00:33:49 +08:00
										 |  |  | 	static formatValidationError(err) { | 
					
						
							|  |  |  | 		const dataPath = `configuration${err.dataPath}`; | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +08:00
										 |  |  | 		if (err.keyword === "additionalProperties") { | 
					
						
							|  |  |  | 			const baseMessage = `${dataPath} has an unknown property '${ | 
					
						
							|  |  |  | 				err.params.additionalProperty | 
					
						
							|  |  |  | 			}'. These properties are valid:\n${getSchemaPartText(err.parentSchema)}`;
 | 
					
						
							|  |  |  | 			if (!err.dataPath) { | 
					
						
							|  |  |  | 				switch (err.params.additionalProperty) { | 
					
						
							| 
									
										
										
										
											2016-09-21 15:24:00 +08:00
										 |  |  | 					case "debug": | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +08:00
										 |  |  | 						return ( | 
					
						
							|  |  |  | 							`${baseMessage}\n` + | 
					
						
							| 
									
										
										
										
											2018-03-03 00:05:23 +08:00
										 |  |  | 							"The 'debug' property was removed in webpack 2.0.0.\n" + | 
					
						
							| 
									
										
										
										
											2016-09-21 15:24:00 +08:00
										 |  |  | 							"Loaders should be updated to allow passing this option via loader options in module.rules.\n" + | 
					
						
							|  |  |  | 							"Until loaders are updated one can use the LoaderOptionsPlugin to switch loaders into debug mode:\n" + | 
					
						
							| 
									
										
										
										
											2016-09-28 18:54:46 +08:00
										 |  |  | 							"plugins: [\n" + | 
					
						
							| 
									
										
										
										
											2016-09-21 15:24:00 +08:00
										 |  |  | 							"  new webpack.LoaderOptionsPlugin({\n" + | 
					
						
							|  |  |  | 							"    debug: true\n" + | 
					
						
							|  |  |  | 							"  })\n" + | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +08:00
										 |  |  | 							"]" | 
					
						
							|  |  |  | 						); | 
					
						
							| 
									
										
										
										
											2016-09-21 15:24:00 +08:00
										 |  |  | 				} | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +08:00
										 |  |  | 				return ( | 
					
						
							| 
									
										
										
										
											2018-03-03 00:05:23 +08:00
										 |  |  | 					`${baseMessage}\n` + | 
					
						
							| 
									
										
										
										
											2016-09-21 02:18:52 +08:00
										 |  |  | 					"For typos: please correct them.\n" + | 
					
						
							| 
									
										
										
										
											2018-02-28 04:40:48 +08:00
										 |  |  | 					"For loader options: webpack >= v2.0.0 no longer allows custom properties in configuration.\n" + | 
					
						
							| 
									
										
										
										
											2016-09-21 02:18:52 +08:00
										 |  |  | 					"  Loaders should be updated to allow passing options via loader options in module.rules.\n" + | 
					
						
							|  |  |  | 					"  Until loaders are updated one can use the LoaderOptionsPlugin to pass these options to the loader:\n" + | 
					
						
							| 
									
										
										
										
											2016-09-28 18:54:46 +08:00
										 |  |  | 					"  plugins: [\n" + | 
					
						
							| 
									
										
										
										
											2016-09-21 02:18:52 +08:00
										 |  |  | 					"    new webpack.LoaderOptionsPlugin({\n" + | 
					
						
							| 
									
										
										
										
											2016-09-21 17:26:46 +08:00
										 |  |  | 					"      // test: /\\.xxx$/, // may apply this only for some modules\n" + | 
					
						
							| 
									
										
										
										
											2016-09-21 02:18:52 +08:00
										 |  |  | 					"      options: {\n" + | 
					
						
							| 
									
										
										
										
											2018-03-22 17:54:18 +08:00
										 |  |  | 					`        ${err.params.additionalProperty}: …\n` + | 
					
						
							| 
									
										
										
										
											2016-09-21 02:18:52 +08:00
										 |  |  | 					"      }\n" + | 
					
						
							|  |  |  | 					"    })\n" + | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +08:00
										 |  |  | 					"  ]" | 
					
						
							|  |  |  | 				); | 
					
						
							| 
									
										
										
										
											2016-09-21 02:18:52 +08:00
										 |  |  | 			} | 
					
						
							|  |  |  | 			return baseMessage; | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +08:00
										 |  |  | 		} else if (err.keyword === "oneOf" || err.keyword === "anyOf") { | 
					
						
							|  |  |  | 			if (err.children && err.children.length > 0) { | 
					
						
							|  |  |  | 				if (err.schema.length === 1) { | 
					
						
							| 
									
										
										
										
											2017-11-16 15:59:22 +08:00
										 |  |  | 					const lastChild = err.children[err.children.length - 1]; | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +08:00
										 |  |  | 					const remainingChildren = err.children.slice( | 
					
						
							|  |  |  | 						0, | 
					
						
							|  |  |  | 						err.children.length - 1 | 
					
						
							|  |  |  | 					); | 
					
						
							|  |  |  | 					return WebpackOptionsValidationError.formatValidationError( | 
					
						
							|  |  |  | 						Object.assign({}, lastChild, { | 
					
						
							|  |  |  | 							children: remainingChildren, | 
					
						
							|  |  |  | 							parentSchema: Object.assign( | 
					
						
							|  |  |  | 								{}, | 
					
						
							|  |  |  | 								err.parentSchema, | 
					
						
							|  |  |  | 								lastChild.parentSchema | 
					
						
							|  |  |  | 							) | 
					
						
							|  |  |  | 						}) | 
					
						
							|  |  |  | 					); | 
					
						
							| 
									
										
										
										
											2017-11-16 15:59:22 +08:00
										 |  |  | 				} | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +08:00
										 |  |  | 				return ( | 
					
						
							|  |  |  | 					`${dataPath} should be one of these:\n${getSchemaPartText( | 
					
						
							|  |  |  | 						err.parentSchema | 
					
						
							|  |  |  | 					)}\n` +
 | 
					
						
							|  |  |  | 					`Details:\n${filterChildren(err.children) | 
					
						
							|  |  |  | 						.map( | 
					
						
							|  |  |  | 							err => | 
					
						
							|  |  |  | 								" * " + | 
					
						
							|  |  |  | 								indent( | 
					
						
							|  |  |  | 									WebpackOptionsValidationError.formatValidationError(err), | 
					
						
							|  |  |  | 									"   ", | 
					
						
							|  |  |  | 									false | 
					
						
							|  |  |  | 								) | 
					
						
							|  |  |  | 						) | 
					
						
							|  |  |  | 						.join("\n")}`
 | 
					
						
							|  |  |  | 				); | 
					
						
							| 
									
										
										
										
											2016-12-14 18:34:31 +08:00
										 |  |  | 			} | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +08:00
										 |  |  | 			return `${dataPath} should be one of these:\n${getSchemaPartText( | 
					
						
							|  |  |  | 				err.parentSchema | 
					
						
							|  |  |  | 			)}`;
 | 
					
						
							|  |  |  | 		} else if (err.keyword === "enum") { | 
					
						
							|  |  |  | 			if ( | 
					
						
							|  |  |  | 				err.parentSchema && | 
					
						
							|  |  |  | 				err.parentSchema.enum && | 
					
						
							|  |  |  | 				err.parentSchema.enum.length === 1 | 
					
						
							|  |  |  | 			) { | 
					
						
							| 
									
										
										
										
											2017-10-28 20:15:39 +08:00
										 |  |  | 				return `${dataPath} should be ${getSchemaPartText(err.parentSchema)}`; | 
					
						
							| 
									
										
										
										
											2016-12-14 18:34:31 +08:00
										 |  |  | 			} | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +08:00
										 |  |  | 			return `${dataPath} should be one of these:\n${getSchemaPartText( | 
					
						
							|  |  |  | 				err.parentSchema | 
					
						
							|  |  |  | 			)}`;
 | 
					
						
							|  |  |  | 		} else if (err.keyword === "allOf") { | 
					
						
							| 
									
										
										
										
											2017-10-28 20:15:39 +08:00
										 |  |  | 			return `${dataPath} should be:\n${getSchemaPartText(err.parentSchema)}`; | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +08:00
										 |  |  | 		} else if (err.keyword === "type") { | 
					
						
							|  |  |  | 			switch (err.params.type) { | 
					
						
							| 
									
										
										
										
											2016-09-19 06:54:35 +08:00
										 |  |  | 				case "object": | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +08:00
										 |  |  | 					return `${dataPath} should be an object.${getSchemaPartDescription( | 
					
						
							|  |  |  | 						err.parentSchema | 
					
						
							|  |  |  | 					)}`;
 | 
					
						
							| 
									
										
										
										
											2016-09-19 06:54:35 +08:00
										 |  |  | 				case "string": | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +08:00
										 |  |  | 					return `${dataPath} should be a string.${getSchemaPartDescription( | 
					
						
							|  |  |  | 						err.parentSchema | 
					
						
							|  |  |  | 					)}`;
 | 
					
						
							| 
									
										
										
										
											2016-09-19 06:54:35 +08:00
										 |  |  | 				case "boolean": | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +08:00
										 |  |  | 					return `${dataPath} should be a boolean.${getSchemaPartDescription( | 
					
						
							|  |  |  | 						err.parentSchema | 
					
						
							|  |  |  | 					)}`;
 | 
					
						
							| 
									
										
										
										
											2016-09-19 06:54:35 +08:00
										 |  |  | 				case "number": | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +08:00
										 |  |  | 					return `${dataPath} should be a number.${getSchemaPartDescription( | 
					
						
							|  |  |  | 						err.parentSchema | 
					
						
							|  |  |  | 					)}`;
 | 
					
						
							| 
									
										
										
										
											2016-12-14 18:34:31 +08:00
										 |  |  | 				case "array": | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +08:00
										 |  |  | 					return `${dataPath} should be an array:\n${getSchemaPartText( | 
					
						
							|  |  |  | 						err.parentSchema | 
					
						
							|  |  |  | 					)}`;
 | 
					
						
							| 
									
										
										
										
											2016-09-19 06:54:35 +08:00
										 |  |  | 			} | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +08:00
										 |  |  | 			return `${dataPath} should be ${err.params.type}:\n${getSchemaPartText( | 
					
						
							|  |  |  | 				err.parentSchema | 
					
						
							|  |  |  | 			)}`;
 | 
					
						
							|  |  |  | 		} else if (err.keyword === "instanceof") { | 
					
						
							|  |  |  | 			return `${dataPath} should be an instance of ${getSchemaPartText( | 
					
						
							|  |  |  | 				err.parentSchema | 
					
						
							|  |  |  | 			)}`;
 | 
					
						
							|  |  |  | 		} else if (err.keyword === "required") { | 
					
						
							| 
									
										
										
										
											2017-01-05 00:33:49 +08:00
										 |  |  | 			const missingProperty = err.params.missingProperty.replace(/^\./, ""); | 
					
						
							| 
									
										
										
										
											2018-03-26 22:56:10 +08:00
										 |  |  | 			return `${dataPath} misses the property '${missingProperty}'.\n${getSchemaPartText( | 
					
						
							|  |  |  | 				err.parentSchema, | 
					
						
							|  |  |  | 				["properties", missingProperty] | 
					
						
							|  |  |  | 			)}`;
 | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +08:00
										 |  |  | 		} else if (err.keyword === "minimum") { | 
					
						
							|  |  |  | 			return `${dataPath} ${err.message}.${getSchemaPartDescription( | 
					
						
							|  |  |  | 				err.parentSchema | 
					
						
							|  |  |  | 			)}`;
 | 
					
						
							|  |  |  | 		} else if (err.keyword === "uniqueItems") { | 
					
						
							|  |  |  | 			return `${dataPath} should not contain the item '${ | 
					
						
							|  |  |  | 				err.data[err.params.i] | 
					
						
							|  |  |  | 			}' twice.${getSchemaPartDescription(err.parentSchema)}`;
 | 
					
						
							|  |  |  | 		} else if ( | 
					
						
							|  |  |  | 			err.keyword === "minLength" || | 
					
						
							|  |  |  | 			err.keyword === "minItems" || | 
					
						
							|  |  |  | 			err.keyword === "minProperties" | 
					
						
							|  |  |  | 		) { | 
					
						
							| 
									
										
										
										
											2018-05-29 20:50:40 +08:00
										 |  |  | 			if (err.params.limit === 1) { | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +08:00
										 |  |  | 				return `${dataPath} should not be empty.${getSchemaPartDescription( | 
					
						
							|  |  |  | 					err.parentSchema | 
					
						
							|  |  |  | 				)}`;
 | 
					
						
							| 
									
										
										
										
											2018-05-29 20:50:40 +08:00
										 |  |  | 			} else { | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +08:00
										 |  |  | 				return `${dataPath} ${err.message}${getSchemaPartDescription( | 
					
						
							|  |  |  | 					err.parentSchema | 
					
						
							|  |  |  | 				)}`;
 | 
					
						
							| 
									
										
										
										
											2018-05-29 20:50:40 +08:00
										 |  |  | 			} | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +08:00
										 |  |  | 		} else if (err.keyword === "absolutePath") { | 
					
						
							|  |  |  | 			const baseMessage = `${dataPath}: ${ | 
					
						
							|  |  |  | 				err.message | 
					
						
							|  |  |  | 			}${getSchemaPartDescription(err.parentSchema)}`;
 | 
					
						
							|  |  |  | 			if (dataPath === "configuration.output.filename") { | 
					
						
							|  |  |  | 				return ( | 
					
						
							|  |  |  | 					`${baseMessage}\n` + | 
					
						
							|  |  |  | 					"Please use output.path to specify absolute path and output.filename for the file name." | 
					
						
							|  |  |  | 				); | 
					
						
							| 
									
										
										
										
											2017-03-25 05:21:30 +08:00
										 |  |  | 			} | 
					
						
							|  |  |  | 			return baseMessage; | 
					
						
							| 
									
										
										
										
											2017-01-05 00:33:49 +08:00
										 |  |  | 		} else { | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +08:00
										 |  |  | 			return `${dataPath} ${err.message} (${JSON.stringify( | 
					
						
							|  |  |  | 				err, | 
					
						
							| 
									
										
										
										
											2018-04-08 09:17:23 +08:00
										 |  |  | 				null, | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +08:00
										 |  |  | 				2 | 
					
						
							|  |  |  | 			)}).\n${getSchemaPartText(err.parentSchema)}`;
 | 
					
						
							| 
									
										
										
										
											2016-09-19 06:54:35 +08:00
										 |  |  | 		} | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-01-05 00:33:49 +08:00
										 |  |  | module.exports = WebpackOptionsValidationError; |