| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667 | /*	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"]);require("../schemas/ajv.absolutePath")(ajv);const validateSchema = (schema, options) => {	if (Array.isArray(options)) {		const errors = options.map(options => validateObject(schema, options));		errors.forEach((list, idx) => {			const applyPrefix = err => {				err.dataPath = `[${idx}]${err.dataPath}`;				if (err.children) {					err.children.forEach(applyPrefix);				}			};			list.forEach(applyPrefix);		});		return errors.reduce((arr, items) => {			return arr.concat(items);		}, []);	} else {		return validateObject(schema, options);	}};const validateObject = (schema, options) => {	const validate = ajv.compile(schema);	const valid = validate(options);	return valid ? [] : filterErrors(validate.errors);};const filterErrors = errors => {	let newErrors = [];	for (const err of errors) {		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;
 |