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

28 lines (27 loc) • 849 B
import { onScopeDispose, shallowRef } from "vue"; //#region src/adapters/frameworks/vue.ts /** * Mount a `HydrationSignal` into Vue's reactivity. Returns a `Ref<boolean>`; * call inside `setup()` or an `effectScope()` — the subscription is cleaned up * via `onScopeDispose` (the scope owns teardown). Null/undefined signal → a * ref that stays `true`. Renders `true` on the server. * * @example * ```ts * // inside setup() — onScopeDispose is active * const hydrated = useHydrated(prefsHydration); * // <Skeleton v-if="!hydrated" /><PrefsPanel v-else /> * ``` */ function useHydrated(signal) { const hydrated = shallowRef(true); if (signal) { hydrated.value = signal.isHydrated(); onScopeDispose(signal.subscribeHydrated(() => { hydrated.value = signal.isHydrated(); })); } return hydrated; } //#endregion export { useHydrated };