@stainless-code/persist
persist-seroval
52 linesSource
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.
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
shell
bun add @stainless-code/persist serovalPeer: 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.