UNPKG

@dwalter/spider-dev-middleware

Version:
96 lines (89 loc) 3.5 kB
(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 }); })));