From 8eaf02fe15ff22790a8260e61be4764c47e8c26e Mon Sep 17 00:00:00 2001 From: Sergio Moreno Date: Fri, 29 Oct 2021 16:07:12 +0200 Subject: [PATCH] fix: baseUrl passed to sortConfig (#5824) --- .../__tests__/__snapshots__/init.test.ts.snap | 45 +++++++++++++++++++ .../src/server/plugins/__tests__/init.test.ts | 38 ++++++++++++++++ .../docusaurus/src/server/plugins/index.ts | 11 +++-- 3 files changed, 90 insertions(+), 4 deletions(-) diff --git a/packages/docusaurus/src/server/plugins/__tests__/__snapshots__/init.test.ts.snap b/packages/docusaurus/src/server/plugins/__tests__/__snapshots__/init.test.ts.snap index c769356939e3..8f50acccbed8 100644 --- a/packages/docusaurus/src/server/plugins/__tests__/__snapshots__/init.test.ts.snap +++ b/packages/docusaurus/src/server/plugins/__tests__/__snapshots__/init.test.ts.snap @@ -82,3 +82,48 @@ Array [ }, ] `; + +exports[`sortConfig should sort route config given a baseURL 1`] = ` +Array [ + Object { + "component": "", + "path": "/latest/community", + }, + Object { + "component": "", + "path": "/latest/example", + }, + Object { + "component": "", + "path": "/latest/some-page", + }, + Object { + "component": "", + "path": "/latest/docs", + "routes": Array [ + Object { + "component": "", + "path": "/latest/docs/someDoc", + }, + Object { + "component": "", + "path": "/latest/docs/someOtherDoc", + }, + ], + }, + Object { + "component": "", + "path": "/latest", + "routes": Array [ + Object { + "component": "", + "path": "/latest/someDoc", + }, + Object { + "component": "", + "path": "/latest/someOtherDoc", + }, + ], + }, +] +`; diff --git a/packages/docusaurus/src/server/plugins/__tests__/init.test.ts b/packages/docusaurus/src/server/plugins/__tests__/init.test.ts index 8639048fdf88..474e3193874e 100644 --- a/packages/docusaurus/src/server/plugins/__tests__/init.test.ts +++ b/packages/docusaurus/src/server/plugins/__tests__/init.test.ts @@ -87,4 +87,42 @@ describe('sortConfig', () => { expect(routes).toMatchSnapshot(); }); + + test('should sort route config given a baseURL', () => { + const baseURL = '/latest'; + const routes: RouteConfig[] = [ + { + path: baseURL, + component: '', + routes: [ + {path: `${baseURL}/someDoc`, component: ''}, + {path: `${baseURL}/someOtherDoc`, component: ''}, + ], + }, + { + path: `${baseURL}/example`, + component: '', + }, + { + path: `${baseURL}/docs`, + component: '', + routes: [ + {path: `${baseURL}/docs/someDoc`, component: ''}, + {path: `${baseURL}/docs/someOtherDoc`, component: ''}, + ], + }, + { + path: `${baseURL}/community`, + component: '', + }, + { + path: `${baseURL}/some-page`, + component: '', + }, + ]; + + sortConfig(routes, baseURL); + + expect(routes).toMatchSnapshot(); + }); }); diff --git a/packages/docusaurus/src/server/plugins/index.ts b/packages/docusaurus/src/server/plugins/index.ts index 9ae40e38ecbb..8dd25771e027 100644 --- a/packages/docusaurus/src/server/plugins/index.ts +++ b/packages/docusaurus/src/server/plugins/index.ts @@ -26,15 +26,18 @@ import {chain} from 'lodash'; import {localizePluginTranslationFile} from '../translations/translations'; import applyRouteTrailingSlash from './applyRouteTrailingSlash'; -export function sortConfig(routeConfigs: RouteConfig[]): void { +export function sortConfig( + routeConfigs: RouteConfig[], + baseUrl: string = '/', +): void { // Sort the route config. This ensures that route with nested // routes is always placed last. routeConfigs.sort((a, b) => { // Root route should get placed last. - if (a.path === '/' && b.path !== '/') { + if (a.path === baseUrl && b.path !== baseUrl) { return 1; } - if (a.path !== '/' && b.path === '/') { + if (a.path !== baseUrl && b.path === baseUrl) { return -1; } @@ -221,7 +224,7 @@ export async function loadPlugins({ // Sort the route config. This ensures that route with nested // routes are always placed last. - sortConfig(pluginsRouteConfigs); + sortConfig(pluginsRouteConfigs, context.siteConfig.baseUrl); // Apply each plugin one after the other to translate the theme config function translateThemeConfig(