Код Junior HTTP-сервер, Express, NestJS обновлено

Валидация тела запроса по схеме

Условие

Напиши validate(schema, body): возвращает массив ошибок { path, msg } (пустой, если всё хорошо). Схема: объект поле → правило, правило { type: 'string' | 'number' | 'boolean', required?: boolean, min?, max? }. Для строк min/max ограничивают длину, для чисел значение.

Сообщения: required (поле обязательно и отсутствует или null), type (не тот тип; NaN не число), min, max. На поле не больше одной ошибки, проверки в этом порядке. Поля, которых нет в схеме, дают ошибку unknown (защита от mass assignment). Порядок ошибок: сначала поля схемы в порядке схемы, потом неизвестные в порядке тела.

Примеры

validate({"email":{"type":"string","required":true}}, {"email":"a@b.ru"}) // []
validate({"email":{"type":"string","required":true}}, {}) // [{"path":"email","msg":"required"}]
validate({"age":{"type":"number","min":18}}, {"age":"20"}) // [{"path":"age","msg":"type"}]

Как подойти

Подсказки: 2
  1. Сначала required, потом тип, потом min/max.
  2. Не путай «нет значения» с «ложное значение»: 0, false, "" это значения.

Решите в тренажёре

Редактор с автотестами прямо в браузере. Можно решить спокойно, вслух или под таймером, как на собесе.