import { plainToClass } from 'class-transformer'; import { sanitize } from 'class-sanitizer'; import { validate as classValidate, validateSync as classValidateSync, } from 'class-validator'; import { ValidationException } from './validation.exception'; import { ClassType } from 'class-transformer/ClassTransformer'; /** * Validate value for validator * @param {ClassType} validation * @param {object} value * @return {Promise} */ export const validate = async ( validation: ClassType, value: object, ): Promise => { // Transform to class const entity = plainToClass(validation, value); // Sanitize sanitize(entity); // Validate const errors = await classValidate(entity, { skipMissingProperties: true, whitelist: true, }); if (errors.length > 0) { throw new ValidationException(errors); } return entity; }; /** * Validate value for validator without async validators * @param {ClassType} validation * @param {object} value * @return {T} */ export const validateSync = (validation: ClassType, value: object): T => { // Transform to class const entity = plainToClass(validation, value); // Sanitize sanitize(entity); // Validate const errors = classValidateSync(entity, { skipMissingProperties: true, whitelist: true, }); if (errors.length > 0) throw new ValidationException(errors); return entity; };