import { QueryParametersRecord, QueryParamTypeMap } from "../definitions/types/QueryParam";
import { URLHashSearchParams } from "../../presentation/URLHashSearchParams";
/**
 * Configuration interface for URL routing with optional search parameters.
 * @template TOriginalUrl The type representing the original URL string.
 * @template TParamTypeMap The type mapping for query parameters.
 */
export interface UrlRouteConfig<TOriginalUrl extends string, TParamTypeMap extends QueryParamTypeMap> {
    /**
     * The original URL string to be processed.
     */
    url: TOriginalUrl;
    /**
     * Optional search parameters configuration for the URL.
     */
    searchParams?: QueryParametersRecord<TParamTypeMap>;
}
export interface IUrlRoute<TOriginalUrl extends string, TParamTypeMap extends QueryParamTypeMap = never> {
    /**
     * The unmodified URL as provided in the configuration.
     */
    readonly originalUrl: TOriginalUrl;
    /**
     * The processed URL in a standardized format.
     */
    readonly normalizedUrl: string;
    /**
     * Handler for URL hash-based search parameters.
     */
    readonly search: URLHashSearchParams<TParamTypeMap>;
    /**
     * Record containing the search parameters configuration.
     */
    readonly searchParamsRecord: QueryParametersRecord<TParamTypeMap>;
}
/**
 * Processes and manages URL routing with optional search parameters.
 * @template TOriginalUrl The type representing the original URL string.
 * @template TParamTypeMap The type mapping for query parameters.
 */
export declare class UrlRoute<TOriginalUrl extends string, TParamTypeMap extends QueryParamTypeMap = never> implements IUrlRoute<TOriginalUrl, TParamTypeMap> {
    /**
     * The unmodified URL as provided in the configuration.
     */
    readonly originalUrl: TOriginalUrl;
    /**
     * The processed URL in a standardized format.
     */
    readonly normalizedUrl: string;
    /**
     * Handler for URL hash-based search parameters.
     */
    readonly search: URLHashSearchParams<TParamTypeMap>;
    /**
     * Record containing the search parameters configuration.
     */
    readonly searchParamsRecord: QueryParametersRecord<TParamTypeMap>;
    /**
     * Creates a new URL route instance.
     * @param {UrlRouteConfig<TOriginalUrl, TParamTypeMap>} config The configuration for the URL route.
     * @param {boolean} urlBasedRouting Determines if URL-based routing should be enabled.
     */
    constructor(config: UrlRouteConfig<TOriginalUrl, TParamTypeMap>, urlBasedRouting?: boolean);
}
