@rpldy/safe-storage
Version:
safe (dont throw) versions of local and session storage
30 lines • 895 B
JavaScript
import { hasWindow } from "@rpldy/shared";
const safeStorageCreator = storageType => {
let isSupported = false;
const checkSupport = () => {
try {
if (hasWindow() && storageType in window) {
const key = "__lsTest";
window[storageType].setItem(key, `__test-${Date.now()}`);
window[storageType].removeItem(key);
isSupported = true;
}
} catch (ex) {}
};
checkSupport();
const base = {
isSupported,
length: 0
};
const safeStorage = ["key", "getItem", "setItem", "removeItem", "clear"].reduce((res, method) => {
res[method] = (...args) => isSupported ? window[storageType][method](...args) : undefined;
return res;
}, base);
Object.defineProperty(safeStorage, "length", {
get() {
return isSupported ? window[storageType].length : 0;
}
});
return safeStorage;
};
export default safeStorageCreator;