import { TRouterConfig, IRouterServiceParams, IRouterUrlOptions, TRouteKeys, TRouteParams, IRouteUrlOptions } from "./interfaces-9174d665.js";
/**
 * @example
 * {
 *  user: {
 *    url: '/user',
 *    params: {
 *      id: '', // required
 *      obj: '' as 'aaa' | 'dddd', // required union
 *      enumField: DD, // required enum
 *      name: undefined, // optional
 *      next: undefined as 'aaa' | 'dddd' | undefined, // optional union
 *      enumOptional: undefined as DD | undefined // optional enum
 *    },
 *    children: {} // nested
 *  }
 */
/**
 * Manage application routes
 */
declare class Manager<TRoutesConfig extends TRouterConfig> {
    /**
     * Application routes config
     */
    protected readonly routes: TRoutesConfig;
    /**
     * Application domain
     */
    protected readonly domain?: string;
    /**
     * Url prefix (e.g. language code)
     */
    protected prefix?: string;
    /**
     * @constructor
     */
    /**
     * @constructor
     */
    constructor({ routes, domain, prefix }: IRouterServiceParams<TRoutesConfig>);
    /**
     * Set url prefix
     */
    /**
     * Set url prefix
     */
    setPrefix(prefix?: string): void;
    /**
     * Get route full url
     */
    /**
     * Get route full url
     */
    protected getRouteUrl(key: string, { isFullPath, hasLeadingSlash }?: IRouteUrlOptions): string;
    /**
     * Return routes
     */
    /**
     * Return routes
     */
    getRoutes<TKey extends TRouteKeys<TRoutesConfig>>(route?: TKey): TRoutesConfig;
    /**
     * Generate route url with params
     */
    makeURL: <TKey extends keyof { [P in keyof TRoutesConfig as P extends string ? TRoutesConfig[P] extends {
        children: TRouterConfig;
    } ? {} extends infer T ? T extends {} ? T extends { [key in P]: any; } ? never : keyof { [PF in keyof TRoutesConfig[P]["children"] as P | (PF extends string ? `${P}.${TRoutesConfig[P]["children"][PF] extends {
        children: TRouterConfig;
    } ? { [key_1 in P | keyof T]: any; } extends infer T_1 ? T_1 extends { [key_1 in P | keyof T]: any; } ? T_1 extends { [key_2 in PF]: any; } ? never : keyof { [PF_1 in keyof TRoutesConfig[P]["children"][PF]["children"] as PF | (PF_1 extends string ? `${PF}.${TRoutesConfig[P]["children"][PF]["children"][PF_1] extends {
        children: TRouterConfig;
    } ? { [key_3 in PF | keyof T_1]: any; } extends infer T_2 ? T_2 extends { [key_3 in PF | keyof T_1]: any; } ? T_2 extends { [key_4 in PF_1]: any; } ? never : keyof { [PF_2 in keyof TRoutesConfig[P]["children"][PF]["children"][PF_1]["children"] as PF_1 | (PF_2 extends string ? `${PF_1}.${TRoutesConfig[P]["children"][PF]["children"][PF_1]["children"][PF_2] extends {
        children: TRouterConfig;
    } ? { [key_5 in PF_1 | keyof T_2]: any; } extends infer T_3 ? T_3 extends { [key_5 in PF_1 | keyof T_2]: any; } ? T_3 extends { [key_6 in PF_2]: any; } ? never : keyof { [PF_3 in keyof TRoutesConfig[P]["children"][PF]["children"][PF_1]["children"][PF_2]["children"] as PF_2 | (PF_3 extends string ? `${PF_2}.${TRoutesConfig[P]["children"][PF]["children"][PF_1]["children"][PF_2]["children"][PF_3] extends {
        children: TRouterConfig;
    } ? { [key_7 in PF_2 | keyof T_3]: any; } extends infer T_4 ? T_4 extends { [key_7 in PF_2 | keyof T_3]: any; } ? T_4 extends { [key_8 in PF_3]: any; } ? never : keyof { [PF_4 in keyof TRoutesConfig[P]["children"][PF]["children"][PF_1]["children"][PF_2]["children"][PF_3]["children"] as PF_3 | (PF_4 extends string ? `${PF_3}.${TRoutesConfig[P]["children"][PF]["children"][PF_1]["children"][PF_2]["children"][PF_3]["children"][PF_4] extends {
        children: TRouterConfig;
    } ? { [key_9 in PF_3 | keyof T_4]: any; } extends infer T_5 ? T_5 extends { [key_9 in PF_3 | keyof T_4]: any; } ? T_5 extends { [key_10 in PF_4]: any; } ? never : keyof { [PF_5 in keyof TRoutesConfig[P]["children"][PF]["children"][PF_1]["children"][PF_2]["children"][PF_3]["children"][PF_4]["children"] as PF_4 | (PF_5 extends string ? `${PF_4}.${TRoutesConfig[P]["children"][PF]["children"][PF_1]["children"][PF_2]["children"][PF_3]["children"][PF_4]["children"][PF_5] extends {
        children: TRouterConfig;
    } ? { [key_11 in PF_4 | keyof T_5]: any; } extends infer T_6 ? T_6 extends { [key_11 in PF_4 | keyof T_5]: any; } ? T_6 extends { [key_12 in PF_5]: any; } ? never : keyof { [PF_6 in keyof TRoutesConfig[P]["children"][PF]["children"][PF_1]["children"][PF_2]["children"][PF_3]["children"][PF_4]["children"][PF_5]["children"] as PF_5 | (PF_6 extends string ? `${PF_5}.${TRoutesConfig[P]["children"][PF]["children"][PF_1]["children"][PF_2]["children"][PF_3]["children"][PF_4]["children"][PF_5]["children"][PF_6] extends {
        children: TRouterConfig;
    } ? { [key_13 in PF_5 | keyof T_6]: any; } extends infer T_7 ? T_7 extends { [key_13 in PF_5 | keyof T_6]: any; } ? T_7 extends { [key_14 in PF_6]: any; } ? never : keyof { [PF_7 in keyof TRoutesConfig[P]["children"][PF]["children"][PF_1]["children"][PF_2]["children"][PF_3]["children"][PF_4]["children"][PF_5]["children"][PF_6]["children"] as PF_6 | (PF_7 extends string ? `${PF_6}.${TRoutesConfig[P]["children"][PF]["children"][PF_1]["children"][PF_2]["children"][PF_3]["children"][PF_4]["children"][PF_5]["children"][PF_6]["children"][PF_7] extends {
        children: TRouterConfig;
    } ? { [key_15 in PF_6 | keyof T_7]: any; } extends infer T_8 ? T_8 extends { [key_15 in PF_6 | keyof T_7]: any; } ? T_8 extends { [key_16 in PF_7]: any; } ? never : keyof { [PF_8 in keyof TRoutesConfig[P]["children"][PF]["children"][PF_1]["children"][PF_2]["children"][PF_3]["children"][PF_4]["children"][PF_5]["children"][PF_6]["children"][PF_7]["children"] as PF_7 | (PF_8 extends string ? `${PF_7}.${TRoutesConfig[P]["children"][PF]["children"][PF_1]["children"][PF_2]["children"][PF_3]["children"][PF_4]["children"][PF_5]["children"][PF_6]["children"][PF_7]["children"][PF_8] extends {
        children: TRouterConfig;
    } ? { [key_17 in PF_7 | keyof T_8]: any; } extends infer T_9 ? T_9 extends { [key_17 in PF_7 | keyof T_8]: any; } ? T_9 extends { [key_18 in PF_8]: any; } ? never : keyof { [PF_9 in keyof TRoutesConfig[P]["children"][PF]["children"][PF_1]["children"][PF_2]["children"][PF_3]["children"][PF_4]["children"][PF_5]["children"][PF_6]["children"][PF_7]["children"][PF_8]["children"] as PF_8 | (PF_9 extends string ? `${PF_8}.${TRoutesConfig[P]["children"][PF]["children"][PF_1]["children"][PF_2]["children"][PF_3]["children"][PF_4]["children"][PF_5]["children"][PF_6]["children"][PF_7]["children"][PF_8]["children"][PF_9] extends {
        children: TRouterConfig;
    } ? { [key_19 in PF_8 | keyof T_9]: any; } extends infer T_10 ? T_10 extends { [key_19 in PF_8 | keyof T_9]: any; } ? T_10 extends { [key_20 in PF_9]: any; } ? never : keyof { [PF_10 in keyof TRoutesConfig[P]["children"][PF]["children"][PF_1]["children"][PF_2]["children"][PF_3]["children"][PF_4]["children"][PF_5]["children"][PF_6]["children"][PF_7]["children"][PF_8]["children"][PF_9]["children"] as PF_9 | (PF_10 extends string ? `${PF_9}.${any}` : never)]: any; } : never : never : PF_9}` : never)]: any; } : never : never : PF_8}` : never)]: any; } : never : never : PF_7}` : never)]: any; } : never : never : PF_6}` : never)]: any; } : never : never : PF_5}` : never)]: any; } : never : never : PF_4}` : never)]: any; } : never : never : PF_3}` : never)]: any; } : never : never : PF_2}` : never)]: any; } : never : never : PF_1}` : never)]: any; } : never : never : PF}` : never)]: any; } : never : never : P : never]: any; }>(route: TKey, params?: TRouteParams<TRoutesConfig, TKey> | undefined, { hasDomain }?: IRouterUrlOptions) => string;
    /**
     * Get URL path for router
     */
    path: <TKey extends keyof { [P in keyof TRoutesConfig as P extends string ? TRoutesConfig[P] extends {
        children: TRouterConfig;
    } ? {} extends infer T ? T extends {} ? T extends { [key in P]: any; } ? never : keyof { [PF in keyof TRoutesConfig[P]["children"] as P | (PF extends string ? `${P}.${TRoutesConfig[P]["children"][PF] extends {
        children: TRouterConfig;
    } ? { [key_1 in P | keyof T]: any; } extends infer T_1 ? T_1 extends { [key_1 in P | keyof T]: any; } ? T_1 extends { [key_2 in PF]: any; } ? never : keyof { [PF_1 in keyof TRoutesConfig[P]["children"][PF]["children"] as PF | (PF_1 extends string ? `${PF}.${TRoutesConfig[P]["children"][PF]["children"][PF_1] extends {
        children: TRouterConfig;
    } ? { [key_3 in PF | keyof T_1]: any; } extends infer T_2 ? T_2 extends { [key_3 in PF | keyof T_1]: any; } ? T_2 extends { [key_4 in PF_1]: any; } ? never : keyof { [PF_2 in keyof TRoutesConfig[P]["children"][PF]["children"][PF_1]["children"] as PF_1 | (PF_2 extends string ? `${PF_1}.${TRoutesConfig[P]["children"][PF]["children"][PF_1]["children"][PF_2] extends {
        children: TRouterConfig;
    } ? { [key_5 in PF_1 | keyof T_2]: any; } extends infer T_3 ? T_3 extends { [key_5 in PF_1 | keyof T_2]: any; } ? T_3 extends { [key_6 in PF_2]: any; } ? never : keyof { [PF_3 in keyof TRoutesConfig[P]["children"][PF]["children"][PF_1]["children"][PF_2]["children"] as PF_2 | (PF_3 extends string ? `${PF_2}.${TRoutesConfig[P]["children"][PF]["children"][PF_1]["children"][PF_2]["children"][PF_3] extends {
        children: TRouterConfig;
    } ? { [key_7 in PF_2 | keyof T_3]: any; } extends infer T_4 ? T_4 extends { [key_7 in PF_2 | keyof T_3]: any; } ? T_4 extends { [key_8 in PF_3]: any; } ? never : keyof { [PF_4 in keyof TRoutesConfig[P]["children"][PF]["children"][PF_1]["children"][PF_2]["children"][PF_3]["children"] as PF_3 | (PF_4 extends string ? `${PF_3}.${TRoutesConfig[P]["children"][PF]["children"][PF_1]["children"][PF_2]["children"][PF_3]["children"][PF_4] extends {
        children: TRouterConfig;
    } ? { [key_9 in PF_3 | keyof T_4]: any; } extends infer T_5 ? T_5 extends { [key_9 in PF_3 | keyof T_4]: any; } ? T_5 extends { [key_10 in PF_4]: any; } ? never : keyof { [PF_5 in keyof TRoutesConfig[P]["children"][PF]["children"][PF_1]["children"][PF_2]["children"][PF_3]["children"][PF_4]["children"] as PF_4 | (PF_5 extends string ? `${PF_4}.${TRoutesConfig[P]["children"][PF]["children"][PF_1]["children"][PF_2]["children"][PF_3]["children"][PF_4]["children"][PF_5] extends {
        children: TRouterConfig;
    } ? { [key_11 in PF_4 | keyof T_5]: any; } extends infer T_6 ? T_6 extends { [key_11 in PF_4 | keyof T_5]: any; } ? T_6 extends { [key_12 in PF_5]: any; } ? never : keyof { [PF_6 in keyof TRoutesConfig[P]["children"][PF]["children"][PF_1]["children"][PF_2]["children"][PF_3]["children"][PF_4]["children"][PF_5]["children"] as PF_5 | (PF_6 extends string ? `${PF_5}.${TRoutesConfig[P]["children"][PF]["children"][PF_1]["children"][PF_2]["children"][PF_3]["children"][PF_4]["children"][PF_5]["children"][PF_6] extends {
        children: TRouterConfig;
    } ? { [key_13 in PF_5 | keyof T_6]: any; } extends infer T_7 ? T_7 extends { [key_13 in PF_5 | keyof T_6]: any; } ? T_7 extends { [key_14 in PF_6]: any; } ? never : keyof { [PF_7 in keyof TRoutesConfig[P]["children"][PF]["children"][PF_1]["children"][PF_2]["children"][PF_3]["children"][PF_4]["children"][PF_5]["children"][PF_6]["children"] as PF_6 | (PF_7 extends string ? `${PF_6}.${TRoutesConfig[P]["children"][PF]["children"][PF_1]["children"][PF_2]["children"][PF_3]["children"][PF_4]["children"][PF_5]["children"][PF_6]["children"][PF_7] extends {
        children: TRouterConfig;
    } ? { [key_15 in PF_6 | keyof T_7]: any; } extends infer T_8 ? T_8 extends { [key_15 in PF_6 | keyof T_7]: any; } ? T_8 extends { [key_16 in PF_7]: any; } ? never : keyof { [PF_8 in keyof TRoutesConfig[P]["children"][PF]["children"][PF_1]["children"][PF_2]["children"][PF_3]["children"][PF_4]["children"][PF_5]["children"][PF_6]["children"][PF_7]["children"] as PF_7 | (PF_8 extends string ? `${PF_7}.${TRoutesConfig[P]["children"][PF]["children"][PF_1]["children"][PF_2]["children"][PF_3]["children"][PF_4]["children"][PF_5]["children"][PF_6]["children"][PF_7]["children"][PF_8] extends {
        children: TRouterConfig;
    } ? { [key_17 in PF_7 | keyof T_8]: any; } extends infer T_9 ? T_9 extends { [key_17 in PF_7 | keyof T_8]: any; } ? T_9 extends { [key_18 in PF_8]: any; } ? never : keyof { [PF_9 in keyof TRoutesConfig[P]["children"][PF]["children"][PF_1]["children"][PF_2]["children"][PF_3]["children"][PF_4]["children"][PF_5]["children"][PF_6]["children"][PF_7]["children"][PF_8]["children"] as PF_8 | (PF_9 extends string ? `${PF_8}.${TRoutesConfig[P]["children"][PF]["children"][PF_1]["children"][PF_2]["children"][PF_3]["children"][PF_4]["children"][PF_5]["children"][PF_6]["children"][PF_7]["children"][PF_8]["children"][PF_9] extends {
        children: TRouterConfig;
    } ? { [key_19 in PF_8 | keyof T_9]: any; } extends infer T_10 ? T_10 extends { [key_19 in PF_8 | keyof T_9]: any; } ? T_10 extends { [key_20 in PF_9]: any; } ? never : keyof { [PF_10 in keyof TRoutesConfig[P]["children"][PF]["children"][PF_1]["children"][PF_2]["children"][PF_3]["children"][PF_4]["children"][PF_5]["children"][PF_6]["children"][PF_7]["children"][PF_8]["children"][PF_9]["children"] as PF_9 | (PF_10 extends string ? `${PF_9}.${any}` : never)]: any; } : never : never : PF_9}` : never)]: any; } : never : never : PF_8}` : never)]: any; } : never : never : PF_7}` : never)]: any; } : never : never : PF_6}` : never)]: any; } : never : never : PF_5}` : never)]: any; } : never : never : PF_4}` : never)]: any; } : never : never : PF_3}` : never)]: any; } : never : never : PF_2}` : never)]: any; } : never : never : PF_1}` : never)]: any; } : never : never : PF}` : never)]: any; } : never : never : P : never]: any; }>(route: TKey, { isFullPath, hasLeadingSlash }?: IRouteUrlOptions) => string;
    /**
     * Get static app URLs (without params)
     */
    /**
     * Get static app URLs (without params)
     */
    getAllStaticURLs<TKey extends TRouteKeys<TRoutesConfig>>(route?: TKey): string[];
}
export { Manager as default };
