@unikvs/zstd.bun
Bun の Zstandard 機能で圧縮と展開を行い、node:zlib へフォールバックするミドルウェアです。
概要
@unikvs/zstd.bun はバイト列を Zstandard で圧縮して保存し、読み取り時に展開するプラグインです。Middleware
このミドルウェアは Bun ランタイムでは Bun.zstdCompressSync と Bun.zstdDecompressSync を使い、利用できない環境では node:zlib の Zstandard 機能へフォールバックします。Bun を中心に Node.js 互換環境でも動かしたい場合に使います。
nameはZstdBunです。isOpenはopen()後にtrueになります。初期状態ではfalseです。open()で実行環境を遅延解決し、結果を複数インスタンスで共有します。
インストールは次のコマンドで行います。
npm install @unikvs/zstd.bun @logtape/logtapepnpm add @unikvs/zstd.bun @logtape/logtapeyarn add @unikvs/zstd.bun @logtape/logtapebun add @unikvs/zstd.bun @logtape/logtapenub add @unikvs/zstd.bun @logtape/logtapeaube add @unikvs/zstd.bun @logtape/logtape使い方
ZstdBun は IMiddleware を実装しています。UniKvs には use() で渡します。
import { ZstdBun } from "@unikvs/zstd.bun";
コンストラクターの引数は次のとおりです。
level?number | undefined
圧縮レベルです。1 から 22 までの整数を指定します。値が大きいほど圧縮率は高くなりますが、処理時間も長くなります。省略した場合は 3 になります。
number | undefined以下は、書き込んだ値を Zstandard で圧縮して保存し、読み取り時に展開する例です。
import { Memory } from "@unikvs/memory";
import * as unikvs from "unikvs";
import { ZstdBun } from "@unikvs/zstd.bun";
const kvs = new unikvs.Builder<{ foo: unikvs.Value<Uint8Array> }>()
.use(new ZstdBun({ level: 3 }))
.persist(new Memory())
.build();
await kvs.open();
await kvs.set("foo", new Uint8Array([0, 1, 2]));
const bytes = await kvs.get("foo");
console.log(bytes); // 展開されたバイト列になります
await kvs.close();
データ型
| メソッド | 入力 | 出力 |
|---|---|---|
encode |
Uint8Array<ArrayBuffer> |
Uint8Array<ArrayBuffer> |
decode |
Uint8Array<ArrayBuffer> |
Uint8Array<ArrayBuffer> |
encodeStream |
Uint8Array<ArrayBuffer> |
Uint8Array<ArrayBuffer> |
decodeStream |
Uint8Array<ArrayBuffer> |
Uint8Array<ArrayBuffer> |
encodeでは入力バイト列を Zstandard で圧縮します。decodeでは入力バイト列を Zstandard で展開します。encodeStreamでは入力チャンクを蓄積し、flush時に一括で圧縮して 1 チャンクとして出力します。decodeStreamでは入力チャンクを蓄積し、flush時に一括で展開して 1 チャンクとして出力します。- ストリーム用の Zstandard 機能がないため、ストリーム処理はチャンク単位の逐次変換ではなく一括変換になります。
エラー
このパッケージが投げるエラーは次のとおりです。
ZstdBunInvalidLevelError
actualunknown
指定された圧縮レベルです。
unknown意味
コンストラクターは level が 1 から 22 までの整数ではないときに、このエラーを投げます。
対処方法
1 から 22 までの整数を指定してください。省略した場合は 3 になります。
例
以下は、ZstdBunInvalidLevelError を捕捉する例です。
import { ZstdBun, ZstdBunInvalidLevelError } from "@unikvs/zstd.bun";
try {
new ZstdBun({ level: 23 });
} catch (ex) {
if (ex instanceof ZstdBunInvalidLevelError) {
console.log(ex.meta); // { actual: 23 }
} else {
throw ex;
}
}
このミドルウェアは open() で実行環境の解決に失敗した場合は UnsupportedRuntimeError を投げます。open() 前に encode などを呼ぶと TypeError を投げます。展開に失敗した場合は上流のエラーをそのまま伝播します。