Пару дней назад закрыли старый ишьюс от 2022 года в библиотеке zod, в котором предложили добавить более строгую проверку (через дополнительный аргумент) на приведение строки к булаен типу (
z.coerce.boolean()), чтобы при передаче "false" в виде строкового значения возвращался false.Эта история расширилась тем, что помимо "false", так же хотелось бы обрабатывать "0", "off" и подобные falsy-значения. Это можно было решить через кастомную схему и метод transform (рассказывал в видео про валидацию переменных окружения), но в четвертой версии zod появился тип stringbool, который решает эту проблему. Что он делает? Преобразует "булевы" значения в строковом виде (список можно переопределять) в простые булевы значения:
const strbool = z.stringbool();
strbool.parse("true") // true
strbool.parse("1") //true
strbool.parse("on") // true
strbool.parse("false") // false
strbool.parse("0") // false
strbool.parse("off") // false
Прикольно видеть, как инструменты развиваются (даже на примере этой фичи, которая пришла от пользователей), да и как за небольшое время zod стал чуть-ли не классическим инструментом в мире фронтенда. Знаю и про arktype, и про valibot с joi, но по экосистеме и популярности zod далеко впереди всех (отчет в npm trends).
Кстати эта фича вошла в 4-ую версию библиотеки, которая вышла совсем недавно. Из самого интересно:
- работа с новой версией через сабпрефикс (
zod/v4) вместе с zod@3.25.0. Это сделано, чтобы не сломать экосистему, так как при публикации сразу 4-ой мажорной версии в npm, всем зависимым библиотекам пришлось бы оперативно поддержать новое API (вот тут в ишью можно почитать подробнее https://github.com/colinhacks/zod/issues/4371)- релиз Zod Mini. Одна из больших проблем zod заключалась в том, что API библиотеки нормально не tree-shake-илась, из-за чего, например, мы не стали подключать ее на клиенте, или из-за чего появился valibot (аналог zod с хорошим tree-shaking-ом). В Zod Mini немного изменили API (перевели схемы на функциональный стиль через композицию функций) и поддержали tree-shaking. Поэтому если вы не использовали zod по той же причиной, теперь можно пробовать :)