Интересно, что в Node.js есть то, что мне нужно - пробрасывание данных. И оформлено это высокоуровневыми командами. Там потоки данных можно объединять в трубы и перенаправлять выход одного потока во вход другого.
Вот так можно построить трубопровод, который архивирует файл:
X++:
var fs = require("fs");
var zlib = require('zlib');
// Compress the file input.txt to input.txt.gz
fs.createReadStream('input.txt')
.pipe(zlib.createGzip())
.pipe(fs.createWriteStream('input.txt.gz'));
console.log("File Compressed.");