UNPKG

@eweser/db

Version:
65 lines (55 loc) 2.11 kB
import type { Database } from '../index.js'; import type { Registry } from '../types.js'; export enum LocalStorageKey { roomRegistry = 'room_registry', accessGrantToken = 'access_grant_token', } export type LocalStoragePolyfill = Storage; export type LocalStorageService = { getItem: <T = unknown>(key: LocalStorageKey) => T | null; setItem: <T = unknown>(key: LocalStorageKey, value: T) => void; removeItem: (key: LocalStorageKey) => void; }; export const localStorageSet = (db: Database) => (key: LocalStorageKey, value: unknown) => { db.debug('#### localStorageSet', key, value); db.localStoragePolyfill.setItem('ewe_' + key, JSON.stringify(value)); }; export const localStorageGet = (db: Database) => <T>(key: LocalStorageKey): T | null => { const value = db.localStoragePolyfill.getItem('ewe_' + key); db.debug('localStorageGet', key, value); if (!value) return null; return JSON.parse(value) as T; }; export const localStorageRemove = (db: Database) => (key: LocalStorageKey) => { db.localStoragePolyfill.removeItem('ewe_' + key); }; // Helpers export const getLocalRegistry = (db: Database) => () => { const registry = db.localStorageService.getItem<Registry>( LocalStorageKey.roomRegistry ); if (typeof registry === 'object' && Array.isArray(registry)) { return registry; } return []; }; export const setLocalRegistry = (db: Database) => (registry: Registry) => { db.localStorageService.setItem(LocalStorageKey.roomRegistry, registry); }; export const clearLocalRegistry = (db: Database) => () => { db.localStorageService.removeItem(LocalStorageKey.roomRegistry); }; export const getLocalAccessGrantToken = (db: Database) => () => { return db.localStorageService.getItem<string>( LocalStorageKey.accessGrantToken ); }; export const setLocalAccessGrantToken = (db: Database) => (token: string) => { db.localStorageService.setItem(LocalStorageKey.accessGrantToken, token); }; export const clearLocalAccessGrantToken = (db: Database) => () => { db.localStorageService.removeItem(LocalStorageKey.accessGrantToken); };