Поскольку 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? Дико многословное говно без возможностей которое без костылей невозможно использовать в принципе.