Skip to content

tinyval ​

Маленькая и быстрая валидация без зависимостей — для браузера и сервера.

  • ~2.5 kB gzip для типичной формы, ~5.5 kB весь пакет — в сборку попадает только то, что импортировано
  • Типы TypeScript выводятся из схемы
  • Вложенные объекты и массивы, лишние поля, приведение типов, преобразования, асинхронные проверки

Установка ​

bash
npm install tinyval

Попробовать ​

Быстрый старт ​

ts
import { validate, object, string, optional, pipe, trim, minLength, email, min, coerce, type Infer } from 'tinyval';

const User = object({
  name: pipe(string(), trim(), minLength(2)),
  email: pipe(string(), trim(), email()),
  age: optional(pipe(coerce.number(), min(0))),
});

type User = Infer<typeof User>; // { name: string; email: string; age?: number }

const result = validate(User, input);

if (result.valid) {
  result.data;   // очищенные типизированные данные
} else {
  result.errors; // { name: '...', email: '...' }
}

На сервере удобнее parse — он возвращает данные или бросает ValidationError.

Из чего состоит ​

РазделЧто внутри
ФункцииЗапуск проверки: validate, validateAsync, parse, parseAsync
СхемыТипы данных: string, number, object, array, optional, union, variant, coerce…
УсловияКак в Laravel: requiredIf, requiredWith, requiredWithout, prohibitedIf
Операции с объектамиНовые схемы из существующих: partial, pick, omit, extend
ПравилаПроверки и преобразования через pipe: minLength, email, sameAs, trim, check…

Что почитать ​