yax
Version:
Yet another store using redux. (Inspired by vuex and dva)
66 lines (52 loc) • 1.73 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
exports.__esModule = true;
exports.forEachValue = forEachValue;
exports.isObject = isObject;
exports.isPromise = isPromise;
exports.assert = assert;
exports.composeReducers = composeReducers;
exports.mapReducers = mapReducers;
exports.getNestedState = getNestedState;
var _extends3 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
var _redux = require("redux");
function forEachValue(obj, fn) {
Object.keys(obj).forEach(function (key) {
return fn(obj[key], key);
});
}
function isObject(obj) {
return obj !== null && typeof obj === 'object';
}
function isPromise(val) {
return val && typeof val.then === 'function';
}
function assert(condition, msg) {
if (!condition) throw new Error("[yax] " + msg);
}
function composeReducers() {
for (var _len = arguments.length, reducers = new Array(_len), _key = 0; _key < _len; _key++) {
reducers[_key] = arguments[_key];
}
return function (state, action) {
return reducers.reduce(function (p, r) {
return r(p, action);
}, state);
};
}
function mapReducers(reducers) {
var combined = (0, _redux.combineReducers)(reducers);
return function (state, action) {
var reducer = function reducer(p, k) {
var _extends2;
return (0, _extends3["default"])({}, p, (_extends2 = {}, _extends2[k] = state[k], _extends2));
};
var combinedState = Object.keys(reducers).reduce(reducer, {});
return Object.assign({}, state, combined(combinedState, action));
};
}
function getNestedState(state, path) {
return path.length ? path.reduce(function (state, key) {
return state[key];
}, state) : state;
}