| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950 |
- const inBrowser = typeof window !== 'undefined';
- function findMatchRoot(route, roots) {
- // first match to the routes with the most deep level.
- roots.sort((a, b) => {
- const levelDelta = b.split('/').length - a.split('/').length;
- if (levelDelta !== 0) {
- return levelDelta;
- }
- else {
- return b.length - a.length;
- }
- });
- for (const r of roots) {
- if (route.startsWith(r))
- return r;
- }
- return undefined;
- }
- function resolveLocales(locales, route) {
- const localeRoot = findMatchRoot(route, Object.keys(locales));
- return localeRoot ? locales[localeRoot] : undefined;
- }
- // this merges the locales data to the main data by the route
- export function resolveSiteDataByRoute(siteData, route) {
- route = cleanRoute(siteData, route);
- const localeData = resolveLocales(siteData.locales || {}, route) || {};
- const localeThemeConfig = resolveLocales((siteData.themeConfig && siteData.themeConfig.locales) || {}, route) || {};
- return {
- ...siteData,
- ...localeData,
- themeConfig: {
- ...siteData.themeConfig,
- ...localeThemeConfig,
- // clean the locales to reduce the bundle size
- locales: {}
- },
- locales: {}
- };
- }
- /**
- * Clean up the route by removing the `base` path if it's set in config.
- */
- function cleanRoute(siteData, route) {
- if (!inBrowser) {
- return route;
- }
- const base = siteData.base;
- const baseWithoutSuffix = base.endsWith('/') ? base.slice(0, -1) : base;
- return route.slice(baseWithoutSuffix.length);
- }
|