import { Constructor, IQueryHandler } from "../types/base";
/**
 * Handles the registration and execution of query handlers.
 * Supports instantiation of query classes, optionally via a custom factory.
 *
 * @template Q - A mapping of query names to their parameter types.
 * @template R - A mapping of query names to their return types.
 *
 * @example
 * ```ts
 * interface Queries {
 *   GET_USER: { id: number };
 * }
 * interface Results {
 *   GET_USER: User | null;
 * }
 *
 * const queryHandler = new QueryHandler<Queries, Results>();
 * const user = await queryHandler.fire("GET_USER", { id: 1 });
 * ```
 */
export declare class QueryHandler<Q extends Record<string, any>, R extends {
    [K in keyof Q]: any;
}> implements IQueryHandler<Q, R> {
    private factory?;
    private queries;
    /**
     * @param factory Optional factory function to instantiate query classes.
     * Useful for integrating with DI containers or custom initialization.
     *
     * Example:
     * ```ts
     * const handler = new QueryHandler((cls) => container.resolve(cls));
     * ```
     */
    constructor(factory?: ((cls: Constructor) => any) | undefined);
    /**
     * Executes a query by name with the given parameters.
     *
     * @param queryName - The query name to execute.
     * @param params - The parameters to pass to the query.
     * @returns The result of the query execution.
     * @throws Error if the query is not registered.
     */
    fire<K extends keyof Q>(queryName: K, params: Q[K]): Promise<R[K]>;
}
//# sourceMappingURL=handler.d.ts.map