UNPKG

@rehooks/local-storage

Version:
69 lines 2.66 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.storage = exports.MemoryStorageProxy = exports.LocalStorageProxy = exports.localStorageAvailable = void 0; var is_browser_1 = require("./is-browser"); /** * Test if localStorage API is available * From https://developer.mozilla.org/en-US/docs/Web/API/Web_Storage_API/Using_the_Web_Storage_API#Feature-detecting_localStorage * @returns {boolean} */ function localStorageAvailable() { try { var x = '@rehooks/local-storage:' + new Date().toISOString(); localStorage.setItem(x, x); localStorage.removeItem(x); return true; } catch (e) { return is_browser_1.isBrowser() && e instanceof DOMException && ( // everything except Firefox e.code === 22 || // Firefox e.code === 1014 || // test name field too, because code might not be present // everything except Firefox e.name === 'QuotaExceededError' || // Firefox e.name === 'NS_ERROR_DOM_QUOTA_REACHED') && // acknowledge QuotaExceededError only if there's something already stored (localStorage && localStorage.length !== 0); } } exports.localStorageAvailable = localStorageAvailable; var LocalStorageProxy = /** @class */ (function () { function LocalStorageProxy() { } LocalStorageProxy.prototype.getItem = function (key) { return localStorage.getItem(key); }; LocalStorageProxy.prototype.setItem = function (key, value) { localStorage.setItem(key, value); }; LocalStorageProxy.prototype.removeItem = function (key) { localStorage.removeItem(key); }; return LocalStorageProxy; }()); exports.LocalStorageProxy = LocalStorageProxy; var MemoryStorageProxy = /** @class */ (function () { function MemoryStorageProxy() { this._memoryStorage = new Map(); } MemoryStorageProxy.prototype.getItem = function (key) { var _a; return (_a = this._memoryStorage.get(key)) !== null && _a !== void 0 ? _a : null; }; MemoryStorageProxy.prototype.setItem = function (key, value) { this._memoryStorage.set(key, value); }; MemoryStorageProxy.prototype.removeItem = function (key) { this._memoryStorage.delete(key); }; return MemoryStorageProxy; }()); exports.MemoryStorageProxy = MemoryStorageProxy; var proxyStorageFrom = function (isAvailable) { return isAvailable ? new LocalStorageProxy() : new MemoryStorageProxy(); }; exports.storage = proxyStorageFrom(localStorageAvailable()); //# sourceMappingURL=storage.js.map