Parse string in yaml format into Joi validator.
$ npm install yaml-joi
or
$ yarn add yaml-joi
import yamlToJoi from 'yaml-joi';
const yamlLoadOpts = {};
const yamlSchema = `
type: string
allowEmpty: true
limitation:
- min: 3
- max: 5
- regex: !!js/regexp /^(\S*)$/
`;
const validator = yamlToJoi(yamlSchema, yamlLoadOpts);
validator.validate(null).error === null;
validator.validate('a').error !== null;
validator.validate('abc').error === null;
validator.validate('a b c').error !== null;
validator.validate('abcdef').error !== null;
import yamlToJoi from 'yaml-joi';
const yamlSchema = `
type: object
limitation:
- keys:
name:
isSchema: true
type: string
allowEmpty: nothing
limitation:
- min: 5
- max: 24
`;
const validator = yamlToJoi(yamlSchema);
validator.validate({}).error === null;
validator.validate({ name: 'str' }).error !== null;
validator.validate({ name: 'Alita' }).error === null;
Get more at cases.yml.
export const DefineChat: DefineModel<Chat> = {
Attr: {
chatId: {
type: CHAR(22),
allowNull: false,
},
...
},
Sample: {
chatId: 'abcdefghijklmnopqrstuv',
...
},
Validator: yamlJoi(`
type: object
isSchema: true
limitation:
- keys:
chatId:
type: string
isSchema: true
limitation:
- length: 22
- token: []
...
export function validate<T>(instance: T, validator: Schema): T {
const { error, value } = validator.validate(instance);
if (error) throw error;
return value;
}
export function validateModel<T>(define: DefineModel<T>, attrs: Partial<T>): T {
return validate({ ...define.Sample, ...attrs }, define.Validator);
}
export function validateAttr<T, U>(define: DefineModel<T>, attrs: U): U {
return pick(validateModel(define, attrs), ...Object.keys(attrs)) as U;
}
- Validate attributes: alitajs/notification/app/service/chat.ts#L27-L28
export default class ChatService extends Service {
...
public getAllAccountChats(accountId: string) {
const where = validateAttr(DefineChat, { accountId });
return this.ctx.model.Chat.findAll({ where });
}
...
}