@bram-dc/fastify-type-provider-zod
v3.1.2
Published
Zod Type Provider for Fastify@5
Downloads
11
Readme
Please use the original package fastify-type-provider-zod
This repository is no longer maintained since all the changed have been merged into the original package.
Fastify Type Provider Zod
How to use?
import Fastify from "fastify";
import { ZodSerializerCompiler, ZodValidatorCompiler, ZodTypeProvider } from "@bram-dc/fastify-type-provider-zod";
import z from "zod";
const app = Fastify()
// Add schema validator and serializer
app.setValidatorCompiler(ZodValidatorCompiler);
app.setSerializerCompiler(ZodSerializerCompiler);
app.withTypeProvider<ZodTypeProvider>().route({
method: "GET",
url: "/",
// Define your schema
schema: {
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 fastify from "fastify";
import fastifySwagger from "@fastify/swagger";
import fastifySwaggerUI from "@fastify/swagger-ui";
import { z } from "zod";
import {
jsonSchemaTransform,
createJsonSchemaTransform,
ZodSerializerCompiler,
ZodValidatorCompiler,
ZodTypeProvider,
} from "@bram-dc/fastify-type-provider-zod";
const app = fastify();
app.setValidatorCompiler(ZodValidatorCompiler);
app.setSerializerCompiler(ZodSerializerCompiler);
app.register(fastifySwagger, {
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/*" ]
// })
// In order to create refs to the schemas, you need to provide the schemas to the transformObject using createJsonSchemaTransformObject
//
// transformObject: createJsonSchemaTransformObject({
// schemas: {
// User: z.object({
// id: z.string(),
// name: z.string(),
// }),
// }
// }),
});
app.register(fastifySwaggerUI, {
routePrefix: "/documentation",
});
const LOGIN_SCHEMA = z.object({
username: z.string().max(32).describe("Some description for username"),
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");
},
});
});
async function run() {
await app.ready();
await app.listen({
port: 4949,
});
console.log(`Documentation running at http://localhost:4949/documentation`);
}
run();
How to create a plugin?
import { z } from "zod";
import { FastifyPluginAsyncZod } from "@bram-dc/fastify-type-provider-zod";
const plugin: FastifyPluginAsyncZod = async function (fastify, _opts) {
fastify.route({
method: "GET",
url: "/",
// Define your schema
schema: {
querystring: z.object({
name: z.string().min(4),
}),
response: {
200: z.string(),
},
},
handler: (req, res) => {
res.send(req.query.name);
},
});
};