import { isBase64, registerDecorator, ValidationArguments, ValidationOptions, ValidatorConstraint, ValidatorConstraintInterface } from 'class-validator'; export function MaxImageBase64ByteSize(max:number,validationOptions?: ValidationOptions) { return (object: any, propertyName: string) => { registerDecorator({ target: object.constructor, propertyName, options: validationOptions, // ` (${Math.ceil(validationOptions.context.value.length *(3/4)/1024)}/${max/1024} kB)` constraints: [max, max/1024], validator: MaxImageBase64ByteSizeConstraint, }); }; } @ValidatorConstraint({ name: 'MaxImageBase64ByteSize' }) export class MaxImageBase64ByteSizeConstraint implements ValidatorConstraintInterface { validate(value: any, validationArguments: ValidationArguments) { if (value === undefined || value === "" || value === null){ return true } else if (typeof value == "string" && Math.ceil(value.length *(3/4)) <= validationArguments.constraints[0]){ // tính theo byte return true } else { return false } } defaultMessage(validationArguments?: ValidationArguments): string { return ` (${Math.ceil(validationArguments.value.length *(3/4)/1024)}/${validationArguments.constraints[0]/1024} kB)` // return "{"+validationArguments.property + "} " + "response.message.phoneFormatIsWrong } }