@zodec/nest
v0.2.1
Published
NestJS adapter for @zodec/core - Zod-powered validation with decorators. Drop-in replacement for class-validator with ValidationPipe.
Maintainers
Readme
@zodec/nest
NestJS adapter for @zodec/core.
Plug
@zodec/coreschemas directly into NestJS — one pipe, all groups, full validation.
npm install @zodec/nest @zodec/core zod reflect-metadataWhat this package adds
@zodec/core handles schema definition — groups, inheritance, composition, MCP.@zodec/nest bridges it into NestJS:
ZodecValidationPipe— validates request bodies against@zatt/@zclassschemas- Group-aware — pass
{ group: 'create' }to validate the right schema per route ZodecValidationPipe.fac()— factory method for inline pipe configuration- Transform support — returns class instances on success (
transform: true) - Structured errors — throws
BadRequestExceptionwithz.treeifyError()output
Quick Start
import { zatt, Zodec, ZODEC__GROUPS } from '@zodec/core';
import { ZodecValidationPipe } from '@zodec/nest';
import { z } from 'zod';
export class UserDto {
@zatt(z.string().email(), { groups: [ZODEC__GROUPS.CREATE] })
email: string;
@zatt(z.string().min(8), { groups: [ZODEC__GROUPS.CREATE] })
password: string;
@zatt(z.string().min(2))
username: string;
}
@Post()
@UsePipes(ZodecValidationPipe.fac({ group: 'create' }))
create(@Body() dto: UserDto) { ... }
@Patch(':id')
@UsePipes(ZodecValidationPipe.fac({ group: 'update' }))
update(@Body() dto: UserDto) { ... }Pipe Usage
import { ZodecValidationPipe } from '@zodec/nest';
// Global — default group on every request body
app.useGlobalPipes(ZodecValidationPipe.fac());
// Per-route — group-specific
@UsePipes(ZodecValidationPipe.fac({ group: 'create' }))
// With transform — returns class instance
@UsePipes(ZodecValidationPipe.fac({ group: 'create', transform: true }))
// Inline on @Body
@Body(ZodecValidationPipe.fac({ group: 'create' })) dto: UserDtoError Format
{
"success": false,
"message": "Validation failed",
"errors": { "email": { "_errors": ["Invalid email"] } }
}Setup
// tsconfig.json
{
"compilerOptions": {
"experimentalDecorators": true,
"emitDecoratorMetadata": true
}
}// main.ts
import 'reflect-metadata'; // must be first importRelated
- @zodec/core — decorators, groups, inheritance, schema composition
- zod — underlying schema engine
MIT · @zodec/nest v0.1.0 · NestJS v11 · Zod v4
