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) 2.05 kB
/** * Bundle of @livelybone/storage * Generated: 2020-06-03 * Version: 1.7.2 * License: MIT * Author: 2631541504@qq.com */ !function(e,n){"object"==typeof exports&&"undefined"!=typeof module?module.exports=n():"function"==typeof define&&define.amd?define(n):(e=e||self).LocalStorageStorage=n()}(this,function(){"use strict";function r(e,n){for(var t=0;t<n.length;t++){var r=n[t];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function o(n){try{if("undefined"===n)return;return"NaN"===n?NaN:"Infinity"===n?1/0:JSON.parse(n)}catch(e){return n}}return function(){function t(){!function(e,n){if(!(e instanceof n))throw new TypeError("Cannot call a class as a function")}(this,t)}return function(e,n,t){n&&r(e.prototype,n),t&&r(e,t)}(t,null,[{key:"keys",value:function(){return Object.keys(localStorage)}},{key:"values",value:function(){return t.keys().map(function(e){return t.get(e)})}},{key:"entries",value:function(){return t.keys().map(function(e){return[e,t.get(e)]})}},{key:"forEach",value:function(n){t.keys().forEach(function(e){return n(t.get(e),e,t)})}},{key:"set",value:function(e,n){var t=function(e){if("number"==typeof e){if(isNaN(e))return"NaN";if(!isFinite(e))return"Infinity"}return JSON.stringify(e)}(n);localStorage.setItem(e,t)}},{key:"get",value:function(e){return o(localStorage.getItem(e))}},{key:"has",value:function(e){return null!==localStorage.getItem(e)}},{key:"delete",value:function(e){return!!t.has(e)&&(localStorage.removeItem(e),!0)}},{key:"clear",value:function(){localStorage.clear()}},{key:"addHandler",value:function(n){if(window.addEventListener){var e=function(e){n({key:e.key,oldValue:o(e.oldValue),newValue:o(e.newValue),event:e})};return window.addEventListener("storage",e),e}return null}},{key:"removeHandler",value:function(e){if(window.removeEventListener){var n=function(e){e instanceof Function&&window.removeEventListener("storage",e)};e instanceof Array?e.forEach(n):n(e)}}},{key:"size",get:function(){return t.keys().length}}]),t}()});