mirror of https://github.com/webpack/webpack.git
				
				
				
			
		
			
				
	
	
		
			66 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
			
		
		
	
	
			66 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
| /*
 | |
| 	MIT License http://www.opensource.org/licenses/mit-license.php
 | |
| 	Author Gajus Kuizinas @gajus
 | |
| */
 | |
| "use strict";
 | |
| 
 | |
| const Ajv = require("ajv");
 | |
| const ajv = new Ajv({
 | |
| 	errorDataPath: "configuration",
 | |
| 	allErrors: true,
 | |
| 	verbose: true
 | |
| });
 | |
| require("ajv-keywords")(ajv, ["instanceof"]);
 | |
| 
 | |
| function validateSchema(schema, options) {
 | |
| 	if(Array.isArray(options)) {
 | |
| 		const errors = options.map((options) => validateObject(schema, options));
 | |
| 		errors.forEach((list, idx) => {
 | |
| 			list.forEach(function applyPrefix(err) {
 | |
| 				err.dataPath = `[${idx}]${err.dataPath}`;
 | |
| 				if(err.children) {
 | |
| 					err.children.forEach(applyPrefix);
 | |
| 				}
 | |
| 			});
 | |
| 		});
 | |
| 		return errors.reduce((arr, items) => {
 | |
| 			return arr.concat(items);
 | |
| 		}, []);
 | |
| 	} else {
 | |
| 		return validateObject(schema, options);
 | |
| 	}
 | |
| }
 | |
| 
 | |
| function validateObject(schema, options) {
 | |
| 	const validate = ajv.compile(schema);
 | |
| 	const valid = validate(options);
 | |
| 	return valid ? [] : filterErrors(validate.errors);
 | |
| }
 | |
| 
 | |
| function filterErrors(errors) {
 | |
| 	let newErrors = [];
 | |
| 	errors.forEach((err) => {
 | |
| 		const dataPath = err.dataPath;
 | |
| 		let children = [];
 | |
| 		newErrors = newErrors.filter((oldError) => {
 | |
| 			if(oldError.dataPath.includes(dataPath)) {
 | |
| 				if(oldError.children) {
 | |
| 					children = children.concat(oldError.children.slice(0));
 | |
| 				}
 | |
| 				oldError.children = undefined;
 | |
| 				children.push(oldError);
 | |
| 				return false;
 | |
| 			}
 | |
| 			return true;
 | |
| 		});
 | |
| 		if(children.length) {
 | |
| 			err.children = children;
 | |
| 		}
 | |
| 		newErrors.push(err);
 | |
| 	});
 | |
| 
 | |
| 	return newErrors;
 | |
| }
 | |
| 
 | |
| module.exports = validateSchema;
 |