UNPKG

redux-persist

Version:

persist and rehydrate redux stores

48 lines (39 loc) 2.26 kB
'use strict'; exports.__esModule = true; var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; exports.default = autoMergeLevel2; function autoMergeLevel2(inboundState, originalState, reducedState, _ref) { var debug = _ref.debug; var newState = _extends({}, reducedState); // only rehydrate if inboundState exists and is an object if (inboundState && (typeof inboundState === 'undefined' ? 'undefined' : _typeof(inboundState)) === 'object') { Object.keys(inboundState).forEach(function (key) { // ignore _persist data if (key === '_persist') return; // if reducer modifies substate, skip auto rehydration if (originalState[key] !== reducedState[key]) { if (process.env.NODE_ENV !== 'production' && debug) console.log('redux-persist/stateReconciler: sub state for key `%s` modified, skipping.', key); return; } if (isPlainEnoughObject(reducedState[key])) { // if object is plain enough shallow merge the new values (hence "Level2") newState[key] = _extends({}, newState[key], inboundState[key]); return; } // otherwise hard set newState[key] = inboundState[key]; }); } if (process.env.NODE_ENV !== 'production' && debug && inboundState && (typeof inboundState === 'undefined' ? 'undefined' : _typeof(inboundState)) === 'object') console.log('redux-persist/stateReconciler: rehydrated keys \'' + Object.keys(inboundState).join(', ') + '\''); return newState; } /* autoMergeLevel2: - merges 2 level of substate - skips substate if already modified - this is essentially redux-perist v4 behavior */ function isPlainEnoughObject(o) { return o !== null && !Array.isArray(o) && (typeof o === 'undefined' ? 'undefined' : _typeof(o)) === 'object'; }