import { IEnumerable, IEnumerableFactory } from '../../types'; export function applySelect( factory: IEnumerableFactory, src: Iterable, exp: (item: TSource, index: number) => TResult ): IEnumerable { function* generator(): Generator { let i = 0; for (const item of src) { yield exp(item, i); i++; } } return factory.createBasicEnumerable(generator); } export function applySelectMany( factory: IEnumerableFactory, src: Iterable, exp: (item: TSource, index: number) => Iterable ): IEnumerable { function* generator(): Generator { let i = 0; for (const item of src) { for (const subItem of exp(item, i)) { yield subItem; } i++; } } return factory.createBasicEnumerable(generator); }