UNPKG

@vovkasm/redux-persist

Version:

persist and rehydrate redux stores

113 lines (105 loc) 3.46 kB
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; }; import setImmediate from '../utils/setImmediate'; var noStorage = function noStorage() { /* noop */return null; }; if (process.env.NODE_ENV !== 'production') { noStorage = function noStorage() { console.error('redux-persist asyncLocalStorage requires a global localStorage object. Either use a different storage backend or if this is a universal redux application you probably should conditionally persist like so: https://gist.github.com/rt2zz/ac9eb396793f95ff3c3b'); return null; }; } function _hasStorage(storageType) { if ((typeof window === 'undefined' ? 'undefined' : _typeof(window)) !== 'object' || !(storageType in window)) { return false; } try { var storage = window[storageType]; var testKey = 'redux-persist ' + storageType + ' test'; storage.setItem(testKey, 'test'); storage.getItem(testKey); storage.removeItem(testKey); } catch (e) { if (process.env.NODE_ENV !== 'production') console.warn('redux-persist ' + storageType + ' test failed, persistence will be disabled.'); return false; } return true; } function hasLocalStorage() { return _hasStorage('localStorage'); } function hasSessionStorage() { return _hasStorage('sessionStorage'); } function getStorage(type) { if (type === 'local') { return hasLocalStorage() ? window.localStorage : { getItem: noStorage, setItem: noStorage, removeItem: noStorage, getAllKeys: noStorage }; } if (type === 'session') { return hasSessionStorage() ? window.sessionStorage : { getItem: noStorage, setItem: noStorage, removeItem: noStorage, getAllKeys: noStorage }; } } export default function (type, config) { var storage = getStorage(type); return { getAllKeys: function getAllKeys(cb) { return new Promise(function (resolve, reject) { try { var keys = []; for (var i = 0; i < storage.length; i++) { keys.push(storage.key(i)); } setImmediate(function () { cb && cb(null, keys); resolve(keys); }); } catch (e) { cb && cb(e); reject(e); } }); }, getItem: function getItem(key, cb) { return new Promise(function (resolve, reject) { try { var s = storage.getItem(key); setImmediate(function () { cb && cb(null, s); resolve(s); }); } catch (e) { cb && cb(e); reject(e); } }); }, setItem: function setItem(key, string, cb) { return new Promise(function (resolve, reject) { try { storage.setItem(key, string); setImmediate(function () { cb && cb(null); resolve(); }); } catch (e) { cb && cb(e); reject(e); } }); }, removeItem: function removeItem(key, cb) { return new Promise(function (resolve, reject) { try { storage.removeItem(key); setImmediate(function () { cb && cb(null); resolve(); }); } catch (e) { cb && cb(e); reject(e); } }); } }; }