@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
JavaScript
/**
* 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})});