UNPKG

burhan-req-validator

Version:

A lightweight and customizable field validation library using Joi, inspired by Laravel's validation rules. Simplifies data validation with intuitive rule-based syntax.

95 lines (86 loc) 3.6 kB
const Joi = require('joi'); /** * Validate fields based on rules * @param {Object} data - The data to validate * @param {Object} rules - The validation rules * @returns {Object} - Validation result with error if validation fails */ const validateFields = (data, rules) => { const joiSchema = {}; // Loop through each rule and create a Joi validation schema Object.keys(rules).forEach((field) => { const rule = rules[field]; const validations = rule.split('|'); // Start with an uninitialized Joi schema let joiValidation; validations.forEach((validation) => { const [ruleType, ruleValue] = validation.split(':'); switch (ruleType) { case 'required': joiValidation = (Joi.string()).required(); break; case 'email': joiValidation = (Joi.string()).email(); break; case 'max': joiValidation = (Joi.string()).max(parseInt(ruleValue, 10)); break; case 'min': joiValidation = (Joi.string()).min(parseInt(ruleValue, 10)); break; case 'string': joiValidation = Joi.string(); break; case 'integer': joiValidation = Joi.number().integer(); break; case 'number': joiValidation = Joi.number(); break; case 'boolean': joiValidation = Joi.boolean(); break; case 'date': joiValidation = Joi.date(); break; case 'object': joiValidation = Joi.object(); break; case 'array': joiValidation = Joi.array(); break; case 'nullable': joiValidation = (joiValidation || Joi.any()).allow(null); break; case 'regex': joiValidation = (joiValidation || Joi.string()).pattern(new RegExp(ruleValue)); break; case 'items': // Specify array item type, e.g., `array|items:string` if (joiValidation && joiValidation.type === 'array') { const itemType = ruleValue; switch (itemType) { case 'string': joiValidation = joiValidation.items(Joi.string()); break; case 'number': joiValidation = joiValidation.items(Joi.number()); break; case 'object': joiValidation = joiValidation.items(Joi.object()); break; default: break; } } break; default: break; } }); joiSchema[field] = joiValidation; }); // Validate the data against the Joi schema const schema = Joi.object(joiSchema); return schema.validate(data, { abortEarly: false }); }; module.exports = { validateFields };