mirror of
https://github.com/facebook/docusaurus.git
synced 2025-05-10 15:47:23 +02:00
Fix bad routing regex for docs & blogs (#795)
* fix bad routing regex for docs & blogs * extract to routing.js & add test * add more test case * address code review * prettier
This commit is contained in:
parent
5a8e9a9ff1
commit
66b2033546
3 changed files with 86 additions and 3 deletions
62
lib/core/__tests__/routing.test.js
Normal file
62
lib/core/__tests__/routing.test.js
Normal file
|
@ -0,0 +1,62 @@
|
||||||
|
/**
|
||||||
|
* 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
const {docsRouting, blogRouting} = require('../routing');
|
||||||
|
|
||||||
|
describe('Blog routing', () => {
|
||||||
|
const blogRegex = blogRouting('/');
|
||||||
|
const blogRegex2 = blogRouting('/react/');
|
||||||
|
|
||||||
|
test('valid blog', () => {
|
||||||
|
expect('/blog/test.html').toMatch(blogRegex);
|
||||||
|
expect('/react/blog/test.html').toMatch(blogRegex2);
|
||||||
|
});
|
||||||
|
|
||||||
|
test('invalid blog', () => {
|
||||||
|
expect('/react/blog/test.html').not.toMatch(blogRegex);
|
||||||
|
expect('/blog/test.html').not.toMatch(blogRegex2);
|
||||||
|
});
|
||||||
|
|
||||||
|
test('assets not classified as blog', () => {
|
||||||
|
expect('/blog/assets/any.png').not.toMatch(blogRegex);
|
||||||
|
expect('/react/blog/assets/any.png').not.toMatch(blogRegex2);
|
||||||
|
});
|
||||||
|
|
||||||
|
test('docs not classified as blog', () => {
|
||||||
|
expect('/docs/en/blog.html').not.toMatch(blogRegex);
|
||||||
|
expect('/docs/en/blog/blog.html').not.toMatch(blogRegex);
|
||||||
|
expect('/react/docs/en/blog.html').not.toMatch(blogRegex2);
|
||||||
|
expect('/react/docs/en/blog/blog.html').not.toMatch(blogRegex2);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('Docs routing', () => {
|
||||||
|
const docsRegex = docsRouting('/');
|
||||||
|
const docsRegex2 = docsRouting('/reason/');
|
||||||
|
|
||||||
|
test('valid docs', () => {
|
||||||
|
expect('/docs/en/test.html').toMatch(docsRegex);
|
||||||
|
expect('/reason/docs/en/test.html').toMatch(docsRegex2);
|
||||||
|
});
|
||||||
|
|
||||||
|
test('invalid docs', () => {
|
||||||
|
expect('/reason/docs/en/test.html').not.toMatch(docsRegex);
|
||||||
|
expect('/docs/en/test.html').not.toMatch(docsRegex2);
|
||||||
|
});
|
||||||
|
|
||||||
|
test('assets not classified as docs', () => {
|
||||||
|
expect('/docs/en/notvalid.png').not.toMatch(docsRegex);
|
||||||
|
expect('/reason/docs/en/notvalid.png').not.toMatch(docsRegex2);
|
||||||
|
});
|
||||||
|
|
||||||
|
test('blog not classified as docs', () => {
|
||||||
|
expect('/blog/docs.html').not.toMatch(docsRegex);
|
||||||
|
expect('/blog/docs/docs.html').not.toMatch(docsRegex);
|
||||||
|
expect('/reason/blog/docs.html').not.toMatch(docsRegex2);
|
||||||
|
expect('/reason/blog/docs/docs.html').not.toMatch(docsRegex2);
|
||||||
|
});
|
||||||
|
});
|
20
lib/core/routing.js
Normal file
20
lib/core/routing.js
Normal file
|
@ -0,0 +1,20 @@
|
||||||
|
/**
|
||||||
|
* 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.
|
||||||
|
*/
|
||||||
|
const escapeStringRegexp = require('escape-string-regexp');
|
||||||
|
|
||||||
|
function docsRouting(baseUrl) {
|
||||||
|
return new RegExp(`^${escapeStringRegexp(baseUrl)}docs\/.*html$`);
|
||||||
|
}
|
||||||
|
|
||||||
|
function blogRouting(baseUrl) {
|
||||||
|
return new RegExp(`^${escapeStringRegexp(baseUrl)}blog\/.*html$`);
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = {
|
||||||
|
docsRouting,
|
||||||
|
blogRouting,
|
||||||
|
};
|
|
@ -20,6 +20,7 @@ function execute(port, options) {
|
||||||
const path = require('path');
|
const path = require('path');
|
||||||
const color = require('color');
|
const color = require('color');
|
||||||
const getTOC = require('../core/getTOC');
|
const getTOC = require('../core/getTOC');
|
||||||
|
const {docsRouting, blogRouting} = require('../core/routing');
|
||||||
const mkdirp = require('mkdirp');
|
const mkdirp = require('mkdirp');
|
||||||
const glob = require('glob');
|
const glob = require('glob');
|
||||||
const chalk = require('chalk');
|
const chalk = require('chalk');
|
||||||
|
@ -129,10 +130,10 @@ function execute(port, options) {
|
||||||
extractTranslations();
|
extractTranslations();
|
||||||
reloadSiteConfig();
|
reloadSiteConfig();
|
||||||
|
|
||||||
// handle all requests for document pages
|
|
||||||
const app = express();
|
const app = express();
|
||||||
|
|
||||||
app.get(/\/docs\/.*html$/, (req, res, next) => {
|
// handle all requests for document pages
|
||||||
|
app.get(docsRouting(siteConfig.baseUrl), (req, res, next) => {
|
||||||
let url = req.path.toString().replace(siteConfig.baseUrl, '');
|
let url = req.path.toString().replace(siteConfig.baseUrl, '');
|
||||||
|
|
||||||
// links is a map from a permalink to an id for each document
|
// links is a map from a permalink to an id for each document
|
||||||
|
@ -275,7 +276,7 @@ function execute(port, options) {
|
||||||
});
|
});
|
||||||
|
|
||||||
// Handle all requests for blog pages and posts.
|
// Handle all requests for blog pages and posts.
|
||||||
app.get(/\/blog\/.*html$/, (req, res) => {
|
app.get(blogRouting(siteConfig.baseUrl), (req, res) => {
|
||||||
// Regenerate the blog metadata in case it has changed. Consider improving
|
// Regenerate the blog metadata in case it has changed. Consider improving
|
||||||
// this to regenerate on file save rather than on page request.
|
// this to regenerate on file save rather than on page request.
|
||||||
reloadMetadataBlog();
|
reloadMetadataBlog();
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue