https://github.com/neo-ciber94/vai
A typescript runtime type validator
https://github.com/neo-ciber94/vai
inference types typescript validation
Last synced: 4 months ago
JSON representation
A typescript runtime type validator
- Host: GitHub
- URL: https://github.com/neo-ciber94/vai
- Owner: Neo-Ciber94
- License: mit
- Created: 2023-03-07T06:39:14.000Z (over 2 years ago)
- Default Branch: main
- Last Pushed: 2023-03-09T22:37:55.000Z (over 2 years ago)
- Last Synced: 2025-02-24T11:36:45.335Z (8 months ago)
- Topics: inference, types, typescript, validation
- Language: TypeScript
- Homepage:
- Size: 173 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# vai
[![CI][ci_badge]][CI]
[CI]: https://github.com/Neo-Ciber94/Vai/actions/workflows/ci.yml
[ci_badge]: https://github.com/Neo-Ciber94/Vai/actions/workflows/ci.yml/badge.svgA runtime type validation library.
## Why?
This library is a simple version of a type validation library inspired in `Zod`, mostly educational, prefer using other library like [Zod](https://zod.dev/) instead.
## Usage
```ts
import { createValidator } from "vai";/// Define the validator to use in your application,
/// `createValidator` also accepts an object of validators to extend it
/// or overwrite existing validators
export const v = createValidator();// Define a schema
const dateSchema = v.date();
dateSchema.parse(new Date("2023-1-1"));// Define an object schema
const personSchema = v.object({
name: v.string().trim().min(1),
age: v.number().integer().min(1).max(120),
email: v.string().email().optional(),
games: v.array(
v.object({
name: v.string(),
genre: v.enum(["shooter", "adventure", "platformer", "fighting"]),
price: v.number().min(10).nullable(),
})
),
});personSchema.parse({
name: "Pauline",
age: 23,
email: "pauline@example.com",
games: [
{
name: "Super Mario Odyssey",
genre: "platformer",
price: 39,
},
],
});
```## TODO
### Validators
- [x] `nan()`
### Utilities
- [x] Infer result type of a validator
### String validators
- [x] `string.nonempty()`
### Number validators
- [x] `number.positive()`
- [x] `number.negative()`
- [x] `number.gt(number)`
- [x] `number.lt(number)`
- [x] `number.gte(number)`
- [x] `number.lte(number)`
- [x] `number.nonzero()`
- [x] `number.finite()`
- [x] `number.safe()`
- [x] `number.even()`
- [x] `number.odd()`### Number transformations
- [ ] `number.floor()`
- [ ] `number.ceil()`
- [ ] `number.round()`### Bigint validators
- [ ] `number.positive()`
- [ ] `number.negative()`
- [ ] `number.gt(number)`
- [ ] `number.lt(number)`
- [ ] `number.gte(number)`
- [ ] `number.lte(number)`
- [ ] `number.nonzero()`
- [ ] `number.finite()`
- [ ] `number.safe()`
- [ ] `number.even()`
- [ ] `number.odd()`### Object validators
- [ ] `object.extend(object)`
- [ ] `object.pick(object)`
- [ ] `object.omit(object)`