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

30 lines (29 loc) • 893 B
import { l as persistSource } from "../persist-core-B5VikEft.mjs"; import { snapshot, subscribe } from "valtio/vanilla"; //#region src/adapters/sources/valtio.ts /** * Persist a valtio proxy. `snapshot` for reads, `Object.assign` for writes, * `subscribe` for change tracking. * * @example * ```ts * import { proxy } from "valtio"; * import { persistProxy } from "@stainless-code/persist/sources/valtio"; * const state = proxy({ count: 0 }); * const persist = persistProxy(state, { name: "count" }); * ``` */ function persistProxy(proxyObject, options) { return persistSource({ getState: () => snapshot(proxyObject), setState: (updater) => { const next = updater(snapshot(proxyObject)); Object.assign(proxyObject, next); }, subscribe: (listener) => { return { unsubscribe: subscribe(proxyObject, () => listener()) }; } }, options); } //#endregion export { persistProxy };