@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
46 lines (33 loc) • 1.38 kB
Markdown
name: persist-compressed
description: Compress a string-wire StateStorage with @stainless-code/persist/backends/compressed (gzip/deflate). Backend wrapper — compose with createStorage; stack compress-then-encrypt.
license: MIT
metadata:
type: composition
library: "@stainless-code/persist"
library_version: "0.4.1"
requires:
- persist
sources:
- stainless-code/persist:src/adapters/backends/compressed.ts
# Compressed backend wrapper
**Not a `StorageCodec`.** Uses `CompressionStream` / `DecompressionStream` (default `gzip`); output is **base64** on the string wire. Returns `undefined` if streams unavailable. Documented stack with encryption: **compress → encrypt**.
## Minimal wiring
```ts
import { createStorage, jsonCodec } from "@stainless-code/persist";
import { createCompressedStorage } from "@stainless-code/persist/backends/compressed";
const storage = createStorage<Prefs>(
() => createCompressedStorage(() => localStorage)!,
jsonCodec(),
);
```
Richer graphs → `persist-seroval` as the codec.
Formats: `gzip` | `deflate` | `deflate-raw` (`deflate-raw` needs Node `20.12+`).
## Common mistakes
- **Using as a codec.**
- **Encrypt-then-compress.**
- **Assuming streams exist in every runtime.**
## API surface
- `createCompressedStorage(getStorage, { format? }) → StateStorage<string> | undefined`
See also: `persist-encrypted`.