import { type Ord } from "rambda";
import type { Awaitable } from "./Awaitable";
import type { FlowSource } from "./FlowSource";
import type { sflow } from "./sflow";
type Slots<T> = Array<{
    value?: T;
    done: boolean;
} | null>;
type Transformer<T> = (slots: Slots<T>, ctrl: ReadableStreamDefaultController<T>) => Awaitable<Slots<T>>;
type OrdFn<T> = (value: T) => Ord;
export declare function mergeStreamsBy<T>(transform: Transformer<T>, srcs: FlowSource<T>[]): sflow<T>;
export declare function mergeStreamsBy<T>(transform: Transformer<T>): {
    (srcs: FlowSource<T>[]): sflow<T>;
};
export declare function mergeStreamsByAscend<T>(ordFn: OrdFn<T>, sources: FlowSource<T>[]): sflow<T>;
export declare function mergeStreamsByAscend<T>(ordFn: OrdFn<T>): {
    (sources: FlowSource<T>[]): sflow<T>;
};
export declare function mergeStreamsByDescend<T>(ordFn: OrdFn<T>, srcs: FlowSource<T>[]): sflow<T>;
export declare function mergeStreamsByDescend<T>(ordFn: OrdFn<T>): {
    (srcs: FlowSource<T>[]): sflow<T>;
};
export {};
