/*** EXPORT ------------------------------------------- ***/ export type Storage = { get(key: string): T | null; remove(key: string): void; set(key: string, value: T): void; }; export function createLocalStorage(namespace: string): Storage { const prefix = `${namespace}:`; function available(): boolean { try { return typeof globalThis.localStorage !== "undefined"; } catch { return false; } } return { get(key: string): T | null { if (!available()) return null; const raw = globalThis.localStorage.getItem(prefix + key); if (raw === null) return null; try { return JSON.parse(raw) as T; } catch { return null; } }, remove(key: string): void { if (!available()) return; globalThis.localStorage.removeItem(prefix + key); }, set(key: string, value: T): void { if (!available()) return; globalThis.localStorage.setItem(prefix + key, JSON.stringify(value)); } }; } export function createMemoryStorage(): Storage { const store = new Map(); return { get(key: string): T | null { const raw = store.get(key); if (raw === undefined) return null; try { return JSON.parse(raw) as T; } catch { return null; } }, remove(key: string): void { store.delete(key); }, set(key: string, value: T): void { store.set(key, JSON.stringify(value)); } }; }