UNPKG

@rpldy/safe-storage

Version:

safe (dont throw) versions of local and session storage

30 lines 895 B
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;