UNPKG

@lomray/react-route-manager

Version:
123 lines (122 loc) 14 kB
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 };