@unikvs/v8-serde
値を node:v8 でシリアライズする Node.js 専用ミドルウェア @unikvs/v8-serde の使い方を説明します。
概要
値を node:v8 のシリアライザーで変換するミドルウェアです。Middleware Node.js 専用
単発の読み書きでは値をそのままシリアライズし、ストリームでは 4 バイトのビッグエンディアン長と本体からなるフレームを連結して変換します。
nameは"V8Serde"です。isOpenはopen()の完了後にtrueになります。node:v8が使えない環境ではopen()が失敗します。
インストールは次のコマンドで行います。
npm install @unikvs/v8-serdepnpm add @unikvs/v8-serdeyarn add @unikvs/v8-serdebun add @unikvs/v8-serdenub add @unikvs/v8-serdeaube add @unikvs/v8-serde使い方
V8Serde は IMiddleware を実装しています。UniKvs には use() で渡します。
import { V8Serde } from "@unikvs/v8-serde";
以下は、オブジェクトをシリアライズして保存し、読み取り時に元の形へ戻す例です。
import { V8Serde } from "@unikvs/v8-serde";
import { Memory } from "@unikvs/memory";
import * as unikvs from "unikvs";
const kvs = new unikvs.Builder<{ item: unikvs.Value<{ readonly id: number }> }>()
.use(new V8Serde())
.persist(new Memory())
.build();
await kvs.open();
await kvs.set("item", { id: 1 });
const item = await kvs.get("item");
await kvs.close();
データ型
| メソッド | 入力 | 出力 |
|---|---|---|
encode |
unknown |
Uint8Array<ArrayBuffer> |
decode |
Uint8Array<ArrayBuffer> |
unknown |
encodeStream |
unknown |
Uint8Array<ArrayBuffer> |
decodeStream |
Uint8Array<ArrayBuffer> |
unknown |
encodeは値をv8.serializeでバイト列化します。使う前にopen()を呼ぶ必要があります。decodeはバイト列をv8.deserializeで値に戻します。使う前にopen()を呼ぶ必要があります。encodeStreamは入力 1 件ごとに長さ付きフレーム (4 バイトのビッグエンディアン長と本体) を出力し、順番に連結します。decodeStreamは受信したバイト列を蓄積し、フレームがそろった値から順に出力します。- 途中で切れたフレームは次のチャンクの到着を待ち、終了時に残余がある場合はエラーを投げます。
- 空のチャンクはデコードに影響しないため、このミドルウェアは無視します。
エラー
このパッケージが投げるエラーは次のとおりです。
V8SerdeEncodeError
意味
値の v8.serialize エンコードに失敗したときに、このエラーが投げられます。失敗の原因は cause に保持されます。
対処方法
cause を確認し、v8.serialize で扱える値を渡してください。
V8SerdeDecodeError
意味
データの v8.deserialize デコードに失敗したときに、このエラーが投げられます。破損した入力や、ストリーム終端に残った未完成のフレームが対象です。失敗の原因は cause に保持されます。
対処方法
入力が v8.serialize で作られた正しいデータであり、ストリームが途中で切れていないか確認してください。
UnsupportedRuntimeError
意味
node:v8 が使えない環境で open() したときに、このエラーが投げられます。@unikvs/core の共通エラーです。
対処方法
Node.js 環境で使ってください。