@unikvs/writeonly
読み取りを拒否して書き込み専用にする @unikvs/writeonly の使い方を説明します。
概要
@unikvs/writeonly Middleware は読み取りを拒否して書き込み専用にするミドルウェアです。
読み取り方向の操作 (get・has・stream・decode) は存在しないキーとして扱って拒否し、書き込み方向の操作 (set・copy・move) はそのまま透過させます。allowDelete が false のときは削除も拒否します。
nameはWriteOnlyです。isOpenは常にtrueです。allowDeleteの既定値はfalseです。
インストールは次のコマンドで行います。
npm install @unikvs/writeonlypnpm add @unikvs/writeonlyyarn add @unikvs/writeonlybun add @unikvs/writeonlynub add @unikvs/writeonlyaube add @unikvs/writeonly使い方
WriteOnly は IMiddleware を実装しています。UniKvs には use() で渡します。
import { WriteOnly } from "@unikvs/writeonly";
WriteOnly
読み取りを拒否して書き込み専用にするミドルウェアです。
コンストラクターの引数は次のとおりです。
allowDelete?boolean
削除操作を許可するかどうかです。false のときは delete・clear を拒否します。
booleanfalse以下は、値を保存する例です。
import { Memory } from "@unikvs/memory";
import { WriteOnly } from "@unikvs/writeonly";
import * as unikvs from "unikvs";
const kvs = new unikvs.Builder<{
foo: unikvs.Value<Uint8Array>;
}>()
.use(new WriteOnly())
.persist(new Memory())
.build();
await kvs.open();
await kvs.set("foo", new Uint8Array([0, 1, 2]));
await kvs.close();
データ型
| メソッド | 入力 | 出力 |
|---|---|---|
encode |
書き込み値 | 書き込み値(そのまま透過します) |
decode |
読み取り値 | 常に KeyNotFoundError を投げます |
getEncodable |
書き込みチャンク | 書き込みチャンク(そのまま透過します) |
getDecodable |
読み取りチャンク | 常に KeyNotFoundError を投げます |
- 書き込み方向の変換は行わず、値をそのまま透過させます。
copyとmoveは値を返さないため、書き込み方向の操作として許可します。- 読み取り方向は常に拒否し、キーが存在しないものとして扱います。
- 削除の可否は
use()で制御し、allowDeleteがfalseのときはdelete・clearを拒否します。
エラー
このパッケージが投げるエラーは次のとおりです。
WriteOnlyDeleteNotAllowedError
意味
allowDelete が false のときに delete が呼ばれると、このエラーが投げられます。
対処方法
削除が必要なときは allowDelete: true を指定してください。
WriteOnlyClearNotAllowedError
意味
allowDelete が false のときに clear が呼ばれると、このエラーが投げられます。
対処方法
全件削除が必要なときは allowDelete: true を指定してください。
KeyNotFoundError
意味
読み取り方向の操作 (get・has・stream・decode) が呼ばれたときに、このエラーが投げられます。@unikvs/core の共通エラーです。
対処方法
読み取りが必要なときはこのミドルウェアを使わないでください。
例
以下は、KeyNotFoundError を捕捉する例です。
import { KeyNotFoundError } from "@unikvs/writeonly";
try {
const data = await kvs.get("foo");
} catch (ex) {
if (ex instanceof KeyNotFoundError) {
console.log("読み取りは許可されていません");
} else {
throw ex;
}
}