Files
documentation/node_modules/@docusaurus/plugin-sitemap/lib/createSitemap.js
2024-03-22 03:47:51 +05:30

57 lines
2.2 KiB
JavaScript

"use strict";
/**
* Copyright (c) Facebook, Inc. and its affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/
Object.defineProperty(exports, "__esModule", { value: true });
const sitemap_1 = require("sitemap");
const utils_common_1 = require("@docusaurus/utils-common");
const utils_1 = require("@docusaurus/utils");
function isNoIndexMetaRoute({ head, route, }) {
const isNoIndexMetaTag = ({ name, content, }) => {
if (!name || !content) {
return false;
}
return (
// meta name is not case-sensitive
name.toLowerCase() === 'robots' &&
// Robots directives are not case-sensitive
content.toLowerCase().includes('noindex'));
};
// https://github.com/staylor/react-helmet-async/pull/167
const meta = head[route]?.meta.toComponent();
return meta?.some((tag) => isNoIndexMetaTag({ name: tag.props.name, content: tag.props.content }));
}
async function createSitemap(siteConfig, routesPaths, head, options) {
const { url: hostname } = siteConfig;
if (!hostname) {
throw new Error('URL in docusaurus.config.js cannot be empty/undefined.');
}
const { changefreq, priority, ignorePatterns } = options;
const ignoreMatcher = (0, utils_1.createMatcher)(ignorePatterns);
function isRouteExcluded(route) {
return (route.endsWith('404.html') ||
ignoreMatcher(route) ||
isNoIndexMetaRoute({ head, route }));
}
const includedRoutes = routesPaths.filter((route) => !isRouteExcluded(route));
if (includedRoutes.length === 0) {
return null;
}
const sitemapStream = new sitemap_1.SitemapStream({ hostname });
includedRoutes.forEach((routePath) => sitemapStream.write({
url: (0, utils_common_1.applyTrailingSlash)(routePath, {
trailingSlash: siteConfig.trailingSlash,
baseUrl: siteConfig.baseUrl,
}),
changefreq,
priority,
}));
sitemapStream.end();
const generatedSitemap = (await (0, sitemap_1.streamToPromise)(sitemapStream)).toString();
return generatedSitemap;
}
exports.default = createSitemap;