@johngw/stream
Version:
Reactive programming tools using the WHATWG Streams API.
41 lines • 1.25 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.bufferCount = void 0;
/**
* Groups chunks together as an array of the specified size.
* When required to flush, it will queue anything left over.
*
* @group Transformers
* @example
* ```
* --a----b------c------d------e--|
*
* chunks(2)
*
* -------[a,b]---------[c,d]--[e]-
* ```
*/
function bufferCount(length) {
if (length < 1)
throw new Error(`bufferCount() cannot be used with a count less than one. Got "${length}".`);
if (!isFinite(length))
throw new Error('bufferCount() cannot be used with an infinite number.');
if (Math.round(length) !== length)
throw new Error(`bufferCount() cannot be used with a floating point length. Got "${length}".`);
let buffer = [];
return new TransformStream({
transform(chunk, controller) {
buffer.push(chunk);
if (buffer.length === length) {
controller.enqueue(buffer);
buffer = [];
}
},
flush(controller) {
if (buffer.length)
controller.enqueue(buffer);
},
});
}
exports.bufferCount = bufferCount;
//# sourceMappingURL=bufferCount.js.map