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
112 lines (69 loc) • 4.38 kB
JavaScript
'use strict';
exports.__esModule = true;
var _prop = require('ramda/src/prop');
var _prop2 = _interopRequireDefault(_prop);
var _defaultTo = require('ramda/src/defaultTo');
var _defaultTo2 = _interopRequireDefault(_defaultTo);
var _call = require('ramda/src/call');
var _call2 = _interopRequireDefault(_call);
var _objOf = require('ramda/src/objOf');
var _objOf2 = _interopRequireDefault(_objOf);
var _isNil = require('ramda/src/isNil');
var _isNil2 = _interopRequireDefault(_isNil);
var _ifElse = require('ramda/src/ifElse');
var _ifElse2 = _interopRequireDefault(_ifElse);
var _compose = require('ramda/src/compose');
var _compose2 = _interopRequireDefault(_compose);
var _identity = require('ramda/src/identity');
var _identity2 = _interopRequireDefault(_identity);
var _merge = require('ramda/src/merge');
var _merge2 = _interopRequireDefault(_merge);
var _converge = require('ramda/src/converge');
var _converge2 = _interopRequireDefault(_converge);
var _F = require('ramda/src/F');
var _F2 = _interopRequireDefault(_F);
var _unless = require('ramda/src/unless');
var _unless2 = _interopRequireDefault(_unless);
var _always = require('ramda/src/always');
var _always2 = _interopRequireDefault(_always);
var _T = require('ramda/src/T');
var _T2 = _interopRequireDefault(_T);
var _curry = require('ramda/src/curry');
var _curry2 = _interopRequireDefault(_curry);
var _is = require('../util/is');
var _machines = require('../machines');
var _levels = require('../validators/levels');
var _levels2 = _interopRequireDefault(_levels);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
exports.default = (0, _curry2.default)(function (logger, getDuckMatchingAction, getState, action) {
if ((0, _is.isAction)(action)) {
try {
var _validatorsByLevel;
var _getDuckMatchingActio = getDuckMatchingAction(action),
machines = _getDuckMatchingActio.machines,
_getDuckMatchingActio2 = _getDuckMatchingActio.isPayloadValid,
isPayloadValid = _getDuckMatchingActio2 === undefined ? _T2.default : _getDuckMatchingActio2,
_getDuckMatchingActio3 = _getDuckMatchingActio.getValidationErrors,
getValidationErrors = _getDuckMatchingActio3 === undefined ? (0, _always2.default)(null) : _getDuckMatchingActio3,
_getDuckMatchingActio4 = _getDuckMatchingActio.pruneInvalidFields,
pruneInvalidFields = _getDuckMatchingActio4 === undefined ? (0, _always2.default)(action) : _getDuckMatchingActio4,
_getDuckMatchingActio5 = _getDuckMatchingActio.stateMachinesPropName,
stateMachinesPropName = _getDuckMatchingActio5 === undefined ? 'states' : _getDuckMatchingActio5,
_getDuckMatchingActio6 = _getDuckMatchingActio.validationLevel,
validationLevel = _getDuckMatchingActio6 === undefined ? _levels2.default.CANCEL : _getDuckMatchingActio6;
if ((0, _machines.noMachines)(machines)) {
return action;
}
var validatorsByLevel = (_validatorsByLevel = {}, _validatorsByLevel[_levels2.default.CANCEL] = (0, _unless2.default)(isPayloadValid, _F2.default), _validatorsByLevel[_levels2.default.LOG] = (0, _converge2.default)(_merge2.default, [_identity2.default, (0, _compose2.default)((0, _ifElse2.default)(_isNil2.default, (0, _always2.default)({}), (0, _objOf2.default)('validationErrors')), getValidationErrors)]), _validatorsByLevel[_levels2.default.PRUNE] = pruneInvalidFields, _validatorsByLevel[_levels2.default.STRICT] = (0, _unless2.default)((0, _converge2.default)(_machines.isActionTypeInCurrentState, [getState, _identity2.default, (0, _always2.default)({ machines: machines, stateMachinesPropName: stateMachinesPropName })]), _F2.default), _validatorsByLevel);
/* Get the validator matching the validationLevel setting and run it on the action payload */
var validatedAction = (0, _call2.default)((0, _compose2.default)((0, _defaultTo2.default)(_identity2.default), (0, _prop2.default)(validationLevel))(validatorsByLevel), action);
/* either pass the validated action forward through the middleware chain or stop it right here */
if ((0, _is.isAction)(validatedAction)) {
return validatedAction;
}
} catch (error) {
logger.error('Unable to validate action: ' + action.type, error);
}
}
return false;
});