Parsing a value to match the schema. This is different to validation because it returns a new value.
import * as v from "valibot";
import { personSchema } from "./schemas";
const person = v.parse(personSchema, data);
// person is of type Person
| Library | Version | Optimizations | Error type | Mean | Compare | |||
|---|---|---|---|---|---|---|---|---|
valibot | Code snippet | 1.1.0 | None | Abort early | 751 ns | |||
joi | Code snippet | 18.0.1 | None | Abort early | 4 μs | 5.12x | ||
typia (createValidate) | Code snippet(Commented code is not benchmarked) | 10.0.2 | Precompiled | All errors | 7 μs | 9.33x | ||
typia (validate) | Code snippet | 10.0.2 | Precompiled | All errors | 8 μs | 10.03x | ||
effect | Code snippet(Commented code is not benchmarked) | 3.19.3 | None | Abort early | 9 μs | 11.73x | ||
valibot (abortPipeEarly only) | Code snippet | 1.1.0 | None | Abort early | 28 μs | 37.8x | ||
valibot | Code snippet | 1.1.0 | None | All errors | 29 μs | 38.29x | ||
effect | Code snippet(Commented code is not benchmarked) | 3.19.3 | None | All errors | 43 μs | 56.62x | ||
joi | Code snippet | 18.0.1 | None | All errors | 58 μs | 77.56x | ||
zod (mini, jitless) | Code snippet | 4.1.12 | None | All errors | 76 μs | 100.66x | ||
zod (mini) | Code snippet | 4.1.12 | JIT | All errors | 78 μs | 104.41x | ||
arktype | Code snippet | 2.1.25 | None | All errors | 86 μs | 115.09x | ||
zod (jitless) | Code snippet | 4.1.12 | None | All errors | 94 μs | 124.86x | ||
yup | Code snippet | 1.7.1 | None | Abort early | 96 μs | 128.44x | ||
zod | Code snippet | 4.1.12 | JIT | All errors | 101 μs | 133.85x | ||
typebox (compile) | Code snippet(Commented code is not benchmarked) | 1.0.51 | JIT | All errors | 230 μs | 306.4x | ||
typebox | Code snippet | 1.0.51 | None | All errors | 240 μs | 319.05x | ||
yup | Code snippet | 1.7.1 | None | All errors | 526 μs | 700.6x |