/// <reference types="node" />
import { Readable, Writable } from 'node:stream';
import { TransformResult } from './transformable.js';
import { Middleware } from './middleware.js';
/**
 * Manager for middlewares.
 */
export declare class MiddlewareManager {
    private readonly middlewares;
    constructor();
    /**
     * Register a new middleware.
     *
     * @param middleware The middleware.
     */
    register(middleware: Middleware): void;
    /**
     * Transform the given stream and metadata by applying every middleware's
     * 'transformReadable' function.
     *
     * The result is an object with the keys 'stream', 'metadata' and
     * 'metadataChanged'. The first two are the respective transformation results,
     * while the third indicates whether the metadata was touched at all (to help
     * with optimizations).
     *
     * @param stream The base Readable Stream.
     * @param meta The item metadata.
     * @param options The user-provided options object.
     * @returns A Promise that resolves to a transformation result.
     */
    transformReadable(stream: Readable, meta: object, options?: object): Promise<TransformResult<Readable>>;
    /**
     * Transform the given stream and metadata by applying every middleware's
     * 'transformWritable' function.
     *
     * The result is an object with the keys 'stream', 'metadata' and
     * 'metadataChanged'. The first two are the respective transformation results,
     * while the third indicates whether the metadata was touched at all (to help
     * with optimizations).
     *
     * @param stream The base Writable Stream.
     * @param meta The item metadata.
     * @param options The user-provided options object.
     * @returns A Promise that resolves to a transformation result.
     */
    transformWritable(stream: Writable, meta: object, options?: object): Promise<TransformResult<Writable>>;
    private _transform;
}
