UNPKG

refer

Version:

redux-like library for handling global state on functional style

85 lines (72 loc) 2.25 kB
'use strict'; exports.__esModule = true; function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } var _types = require('./types'); var _mapValues = require('./mapValues'); var _mapValues2 = _interopRequireDefault(_mapValues); var _constants = require('./constants'); var createDispatche = function createDispatche(table) { if (!_types.isObj(table)) { throw new Error('createDispatche(table): Expected table to be an object which is ' + table); } var dispatch = function dispatch(_x, _x2) { var _again = true; _function: while (_again) { var key = _x, value = _x2; handler = undefined; _again = false; var handler = undefined; switch (true) { case key === null: return value; case key === undefined: throw new Error('dispatch(key, value): Expected the key not to be undefined'); case key === _constants.GET_TABLE: return table; // special key to get table case _types.isStr(key) || _types.isNum(key): handler = table[key]; break; default: handler = key; } switch (true) { case handler == null: return value; case _types.isFn(handler): return _types.isThenable(value) ? value.then(handler) : handler(value); case _types.isStr(handler) || _types.isNum(handler): _x = handler; _x2 = value; _again = true; continue _function; case _types.isArr(handler): return dispatchOnList(handler, value); case _types.isThenable(handler): return handler.then(function (asyncHandler) { return dispatch(asyncHandler, value); }); case _types.isObj(handler): return _mapValues2['default'](handler, function (item) { return dispatch(item, value); }); default: return value; } } }; var dispatchOnList = function dispatchOnList(handlers, value) { for (var i = 0, len = handlers.length; i < len; i++) { value = dispatch(handlers[i], value); if (_types.isThenable(value)) { return i === len - 1 ? value : value.then(function (result) { return dispatch(handlers.slice(i + 1), result); }); } } return value; }; return dispatch; }; exports['default'] = createDispatche; module.exports = exports['default'];