At our Thursday 28th May #FrontEndSheff meetup:

🕶️ Thomas Baker introduces us to Sass - that's Syntactically *Awesome* Style Sheets and makes the case against just using 'vanilla' #CSS
🛍️ David Warrington from #Shopify declares that #TypeScript isn't enough… not without the #Zod validation library

🎟️ Available now: https://www.meetup.com/front-end-sheffield/events/314557160/

28th May '26: Kneel before Zod & a touch of Sass, Thu, May 28, 2026, 6:15 PM | Meetup

*prev. known as "Shopping with Sass & style (sheets)" - renamed due to different talk content!* We're back at SHU in Room 12.4.12 at the **Charles Street Building**, Sheff

Meetup
Random Old Comic: Insomnia https://www.toyboxcomix.com/2018/03/29/insomnia/ Insomnia Suggested by M "Something Sarcastic" Sipher. #DC #DorothyZbornak #GoldenGirls #Zod

Формы как контракт в Next.js: Zod, fieldErrors и одинаковые правила на client и server

С формами в Next.js проблема обычно начинается не на уровне кнопки submit. Кнопка как раз почти всегда работает. Настоящая путаница начинается позже, когда форма уже живёт в проекте какое-то время. В одном месте ошибка показывается под полем, в другом только общей строкой сверху. Где-то кнопка блокируется на pending, а где-то можно отправить запрос несколько раз подряд. Клиент считает данные валидными, а сервер отвечает, что правило нарушено. Поле уже зелёное, а сохранение всё равно не прошло. В этот момент становится видно, что форма была собрана как кусок UI, а не как контракт. Используем как примеры паттерны из проекта Workbench. Полезно смотреть на форму не как на набор input и submit, а как на договор между UI, валидацией и местом записи данных. У такого договора есть простая форма - какие данные считаются допустимыми, где и как они проверяются, в каком виде ошибка возвращается в интерфейс, что происходит на pending, когда форма блокируется, что считается успехом, а что общей ошибкой, не привязанной к конкретному полю. Как только форма описывается так, код перестаёт расползаться. И здесь Zod в Next.js даёт не просто удобную схему, а способ удерживать client и server в одном наборе правил.

https://habr.com/ru/articles/1025472/

#nextjs #typescript #app_router #zod #forms #validation #react #вебразработка

Формы как контракт в Next.js: Zod, fieldErrors и одинаковые правила на client и server

С формами в Next.js проблема обычно начинается не на уровне кнопки submit. Кнопка как раз почти всегда работает. Настоящая путаница начинается позже, когда форма уже живёт в проекте какое-то время. В...

Хабр

Как я написал свою библиотеку валидации схем и создал свою альтернативу Zod

Несколько лет назад в одном из моих проектов на чистом JavaScript возникла задача: валидировать большие вложенные объекты со сложной структурой. Объекты содержали различные подобъекты, к каждому из которых применялись свои правила валидации в зависимости от типа. Задача усложнялась двумя дополнительными требованиями:

https://habr.com/ru/articles/1023038/

#валидация #схема #standard_schema #zod #zod_vs_yup #typescript

Как я написал свою библиотеку валидации схем и создал свою альтернативу Zod

Статья о том, как попытка разобраться в валидации объектов привела к созданию библиотеки валидации схем с runtime-интроспекцией, а на её основе — отдельных библиотек для type-safe маппинга объектов и...

Хабр

TypeScript в Next.js как система контрактов, а не типизация ради типизации

Когда разработчик начинает писать на Next.js с TypeScript, первая реакция часто довольно холодная. Вместо того чтобы двигаться быстрее, он начинает чаще видеть ошибки. Где-то не совпал shape объекта, где-то строка не подходит в более узкий тип, где-то TypeScript напоминает, что значение может быть undefined. На этом месте легко сделать неправильный вывод. Кажется, что TS просто добавляет трение и требует больше служебного кода. Обычно проблема не в TypeScript, а в способе мышления. Если использовать его как набор аннотаций поверх уже написанного кода, пользы действительно немного. Но если смотреть на типы как на систему контрактов между слоями приложения, картина меняется. Особенно в Next.js App Router, где у нас постоянно есть границы server и client, внешний ввод из URL, формы, мутации и разные состояния интерфейса. В этот момент TypeScript перестаёт быть типизацией ради типизации. Он начинает отвечать на более важный вопрос: какие состояния в проекте вообще допустимы, а какие не должны пройти дальше границы. По такой модели я выстроил один из своих проектов Workbench. Не начинать с мысли давайте везде поставим типы, а начинать с мысли где у нас проходит граница, что в неё входит и что из неё может выйти. После этого многие решения в коде становятся почти очевидными.

