react-chrome-redux
Version:
A set of utilities for building Redux applications in Google Chrome Extensions.
60 lines (48 loc) • 1.74 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = applyMiddleware;
function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }
// Function taken from redux source
// https://github.com/reactjs/redux/blob/master/src/compose.js
function compose() {
for (var _len = arguments.length, funcs = Array(_len), _key = 0; _key < _len; _key++) {
funcs[_key] = arguments[_key];
}
if (funcs.length === 0) {
return function (arg) {
return arg;
};
}
if (funcs.length === 1) {
return funcs[0];
}
return funcs.reduce(function (a, b) {
return function () {
return a(b.apply(undefined, arguments));
};
});
}
// Based on redux implementation of applyMiddleware to support all standard
// redux middlewares
function applyMiddleware(store) {
for (var _len2 = arguments.length, middlewares = Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {
middlewares[_key2 - 1] = arguments[_key2];
}
var _dispatch = function dispatch() {
throw new Error('Dispatching while constructing your middleware is not allowed. ' + 'Other middleware would not be applied to this dispatch.');
};
var middlewareAPI = {
getState: store.getState.bind(store),
dispatch: function dispatch() {
return _dispatch.apply(undefined, arguments);
}
};
middlewares = (middlewares || []).map(function (middleware) {
return middleware(middlewareAPI);
});
_dispatch = compose.apply(undefined, _toConsumableArray(middlewares))(store.dispatch);
store.dispatch = _dispatch;
return store;
}