| 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;
 
 
  |