Поскольку json-schema - говно я с горя упоролся и наваял свою правильную схему/валидатор

var config = {
meta : {
desc : "Bicycle validator example",
keywords : {
any : "^ANY",
or : "_or_",
notRequired : "^_",
comment : " - .*$"
}
},
types : {},
schema : {
ANY : {
id : "number - required parameter",
_name : "string - not required, but can be",
a_or_b_or_c : "string - need one of them",
e_or_d : "string - or them",
_list : ["string","number","string - list with types in this order"],
_list_etc : ["string","number - repeated list with spectype ...", "..."],
_st : "anything - any field",
_anyobj : {ANY : "anything - object with any content"}
}
}

}

Фичи/как работает:

  • Отдельно метаданные, отдельно схема, отдельно типы
  • Сама схема записывается так, как будто это объект. Структуры (объект, массив) пишутся как есть, типы пишутся строкой. И никаких сраных "type" : "string" везде и прочей не нужной писанины.
  • Требуемые поля объекта пишутся как есть. Необязательные поля должны соответствовать регулярке notRequired в meta.
  • Если допустимы произвольные наборы полей, то поле должно соответствовать регулярке any в meta
  • Если нужно одно из полей, но не все сразу или некоторые из них, то названия разделяются регуляркой or в meta
  • Из описания типа регуляркой вырезается шаблон комментария
  • Типы должны проверяться. Встроенные - int (целое), number, string. (Еще не тестил)
  • Массивы с типами, последовательностью типов (повтор - спецтип "...", хардкод)
  • Хардкодный тип anything для чего угодно, в т.ч. структур.
  • Можно делать свои типы добавляя функции в types. Функция получает значение, возвращает true - если всё нормально и что угодно другое, если всё плохо. При этом возвращаемое запишется в выдаваемый объект
  • На выходе выдаётся структура подобная входной с пожеланиями для автора в проблемных местах


Планируется

  • Схема в типах
  • Причесать код
  • Протестить работу с типами
  • Сделать тесты для всего
  • Ссылки и вложенные структуры
  • Вызов валидатора типов с параметрами (например intRng 1 100, для целых от 1 до 100 или цепочки типа int rng 1 100)


Говнокод сей поделки там -> https://github.com/Crutchmaster/bvalid-js

Приветствуются предложения, пожелания, проклятия.



Для затравки. Это самая охрененая схема/валидатор. Вы видели json-schema? Дико многословное говно без возможностей которое без костылей невозможно использовать в принципе.








 , , ,






URL записи