import { Enumerable, IEnumerable } from '../enumerable' import * as utils from '../utils' export function select(source: Iterable, selector: (item: TSource, index?: number) => TResult): IEnumerable { utils.throws.ThrowIfNull('source', source) utils.throws.ThrowIfNull('selector', selector) return Enumerable.AsEnumerable(mapping(source, selector)) } function* mapping(source: Iterable, selector: (item: TSource, index?: number) => TResult): Iterable { let index = 0 for (let item of source) { yield selector(item, index++) } }