diff --git a/projects/scully-sitemap/README.md b/projects/scully-sitemap/README.md index 92a6eb2..5caac7d 100644 --- a/projects/scully-sitemap/README.md +++ b/projects/scully-sitemap/README.md @@ -40,13 +40,15 @@ setPluginConfig(SitemapPlugin, { trailingSlash: false, changeFreq: 'monthly', priority: ['1.0', '0.9', '0.8', '0.7', '0.6', '0.5', '0.4', '0.3', '0.2', '0.1', '0.0'], - ignoredRoutes: ['/404'], + ignoredRoutes: ['/404', '/testing/.*'], + lastMod: new Date().toISOString(), routes: { '/products/:productId': { changeFreq: 'daily', priority: '0.9', sitemapFilename: 'sitemap-products.xml', - merge: true + merge: true, + lastMod: new Date().toISOString() }, } }); diff --git a/projects/scully-sitemap/src/lib/index.ts b/projects/scully-sitemap/src/lib/index.ts index 63a14fc..af5e494 100644 --- a/projects/scully-sitemap/src/lib/index.ts +++ b/projects/scully-sitemap/src/lib/index.ts @@ -48,7 +48,8 @@ const configForRoute = (config: SitemapConfig, route: HandledRoute) => { sitemapFilename: routeConfig.sitemapFilename || config.sitemapFilename, merge: routeConfig.merge || config.merge, changeFreq: routeConfig.changeFreq || config.changeFreq, - priority: routeConfig.priority || config.priority + priority: routeConfig.priority || config.priority, + lastMod: routeConfig.lastMod || config.lastMod }; } } @@ -60,7 +61,8 @@ const configForRoute = (config: SitemapConfig, route: HandledRoute) => { sitemapFilename: config.sitemapFilename, merge: config.merge, changeFreq: config.changeFreq, - priority: config.priority + priority: config.priority, + lastMod: config.lastMod }; }; @@ -164,8 +166,14 @@ export const sitemapPlugin = async (routes?: HandledRoute[]): Promise => { const maps = {}; routes.forEach((route: HandledRoute) => { - if ( config.ignoredRoutes && config.ignoredRoutes.includes(route.route) ) { - return; + if ( config.ignoredRoutes ) { + const ignore = config.ignoredRoutes.reduce((prev, curr) => { + if (typeof curr === 'string') { + return prev || route.route === curr; + } + return prev || curr.test(route.route); + }, false); + if (ignore) return; } const routeConfig = configForRoute(config, route); const map = getMapForRoute(maps, routeConfig); @@ -177,7 +185,7 @@ export const sitemapPlugin = async (routes?: HandledRoute[]): Promise => { map[loc] = { loc, changefreq: routeConfig.changeFreq, - lastmod: today.toISOString(), + lastmod: routeConfig.lastMod ?? today.toISOString(), priority: priorityForLocation(route.route, routeConfig) }; }); diff --git a/projects/scully-sitemap/src/lib/sitemap-config.ts b/projects/scully-sitemap/src/lib/sitemap-config.ts index 075d1b4..0861568 100644 --- a/projects/scully-sitemap/src/lib/sitemap-config.ts +++ b/projects/scully-sitemap/src/lib/sitemap-config.ts @@ -24,6 +24,8 @@ export class SitemapRoute { /** would you like to append a trailing slash to the url */ trailingSlash?: boolean; + /** Last modification datetime (YYYY-MM-DDTHH:mm:ss.sssZ = date.toISOString()) */ + lastMod?: string; } /** @@ -49,8 +51,11 @@ export class SitemapConfig { /** A list of priorities to set based on number of segments in the route */ priority?: string | string[]; + /** Last modification datetime (YYYY-MM-DDTHH:mm:ss.sssZ = date.toISOString()) */ + lastMod?: string; + /** A list of routes not to include in the sitemap */ - ignoredRoutes?: string[]; + ignoredRoutes?: (string | RegExp)[]; /** If `true`, the plugin will not log status messages to the console. */ suppressLog?: boolean;