typeofweb-org / schema

@typeofweb/schema: Lightweight validator with 100% TypeScript support and sane coercion rules.
https://schema.typeofweb.com
MIT License
139 stars 8 forks source link
functional-programming hacktoberfest jsonschema schema ts typescript validation validation-library validations

@typeofweb/schema

@typeofweb/schema is a lightweight and extensible library for data validation with full TypeScript support!

All Contributors

codecov npm npm bundle size (minified + gzip) no external dependencies tree-shakeable

Docs

👉 schema.typeofweb.com 👈

Contributors ✨

Thanks goes to these wonderful people (emoji key):


Michał Miszczyszyn

💻 🚧 📆 👀

Bartłomiej Wiśniewski

💻 👀 🐛 📖

Adam Siekierski

👀

Anthony Sottile

🛡️

Marek

📖

Olzhas Alexandrov

🐛

Bartek Słysz

🐛

Mateusz Stepaniuk

🤔

Dariusz Rzepka

🤔

This project follows the all-contributors specification. Contributions of any kind welcome!

Example

import { number, object, optional, string, validate } from '@typeofweb/schema';

const personSchema = object({
  name: string(),
  age: number(),
  email: optional(string()),
})();

const mark = {
  name: 'Mark',
  age: 29,
};

const personValidator = validate(personSchema);

// If validation is successful returns data with correct type, throws ValidationError otherwise
const validatedPerson = personValidator(mark);

Early benchmarks

Early benchmarks show some really promising performance of @typeofweb/schema when compared to other industry-leading solutions:

Platform info:
==============
   Darwin 20.3.0 x64
   Node.JS: 14.16.0
   V8: 8.4.371.19-node.18
   Intel(R) Core(TM) i7-6920HQ CPU @ 2.90GHz × 8
library relative speed operations per second avg. operation time
@typeofweb/schema ref (1,934,098 rps) (avg: 0.517μs)
io-ts@2.2.13 -7.21% (1,794,594 rps) (avg: 0.557μs)
mschema@0.5.6 -69.8% (584,151 rps) (avg: 1μs)
validator.js@2.0.4 -76.16% (461,088 rps) (avg: 2μs)
validate.js@0.13.1 -89.02% (212,408 rps) (avg: 4μs)
validatorjs@3.22.1 -92.2% (150,791 rps) (avg: 6μs)
joi@17.3.0 -93.25% (130,541 rps) (avg: 7μs)
superstruct@0.13.3 -96.99% (58,197 rps) (avg: 17μs)
yup@0.32.8 -97.09% (56,243 rps) (avg: 17μs)
parambulator@1.5.2 -98.99% (19,492 rps) (avg: 51μs)
zod@1.11.11 -99.03% (18,827 rps) (avg: 53μs)

👉 schema.typeofweb.com 👈