https://habr.com/ru/articles/1018382/

#nextjs #typescript #app_router #server_components #type_safety #zod #react #вебразработка

TypeScript в Next.js как система контрактов, а не типизация ради типизации

Когда разработчик начинает писать на Next.js с TypeScript, первая реакция часто довольно холодная. Вместо того чтобы двигаться быстрее, он начинает чаще видеть ошибки. Где-то не совпал shape объекта,...

Хабр

Согласованность API по принципу единого источника истины

Представим ситуацию: идет тяжёлый спринт, вы выполнили кучу задач, написали тонну нового функционала, готовитесь к релизу и вдруг обнаруживайте, что часть фич перестала работать! Идёте разбираться и обнаруживайте, что оказывается бэкендер Вася в последний момент решил переименовать поля в json-е, а вам об этом не сказал! Ситуация образная, но позволяет быстро обрисовать одну из болей во время разработки. В этой статье я бы хотел рассказать об одном из вариантов её решения в коде с помощью подхода Единого источника истины(Single source of truth).

https://habr.com/ru/articles/1003398/

#API #honojs #zod #RPC #SSOT #OpenAPI #typescript #monorepo #javascript

Согласованность API по принципу единого источника истины

Привет, Хабр! Представим ситуацию: идет тяжёлый спринт, вы выполнили кучу задач, написали тонну нового функционала, готовитесь к релизу и вдруг обнаруживайте, что часть фич перестала работать! Идёте...

Хабр

Zod: строгая валидация и удобная типизация. Опыт перехода

Привет, Хабр! Меня зовут Сергей, я фронтенд-инженер в Банки.ру. В этой статье расскажу, как Zod помог нам перестать писать валидацию на уровне полей, подружился с React Hook Form и стал единым источником правды о структуре данных. К Zod мы пришли не сразу. Долгое время типы и валидация у нас жили в разных слоях приложения: TypeScript определял структуру данных во время разработки, а отдельные функции или библиотеки (вроде Yup) проверяли входящие значения в рантайме. Это классическая проблема: дублирование логики и рассинхрон. Типы в interface поменялись, а валидация осталась прежней (или наоборот). Мы пробовали Yup, но он казался громоздким в связке с TS: типы приходилось выводить вручную или мириться с тем, что схемы выглядят непрозрачно. В какой-то момент стало непонятно: зачем тащить отдельную библиотеку, если проще написать if (typeof x === 'string') ? С переходом на Zod всё стало значительно проще: одна схема одновременно является и валидатором, и источником типа данных.

https://habr.com/ru/companies/banki/articles/994886/

#zod #typescript #валидация_данных #runtime_валидация #react_hook_form #типизация_данных #frontend_разработка #валидация_форм #developer_experience #валидация

Zod: строгая валидация и удобная типизация. Опыт перехода

Zod: строгая валидация и удобная типизация. Опыт перехода Привет, Хабр! Меня зовут Сергей, я фронтенд-инженер в Банки.ру. В этой статье расскажу, как Zod помог нам перестать писать валидацию на уровне...

Хабр

🎬 Rich actions with confirmation dialogs, onSuccess & onError callbacks
👁️ Conditional visibility based on data, auth, or complex logic
📦 Two packages: @.json-render/core (types, schemas) + @.json-render/react (renderer, hooks)

🔧 Schema definition with #Zod for type-safe component props
📤 Export as standalone #React code with no runtime dependencies

https://github.com/vercel-labs/json-render

GitHub - vercel-labs/json-render: The framework for User-Generated Interfaces

The framework for User-Generated Interfaces. Contribute to vercel-labs/json-render development by creating an account on GitHub.

GitHub