@zodec/core
v0.0.8
Published
Generate Zod schemas using TypeScript decorators. Define validation inline with class definitions - combining Zod's power with decorator syntax.
Maintainers
Keywords
Readme
@zodec/core
zod + decorator
zodec = zod[functional-schema] ++ class-validator[clean-declarative-style]
Define schemas inline within the class definitions
A TypeScript library that generates model schemas(zod) using decorators. and keep validation logic close to your models.
Installation
npm install @zodec/core zod reflect-metadataUsage
Basic Example: Pizza Schema
Decorate the class attributes with @zatt decorators to automatically generate a Zod schema:
import "reflect-metadata";
import { z } from "zod";
import { zatt, Zodec } from "@zodec/core";
class Pizza {
@zatt(z.string())
name: string;
@zatt(z.number().positive())
price: number;
@zatt(z.array(z.string()))
toppings: string[];
@zatt(z.boolean().optional())
isVeg?: boolean;
}
// Get the generated schema
const pizzaSchema = Zodec.of(Pizza);
// Validate data
const result = pizzaSchema.parse({
name: "Margherita",
price: 12.99,
toppings: ["mozzarella", "tomato", "basil"],
isVeg: false
});Decorators
@zclass(zodSchema)
Apply a pre-made Zod schema object to an entire class. Use this when you've already created a complete schema elsewhere:
const myClassSchema = z.object({
name: z.string(),
age: z.number()
});
@zclass(myClassSchema)
class MyClass {
}@zatt(zodSchema)
Decorate individual class properties with their Zod schemas. Each property gets its own validation rules:
class Product {
@zatt(z.string().min(1))
name: string;
@zatt(z.number().positive())
price: number;
}Getting the Schema
Use Zodec.of() to retrieve the generated schema:
const schema = Zodec.of(Pizza);
if(schema){
const validated = schema.parse(data);
}⚠️ This library requires
reflect-metadatato be imported once in your app entry point.
Benefits
- Type-safe: Leverages TypeScript types alongside Zod validation
- Declarative: Define schemas inline with your class definitions
- Reusable: Generate schemas once, validate multiple times
- Composable: Nest objects and arrays with full Zod support
