📦 Выпустил SafeShape 2.0

Про версию 1.0 я так и не рассказал, поэтому начну с того, зачем вообще появился этот проект.

🧩 Типы TypeScript исчезают во время выполнения. На границах приложения — в API, вебхуках, JSON-файлах и конфигурации — данные снова становятся unknown.

Их можно провалидировать. Но следующая проблема возникает позже: контракт меняется.

Новое обязательное поле сломает существующих потребителей? Можно ли сузить enum? Что изменилось после transform — вход или результат? Безопасно ли выкатывать новую схему?

🛡️ SafeShape появился именно для этой границы. Одна исполняемая схема:

— проверяет данные в runtime; — выводит input- и output-типы; — сохраняет структурированную диагностику; — генерирует JSON Schema и TypeScript declarations; — не приводит значения скрытно: все преобразования остаются явными.

В версии 1.0 я собрал эту основу.

🔄 Главная задача версии 2.0 — безопасная эволюция контрактов.

Теперь контракт можно сохранить как детерминированный snapshot, сравнить с новой версией и проверить совместимость в CI.

SafeShape различает безопасные, ломающие и рискованные изменения. А если совместимость нельзя доказать, возвращает unknown, а не успокаивающий safe.

⚖️ Я сознательно не пытаюсь сделать ещё одну библиотеку со всеми валидаторами на свете. У Zod шире API и экосистема.

SafeShape нужен там, где runtime-схема становится публичным контрактом, а её изменения должны быть заметны до релиза, а не после поломки у потребителя.

🚀 SafeShape 2.0 уже доступен в npm:

npm install safe-shape

🔗 GitHub: github.com/dev-ik/safe_shape 🔗 npm: npmjs.com/package/safe-shape

#safeshape #typescript #runtimevalidation #jsonschema #contracttesting #opensource

📦 Выпустил SafeShape 2.0 | Сетка — социальная сеть от hh.ru 📦 Выпустил SafeShape 2.0 | Сетка — социальная сеть от hh.ru