Integrate Valibot and Zod with TypeBox
npm install @sinclair/typebox-adapterIntegrate Valibot and Zod with TypeBox
bash
$ npm install @sinclair/typebox-adapter --save
`
Example
TypeBox Adapter converts Valibot and Zod Types into TypeBox compatible schematics
TypeScript Example
`typescript
import { Box } from '@sinclair/typebox-adapter'
import * as v from 'valibot'
import * as z from 'zod'
// Valibot to TypeBox (Runtime)
const V = Box(v.object({ // const V = {
x: v.number(), // type: 'object',
y: v.number(), // required: ['x', 'y', 'z'],
z: v.number() // properties: {
})) // x: { type: 'number' },
// y: { type: 'number' },
// z: { type: 'number' }
// }
// }
// Zod to TypeBox (Static)
const Z = Box(z.object({ // const Z: TObject<{
a: z.string(), // a: TString,
b: z.string(), // b: TString,
c: z.string() // c: TString
})) // }>
`
Overview
TypeBox Adapter converts Zod and Valibot types into TypeBox schematics (Json Schema). It performs a deep structural remapping of the types provided by these libraries into TypeScript-aligned Json Schema, enabling integration with industry-standard validators like Ajv and OpenAPI-related technologies, while also facilitating interoperability and acceleration via the TypeBox validation infrastructure.
License MIT
Contents
- Install
- Overview
- Usage
- Valibot
- Zod
- Benchmark
- Contribute
Usage
TypeBox Adapter provides a singular Box function to transform Valibot and Zod types into TypeBox schematics. The top-level export is capable of transforming both Valibot and Zod, but you should use the appropriate submodule depending on which library you are using.
$3
Use the /valibot submodule if you only have Valibot installed. Refer to the Valibot documentation for more information on this type library.
`typescript
import { Box } from '@sinclair/typebox-adapter/valibot' // Transform Valibot Only
import * as v from 'valibot'
const T = Box(v.string()) // const T = { type: 'string' }
`
$3
Use the /zod submodule if you only have Zod installed. Refer to the Zod documentation for more information on this type library.
`typescript
import { Box } from '@sinclair/typebox-adapter/zod' // Transform Zod Only
import * as z from 'zod'
const T = Box(z.string()) // const T = { type: 'string' }
`
Benchmark
This project manages a benchmark that evaluates type-check performance using Zod, Valibot, and TypeBox validators. The benchmark is set up to run 10 million check operations per library-validator pairing and reports the elapsed time taken to complete.
$3
Benchmarks are run for the following type.
`typescript
type T = { x: number, y: string, z: boolean }
`
$3
Results show validate performance for the type.
`typescript
┌─────────┬────────────────┬────────────────────┬────────────┬────────────┐
│ (index) │ library │ using │ iterations │ elapsed │
├─────────┼────────────────┼────────────────────┼────────────┼────────────┤
│ 0 │ 'valibot ' │ 'valibot ' │ 10000000 │ '1534 ms ' │
│ 1 │ 'valibot ' │ 'typebox:value ' │ 10000000 │ '1377 ms ' │
│ 2 │ 'valibot ' │ 'typebox:compile ' │ 10000000 │ '46 ms ' │
└─────────┴────────────────┴────────────────────┴────────────┴────────────┘
┌─────────┬────────────────┬────────────────────┬────────────┬────────────┐
│ (index) │ library │ using │ iterations │ elapsed │
├─────────┼────────────────┼────────────────────┼────────────┼────────────┤
│ 0 │ 'zod ' │ 'zod ' │ 10000000 │ '4669 ms ' │
│ 1 │ 'zod ' │ 'typebox:value ' │ 10000000 │ '1359 ms ' │
│ 2 │ 'zod ' │ 'typebox:compile ' │ 10000000 │ '47 ms ' │
└─────────┴────────────────┴────────────────────┴────────────┴────────────┘
``