vue3-storage
Version:
Vue3 plugin for work with local storage, session storage and websql from Vue context, inspired by tarojs and vue-ls.
389 lines (336 loc) • 9.84 kB
JavaScript
import 'core-js/modules/es.object.keys.js';
import 'core-js/modules/es.object.to-string.js';
import 'core-js/modules/es.regexp.constructor.js';
import 'core-js/modules/es.regexp.exec.js';
import 'core-js/modules/es.regexp.to-string.js';
function _typeof(obj) {
"@babel/helpers - typeof";
if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") {
_typeof = function _typeof(obj) {
return typeof obj;
};
} else {
_typeof = function _typeof(obj) {
return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj;
};
}
return _typeof(obj);
}
function _classCallCheck(instance, Constructor) {
if (!(instance instanceof Constructor)) {
throw new TypeError("Cannot call a class as a function");
}
}
function _defineProperties(target, props) {
for (var i = 0; i < props.length; i++) {
var descriptor = props[i];
descriptor.enumerable = descriptor.enumerable || false;
descriptor.configurable = true;
if ("value" in descriptor) descriptor.writable = true;
Object.defineProperty(target, descriptor.key, descriptor);
}
}
function _createClass(Constructor, protoProps, staticProps) {
if (protoProps) _defineProperties(Constructor.prototype, protoProps);
if (staticProps) _defineProperties(Constructor, staticProps);
return Constructor;
}
var StorageClass = function () {
function StorageClass() {
var storage = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : window.localStorage;
_classCallCheck(this, StorageClass);
this.storage = window.localStorage;
this.namespace = "pro_";
this.storage = storage;
}
_createClass(StorageClass, [{
key: "config",
value: function config(namespace) {
if (namespace === false) {
this.namespace = "";
return;
}
if (namespace) {
this.namespace = namespace;
}
}
}, {
key: "clearStorage",
value: function clearStorage(option) {
var res = {
errMsg: "clearStorage:ok"
};
if (option) {
var success = option.success,
fail = option.fail,
complete = option.complete;
try {
this.clearStorageSync();
success && success(res);
complete && complete(res);
} catch (_unused) {
var _res = {
errMsg: "clearStorage:fail"
};
fail && fail(_res);
complete && complete(_res);
return Promise.reject(_res);
}
}
return Promise.resolve(res);
}
}, {
key: "clearStorageSync",
value: function clearStorageSync() {
var removedKeys = [];
for (var i = 0; i < this.storage.length; i++) {
var key = this.storage.key(i);
if (!key) {
continue;
}
var regexp = new RegExp("^".concat(this.namespace, ".+"), "i");
if (!regexp.test(key)) {
continue;
}
removedKeys.push(key);
}
for (var _key in removedKeys) {
this.storage.removeItem(removedKeys[_key]);
}
}
}, {
key: "getStorage",
value: function getStorage(option) {
var key = option.key,
success = option.success,
fail = option.fail,
complete = option.complete;
var res = {
errMsg: "getStorage:ok"
};
var successRes = {
errMsg: "getStorage:ok",
data: ""
};
var _this$getItem = this.getItem(key),
result = _this$getItem.result,
data = _this$getItem.data;
if (result) {
var val = data;
successRes.data = val.value;
} else {
res.errMsg = "getStorage:fail data not found";
fail && fail(res);
complete && complete(res);
return Promise.reject(res);
}
success && success(successRes);
complete && complete(successRes);
return Promise.resolve(successRes);
}
}, {
key: "getStorageInfo",
value: function getStorageInfo(option) {
var res = {
errMsg: "getStorageInfo:ok"
};
if (option) {
var success = option.success,
complete = option.complete,
fail = option.fail;
try {
var info = this.getStorageInfoSync();
success && success(info);
complete && complete(res);
} catch (_unused2) {
fail && fail(res);
complete && complete(res);
}
}
return Promise.resolve(res);
}
}, {
key: "getStorageInfoSync",
value: function getStorageInfoSync() {
return {
keys: Object.keys(this.storage),
limitSize: 0,
currentSize: 0,
keysLength: this.storage.length
};
}
}, {
key: "hasKey",
value: function hasKey(key) {
var res = this.getItem(key);
return res.result;
}
}, {
key: "isExpire",
value: function isExpire(key) {
var res = this.getItem(key);
if (res.result) {
var data = res.data;
if (data.expire === null) {
return false;
}
return data.expire < new Date().getTime();
}
return false;
}
}, {
key: "key",
value: function key(index) {
return this.storage.key(index);
}
}, {
key: "removeStorage",
value: function removeStorage(option) {
var key = option.key,
success = option.success,
fail = option.fail,
complete = option.complete;
var res = {
errMsg: "removeStorage:ok"
};
if (!this.hasKey(key)) {
res.errMsg = "key ".concat(key, " not exists !");
fail && fail(res);
complete && complete(res);
return Promise.reject(res);
}
this.removeStorageSync(key);
success && success(res);
complete && complete(res);
return Promise.resolve(res);
}
}, {
key: "removeStorageSync",
value: function removeStorageSync(key) {
return this.storage.removeItem(this.getItemKey(key));
}
}, {
key: "setStorage",
value: function setStorage(option) {
var key = option.key,
data = option.data,
success = option.success,
fail = option.fail,
complete = option.complete;
var res = {
errMsg: "setStorage:ok"
};
try {
this.setStorageSync(key, data);
if (this.hasKey(key)) {
success && success(res);
complete && complete(res);
return Promise.resolve(res);
} else {
res.errMsg = "key ".concat(key, " setStorage2:fail");
fail && fail(res);
complete && complete(res);
return Promise.reject(res);
}
} catch (e) {
res.errMsg = "key ".concat(key, " setStorage:fail");
fail && fail(res);
complete && complete(res);
return Promise.reject(res);
}
}
}, {
key: "setStorageSync",
value: function setStorageSync(key, data, expire) {
var storeData = {
value: data,
expire: expire ? new Date().getTime() + expire : null
};
var stringifyValue = JSON.stringify(storeData);
this.storage.setItem(this.getItemKey(key), stringifyValue);
}
}, {
key: "getItemKey",
value: function getItemKey(key) {
return this.namespace + key;
}
}, {
key: "getItem",
value: function getItem(key) {
try {
var item;
var data = this.storage.getItem(this.getItemKey(key));
if (data !== null) {
item = JSON.parse(data);
}
if (item && _typeof(item) === "object" && "expire" in item && "value" in item) {
return {
result: true,
data: item
};
}
} catch (e) {
return {
result: false
};
}
return {
result: false
};
}
}, {
key: "getStorageSync",
value: function getStorageSync(key) {
var res = this.getItem(key);
if (res.result) {
var data = res.data;
if (!this.isExpire(key)) {
return data.value;
}
}
return undefined;
}
}]);
return StorageClass;
}();
var StorageType;
(function (StorageType) {
StorageType["Session"] = "session";
StorageType["Local"] = "local";
StorageType["WebSQL"] = "webSQL";
StorageType["IndexDB"] = "indexDB";
})(StorageType || (StorageType = {}));
var webStorage = new StorageClass();
var Vue3Storage = {
install: function install(app, options) {
var _options$namespace;
var _options = {
storage: (options === null || options === void 0 ? void 0 : options.storage) || StorageType.Local,
namespace: (_options$namespace = options === null || options === void 0 ? void 0 : options.namespace) !== null && _options$namespace !== void 0 ? _options$namespace : "pro_"
};
if (typeof window === "undefined") {
throw new Error("Vue3Storage: Storage \"".concat(_options.storage, "\" is not supported"));
}
var storage;
switch (_options.storage) {
case StorageType.Local:
storage = window.localStorage;
break;
case StorageType.Session:
storage = window.sessionStorage;
break;
default:
throw new Error("Vue3Storage: Storage \"".concat(_options.storage, "\" is not supported yet"));
}
webStorage = new StorageClass(storage);
webStorage.config(_options.namespace);
app.config.globalProperties.$storage = webStorage;
}
};
var useStorage = function useStorage() {
var namespace = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : "";
webStorage.config(namespace);
return webStorage;
};
export default Vue3Storage;
export { StorageType, useStorage };