UniKVS
TypeScript 製のモジュラーな KVS クライアント UniKVS の概要とドキュメント案内です。
UniKVSとは
UniKVS は TypeScript 製のモジュラーでポータブルな KVS クライアントです。透過的にデータを変換するトランスフォーマーと、複数バックエンドに書き込むストレージを、ビルダーパターンで組み合わせます。
主な特徴は次のとおりです。
- トランスフォーマーによる透過的なエンコード・デコードに対応します。
- 複数のストレージへの並列書き込みに対応します。
- キーごとに値の型を定義し、利用可能な操作を型レベルで制御します。
- Valibot スキーマによる入出力値の実行時検証に対応します。
- 単一値とストリームの両方に対応します。
AbortSignalによるキャンセルと実行時変数の受け渡しに対応します。- Node.js とブラウザーの両方に対応したストレージを用意しています。
クイックスタート
npm install unikvs @unikvs/compression @unikvs/fs.nodepnpm add unikvs @unikvs/compression @unikvs/fs.nodeyarn add unikvs @unikvs/compression @unikvs/fs.nodebun add unikvs @unikvs/compression @unikvs/fs.nodenub add unikvs @unikvs/compression @unikvs/fs.nodeaube add unikvs @unikvs/compression @unikvs/fs.nodeimport { Compression } from "@unikvs/compression";
import { NodeFs } from "@unikvs/fs.node";
import { UniKvs, type Value } from "unikvs";
const kvs = UniKvs.config<{
foo: Value<Uint8Array<ArrayBuffer>>;
}>()
.appendTransformer(new Compression("gzip"))
.appendStorage(new NodeFs(".tmp"))
.create();
await kvs.open();
await kvs.set("foo", Uint8Array.from([0, 1, 2]));
const bytes = await kvs.get("foo");
await kvs.close();
上記の例では、キー foo のバイト列を透過的に gzip 圧縮し、.tmp/ 配下に保存します。
ドキュメントの読み進め方
パッケージ一覧
UniKVS
設定ビルダーと KVS クライアント本体です。
@unikvs/core
全パッケージ共有の型とエラー基盤です。
@unikvs/utils
プラグイン実装者向けの共有関数群です。
@unikvs/compression
gzip・deflate・deflate-raw による圧縮と展開を行います。
@unikvs/checksum
MD5・SHA-1・SHA-224・SHA-256・SHA-384・SHA-512 の検証を行います。
@unikvs/json
値を JSON に、ストリームでは JSON Lines に変換します。
@unikvs/superjson
Date・Map・Set・BigInt・undefined を保持したまま SuperJSON で変換します。
@unikvs/cbor
値を CBOR に、ストリームでは CBOR シーケンスに変換します。
@unikvs/memory
メモリー上に任意のデータを保存します。
@unikvs/fs.node
Node.js のローカルファイルシステムに保存します。
@unikvs/fs.bun
Bun のローカルファイルシステムに保存します。
@unikvs/redis.bun
Bun の Redis クライアントで Redis に保存します。
@unikvs/s3.node
S3 互換のオブジェクトストレージに保存します。
@unikvs/s3.bun
Bun で S3 互換のオブジェクトストレージに保存します。
@unikvs/opfs
ブラウザーの OPFS に保存します。
@unikvs/indexeddb
ブラウザーの IndexedDB に保存します。
@unikvs/writeonly
既存のストレージを書き込み専用にします。
@unikvs/debug
読み書きされる操作とデータのデバッグ情報をログに記録します。
@unikvs/passthrough
データを何も変換せずそのまま透過させます。
動作環境
| パッケージ | Node.js | Bun | ブラウザー |
|---|---|---|---|
unikvs |
対応します。 | 対応します。 | 対応します。 |
@unikvs/core |
対応します。 | 対応します。 | 対応します。 |
@unikvs/utils |
対応します。 | 対応します。 | 対応します。 |
@unikvs/compression |
対応します。 | 対応します。 | 対応します。 |
@unikvs/checksum |
対応します。 | 対応します。 | 対応します。 |
@unikvs/json |
対応します。 | 対応します。 | 対応します。 |
@unikvs/superjson |
対応します。 | 対応します。 | 対応します。 |
@unikvs/cbor |
対応します。 | 対応します。 | 対応します。 |
@unikvs/memory |
対応します。 | 対応します。 | 対応します。 |
@unikvs/fs.node |
対応します。 | 対応しません。 | 対応しません。 |
@unikvs/fs.bun |
対応しません。 | 対応します。 | 対応しません。 |
@unikvs/redis.bun |
対応しません。 | 対応します。 | 対応しません。 |
@unikvs/s3.node |
対応します。 | 対応しません。 | 対応しません。 |
@unikvs/s3.bun |
対応しません。 | 対応します。 | 対応しません。 |
@unikvs/opfs |
対応しません。 | 対応しません。 | 対応します。 |
@unikvs/indexeddb |
対応しません。 | 対応しません。 | 対応します。 |
@unikvs/writeonly |
対応します。 | 対応します。 | 対応します。 |
@unikvs/debug |
対応します。 | 対応します。 | 対応します。 |
@unikvs/passthrough |
対応します。 | 対応します。 | 対応します。 |