1 | import { getIn, setInMutable } from "@radial/helpers";
|
2 | var setIn = setInMutable;
|
3 | var ValidationException = (function () {
|
4 | function ValidationException(errors) {
|
5 | this.errors = errors;
|
6 | }
|
7 | return ValidationException;
|
8 | }());
|
9 | export { ValidationException };
|
10 | function validateValue(value, path, validators, data) {
|
11 | var result = validators.map(function (validator) {
|
12 | var isNil = value === undefined || value === null || value === NaN;
|
13 | if (isNil && validator['allowNil'] !== true)
|
14 | return Promise.resolve();
|
15 | return Promise.resolve(validator(value, path, data, {}));
|
16 | });
|
17 | return Promise.all(result).then(function (errors) {
|
18 | return errors.filter(function (error) {
|
19 | return error !== undefined && error !== null;
|
20 | });
|
21 | }).then(function (err) {
|
22 | return err.length == 0 ? Promise.resolve() : Promise.reject(err);
|
23 | });
|
24 | }
|
25 | export function validate(data, rules) {
|
26 | if (data === void 0) { data = {}; }
|
27 | if (rules === void 0) { rules = {}; }
|
28 | if (Array.isArray(rules)) {
|
29 | return validateValue(data, '', rules, data).then(function () {
|
30 | return null;
|
31 | })
|
32 | .catch(function (err) {
|
33 | return Promise.reject(new ValidationException(err));
|
34 | });
|
35 | }
|
36 | var errors = {};
|
37 | var results = Object.keys(rules).map(function (key) {
|
38 | var val = getIn(data, key);
|
39 | return validateValue(val, key, rules[key], data).catch(function (err) {
|
40 | setIn(errors, key, err);
|
41 | });
|
42 | });
|
43 | return new Promise(function (resolve, reject) {
|
44 | Promise.all(results).then(function () {
|
45 | if (Object.keys(errors).length == 0) {
|
46 | return resolve();
|
47 | }
|
48 | reject(new ValidationException(errors));
|
49 | });
|
50 | });
|
51 | }
|