@stainless-code/persist
Version:
Hydration-aware persistence middleware for reactive stores (storage × codec seams, TanStack Store adapters, React hydration hook)
28 lines (27 loc) • 876 B
JavaScript
import { r as createStorage } from "./persist-core-BApUcOkB.mjs";
import { fromJSON, toJSON } from "seroval";
//#region src/persist-seroval.ts
/**
* Seroval codec — round-trips `Set` / `Map` / `Date`. The `toJSON` /
* `fromJSON` envelope keeps the payload JSON-serializable.
*/
const serovalCodec = () => ({
encode: (value) => JSON.stringify(toJSON(value)),
decode: (raw) => fromJSON(JSON.parse(raw))
});
/**
* Build a seroval-encoded `PersistStorage` (round-trips `Set`/`Map`/`Date`).
*
* @example
* ```ts
* // any string-keyed Storage works: localStorage, sessionStorage, custom
* const storage = createSerovalStorage<Prefs>(() => localStorage, {
* clearCorruptOnFailure: true,
* });
* ```
*/
function createSerovalStorage(getStorage, options) {
return createStorage(getStorage, serovalCodec(), options);
}
//#endregion
export { createSerovalStorage, serovalCodec };