willow-utils
Version:
工具库
130 lines (111 loc) • 3.68 kB
JavaScript
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