UNPKG

willow-utils

Version:

工具库

130 lines (111 loc) 3.68 kB
function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); } import memoize from 'lodash/memoize'; import throttle from 'lodash/throttle'; import { inBrowser } from './commonUtil'; import global from 'global'; function clearCacheSync() { getFromSession.cache.clear(); getFromLocal.cache.clear(); } var clearCacheAsync = throttle(clearCacheSync, 1000, { leading: false }); var runtimeSession = global.__meo_runtimeSession = global.__meo_runtimeSession || {}; var runtimeLocal = global.__meo_runtimeLocal = global.__meo_runtimeLocal || {}; function getFromRuntimeStorage(storage, key) { if (!(key in storage)) return null; return storage[key]; } export var obj2json = function obj2json(obj) { if (obj === undefined) return 'undefined'; return JSON.stringify(obj); }; export var json2obj = function json2obj(jsonStr) { if (jsonStr === '') return null; if (jsonStr === 'undefined') return undefined; return JSON.parse(jsonStr); }; function checkExpire(obj, key) { if (_typeof(obj) == 'object' && obj && /^__storage_expire_timestamp(,__storage_value_object)?$/.test(Object.keys(obj).join(','))) { var expire = obj.__storage_expire_timestamp, value = obj.__storage_value_object; if (typeof expire == 'number' && expire < Date.now()) { return removeFromLocal(key); } else { return value; } } return obj; } export var set2Session = function set2Session(key, value) { clearCacheSync(); if (inBrowser()) { sessionStorage.setItem(key, obj2json(value)); } else { runtimeSession[key] = obj2json(value); } }; export var set2Local = function set2Local(key, value) { var expire = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; clearCacheSync(); if (expire instanceof Date) expire = expire.getTime(); if (typeof expire == 'number' && expire < Date.now()) return removeFromLocal(key); value = { __storage_expire_timestamp: expire, __storage_value_object: value }; if (inBrowser()) { localStorage.setItem(key, obj2json(value)); } else { runtimeLocal[key] = obj2json(value); } }; export var getFromSession = memoize(function (key) { clearCacheAsync(); if (inBrowser()) { var jsonStr = sessionStorage.getItem(key); return json2obj(jsonStr); } else { var _jsonStr = getFromRuntimeStorage(runtimeSession, key); return json2obj(_jsonStr); } }); export var getFromLocal = memoize(function (key) { clearCacheAsync(); var value; if (inBrowser()) { var jsonStr = localStorage.getItem(key); value = json2obj(jsonStr); } else { var _jsonStr2 = getFromRuntimeStorage(runtimeLocal, key); value = json2obj(_jsonStr2); } return checkExpire(value, key); }); export var removeFromSession = function removeFromSession(key) { clearCacheSync(); if (inBrowser()) { sessionStorage.removeItem(key); } else { delete runtimeSession[key]; } }; export var removeFromLocal = function removeFromLocal(key) { clearCacheSync(); if (inBrowser()) { localStorage.removeItem(key); } else { delete runtimeLocal[key]; } }; export default { obj2json: obj2json, json2obj: json2obj, set2Session: set2Session, set2Local: set2Local, getFromSession: getFromSession, getFromLocal: getFromLocal, removeFromSession: removeFromSession, removeFromLocal: removeFromLocal }; //# sourceMappingURL=maps/storageUtil.js.map