decoval
Version:
DecoVal is a decorator-driven validation pattern that allows you to add validation rules directly to the properties of TypeScript classes, simplifying data control and increasing code readability and reusability.
31 lines (30 loc) • 1.16 kB
JavaScript
import { ValidationSkipError } from "./error/validation.SkipError";
import { validationMetadata } from "./register.validation";
export function decoValidation(instance) {
return new Promise((resolve, reject) => {
const errors = {};
const constructorName = instance.constructor.name;
for (const key of Object.keys(instance)) {
const propertyKey = `${constructorName}.${key}`;
const value = instance[key];
const validators = validationMetadata.get(propertyKey);
if (!validators)
continue;
try {
for (const validate of validators) {
validate(value);
}
}
catch (err) {
if (err instanceof ValidationSkipError) {
continue;
}
const message = err instanceof Error ? err.message : String(err);
if (!errors[key])
errors[key] = [];
errors[key].push(message);
}
}
Object.keys(errors).length > 0 ? reject(errors) : resolve(instance);
});
}