Important: This documentation covers Yarn 1 (Classic).
For Yarn 2+ docs and migration guide, see yarnpkg.com.

Package detail

@adaptate/utils

p10ns11y15MIT1.0.0-alpha.2TypeScript support: included

Dynamic and Adaptable Model Validator Using Zod, Interoperable with OpenAPI

Zod, OpenAPI, Schema Validation, JSON Schema, TypeScript, Dynamic Validation, Conditional Requirements, React Hooks, Data Validation, API Integration, Model Validator, Schema Transformation, Runtime Validation, Component Props Validation, Business Data Abstraction

readme

Installation

To install the library, use npm or yarn:

npm install @adaptate/utils
# or
yarn add @adaptate/utils

Generate zod schemas from existing OpenAPI spec

Spec parser that takes care of the usage of $ref.

import { getDereferencedOpenAPIDocument } from '@adaptate/utils';

// from local disk
let dereferencedOpenAPIDocument = await getDereferencedOpenAPIDocument({
  location: 'filesystem',
  callSiteURL: import.meta.url,
  relativePathToSpecFile: '../fixtures/base-schema.yml',
});

// or from web

let dereferencedOpenAPIDocument = await getDereferencedOpenAPIDocument({
  location: 'web',
  webURL: 'https://api.apis.guru/v2/specs/googleapis.com/books/v1/openapi.yaml',
});

for (let [name, schema] of Object.entries(
  dereferencedOpenAPIDocument.components.schemas
)) {
  // Generate zod schema
  let zodSchema = openAPISchemaToZod(schema);
  // write zodSchema to .ts or .d.ts modules
}

use json-schema-to-zod and $ref is already expanded by getDereferencedOpenAPIDocument and you can skip this part

for (let [name, schema] of Object.entries(
  dereferencedOpenAPIDocument.components.schemas
)) {
  // Generate zod schema module for each schema
  jsonSchemaToZod(schema, {
    name,
    module: 'esm',
    type: true,
  });
}

Converting OpenAPI Schema to Zod Schema (most commonly needed)

The utility is in the early stage and not one to one. For complete and advanced use cases check json-schema-to-zod

import { incomplete_openAPISchemaToZod } from '@adaptate/utils';

const openAPISchema = {
  type: 'object',
  required: ['age'],
  properties: {
    name: { type: 'string' },
    age: { type: 'number' },
  },
};

const zodSchema = incomplete_openAPISchemaToZod(openAPISchema);

Converting Zod Schema to OpenAPI Schema

The utility is in the early stage and not one to one. For complete and advanced use cases check zod-to-json-schema

import { z } from 'zod';
import { incomplete_zodToOpenAPISchema } from '@adaptate/utils';

const zodSchema = z.object({
  name: z.string(),
  age: z.number(),
});

const openAPISchema = incomplete_zodToOpenAPISchema(zodSchema);