import { Comparer, IEnumerableFactory, IOrderedEnumerable } from '../../types'; import { orderByGenerator } from '../../utilities/utilityFunctions'; export function applyThenBy( factory: IEnumerableFactory, src: () => Generator, ascending: boolean, selector: (item: TSource) => TKey, comparer?: Comparer ): IOrderedEnumerable { function* generator(): Generator { for (const pair of src()) { yield* orderByGenerator(pair, ascending, selector, comparer); } } return factory.createOrderedEnumerable(generator); }