import { IEnumerable, IEnumerableFactory } from '../../types'; import { getIterableGenerator } from '../../utilities/utilityFunctions'; export function applyChunk( factory: IEnumerableFactory, src: Iterable, chunkSize: number ): IEnumerable> { if (chunkSize <= 0) { throw new Error('chunkSize must be greater than 0'); } function* generator(): Generator> { let chunk: TSource[] = []; for (const item of src) { chunk.push(item); if (chunk.length >= chunkSize) { yield factory.createArrayEnumerable(getIterableGenerator(chunk), chunk); chunk = []; } } if (chunk.length > 0) { yield factory.createArrayEnumerable(getIterableGenerator(chunk), chunk); } } return factory.createBasicEnumerable(generator); }