@unikvs/brotli.wasm
WebAssembly の Brotli 実装で圧縮と展開を行うミドルウェアです。
概要
@unikvs/brotli.wasm はバイト列を Brotli で圧縮して保存し、読み取り時に展開するプラグインです。Middleware
brotli-wasm を動的 import で遅延解決するため、このミドルウェアはブラウザーと Node.js のどちらでも動作します。実行環境を選ばずに Brotli を使いたい場合に向いています。
nameはBrotliWasmです。isOpenはopen()後にtrueになります。初期状態ではfalseです。- ストリーム用の
encodeStreamとdecodeStreamは提供しません。一括変換のみに対応します。
インストールは次のコマンドで行います。
npm install @unikvs/brotli.wasm @logtape/logtapepnpm add @unikvs/brotli.wasm @logtape/logtapeyarn add @unikvs/brotli.wasm @logtape/logtapebun add @unikvs/brotli.wasm @logtape/logtapenub add @unikvs/brotli.wasm @logtape/logtapeaube add @unikvs/brotli.wasm @logtape/logtape使い方
BrotliWasm は IMiddleware を実装しています。UniKvs には use() で渡します。
import { BrotliWasm } from "@unikvs/brotli.wasm";
コンストラクターの引数は次のとおりです。
level?number | undefined
圧縮レベルです。0 から 11 までの整数を指定します。値が大きいほど圧縮率は高くなりますが、処理時間も長くなります。省略した場合は 11 になります。
number | undefined以下は、書き込んだ値を Brotli で圧縮して保存し、読み取り時に展開する例です。
import { BrotliWasm } from "@unikvs/brotli.wasm";
import { Memory } from "@unikvs/memory";
import * as unikvs from "unikvs";
const kvs = new unikvs.Builder<{ foo: unikvs.Value<Uint8Array> }>()
.use(new BrotliWasm({ level: 11 }))
.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> |
encodeでは入力バイト列を Brotli で圧縮します。decodeでは入力バイト列を Brotli で展開します。- ストリーム用の
encodeStreamとdecodeStreamは提供しません。
エラー
このパッケージが投げるエラーは次のとおりです。
BrotliWasmInitError
意味
open() で brotli-wasm モジュールの初期化に失敗したときに、このエラーが投げられます。
対処方法
brotli-wasm が正しくインストールされているか、ブラウザーでは WASM ファイルを取得できるか確認してください。
例
以下は、BrotliWasmInitError を捕捉する例です。
import { BrotliWasm, BrotliWasmInitError } from "@unikvs/brotli.wasm";
import { Memory } from "@unikvs/memory";
import * as unikvs from "unikvs";
const kvs = new unikvs.Builder<{ foo: unikvs.Value<Uint8Array> }>()
.use(new BrotliWasm())
.persist(new Memory())
.build();
try {
await kvs.open();
} catch (ex) {
if (ex instanceof BrotliWasmInitError) {
console.log("初期化に失敗しました");
} else {
throw ex;
}
}
BrotliWasmInvalidLevelError
actualunknown
指定された圧縮レベルです。
unknown意味
コンストラクターは level が 0 から 11 までの整数ではないときに、このエラーを投げます。
対処方法
0 から 11 までの整数を指定してください。省略した場合は 11 になります。
例
以下は、BrotliWasmInvalidLevelError を捕捉する例です。
import { BrotliWasm, BrotliWasmInvalidLevelError } from "@unikvs/brotli.wasm";
try {
new BrotliWasm({ level: 12 });
} catch (ex) {
if (ex instanceof BrotliWasmInvalidLevelError) {
console.log(ex.meta); // { actual: 12 }
} else {
throw ex;
}
}
このミドルウェアは open() 前に encode などを呼ばれると TypeError を投げます。圧縮と展開に失敗した場合は上流の送出値を Error へ正規化して伝播します。