UNPKG

ruddy

Version:

Modularized state-management tools for modern front-end applications. Manage dispatched messages in a clean and predictable way for either small or large scale projects

187 lines (172 loc) 8.41 kB
import _default25 from 'ramda/src/not'; import _default24 from 'ramda/src/both'; import _default23 from 'ramda/src/either'; import _default22 from 'ramda/src/any'; import _default21 from 'ramda/src/valuesIn'; import _default20 from 'ramda/src/applyTo'; import _default19 from 'ramda/src/when'; import _default18 from 'ramda/src/prop'; import _default17 from 'ramda/src/T'; import _default16 from 'ramda/src/defaultTo'; import _default15 from 'ramda/src/nth'; import _default14 from 'ramda/src/is'; import _default13 from 'ramda/src/reject'; import _default12 from 'ramda/src/isEmpty'; import _default11 from 'ramda/src/reduce'; import _default10 from 'ramda/src/toPairsIn'; import _default9 from 'ramda/src/curry'; import _default8 from 'ramda/src/always'; import _default7 from 'ramda/src/unless'; import _default6 from 'ramda/src/trim'; import _default5 from 'ramda/src/toUpper'; import _default4 from 'ramda/src/compose'; import _default3 from 'ramda/src/keys'; import _default2 from 'ramda/src/__'; import _default from 'ramda/src/contains'; var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; import { isPlainObj, coerceToString } from '../util'; import VALIDATION_LEVELS from './levels'; /** * Checks to see if a given value is one of the valid options for * Validation Level, which are: STRICT, CANCEL, PRUNE, LOG * * @func * @sig String -> Boolean * @param {String} level One of the four valid options: STRICT, CANCEL, PRUNE, LOG * @returns {Boolean} Whether or not a level is valid for middleware validations */ export var isValidationLevel = _default(_default2, _default3(VALIDATION_LEVELS)); /** * Sets a validation level, one of: STRICT, CANCEL, PRUNE, LOG. * The default - if no valid level is passed in - is CANCEL. * * @func * @sig String -> String * @param {String|*} level A validation level for the middleware * @returns {String} One of [STRICT, CANCEL, PRUNE, LOG] */ export var makeValidationLevel = _default4(_default7(isValidationLevel, _default8('CANCEL')), _default5, _default6, coerceToString); /** * A curried function that examines the result of a [spected](https://github.com/25th-floor/spected) validator on a given * input object and replaces the validation failures with the original value * from the input object. * * @func * @sig {k: v} -> {k: v} -> {k: v} * @param {Object} original The input object which when pushed through a validator yielded the associated validations * @param {Object} validations An object of validation results (true for pass, String[] for fails) * @returns {Object} The validations result pruned of all invalid fields */ export var pruneInvalidFields = _default9(function (original, validations) { return _default4(_default11(function (prunedObj, _ref) { var _extends2; var key = _ref[0], val = _ref[1]; var value = isPlainObj(val) ? pruneInvalidFields(original[key], val) : val; if (isPlainObj(value) && _default12(value)) { return prunedObj; } return _extends({}, prunedObj, (_extends2 = {}, _extends2[key] = value === true ? original[key] : value, _extends2)); }, {}), _default13(_default4(_default14(Array), _default15(1))), _default10)(validations); }); /** * A function that inspects a validations object (validated fields are Bools of `true` and * invalid fields are arrays of error messages) and removes everything but the errors * * @func * @sig {k: v} -> {k: v} * @param {Object} validations An object of validation results (true for pass, String[] for fails) * @returns {Object} The validations result pruned of all valid fields */ export var pruneValidatedFields = _default4(_default11(function (prunedObj, _ref2) { var _extends3; var key = _ref2[0], val = _ref2[1]; var value = isPlainObj(val) ? pruneValidatedFields(val) : val; if (isPlainObj(value) && _default12(value)) { return prunedObj; } return _extends({}, prunedObj, (_extends3 = {}, _extends3[key] = value, _extends3)); }, {}), _default13(function (pairs) { return pairs[1] === true; }), _default10); /** * Simple retrieval function that looks for an action payload validator matching * a given action. * * @func * @sig {k: v} -> {k: v} -> ({k: v} -> Boolean) * @returns {Function} A validator matching a dispatched action (or a Function * always returning True if none exists) */ export var getValidatorForAction = function getValidatorForAction(validators) { return _default4(_default16(_default17), _default18(_default2, validators), _default18('type')); }; /** * Creates a function that will receive a dispatched action and apply a validator function that * matches its action type (if one exists) and prune away any fields that failed validation. * The set of validator functions from which to match the action type is the only dependency. * * @func * @sig {k: v} -> {k: v} -> {k: v} * @param {Object} validators An object of curried [spected](https://github.com/25th-floor/spected) validator functions * @returns {Object} The original action paylod, minus any invalid fields */ export var createPayloadPruner = function createPayloadPruner() { var validators = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; return function () { var action = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; return _default4(_default19(_default12, _default8(null)), pruneInvalidFields(action), function (validate) { return validate(action); }, getValidatorForAction(validators))(action); }; }; /** * Creates a function that will receive a dispatched action and apply a validator function that * matches its action type (if one exists). * The set of validator functions from which to match the action type is the only dependency. * * @func * @sig {k: v} -> {k: v} -> {k: v} * @param {Object} validators An object of curried [spected](https://github.com/25th-floor/spected) validator functions * @returns {Object|null} An Object of validation errors, if any, otherwise returns null */ export var createPayloadValidationsLogger = function createPayloadValidationsLogger() { var validators = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; return function () { var action = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; return _default4(_default19(_default12, _default8(null)), pruneValidatedFields, _default20(action), getValidatorForAction(validators))(action); }; }; /** * Inspects an Object (can even be nested) of validation results, for props which failed validation. * Because the [spected](https://github.com/25th-floor/spected) tool follows a common validations format * where failed validations are Arrays of validation errors (strings) and validated props are simply marked `true`, * this function is only doing a quick, simple check for any props that are arrays. * * @func * @sig {k: v} -> Boolean * @param {Object} validations * @returns {Boolean} */ export var anyValidationFailures = function anyValidationFailures() { var validations = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; return _default4(_default22(_default23(_default24(isPlainObj, anyValidationFailures), _default14(Array))), _default21)(validations); }; /** * Creates a function that will receive a dispatched action and apply a validator function that * matches its action type (if one exists) and do a basic pass/fail check. * The set of validator functions from which to match the action type is the only dependency. * * @func * @sig {k: v} -> {k: v} -> Boolean * @param {Object} validators An object of curried [spected](https://github.com/25th-floor/spected) validator functions * @returns {Function} A validator function to be applied against a dispatched action */ export var createPayloadValidator = function createPayloadValidator() { var validators = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; return function () { var action = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; return _default4(_default25, anyValidationFailures, _default20(action), getValidatorForAction(validators))(action); }; };