@dwalter/spider-dev-middleware
Version:
developer middleware for spider-store
96 lines (89 loc) • 3.5 kB
JavaScript
(function (global, factory) {
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :
typeof define === 'function' && define.amd ? define(['exports'], factory) :
(factory((global['spider-dev-middleware'] = {})));
}(this, (function (exports) { 'use strict';
function aggregateState(store) {
var state = {};
store.slices.forEach(function (slice, reducer) {
state[reducer.name] = store.peek(slice);
});
return state;
}
function throttle(fn, ms) {
var lastCalled = 0;
var timeout;
function exec(that, args) {
lastCalled = Date.now();
fn.apply(that, args);
}
return function throttled() {
var args = [];
for (var _i = 0; _i < arguments.length; _i++) {
args[_i] = arguments[_i];
}
clearTimeout(timeout);
var now = Date.now();
var nextCallDelay = lastCalled + ms - now;
if (nextCallDelay <= 0) {
exec(this, args);
}
else {
timeout = setTimeout(exec, nextCallDelay, this, args);
}
};
}
function createPersistMiddleware(_a) {
var _b = (_a === void 0 ? {} : _a).throttleMilliseconds, throttleMilliseconds = _b === void 0 ? 1000 : _b;
var persistMiddleware = function (store, _a) {
var dispatch = _a.dispatch, wrapReducer = _a.wrapReducer;
if (sessionStorage) {
try {
var state_1 = {};
var serializedState = sessionStorage.getItem('@@spider-store-state');
if (serializedState != null) {
state_1 = JSON.parse(serializedState);
}
var recordState_1 = throttle(function () {
Object.assign(state_1, aggregateState(store));
try {
sessionStorage.setItem('@@spider-store-state', JSON.stringify(state_1));
}
catch (error) {
console.error(error);
}
}, throttleMilliseconds);
return {
dispatch: function (actions) {
dispatch(actions);
recordState_1();
},
wrapReducer: function (reducer) {
if (!store.slices.has(reducer)) {
var slice = wrapReducer(reducer);
if (Object.hasOwnProperty.call(state_1, reducer.name)) {
slice.setState(state_1[reducer.name]);
}
return slice;
}
return wrapReducer(reducer);
},
};
}
catch (error) {
console.error(error);
}
}
return {};
};
return persistMiddleware;
}
function isNameCrushed() {
return isNameCrushed.name !== 'isNameCrushed';
}
if (isNameCrushed()) {
console.error(new Error('using spider-dev-middleware in minified code.'));
}
exports.createPersistMiddleware = createPersistMiddleware;
Object.defineProperty(exports, '__esModule', { value: true });
})));