mirror of
https://github.com/facebook/docusaurus.git
synced 2025-05-11 08:07:26 +02:00
chore: move to monorepo (#1297)
* chore: move to monorepo * lint all js file * simplify circleCI * fix failing tests * fix tests due to folder rename * fix test since v1 website is renamed
This commit is contained in:
parent
6b1d2e8c9c
commit
1f91d19a8c
619 changed files with 12713 additions and 26817 deletions
95
packages/docusaurus-1.x/lib/server/metadataUtils.js
Normal file
95
packages/docusaurus-1.x/lib/server/metadataUtils.js
Normal file
|
@ -0,0 +1,95 @@
|
|||
/**
|
||||
* 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.
|
||||
*/
|
||||
|
||||
// split markdown header
|
||||
function splitHeader(content) {
|
||||
// New line characters need to handle all operating systems.
|
||||
const lines = content.split(/\r?\n/);
|
||||
if (lines[0] !== '---') {
|
||||
return {};
|
||||
}
|
||||
let i = 1;
|
||||
for (; i < lines.length - 1; ++i) {
|
||||
if (lines[i] === '---') {
|
||||
break;
|
||||
}
|
||||
}
|
||||
return {
|
||||
header: lines.slice(1, i + 1).join('\n'),
|
||||
content: lines.slice(i + 1).join('\n'),
|
||||
};
|
||||
}
|
||||
|
||||
// Extract markdown metadata header
|
||||
function extractMetadata(content) {
|
||||
const metadata = {};
|
||||
const both = splitHeader(content);
|
||||
|
||||
// if no content returned, then that means there was no header, and both.header is the content
|
||||
if (!both.content) {
|
||||
if (!both.header) {
|
||||
// if no both returned, then that means there was no header and no content => we return the current content of the file
|
||||
return {metadata, rawContent: content};
|
||||
}
|
||||
return {metadata, rawContent: both.header};
|
||||
}
|
||||
|
||||
// New line characters => to handle all operating systems.
|
||||
const lines = both.header.split(/\r?\n/);
|
||||
|
||||
// Loop that add to metadata the current content of the fields of the header
|
||||
// Like the format:
|
||||
// id:
|
||||
// title:
|
||||
// original_id:
|
||||
for (let i = 0; i < lines.length - 1; ++i) {
|
||||
const keyvalue = lines[i].split(':');
|
||||
const key = keyvalue[0].trim();
|
||||
let value = keyvalue
|
||||
.slice(1)
|
||||
.join(':')
|
||||
.trim();
|
||||
try {
|
||||
value = JSON.parse(value);
|
||||
} catch (err) {
|
||||
// Ignore the error as it means it's not a JSON value.
|
||||
}
|
||||
metadata[key] = value;
|
||||
}
|
||||
return {metadata, rawContent: both.content};
|
||||
}
|
||||
|
||||
// mdToHtml is a map from a markdown file name to its html link, used to
|
||||
// change relative markdown links that work on GitHub into actual site links
|
||||
function mdToHtml(Metadata, siteConfig) {
|
||||
const {baseUrl, docsUrl} = siteConfig;
|
||||
const result = {};
|
||||
Object.keys(Metadata).forEach(id => {
|
||||
const metadata = Metadata[id];
|
||||
if (metadata.language !== 'en' || metadata.original_id) {
|
||||
return;
|
||||
}
|
||||
let htmlLink = baseUrl + metadata.permalink.replace('/next/', '/');
|
||||
|
||||
const baseDocsPart = `${baseUrl}${docsUrl ? `${docsUrl}/` : ''}`;
|
||||
|
||||
const i18nDocsRegex = new RegExp(`^${baseDocsPart}en/`);
|
||||
const docsRegex = new RegExp(`^${baseDocsPart}`);
|
||||
if (i18nDocsRegex.test(htmlLink)) {
|
||||
htmlLink = htmlLink.replace(i18nDocsRegex, `${baseDocsPart}en/VERSION/`);
|
||||
} else {
|
||||
htmlLink = htmlLink.replace(docsRegex, `${baseDocsPart}VERSION/`);
|
||||
}
|
||||
result[metadata.source] = htmlLink;
|
||||
});
|
||||
return result;
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
extractMetadata,
|
||||
mdToHtml,
|
||||
};
|
Loading…
Add table
Add a link
Reference in a new issue