UNPKG

@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

32 lines (31 loc) • 942 B
import { l as persistSource } from "../persist-core-B5VikEft.mjs"; import { observe, runInAction, toJS } from "mobx"; //#region src/adapters/sources/mobx.ts /** * Persist a mobx observable object. `toJS` for reads, `Object.assign` for * writes, `observe` for change tracking. * * @example * ```ts * import { observable } from "mobx"; * import { persistObservable } from "@stainless-code/persist/sources/mobx"; * const state = observable.object({ count: 0 }); * const persist = persistObservable(state, { name: "count" }); * ``` */ function persistObservable(observable, options) { return persistSource({ getState: () => toJS(observable), setState: (updater) => { runInAction(() => { const next = updater(toJS(observable)); Object.assign(observable, next); }); }, subscribe: (listener) => { return { unsubscribe: observe(observable, () => listener()) }; } }, options); } //#endregion export { persistObservable };