diff --git a/src/backend/src/util/streamutil.js b/src/backend/src/util/streamutil.js index a1ef28ff..a6ba2aec 100644 --- a/src/backend/src/util/streamutil.js +++ b/src/backend/src/util/streamutil.js @@ -341,6 +341,27 @@ const size_limit_stream = (source, { limit }) => { return stream; } +class SizeMeasuringStream extends Transform { + constructor(options, probe) { + super(options); + this.probe = probe; + this.loaded = 0; + } + + _transform(chunk, encoding, callback) { + this.loaded += chunk.length; + probe.amount = this.loaded; + this.push(chunk); + callback(); + } +} + +const size_measure_stream = (source, probe = {}) => { + const stream = new SizeMeasuringStream({}, probe); + source.pipe(stream); + return stream; +} + class StuckDetectorStream extends Transform { constructor(options, { timeout,