zent
Version:
一套前端设计语言和基于React的实现
93 lines (75 loc) • 2.03 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.NOT_FOUND = undefined;
var _defineProperty2 = require("babel-runtime/helpers/defineProperty");
var _defineProperty3 = _interopRequireDefault(_defineProperty2);
exports.read = read;
exports.write = write;
exports.remove = remove;
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
var NOT_FOUND = exports.NOT_FOUND = function NOT_FOUND() {};
function read(namespace, key) {
var ns = readNamespace(namespace);
if (ns !== NOT_FOUND && ns && ns.hasOwnProperty(key)) {
return ns[key];
}
return NOT_FOUND;
}
/**
* 将 key 对应的 value 写入 namespace 下
* 比较暴力,如果无法写入会把所有 Design 相关的缓存清除
* @param {string} namespace
* @param {string} key
* @param {any} value
* @return {bool} true 表示成功,false 写入失败
*/
function write(namespace, key, value) {
var ns = readNamespace(namespace);
var isRemove = value === undefined;
// 不存在就创建一个新的
if (ns === NOT_FOUND) {
ns = {};
}
if (isRemove) {
// 删除
delete ns[key];
} else {
// 新增/更新
ns[key] = value;
}
if (writeNamespace(namespace, ns)) {
return true;
}
// 写入失败,尝试清空 namespace 下的所有值再重试
ns = (0, _defineProperty3["default"])({}, key, value);
return writeNamespace(namespace, ns);
}
function remove(namespace, key) {
return write(namespace, key, undefined);
}
function readNamespace(namespace) {
var ns = localStorage.getItem(namespace);
if (!ns) {
return NOT_FOUND;
}
try {
return JSON.parse(ns);
} catch (ex) {
return NOT_FOUND;
}
}
function writeNamespace(namespace, value) {
try {
if (Object.keys(value).length === 0) {
localStorage.removeItem(namespace);
} else {
var ns = JSON.stringify(value);
localStorage.setItem(namespace, ns);
}
} catch (ex) {
return false;
}
return true;
}