@rehooks/local-storage
Version:
React hook for local-storage
69 lines • 2.66 kB
JavaScript
;
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