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 に従います。プロトコル上のメッセージ境界ではありません。
receive$ チャンクに分かれて届くことがあるreceive$ チャンクに、複数の完成行が含まれることがある(完成行は lines$ にも流れる)receive$ 上で独自フレーミングを組む組み込み行バッファ以外の区切りが必要なときは receive$ 上で合成してください — 高度な使用方法 — 行単位のフレーミング。
lines$ を使うとき機器が改行区切りのテキストプロトコルのときは lines$ を使います。
\n 区切りの JSON)\n / \r\n で終わるコマンド応答(例: OK)終端がまだ来ていない不完全 tail は内部バッファに残り、行が完成するまで emit されません。不完全 tail は SerialSessionOptions.lineBuffer(既定 maxChars: 1_048_576)で上限があります。超過時は先頭を破棄し、切断せず non-fatal の LINE_BUFFER_OVERFLOW を errors$ に流します。
\r による再描画を保ちたいターミナル UI に lines$ を繋がないでください。行バッファが interior \r を境界として扱い、プログレスやシェル出力が壊れることがあります。
receive$ を使うとき未フレーミングのデコード済みテキストが必要なときは receive$ を使います。
\r などをそのまま観察するcreateTerminalBuffer に渡す)ドキュメントや JSDoc で言う receive$ の「raw」は、未フレーミングのデコード済みテキストチャンクを指します。ワイヤ上の生バイトでも、Uint8Array ストリームでもありません。receive$ における「raw」の意味 を参照してください。
terminalText$ を使うときターミナル風ビューポート(<textarea>、ログパネルなど)へ1 本の文字列をバインドしたいときは terminalText$ を使います。
\r による再描画を畳み込みつつ、通常の改行挙動は維持するstripAnsi: true)。表示ストリームにエスケープを残す場合は SerialSessionOptions.terminalBuffer.stripAnsi を false にするterminalBuffer で上限(maxLines / maxChars。既定は 10,000 行・1,048,576 文字)表示バインドには terminalText$ を優先します。装飾前のチャンク列(生のエスケープ、独自の畳み込み、非表示コンシューマ)が必要なときは receive$ を使います。
公開の receiveBytes$ や Uint8Array 受信ストリームはありません。read pump は常にストリーミング UTF-8 TextDecoder でデコードします。
send$(Uint8Array) で対応現行の制限と設計メモ: 対応範囲。設計判断(当面は追加しない): バイナリ受信 API — 設計判断(#545)。
lines$ での最短経路receive$ 上のカスタムフレーミングlines$ / receive$ で待ってから送信