コンテンツにスキップ
UniKVS
Esc
↑↓移動↵開く⌘Jプレビュー
このページの内容

@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-serde
pnpm add @unikvs/v8-serde
yarn add @unikvs/v8-serde
bun add @unikvs/v8-serde
nub add @unikvs/v8-serde
aube 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 環境で使ってください。

このページは役に立ちましたか?