correttore
v0.1.0
Published
A **proof of concept** of a tree shakable [Zod](https://zod.dev/) alternative. This library aims to have a 1:1 Zod compatible API, but with fine grain control over the final bundle size.
Downloads
5
Readme
correttore
A proof of concept of a tree shakable Zod alternative. This library aims to have a 1:1 Zod compatible API, but with fine grain control over the final bundle size.
🤓 You can read the blog post to learn how it works.
Usage
// 1. import `initCorrettore` and features (validator) you want to use
import { initCorrettore, string, email, min, object } from "correttore"; // 0.54 kB
// 2. init the entrypoint variable `c`. It corresponds to Zod's `z`.
export const c = initCorrettore([string, email, min, object]);
// 3. create schemas. Autocompletion will only show methods passed to `initCorrettore`.
// the `object` method is always available
const loginSchema = c.object({
email: c.string().email(),
password: c.string().min(5),
});
// 4. Infer type from schema:
import type { Infer } from "correttore";
type LoginSchema = Infer<typeof loginSchema>;
// ^? {
// email: string;
// password: string;
// }
// 5. Parse unknown data
const parsed = loginSchema.parse({
email: "[email protected]",
password: "password123",
});
// this will throw
loginSchema.parse({
email: "[email protected]",
// missing field
});
Installation
Note: This library is not production ready, I implemented only a handful of parsers as a PoC. If you're interested in this project, check out the contributing section.
# choose your package manager
pnpm add correttore
yarn add correttore
npm install correttore
Comparison with Zod
Zod:
import { z } from "zod"; // 12.8 kB
const LoginSchema = z.object({
email: z.string().email(),
password: z.string().min(8),
});
// Throws error
LoginSchema.parse({ email: "", password: "" });
// Returns data as { email: string; password: string }
LoginSchema.parse({ email: "[email protected]", password: "12345678" });
Correttore:
import { email, min, initCorrettore, string, object } from "correttore"; // 0.54 kB
export const c = initCorrettore([string, email, min, object]);
const LoginSchema = c.object({
email: c.string().email(),
password: c.string().minLength(8),
});
// Throws error
LoginSchema.parse({ email: "", password: "" });
// Returns data as { email: string; password: string }
LoginSchema.parse({ email: "[email protected]", password: "12345678" });
Contributing
If you're interested in helping to bring this project to a production ready state, feel free to open a PR with changes that will bring it closer to a 1:1 Zod compatible API.
List of stuff to do:
- [ ] Add more parsers/validators
- [ ] Add tests