UNPKG

@codeparticle/formal

Version:

A <2kb library for validating data of any kind

57 lines (49 loc) 1.94 kB
"use strict";Object.defineProperty(exports, "__esModule", {value: true});// src/internal/utils.ts var ValidationError = class extends Error { }; var id = (x) => x; var pipeValidators = (fns, values) => (value) => { const [first, ...rest] = fns; const firstCheck = (typeof first === `function` ? first(values) : first).check(value); return rest.reduce((prevM, nextM) => prevM.chain(typeof nextM === `function` ? nextM(values)[`check`] : nextM.check), firstCheck); }; function returnConstant(x) { return () => x; } var validationErrorMessage = (fn) => { return ` Chaining validation only works if every function has a .chain() method that takes a Success or Fail object. Check the type of ${fn.constructor.name} - was it written using createRule? `; }; var checkIsValidationM = (validator) => { if (!(validator.hasOwnProperty(`value`) && validator.hasOwnProperty(`isSuccess`))) { throw new ValidationError(validationErrorMessage(validator)); } }; var validateObject = (fieldRules) => (values) => { const errors = Object.keys(fieldRules).reduce((errs, fieldName) => { if (!(fieldName in values)) { throw new Error(`Field ${fieldName} is not in the object being validated`); } const applyFieldChecks = pipeValidators(fieldRules[fieldName], values); const checkResults = applyFieldChecks(values[fieldName], values); if (!checkResults.isSuccess) { errs[fieldName] = checkResults.errors; } return errs; }, {}); return { values, hasErrors: Object.keys(errors).length > 0, errors }; }; exports.ValidationError = ValidationError; exports.id = id; exports.pipeValidators = pipeValidators; exports.returnConstant = returnConstant; exports.checkIsValidationM = checkIsValidationM; exports.validateObject = validateObject; /** * @file Util functions for validators * @name utils.js * @author Nick Krause * @license MIT */ //# sourceMappingURL=chunk-BQTT6CL2.js.map