@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
55 lines (41 loc) • 1.26 kB
Markdown
name: angular-persist
description: Gate Angular UI on Persist hydration with useHydrated (readonly Signal). Call inside an injection context; use when avoiding flash of default state on async backends.
license: MIT
metadata:
type: framework
library: "@stainless-code/persist"
library_version: "0.4.1"
framework: "angular"
requires:
- persist
sources:
- stainless-code/persist:src/adapters/frameworks/angular.ts
# Angular hydration gate
`@stainless-code/persist/frameworks/angular` returns a readonly `Signal<boolean>`. A real signal needs an **injection context** (`effect()`); null/undefined returns a shared `signal(true)` without `effect()`.
## Install
```bash
bun add @stainless-code/persist @angular/core
```
Peer: `@angular/core` `>=17.0.0`.
## Minimal wiring
```ts
import { useHydrated } from "@stainless-code/persist/frameworks/angular";
export class PrefsComponent {
hydrated = useHydrated(prefsHydration);
}
```
```html
@if (hydrated()) {
<prefs-panel />
} @else {
<skeleton />
}
```
## Common mistakes
- **Calling outside injection context.**
- **Treating the signal as store state.**
- **SSR / null signal** — both surface as hydrated `true`.
## API surface
- `useHydrated(signal) → Signal<boolean>` (readonly)