From 93c77d4cc36b4d22e8ddb3c49b42792704742742 Mon Sep 17 00:00:00 2001 From: Joshua Date: Mon, 8 Jan 2024 15:13:42 -0600 Subject: [PATCH 1/6] fix 404 --- .../src/routes.ts | 7 +++++++ .../src/client/exports/ComponentCreator.tsx | 18 ++++++++++++++++++ .../src/server/plugins/routeConfig.ts | 8 ++++++++ 3 files changed, 33 insertions(+) diff --git a/packages/docusaurus-plugin-content-docs/src/routes.ts b/packages/docusaurus-plugin-content-docs/src/routes.ts index 0b7a6425594f..e9d4be461998 100644 --- a/packages/docusaurus-plugin-content-docs/src/routes.ts +++ b/packages/docusaurus-plugin-content-docs/src/routes.ts @@ -226,6 +226,13 @@ export async function buildAllRoutes( }), ), ); + if (param.options.routeBasePath === '/') { + subRoutes.push({ + path: '/*', + component: '@docusaurus/ComponentCreator', + exact: true, + }); + } // all docs routes are wrapped under a single parent route, this ensures // the theme layout never unmounts/remounts when navigating between versions diff --git a/packages/docusaurus/src/client/exports/ComponentCreator.tsx b/packages/docusaurus/src/client/exports/ComponentCreator.tsx index 33c0f4c90a6d..f352be8a007f 100644 --- a/packages/docusaurus/src/client/exports/ComponentCreator.tsx +++ b/packages/docusaurus/src/client/exports/ComponentCreator.tsx @@ -43,6 +43,24 @@ export default function ComponentCreator( }, }); } + if (path === '/*') { + return Loadable({ + loading: Loading, + loader: () => import('@theme/NotFound/Content'), + modules: ['@theme/NotFound/Content'], + webpack: () => [require.resolveWeak('@theme/NotFound/Content')], + render(loaded, props) { + const NotFoundContent = loaded.default; + return ( + + + + ); + }, + }); +} const chunkNames = routesChunkNames[`${path}-${hash}`]!; // eslint-disable-next-line @typescript-eslint/no-explicit-any diff --git a/packages/docusaurus/src/server/plugins/routeConfig.ts b/packages/docusaurus/src/server/plugins/routeConfig.ts index d757406bd09b..5822c2b23626 100644 --- a/packages/docusaurus/src/server/plugins/routeConfig.ts +++ b/packages/docusaurus/src/server/plugins/routeConfig.ts @@ -42,6 +42,14 @@ export function sortConfig( return -1; } + // Wildcard also should get placed last + if (a.path.endsWith('/*')) { + return 1; + } + if (b.path.endsWith('/*')) { + return -1; + } + if (a.routes && !b.routes) { return 1; } From 4d1fd5e9ce2a17b62cba85cbd0a84b0575b25209 Mon Sep 17 00:00:00 2001 From: Joshua Date: Mon, 8 Jan 2024 15:25:18 -0600 Subject: [PATCH 2/6] fix tsc issue --- packages/docusaurus-module-type-aliases/src/index.d.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/packages/docusaurus-module-type-aliases/src/index.d.ts b/packages/docusaurus-module-type-aliases/src/index.d.ts index 5cb44f06e402..126b3e5878c4 100644 --- a/packages/docusaurus-module-type-aliases/src/index.d.ts +++ b/packages/docusaurus-module-type-aliases/src/index.d.ts @@ -102,6 +102,10 @@ declare module '@theme/NotFound' { export default function NotFound(): JSX.Element; } +declare module '@theme/NotFound/Content' { + export default function NotFoundContent(): JSX.Element; +} + declare module '@theme/Root' { import type {ReactNode} from 'react'; From f552ef1fe43b841b1807853e1eae6cf0e45af954 Mon Sep 17 00:00:00 2001 From: Joshua Date: Mon, 8 Jan 2024 15:27:34 -0600 Subject: [PATCH 3/6] dont need exact --- packages/docusaurus-plugin-content-docs/src/routes.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/docusaurus-plugin-content-docs/src/routes.ts b/packages/docusaurus-plugin-content-docs/src/routes.ts index e9d4be461998..643390e1cf34 100644 --- a/packages/docusaurus-plugin-content-docs/src/routes.ts +++ b/packages/docusaurus-plugin-content-docs/src/routes.ts @@ -230,7 +230,6 @@ export async function buildAllRoutes( subRoutes.push({ path: '/*', component: '@docusaurus/ComponentCreator', - exact: true, }); } From 0eee193f35c8e6a96efedeeda35d0fe0896f002a Mon Sep 17 00:00:00 2001 From: Joshua Date: Mon, 8 Jan 2024 20:07:59 -0600 Subject: [PATCH 4/6] add comment --- packages/docusaurus-plugin-content-docs/src/routes.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/docusaurus-plugin-content-docs/src/routes.ts b/packages/docusaurus-plugin-content-docs/src/routes.ts index 643390e1cf34..d78953fdcd0c 100644 --- a/packages/docusaurus-plugin-content-docs/src/routes.ts +++ b/packages/docusaurus-plugin-content-docs/src/routes.ts @@ -226,6 +226,8 @@ export async function buildAllRoutes( }), ), ); + // Add a catch-all route for 404 support if routeBasePath is "/". + // (see https://github.com/facebook/docusaurus/issues/9688) if (param.options.routeBasePath === '/') { subRoutes.push({ path: '/*', From 0298116a93dfba4a5f2e50bcd532195b0e1695ec Mon Sep 17 00:00:00 2001 From: Joshua Date: Mon, 8 Jan 2024 20:51:15 -0600 Subject: [PATCH 5/6] Have ComponentCreator match routes --- packages/docusaurus/src/client/exports/ComponentCreator.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/docusaurus/src/client/exports/ComponentCreator.tsx b/packages/docusaurus/src/client/exports/ComponentCreator.tsx index f352be8a007f..2b7dfbcbaca2 100644 --- a/packages/docusaurus/src/client/exports/ComponentCreator.tsx +++ b/packages/docusaurus/src/client/exports/ComponentCreator.tsx @@ -43,7 +43,7 @@ export default function ComponentCreator( }, }); } - if (path === '/*') { + if (path.endsWith('/*')) { return Loadable({ loading: Loading, loader: () => import('@theme/NotFound/Content'), From 25d45e884a3432d772549a3819c18a0f06ec7169 Mon Sep 17 00:00:00 2001 From: Joshua Date: Tue, 9 Jan 2024 10:36:03 -0600 Subject: [PATCH 6/6] now thats prettier --- .../src/client/exports/ComponentCreator.tsx | 30 +++++++++---------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/packages/docusaurus/src/client/exports/ComponentCreator.tsx b/packages/docusaurus/src/client/exports/ComponentCreator.tsx index 2b7dfbcbaca2..88cebc261b3c 100644 --- a/packages/docusaurus/src/client/exports/ComponentCreator.tsx +++ b/packages/docusaurus/src/client/exports/ComponentCreator.tsx @@ -45,22 +45,22 @@ export default function ComponentCreator( } if (path.endsWith('/*')) { return Loadable({ - loading: Loading, - loader: () => import('@theme/NotFound/Content'), - modules: ['@theme/NotFound/Content'], - webpack: () => [require.resolveWeak('@theme/NotFound/Content')], - render(loaded, props) { - const NotFoundContent = loaded.default; - return ( - - - - ); - }, + loading: Loading, + loader: () => import('@theme/NotFound/Content'), + modules: ['@theme/NotFound/Content'], + webpack: () => [require.resolveWeak('@theme/NotFound/Content')], + render(loaded, props) { + const NotFoundContent = loaded.default; + return ( + + + + ); + }, }); -} + } const chunkNames = routesChunkNames[`${path}-${hash}`]!; // eslint-disable-next-line @typescript-eslint/no-explicit-any