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

@unikvs/passthrough

データを何も変換せずそのまま透過させる @unikvs/passthrough の使い方を説明します。

概要

@unikvs/passthrough は、入力を何も変換せずそのまま透過させる Transformer プラグインです。Transformer

encode・decode は受け取ったデータをそのまま返し、getEncodable・getDecodable はチャンクをそのまま流すストリームを返します。データの内容にもチャンクの分割にも影響しません。

常にオープン状態です。open・close は不要で、isOpen は常に true、name は常に "PassThrough" を返します。

インストールは次のとおりです。

npm install @unikvs/passthrough
pnpm add @unikvs/passthrough
yarn add @unikvs/passthrough
bun add @unikvs/passthrough
nub add @unikvs/passthrough
aube add @unikvs/passthrough

使い方

appendTransformer で登録します。登録位置より後ろのストレージに対して、変換をしないパイプラインを追加します。

import { PassThrough } from "@unikvs/passthrough";
import { Memory } from "@unikvs/memory";
import { UniKvs, type PlainValue } from "unikvs";

const kvs = UniKvs.config<{ greeting: PlainValue<string> }>()
  .appendTransformer(new PassThrough())
  .appendStorage(new Memory())
  .create();

await kvs.open();

await kvs.set("greeting", "hello");
const greeting = await kvs.get("greeting");

await kvs.close();

ストリーム

getEncodable・getDecodable は、入力をそのまま出力する TransformStream を返します。チャンクの境界も参照も変わりません。空のストリームは空のまま完了します。

使いどころ

条件分岐でトランスフォーマーをオン・オフしたい場合に使います。オフにするときは登録位置から取り除くのではなく、PassThrough に差し替えます。パイプラインの構成を変えずに、環境や設定に応じて変換の有無を切り替えられます。

import { Compression } from "@unikvs/compression";
import { PassThrough } from "@unikvs/passthrough";
import { Memory } from "@unikvs/memory";
import { UniKvs, type Value } from "unikvs";

// 設定や環境変数から取得する想定です。
const enableCompression = true;
const transformer = enableCompression ? new Compression("gzip") : new PassThrough();

const kvs = UniKvs.config<{ data: Value<Uint8Array<ArrayBuffer>> }>()
  .appendTransformer(transformer)
  .appendStorage(new Memory())
  .create();

await kvs.open();

await kvs.set("data", Uint8Array.from([0, 1, 2]));
const data = await kvs.get("data");

await kvs.close();

Compression と PassThrough はどちらも ITransformer を実装するため、同じ位置に差し替えられます。

注意点

  • データを変換しないため、単体で使っても保存される値は変わりません。
  • ログを記録したい場合は、代わりに @unikvs/debug を使います。@unikvs/passthrough はログの出力も変数の参照も行いません。

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