From e7532e3000fefad3e5633ee7222ec25b7a490795 Mon Sep 17 00:00:00 2001 From: endiliey Date: Mon, 28 Oct 2019 16:54:29 +0700 Subject: [PATCH 1/4] fix(v2): nested routes should have wildcard/ not found page too --- CHANGELOG-2.x.md | 1 + .../__tests__/__snapshots__/routes.test.ts.snap | 6 +++++- packages/docusaurus/src/server/routes.ts | 16 +++++++++------- 3 files changed, 15 insertions(+), 8 deletions(-) diff --git a/CHANGELOG-2.x.md b/CHANGELOG-2.x.md index e8139d26401a..15c21cd4c2bd 100644 --- a/CHANGELOG-2.x.md +++ b/CHANGELOG-2.x.md @@ -9,6 +9,7 @@ - Refactor dark toggle into a hook. - Changed the way we read the `USE_SSH` env variable during deployment to be the same as in v1. - Add highlight specific lines in code blocks. +- Accessing `docs/` or `/docs/xxxx` should return not found page, not blank page. ## 2.0.0-alpha.31 diff --git a/packages/docusaurus/src/server/__tests__/__snapshots__/routes.test.ts.snap b/packages/docusaurus/src/server/__tests__/__snapshots__/routes.test.ts.snap index 8b3cb04aa871..03e05cd0ed69 100644 --- a/packages/docusaurus/src/server/__tests__/__snapshots__/routes.test.ts.snap +++ b/packages/docusaurus/src/server/__tests__/__snapshots__/routes.test.ts.snap @@ -131,7 +131,11 @@ export default [ component: ComponentCreator('docs/foo/baz'), -}], +}, + { + path: '*', + component: ComponentCreator('*') + }], }, { diff --git a/packages/docusaurus/src/server/routes.ts b/packages/docusaurus/src/server/routes.ts index 6f2bfa86194d..64a59a3a7eca 100644 --- a/packages/docusaurus/src/server/routes.ts +++ b/packages/docusaurus/src/server/routes.ts @@ -15,6 +15,12 @@ import { RouteModule, } from '@docusaurus/types'; +const notFoundRoute = ` + { + path: '*', + component: ComponentCreator('*') + }`; + function getModulePath(target: Module): string { if (typeof target === 'string') { return target; @@ -102,7 +108,9 @@ export async function loadRoutes(pluginsRouteConfigs: RouteConfig[]) { ); const routesStr = routes - ? `routes: [${routes.map(generateRouteCode).join(',')}],` + ? `routes: [${routes + .map(generateRouteCode) + .join(',')}, ${notFoundRoute}],` : ''; const exactStr = exact ? `exact: true,` : ''; @@ -116,12 +124,6 @@ export async function loadRoutes(pluginsRouteConfigs: RouteConfig[]) { } const routes = pluginsRouteConfigs.map(generateRouteCode); - const notFoundRoute = ` - { - path: '*', - component: ComponentCreator('*') - }`; - const routesConfig = ` ${routesImports.join('\n')} From 77702c66f4eea6ed8dd67565a6ec225de58e3ab2 Mon Sep 17 00:00:00 2001 From: endiliey Date: Mon, 28 Oct 2019 21:32:57 +0700 Subject: [PATCH 2/4] better fix --- CHANGELOG-2.x.md | 2 +- .../src/theme/DocPage/index.js | 10 ++++++++++ packages/docusaurus/src/client/exports/router.js | 8 ++++++++ .../__tests__/__snapshots__/routes.test.ts.snap | 6 +----- packages/docusaurus/src/server/routes.ts | 15 ++++++--------- website/src/theme/NotFound.js | 2 +- 6 files changed, 27 insertions(+), 16 deletions(-) create mode 100644 packages/docusaurus/src/client/exports/router.js diff --git a/CHANGELOG-2.x.md b/CHANGELOG-2.x.md index 15c21cd4c2bd..d6f8436f07cf 100644 --- a/CHANGELOG-2.x.md +++ b/CHANGELOG-2.x.md @@ -9,7 +9,7 @@ - Refactor dark toggle into a hook. - Changed the way we read the `USE_SSH` env variable during deployment to be the same as in v1. - Add highlight specific lines in code blocks. -- Accessing `docs/` or `/docs/xxxx` should return not found page, not blank page. +- Fix accessing `docs/` or `/docs/xxxx` that does not match any existing doc page should return 404 (Not found) page, not blank page. ## 2.0.0-alpha.31 diff --git a/packages/docusaurus-theme-classic/src/theme/DocPage/index.js b/packages/docusaurus-theme-classic/src/theme/DocPage/index.js index 635ec18cc254..05d069aa1138 100644 --- a/packages/docusaurus-theme-classic/src/theme/DocPage/index.js +++ b/packages/docusaurus-theme-classic/src/theme/DocPage/index.js @@ -13,9 +13,15 @@ import renderRoutes from '@docusaurus/renderRoutes'; import Layout from '@theme/Layout'; import DocSidebar from '@theme/DocSidebar'; import MDXComponents from '@theme/MDXComponents'; +import NotFound from '@theme/NotFound'; +import {matchPath} from '@docusaurus/router'; import styles from './styles.module.css'; +function matchingRouteExist(routes, pathname) { + return routes.some(route => matchPath(pathname, route)); +} + function DocPage(props) { const {route, docsMetadata, location} = props; const {permalinkToSidebar, docsSidebars} = docsMetadata; @@ -23,6 +29,10 @@ function DocPage(props) { const {siteConfig: {themeConfig = {}} = {}} = useDocusaurusContext(); const {sidebarCollapsible = true} = themeConfig; + if (!matchingRouteExist(route.routes, location.pathname)) { + return ; + } + return (
diff --git a/packages/docusaurus/src/client/exports/router.js b/packages/docusaurus/src/client/exports/router.js new file mode 100644 index 000000000000..3d8a171d1ea1 --- /dev/null +++ b/packages/docusaurus/src/client/exports/router.js @@ -0,0 +1,8 @@ +/** + * Copyright (c) 2017-present, Facebook, Inc. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +export * from 'react-router-dom'; diff --git a/packages/docusaurus/src/server/__tests__/__snapshots__/routes.test.ts.snap b/packages/docusaurus/src/server/__tests__/__snapshots__/routes.test.ts.snap index 03e05cd0ed69..8b3cb04aa871 100644 --- a/packages/docusaurus/src/server/__tests__/__snapshots__/routes.test.ts.snap +++ b/packages/docusaurus/src/server/__tests__/__snapshots__/routes.test.ts.snap @@ -131,11 +131,7 @@ export default [ component: ComponentCreator('docs/foo/baz'), -}, - { - path: '*', - component: ComponentCreator('*') - }], +}], }, { diff --git a/packages/docusaurus/src/server/routes.ts b/packages/docusaurus/src/server/routes.ts index 64a59a3a7eca..84d9c3c43237 100644 --- a/packages/docusaurus/src/server/routes.ts +++ b/packages/docusaurus/src/server/routes.ts @@ -15,12 +15,6 @@ import { RouteModule, } from '@docusaurus/types'; -const notFoundRoute = ` - { - path: '*', - component: ComponentCreator('*') - }`; - function getModulePath(target: Module): string { if (typeof target === 'string') { return target; @@ -108,9 +102,7 @@ export async function loadRoutes(pluginsRouteConfigs: RouteConfig[]) { ); const routesStr = routes - ? `routes: [${routes - .map(generateRouteCode) - .join(',')}, ${notFoundRoute}],` + ? `routes: [${routes.map(generateRouteCode).join(',')}],` : ''; const exactStr = exact ? `exact: true,` : ''; @@ -124,6 +116,11 @@ export async function loadRoutes(pluginsRouteConfigs: RouteConfig[]) { } const routes = pluginsRouteConfigs.map(generateRouteCode); + const notFoundRoute = ` + { + path: '*', + component: ComponentCreator('*') + }`; const routesConfig = ` ${routesImports.join('\n')} diff --git a/website/src/theme/NotFound.js b/website/src/theme/NotFound.js index 96ad2740b6b8..0fa379d527b4 100644 --- a/website/src/theme/NotFound.js +++ b/website/src/theme/NotFound.js @@ -7,7 +7,7 @@ import React from 'react'; import Layout from '@theme/Layout'; -import Feedback from '../pages/feedback'; +import Feedback from '@site/src/pages/feedback'; function NotFound({location}) { if (/^\/feedback/.test(location.pathname)) { From 8315ff942ecc517050d2972a4c95ffcdf843c344 Mon Sep 17 00:00:00 2001 From: endiliey Date: Mon, 28 Oct 2019 21:33:46 +0700 Subject: [PATCH 3/4] nits --- website/src/theme/NotFound.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/src/theme/NotFound.js b/website/src/theme/NotFound.js index 0fa379d527b4..96ad2740b6b8 100644 --- a/website/src/theme/NotFound.js +++ b/website/src/theme/NotFound.js @@ -7,7 +7,7 @@ import React from 'react'; import Layout from '@theme/Layout'; -import Feedback from '@site/src/pages/feedback'; +import Feedback from '../pages/feedback'; function NotFound({location}) { if (/^\/feedback/.test(location.pathname)) { From 181f53a67a966220e938746bce4dd6bd54ad4949 Mon Sep 17 00:00:00 2001 From: endiliey Date: Mon, 28 Oct 2019 21:37:40 +0700 Subject: [PATCH 4/4] space --- packages/docusaurus/src/server/routes.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/docusaurus/src/server/routes.ts b/packages/docusaurus/src/server/routes.ts index 84d9c3c43237..6f2bfa86194d 100644 --- a/packages/docusaurus/src/server/routes.ts +++ b/packages/docusaurus/src/server/routes.ts @@ -121,6 +121,7 @@ export async function loadRoutes(pluginsRouteConfigs: RouteConfig[]) { path: '*', component: ComponentCreator('*') }`; + const routesConfig = ` ${routesImports.join('\n')}