Awesome
๐ Benchmark Comparison of Packages with Runtime Validation and TypeScript Support
โกโ Benchmark results have changed after switching to isolated node processes for each benchmarked package, see #864 โ โก
Benchmark Results
Packages Compared
- aeria
- ajv
- ArkType
- banditypes
- bueno
- caketype
- class-validator + class-transformer
- computed-types
- decoders
- deepkit
- @effect/schema
- io-ts
- jet-schema
- jointz
- json-decoder
- @mojotech/json-type-validaton
- $mol_data
- @mondrian-framework/model
- myzod
- ok-computer
- purify-ts
- parse-dont-validate
- r-assign
- rescript-schema
- rulr
- runtypes
- @sapphire/shapeshift
- @sinclair/typebox
- simple-runtypes
- spectypes
- succulent
- superstruct
- suretype
- tiny-schema-validator
- to-typed
- toi
- ts-auto-guard
- ts-interface-checker
- ts-json-validator
- ts-runtime-checks
- tson
- ts-utils
- typia
- @typeofweb/schema
- unknownutil
- valibot
- valita
- Vality
- yup
- zod
Criteria
Validation
These packages are capable of validating the data for type correctness.
E.g. if string
was expected, but a number
was provided, the validator should fail.
Interface
It has a validator function or method that returns a valid type casted value or throws.
const data: any = {}
// `res` is now type casted to the right type
const res = isValid(data)
Or it has a type guard function that in a truthy block type casts the value.
const data: any = {}
function isMyDataValid(data: any) {
// isValidGuard is the type guard function provided by the package
if (isValidGuard(data)) {
// data here is "guarded" and therefore inferred to be of the right type
return data
}
throw new Error('Invalid!')
}
// `res` is now type casted to the right type
const res = isMyDataValid(data)
Local Development
npm run start
- run benchmarks for all modulesnpm run start run zod myzod valita
- run benchmarks only for a few selected modulesnpm run docs:serve
- result viewernpm run test
- run tests on all modules
Adding a new node version
- update node version matrix in
.github/workflows/pr.yml
and.github/workflows/release.yml
- update
NODE_VERSIONS
indocs/dist/app.tsx
and runnpm run docs:build
- optionally set
NODE_VERSION_FOR_PREVIEW
inbenchmarks/helpers/main.ts
Test cases
-
Safe Parsing
- Checks the input object against a schema and returns it.
- Raises an error if the input object does not conform to the schema (e.g., a type mismatch or missing attribute).
- Removes any extra keys in the input object that are not defined in the schema.
-
Strict Parsing
- Checks the input object against a schema and returns it.
- Raises an error if the input object does not conform to the schema (e.g., a type mismatch or missing attribute).
- Raises an error if the input object contains extra keys.
-
Loose Assertion
- Checks the input object against a schema.
- Raises an exception if the input object does not match the schema.
- Allows extra keys without raising errors.
- Returns true if data is valid.
-
Strict Assertion
- Checks the input object against a schema.
- Raises an exception if the input object does not match the schema.
- Raises an error if the input object or any nested input objects contain extra keys.
- Returns true if data is valid.