/// <reference types="node" />
/// <reference types="node" />
import { Readable, ReadableOptions, Writable, WritableOptions } from "stream";
type partOptions = {
    separator: number | Buffer | string;
    keepSeparator?: boolean;
    head?: Buffer | string;
    tail?: Buffer | string;
    readableOptions?: Omit<ReadableOptions, "objectMode" | "read">;
};
type partConfig = {
    separator: number | Buffer;
    keepSeparator: boolean;
    head: Buffer;
    tail: Buffer;
    readableOptions: ReadableOptions;
};
declare class Part extends Readable {
    kickoff: boolean;
    cutted: boolean;
    called: number;
    size: number;
    index: number;
    space: number;
    config: partConfig;
    constructor(config: partConfig);
}
type onPart = (this: Spliter, part: Part, callback: (error?: Error | null, config?: partOptions["separator"] | partOptions) => void) => void | Promise<partOptions["separator"] | partOptions>;
declare class Spliter extends Writable {
    private part;
    partCount: number;
    private forwardable;
    private freeze;
    private remain;
    private finalCb;
    private finalCbed;
    private searcher;
    private onPart;
    constructor(partOptions: partOptions["separator"] | partOptions, onPart: onPart, opts?: Omit<WritableOptions, "objectMode" | "write" | "writev" | "final" | "destroy">);
    private createPart;
    private normalizeConfig;
    private initSearcher;
    private cut;
    private forward;
    _write(...args: Parameters<Exclude<WritableOptions["write"], undefined>>): void;
    _final(callback: (error?: Error | null) => void): void;
    _destroy(error: Error | null, callback: (error?: Error | null) => void): void;
}
declare function createSpliter(partOptions: partOptions["separator"] | partOptions, onPart: onPart, opts?: Omit<WritableOptions, "objectMode" | "write" | "writev" | "final" | "destroy">): Spliter;
export = createSpliter;
