Введение
Valibot — это модульная и типобезопасная библиотека схем, которая помогает легко проверять данные. Будь то входящие данные на сервере, данные формы или даже файлы конфигурации. Valibot не имеет зависимостей и может работать в любой среде JavaScript.
Мы настоятельно рекомендуем прочитать публикацию о запуске, а если вы увлекаетесь техническими подробностями — дипломную работу, на которой основан Valibot.
Основные преимущества
- Полная типобезопасность со статическим выводом типов
- Небольшой размер сборки — от менее чем 700 байт
- Проверка любых данных — от строк до сложных объектов
- Открытый исходный код и полное покрытие тестами — 100 %
- Включает множество действий для преобразования и проверки данных
- Хорошо структурированный исходный код без зависимостей
- Минималистичный, понятный и продуманный API
Пример
Для начала создайте схему, описывающую набор структурированных данных. Схему можно сравнить с определением типа в TypeScript. Главное отличие в том, что типы TypeScript «не выполняются» и в большей или меньшей степени являются возможностью для DX. Схема же, помимо выводимого определения типа, может выполняться во время работы программы, чтобы гарантировать типобезопасность неизвестных данных.
import * as v from 'valibot'; // 1.31 kB
// Create login schema with email and password
const LoginSchema = v.object({
email: v.pipe(v.string(), v.email()),
password: v.pipe(v.string(), v.minLength(8)),
});
// Infer output TypeScript type of login schema as
// { email: string; password: string }
type LoginData = v.InferOutput<typeof LoginSchema>;
// Throws error for email and password
const output1 = v.parse(LoginSchema, { email: '', password: '' });
// Returns data as { email: string; password: string }
const output2 = v.parse(LoginSchema, {
email: 'jane@example.com',
password: '12345678',
});
Помимо parse, Valibot также предлагает API, не основанный на исключениях, с помощью safeParse, а также функцию-предикат типа is. Подробнее об этом можно прочитать здесь.
Сравнение
Вместо того чтобы полагаться на несколько крупных функций с множеством методов, Valibot строит свой API и исходный код на основе множества небольших независимых функций, каждая из которых выполняет лишь одну задачу. У такой модульной структуры есть несколько преимуществ.
Например, это позволяет сборщику использовать инструкции импорта, чтобы удалять ненужный код. Таким образом, в вашу производственную сборку попадает только действительно используемый код. Это может уменьшить размер сборки до 95 % по сравнению с Zod.
Кроме того, это позволяет легко расширять функциональность Valibot с помощью внешнего кода, а также делает исходный код более надёжным и безопасным, поскольку функциональность отдельных функций гораздо проще проверять с помощью модульных тестов.
Переходите с Zod? Прочитайте нашу статью о миграции, чтобы узнать о преимуществах Valibot, и воспользуйтесь нашим руководством по миграции, чтобы перенести свои схемы с уверенностью.
Благодарности
Valibot создан Фабианом Хиллером в рамках его дипломной работы в Штутгартском университете медиа под руководством Вальтера Крихи, Мишко Хевери и Райана Карниато. На проектирование библиотеки также повлиял Колин Макдоннелл, чья работа над Zod оказала большое влияние на проектирование API Valibot.
Обратная связь
Нашли ошибку или хотите предложить, как улучшить код? Пожалуйста, создайте задачу. Вместе мы сможем сделать библиотеку ещё лучше!
Лицензия
Valibot полностью бесплатен и распространяется по лицензии MIT. Но если вам нравится проект, вы можете поддержать его, поставив звезду на GitHub.
© Fabian Hiller
Licensed under the MIT License.
https://valibot.dev/guides/introduction/