function chain()

in core/steams-utils.js [14:55]


function chain(...streams) {
    if (!Array.isArray(streams) || streams.length <= 0) {
        throw new Error("At least one stream must be provided.");
    }

    /** @type {NodeJS.ReadWriteStream} */
    let lastStream;

    for (const stream of streams) {
        lastStream = lastStream ? lastStream.pipe(stream) : stream;
    }

    const headStream = streams[0];
    const proxy = new Transform({
        objectMode: true,

        flush(callback) {
            headStream.end();
        },

        transform(chunk, encoding, callback) {
            headStream.write(chunk);
            callback();
        }
    });

    lastStream.pipe(new Writable({
        objectMode: true,

        write(chunk, encoding, callback) {
            proxy.push(chunk);
            callback();
        },

        final(callback) {
            proxy.push(null);
            callback();
        }
    }));

    return proxy;
}