包详细信息

@anatine/zod-openapi

anatine884.2kMIT2.2.8

Zod to OpenAPI converter

zod, openapi, swagger

自述文件

@anatine/zod-openapi

Converts a Zod schema to an OpenAPI SchemaObject as defined by openapi3-ts


Installation

Both openapi3-ts and zod are peer dependencies instead of dependant packages. While zod is necessary for operation, openapi3-ts is for type-casting.

npm install openapi3-ts zod @anatine/zod-openapi

Usage

Take any Zod schema and convert it to an OpenAPI JSON object

import { generateSchema } from '@anatine/zod-openapi';
const aZodSchema = z.object({
  uid: z.string().nonempty(),
  firstName: z.string().min(2),
  lastName: z.string().optional(),
  email: z.string().email(),
  phoneNumber: z.string().min(10).optional(),
})
const myOpenApiSchema = generateSchema(aZodSchema);
// ...

This will generate an OpenAPI schema for myOpenApiSchema

{
  "type": "object",
  "properties": {
    "uid": {
      "type": "string",
      "minLength": 1
    },
    "firstName": {
      "type": "string",
      "minLength": 2
    },
    "lastName": {
      "type": "string"
    },
    "email": {
      "type": "string",
      "format": "email"
    },
    "phoneNumber": {
      "type": "string",
      "minLength": 10
    }
  },
  "required": [
    "uid",
    "firstName",
    "email"
  ]
}

Extend a Zod schema with additional OpenAPI schema via a function wrapper

import { extendApi, generateSchema } from '@anatine/zod-openapi';
const aZodExtendedSchema = extendApi(
      z.object({
        uid: extendApi(z.string().nonempty(), {
          title: 'Unique ID',
          description: 'A UUID generated by the server',
        }),
        firstName: z.string().min(2),
        lastName: z.string().optional(),
        email: z.string().email(),
        phoneNumber: extendApi(z.string().min(10), {
          description: 'US Phone numbers only',
          example: '555-555-5555',
        }),
      }),
      {
        title: 'User',
        description: 'A user schema',
      }
    );
const myOpenApiSchema = generateSchema(aZodExtendedSchema);
// ...

... or via extension of the Zod schema:

import { extendApi, generateSchema, extendZodWithOpenApi } from '@anatine/zod-openapi';
import {z} from 'zod';

extendZodWithOpenApi(z);

const aZodExtendedSchema = 
      z.object({
        uid: z.string().nonempty().openapi({
          title: 'Unique ID',
          description: 'A UUID generated by the server',
        }),
        firstName: z.string().min(2),
        lastName: z.string().optional(),
        email: z.string().email(),
        phoneNumber: z.string().min(10).openapi({
          description: 'US Phone numbers only',
          example: '555-555-5555',
        }),
      }).openapi(
      {
        title: 'User',
        description: 'A user schema',
      }
    );
const myOpenApiSchema = generateSchema(aZodExtendedSchema);
// ...

This will generate an extended schema:

{
  "type": "object",
  "properties": {
    "uid": {
      "type": "string",
      "minLength": 1,
      "title": "Unique ID",
      "description": "A UUID generated by the server"
    },
    "firstName": {
      "type": "string",
      "minLength": 2
    },
    "lastName": {
      "type": "string"
    },
    "email": {
      "type": "string",
      "format": "email"
    },
    "phoneNumber": {
      "type": "string",
      "minLength": 10,
      "description": "US Phone numbers only",
      "example": "555-555-5555"
    }
  },
  "required": [
    "uid",
    "firstName",
    "email",
    "phoneNumber"
  ],
  "title": "User",
  "description": "A user schema"
}

Credits

  • express-zod-api

    A great lib that provided some insights on dealing with various zod types.

  • zod-dto

    Lib providing insights into using Zod with NestJS


This library is part of a nx monorepo @anatine/zod-plugins.

更新日志

Changelog

This file was generated using @jscutlery/semver.

2.2.8 (2025-04-04)

Bug Fixes

  • Use AnatineSchemaObject in openapi extension method (cbf5985)

2.2.7 (2025-01-20)

2.2.6 (2024-06-21)

2.2.5 (2024-03-20)

2.2.4 (2024-03-19)

2.2.3 (2024-01-23)

Bug Fixes

  • zod-openapi: do not mutate original schema with extendApi (6684ca6)

2.2.2 (2023-12-15)

2.2.1 (2023-10-31)

2.2.0 (2023-08-22)

Features

2.1.0 (2023-08-03)

Features

  • hide definitions purposal (469a22a)

2.0.1 (2023-06-30)

2.0.0 (2023-06-30)

Bug Fixes

1.14.2 (2023-06-16)

1.14.1 (2023-06-16)

1.14.0 (2023-05-23)

Features

  • Dep updates (156b026)
  • zod-openapi: add option to use extension-method on zod (fe26a3e)

1.13.0 (2023-05-13)

Features

  • zod-openapi: add support for branded types (3df8e00)

1.12.1 (2023-04-23)

1.12.0 (2023-01-17)

Features

  • set additionalProperties to false if strict (80c7012)

Bug Fixes

  • zod-openapi: no empty required to conform to OpenApi 3.0 (5d7731e)

1.11.1 (2023-01-01)

1.11.0 (2022-12-12)

Features

Bug Fixes

  • Open API Min/Max length for string and arrays (b780138)

1.10.0 (2022-10-05)

Features

  • Support for Zod describe() in OpenAPI Schema (e743f8d)
  • Support for @Param() in @anatine/zod-nestjs (ba00144)

1.9.8 (2022-08-16)

1.9.7 (2022-08-05)

1.9.6 (2022-07-26)

1.9.5 (2022-07-26)

1.9.4 (2022-07-26)

1.9.3 (2022-07-26)

Bug Fixes

1.9.2 (2022-07-24)

Bug Fixes

  • Missing README after refactor (00ceb10)

1.9.1 (2022-07-24)

1.9.0 (2022-07-24)

Bug Fixes

1.8.0 (2022-07-24)

1.7.0 (2022-07-14)

0.1.1 (2022-07-14)

0.1.0 (2022-07-14)

Bug Fixes

  • Adding in new release githuib actions (29a2455)
  • change regex to pattern to match OpenAPI spec (d65c755)
  • oapi: proper parsing for records (c42b1fd)
  • Update to new code deps (d771c4b)
  • zod-openapi: support unknown record value types (66179d7)

Features

  • add multipleOf for numbers (e0adc46)
  • add format for cuid strings (ee1fd8a)
  • oapi: add array constraints (88987f4)
  • oapi: add support for .passthrough() and ,catchall() in schemas (9c85421)
  • oapi: add support for defaulted schemas (a215b11)
  • openapi: merge metadata (513e0a6)