wire VCS api to the sitemap plugin

This commit is contained in:
sebastien 2025-10-24 18:31:39 +02:00
parent 48098cc3aa
commit 2adad8dc0b
3 changed files with 19 additions and 6 deletions

View File

@ -6,12 +6,14 @@
*/
import {fromPartial} from '@total-typescript/shoehorn';
import {DEFAULT_VCS_CONFIG} from '@docusaurus/utils';
import createSitemap from '../createSitemap';
import type {PluginOptions} from '../options';
import type {DocusaurusConfig, RouteConfig} from '@docusaurus/types';
const siteConfig: DocusaurusConfig = fromPartial({
url: 'https://example.com',
future: {experimental_vcs: DEFAULT_VCS_CONFIG},
});
const options: PluginOptions = {

View File

@ -6,6 +6,7 @@
*/
import {fromPartial} from '@total-typescript/shoehorn';
import {DEFAULT_VCS_CONFIG} from '@docusaurus/utils';
import {createSitemapItem} from '../createSitemapItem';
import {DEFAULT_OPTIONS} from '../options';
import type {PluginOptions} from '../options';
@ -13,6 +14,7 @@ import type {DocusaurusConfig, RouteConfig} from '@docusaurus/types';
const siteConfig: DocusaurusConfig = fromPartial({
url: 'https://example.com',
future: {experimental_vcs: DEFAULT_VCS_CONFIG},
});
function test(params: {

View File

@ -6,13 +6,14 @@
*/
import {applyTrailingSlash} from '@docusaurus/utils-common';
import {getLastUpdate, normalizeUrl} from '@docusaurus/utils';
import {normalizeUrl} from '@docusaurus/utils';
import type {LastModOption, SitemapItem} from './types';
import type {DocusaurusConfig, RouteConfig} from '@docusaurus/types';
import type {DocusaurusConfig, RouteConfig, VcsConfig} from '@docusaurus/types';
import type {PluginOptions} from './options';
async function getRouteLastUpdatedAt(
route: RouteConfig,
vcs: Pick<VcsConfig, 'getFileLastUpdateInfo'>,
): Promise<number | null | undefined> {
// Important to bail-out early here
// This can lead to duplicated getLastUpdate() calls and performance problems
@ -24,8 +25,10 @@ async function getRouteLastUpdatedAt(
return route.metadata?.lastUpdatedAt;
}
if (route.metadata?.sourceFilePath) {
const lastUpdate = await getLastUpdate(route.metadata?.sourceFilePath);
return lastUpdate?.lastUpdatedAt ?? null;
const lastUpdateInfo = await vcs.getFileLastUpdateInfo(
route.metadata?.sourceFilePath,
);
return lastUpdateInfo?.timestamp ?? null;
}
return undefined;
@ -46,14 +49,16 @@ function formatLastmod(timestamp: number, lastmodOption: LastModOption) {
async function getRouteLastmod({
route,
lastmod,
vcs,
}: {
route: RouteConfig;
lastmod: LastModOption | null;
vcs: Pick<VcsConfig, 'getFileLastUpdateInfo'>;
}): Promise<string | null> {
if (lastmod === null) {
return null;
}
const lastUpdatedAt = (await getRouteLastUpdatedAt(route)) ?? null;
const lastUpdatedAt = (await getRouteLastUpdatedAt(route, vcs)) ?? null;
return lastUpdatedAt ? formatLastmod(lastUpdatedAt, lastmod) : null;
}
@ -77,6 +82,10 @@ export async function createSitemapItem({
]),
changefreq,
priority,
lastmod: await getRouteLastmod({route, lastmod}),
lastmod: await getRouteLastmod({
route,
lastmod,
vcs: siteConfig.future.experimental_vcs,
}),
};
}