export type JsonStorage = Pick; export function isRecord(value: unknown): value is Record { return Boolean(value) && typeof value === 'object' && !Array.isArray(value); } export function getJsonStorage(storage?: JsonStorage | null) { if (storage !== undefined) { return storage; } if (typeof window === 'undefined') { return null; } return window.localStorage; } export function readStoredJson({ key, parse, storage, }: { key: string; parse: (value: unknown) => T | null; storage?: JsonStorage | null; }) { const resolvedStorage = getJsonStorage(storage); if (!resolvedStorage) { return null; } const raw = resolvedStorage.getItem(key); if (!raw) { return null; } try { return parse(JSON.parse(raw)); } catch { return null; } } export function writeStoredJson({ key, value, storage, }: { key: string; value: unknown; storage?: JsonStorage | null; }) { const resolvedStorage = getJsonStorage(storage); if (!resolvedStorage) { return false; } resolvedStorage.setItem(key, JSON.stringify(value)); return true; } export function removeStoredJson(key: string, storage?: JsonStorage | null) { getJsonStorage(storage)?.removeItem(key); }