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… |
Что почитать
- Результат проверки — что лежит в
data,errorsиissues - Пустые значения — почему
''считается незаполненным полем - Сообщения и локализация — свои тексты ошибок и русский язык
- TypeScript — типы из схемы
- Свои правила и схемы — когда встроенных не хватает
- tinyval-vue — формы во Vue:
useForm, ошибки, отправка, ошибки сервера - Standard Schema — схемы tinyval в tRPC, Hono, TanStack Form, React Hook Form