export type MatchPathPattern = { /** * Строка для сопоставления с URL pathname. Может содержать сегменты в стиле `:id` * для обозначения динамических параметров. Также может заканчиваться на `/*` * для обозначения сопоставления с остальной частью URL pathname. * @example '/user/:id', '/posts/:category/*', '/home' */ path: string; /** * Должно быть `true`, если этот паттерн должен сопоставляться с полным URL pathname. * Если `false`, паттерн может сопоставляться с частью pathname. * @default true * @example * // Точное сопоставление (значение по умолчанию): * matchPath({ path: '/user/:id' }, '/user/123'); // сопоставит только '/user/123' * matchPath({ path: '/user/:id', isExact: true }, '/user/123'); // сопоставит только '/user/123' * // Частичное сопоставление: * matchPath({ path: '/user', isExact: false }, '/user/123'); // сопоставит '/user/123', '/user/456' и т.д. */ isExact?: boolean; }; export type MatchPathInfo = { /** * Имена и значения динамических параметров в URL. * Извлекаются из pathname на основе паттерна маршрута. * @example * const match = matchPath('/posts/:category/:id', '/posts/tech/123'); * // match?.params будет: { category: 'tech', id: '123' } */ params: Record; /** * Часть URL pathname, которая была сопоставлена. * Представляет полный совпадающий путь. * @example * matchPath('/user/:id', '/user/123'); // => pathname: '/user/123' * matchPath('/posts/:category/:id', '/posts/tech/456'); // => pathname: '/posts/tech/456' */ pathname: string; /** * Часть URL pathname, которая была сопоставлена до дочерних маршрутов. * Используется для построения ссылок на дочерние маршруты и определения * активного родительского маршрута. * @example * matchPath('/dashboard', '/dashboard/settings'); // => pathnameBase: '/dashboard' */ pathnameBase: string; /** * Паттерн, который был использован для сопоставления. * Соответствует исходному паттерну маршрута. * @example * matchPath('/user/:id', '/user/123'); // pattern: '/user/:id' */ pattern: string; }; /** * Функция для сопоставления паттерна маршрута с URL pathname. * Возвращает информацию о совпадении или null, если совпадения нет. * * @param pattern - Паттерн маршрута (строка или объект MatchPathPattern) * @param path - URL pathname для сопоставления * @returns Информация о совпадении или null * * @example * ```typescript * const match = matchPath('/user/:id', '/user/123'); * // Результат: { params: { id: '123' }, pathname: '/user/123', ... } * ``` */ export type MatchPath = (pattern: MatchPathPattern | string, path: string) => MatchPathInfo | null;