UNPKG

@johngw/stream

Version:

Reactive programming tools using the WHATWG Streams API.

45 lines (39 loc) 1.02 kB
/** * 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]- * ``` */ export function bufferCount<T>(length: number) { 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: T[] = [] return new TransformStream<T, T[]>({ transform(chunk, controller) { buffer.push(chunk) if (buffer.length === length) { controller.enqueue(buffer) buffer = [] } }, flush(controller) { if (buffer.length) controller.enqueue(buffer) }, }) }