From 06044cffa7654e0d3e8d885deb9cc24eee95ff63 Mon Sep 17 00:00:00 2001 From: Alexey Pyltsyn Date: Wed, 22 Jan 2020 04:00:38 +0300 Subject: [PATCH] fix(v2): include base url in 404 route (#2237) * fix(v2): include base url in 404 route * Update tests --- .../__snapshots__/routes.test.ts.snap | 6 ++--- .../src/server/__tests__/routes.test.ts | 23 ++++++++++--------- packages/docusaurus/src/server/index.ts | 2 +- packages/docusaurus/src/server/routes.ts | 9 +++++--- 4 files changed, 22 insertions(+), 18 deletions(-) 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 5a38d6806f..b91f71b62f 100644 --- a/packages/docusaurus/src/server/__tests__/__snapshots__/routes.test.ts.snap +++ b/packages/docusaurus/src/server/__tests__/__snapshots__/routes.test.ts.snap @@ -55,7 +55,7 @@ export default [ ]; ", "routesPaths": Array [ - "404.html", + "/404.html", "/blog", ], } @@ -141,7 +141,7 @@ export default [ ]; ", "routesPaths": Array [ - "404.html", + "/404.html", "/docs/hello", "docs/foo/baz", ], @@ -181,7 +181,7 @@ export default [ ]; ", "routesPaths": Array [ - "404.html", + "/404.html", "", ], } diff --git a/packages/docusaurus/src/server/__tests__/routes.test.ts b/packages/docusaurus/src/server/__tests__/routes.test.ts index 9889478077..f21c3ae79e 100644 --- a/packages/docusaurus/src/server/__tests__/routes.test.ts +++ b/packages/docusaurus/src/server/__tests__/routes.test.ts @@ -36,7 +36,7 @@ describe('loadRoutes', () => { }, ], }; - const result = await loadRoutes([nestedRouteConfig]); + const result = await loadRoutes([nestedRouteConfig], '/'); expect(result).toMatchSnapshot(); }); @@ -64,7 +64,7 @@ describe('loadRoutes', () => { ], }, }; - const result = await loadRoutes([flatRouteConfig]); + const result = await loadRoutes([flatRouteConfig], '/'); expect(result).toMatchSnapshot(); }); @@ -73,20 +73,21 @@ describe('loadRoutes', () => { component: 'hello/world.js', } as RouteConfig; - expect(loadRoutes([routeConfigWithoutPath])).rejects.toMatchInlineSnapshot(` - [Error: Invalid routeConfig (Path must be a string and component is required) - {"component":"hello/world.js"}] - `); + expect(loadRoutes([routeConfigWithoutPath], '/')).rejects + .toMatchInlineSnapshot(` + [Error: Invalid routeConfig (Path must be a string and component is required) + {"component":"hello/world.js"}] + `); const routeConfigWithoutComponent = { path: '/hello/world', } as RouteConfig; - expect(loadRoutes([routeConfigWithoutComponent])).rejects + expect(loadRoutes([routeConfigWithoutComponent], '/')).rejects .toMatchInlineSnapshot(` - [Error: Invalid routeConfig (Path must be a string and component is required) - {"path":"/hello/world"}] - `); + [Error: Invalid routeConfig (Path must be a string and component is required) + {"path":"/hello/world"}] + `); }); test('route config with empty (but valid) path string', async () => { @@ -95,7 +96,7 @@ describe('loadRoutes', () => { component: 'hello/world.js', } as RouteConfig; - const result = await loadRoutes([routeConfig]); + const result = await loadRoutes([routeConfig], '/'); expect(result).toMatchSnapshot(); }); }); diff --git a/packages/docusaurus/src/server/index.ts b/packages/docusaurus/src/server/index.ts index 62a1ee2e04..f140e88b64 100644 --- a/packages/docusaurus/src/server/index.ts +++ b/packages/docusaurus/src/server/index.ts @@ -143,7 +143,7 @@ export async function load(siteDir: string): Promise { routesChunkNames, routesConfig, routesPaths, - } = await loadRoutes(pluginsRouteConfigs); + } = await loadRoutes(pluginsRouteConfigs, baseUrl); const genRegistry = generate( generatedFilesDir, diff --git a/packages/docusaurus/src/server/routes.ts b/packages/docusaurus/src/server/routes.ts index 512684a64e..ad9f8f2734 100644 --- a/packages/docusaurus/src/server/routes.ts +++ b/packages/docusaurus/src/server/routes.ts @@ -5,7 +5,7 @@ * LICENSE file in the root directory of this source tree. */ -import {genChunkName} from '@docusaurus/utils'; +import {genChunkName, normalizeUrl} from '@docusaurus/utils'; import _ from 'lodash'; import {stringify} from 'querystring'; import { @@ -38,7 +38,10 @@ function getModulePath(target: Module): string { return `${target.path}${queryStr}`; } -export async function loadRoutes(pluginsRouteConfigs: RouteConfig[]) { +export async function loadRoutes( + pluginsRouteConfigs: RouteConfig[], + baseUrl: string, +) { const routesImports = [ `import React from 'react';`, `import ComponentCreator from '@docusaurus/ComponentCreator';`, @@ -46,7 +49,7 @@ export async function loadRoutes(pluginsRouteConfigs: RouteConfig[]) { const registry: { [chunkName: string]: ChunkRegistry; } = {}; - const routesPaths: string[] = ['404.html']; + const routesPaths: string[] = [normalizeUrl([baseUrl, '404.html'])]; const routesChunkNames: { [routePath: string]: ChunkNames; } = {};