UNPKG

zustand-storage

Version:

A universal solution combining @aivron/sync-storage and zust-api for React (web & desktop). It merges local persistence with a Zustand-inspired API to provide core storage operations, bulk actions, JSON support, TTL, and integrated React hooks.

84 lines (77 loc) 2.11 kB
import { StorageEngine } from "./types"; import { getStorageItem, setStorageItem, updateStorageItem, removeStorageItem } from '@aivron/sync-storage'; /** * In-memory fallback storage if neither @aivron/sync-storage nor window.localStorage is available. */ const fallbackData: { [key: string]: string } = {}; /** * Fallback storage engine implementation using an in-memory object. */ const fallbackStorage: StorageEngine = { getItem(key: string): string | null { return fallbackData[key] || null; }, setItem(key: string, value: string): void { fallbackData[key] = value; }, removeItem(key: string): void { delete fallbackData[key]; } }; /** * Default storage engine that attempts to use @aivron/sync-storage first, * then falls back to window.localStorage, and finally uses an in-memory fallback. */ const defaultStorageEngine: StorageEngine = { getItem(key: string): string | null { try { // Use getStorageItem from @aivron/sync-storage if available. if (typeof getStorageItem === "function") { return getStorageItem(key); } } catch (e) { // If error, try next option. } try { return window.localStorage.getItem(key); } catch (e) { return fallbackStorage.getItem(key); } }, setItem(key: string, value: string): void { try { if (typeof setStorageItem === "function") { setStorageItem(key, value); return; } } catch (e) { // Fall through to next option. } try { window.localStorage.setItem(key, value); } catch (e) { fallbackStorage.setItem(key, value); } }, removeItem(key: string): void { try { if (typeof removeStorageItem === "function") { removeStorageItem(key); return; } } catch (e) { // Fall through to next option. } try { window.localStorage.removeItem(key); } catch (e) { fallbackStorage.removeItem(key); } } }; export default defaultStorageEngine;