Validador de classe de erro personalizado Nestjs

import { PipeTransform, Injectable, ArgumentMetadata, BadRequestException } from '@nestjs/common'
import { validate } from 'class-validator'
import { plainToClass } from 'class-transformer'

import { apiResponse } from '@helpers/helper.apiResponse'

@Injectable()
export class ValidationPipe implements PipeTransform<any> {
	async transform(value: any, { metatype }: ArgumentMetadata) {
		if (!metatype || !this.toValidate(metatype)) {
			return value
		}

		const object = plainToClass(metatype, value)
		const errors = await validate(object)

		if (errors.length > 0) {
			const errorsResponse: any = errors.map((val: any) => {
				return apiResponse(400, Object.values(val.constraints)[0] as string)
			})
			throw new BadRequestException({ errors: errorsResponse })
		}
		return value
	}

	private toValidate(metatype: Function): boolean {
		const types: Function[] = [String, Boolean, Number, Array, Object]
		return !types.includes(metatype)
	}
}
Restu Wahyu Saputra