Metaschema — описание типов и контрактов

Декларативная библиотека описания типов, валидации и контрактов. Один формат схемы для БД, API, доменной модели.

Идея

В обычном стеке: одно для валидации (Joi/Zod), другое для БД (ORM-схемы), третье для API (OpenAPI/JSON Schema). автор: «Это была самая запутанная библиотека из всех». В Metaschema всё это один формат.

Минимальная схема

({
  fields: {
    id: 'string',
    name: { type: 'string', length: { min: 1, max: 200 } },
    email: 'string',
    age: { type: 'number', min: 0, max: 120 },
  },
})

Используется для:

  • Валидации API-параметров (Metacom вход/выход).
  • Описания таблиц БД (metasql).
  • Проверки доменных объектов.

Кастомные типы в приложении

«Кастомные типы, возможность писать не внутри библиотеки метасхемы, а в самих приложениях. И метасхемы тоже, и декларативно кучу всего описывать.»

// applications/myapp/types/email.js — кастомный тип
module.exports = {
  kind: 'string',
  pattern: /^[^@]+@[^@]+$/,
  // shorthand: ': "email"' → автоматически разворачивается
};

Используется как { email: 'email' } в любой схеме.

Schema vs Type

  • Type — возвращает instance (валидатор) одного значения.
  • Schema — возвращает объект definitions (поля + структура).
  • Раньше было перепутано, после рефакторинга 2.0 разделено.

Красивые ошибки

При невалидном значении ошибка пишется человеко-читаемо: где, что, какой тип ожидался, какой пришёл.

Применение в стеке

Слой Что валидируется через metaschema
Metacom вход аргументы RPC-вызова
Metacom выход результат RPC-вызова
Metasql типы полей таблиц БД, миграции
Domain контракты доменных сущностей

Один формат — единая истина по типам через весь стек.

Сравнение с другими

Joi/Zod OpenAPI Metaschema
Валидация runtime да нет (статика) да
БД-схема нет нет да
Кастомные типы да extends да, в приложении
Контракты RPC косвенно да да, прямо

Мультитенантность

«Одна мультитенантность есть в том плане, что одна схема и один application, просто им пользуются разные пользователи. Складская система, добавили tenant_id, и две компании пользуются одной базой.»

🎓 Источники

См. также