UNPKG

@livelybone/storage

Version:

A module for localStorage, support custom solution of quota exceeded. When localStorage is not supported by browser, it will be degrading to use Cookie or Map

10 lines (8 loc) 5.88 kB
/** * Bundle of @livelybone/storage * Generated: 2020-06-03 * Version: 1.7.2 * License: MIT * Author: 2631541504@qq.com */ !function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e=e||self).Storage={})}(this,function(e){"use strict";function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function t(e,t,n){return t&&o(e.prototype,t),n&&o(e,n),e}function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var i=new Map;function g(e){if("number"==typeof e){if(isNaN(e))return"NaN";if(!isFinite(e))return"Infinity"}return JSON.stringify(e)}function u(t){try{if("undefined"===t)return;return"NaN"===t?NaN:"Infinity"===t?1/0:JSON.parse(t)}catch(e){return t}}function c(e){return 22===e.code||0<=e.name.toLowerCase().indexOf("quota")}function s(){try{var e=window.localStorage,t="storage-available";e.setItem(t,t);var n=e.getItem(t)===t;return e.removeItem(t),n}catch(e){return c(e)&&0<window.localStorage.length}}function l(){try{return document.cookie||!0}catch(e){return!1}}var n=Object.freeze({stringifyJSON:g,parseJSON:u,isStorageExceeded:c,storageAvailable:s,cookieAvailable:l}),f=function(){function n(){r(this,n)}return t(n,null,[{key:"keys",value:function(){return document.cookie.match(/[^\s=;]+(?==)/g)||[]}},{key:"values",value:function(){return n.keys().map(function(e){return n.get(e)})}},{key:"entries",value:function(){return n.keys().map(function(e){return[e,n.get(e)]})}},{key:"forEach",value:function(t){n.keys().forEach(function(e){return t(n.get(e),e,n)})}},{key:"set",value:function(e,t,n){var r=2<arguments.length&&void 0!==n?n:{},o=r.maxAgeMs,a=void 0===o?"Infinity":o,i=r.domain,u=r.secure,c=r.path,s=encodeURIComponent(g(t)),l="".concat(e,"=").concat(s);if(!!a){var f=new Date,d=isFinite(+a)?+a:31536e6;f.setTime(f.getTime()+d);var y=f.toUTCString();l+=";expires=".concat(y)}l+=";path=".concat(c||"/"),i&&(l+=";domain=".concat(i)),u&&(l+=";secure=".concat(u?"secure":"")),document.cookie=l}},{key:"get",value:function(e){var t=new RegExp("(^| )".concat(e,"=([^;]*)(;|$)")),n=document.cookie.match(t);return n?u(decodeURIComponent(n[2])):null}},{key:"has",value:function(t){return n.keys().some(function(e){return e===t})}},{key:"delete",value:function(e){return!!n.has(e)&&(n.set(e,n.get(e),{maxAgeMs:-1}),!0)}},{key:"clear",value:function(){n.keys().forEach(function(e){n.delete(e)})}},{key:"size",get:function(){return n.keys().length}}]),n}(),d=function(){function n(){r(this,n)}return t(n,null,[{key:"keys",value:function(){return Object.keys(localStorage)}},{key:"values",value:function(){return n.keys().map(function(e){return n.get(e)})}},{key:"entries",value:function(){return n.keys().map(function(e){return[e,n.get(e)]})}},{key:"forEach",value:function(t){n.keys().forEach(function(e){return t(n.get(e),e,n)})}},{key:"set",value:function(e,t){var n=g(t);localStorage.setItem(e,n)}},{key:"get",value:function(e){return u(localStorage.getItem(e))}},{key:"has",value:function(e){return null!==localStorage.getItem(e)}},{key:"delete",value:function(e){return!!n.has(e)&&(localStorage.removeItem(e),!0)}},{key:"clear",value:function(){localStorage.clear()}},{key:"addHandler",value:function(t){if(window.addEventListener){var e=function(e){t({key:e.key,oldValue:u(e.oldValue),newValue:u(e.newValue),event:e})};return window.addEventListener("storage",e),e}return null}},{key:"removeHandler",value:function(e){if(window.removeEventListener){var t=function(e){e instanceof Function&&window.removeEventListener("storage",e)};e instanceof Array?e.forEach(t):t(e)}}},{key:"size",get:function(){return n.keys().length}}]),n}(),y=function(){function n(e,t){r(this,n),a(this,"storage",void 0),a(this,"exceededCallback",void 0);this.storage=function(){if(s())return d;if(("undefined"!=typeof window&&console.warn(new Error("(Storage) The Object localStorage isn't supported in your client, methods `addHandler` and `removeHandler` will do nothing when you call it")),e)&&l())return f;return new Map}(),t&&(this.exceededCallback=t)}return t(n,[{key:"keys",value:function(){return this.storage.keys()}},{key:"values",value:function(){return this.storage.values()}},{key:"entries",value:function(){return this.storage.entries()}},{key:"forEach",value:function(e){this.storage.forEach(e)}},{key:"set",value:function(t,n){try{this.storage.set(t,n)}catch(e){if(!c(e)||!this.exceededCallback)throw e;this.exceededCallback(e,[t,n],this)}}},{key:"get",value:function(e){return this.storage.get(e)}},{key:"has",value:function(e){return this.storage.has(e)}},{key:"delete",value:function(e){return this.storage.delete(e)}},{key:"clear",value:function(){this.storage.clear()}},{key:"addHandler",value:function(e){return this.storage.addHandler?this.storage.addHandler(e):null}},{key:"removeHandler",value:function(e){this.storage.removeHandler&&this.storage.removeHandler(e)}},{key:"size",get:function(){return this.storage.size}}]),n}(),v=function(){function n(e,t){r(this,n),a(this,"key",""),a(this,"storage",void 0),this.key=e,this.storage=t?f:function(e,t){var n="singleton-any-".concat(e||"default");return i.has(n)||i.set(n,t?t():{}),i.get(n)}("storage",function(){return new y(n.StorageOptions.useCookie,n.StorageOptions.exceededCallback)})}return t(n,[{key:"set",value:function(e){this.storage.set(this.key,e)}},{key:"get",value:function(){return this.storage.get(this.key)}},{key:"del",value:function(){return this.storage.delete(this.key)}}]),n}();a(v,"StorageOptions",{useCookie:!0}),e.Cookie=f,e.LocalStorage=d,e.Storage=y,e.StorageItem=v,e.StorageUtils=n,Object.defineProperty(e,"__esModule",{value:!0})});