@stainless-code/persist
Version:
Hydration-aware persistence for any reactive store — zero-dep persistSource core; codecs, backends, cross-tab transport, source + framework hydration adapters ship as opt-in recipes
26 lines (25 loc) • 1.17 kB
text/typescript
import { c as PersistOptions, o as PersistApi } from "../persist-core-B649IGlX.mjs";
import { Atom, WritableAtom } from "jotai";
//#region src/adapters/sources/jotai.d.ts
/** jotai's Store type — structural to avoid importing internals. */
interface JotaiStore {
get: <T>(atom: Atom<T>) => T;
set: <T>(atom: WritableAtom<T, [T | ((prev: T) => T)], void>, value: T | ((prev: T) => T)) => void;
sub: (atom: Atom<unknown>, listener: () => void) => () => void;
}
/**
* Persist a writable jotai atom via a jotai `Store`. `get`/`set`/`sub` map
* to `PersistableSource` for the atom's value.
*
* @example
* ```ts
* import { atom, createStore } from "jotai";
* import { persistAtom } from "@stainless-code/persist/sources/jotai";
* const countAtom = atom(0);
* const store = createStore();
* const persist = persistAtom(store, countAtom, { name: "count" });
* ```
*/
declare function persistAtom<TState, TPersistedState = TState>(store: JotaiStore, atom: WritableAtom<TState, [TState | ((prev: TState) => TState)], void>, options: PersistOptions<TState, TPersistedState>): PersistApi<TState, TPersistedState>;
//#endregion
export { JotaiStore, persistAtom };