-
Notifications
You must be signed in to change notification settings - Fork 1
/
skmatc.js
87 lines (70 loc) · 3.32 KB
/
skmatc.js
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
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
var _ = require('lodash');
var Validator = require('./Validator.js'),
Result = require('./Result.js'),
Failure = require('./Failure.js');
module.exports = skmatc;
function skmatc (schema) {
/// <summary>Creates a new skmatc validator for the given schema</summary>
/// <param name="schema" type="Object">The schema to validate data against</param>
this.schema = schema;
this.validators = skmatc.validators.map(function(module) { return module(this); }, this);
}
skmatc.Validator = Validator;
skmatc.Result = Result;
skmatc.Failure = Failure;
skmatc.create = Validator.create;
skmatc.scope = function (schema) {
return new skmatc(schema);
};
skmatc.prototype.validate = function(data, path) {
/// <signature>
/// <summary>Validates the given data against this schema</summary>
/// <param name="data" type="Object">The object to validate against this schema</param>
/// <param name="path" type="String" optional="true">The path used as the root for error messages</param>
/// <returns type="Result"/>
/// </signature>
return skmatc.validate(this.validators, this.schema, data, path);
};
skmatc.prototype.register = function(validator) {
/// <signature>
/// <summary>Registers the specified validator with skmatc</summary>
/// <param name="validator" type="Function">The validator module to add to this skmatc instance</param>
/// </signature>
/// <signature>
/// <summary>Registers the specified validator with skmatc</summary>
/// <param name="validator" type="Validator">The validator to add to this skmatc instance</param>
/// </signature>
if(validator instanceof Validator)
this.validators.push(validator);
else this.validators.push(validator(this));
};
skmatc.validate = function(validators, schema, data, path) {
/// <summary>Validates the given data against the provided schema</summary>
/// <param name="validators" type="Array" elementType="Validator">The validators to use</param>
/// <param name="schema" type="Mixed">The schema against which to validate</param>
/// <param name="data" type="Object">The object to validate against the provided schema</param>
/// <param name="path" type="String" optional="true">The path used as the root for error messages</param>
/// <returns type="Result"/>
for(var i = 0; i < validators.length; i++) {
if(validators[i].handles(schema)) {
var result = new Result(validators[i].validate(schema, data, path));
return result;
}
}
return new Result();
};
skmatc.register = function(validator) {
/// <summary>Registers the specified validator with skmatc</summary>
/// <param name="validator" type="Function">The validator module to add to skmatc</param>
if(validator instanceof Validator) throw new Error('Expected a validator module for global inclusion');
skmatc.validators.push(validator);
};
/// <var type="Array" elementValue="Validator.module(null, null)">Global validators to be used by skmatc instances in order of precidence</var>
skmatc.validators = [
require('./Validators/ControlWrapper.js'),
require('./Validators/BasicValidator.js'),
require('./Validators/ObjectValidator.js'),
require('./Validators/ArrayValidator.js'),
require('./Validators/TypeValidators.js'),
require('./Validators/RegExValidator.js')
];