yax
Version:
Yet another store using redux. (Inspired by vuex and dva)
45 lines (42 loc) • 1.36 kB
JavaScript
import _extends from "@babel/runtime/helpers/extends";
import { combineReducers } from 'redux';
export function forEachValue(obj, fn) {
Object.keys(obj).forEach(function (key) {
return fn(obj[key], key);
});
}
export function isObject(obj) {
return obj !== null && typeof obj === 'object';
}
export function isPromise(val) {
return val && typeof val.then === 'function';
}
export function assert(condition, msg) {
if (!condition) throw new Error("[yax] " + msg);
}
export 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);
};
}
export function mapReducers(reducers) {
var combined = combineReducers(reducers);
return function (state, action) {
var reducer = function reducer(p, k) {
var _extends2;
return _extends({}, p, (_extends2 = {}, _extends2[k] = state[k], _extends2));
};
var combinedState = Object.keys(reducers).reduce(reducer, {});
return Object.assign({}, state, combined(combinedState, action));
};
}
export function getNestedState(state, path) {
return path.length ? path.reduce(function (state, key) {
return state[key];
}, state) : state;
}