Giter VIP home page Giter VIP logo

correttore's Introduction

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: "[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().min(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 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

correttore's People

Contributors

mieszkosabo avatar exoego avatar rakutek avatar shivamp1998 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.