mirror of
https://github.com/facebook/docusaurus.git
synced 2025-04-30 02:37:59 +02:00
108 lines
2.7 KiB
JavaScript
108 lines
2.7 KiB
JavaScript
/**
|
|
* 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 fs = require('fs-extra');
|
|
const path = require('path');
|
|
const os = require('os');
|
|
const Feed = require('feed');
|
|
|
|
const chalk = require('chalk');
|
|
const glob = require('glob');
|
|
const CWD = process.cwd();
|
|
|
|
const sitemap = require('sitemap');
|
|
|
|
const siteConfig = require(CWD + '/siteConfig.js');
|
|
|
|
/****************************************************************************/
|
|
|
|
let readMetadata;
|
|
let Metadata;
|
|
let MetadataBlog;
|
|
|
|
readMetadata = require('./readMetadata.js');
|
|
readMetadata.generateMetadataDocs();
|
|
Metadata = require('../core/metadata.js');
|
|
readMetadata.generateMetadataBlog();
|
|
MetadataBlog = require('../core/MetadataBlog.js');
|
|
|
|
/****************************************************************************/
|
|
|
|
module.exports = function(callback) {
|
|
console.log('sitemap.js triggered...');
|
|
|
|
let urls = [];
|
|
|
|
let files = glob.sync(CWD + '/pages/en/**/*.js');
|
|
|
|
// English-only is the default.
|
|
let enabledLanguages = [
|
|
{
|
|
enabled: true,
|
|
name: 'English',
|
|
tag: 'en',
|
|
},
|
|
];
|
|
|
|
// If we have a languages.js file, get all the enabled languages in there
|
|
if (fs.existsSync(CWD + '/languages.js')) {
|
|
let languages = require(CWD + '/languages.js');
|
|
enabledLanguages = languages.filter(lang => {
|
|
return lang.enabled == true;
|
|
});
|
|
}
|
|
|
|
// create a url mapping to all the enabled languages files
|
|
files.map(file => {
|
|
let url = file.split('/pages/en')[1];
|
|
url = url.replace(/\.js$/, '.html');
|
|
let links = enabledLanguages.map(lang => {
|
|
let langUrl = lang.tag + url;
|
|
return {lang: lang.tag, url: langUrl};
|
|
});
|
|
urls.push({url, changefreq: 'weekly', priority: 0.5, links});
|
|
});
|
|
|
|
let htmlFiles = glob.sync(CWD + '/pages/**/*.html');
|
|
|
|
MetadataBlog.map(blog => {
|
|
urls.push({
|
|
url: '/blog/' + blog.path,
|
|
changefreq: 'weekly',
|
|
priority: 0.3,
|
|
});
|
|
});
|
|
|
|
Object.keys(Metadata)
|
|
.filter(key => Metadata[key].language === 'en')
|
|
.map(key => {
|
|
let doc = Metadata[key];
|
|
let links = enabledLanguages.map(lang => {
|
|
let langUrl = doc.permalink.replace('docs/en/', `docs/${lang.tag}/`);
|
|
return {lang: lang.tag, url: langUrl};
|
|
});
|
|
urls.push({
|
|
url: doc.permalink,
|
|
changefreq: 'hourly',
|
|
priority: 1.0,
|
|
links,
|
|
});
|
|
});
|
|
|
|
const sm = sitemap.createSitemap({
|
|
hostname: siteConfig.url,
|
|
cacheTime: 600 * 1000, // 600 sec - cache purge period
|
|
urls: urls,
|
|
});
|
|
|
|
sm.toXML((err, xml) => {
|
|
if (err) {
|
|
return 'An error has occurred.';
|
|
}
|
|
callback(xml);
|
|
});
|
|
};
|