From 83155a8d83c90217db0340686092dc89e25defaa Mon Sep 17 00:00:00 2001 From: Alex Tim Date: Mon, 27 Jun 2022 11:40:39 +0300 Subject: [PATCH 1/2] feat: better behavior with 'undefined' return values after 'serialize' func --- packages/integrations/sitemap/README.md | 7 ++++++- packages/integrations/sitemap/src/index.ts | 10 ++++++++-- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/packages/integrations/sitemap/README.md b/packages/integrations/sitemap/README.md index a2e7b73d9ad6..e37a1ed86bb3 100644 --- a/packages/integrations/sitemap/README.md +++ b/packages/integrations/sitemap/README.md @@ -222,7 +222,9 @@ The `LinkItem` type has two required fields: `url` (the fully-qualified URL for The `serialize` function should return `SitemapItem`, touched or not. -The example below shows the ability to add the sitemap specific properties individually. +To exclude the passed entry from sitemap it should return `undefined`. + +The example below shows the ability to exclude certain entries and add the sitemap specific properties individually. __astro.config.mjs__ @@ -234,6 +236,9 @@ export default { integrations: [ sitemap({ serialize(item) { + if (/exclude-from-sitemap/.test(item.url)) { + return undefined; + } if (/your-special-page/.test(item.url)) { item.changefreq = 'daily'; item.lastmod = new Date(); diff --git a/packages/integrations/sitemap/src/index.ts b/packages/integrations/sitemap/src/index.ts index 2e1fa5a6ef5a..67990b041ea7 100644 --- a/packages/integrations/sitemap/src/index.ts +++ b/packages/integrations/sitemap/src/index.ts @@ -38,7 +38,7 @@ export type SitemapOptions = priority?: number; // called for each sitemap item just before to save them on disk, sync or async - serialize?(item: SitemapItem): SitemapItem | Promise; + serialize?(item: SitemapItem): SitemapItem | Promise | undefined; } | undefined; @@ -117,8 +117,14 @@ const createPlugin = (options?: SitemapOptions): AstroIntegration => { const serializedUrls: SitemapItem[] = []; for (const item of urlData) { const serialized = await Promise.resolve(serialize(item)); - serializedUrls.push(serialized); + if (serialized) { + serializedUrls.push(serialized); + } } + if (serializedUrls.length === 0) { + logger.warn('No pages found!'); + return; + } urlData = serializedUrls; } catch (err) { logger.error(`Error serializing pages\n${(err as any).toString()}`); From cfa48c35133a9df8bf58346caad6a7fc606578b4 Mon Sep 17 00:00:00 2001 From: Alex Tim Date: Mon, 27 Jun 2022 19:56:03 +0300 Subject: [PATCH 2/2] build: changeset added --- .changeset/tidy-dots-own.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/tidy-dots-own.md diff --git a/.changeset/tidy-dots-own.md b/.changeset/tidy-dots-own.md new file mode 100644 index 000000000000..a9367dc2ab48 --- /dev/null +++ b/.changeset/tidy-dots-own.md @@ -0,0 +1,5 @@ +--- +'@astrojs/sitemap': patch +--- + +fix: if `serialize` function returns `undefined` for the passed entry, such entry will be excluded from sitemap