importFastifyfrom"fastify";import{serializerCompiler,validatorCompiler,ZodTypeProvider}from"fastify-type-provider-zod";importzfrom"zod";constapp=Fastify()// Add schema validator and serializerapp.setValidatorCompiler(validatorCompiler);app.setSerializerCompiler(serializerCompiler);app.withTypeProvider<ZodTypeProvider>().route({method: "GET",url: "/",// Define your schemaschema: {querystring: z.object({name: z.string().min(4),}),response: {200: z.string(),},},handler: (req,res)=>{res.send(req.query.name);},});app.listen({port: 4949});
How to use together with @fastify/swagger
import{jsonSchemaTransform,createJsonSchemaTransform,serializerCompiler,validatorCompiler,ZodTypeProvider,}from'fastify-type-provider-zod';constapp=Fastify();app.setValidatorCompiler(validatorCompiler);app.setSerializerCompiler(serializerCompiler);app.register(fastifySwagger,{exposeRoute: true,openapi: {info: {title: 'SampleApi',description: 'Sample backend service',version: '1.0.0',},servers: [],},transform: jsonSchemaTransform,// You can also create transform with custom skiplist of endpoints that should not be included in the specification://// transform: createJsonSchemaTransform({// skipList: [ '/documentation/static/*' ]// })});constLOGIN_SCHEMA=z.object({username: z.string().max(32).describe('someDescription'),password: z.string().max(32),});app.after(()=>{app.withTypeProvider<ZodTypeProvider>().route({method: 'POST',url: '/login',schema: {body: LOGIN_SCHEMA},handler: (req,res)=>{res.send('ok');},});});awaitapp.ready();