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

29 lines (28 loc) • 1.03 kB
import { l as persistSource } from "../persist-core-B5VikEft.mjs"; //#region src/adapters/sources/pinia.ts /** * Persist a Pinia store. Hydrate via `$state =` (shallow assign), not object * `$patch`. Subscribe with `{ detached: true }` so the listener outlives the * effect scope. * * @example * ```ts * import { defineStore } from "pinia"; * import { createJSONStorage } from "@stainless-code/persist"; * import { persistStore } from "@stainless-code/persist/sources/pinia"; * const useCountStore = defineStore("count", { state: () => ({ count: 0 }) }); * const store = useCountStore(); * const persist = persistStore(store, { name: "count", storage: createJSONStorage(() => localStorage) }); * ``` */ function persistStore(store, options) { return persistSource({ getState: () => store.$state, setState: (updater) => { store.$state = updater(store.$state); }, subscribe: (listener) => ({ unsubscribe: store.$subscribe(() => listener(), { detached: true }) }) }, options); } //#endregion export { persistStore };