Skip to content

Latest commit

 

History

History
80 lines (61 loc) · 2.12 KB

README.md

File metadata and controls

80 lines (61 loc) · 2.12 KB

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';

let dereferencedOpenAPIDocument = await getDereferencedOpenAPIDocument(
  import.meta.url,
  '../fixtures/base-schema.yml'
);

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);