import { Promised } from "./utils";
import "./select";
import "./array";
declare global {
    interface Generator<T = unknown, TReturn = any, TNext = unknown> {
        order_by(this: Generator<number, TReturn, TNext>, descending?: "descending"): Generator<T, TReturn, TNext>;
        order_by(this: Generator<string, TReturn, TNext>, descending?: "descending"): Generator<T, TReturn, TNext>;
        order_by(key_selector: (item: T) => number, descending?: "descending"): Generator<T, TReturn, TNext>;
        order_by(key_selector: (item: T) => string, descending?: "descending"): Generator<T, TReturn, TNext>;
        order_by<TKey>(key_selector: (item: T) => TKey, comparitor: (a: TKey, b: TKey) => boolean, descending?: "descending"): Generator<T, TReturn, TNext>;
    }
    interface AsyncGenerator<T = unknown, TReturn = any, TNext = unknown> {
        order_by(this: AsyncGenerator<number, TReturn, TNext>, descending?: "descending"): AsyncGenerator<T, TReturn, TNext>;
        order_by(this: AsyncGenerator<string, TReturn, TNext>, descending?: "descending"): AsyncGenerator<T, TReturn, TNext>;
        order_by(key_selector: (item: T) => Promised<number>, descending?: "descending"): AsyncGenerator<T, TReturn, TNext>;
        order_by(key_selector: (item: T) => Promised<string>, descending?: "descending"): AsyncGenerator<T, TReturn, TNext>;
        order_by<TKey>(key_selector: (item: T) => Promised<TKey>, comparitor: (a: TKey, b: TKey) => boolean, descending?: "descending"): AsyncGenerator<T, TReturn, TNext>;
    }
}
