alamid-schema
Version:
Extendable mongoose-like schemas for node.js and the browser
117 lines (105 loc) • 2.73 kB
JavaScript
;
/**
* Returns a required validator.
*
* @returns {Function}
*/
function requiredValidator() {
return function validateRequired(val) {
return (typeof val !== "undefined" && val !== null && val !== "") || "required";
};
}
/**
* Returns an enum validator.
*
* @param {Array} enumValues
* @returns {Function}
*/
function enumValidator(enumValues) {
return function validateEnum(val) {
return enumValues.indexOf(val) !== -1 || "enum";
};
}
/**
* Returns a min validator.
*
* @param {number} minValue
* @returns {Function}
*/
function minValidator(minValue) {
return function validateMin(val) {
return val >= minValue || "min";
};
}
/**
* Returns a max validator.
*
* @param {number} minValue
* @returns {Function}
*/
function maxValidator(minValue) {
return function validateMax(val) {
return val <= minValue || "max";
};
}
/**
* Returns a minLength validator.
*
* @param {number} minLength
* @returns {Function}
*/
function minLengthValidator(minLength) {
return function validateMinLength(lengthable) {
return lengthable && (lengthable.length >= minLength) || "min-length";
};
}
/**
* Returns a maxLength validator.
*
* @param {number} maxLength
* @returns {Function}
*/
function maxLengthValidators(maxLength) {
return function validateMaxLength(lengthable) {
return lengthable && (lengthable.length <= maxLength) || "max-length";
};
}
/**
* Returns a hasLength validator.
*
* @param {number} hasLength
* @returns {Function}
*/
function hasLengthValidator(hasLength) {
return function validateHasLength(lengthable) {
return lengthable && (lengthable.length === hasLength) || "has-length";
};
}
/**
* Returns true if the given value matches the pattern. The pattern
* may be a value or a regular expression. If it's a value, a strict comparison
* will be performed. In case it's a regex, the test method will be invoked.
*
* @param {*|RegExp} match
* @returns {Function}
*/
function matchesValidator(match) {
return function matchValue(value) {
var result;
if (typeof match.test === "function") {
match.lastIndex = 0; // reset the lastIndex just in case the regexp is accidentally global
result = match.test(value);
} else {
result = match === value;
}
return result || "matches";
};
}
exports.required = requiredValidator;
exports.min = minValidator;
exports.max = maxValidator;
exports.enum = enumValidator;
exports.minLength = minLengthValidator;
exports.maxLength = maxLengthValidators;
exports.hasLength = hasLengthValidator;
exports.matches = matchesValidator;