Ich habe @hsblabs/web-stream-extras veröffentlicht.
Es begann als interne Hilfslogik, die ich projektübergreifend immer wieder kopiert habe. Rund um ReadableStream<Uint8Array> hatte sich genug Utility angesammelt, dass sich ein sauberes Package gelohnt hat.
npm install @hsblabs/web-stream-extrasLäuft unter Node.js ≥22 und in modernen Browsern. Keine Runtime-Abhängigkeiten.
Was im Root-Paket steckt
Der Root-Export deckt die alltäglichen Byte-Stream-Operationen ab.
import { readableFromChunks, readAllBytes, stringToBinary, binaryToString,} from "@hsblabs/web-stream-extras";
const stream = readableFromChunks([ stringToBinary("hello"), stringToBinary(" world"),]);
const result = await readAllBytes(stream);console.log(binaryToString(result)); // "hello world"readableFromChunks verpackt ein Array von Uint8Array-Chunks in einen ReadableStream. readAllBytes sammelt den gesamten Stream in einem einzigen Uint8Array. Die Konvertierungshelfer — stringToBinary, binaryToString, toU8Array, toArrayBuffer, concatU8Arrays — existieren, weil die Umwandlung zwischen string, Uint8Array und ArrayBuffer ständig anfällt und leicht subtil falsch wird.
ByteTransformStream ist eine abstrakte Basisklasse für typisierte binäre Transform-Pipelines. ByteQueue übernimmt das interne Buffering, wenn partielle Byte-Lesevorgänge chunkübergreifend verfolgt werden müssen.
Base64url-Encoding ist ebenfalls enthalten. encodeBase64Url und decodeBase64Url arbeiten ohne Padding.
Stream-Verschlüsselung
Der encryption-Subpath fügt Verschlüsselung auf Basis der Web Crypto API hinzu.
import { encryptStream, decryptStream,} from "@hsblabs/web-stream-extras/encryption";
const key = crypto.getRandomValues(new Uint8Array(32));const encrypted = encryptStream(key, plaintext);const decrypted = decryptStream(key, encrypted);encryptStream und decryptStream nehmen einen ReadableStream und geben einen ReadableStream zurück. Die internen EncryptionStream- und DecryptionStream-Bausteine sind auch als TransformStream-Wrapper verfügbar, falls Sie sie anders kombinieren möchten.
Wenn Schlüsselverwaltung nötig ist, übernimmt webCryptoStream(masterKey) die Ableitung und Verschlüsselung streambezogener Schlüssel mit einem AES-GCM-Master-Key.
Warum Web Streams
Die WHATWG Streams API ist in Node.js ≥18 und modernen Browsern nativ verfügbar. Wer sie direkt nutzt, vermeidet Node.js-spezifische Stream-Abstraktionen und hält den Code portabel. Wenn Browser und Server dieselbe Byte-Pipeline verarbeiten müssen, ist die WHATWG-API die richtige Grundlage.
Feedback und Issues sind jederzeit willkommen.
hsb.horse