@discuzq/sdk
Version:
discuz dsk
240 lines (200 loc) • 6.53 kB
JavaScript
;
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;