Files
documentation/node_modules/@docusaurus/theme-common/lib/utils/routesUtils.js
2024-03-22 03:47:51 +05:30

54 lines
1.9 KiB
JavaScript

/**
* Copyright (c) Facebook, Inc. and its affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/
import { useMemo } from 'react';
import generatedRoutes from '@generated/routes';
import useDocusaurusContext from '@docusaurus/useDocusaurusContext';
/**
* Compare the 2 paths, case insensitive and ignoring trailing slash
*/
export function isSamePath(path1, path2) {
const normalize = (pathname) => (!pathname || pathname.endsWith('/')
? pathname
: `${pathname}/`)?.toLowerCase();
return normalize(path1) === normalize(path2);
}
/**
* Note that sites don't always have a homepage in practice, so we can't assume
* that linking to '/' is always safe.
* @see https://github.com/facebook/docusaurus/pull/6517#issuecomment-1048709116
*/
export function findHomePageRoute({ baseUrl, routes: initialRoutes, }) {
function isHomePageRoute(route) {
return route.path === baseUrl && route.exact === true;
}
function isHomeParentRoute(route) {
return route.path === baseUrl && !route.exact;
}
function doFindHomePageRoute(routes) {
if (routes.length === 0) {
return undefined;
}
const homePage = routes.find(isHomePageRoute);
if (homePage) {
return homePage;
}
const indexSubRoutes = routes
.filter(isHomeParentRoute)
.flatMap((route) => route.routes ?? []);
return doFindHomePageRoute(indexSubRoutes);
}
return doFindHomePageRoute(initialRoutes);
}
/**
* Fetches the route that points to "/". Use this instead of the naive "/",
* because the homepage may not exist.
*/
export function useHomePageRoute() {
const { baseUrl } = useDocusaurusContext().siteConfig;
return useMemo(() => findHomePageRoute({ routes: generatedRoutes, baseUrl }), [baseUrl]);
}
//# sourceMappingURL=routesUtils.js.map