📦 Выпустил 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