UNPKG

validatorshield

Version:

Universal validation (frontend + backend) with TypeScript. Includes common rules and Sequelize-backed async rules (unique, exists).

72 lines (71 loc) 2.52 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.validate = validate; const required_1 = require("./rules/required"); const email_1 = require("./rules/email"); const min_1 = require("./rules/min"); const max_1 = require("./rules/max"); const exists_1 = require("./rules/exists"); const unique_1 = require("./rules/unique"); const string_1 = require("./rules/string"); const number_1 = require("./rules/number"); const integer_1 = require("./rules/integer"); const boolean_1 = require("./rules/boolean"); const array_1 = require("./rules/array"); const url_1 = require("./rules/url"); const regex_1 = require("./rules/regex"); const in_1 = require("./rules/in"); const not_in_1 = require("./rules/not_in"); const confirmed_1 = require("./rules/confirmed"); const same_1 = require("./rules/same"); const different_1 = require("./rules/different"); const between_1 = require("./rules/between"); const size_1 = require("./rules/size"); const ruleFns = { required: required_1.required, email: email_1.email, min: min_1.min, max: max_1.max, exists: exists_1.exists, unique: unique_1.unique, string: string_1.stringRule, number: number_1.numberRule, integer: integer_1.integer, boolean: boolean_1.booleanRule, array: array_1.arrayRule, url: url_1.url, regex: regex_1.regex, in: in_1.inRule, not_in: not_in_1.notIn, confirmed: confirmed_1.confirmed, same: same_1.same, different: different_1.different, between: between_1.between, size: size_1.size, }; async function validate(data, rules) { const errors = {}; let passed = true; for (const field in rules) { const fieldRules = rules[field]; const value = data[field]; const ctx = { field, data }; const hasRequired = fieldRules.some(r => r.split(/:|,/g)[0] === 'required'); if ((value === undefined || value === null || value === '') && !hasRequired) { continue; } for (const rule of fieldRules) { const [ruleName, ...args] = rule.split(/:|,/g); const ruleFn = ruleFns[ruleName]; if (ruleFn) { const valid = await ruleFn(value, ctx, ...args); if (!valid) { passed = false; errors[field] = errors[field] || []; errors[field].push(`${field} failed validation: ${rule}`); } } } } return { passed, errors }; }