Valibot (CZ článek)

Back to blog

Validace dat v TypeScriptu jednoduše a bezpečně

3 min read
Table of Contents

Valibot je nová validační knihovna pro JavaScript a TypeScript, navržená tak, aby byla co nejmenší, co nejrychlejší a co nejlépe typovaná. Oproti knihovnám jako Zod nebo Yup nabízí výrazně menší velikost a extrémní výkonnost, přičemž si zachovává přehledné API a silnou typovou kontrolu.

Cílem Valibotu je poskytovat validaci dat na runtime úrovni s co nejnižším dopadem na výkon i velikost výsledného JavaScript bundlu. Valibot je napsaný v čistém TypeScriptu a nemá žádné závislosti. Je tak vhodný pro frontend, backend i edge prostředí.

Základní použití

import { object, string, number, parse } from 'valibot';

const UserSchema = object({
  name: string(),
  age: number(),
});

const data = parse(UserSchema, {
  name: 'Lucie',
  age: 28,
});
  • object({...}) definuje strukturu objektu
  • string(), number() jsou primitivní validátory
  • parse() spustí validaci a vrátí typovaný výstup nebo chybu
import * as v from 'valibot';

const LoginSchema = v.object({…});

type LoginData = v.InferOutput<typeof LoginSchema>;

function getLoginData(data: unknown): LoginData {
  return v.parse(LoginSchema, data);
}

Pokročilé příklady

Volitelné hodnoty a výchozí hodnoty

import { optional, default_ } from 'valibot';

const Schema = object({
  isActive: optional(default_(true, boolean())),
});

Transformace a extra validace

import * as v from 'valibot' // 1.61kb 

const EmailSchema = v.pipe(v.string(), v.email(), v.endsWith('@example.com'));

Enum validace

import { literal, union } from 'valibot';

const Role = union([
  literal('admin'),
  literal('user'),
  literal('guest'),
]);

Validace polí

import { array, string, minLength } from 'valibot';

const Tags = array(string([minLength(2)]));

Vlastní validátor

import { custom } from 'valibot';

const EvenNumber = number([
  custom((value) => value % 2 === 0, 'Must be even'),
]);

Bezpečné parsování

Valibot podporuje i bezpečné zpracování dat pomocí safeParse():

import { safeParse } from 'valibot';

const result = safeParse(UserSchema, { name: 'Anna', age: 'not-a-number' });

if (!result.success) {
  console.log(result.issues); // podrobné chyby
} else {
  console.log(result.output); // validovaná data
}

Klíčové vlastnosti knihovny

  • malá: extrémně malý bundle (méně než 1 kB min+gz), tree-shaking
  • rychlá: optimalizovaný pro výkon v runtime validaci
  • type-safe: plná integrace s TypeScriptem
  • bez závislostí: čistý TypeScript, snadná integrace
  • modulární: lze skládat validátory jako stavebnici

Shrnutí

Valibot je validační knihovna nové generace — extrémně rychlá, malá, a přitom typově přesná. Hodí se tam, kde záleží na velikosti balíčku (např. frontend, mobilní web, edge computing), ale i na serveru v prostředích s důrazem na výkon.