salix/client/core/src/lib/validator.js

99 lines
3.0 KiB
JavaScript
Raw Normal View History

2017-02-02 12:17:30 +00:00
import {validator} from 'vendor';
export const validators = {
2018-01-02 07:05:50 +00:00
presence: value => {
if (validator.isEmpty(value ? String(value) : ''))
2017-02-02 12:17:30 +00:00
throw new Error(`Value can't be empty`);
},
absence: value => {
if (!validator.isEmpty(value))
2017-02-02 12:17:30 +00:00
throw new Error(`Value should be empty`);
},
length: (value, conf) => {
2017-02-02 12:17:30 +00:00
let options = {
min: conf.min || conf.is,
max: conf.max || conf.is
};
let val = value ? String(value) : '';
2018-01-10 07:07:40 +00:00
if (!validator.isLength(val, options)) {
if (conf.is) {
2017-02-02 12:17:30 +00:00
throw new Error(`Value should be ${conf.is} characters long`);
} else if (conf.min && conf.max) {
2017-02-02 12:17:30 +00:00
throw new Error(`Value should have a length between ${conf.min} and ${conf.max}`);
} else if (conf.min) {
2017-05-26 11:14:47 +00:00
throw new Error(`Value should have at least ${conf.min} characters`);
} else {
throw new Error(`Value should have at most ${conf.max} characters`);
}
2017-02-02 12:17:30 +00:00
}
},
numericality: (value, conf) => {
if (conf.int) {
if (!validator.isInt(value))
2017-02-02 12:17:30 +00:00
throw new Error(`Value should be integer`);
} else if (!validator.isNumeric(value))
throw new Error(`Value should be a number`);
2017-02-02 12:17:30 +00:00
},
inclusion: (value, conf) => {
if (!validator.isIn(value, conf.in))
2017-02-02 12:17:30 +00:00
throw new Error(`Invalid value`);
},
exclusion: (value, conf) => {
if (validator.isIn(value, conf.in))
2017-02-02 12:17:30 +00:00
throw new Error(`Invalid value`);
},
format: (value, conf) => {
if (!validator.matches(value, conf.with))
2017-02-02 12:17:30 +00:00
throw new Error(`Invalid value`);
},
custom: (value, conf) => {
if (!conf.bindedFunction(value))
2017-02-02 12:17:30 +00:00
throw new Error(`Invalid value`);
}
2017-02-02 12:17:30 +00:00
};
2017-03-07 12:01:24 +00:00
/**
* Checks if value satisfies a set of validations.
*
* @param {*} value The value
* @param {Array} validations Array with validations
*/
export function validateAll(value, validations) {
for (let conf of validations)
validate(value, conf);
}
2017-03-07 12:01:24 +00:00
/**
* Checks if value satisfies a validation.
*
* @param {*} value The value
* @param {Object} conf The validation configuration
*/
export function validate(value, conf) {
let validator = validators[conf.validation];
try {
2018-02-27 21:50:14 +00:00
let isEmpty = value == null || value === '';
2017-05-26 11:14:47 +00:00
2018-02-27 21:50:14 +00:00
if (isEmpty)
checkNull(value, conf);
if (validator && (!isEmpty || conf.validation == 'presence'))
2017-05-26 11:14:47 +00:00
validator(value, conf);
} catch (e) {
let message = conf.message ? conf.message : e.message;
throw new Error(message);
}
}
/**
2017-05-26 15:05:33 +00:00
* Checks if value satisfies a blank or not null validation.
*
2017-03-07 12:01:24 +00:00
* @param {*} value The value
* @param {Object} conf The validation configuration
*/
export function checkNull(value, conf) {
2017-05-26 15:05:33 +00:00
if (conf.allowBlank === false && value === '')
throw new Error(`Value can't be blank`);
2017-05-26 15:05:33 +00:00
else if (conf.allowNull === false && value == null)
throw new Error(`Value can't be null`);
}