docusaurus/packages/docusaurus-plugin-sitemap/src/index.ts
Sébastien Lorber 9df5aae6de
feat(core): new postBuild({routesBuildMetadata}) API, deprecate head attribute + v4 future flag (#10850)
Co-authored-by: slorber <749374+slorber@users.noreply.github.com>
2025-01-17 17:26:48 +01:00

59 lines
1.5 KiB
TypeScript

/**
* 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.
*/
import fs from 'fs-extra';
import path from 'path';
import logger from '@docusaurus/logger';
import createSitemap from './createSitemap';
import type {PluginOptions, Options} from './options';
import type {LoadContext, Plugin} from '@docusaurus/types';
const PluginName = 'docusaurus-plugin-sitemap';
export default function pluginSitemap(
context: LoadContext,
options: PluginOptions,
): Plugin<void> | null {
if (context.siteConfig.future.experimental_router === 'hash') {
logger.warn(
`${PluginName} does not support the Hash Router and will be disabled.`,
);
return null;
}
return {
name: PluginName,
async postBuild({siteConfig, routes, outDir, routesBuildMetadata}) {
if (siteConfig.noIndex) {
return;
}
// Generate sitemap.
const generatedSitemap = await createSitemap({
siteConfig,
routes,
routesBuildMetadata,
options,
});
if (!generatedSitemap) {
return;
}
// Write sitemap file.
const sitemapPath = path.join(outDir, options.filename);
try {
await fs.outputFile(sitemapPath, generatedSitemap);
} catch (err) {
logger.error('Writing sitemap failed.');
throw err;
}
},
};
}
export {validateOptions} from './options';
export type {PluginOptions, Options};