UNPKG

@discuzq/sdk

Version:

discuz dsk

240 lines (200 loc) 6.53 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); require("core-js/modules/es.array.concat.js"); require("core-js/modules/es.object.to-string.js"); require("core-js/modules/es.regexp.to-string.js"); Object.defineProperty(exports, "__esModule", { value: true }); exports.default = exports.LocalBridge = void 0; var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty")); var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck")); var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass")); function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; } function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; } var localStorage = null; if (process.env.DISCUZ_ENV === 'mini') { // 小程序端本地存储处理,对应 web 端的本地存储 api,抹平使用差异 localStorage = require('./mini.js').default; } if (process.env.DISCUZ_ENV === 'web') { var isBrowser = typeof window !== 'undefined'; localStorage = isBrowser ? window.localStorage : {}; } /** * 是否支持本地存储 * @returns {boolean} true:支持;false:不支持 */ function isSupport() { var key = '__dzqtest_ls__'; try { if (localStorage) { localStorage.setItem(key, key); localStorage.getItem(key); return true; } return false; } catch (error) { return false; } } // 基数 var expiresRadix = 10; /** * LocalBridge 类 */ var LocalBridge = /*#__PURE__*/function () { function LocalBridge() { var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; (0, _classCallCheck2.default)(this, LocalBridge); // 前缀 var prefix = '__dzqls-'; var expires = 0; this.options = _objectSpread({ prefix: prefix, expires: expires }, options); this.expiresPrefix = "expires".concat(this.options.prefix); } /** * 获取加上前缀的键 * @param {string} key 键 * @returns {string} */ (0, _createClass2.default)(LocalBridge, [{ key: "getKey", value: function getKey(key) { var prefix = this.options.prefix; return "".concat(prefix).concat(key); } /** * 获取加上前缀的设置了过期时间的键 * @param {string} key 键 * @returns {string} */ }, { key: "getExpiresKey", value: function getExpiresKey(key) { return "".concat(this.expiresPrefix).concat(key); } /** * 获取当前时间,单位秒 * @returns {number} */ }, { key: "getCurrentTime", value: function getCurrentTime() { return Math.floor(new Date().getTime() / 1000); } /** * 获取相当于当前时间的过期时间 * @param {number} expires 过期时间 * @returns {string} */ }, { key: "getExpiresValue", value: function getExpiresValue(expires) { return (this.getCurrentTime() + expires).toString(expiresRadix); } /** * 剔除指定的存储项以及存储项对应的过期项 * @param {string} key 键 */ }, { key: "shiftItem", value: function shiftItem(key) { if (!isSupport()) return false; localStorage.removeItem(this.getKey("".concat(key))); localStorage.removeItem(this.getExpiresKey("".concat(key))); } /** * 判断是否过期 * @param {string} key 键 * @returns {boolean} */ }, { key: "isExpired", value: function isExpired(key) { if (!isSupport()) return; var expiresValue = localStorage.getItem(this.getExpiresKey(key)); if (expiresValue) { var expirationTime = parseInt(expiresValue, expiresRadix); var nowTime = this.getCurrentTime(); // 如果当前时间大于过期时间,删除对应的项 if (nowTime > expirationTime) { this.shiftItem(key); return true; } } } /** * 设置数据项 * @param {string} key 键 * @param {any} value 值 * @param {number} expires 过期时间,单位秒 */ }, { key: "set", value: function set(key, value, expires) { var rkey = this.getKey(key); var valueJson = value; if (!isSupport()) return false; try { valueJson = JSON.stringify(value); } catch (error) { return false; } try { localStorage.setItem(rkey, valueJson); var expiresKey = this.getExpiresKey(key); if (expires) { localStorage.setItem(expiresKey, this.getExpiresValue(expires)); } else { localStorage.removeItem(expiresKey); } } catch (error) { return false; } return true; } /** * 获取指定项的值 * @param {string} key 键 * @returns {any} */ }, { key: "get", value: function get(key) { if (!isSupport()) return null; // 如果过期就直接返回 null 值 if (this.isExpired(key)) return null; var value = localStorage.getItem(this.getKey(key)); try { return JSON.parse(value); } catch (error) { return value; } } /** * 删除指定项 * @param {string} key 建 */ }, { key: "remove", value: function remove(key) { if (!isSupport()) return; this.shiftItem(key); } /** * 清空所有存储项 */ }, { key: "clear", value: function clear() { if (!isSupport()) return; localStorage.clear(); } }]); return LocalBridge; }(); exports.LocalBridge = LocalBridge; ; var _default = LocalBridge; exports.default = _default;