Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix: reload siteConfig.js automatically when locally served page is refreshed #1509

Merged
merged 3 commits into from
May 22, 2019
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion jest.config.js
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,8 @@ module.exports = {
testPathIgnorePatterns: [
'/node_modules/',
'__fixtures__',
'/packages/.*/lib',
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Otherwise it is ignoring the tests on v1. My bad !!

'/packages/docusaurus/lib',
'/packages/docusaurus-utils/lib',
],
transform: {
'^.+\\.[jt]sx?$': 'babel-jest',
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ exports[`mdToHtmlify transform link even in subdirectory 1`] = `
Test subdirectory file

### Replace this
- [doc3](/docs/subdir/doc3)
- [doc3](/docs/subdir/doc3.html)
"
`;

Expand Down Expand Up @@ -33,17 +33,17 @@ exports[`mdToHtmlify transform to correct link 1`] = `
"
### Existing Docs

- [doc1](/docs/en/next/doc1)
- [doc2](/docs/en/next/doc2)
- [doc1](/docs/en/next/doc1.html)
- [doc2](/docs/en/next/doc2.html)

### Non-existing Docs

- [hahaha](hahaha.md)

## Repeating Docs

- [doc1](/docs/en/next/doc1)
- [doc2](/docs/en/next/doc2)
- [doc1](/docs/en/next/doc1.html)
- [doc2](/docs/en/next/doc2.html)

## Do not replace this
\`\`\`md
Expand Down Expand Up @@ -84,8 +84,8 @@ console.log(\\"[image2][image2]\\");
const testStr = \`![image3][image3]\`;
\`\`\`

[doc1]: /docs/en/next/doc1
[doc2]: /docs/en/next/doc2
[doc1]: /docs/en/next/doc1.html
[doc2]: /docs/en/next/doc2.html
[hahaha]: hahaha.md
[image1]: assets/image1.png
[image2]: assets/image2.jpg
Expand Down
16 changes: 9 additions & 7 deletions packages/docusaurus-1.x/lib/server/__tests__/blog.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -10,9 +10,9 @@ const blog = require('../blog');
const metadataUtils = require('../metadataUtils');
const {replaceAssetsLink} = require('../utils.js');

jest.mock(`${process.cwd()}/siteConfig.js`, () => ({baseUrl: '/'}), {
virtual: true,
});
const siteConfig = {
baseUrl: '/',
};

const testFile = path.join(
__dirname,
Expand All @@ -25,16 +25,18 @@ fs.existsSync = jest.fn().mockReturnValue(true);
describe('getMetadata', () => {
test('file does not exist', () => {
fs.existsSync.mockReturnValueOnce(null);
expect(blog.getMetadata('/this/path/does-not-exist/')).toBeNull();
expect(
blog.getMetadata('/this/path/does-not-exist/', siteConfig),
).toBeNull();
});

test('null/undefined', () => {
expect(blog.getMetadata(null)).toBeNull();
expect(blog.getMetadata(undefined)).toBeNull();
expect(blog.getMetadata(null, siteConfig)).toBeNull();
expect(blog.getMetadata(undefined, siteConfig)).toBeNull();
});

test('blog file', () => {
const metadata = blog.getMetadata(testFile);
const metadata = blog.getMetadata(testFile, siteConfig);
expect(metadata).toMatchSnapshot();
expect(metadata).not.toBeNull();
expect(metadata).toHaveProperty('id');
Expand Down
4 changes: 4 additions & 0 deletions packages/docusaurus-1.x/lib/server/__tests__/docs.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -79,6 +79,7 @@ describe('mdToHtmlify', () => {
rawContent1,
mdToHtml,
Metadata['en-doc1'],
siteConfig,
);
expect(content1).not.toContain('/docs/en/next/');
expect(content1).toMatchSnapshot();
Expand All @@ -90,6 +91,7 @@ describe('mdToHtmlify', () => {
rawContent2,
mdToHtml,
Metadata['en-doc2'],
siteConfig,
);
expect(content2).toContain('/docs/en/next/');
expect(content2).toMatchSnapshot();
Expand All @@ -111,6 +113,7 @@ describe('mdToHtmlify', () => {
rawContent3,
customMdToHtml,
customMetadata['subdir-doc3'],
siteConfig,
);
expect(content3).toContain('/docs/subdir/doc3');
expect(content3).not.toContain('subdir/doc3.md');
Expand All @@ -123,6 +126,7 @@ describe('mdToHtmlify', () => {
rawContentRefLinks,
mdToHtml,
Metadata['en-reflinks'],
siteConfig,
);
expect(contentRefLinks).toContain('/docs/en/next/');
expect(contentRefLinks).toMatchSnapshot();
Expand Down
17 changes: 7 additions & 10 deletions packages/docusaurus-1.x/lib/server/blog.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,16 +4,13 @@
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/
const CWD = process.cwd();

const React = require('react');
const path = require('path');
const fs = require('fs-extra');
const metadataUtils = require('./metadataUtils');
const {replaceAssetsLink} = require('./utils.js');
const {renderToStaticMarkupWithDoctype} = require('./renderUtils');
const loadConfig = require('./config');

const siteConfig = loadConfig(`${CWD}/siteConfig.js`);
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

less CWD calls >.<


function urlToSource(url) {
if (!url || typeof url !== 'string') {
Expand All @@ -34,14 +31,14 @@ function fileToUrl(file) {
.replace(/\.md$/, '.html');
}

function getPagesMarkup(numOfBlog, config) {
function getPagesMarkup(numOfBlog, siteConfig) {
const BlogPageLayout = require('../core/BlogPageLayout.js');
const blogPages = {};
const perPage = 10;
for (let page = 0; page < Math.ceil(numOfBlog / perPage); page++) {
const metadata = {page, perPage};
const blogPageComp = (
<BlogPageLayout metadata={metadata} language="en" config={config} />
<BlogPageLayout metadata={metadata} language="en" config={siteConfig} />
);
const str = renderToStaticMarkupWithDoctype(blogPageComp);
const pagePath = `${page > 0 ? `page${page + 1}` : ''}/index.html`;
Expand All @@ -50,7 +47,7 @@ function getPagesMarkup(numOfBlog, config) {
return blogPages;
}

function getMetadata(file) {
function getMetadata(file, siteConfig) {
if (!file || !fs.existsSync(file)) {
return null;
}
Expand All @@ -71,14 +68,14 @@ function getMetadata(file) {
return metadata;
}

function getPostMarkup(file, config) {
const metadata = getMetadata(file);
function getPostMarkup(file, siteConfig) {
const metadata = getMetadata(file, siteConfig);
if (!metadata) {
return null;
}
const BlogPostLayout = require('../core/BlogPostLayout.js');
const blogPostComp = (
<BlogPostLayout metadata={metadata} language="en" config={config}>
<BlogPostLayout metadata={metadata} language="en" config={siteConfig}>
{metadata.content}
</BlogPostLayout>
);
Expand Down
13 changes: 5 additions & 8 deletions packages/docusaurus-1.x/lib/server/docs.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,18 +9,14 @@ const {join} = require('path');
const {resolve} = require('url');
const fs = require('fs-extra');
const React = require('react');
const loadConfig = require('./config');

const siteConfig = loadConfig(`${CWD}/siteConfig.js`);
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No more cwd calls

const env = require('./env.js');
const {renderToStaticMarkupWithDoctype} = require('./renderUtils');
const readMetadata = require('./readMetadata.js');
const {insertTOC} = require('../core/toc.js');
const {replaceAssetsLink} = require('./utils.js');
const {getPath} = require('../core/utils.js');

const docsPart = `${siteConfig.docsUrl ? `${siteConfig.docsUrl}/` : ''}`;

function getFilePath(metadata) {
if (!metadata) {
return null;
Expand Down Expand Up @@ -51,7 +47,7 @@ function getFile(metadata) {
return fs.readFileSync(file, 'utf8');
}

function mdToHtmlify(oldContent, mdToHtml, metadata) {
function mdToHtmlify(oldContent, mdToHtml, metadata, siteConfig) {
/* Store broken links */
const mdBrokenLinks = [];

Expand Down Expand Up @@ -106,12 +102,12 @@ function mdToHtmlify(oldContent, mdToHtml, metadata) {
return content;
}

function getMarkup(rawContent, mdToHtml, metadata) {
function getMarkup(rawContent, mdToHtml, metadata, siteConfig) {
// generate table of contents
let content = insertTOC(rawContent);

// replace any links to markdown files to their website html links
content = mdToHtmlify(content, mdToHtml, metadata);
content = mdToHtmlify(content, mdToHtml, metadata, siteConfig);

// replace any relative links to static assets (not in fenced code blocks) to absolute links
const docsAssetsLocation = siteConfig.docsUrl
Expand All @@ -130,7 +126,8 @@ function getMarkup(rawContent, mdToHtml, metadata) {
);
}

function getRedirectMarkup(metadata) {
function getRedirectMarkup(metadata, siteConfig) {
const docsPart = `${siteConfig.docsUrl ? `${siteConfig.docsUrl}/` : ''}`;
if (
!env.translation.enabled ||
!metadata.permalink.includes(`${docsPart}en`)
Expand Down
2 changes: 1 addition & 1 deletion packages/docusaurus-1.x/lib/server/feed.js
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ module.exports = function(type) {

type = type || 'rss';

readMetadata.generateMetadataBlog();
readMetadata.generateMetadataBlog(siteConfig);
const MetadataBlog = require('../core/MetadataBlog.js');

const feed = new Feed({
Expand Down
6 changes: 3 additions & 3 deletions packages/docusaurus-1.x/lib/server/generate.js
Original file line number Diff line number Diff line change
Expand Up @@ -79,12 +79,12 @@ async function execute() {
return;
}
const rawContent = metadataUtils.extractMetadata(file).rawContent;
const str = docs.getMarkup(rawContent, mdToHtml, metadata);
const str = docs.getMarkup(rawContent, mdToHtml, metadata, siteConfig);
const targetFile = join(buildDir, metadata.permalink);
writeFileAndCreateFolder(targetFile, str);

// generate english page redirects when languages are enabled
const redirectMarkup = docs.getRedirectMarkup(metadata);
const redirectMarkup = docs.getRedirectMarkup(metadata, siteConfig);
if (!redirectMarkup) {
return;
}
Expand All @@ -111,7 +111,7 @@ async function execute() {
if (fs.existsSync(join(__dirname, '..', 'core', 'MetadataBlog.js'))) {
fs.removeSync(join(__dirname, '..', 'core', 'MetadataBlog.js'));
}
readMetadata.generateMetadataBlog();
readMetadata.generateMetadataBlog(siteConfig);
const MetadataBlog = require('../core/MetadataBlog.js');

let files = glob.sync(join(CWD, 'blog', '**', '*.*'));
Expand Down
4 changes: 2 additions & 2 deletions packages/docusaurus-1.x/lib/server/readMetadata.js
Original file line number Diff line number Diff line change
Expand Up @@ -360,7 +360,7 @@ function generateMetadataDocs() {
}

// process metadata for blog posts and save into core/MetadataBlog.js
function generateMetadataBlog() {
function generateMetadataBlog(config = siteConfig) {
const metadatas = [];

const files = glob.sync(`${CWD}/blog/**/*.*`);
Expand All @@ -372,7 +372,7 @@ function generateMetadataBlog() {
if (extension !== '.md' && extension !== '.markdown') {
return;
}
const metadata = blog.getMetadata(file);
const metadata = blog.getMetadata(file, config);
// Extract, YYYY, MM, DD from the file name
const filePathDateArr = path.basename(file).split('-');
metadata.date = new Date(
Expand Down
25 changes: 17 additions & 8 deletions packages/docusaurus-1.x/lib/server/server.js
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,18 @@ function execute(port, host) {
let MetadataBlog;
let siteConfig;

function reloadSiteConfig() {
const siteConfigPath = join(CWD, 'siteConfig.js');
removeModuleAndChildrenFromCache(siteConfigPath);
const oldBaseUrl = siteConfig && siteConfig.baseUrl;
siteConfig = loadConfig(siteConfigPath);

if (oldBaseUrl && oldBaseUrl !== siteConfig.baseUrl) {
console.log('Base url has changed. Please restart server ...');
process.exit();
}
}

function reloadMetadata() {
removeModuleAndChildrenFromCache('./readMetadata.js');
readMetadata.generateMetadataDocs();
Expand All @@ -72,16 +84,11 @@ function execute(port, host) {
removeModuleAndChildrenFromCache(join('..', 'core', 'MetadataBlog.js'));
fs.removeSync(join(__dirname, '..', 'core', 'MetadataBlog.js'));
}
readMetadata.generateMetadataBlog();
reloadSiteConfig();
readMetadata.generateMetadataBlog(siteConfig);
MetadataBlog = require(join('..', 'core', 'MetadataBlog.js'));
}

function reloadSiteConfig() {
const siteConfigPath = join(CWD, 'siteConfig.js');
removeModuleAndChildrenFromCache(siteConfigPath);
siteConfig = loadConfig(siteConfigPath);
}

function requestFile(url, res, notFoundCallback) {
request.get(url, (error, response, body) => {
if (!error) {
Expand Down Expand Up @@ -119,10 +126,11 @@ function execute(port, host) {
next();
return;
}
reloadSiteConfig();
const rawContent = metadataUtils.extractMetadata(file).rawContent;
removeModuleAndChildrenFromCache('../core/DocsLayout.js');
const mdToHtml = metadataUtils.mdToHtml(Metadata, siteConfig);
res.send(docs.getMarkup(rawContent, mdToHtml, metadata));
res.send(docs.getMarkup(rawContent, mdToHtml, metadata, siteConfig));
});

app.get(routing.sitemap(siteConfig), (req, res) => {
Expand Down Expand Up @@ -177,6 +185,7 @@ function execute(port, host) {
});

app.get(routing.page(siteConfig), (req, res, next) => {
reloadSiteConfig();
// Look for user-provided HTML file first.
let htmlFile = req.path.toString().replace(siteConfig.baseUrl, '');
htmlFile = join(CWD, 'pages', htmlFile);
Expand Down
2 changes: 1 addition & 1 deletion packages/docusaurus-1.x/lib/server/sitemap.js
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ const readMetadata = require('./readMetadata.js');
readMetadata.generateMetadataDocs();
const Metadata = require('../core/metadata.js');

readMetadata.generateMetadataBlog();
readMetadata.generateMetadataBlog(siteConfig);
const MetadataBlog = require('../core/MetadataBlog.js');

module.exports = function(callback) {
Expand Down
6 changes: 3 additions & 3 deletions website-1.x/siteConfig.js
Original file line number Diff line number Diff line change
Expand Up @@ -20,10 +20,10 @@ const siteConfig = {
users,
editUrl: 'https://github.com/facebook/docusaurus/edit/master/docs/',
headerLinks: [
{doc: 'installation', label: 'Docs'},
{doc: 'installation', label: 'Docu'},
{href: '/docs/en/next/tutorial-setup', label: 'Tutorial'},
{page: 'users', label: 'Users'},
{blog: true, label: 'Blog'},
{page: 'users', label: 'Use'},
{blog: true, label: 'Blox'},
{
href: 'https://github.com/facebook/docusaurus',
label: 'GitHub',
Expand Down