diff --git a/packages/docusaurus-plugin-content-docs/src/__tests__/__snapshots__/index.test.ts.snap b/packages/docusaurus-plugin-content-docs/src/__tests__/__snapshots__/index.test.ts.snap index 9c2e00cd326b..10d968db2eb2 100644 --- a/packages/docusaurus-plugin-content-docs/src/__tests__/__snapshots__/index.test.ts.snap +++ b/packages/docusaurus-plugin-content-docs/src/__tests__/__snapshots__/index.test.ts.snap @@ -28,7 +28,7 @@ Object { "type": "link", }, Object { - "href": "/docs/hello", + "href": "/docs", "label": "Hello, World !", "type": "link", }, @@ -40,7 +40,7 @@ Object { "collapsed": true, "items": Array [ Object { - "href": "/docs/hello", + "href": "/docs", "label": "Hello, World !", "type": "link", }, @@ -87,14 +87,6 @@ Array [ }, "path": "/docs/foo/baz", }, - Object { - "component": "@theme/DocItem", - "exact": true, - "modules": Object { - "content": "@site/docs/hello.md", - }, - "path": "/docs/hello", - }, Object { "component": "@theme/DocItem", "exact": true, @@ -169,14 +161,6 @@ Array [ }, "path": "/docs/1.0.0/foo/baz", }, - Object { - "component": "@theme/DocItem", - "exact": true, - "modules": Object { - "content": "@site/versioned_docs/version-1.0.0/hello.md", - }, - "path": "/docs/1.0.0/hello", - }, ], }, Object { @@ -195,14 +179,6 @@ Array [ }, "path": "/docs/next/foo/bar", }, - Object { - "component": "@theme/DocItem", - "exact": true, - "modules": Object { - "content": "@site/docs/hello.md", - }, - "path": "/docs/next/hello", - }, ], }, Object { @@ -221,14 +197,6 @@ Array [ }, "path": "/docs/foo/bar", }, - Object { - "component": "@theme/DocItem", - "exact": true, - "modules": Object { - "content": "@site/versioned_docs/version-1.0.1/hello.md", - }, - "path": "/docs/hello", - }, ], }, ] @@ -253,7 +221,7 @@ Object { "collapsed": true, "items": Array [ Object { - "href": "/docs/next/hello", + "href": "/docs/next", "label": "hello", "type": "link", }, @@ -284,7 +252,7 @@ Object { "collapsed": true, "items": Array [ Object { - "href": "/docs/1.0.0/hello", + "href": "/docs/1.0.0", "label": "hello", "type": "link", }, @@ -310,7 +278,7 @@ Object { "collapsed": true, "items": Array [ Object { - "href": "/docs/hello", + "href": "/docs", "label": "hello", "type": "link", }, @@ -347,7 +315,7 @@ Object { "collapsed": true, "items": Array [ Object { - "href": "/docs/1.0.0/hello", + "href": "/docs/1.0.0", "label": "hello", "type": "link", }, @@ -386,7 +354,7 @@ Object { "collapsed": true, "items": Array [ Object { - "href": "/docs/hello", + "href": "/docs", "label": "hello", "type": "link", }, @@ -424,7 +392,7 @@ Object { "collapsed": true, "items": Array [ Object { - "href": "/docs/next/hello", + "href": "/docs/next", "label": "hello", "type": "link", }, diff --git a/packages/docusaurus-plugin-content-docs/src/index.ts b/packages/docusaurus-plugin-content-docs/src/index.ts index 19405bd07d9f..d83fb4d511b2 100644 --- a/packages/docusaurus-plugin-content-docs/src/index.ts +++ b/packages/docusaurus-plugin-content-docs/src/index.ts @@ -70,8 +70,6 @@ export default function pluginContentDocs( opts: Partial, ): Plugin { const options = {...DEFAULT_OPTIONS, ...opts}; - const homePageDocsRoutePath = - options.routeBasePath === '' ? '/' : options.routeBasePath; if (options.admonitions) { options.remarkPlugins = options.remarkPlugins.concat([ @@ -98,6 +96,24 @@ export default function pluginContentDocs( } = versioning; const versionsNames = versions.map((version) => `version-${version}`); + // Docs home page. + const homePageDocsRoutePath = + options.routeBasePath === '' ? '/' : options.routeBasePath; + const isDocsHomePagePath = (permalink: string) => { + const documentIdMatch = new RegExp( + `^\/(?:${homePageDocsRoutePath}\/)?(?:(?:${versions.join( + '|', + )}|next)\/)?(.*)`, + 'i', + ).exec(permalink); + + if (documentIdMatch) { + return documentIdMatch[1] === options.homePageId; + } + + return false; + }; + return { name: 'docusaurus-plugin-content-docs', @@ -268,10 +284,14 @@ export default function pluginContentDocs( ); } + const {title, permalink, sidebar_label} = linkMetadata; + return { type: 'link', - label: linkMetadata.sidebar_label || linkMetadata.title, - href: linkMetadata.permalink, + label: sidebar_label || title, + href: isDocsHomePagePath(permalink) + ? permalink.replace(`/${options.homePageId}`, '') + : permalink, }; }; @@ -361,7 +381,6 @@ export default function pluginContentDocs( baseUrl, homePageDocsRoutePath, versionDocsPathPrefix, - options.homePageId, ]); const docsBaseMetadataPath = await createData( `${docuHash(metadataItem.source)}-base.json`, @@ -404,12 +423,9 @@ export default function pluginContentDocs( return ( routes - // Do not create a route for a page created specifically for docs home page. - .filter( - ({path}) => - path.substr(path.lastIndexOf('/') + 1) !== - REVERSED_DOCS_HOME_PAGE_ID, - ) + // Do not create a route for a document serve as docs home page. + // TODO: need way to do this filtering when generating routes for better perf. + .filter(({path}) => !isDocsHomePagePath(path)) .sort((a, b) => (a.path > b.path ? 1 : b.path > a.path ? -1 : 0)) ); }; diff --git a/website/docs/docs.md b/website/docs/docs.md index 1f4546555fdf..b45a73e0d86f 100644 --- a/website/docs/docs.md +++ b/website/docs/docs.md @@ -51,7 +51,7 @@ module.exports = { }; ``` -Given the example above, now when you navigate to the path `/docs` you will see that the document content with id is `getting-started`. This functionality also works for docs with versioning enabled. +Given the example above, now when you navigate to the path `/docs` you will see that the document content with id is `getting-started`. This functionality also works for docs with versioning enabled. Importantly, with document serves as home docs page, it will not be available at its URL. Following the example above, this means that the `docs/getting-started` URL will be lead to a 404 error. :::important