/// <reference types="node" />
import { Readable, Transform, Writable } from 'stream';
import LazyPromise from 'lazy-promise';
import { ProcessorOption } from './types';
export declare function fromStream(readable: Readable): Hole<any>;
export declare function fromArray<T>(array: T[]): Hole<T>;
export default function hole<T>(obj: T): Hole<T>;
declare type ArrayElement<ArrayType> = ArrayType extends (infer ElementType)[] ? ElementType : never;
declare type ThenArg<T> = T extends Promise<infer U> ? U : T;
declare type Exists<T> = Exclude<NonNullable<T>, void>;
export declare class Hole<T> extends LazyPromise<T> {
    private readonly readable;
    private procInfoArray;
    constructor(readable: Readable);
    pipe(p: Readable): Hole<any>;
    pipe(p: Writable): Hole<any>;
    pipe<U>(p: (this: Transform, arg: T) => U, opts?: ProcessorOption | number): Hole<Exists<ThenArg<U>>>;
    split<U = ArrayElement<T>>(): Hole<U>;
    concat(size: number): Hole<T[]>;
    collect(): Promise<T[]>;
    collectSet(): Promise<Set<T>>;
}
export {};
