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

161 lines (108 loc) 5.49 kB
'use strict'; exports.__esModule = true; var _pipe = require('ramda/src/pipe'); var _pipe2 = _interopRequireDefault(_pipe); var _has = require('ramda/src/has'); var _has2 = _interopRequireDefault(_has); var _filter = require('ramda/src/filter'); var _filter2 = _interopRequireDefault(_filter); var _pathOr = require('ramda/src/pathOr'); var _pathOr2 = _interopRequireDefault(_pathOr); var _map = require('ramda/src/map'); var _map2 = _interopRequireDefault(_map); var _isEmpty = require('ramda/src/isEmpty'); var _isEmpty2 = _interopRequireDefault(_isEmpty); var _isNil = require('ramda/src/isNil'); var _isNil2 = _interopRequireDefault(_isNil); var _either = require('ramda/src/either'); var _either2 = _interopRequireDefault(_either); var _reject = require('ramda/src/reject'); var _reject2 = _interopRequireDefault(_reject); var _values = require('ramda/src/values'); var _values2 = _interopRequireDefault(_values); var _unnest = require('ramda/src/unnest'); var _unnest2 = _interopRequireDefault(_unnest); var _compose = require('ramda/src/compose'); var _compose2 = _interopRequireDefault(_compose); var _curry = require('ramda/src/curry'); var _curry2 = _interopRequireDefault(_curry); var _effects = require('./effects'); var _effects2 = _interopRequireDefault(_effects); var _enhancers = require('./enhancers'); var _enhancers2 = _interopRequireDefault(_enhancers); var _limiters = require('./limiters'); var _limiters2 = _interopRequireDefault(_limiters); var _multipliers = require('./multipliers'); var _multipliers2 = _interopRequireDefault(_multipliers); var _validators = require('./validators'); var _validators2 = _interopRequireDefault(_validators); var _validate = require('../duck/validate'); var _create = require('../duck/create'); var _is = require('../util/is'); var _log = require('../util/log'); var _log2 = _interopRequireDefault(_log); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var flattenList = (0, _curry2.default)(function (duckPropName, row) { return (0, _compose2.default)((0, _reject2.default)((0, _either2.default)(_isNil2.default, _isEmpty2.default)), _unnest2.default, _values2.default, (0, _map2.default)((0, _pathOr2.default)([], [duckPropName])), (0, _filter2.default)((0, _has2.default)(duckPropName)))(row); }); exports.default = function (row) { var loggingEnabled = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true; var validationErrors = (0, _validate.getRowValidationErrors)(row); var logger = (0, _log2.default)(loggingEnabled); if (validationErrors) { logger.error('Error validating your row of ducks', validationErrors); throw new Error(validationErrors); } var getDuckMatchingAction = (0, _create.createDuckLookup)(row); var effects = flattenList('effects', row); var debouncing = flattenList('debouncing', row); var throttling = flattenList('throttling', row); var multipliers = (0, _compose2.default)(_values2.default, (0, _reject2.default)((0, _either2.default)(_isNil2.default, _isEmpty2.default)), (0, _map2.default)((0, _pathOr2.default)({}, ['multipliers'])))(row); var curriedEnhancers = (0, _enhancers2.default)(logger); var curriedEffects = (0, _effects2.default)(logger, effects); var limitAction = (0, _limiters2.default)(throttling, debouncing); var curriedMultipliers = (0, _multipliers2.default)(logger, multipliers); var curriedValidators = (0, _validators2.default)(logger, getDuckMatchingAction); return function (_ref) { var dispatch = _ref.dispatch, getState = _ref.getState; var enhanceAction = curriedEnhancers(dispatch); var validateAction = curriedValidators(getState); var multiplyAction = curriedMultipliers(dispatch); var handleAnyActionEffects = curriedEffects(dispatch); return function (next) { return function (action) { if ((0, _is.isAction)(action)) { limitAction(action).catch(function (err) { return logger.error('There was a problem throttling or debouncing: "' + action.type + '"', err); }).then(function (limitedAction) { var validatedAction = validateAction(limitedAction); return (0, _is.isAction)(validatedAction) ? validatedAction : false; }).catch(function (err) { logger.error('There was a problem validating: "' + action.type + '"', err); next(action); }).then(function (validatedAction) { if (validatedAction) { var _getDuckMatchingActio = getDuckMatchingAction(validatedAction), enhancers = _getDuckMatchingActio.enhancers; return (0, _pipe2.default)(multiplyAction, enhanceAction(enhancers))(validatedAction); } return false; }).catch(function (err) { logger.error('A multiplier and/or enhancer failed for: "' + action.type + '"', err); next(action); }).then(function (enhancedAction) { if ((0, _is.isAction)(enhancedAction)) { next(enhancedAction); handleAnyActionEffects(enhancedAction); } }).catch(function (err) { return logger.error('There was a problem executing the effect for: "' + action.type + '"', err); }); } else { logger.error('Looks like something was dispatched that is not a valid action:', action); } }; }; }; };