@stainless-code/persist
persist-compressed
46 linesSource
Compress a string-wire StateStorage with @stainless-code/persist/backends/compressed (gzip/deflate). Backend wrapper — compose with createStorage; stack compress-then-encrypt.
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.