import { BadRequestException, PipeTransform } from '@nestjs/common'; import { isDefined, isEnum } from 'class-validator'; export class ValidateEnumPipe implements PipeTransform | string | string[]> { constructor(private enumEntity: any) {} transform(value: string): Promise | string | string[] { const validateEnum = (enumValue) => { if (isDefined(enumValue)) { if (isEnum(enumValue, this.enumEntity)) { return this.enumEntity[enumValue]; } else { const errorMessage = `the value ${enumValue} is not valid. See the acceptable values: ${Object.keys( this.enumEntity, ).map((key) => this.enumEntity[key])}`; throw new BadRequestException(errorMessage); } } else { return value; } }; if (Array.isArray(value)) { return value.map((item) => validateEnum(item)); } else { return validateEnum(value); } } }