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.
29 lines (20 loc) • 812 B
text/typescript
import { ValidatorFn } from "../types/types";
export interface ValidationMap {
[propertyKey: string]: ValidatorFn[];
}
const validationMetadata = new Map<string, ValidatorFn[]>();
function getValidationKey(target: any, key: string): string {
const constructor = typeof target === "function" ? target.name : target.constructor.name;
return `${constructor}.${key}`;
}
export function registerValidation(target: any, key: string, validator: ValidatorFn) {
const propertyKey = getValidationKey(target, key);
if (!validationMetadata.has(propertyKey)) {
validationMetadata.set(propertyKey, []);
}
const validators = validationMetadata.get(propertyKey)!;
if (!validators.includes(validator)) {
validators.push(validator);
}
}
export { validationMetadata };