17 lines
632 B
TypeScript
17 lines
632 B
TypeScript
import { PipeTransform, Injectable, ArgumentMetadata } from '@nestjs/common';
|
|
import { ZodSchema } from 'zod';
|
|
import { ApiError } from '../errors/api-error';
|
|
|
|
@Injectable()
|
|
export class ZodValidationPipe implements PipeTransform {
|
|
constructor(private readonly schema: ZodSchema) {}
|
|
|
|
transform(value: any, _metadata: ArgumentMetadata): any {
|
|
const parsed = this.schema.safeParse(value);
|
|
if (!parsed.success) {
|
|
const details = parsed.error.issues.map((i) => ({ path: i.path.join('.'), message: i.message }));
|
|
throw ApiError.validation('Request validation failed', details);
|
|
}
|
|
return parsed.data;
|
|
}
|
|
} |