mirror of
https://github.com/facebook/docusaurus.git
synced 2025-07-27 13:38:33 +02:00
Refactor(server): share logic between server.js & generate.js (#856)
* nits too many comments * Refactor to blog.getPages * Refactor to getPost, fileToUrl, urlToFile * Refactor redirectcomponent generation for docs * nits & fix typo * Refactor to blog.getMetadata * Add test for getMetadata, fileToSUrl and urlToSource * use includes() and add 'markup' naming for function
This commit is contained in:
parent
bbfb4b09cb
commit
afec4bd47c
8 changed files with 249 additions and 214 deletions
|
@ -7,15 +7,13 @@
|
|||
|
||||
async function execute() {
|
||||
require('../write-translations.js');
|
||||
|
||||
const metadataUtils = require('./metadataUtils');
|
||||
const blog = require('./blog');
|
||||
const docs = require('./docs');
|
||||
|
||||
const CWD = process.cwd();
|
||||
const fs = require('fs-extra');
|
||||
const readMetadata = require('./readMetadata.js');
|
||||
const path = require('path');
|
||||
const {getPath} = require('../core/utils.js');
|
||||
const {minifyCss, isSeparateCss, autoPrefixCss} = require('./utils');
|
||||
const React = require('react');
|
||||
const mkdirp = require('mkdirp');
|
||||
|
@ -55,11 +53,6 @@ async function execute() {
|
|||
|
||||
console.log('generate.js triggered...');
|
||||
|
||||
// array of tags of enabled languages
|
||||
const enabledLanguages = env.translation
|
||||
.enabledLanguages()
|
||||
.map(lang => lang.tag);
|
||||
|
||||
readMetadata.generateMetadataDocs();
|
||||
const Metadata = require('../core/metadata.js');
|
||||
|
||||
|
@ -72,14 +65,10 @@ async function execute() {
|
|||
// needed when the project's a GitHub org page
|
||||
|
||||
const buildDir = join(CWD, 'build', siteConfig.projectName);
|
||||
|
||||
const mdToHtml = metadataUtils.mdToHtml(Metadata, siteConfig.baseUrl);
|
||||
|
||||
const Redirect = require('../core/Redirect.js');
|
||||
|
||||
fs.removeSync(join(CWD, 'build'));
|
||||
|
||||
// create html files for all docs by going through all doc ids
|
||||
const mdToHtml = metadataUtils.mdToHtml(Metadata, siteConfig.baseUrl);
|
||||
Object.keys(Metadata).forEach(id => {
|
||||
const metadata = Metadata[id];
|
||||
const file = docs.getFile(metadata);
|
||||
|
@ -87,34 +76,20 @@ async function execute() {
|
|||
return;
|
||||
}
|
||||
const rawContent = metadataUtils.extractMetadata(file).rawContent;
|
||||
const docComp = docs.getComponent(rawContent, mdToHtml, metadata);
|
||||
const str = renderToStaticMarkupWithDoctype(docComp);
|
||||
const str = docs.getMarkup(rawContent, mdToHtml, metadata);
|
||||
const targetFile = join(buildDir, metadata.permalink);
|
||||
writeFileAndCreateFolder(targetFile, str);
|
||||
|
||||
// generate english page redirects when languages are enabled
|
||||
if (
|
||||
env.translation.enabled &&
|
||||
metadata.permalink.indexOf('docs/en') !== -1
|
||||
) {
|
||||
const redirectlink = getPath(metadata.permalink, siteConfig.cleanUrl);
|
||||
const redirectComp = (
|
||||
<Redirect
|
||||
metadata={metadata}
|
||||
language={metadata.language}
|
||||
config={siteConfig}
|
||||
redirect={siteConfig.baseUrl + redirectlink}
|
||||
/>
|
||||
);
|
||||
const redirectStr = renderToStaticMarkupWithDoctype(redirectComp);
|
||||
|
||||
// create a redirects page for doc files
|
||||
const redirectFile = join(
|
||||
buildDir,
|
||||
metadata.permalink.replace('docs/en', 'docs')
|
||||
);
|
||||
writeFileAndCreateFolder(redirectFile, redirectStr);
|
||||
const redirectMarkup = docs.getRedirectMarkup(metadata);
|
||||
if (!redirectMarkup) {
|
||||
return;
|
||||
}
|
||||
const redirectFile = join(
|
||||
buildDir,
|
||||
metadata.permalink.replace('docs/en', 'docs')
|
||||
);
|
||||
writeFileAndCreateFolder(redirectFile, redirectMarkup);
|
||||
});
|
||||
|
||||
// copy docs assets if they exist
|
||||
|
@ -131,7 +106,6 @@ async function execute() {
|
|||
}
|
||||
readMetadata.generateMetadataBlog();
|
||||
const MetadataBlog = require('../core/MetadataBlog.js');
|
||||
const BlogPostLayout = require('../core/BlogPostLayout.js');
|
||||
|
||||
let files = glob.sync(join(CWD, 'blog', '**', '*.*'));
|
||||
files
|
||||
|
@ -145,61 +119,22 @@ async function execute() {
|
|||
if (extension !== '.md' && extension !== '.markdown') {
|
||||
return;
|
||||
}
|
||||
|
||||
// convert filename to use slashes
|
||||
const filePath = path
|
||||
.basename(normalizedFile)
|
||||
.replace('-', '/')
|
||||
.replace('-', '/')
|
||||
.replace('-', '/')
|
||||
.replace(/\.md$/, '.html');
|
||||
const result = metadataUtils.extractMetadata(
|
||||
fs.readFileSync(normalizedFile, {encoding: 'utf8'})
|
||||
);
|
||||
const rawContent = result.rawContent;
|
||||
const metadata = Object.assign(
|
||||
{path: filePath, content: rawContent},
|
||||
result.metadata
|
||||
);
|
||||
metadata.id = metadata.title;
|
||||
|
||||
const language = 'en';
|
||||
const blogPostComp = (
|
||||
<BlogPostLayout
|
||||
metadata={metadata}
|
||||
language={language}
|
||||
config={siteConfig}>
|
||||
{rawContent}
|
||||
</BlogPostLayout>
|
||||
);
|
||||
const str = renderToStaticMarkupWithDoctype(blogPostComp);
|
||||
|
||||
const targetFile = join(buildDir, 'blog', filePath);
|
||||
writeFileAndCreateFolder(targetFile, str);
|
||||
const urlPath = blog.fileToUrl(normalizedFile);
|
||||
const blogPost = blog.getPostMarkup(normalizedFile, siteConfig);
|
||||
if (!blogPost) {
|
||||
return;
|
||||
}
|
||||
const targetFile = join(buildDir, 'blog', urlPath);
|
||||
writeFileAndCreateFolder(targetFile, blogPost);
|
||||
});
|
||||
// create html files for all blog pages (collections of article previews)
|
||||
const BlogPageLayout = require('../core/BlogPageLayout.js');
|
||||
const perPage = 10;
|
||||
for (let page = 0; page < Math.ceil(MetadataBlog.length / perPage); page++) {
|
||||
const language = 'en';
|
||||
const metadata = {page, perPage};
|
||||
const blogPageComp = (
|
||||
<BlogPageLayout
|
||||
metadata={metadata}
|
||||
language={language}
|
||||
config={siteConfig}
|
||||
/>
|
||||
);
|
||||
const str = renderToStaticMarkupWithDoctype(blogPageComp);
|
||||
|
||||
const targetFile = join(
|
||||
buildDir,
|
||||
'blog',
|
||||
page > 0 ? `page${page + 1}` : '',
|
||||
'index.html'
|
||||
);
|
||||
writeFileAndCreateFolder(targetFile, str);
|
||||
}
|
||||
// create html files for all blog pages (collections of article previews)
|
||||
const blogPages = blog.getPagesMarkup(MetadataBlog.length, siteConfig);
|
||||
Object.keys(blogPages).forEach(pagePath => {
|
||||
const targetFile = join(buildDir, 'blog', pagePath);
|
||||
writeFileAndCreateFolder(targetFile, blogPages[pagePath]);
|
||||
});
|
||||
|
||||
// create rss files for all blog pages, if there are any blog files
|
||||
if (MetadataBlog.length > 0) {
|
||||
let targetFile = join(buildDir, 'blog', 'feed.xml');
|
||||
|
@ -344,6 +279,9 @@ async function execute() {
|
|||
fs.writeFileSync(mainCss, css);
|
||||
|
||||
// compile/copy pages from user
|
||||
const enabledLanguages = env.translation
|
||||
.enabledLanguages()
|
||||
.map(lang => lang.tag);
|
||||
files = glob.sync(join(CWD, 'pages', '**'));
|
||||
files.forEach(file => {
|
||||
// Why normalize? In case we are on Windows.
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue