Всем привет! Меня зовут Виталий. Я — инженер по автоматизации тестирования (SDET). Сегодня хотелось бы рассказать личную новость для меня и моего творения — Ajv-ts. На днях я смог выпустить версию 0.7. Предыдщая версия(0.6.3) была сделана 1 февраля 2024 года! 😱
Кстати, почему родился этот проект можете почитать здесь.
официальное лого ajv библиотеки. К сожалению не придумал свое лого Дисклеимер
Ajv-ts не является официальной библиотекой от команды ajv.
Из-за того, что данный проект родился спонтанно, — то и работаю я над ним в нерабочее время, отсюда и большой перерыв между релизами.
Итак давайте уже перейдем к новым штукам
Error map
Я давно уже приметил эту фичу, но руки никак не доходили. Дело в том, что я использую ajv-error — это официальная библиотека от команды ajv. До этого уже был заложен АПИ, но дело в том, что в прошлой версии в функцию error я принимал только строку. Т.е. любая ошибка была бы сконвертирована в то, что написали. Хотя часто возникают ситуации, когда надо отдельно валидировать. Например тип, и дополнительные свойства у объекта могут возвращать разные сообщения об ошибке. Общее сообщение я не убирал по той причине, что сам ajv-error поддерживает такой формат.
Вот несколько примеров
import s from ‘ajv-ts’ // before const before = s.object({a: s.number()}).strict().error(‘Some Error’) before.parse(123) // Some Error // extra property is not allowed before.parse({a: 1, b: ‘qwe’}) // Some Error //after const after = s .object({a: s.number()}) .strict() .error({ _: ‘generic error’, type: ‘not an object’, additionalProperties: ‘extra props are not allowed’ }) after.parse(123) // not an object // extra props are not allowed after.parse({a: 1, b: ‘qwe’}) // extra props are not allowed Статическая проверка длинны для строк и массивов
Часто схемы описываются сразу, т.е. динамического контента не так много. Плюс заметил такой баг — я перепутал minLength и maxLength. Тогда мне в голову пришла идея — во что бы то ни стало потренироваться с typescript и попробовать сделать так, чтобы ты низачто не перепутал длины местами.
Уже предвижу коментарии в духе — «так если у меня схема динамическая? получается typescript будет ругаться». Да, придется кастить. Как я уже написал до этого — обычно(≠ всегда) схемы описываются сразу. Я пошел на компромисс. Бонусом к этой фиче идет то, что для конечного полльзователя я сделал удобную систему ошибок.
import s from ‘ajv-ts’ //before const before = s.string().minLength(3).maxLength(1) // schema OK before.parse(‘hi’) // anyway you got an error! // after const after = s.string().minLength(3).maxLength(1) // [never, «RangeError: MinLength are greater than MaxLength. MinLength: 3. MaxLength: 1»] // but! const max = 1 as number; const after2 = s.string.maxLength(max) // Error! `RangeError: MinLength are greater than MaxLength. MinLength: undefined. MaxLength: ${number}`
Вот и все, что я хотел показать. Как я уже подчеркивал — это мой личный проект и он требует усилий после основной деятельности, А порой не хватает мотивации на реализацию всех функции, которые задумал.
Тем не менее спасибо за прочтение и правильных схем вам!
Ссылки к статье:
ajv-ts GitHub release 0.7
ajv-errors
telegram канал haradkou_sdet
Не призываю, но я с недавних пор начал вести свой телеграм канал. Пишу обо все, что придет в голову, часто это касается своих проектов, вопросов с собеседований и новостей из мира IT — @haradkou_sdet. Спасибо за подержку!
Источник: habr.com