From 37b5d6058ae29843f5e8225c7bc08ab50ed0fd9c Mon Sep 17 00:00:00 2001 From: Sreetam Das Date: Fri, 22 Apr 2022 15:10:29 +0530 Subject: [PATCH 1/5] Remove notFound URLs from urlSet --- packages/next-sitemap/src/url/create-url-set/index.ts | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/packages/next-sitemap/src/url/create-url-set/index.ts b/packages/next-sitemap/src/url/create-url-set/index.ts index 597d2c3e..7485eb59 100644 --- a/packages/next-sitemap/src/url/create-url-set/index.ts +++ b/packages/next-sitemap/src/url/create-url-set/index.ts @@ -97,6 +97,14 @@ export const createUrlSet = async ( urlSet = [...new Set(urlSet)] + // Remove routes which don't exist + // @ts-expect-error bleh + const notFoundRoutes = manifest.preRender?.notFoundRoutes as Array + urlSet = urlSet.filter((url) => !notFoundRoutes.includes(url)) + + // TODO: HERE + console.log({ urlSet }) + // Create sitemap fields based on transformation const sitemapFields: ISitemapField[] = [] // transform using relative urls From 98e589d98ee91be39db52cc675855f730ac98574 Mon Sep 17 00:00:00 2001 From: Sreetam Das Date: Thu, 28 Apr 2022 22:02:06 +0530 Subject: [PATCH 2/5] chore: cleanup --- packages/next-sitemap/src/url/create-url-set/index.ts | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/packages/next-sitemap/src/url/create-url-set/index.ts b/packages/next-sitemap/src/url/create-url-set/index.ts index 7485eb59..89be6de3 100644 --- a/packages/next-sitemap/src/url/create-url-set/index.ts +++ b/packages/next-sitemap/src/url/create-url-set/index.ts @@ -98,13 +98,9 @@ export const createUrlSet = async ( urlSet = [...new Set(urlSet)] // Remove routes which don't exist - // @ts-expect-error bleh - const notFoundRoutes = manifest.preRender?.notFoundRoutes as Array + const notFoundRoutes = manifest.preRender?.notFoundRoutes as string[] urlSet = urlSet.filter((url) => !notFoundRoutes.includes(url)) - // TODO: HERE - console.log({ urlSet }) - // Create sitemap fields based on transformation const sitemapFields: ISitemapField[] = [] // transform using relative urls From d482eaf0650d62a11d38ca008d9e12cf180d2edf Mon Sep 17 00:00:00 2001 From: Sreetam Das Date: Thu, 28 Apr 2022 22:08:08 +0530 Subject: [PATCH 3/5] wip: edit interface for preRenderManifest, add fixtures for test --- .../next-sitemap/src/fixtures/manifest.ts | 51 +++++++++++++++++++ packages/next-sitemap/src/interface.ts | 1 + 2 files changed, 52 insertions(+) diff --git a/packages/next-sitemap/src/fixtures/manifest.ts b/packages/next-sitemap/src/fixtures/manifest.ts index 6c007514..a2e2597e 100644 --- a/packages/next-sitemap/src/fixtures/manifest.ts +++ b/packages/next-sitemap/src/fixtures/manifest.ts @@ -21,6 +21,7 @@ export const samplePreRenderManifest: IPreRenderManifest = { '/page-2': {}, '/page-3': {}, }, + notFoundRoutes: [], } export const sampleManifest: INextManifest = { @@ -51,6 +52,7 @@ export const sampleI18nPreRenderManifest: IPreRenderManifest = { '/fr/page-2': {}, '/page-3': {}, }, + notFoundRoutes: [], } export const sampleRenderManifest: IRoutesManifest = { @@ -65,3 +67,52 @@ export const sampleI18nManifest: INextManifest = { preRender: sampleI18nPreRenderManifest, routes: sampleRenderManifest, } + +export const sampleNotFoundRoutesBuildManifest: IBuildManifest = { + pages: { + '/': [], + '/about': [], + '/[dynamic]': [], + '/_app': [], + '/_error': [], + }, +} +export const sampleNotFoundRoutesPreRenderManifest: IPreRenderManifest = { + routes: { + '/en-US': {}, + '/fr': {}, + '/nl-NL': {}, + + '/en-US/about': {}, + '/fr/about': {}, + '/nl-NL/about': {}, + + '/en-US/page-0': {}, + '/fr/page-0': {}, + '/nl-NL/page-0': {}, + + '/en-US/page-1': {}, + '/fr/page-1': {}, + '/nl-NL/page-1': {}, + }, + notFoundRoutes: [ + '/fr', + '/nl-NL/about', + '/nl-NL/page-0', + '/fr/page-1', + '/nl-NL/page-1', + ], +} + +export const sampleNotFoundRoutesRenderManifest: IRoutesManifest = { + i18n: { + locales: ['en-US', 'fr', 'nl-NL'], + defaultLocale: 'en-US', + }, +} + +export const sampleNotFoundRoutesManifest: INextManifest = { + build: sampleNotFoundRoutesBuildManifest, + preRender: sampleNotFoundRoutesPreRenderManifest, + routes: sampleNotFoundRoutesRenderManifest, +} diff --git a/packages/next-sitemap/src/interface.ts b/packages/next-sitemap/src/interface.ts index db8ec7be..c8eac426 100644 --- a/packages/next-sitemap/src/interface.ts +++ b/packages/next-sitemap/src/interface.ts @@ -176,6 +176,7 @@ export interface IPreRenderManifest { routes: { [key: string]: any } + notFoundRoutes: string[] } export interface IRoutesManifest { From 6af06daa89d183d3f275e79ab74f81cf74819073 Mon Sep 17 00:00:00 2001 From: Sreetam Das Date: Thu, 28 Apr 2022 22:09:05 +0530 Subject: [PATCH 4/5] test: add test for skipping 404-ed localized URLs in createUrlSet --- .../__tests__/create-url-set.test.ts | 77 ++++++++++++++++++- 1 file changed, 76 insertions(+), 1 deletion(-) diff --git a/packages/next-sitemap/src/url/create-url-set/__tests__/create-url-set.test.ts b/packages/next-sitemap/src/url/create-url-set/__tests__/create-url-set.test.ts index 1db7b217..45ac8c1c 100644 --- a/packages/next-sitemap/src/url/create-url-set/__tests__/create-url-set.test.ts +++ b/packages/next-sitemap/src/url/create-url-set/__tests__/create-url-set.test.ts @@ -1,7 +1,11 @@ import { createUrlSet } from '..' import { transformSitemap } from '../../../config' import { sampleConfig } from '../../../fixtures/config' -import { sampleManifest, sampleI18nManifest } from '../../../fixtures/manifest' +import { + sampleManifest, + sampleI18nManifest, + sampleNotFoundRoutesManifest, +} from '../../../fixtures/manifest' import { IConfig, ISitemapField } from '../../../interface' describe('createUrlSet', () => { @@ -582,4 +586,75 @@ describe('createUrlSet', () => { }), ]) }) + + test('with i18n, without notFound routes', async () => { + const urlset = await createUrlSet( + { + ...sampleConfig, + }, + sampleNotFoundRoutesManifest + ) + + expect(urlset).toStrictEqual([ + { + changefreq: 'daily', + lastmod: expect.any(String), + priority: 0.7, + loc: 'https://example.com', + alternateRefs: [], + trailingSlash: false, + }, + { + changefreq: 'daily', + lastmod: expect.any(String), + priority: 0.7, + loc: 'https://example.com/about', + alternateRefs: [], + trailingSlash: false, + }, + // /about + { + changefreq: 'daily', + lastmod: expect.any(String), + priority: 0.7, + loc: 'https://example.com/nl-NL', + alternateRefs: [], + trailingSlash: false, + }, + { + changefreq: 'daily', + lastmod: expect.any(String), + priority: 0.7, + loc: 'https://example.com/fr/about', + alternateRefs: [], + trailingSlash: false, + }, + // page-0 + { + changefreq: 'daily', + lastmod: expect.any(String), + priority: 0.7, + loc: 'https://example.com/page-0', + alternateRefs: [], + trailingSlash: false, + }, + { + changefreq: 'daily', + lastmod: expect.any(String), + priority: 0.7, + loc: 'https://example.com/fr/page-0', + alternateRefs: [], + trailingSlash: false, + }, + // page-1 + { + changefreq: 'daily', + lastmod: expect.any(String), + priority: 0.7, + loc: 'https://example.com/page-1', + alternateRefs: [], + trailingSlash: false, + }, + ]) + }) }) From c33bc1f25502781c0fd4332d874f315dfeb9b353 Mon Sep 17 00:00:00 2001 From: Sreetam Das Date: Sat, 28 May 2022 15:23:07 +0530 Subject: [PATCH 5/5] fix: add fallback array for backwards compatibility `preRender.notFoundRoutes` was only [introduced around v9.5.6](https://github.com/vercel/next.js/pull/8832) type PrerenderManifest = { version: 3 routes: { [route: string]: SsgRoute } dynamicRoutes: { [route: string]: DynamicSsgRoute } notFoundRoutes: string[] preview: __ApiPreviewProps } --- packages/next-sitemap/src/url/create-url-set/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/next-sitemap/src/url/create-url-set/index.ts b/packages/next-sitemap/src/url/create-url-set/index.ts index 89be6de3..968b1b76 100644 --- a/packages/next-sitemap/src/url/create-url-set/index.ts +++ b/packages/next-sitemap/src/url/create-url-set/index.ts @@ -98,7 +98,7 @@ export const createUrlSet = async ( urlSet = [...new Set(urlSet)] // Remove routes which don't exist - const notFoundRoutes = manifest.preRender?.notFoundRoutes as string[] + const notFoundRoutes = (manifest.preRender?.notFoundRoutes ?? []) as string[] urlSet = urlSet.filter((url) => !notFoundRoutes.includes(url)) // Create sitemap fields based on transformation