UNPKG

@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
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, }; }