3.1.2 • Published 10 months ago

@bram-dc/fastify-type-provider-zod v3.1.2

Weekly downloads
-
License
MIT
Repository
github
Last release
10 months ago

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

NPM Version NPM Downloads Build Status

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);
    },
  });
};
3.1.2

10 months ago

3.1.1

10 months ago

3.1.0

10 months ago

3.0.0

10 months ago