Transform Lines in a Readable Stream
Process a text stream line by line with a transform, keeping partial chunks buffered so splitting on newlines does not corrupt records.
Code
import { Transform } from "node:stream";
export function createLineTransformer(handler) {
let buffer = "";
return new Transform({
transform(chunk, _encoding, callback) {
buffer += chunk.toString("utf8");
let index;
while ((index = buffer.indexOf("\n")) !== -1) {
const line = buffer.slice(0, index);
buffer = buffer.slice(index + 1);
this.push(handler(line) + "\n");
}
callback();
},
flush(callback) {
if (buffer.length > 0) this.push(handler(buffer));
callback();
},
});
}Report a problem with this exampleOpens a pre-filled issue on GitHub.