UNPKG

zent

Version:

一套前端设计语言和基于React的实现

93 lines (75 loc) 2.03 kB
"use strict"; 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; }