prefer-storage
Version:
1. key: 键名不唯一 2. value: 只能存储string类型 3. time: 没有过期时间 4. handle data: 不能对数据统一处理
2 lines (1 loc) • 11.2 kB
JavaScript
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).PreStorage={})}(this,(function(e){"use strict";var t=function(e,n){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n])},t(e,n)};function n(e,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function r(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}var r=function(){return r=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var o in t=arguments[n])Object.prototype.hasOwnProperty.call(t,o)&&(e[o]=t[o]);return e},r.apply(this,arguments)};function o(e,t,n,r){return new(n||(n=Promise))((function(o,i){function c(e){try{s(r.next(e))}catch(e){i(e)}}function a(e){try{s(r.throw(e))}catch(e){i(e)}}function s(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(c,a)}s((r=r.apply(e,t||[])).next())}))}function i(e,t){var n,r,o,i,c={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:a(0),throw:a(1),return:a(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function a(a){return function(s){return function(a){if(n)throw new TypeError("Generator is already executing.");for(;i&&(i=0,a[0]&&(c=0)),c;)try{if(n=1,r&&(o=2&a[0]?r.return:a[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,a[1])).done)return o;switch(r=0,o&&(a=[2&a[0],o.value]),a[0]){case 0:case 1:o=a;break;case 4:return c.label++,{value:a[1],done:!1};case 5:c.label++,r=a[1],a=[0];continue;case 7:a=c.ops.pop(),c.trys.pop();continue;default:if(!(o=c.trys,(o=o.length>0&&o[o.length-1])||6!==a[0]&&2!==a[0])){c=0;continue}if(3===a[0]&&(!o||a[1]>o[0]&&a[1]<o[3])){c.label=a[1];break}if(6===a[0]&&c.label<o[1]){c.label=o[1],o=a;break}if(o&&c.label<o[2]){c.label=o[2],c.ops.push(a);break}o[2]&&c.ops.pop(),c.trys.pop();continue}a=t.call(e,c)}catch(e){a=[6,e],r=0}finally{n=o=0}if(5&a[0])throw a[1];return{value:a[0]?a[1]:void 0,done:!0}}([a,s])}}}"function"==typeof SuppressedError&&SuppressedError;var c=function(e){var t,n,o,i;this.name=e.name,this.keys=e.keys,this.expire=null!==(t=e.expire)&&void 0!==t?t:0,this.idbVersion=null!==(n=e.idbVersion)&&void 0!==n?n:1,this.idbStoreOption=null!==(o=e.idbStoreOption)&&void 0!==o?o:{keyPath:"_key"},this.idCreateIndexs=null!==(i=e.idCreateIndexs)&&void 0!==i?i:["pathname"],this.beforeGet=e.beforeGet,this.afterGet=e.afterGet,this.beforeSet=e.beforeSet,this.afterSet=e.afterSet,this.idBeforeGet=e.idBeforeGet,this.idBeforeSet=e.idBeforeSet,this.idAfterSet=e.idAfterSet;var c=r({},e);delete c.name,delete c.keys,delete c.expire,delete c.idbVersion,delete c.beforeGet,delete c.afterGet,delete c.beforeSet,delete c.afterSet,delete c.idBeforeGet,delete c.idBeforeSet,delete c.idAfterSet,this.options=c},a={boolean:{read:function(e){return"true"===e},writeIn:function(e){return String(e)}},object:{read:function(e){return JSON.parse(e)},writeIn:function(e){return JSON.stringify(e)}},array:{read:function(e){return JSON.parse(e)},writeIn:function(e){return JSON.stringify(e)}},number:{read:function(e){return+e},writeIn:function(e){return String(e)}},any:{read:function(e){return e},writeIn:function(e){return String(e)}},string:{read:function(e){return e},writeIn:function(e){return e}},map:{read:function(e){return new Map(JSON.parse(e))},writeIn:function(e){return JSON.stringify(Array.from(e))}},set:{read:function(e){return new Set(JSON.parse(e))},writeIn:function(e){return JSON.stringify(Array.from(e))}},date:{read:function(e){return new Date(e)},writeIn:function(e){return e.toISOString()}}},s=function(e,t){return"".concat(e,"__").concat(t)},u=function(e){return Object.prototype.toString.call(e).slice(8,-1).toLowerCase()},f=function(e,t){return 60*t*60*1e3+new Date(e).getTime()<(new Date).getTime()},l=function(){return window.location.href.replace(/^https?:\/\/[^/]+(.*)$/,"$1")},d=function(e,t,n){var r,o=(a[e]||{}).writeIn;o||n(new Error("当前存储的数据类型是".concat(e,", 没有匹配到")));try{r=o(t)}catch(e){r=t}return r},h=function(e){function t(t,n){var r=e.call(this,n)||this;return r.storageName=t,r.storage="local"===t?window.localStorage:window.sessionStorage,r}return n(t,e),t.prototype.get=function(e){return o(this,void 0,void 0,(function(){var t=this;return i(this,(function(n){switch(n.label){case 0:return[4,new Promise((function(n,r){var o=t,i=o.storage,c=o.name;if(t.keys.includes(e)){var u,l=s(c,e),d=i.getItem(l),h="",p="";try{var v=(u=JSON.parse(d)).type,y=u.value,b=u.time,S=u.pathname;h=b,p=S;var m=a[v];u=m?m.read(y):d}catch(e){u=d}var w={v:u,_isDue:!!h&&f(h,t.expire),_key:l,_pathname:p};t.beforeGet?t.beforeGet(w).then((function(e){n(e||w)})).catch((function(e){r(e||new Error("".concat("beforeGet","规则没通过,请查看beforeGet函数")))})):n(w),t.afterGet&&t.afterGet(e)}else r(new Error("当前".concat(t.name,"项目中").concat(t.storageName+"Storage","不存在").concat(e,"的键,请确定参数是否正确")))}))];case 1:return[2,n.sent()]}}))}))},t.prototype.set=function(e,t){return o(this,void 0,void 0,(function(){var n=this;return i(this,(function(o){switch(o.label){case 0:return[4,new Promise((function(o,i){var c=n,a=c.name,f=c.storage;if(n.keys.includes(e)){var h=s(a,e),p=u(t);"null"===p&&i(new Error("当前要存储的值为null"));var v=d(p,t,i),y={type:p,time:(new Date).toLocaleString(),pathname:l(),value:v};n.beforeSet?n.beforeSet(r(r({},y),{key:e,value:t})).then((function(e){var t=u(e.value);"null"===t&&i(new Error("当前要存储的值为null")),e.type=t,e.value=d(t,e.value,i),f.setItem(h,JSON.stringify(e)),n.setOrRemoveSuccess(o,e)})).catch((function(e){i(e)})):(f.setItem(h,JSON.stringify(y)),n.setOrRemoveSuccess(o,y))}else i(new Error("当前".concat(n.name,"项目中").concat(n.storageName+"Storage","不能添加").concat(e,"的键,请在initProject函数调用处添加白名单")))}))];case 1:return o.sent(),[2]}}))}))},t.prototype.remove=function(e){return o(this,void 0,void 0,(function(){var t=this;return i(this,(function(n){switch(n.label){case 0:return[4,new Promise((function(n,r){if(t.keys.includes(e)){var o=t,i=o.name,c=o.storage,a=s(i,e);c.removeItem(a),t.setOrRemoveSuccess(n)}else r(new Error("当前".concat(t.name,"项目中").concat(t.storageName+"Storage","不存在").concat(e,"的键,请确定参数是否正确")))}))];case 1:return n.sent(),[2]}}))}))},t.prototype.setOrRemoveSuccess=function(e,t){this.afterSet?this.afterSet(t).then((function(){e(!0)})).catch((function(e){console.log(e)})):e(!0)},t.prototype.clear=function(){return o(this,void 0,void 0,(function(){var e=this;return i(this,(function(t){switch(t.label){case 0:return[4,new Promise((function(t){var n=e,r=n.name,o=n.storage;Object.keys(o).forEach((function(t){new RegExp("^".concat(r,".*$")).test(t)&&e.remove(t)})),t(!0)}))];case 1:return t.sent(),[2]}}))}))},t}(c),p=h,v=function(e){function t(t,n){var r=this,o=t.objectStoreName,i=t.storeOption,c=t.idCreateIndexs;if((r=e.call(this,n)||this).objectStoreName=o,r.storeOption=i,r.createIndexs=c,!window.indexedDB)throw new Error("本浏览器不支持indexDB");return r.init(),r}return n(t,e),t.prototype.init=function(){var e=this,t=indexedDB.open(this.name,this.idbVersion);this.readyPromise=new Promise((function(t,n){e.readyPromiseResolve=t,e.readyPromiseReject=n})),t.onupgradeneeded=function(t){e.db=t.target.result,e.createStore()},t.onsuccess=function(t){e.db=t.target.result,e.readyPromiseResolve()},t.onerror=function(t){e.readyPromiseReject(t.target.error)}},t.prototype.ready=function(){return o(this,void 0,void 0,(function(){return i(this,(function(e){switch(e.label){case 0:return[4,this.readyPromise];case 1:return e.sent(),[2]}}))}))},t.prototype.createStore=function(){var e,t;if(!this.db.objectStoreNames.contains(this.objectStoreName)){var n=this.db.createObjectStore(this.objectStoreName,null!==(e=this.storeOption)&&void 0!==e?e:this.idbStoreOption);(null!==(t=this.createIndexs)&&void 0!==t?t:this.idCreateIndexs).forEach((function(e){n.createIndex(e,e,{unique:!1})}))}},t.prototype.getObjectStore=function(e){return this.db.transaction(this.objectStoreName,e).objectStore(this.objectStoreName)},t.prototype.listenResult=function(e,t,n,r,o){var i=this;e.onsuccess=function(e){var c=e.target.result||{},a=c.value,s=c.time,u=c.pathname;if("get"===r){var l={v:a,_isDue:f(s,i.expire),_pathname:u};i.idBeforeGet?i.idBeforeGet(l).then((function(e){t(e||l)})).catch((function(e){n(e||new Error("".concat("beforeGet","规则没通过,请查看beforeGet函数")))})):t(l)}else["set","remove"].includes(r)&&i.idAfterSet?i.idAfterSet(o).then((function(){t(!0)})).catch((function(e){console.log(e)})):t(!0)},e.onerror=function(e){n(e.target.error)}},t.prototype.get=function(e){return o(this,void 0,void 0,(function(){var t=this;return i(this,(function(n){switch(n.label){case 0:return[4,new Promise((function(n,r){t.ready().then((function(){if(t.keys.includes(e)){var o=t.getObjectStore("readonly").get(e);t.listenResult(o,n,r,"get")}else r(new Error("当前".concat(t.name,"数据库中的表").concat(t.objectStoreName,"不存在").concat(e,"的键,请确定参数是否正确")))})).catch(r)}))];case 1:return[2,n.sent()]}}))}))},t.prototype.set=function(e,t){return o(this,void 0,void 0,(function(){var n=this;return i(this,(function(o){switch(o.label){case 0:return[4,new Promise((function(o,i){n.ready().then((function(){var c,a;if(n.keys.includes(e)){var s,u=function(e,t){var n;return(n={})[e]=t,n}(null!==(a=null===(c=n.storeOption)||void 0===c?void 0:c.keyPath)&&void 0!==a?a:n.idbStoreOption.keyPath,e),f=r(r({},u),{value:t,time:(new Date).toLocaleString(),pathname:l()}),d=n.getObjectStore("readwrite");n.idBeforeSet?n.idBeforeSet(f).then((function(e){s=d.put(e),n.listenResult(s,o,i,"set",e)})).catch((function(e){i(e)})):(s=d.put(f),n.listenResult(s,o,i,"set",f))}else i(new Error("当前".concat(n.name,"数据库中不能添加").concat(e,"的键,请在initProject函数调用处添加白名单")))})).catch(i)}))];case 1:return o.sent(),[2]}}))}))},t.prototype.remove=function(e){return o(this,void 0,void 0,(function(){var t=this;return i(this,(function(n){switch(n.label){case 0:return[4,new Promise((function(n,r){t.ready().then((function(){if(t.keys.includes(e)){var o=t.getObjectStore("readwrite").delete(e);t.listenResult(o,n,r,"remove")}else r(new Error("当前".concat(t.name,"数据库中表").concat(t.objectStoreName,"不存在").concat(e,"的键,请确定参数是否正确")))})).catch(r)}))];case 1:return n.sent(),[2]}}))}))},t.prototype.clear=function(){return o(this,void 0,void 0,(function(){var e=this;return i(this,(function(t){switch(t.label){case 0:return[4,new Promise((function(t,n){e.ready().then((function(){var r=e.getObjectStore("readwrite").clear();e.listenResult(r,t,n,"clear")})).catch(n)}))];case 1:return t.sent(),[2]}}))}))},t}(c);e.IndexDBStorage=v,e.PreferStorage=p}));