import type { Middleware } from '../middlewares/shared.js';
import { Injector } from './shared.js';
/**
 * An injector that processes dependency resolution through middleware pipelines.
 * This class extends Injector to allow middleware-based handling of dependency requests.
 */
export declare class MiddlewareInjector extends Injector {
    static inspect: symbol;
    /**
     * Registers or retrieves a dependency resolution through middleware.
     *
     * @template T - The type of the resolved dependency.
     * @param {string | symbol} name - The identifier of the dependency to resolve.
     * @param {((value: T) => void)} [handler] - Optional callback to handle the resolved value synchronously.
     * @returns {PromiseLike<T> | void} Returns a promise resolving the dependency value when no handler is provided,
     * or executes the handler immediately when provided.
     */
    onResolve<T = unknown>(name: string | symbol): PromiseLike<T>;
    onResolve<T = unknown>(name: string | symbol, handler: (value: T) => void): void;
    /**
     * Initiates an inspection of the dependency resolution pipeline using registered middleware.
     * Triggers inspection middleware to analyze current state and dependencies.
     */
    inspect(): void;
    /**
     * Creates an instance of MiddlewareInjector.
     */
    constructor();
    /**
     * Middleware pipeline handling dependency resolution operations.
     * This chain of middleware processes dependency requests, allowing for interception, modification, or delegation of resolution logic.
    * @type {Middleware<[param: string | symbol, sync?: boolean]>}
    */
    middleware: Middleware<[param: string | symbol, sync?: boolean]>;
    /**
     * Resolves a dependency by executing the middleware chain.
     *
     * @template T - The expected type of the resolved dependency.
     * @param {string | symbol} param - The identifier of the dependency to resolve.
     * @returns {T} The resolved dependency value after processing through all middleware.
     */
    resolve<T = unknown>(param: string | symbol): T;
}
