Blame view

node_modules/webpack/lib/validateSchema.js 1.53 KB
2a09d1a4   liuqimichale   添加宜春 天水 宣化
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
  /*
  	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);
  
  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;