@klodianimeri/pipejs
Version:
Pipe functions that provide convenient and efficient ways to work with iterators.
22 lines (20 loc) • 848 B
text/typescript
import { Pipe } from "../pipe.js";
import { Yield } from "../util/index.js";
export function bufferCount(count: number, every?: number): Pipe {
return () => {
let buffer: Array<any> = new Array<any>();
count = (typeof count === 'number' && count > 1) ? count : 1;
every = (typeof every === 'number' && every > 1) ? every : count;
return (result: IteratorResult<any>): IteratorResult<any> | Array<IteratorResult<any>> => {
if (result?.done) {
return buffer.length > 0 ? [Yield(buffer), result] : result;
}
buffer.push(result.value);
if (buffer.length === count) {
result.value = new Array<any>(...buffer);
buffer.splice(0, every);
return result;
}
};
}
}