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

@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/writeonly
pnpm add @unikvs/writeonly
yarn add @unikvs/writeonly
bun add @unikvs/writeonly
nub add @unikvs/writeonly
aube add @unikvs/writeonly

使い方

WriteOnly は IMiddleware を実装しています。UniKvs には use() で渡します。

import { WriteOnly } from "@unikvs/writeonly";

WriteOnly

読み取りを拒否して書き込み専用にするミドルウェアです。

コンストラクターの引数は次のとおりです。

プロパティ型
allowDelete?boolean

削除操作を許可するかどうかです。false のときは delete・clear を拒否します。

型boolean
デフォルトfalse

以下は、値を保存する例です。

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;
  }
}

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