8000 GitHub - shivamp1998/correttore
[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
Skip to content

shivamp1998/correttore

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

26 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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 (mieszkosabo#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

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • TypeScript 100.0%
0