import { EventEmitter } from 'eventemitter3';

type IOStreamType = "stdin" | "stdout" | "stderr";
/**
 * Decoder for Docker logs stream.
 *
 * @see https://docs.docker.com/engine/api/v1.37/#tag/Container/operation/ContainerAttach
 * header := [8]byte{STREAM_TYPE, 0, 0, 0, SIZE1, SIZE2, SIZE3, SIZE4}
 */
declare class DockerDecoder extends EventEmitter<{
    data: (type: IOStreamType, payload: Uint8Array) => any;
    end: (type?: IOStreamType, payload?: Uint8Array) => any;
    error: (err: unknown) => any;
}> {
    #private;
    static readonly defaultBufferSize = 8192;
    get bufferLength(): number;
    constructor(bufferLength?: number);
    decode(chunk: Uint8Array): Record<IOStreamType, Uint8Array>;
    push(chunk: Uint8Array): void;
    close(): void;
}

declare class DockerDecoderStream {
    #private;
    defaultStreamType: "stdin" | "stdout" | "stderr";
    constructor(defaultStreamType?: "stdin" | "stdout" | "stderr");
    get readable(): ReadableStream<Uint8Array>;
    get writable(): WritableStream<Uint8Array>;
    get stdin(): ReadableStream<Uint8Array>;
    get stdout(): ReadableStream<Uint8Array>;
    get stderr(): ReadableStream<Uint8Array>;
}

declare function mixDownReaders<TKey extends string, T>(readers: Record<TKey, ReadableStreamDefaultReader<T>>): AsyncGenerator<readonly [TKey, T & ({} | null)], void, unknown>;

declare class AssertionError extends Error {
    name: string;
}

export { AssertionError, DockerDecoder, DockerDecoderStream, IOStreamType, mixDownReaders };
