@mub22/validity
Version:
Lightweight JavaScript validation library inspired by Laravel's rule syntax. Validate fields and forms easily with built-in rules and error messages.
42 lines (41 loc) • 1.44 kB
JavaScript
import { rules } from "./rules";
import { rulesWithData } from "./rulesWithData";
import { locales } from "./locales";
const defaultLocale = locales.en;
export function validate(value, ruleString, data) {
const ruleList = ruleString.split("|");
const errors = [];
for (const rule of ruleList) {
/* Rules */
const [ruleName, arg] = rule.split(":");
const fn = rules[ruleName];
const fnWithData = rulesWithData[ruleName];
/* Validations */
if (!fn && !fnWithData)
continue;
/* Response */
if (fn) {
let isValidFn = fn(value, arg);
if (!isValidFn) {
const template = defaultLocale[ruleName] || "Validation failed";
const message = template.replace(":arg", arg || "");
errors.push(message);
}
}
else if (fnWithData) {
const { isValidFnWithData, args } = fnWithData(value, arg, data);
if (!isValidFnWithData) {
const template = defaultLocale[ruleName] || "Validation failed";
let message = template;
for (const [key, value] of Object.entries(args || {})) {
message = message.replace(`:${key}`, value);
}
errors.push(message);
}
}
}
return {
valid: errors.length === 0,
errors,
};
}