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. This was done by a combination of Proxies and type-level programming.
Install / Use
/learn @mieszkosabo/CorrettoreREADME
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. This was done by a combination of Proxies and type-level programming.
🤓 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: "hello@test.com",
password: "password123",
});
// this will throw
loginSchema.parse({
email: "hello@test.com",
// 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: "jane@example.com", 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().min(8),
});
// Throws error
LoginSchema.parse({ email: "", password: "" });
// Returns data as { email: string; password: string }
LoginSchema.parse({ email: "jane@example.com", 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 APIs (refer to the Roadmap (https://github.com/mieszkosabo/correttore/issues/2) to find out what needs to be done)
- [ ] Add tests
- [ ] Add docs/guides
- [ ] Create premade "bundles" of popular subsets of APIs users may want to import
Related Skills
node-connect
337.4kDiagnose OpenClaw node connection and pairing failures for Android, iOS, and macOS companion apps
frontend-design
83.2kCreate distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.
Writing Hookify Rules
83.2kThis skill should be used when the user asks to "create a hookify rule", "write a hook rule", "configure hookify", "add a hookify rule", or needs guidance on hookify rule syntax and patterns.
review-duplication
99.2kUse this skill during code reviews to proactively investigate the codebase for duplicated functionality, reinvented wheels, or failure to reuse existing project best practices and shared utilities.
