@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
JavaScript
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 };