Deno で JSON を gzip 圧縮して保存
このくらいのことが標準APIだけでできると、うれしい
code:ts
await ReadableStream.from(JSON.stringify(value))
.pipeThrough(new TextEncoderStream())
.pipeThrough(new CompressionStream("gzip"))
.pipeTo((await Deno.open("filename", { write: true, create: true })).writable);
読むほう
code:ts
let jsonStr = '';
for await (const chunk of (await Deno.open("filename")).readable.pipeThrough(new DecompressionStream("gzip")).pipeThrough(new TextDecoderStream()) {
jsonStr += chunk;
}
const value = JSON.parse(jsonStr)
ReadableStream(というか async iterator)を最後まで全部読む、みたいなメソッドや構文は無いので(それはそう、無限かもしれないからね……)書き込みのときのようにワンライナーでは書けなさそう。