import { ReactiveStore, ReactivityConfig } from "../Persisters"; import { createEffect, createRoot, untrack } from "solid-js"; import { createMutable, modifyMutable, produce } from "solid-js/store"; export function solidPersister(): ReactivityConfig { return { createStore: (init: T): ReactiveStore => { const [mutableStore, disposeStore] = createRoot((disposeStore) => [ createMutable(init), disposeStore, ]); return { get data() { return mutableStore as any; }, update: (doUpdate) => { modifyMutable(mutableStore, produce(doUpdate)); }, dispose: disposeStore, }; }, doWatch: (doSomething) => { const dispose = createRoot((dispose) => { createEffect(doSomething); return dispose; }); return { dispose, }; }, untrack, }; }