import { Optional } from '@core/common/type/CommonTypes'; import { validate, ValidationError } from 'class-validator'; export type ClassValidationDetails = { context: string; errors : ClassValidationErrors[], }; export type ClassValidationErrors = { property: string, message: string[] }; export class ClassValidator { // eslint-disable-next-line @typescript-eslint/ban-types public static async validate<TTarget extends object>(target: TTarget, context?: string): Promise<Optional<ClassValidationDetails>> { let details: Optional<ClassValidationDetails>; const errors: ValidationError[] = await validate(target); if (errors.length > 0) { details = { context: context || target.constructor.name, errors : [] }; for (const error of errors) { details.errors.push({ property: error.property, message : error.constraints ? Object.values(error.constraints) : [] }); } } return details; } }