58 lines
1.9 KiB
JavaScript
58 lines
1.9 KiB
JavaScript
"use strict";
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.validateModel = exports.validateIdProperty = exports.validate = void 0;
|
|
const validation_types_1 = require("./validation_types");
|
|
function validate(data, reqs) {
|
|
let validatedData = {};
|
|
Object.entries(reqs).forEach(([prop, rule]) => {
|
|
const [valid, value] = applyRule(data[prop], rule);
|
|
if (valid) {
|
|
validatedData[prop] = value;
|
|
}
|
|
else {
|
|
throw new validation_types_1.ValidationError(prop, "Validation Error");
|
|
}
|
|
});
|
|
return validatedData;
|
|
}
|
|
exports.validate = validate;
|
|
function applyRule(val, rule) {
|
|
const required = Array.isArray(rule) ? true : rule.required;
|
|
const checks = Array.isArray(rule) ? rule : rule.validation;
|
|
const convert = Array.isArray(rule) ? (v) => v : rule.converter;
|
|
if (val === null || val == undefined || val === "") {
|
|
return [required ? false : true, val];
|
|
}
|
|
let valid = true;
|
|
checks.forEach(check => {
|
|
if (!check(val)) {
|
|
valid = false;
|
|
}
|
|
});
|
|
return [valid, convert ? convert(val) : val];
|
|
}
|
|
function validateIdProperty(val, v) {
|
|
if (v.keyValidator) {
|
|
const [valid, value] = applyRule(val, v.keyValidator);
|
|
if (valid) {
|
|
return value;
|
|
}
|
|
throw new validation_types_1.ValidationError("ID", "Validation Error");
|
|
}
|
|
return val;
|
|
}
|
|
exports.validateIdProperty = validateIdProperty;
|
|
function validateModel(model, rules) {
|
|
if (rules.propertyRules) {
|
|
model = validate(model, rules.propertyRules);
|
|
}
|
|
if (rules.modelRule) {
|
|
const [valid, data] = applyRule(model, rules.modelRule);
|
|
if (valid) {
|
|
return data;
|
|
}
|
|
throw new validation_types_1.ValidationError("Model", "Validation Error");
|
|
}
|
|
}
|
|
exports.validateModel = validateModel;
|