Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/decs/typeschema
🛵 Universal adapter for TypeScript schema validation.
https://github.com/decs/typeschema
adapter assert inference schema type typescript validation
Last synced: 26 days ago
JSON representation
🛵 Universal adapter for TypeScript schema validation.
- Host: GitHub
- URL: https://github.com/decs/typeschema
- Owner: decs
- License: mit
- Created: 2023-07-01T23:13:19.000Z (over 1 year ago)
- Default Branch: main
- Last Pushed: 2024-10-14T03:27:27.000Z (2 months ago)
- Last Synced: 2024-11-08T02:00:24.486Z (about 1 month ago)
- Topics: adapter, assert, inference, schema, type, typescript, validation
- Language: TypeScript
- Homepage: https://typeschema.com
- Size: 1.67 MB
- Stars: 396
- Watchers: 1
- Forks: 13
- Open Issues: 8
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
TypeSchema
Universal adapter for schema validation
✨ https://typeschema.com ✨
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](https://www.typescriptlang.org/docs/handbook/2/everyday-types.html#type-assertions).
>
> 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](#coverage) out-of-the-box. It provides a universal adapter for interacting with any validation schema, decoupling from implementation specifics and increasing compatibility.```ts
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`](https://github.com/decs/typeschema/tree/main/packages/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](https://trpc.io/).
2. **Handpicking adapters** with [`@typeschema/main`](https://github.com/decs/typeschema/tree/main/packages/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`](https://github.com/decs/typeschema/tree/main/packages/all): Easiest to use. All adapters are automatically installed, including future ones. This is a drop-in replacement for the deprecated [`@decs/typeschema`](https://www.npmjs.com/package/@decs/typeschema).## Coverage
Project
Popularity
Infer
InferIn
Validation
Serialization
Adapter
Downloads
zod
✅
✅
✅
✅
@typeschema/zod
yup
✅
✅
✅
✅
@typeschema/yup
joi
🧐
🧐
✅
✅
@typeschema/joi
ajv
✅
✅
✅
✅
@typeschema/json
class-validator
✅
✅
✅
🧐
@typeschema/class-validator
effect
✅
✅
✅
✅
@typeschema/effect
superstruct
✅
🧐
✅
🧐
@typeschema/superstruct
io-ts
✅
✅
✅
🧐
@typeschema/io-ts
valibot
✅
✅
✅
✅
@typeschema/valibot
typebox
✅
✅
✅
✅
@typeschema/typebox
typia
✅
✅
✅
🧐
@typeschema/function
arktype
✅
✅
✅
🧐
@typeschema/arktype
ow
✅
✅
✅
🧐
@typeschema/ow
deepkit
🧐
🧐
✅
🧐
@typeschema/deepkit
runtypes
✅
✅
✅
🧐
@typeschema/runtypes
fastest-validator
🧐
🧐
✅
🧐
@typeschema/fastest-validator
vine
✅
✅
✅
🧐
@typeschema/vine
suretype
✅
✅
✅
✅
@typeschema/suretype
valita
✅
✅
✅
🧐
@typeschema/valita
> [!NOTE]
> Don't see your favorite validation library?
> We welcome [PRs](https://github.com/decs/typeschema/pulls)!
> Otherwise, please [file an issue](https://github.com/decs/typeschema/issues) to help us prioritize. 🙌## API
### Inference
- `Infer`: Extracts the output type of a schema
- `InferIn`: 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
- Inspired by [tRPC](https://trpc.io/)'s [input & output validators](https://trpc.io/docs/server/validators)
- Adapter architecture inspired by [@ecyrbe](https://github.com/ecyrbe)'s [suggestions](https://github.com/decs/typeschema/issues/1)
- API definition inspired by [@colinhacks](https://github.com/colinhacks)'s [proposal](https://twitter.com/colinhacks/status/1634284724796661761)
- Logo designed by [flaticon](https://www.flaticon.com/)