UNPKG

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
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); }); }