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; } }