Как добавить функцию проверки в joi.any ()? - PullRequest
0 голосов
/ 06 апреля 2020

Как я могу расширить joi.any(), чтобы добавить к нему новое правило? Так что я могу использовать это правило для любого существующего типа, например joi.boolean() или joi.string().

Я знаю, как расширить joi расширением, чтобы добавить новый пользовательский тип, но делаю это таким образом Я не могу комбинировать новый тип с существующими типами.

Я хотел бы иметь возможность делать joi.boolean().myrule() и joi.string().myrule() и для любых других существующих типов. Как мне это сделать? Я использую его с последней версией joi, если это имеет значение.

Есть ли способ сделать joi.any.extend(), чтобы добавить новые правила в any() вместо joi.extend() (который добавляет новый типа).

1 Ответ

0 голосов
/ 07 апреля 2020

Я видел код и не думаю, что это возможно (поправьте меня, если я ошибаюсь). Самое близкое, что вы можете сделать, это: https://github.com/hapijs/joi/blob/master/test/extend.js#L95

const custom = Joi.extend({
  type: /^s/, // <<< regex for type
  rules: {
    hello: {
      validate(value, helpers, args, options) {
        return 'hello';
      },
    },
  },
});

const string = custom.string().hello();
expect(string.type).to.equal('string');
expect(string.hello().validate('goodbye').value).to.equal('hello');

const symbol = custom.symbol().hello();
expect(symbol.type).to.equal('symbol');
expect(symbol.hello().validate(Symbol('x')).value).to.equal('hello');

Потому что в https://github.com/hapijs/joi/blob/master/lib/index.js#263:

for (const type of joi._types) {
    if (extension.type.test(type)) {
        const item = Object.assign({}, extension);
        item.type = type;
        item.base = joi[type]();
        extended.push(item);
    }
}

Джой проверка всех типов с помощью регулярного выражения type.

Может быть, вы можете создать customType с регулярным выражением, которое соответствует типам, которым вы хотите соответствовать (или всем типам). Тогда вместо, например, Joi.string() вы можете использовать custom.string().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...