// pulled mainly from // https://github.com/faassen/solid-dexie/blob/main/src/solid-dexie.ts import {liveQuery} from 'dexie' import {Accessor, createEffect, createSignal, on, onCleanup} from 'solid-js' import {type ReconcileOptions, createStore, reconcile} from 'solid-js/store' import {NotArray} from '#lib/types.js' export function makeSignalQuery( query: () => NotArray | Promise>, options?: ReconcileOptions, ): Accessor { const [value, setValue] = createSignal() createEffect( on(query, () => { const unsub = liveQuery(query).subscribe((v) => setValue(reconcile(v, options))) onCleanup(() => { unsub.unsubscribe() }) }), ) return value } export function makeStoreQuery(query: () => T[] | Promise, options?: ReconcileOptions): T[] { const [store, setStore] = createStore([]) createEffect( on(query, () => { const unsub = liveQuery(query).subscribe((v) => { setStore(reconcile(v, options)) }) onCleanup(() => { unsub.unsubscribe() }) }), ) return store }