logo hsb.horse
← Zur Blog-Übersicht

Blog

@hsblabs/web-stream-extras veröffentlicht

Eine kleine TypeScript-Utility-Bibliothek für ReadableStream<Uint8Array> in Browsern und Node.js — mit Byte-Konvertierungshelfern, Transform Streams und Stream-Verschlüsselung via Web Crypto API.

Veröffentlicht:

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.

Terminal window
npm install @hsblabs/web-stream-extras

Lä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.


npm · GitHub

Feedback und Issues sind jederzeit willkommen.