UNPKG

@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
--- 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`.