UNPKG

vue3-storage-secure

Version:

Vue3 plugin for work with local storage, session storage and websql from Vue context, inspired by tarojs, vue-ls and secure-ls.

1 lines 4.9 kB
var Vue3Storage=function(e,t,r,a,o,n,s,i){"use strict";function c(e){return(c="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function u(e,t){for(var r=0;r<t.length;r++){var a=t[r];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}var l,g=function(){function e(t){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.storage=window.localStorage,this.namespace="pro_",this.secureKey="123456",this.storage=t}var t,r,a;return t=e,(r=[{key:"config",value:function(e,t){e&&(this.namespace=e),t&&(this.secureKey=t)}},{key:"clearStorage",value:function(e){var t={errMsg:"clearStorage:ok"};if(e){var r=e.success,a=e.fail,o=e.complete;try{this.clearStorageSync(),r&&r(t),o&&o(t)}catch(e){var n={errMsg:"clearStorage:fail"};return a&&a(n),o&&o(n),Promise.reject(n)}}return Promise.resolve(t)}},{key:"clearStorageSync",value:function(){for(var e=[],t=0;t<this.storage.length;t++){var r=this.storage.key(t);r&&new RegExp("^".concat(this.namespace,".+"),"i").test(r)&&e.push(r)}for(var a in e)this.storage.removeItem(e[a])}},{key:"getStorage",value:function(e){var t=e.key,r=e.success,a=e.fail,o=e.complete,n={errMsg:"getStorage:ok"},s={errMsg:"getStorage:ok",data:""},i=this.getItem(t),c=i.result,u=i.data;if(!c)return n.errMsg="getStorage:fail data not found",a&&a(n),o&&o(n),Promise.reject(n);var l=u;return s.data=l.value,r&&r(s),o&&o(s),Promise.resolve(s)}},{key:"getStorageInfo",value:function(e){var t={errMsg:"getStorageInfo:ok"};if(e){var r=e.success,a=e.complete,o=e.fail;try{var n=this.getStorageInfoSync();r&&r(n),a&&a(t)}catch(e){o&&o(t),a&&a(t)}}return Promise.resolve(t)}},{key:"getStorageInfoSync",value:function(){return{keys:Object.keys(this.storage),limitSize:0,currentSize:0,keysLength:this.storage.length}}},{key:"hasKey",value:function(e){return this.getItem(e).result}},{key:"isExpire",value:function(e){var t=this.getItem(e);if(t.result){var r=t.data;return null!==r.expire&&r.expire<(new Date).getTime()}return!1}},{key:"key",value:function(e){return this.storage.key(e)}},{key:"removeStorage",value:function(e){var t=e.key,r=e.success,a=e.fail,o=e.complete,n={errMsg:"removeStorage:ok"};return this.hasKey(t)?(this.removeStorageSync(t),r&&r(n),o&&o(n),Promise.resolve(n)):(n.errMsg="key ".concat(t," not exists !"),a&&a(n),o&&o(n),Promise.reject(n))}},{key:"removeStorageSync",value:function(e){return this.storage.removeItem(this.getItemKey(e))}},{key:"setStorage",value:function(e){var t=e.key,r=e.data,a=e.success,o=e.fail,n=e.complete,s={errMsg:"setStorage:ok"};try{return this.setStorageSync(t,r),this.hasKey(t)?(a&&a(s),n&&n(s),Promise.resolve(s)):(s.errMsg="key ".concat(t," setStorage2:fail"),o&&o(s),n&&n(s),Promise.reject(s))}catch(e){return s.errMsg="key ".concat(t," setStorage:fail"),o&&o(s),n&&n(s),Promise.reject(s)}}},{key:"setStorageSync",value:function(e,t,r){var a={value:t,expire:r?(new Date).getTime()+r:null},o=JSON.stringify(a);this.storage.setItem(this.getItemKey(e),o)}},{key:"setSecureStorageSync",value:function(e,t,r){this.setStorageSync(e,i.AES.encrypt(JSON.stringify(t),this.secureKey).toString(),r)}},{key:"getItemKey",value:function(e){return this.namespace+e}},{key:"getItem",value:function(e){try{var t,r=this.storage.getItem(this.getItemKey(e));if(null!==r&&(t=JSON.parse(r)),t&&"object"===c(t)&&"expire"in t&&"value"in t)return{result:!0,data:t}}catch(e){return{result:!1}}return{result:!1}}},{key:"getStorageSync",value:function(e){var t=this.getItem(e);if(t.result){var r=t.data;if(!this.isExpire(e))return r.value}}},{key:"getSecureStorageSync",value:function(e){var t=this.getItem(e);if(t.result){var r=t.data;if(!this.isExpire(e))try{var a=i.AES.decrypt(r.value,this.secureKey);return JSON.parse(a.toString(i.enc.Utf8))}catch(e){return void console.error("Cannot decrypt data and parse to json.")}}}}])&&u(t.prototype,r),a&&u(t,a),e}();!function(e){e.Session="session",e.Local="local",e.WebSQL="webSQL",e.IndexDB="indexDB"}(l||(l={}));var y=t.ref(null),f={install:function(e,t){var r,a={storage:(null==t?void 0:t.storage)||l.Local,namespace:(null==t?void 0:t.namespace)||"pro_",secureKey:(null==t?void 0:t.secureKey)||""};if("undefined"==typeof window)throw new Error('Vue3Storage: Storage "'.concat(a.storage,'" is not supported'));switch(a.storage){case l.Local:r=window.localStorage;break;case l.Session:r=window.sessionStorage;break;default:throw new Error('Vue3Storage: Storage "'.concat(a.storage,'" is not supported yet'))}y.value=new g(r),y.value.config(a.namespace,a.secureKey),e.config.globalProperties.$storage=y.value}};return e.default=f,e.useStorage=function(){return y.value},Object.defineProperty(e,"__esModule",{value:!0}),e}({},vue,0,0,0,0,0,CryptoTS);