///
import {Readable, ReadableOptions} from 'node:stream';
import {TypedReadable} from 'stream-chain/typed-streams.js';
/**
* K-way merge of object-mode Readable streams using `pickFirst + sortedInsert(lessFn)`.
* Output is sorted per `lessFn` if each input stream is itself sorted per `lessFn`.
*
* With `options.windowSize > 1`, the merge tolerates up to that many items of local disorder
* per input stream — the picker sees `N × windowSize` candidates and recovers the true global
* minimum at each step.
*
* Equivalent to:
*
* ```js
* select(streams, {...options, pick: pickFirst, insert: sortedInsert(lessFn)})
* ```
*
* @typeParam T — the value type carried by every input stream (homogeneous input is assumed —
* the comparator can't compare values of different types).
* @param streams — non-empty array of object-mode Readable streams, each sorted per `lessFn`
* (or locally disordered within `windowSize`).
* @param lessFn — comparator. Returns `true` if `a` should come before `b` (i.e., `a < b`).
* Must be a strict-weak-order predicate.
* @param options — optional. Standard `ReadableOptions` plus the optional `windowSize` property.
* @returns a `TypedReadable` that emits the merged sequence in sorted order. Propagates
* `'error'` events from any input stream; ends when every input stream has ended.
*/
declare function mergeSorted(
streams: readonly Readable[],
lessFn: (a: T, b: T) => boolean,
options?: mergeSorted.MergeSortedOptions
): TypedReadable;
declare namespace mergeSorted {
/**
* Options accepted by `mergeSorted()`. Extends `ReadableOptions`; adds only `windowSize`.
* The output Readable is always created with `objectMode: true`.
*/
export interface MergeSortedOptions extends ReadableOptions {
/**
* Per-stream buffer depth. Default `1`. Must be a positive integer. With `windowSize > 1`,
* up to that many items of local disorder per input stream are tolerated.
*/
windowSize?: number;
}
}
type MergeSortedOptions = mergeSorted.MergeSortedOptions;
export default mergeSorted;
export {mergeSorted};
export type {MergeSortedOptions};