UNPKG

@lesjoursfr/browser-tools

Version:

Some browser tools for events & DOM manipulation.

74 lines (73 loc) 2.08 kB
import Cookies from "js-cookie"; export var KeyValueStorageTypes; (function (KeyValueStorageTypes) { KeyValueStorageTypes[KeyValueStorageTypes["localStorage"] = 1] = "localStorage"; KeyValueStorageTypes[KeyValueStorageTypes["cookies"] = 2] = "cookies"; })(KeyValueStorageTypes || (KeyValueStorageTypes = {})); export class AbstractKeyValueStore { type; constructor(type) { this.type = type; } } export class LocalStorageKeyValueStore extends AbstractKeyValueStore { constructor() { super(KeyValueStorageTypes.localStorage); } getItem(key) { const value = window.localStorage.getItem(key); return value === null ? undefined : value; } setItem(key, value) { window.localStorage.setItem(key, value); } removeItem(key) { window.localStorage.removeItem(key); } } export class CookiesKeyValueStore extends AbstractKeyValueStore { expires; constructor(expires) { super(KeyValueStorageTypes.cookies); this.expires = expires; } getItem(key) { const value = Cookies.get(key); return value; } setItem(key, value) { Cookies.set(key, value, { expires: this.expires }); } removeItem(key) { Cookies.remove(key); } } /** * Check if we can use the localStorage. * @returns {boolean} */ export function isLocalStorageAvailable() { const mod = "localStorageTest"; try { localStorage.setItem(mod, mod); localStorage.removeItem(mod); return true; } catch (_err) { return false; } } let store = null; /** * Get the default store for the browser. * The default store is the localStorage if it's available or the cookies. * * @param {number} expires the expires value for the cookies * @returns {AbstractKeyValueStore} the default store */ export function getDefaultKeyValueStore(expires = 365) { if (store === null) { store = isLocalStorageAvailable() ? new LocalStorageKeyValueStore() : new CookiesKeyValueStore(expires); } return store; }