@unikvs/memory
@unikvs/memory の Memory。メモリーに任意の値を保存するストレージの使い方を説明します。
概要
@unikvs/memory はプロセス内の Map に任意の値を保持するインメモリーストレージです。テストや一時的な値の保存に使います。
nameはMemoryです。isOpenは常にtrueです。open・closeはありません。
インストールは次のコマンドで行います。
npm install @unikvs/memorypnpm add @unikvs/memoryyarn add @unikvs/memorybun add @unikvs/memorynub add @unikvs/memoryaube add @unikvs/memory使い方
Memory は IStorage を実装しています。UniKvs には persist() で渡します。
import { Memory } from "@unikvs/memory";
コンストラクターの引数は次のとおりです。
プロパティ型
clone?(<T>(value: T) => T) | undefined
データの複製に使う関数です。省略した場合は structuredClone を使います。
型
(<T>(value: T) => T) | undefinedデフォルト
structuredClone以下は、値を保存して読み戻す例です。
import { Memory } from "@unikvs/memory";
import * as unikvs from "unikvs";
const kvs = new unikvs.Builder<{
greeting: unikvs.PlainValue<string>;
}>()
.persist(new Memory())
.build();
await kvs.open();
await kvs.set("greeting", "hello");
const value = await kvs.get("greeting");
console.log(value); // "hello"
await kvs.close();
データ型
| 操作 | 対応するデータ型 |
|---|---|
write・read |
任意の値(文字列・オブジェクトなど) |
getWritable・getReadable のチャンク |
Uint8Array<ArrayBuffer> |
- 任意の値を保存できます。文字列やオブジェクトなど、
structuredCloneで複製できる値を扱います。 - 読み書きする値は既定では
structuredCloneで複製します。複製方法はコンストラクターのcloneで変更できます。 - ストリームのチャンクは
Uint8Array<ArrayBuffer>のみに対応します。 getWritableで取得したストリームは、書き込まれたチャンクを結合し、close時に保存します。getReadableで取得したストリームは、保存値を単一チャンクとして送出します。保存値がUint8Arrayでない場合はInvalidChunkTypeErrorを投げます。
エラー
このパッケージが投げるエラーは次のとおりです。
KeyNotFoundError
意味
指定したキーが存在しない場合に投げます。@unikvs/core の共通エラーです。
対処方法
exists で確認してから読み出してください。
例
以下は、KeyNotFoundError を捕捉する例です。
import { KeyNotFoundError } from "@unikvs/memory";
try {
await kvs.get("missing-key");
} catch (ex) {
if (ex instanceof KeyNotFoundError) {
console.log("キーが見つかりません");
} else {
throw ex;
}
}
InvalidChunkTypeError
プロパティ型
意味
ストリームに Uint8Array<ArrayBuffer> 以外のチャンクを書き込んだ場合や、保存値が Uint8Array でないのに getReadable を呼んだ場合に投げます。
対処方法
ストリームには Uint8Array のチャンクを書き込んでください。getReadable を使う値はバイト列で保存してください。