///
import duplexify from 'duplexify';
import stream from 'stream';
import { ConcatOptionsType } from '../concat';
import { ReadableStream, Stream } from '../types';
import { TernaryForksStream } from './ternary-fork';
import { ConditionActions, IfOptions, Mode } from './types';
export declare abstract class TernaryStreams {
true: ConcatMode extends 'pipe' ? Stream[] : ConcatOptionsType;
false: ConcatMode extends 'pipe' ? Stream[] : ConcatOptionsType;
ternaryStream: duplexify.Duplexify;
protected ternaryForkStream: TernaryForksStream;
protected outputStream: stream.Transform;
options: IfOptions;
constructor(options: IfOptions);
protected forwardError(from: Stream, to: Stream): void;
protected abstract connectTernaryForkStreamsAsync(): Promise;
protected abstract connectTernaryForkStreamsSync(): ReadableStream[];
private initAsync;
private initSync;
private doInit;
create(): duplexify.Duplexify | Promise;
private done;
}
export declare class TernaryStreamsPipe extends TernaryStreams {
constructor(options: IfOptions);
addActions(actionsToAdd: {
true?: ConditionActions<'pipe'>;
false?: ConditionActions<'pipe'>;
}): void[] | Promise;
protected forwardError(from: Stream, to: Stream): void;
protected connectTernaryForkStreamsAsync(): Promise;
protected connectTernaryForkStreamsSync(): ReadableStream[];
private connect;
}
export declare class TernaryStreamsConcat extends TernaryStreams {
constructor(options: IfOptions);
protected connectTernaryForkStreamsAsync(): Promise;
protected connectTernaryForkStreamsSync(): any;
}
export declare type Ternary> = Options['sync'] extends 'async' ? Promise : stream.Duplex;
export declare const ternary: >(options: Options) => Ternary;