@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
52 lines (37 loc) • 1.47 kB
Markdown
---
name: persist-seroval
description: Persist Set/Map/Date (and richer graphs) with @stainless-code/persist/codecs/seroval (serovalCodec / createSerovalStorage). Use when JSON.stringify would lose types on string-wire backends.
license: MIT
metadata:
type: composition
library: "@stainless-code/persist"
library_version: "0.4.1"
framework: "seroval"
requires:
- persist
sources:
- stainless-code/persist:src/adapters/codecs/seroval.ts
---
# Seroval codec
`@stainless-code/persist/codecs/seroval` round-trips values JSON cannot (`Set`/`Map`/`Date`) via `seroval` `toJSON`/`fromJSON` on string-wire backends (`localStorage`, etc.).
## Install
```bash
bun add @stainless-code/persist seroval
```
Peer: `seroval` `>=1.0.0` (optional of this subpath).
## Minimal wiring
```ts
import { createSerovalStorage } from "@stainless-code/persist/codecs/seroval";
const storage = createSerovalStorage<Prefs>(() => localStorage, {
clearCorruptOnFailure: true,
});
```
Or `createStorage(getStorage, serovalCodec(), opts)`.
## Common mistakes
- **Using `createJSONStorage` for Set/Map/Date** — they won't round-trip.
- **Layering seroval on default IDB** — `persist-idb` already uses structured clone / `identityCodec`.
- **Forgetting the `seroval` peer.**
## API surface
- `serovalCodec<S>() → StorageCodec<S>`
- `createSerovalStorage(getStorage, options?) → PersistStorage | undefined`
See also: `persist-idb` for structured-clone without seroval.