docusaurus/lib/server/sitemap.js
Ricky Vetter c97da9d3f7 Sitemap local (#157)
* Better support for localized pages in sitemap

* clean console
2017-10-26 16:12:47 -07:00

104 lines
2.8 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");
const blogFolder = path.resolve("../blog/");
const blogRootURL = siteConfig.url + "/blog";
const jestImage = siteConfig.url + siteConfig.headerIcon;
/****************************************************************************/
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 occured.";
}
callback(xml);
});
};