decs/typeschema

🛵 Universal adapter for TypeScript schema validation.

TypeScript

451

507 commits

updated Oct 14, 2024

See the code

README


TypeSchema

TypeSchema

Universal adapter for schema validation
✨ https://typeschema.com ✨


License Bundle size npm downloads GitHub stars

Quickstart   •   Coverage   •   API   •   GitHub   •   npm


When fetching data from an external source, it's important to verify its integrity. This happens when processing user inputs, calling third-party APIs, loading configuration files, and so on. And the thing is: Typescript doesn't come with runtime validation. Any type assertions are removed at compile-time.

As a result, developers turn to third-party validation libraries. But that landscape is fragmented, lacking a single best option. Each offers different trade-offs on developer experience, bundle size, and community support.

TypeSchema enables writing code that works with any validation library out-of-the-box. It provides a universal adapter for interacting with any validation schema, decoupling from implementation specifics and increasing compatibility.

import {validate} from '@typeschema/main';

import {z} from 'zod';
import {string} from 'valibot';

const zodSchema = z.string();
await validate(zodSchema, '123');
//    ^? {success: true, data: '123'}

const valibotSchema = string();
await validate(valibotSchema, 123);
//    ^? {success: false, issues: [...]}

Quickstart

We value flexibility, which is why there are multiple ways of using TypeSchema:

  1. Using an adapter directly (e.g. @typeschema/valibot): Best pick for end developers, when the validation library is known ahead of time. This is particularly useful for supporting more validation libraries on tRPC.
  2. Handpicking adapters with @typeschema/main: Recommended for library maintainers. Any validation library can be used, but adapters have to be explicitly installed. This allows end developers to trade-off between coverage and bundle size.
  3. Batteries included with @typeschema/all: Easiest to use. All adapters are automatically installed, including future ones. This is a drop-in replacement for the deprecated @decs/typeschema.

Coverage

[!NOTE] Don't see your favorite validation library? We welcome PRs! Otherwise, please file an issue to help us prioritize. 🙌

API

Inference

  • Infer<TSchema>: Extracts the output type of a schema
  • InferIn<TSchema>: Extracts the input type of a schema

Validation

  • wrap(schema): Returns the wrapped schema with access to its operations
  • validate(schema, data): Returns the validated data or a list of validation issues
  • assert(schema, data): Returns the validated data or throws an AggregateError

Serialization

  • toJSONSchema(schema): Converts the schema into the equivalent JSON schema

Acknowledgements

adapter
assert
inference
schema
type
typescript
validation

decs/typeschema

🛵 Universal adapter for TypeScript schema validation.

TypeScript

451

507 commits

updated Oct 14, 2024

See the code

README


TypeSchema

TypeSchema

Universal adapter for schema validation
✨ https://typeschema.com ✨


License Bundle size npm downloads GitHub stars

Quickstart   •   Coverage   •   API   •   GitHub   •   npm


When fetching data from an external source, it's important to verify its integrity. This happens when processing user inputs, calling third-party APIs, loading configuration files, and so on. And the thing is: Typescript doesn't come with runtime validation. Any type assertions are removed at compile-time.

As a result, developers turn to third-party validation libraries. But that landscape is fragmented, lacking a single best option. Each offers different trade-offs on developer experience, bundle size, and community support.

TypeSchema enables writing code that works with any validation library out-of-the-box. It provides a universal adapter for interacting with any validation schema, decoupling from implementation specifics and increasing compatibility.

import {validate} from '@typeschema/main';

import {z} from 'zod';
import {string} from 'valibot';

const zodSchema = z.string();
await validate(zodSchema, '123');
//    ^? {success: true, data: '123'}

const valibotSchema = string();
await validate(valibotSchema, 123);
//    ^? {success: false, issues: [...]}

Quickstart

We value flexibility, which is why there are multiple ways of using TypeSchema:

  1. Using an adapter directly (e.g. @typeschema/valibot): Best pick for end developers, when the validation library is known ahead of time. This is particularly useful for supporting more validation libraries on tRPC.
  2. Handpicking adapters with @typeschema/main: Recommended for library maintainers. Any validation library can be used, but adapters have to be explicitly installed. This allows end developers to trade-off between coverage and bundle size.
  3. Batteries included with @typeschema/all: Easiest to use. All adapters are automatically installed, including future ones. This is a drop-in replacement for the deprecated @decs/typeschema.

Coverage

[!NOTE] Don't see your favorite validation library? We welcome PRs! Otherwise, please file an issue to help us prioritize. 🙌

API

Inference

  • Infer<TSchema>: Extracts the output type of a schema
  • InferIn<TSchema>: Extracts the input type of a schema

Validation

  • wrap(schema): Returns the wrapped schema with access to its operations
  • validate(schema, data): Returns the validated data or a list of validation issues
  • assert(schema, data): Returns the validated data or throws an AggregateError

Serialization

  • toJSONSchema(schema): Converts the schema into the equivalent JSON schema

Acknowledgements

adapter
assert
inference
schema
type
typescript
validation

Project health

Latest release

0.12.2 · Jan 20, 2024

Releases this year

0
Deprecated

Significant stargazers

Pooya Parsa

5,149 followers · starred Jul 2023

Kyle Mathews

3,920 followers · starred Aug 2023

Christopher Hiller

477 followers · starred Sep 2025

Shoubhit Dash

1,959 followers · starred Jul 2023