import { IEnumerable, IEnumerableFactory } from '../../types'; export function applyInterweave( factory: IEnumerableFactory, src: Iterable, collections: Iterable[] ): IEnumerable { function* generator(): Generator { const collectionGenerators = [src, ...collections].map(arr => arr[Symbol.iterator]()); let hasMore = true; while (hasMore) { hasMore = false; for (const collection of collectionGenerators) { const { value, done } = collection.next(); if (!done) { hasMore = true; yield value; } } } } return factory.createBasicEnumerable(generator); }