web-serial-rxjs API Documentation
    Preparing search index...

    receive$ / lines$ / terminalText$ の選び方

    SerialSession は受信側に 3 系統のテキストストリームを公開します。「raw っぽい名前」ではなく、やりたいことから選んでください。本ページは判断用ガイドです。オプション表や正式な契約は API の概念TypeDoc API Reference を参照してください。

    Parent: #555 · Issue: #559 · 関連: 通信パターン別 Recipes

    やりたいこと 推奨
    改行単位のログを読む lines$
    JSON Lines を読む lines$
    受信チャンクをそのまま扱う receive$
    \r を含む表示制御を扱う receive$ または terminalText$
    ターミナル風テキストを画面へ表示する terminalText$
    raw Uint8Array(ワイヤ生バイト)を受信する 未対応対応範囲バイナリ受信の設計判断#545 を参照
    ストリーム 役割
    receive$ read pump からの UTF-8 デコード済みチャンク。行揃えではない。\r など制御文字を保持。ワイヤ上の生バイトではない
    lines$ \n / \r\n / 単独の interior \r で区切った完成行。ログ、1 行応答、パーサ向け。
    terminalText$ receive$ 由来の表示用累積テキスト。\r 再描画を畳み込み、既定ではプレーンテキスト UI 向けに ANSI を除去。createTerminalBuffer(receive$).text$ と同等。

    3 つとも同じ connect$ の read pump から駆動されます。subscription-lazy ではありません。遅れて購読した consumer は新しいデータのみを受け取ります(terminalText$ は購読後に共有された累積表示を受け取ります)。

    receive$ の emit 単位は、ブラウザの ReadableStream の読み取りサイズとストリーミング TextDecoder に従います。プロトコル上のメッセージ境界ではありません

    • 論理的な 1 行が、複数の receive$ チャンクに分かれて届くことがある
    • 1 つの receive$ チャンクに、複数の完成行が含まれることがある(完成行は lines$ にも流れる)
    • 「1 チャンク == 1 コマンド応答」とみなさない。必要なら receive$ 上で独自フレーミングを組む

    組み込み行バッファ以外の区切りが必要なときは receive$ 上で合成してください — 高度な使用方法 — 行単位のフレーミング

    機器が改行区切りのテキストプロトコルのときは lines$ を使います。

    • ログ行・ステータス行
    • JSON Lines(\n 区切りの JSON)
    • \n / \r\n で終わるコマンド応答(例: OK

    終端がまだ来ていない不完全 tail は内部バッファに残り、行が完成するまで emit されません。不完全 tail は SerialSessionOptions.lineBuffer(既定 maxChars: 1_048_576)で上限があります。超過時は先頭を破棄し、切断せず non-fatal の LINE_BUFFER_OVERFLOWerrors$ に流します。

    \r による再描画を保ちたいターミナル UI に lines$ を繋がないでください。行バッファが interior \r を境界として扱い、プログレスやシェル出力が壊れることがあります。

    未フレーミングのデコード済みテキストが必要なときは receive$ を使います。

    • カスタムフレーミング(非改行区切り、正規表現分割、バッチ化)
    • 末尾改行のないプロンプト/終端
    • ピアが送った \r などをそのまま観察する
    • 独自のターミナルパイプラインを組む(または自分で createTerminalBuffer に渡す)

    ドキュメントや JSDoc で言う receive$ の「raw」は、未フレーミングのデコード済みテキストチャンクを指します。ワイヤ上の生バイトでも、Uint8Array ストリームでもありません。receive$ における「raw」の意味 を参照してください。

    ターミナル風ビューポート(<textarea>、ログパネルなど)へ1 本の文字列をバインドしたいときは terminalText$ を使います。

    • \r による再描画を畳み込みつつ、通常の改行挙動は維持する
    • 既定では ANSI エスケープを除去(stripAnsi: true)。表示ストリームにエスケープを残す場合は SerialSessionOptions.terminalBuffer.stripAnsifalse にする
    • terminalBuffer で上限(maxLines / maxChars。既定は 10,000 行・1,048,576 文字)

    表示バインドには terminalText$ を優先します。装飾前のチャンク列(生のエスケープ、独自の畳み込み、非表示コンシューマ)が必要なときは receive$ を使います。

    公開の receiveBytes$Uint8Array 受信ストリームはありません。read pump は常にストリーミング UTF-8 TextDecoder でデコードします。

    • バイナリ送信send$(Uint8Array) で対応
    • バイナリ受信は未対応 — バイナリについては送受信が非対称

    現行の制限と設計メモ: 対応範囲。設計判断(当面は追加しない): バイナリ受信 API — 設計判断#545)。