UNPKG

@jill64/svelte-storage

Version:

🗃️ Type-Safe Web Storage API Wrapper for Svelte

35 lines (34 loc) 1.15 kB
import { typedStorage } from '@jill64/typed-storage'; import {} from './serde'; // eslint-disable-next-line @typescript-eslint/no-explicit-any export const storage = (table, options) => { const entries = Object.entries(table); const storage = {}; const descriptors = entries.reduce((acc, [key, serde]) => { const { get, set, addListener } = typedStorage(key, serde, options); let store = $state(get()); addListener((event) => { if (event.newValue !== null) { const obj = serde.deserialize(event.newValue); set(obj); store = obj; } }); // @ts-expect-error Invalid property descriptor. acc[key] = { get() { return store; }, // eslint-disable-next-line @typescript-eslint/no-explicit-any set(value) { set(value); store = value; }, enumerable: true, configurable: true }; return acc; }, {}); Object.defineProperties(storage, descriptors); return storage; };