@jill64/svelte-storage
Version:
🗃️ Type-Safe Web Storage API Wrapper for Svelte
35 lines (34 loc) • 1.15 kB
JavaScript
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;
};