From f31500fbe1e25a699f0aea1073e5b1754e9fc3c1 Mon Sep 17 00:00:00 2001 From: Tobias Laundal Date: Sun, 5 Feb 2023 13:38:01 +0000 Subject: [PATCH] refactor: extract module to build the sitemap --- src/index.ts | 32 +++----------------------------- src/internal/build-sitemap.ts | 33 +++++++++++++++++++++++++++++++++ 2 files changed, 36 insertions(+), 29 deletions(-) create mode 100644 src/internal/build-sitemap.ts diff --git a/src/index.ts b/src/index.ts index 5d56493..10b7c75 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,8 +1,6 @@ -import {writeFileSync} from 'node:fs'; -import {join} from 'node:path'; import type {Adapter} from '@sveltejs/kit'; import {wrapAdapter} from './internal/wrap-adapter.js'; -import {renderSitemap} from './internal/render-sitemap.js'; +import {buildSitemap} from './internal/build-sitemap.js'; /** * Details about a page in the sitemap. @@ -118,24 +116,6 @@ const defaultOptions: Options = { const nameTemplate = '%s + sitemap'; -function buildPageEntries( - paths: IterableIterator, - options: Options, -) { - const pages: Record> = {}; - for (const path of paths) { - if (!(path in pages)) { - pages[path] = {}; - } - } - - return Object.entries(pages).map(([path, page]) => ({ - loc: options.origin + path, - ...options.defaults, - ...page, - })); -} - /** * This function is the entry point for sveltekit-static-sitemap. It takes a * SvelteKit adapter and returns a wrapped version which will retrieve a @@ -189,15 +169,9 @@ export function sitemapWrapAdapter(adapter: Adapter, options?: Partial) resolvedOptions.origin = resolvedOptions.origin ?? this.config.kit.prerender.origin; }, writePrerendered(original, dest) { - const pages = buildPageEntries(this.prerendered.pages.keys(), resolvedOptions); - const sitemap = renderSitemap(pages); - - const target = join(dest, resolvedOptions.sitemapFile); - writeFileSync(target, sitemap); - - // We call the original here in the end, in case the prerendered + // We call the original last, in case the prerendered // bundle contains a sitemap which should take priority - return [...original(dest), resolvedOptions.sitemapFile]; + return [...buildSitemap(this, resolvedOptions, dest), ...original(dest)]; }, }); } diff --git a/src/internal/build-sitemap.ts b/src/internal/build-sitemap.ts new file mode 100644 index 0000000..fca868c --- /dev/null +++ b/src/internal/build-sitemap.ts @@ -0,0 +1,33 @@ +import {writeFileSync} from 'node:fs'; +import {join} from 'node:path'; +import type {Builder} from '@sveltejs/kit'; +import type {Options, PageDetails} from '..'; +import {renderSitemap} from './render-sitemap.js'; + +function buildPageEntries( + paths: IterableIterator, + options: Options, +) { + const pages: Record> = {}; + for (const path of paths) { + if (!(path in pages)) { + pages[path] = {}; + } + } + + return Object.entries(pages).map(([path, page]) => ({ + loc: options.origin + path, + ...options.defaults, + ...page, + })); +} + +export function buildSitemap(builder: Builder, options: Options, dest: string) { + const pages = buildPageEntries(builder.prerendered.pages.keys(), options); + const sitemap = renderSitemap(pages); + + const target = join(dest, options.sitemapFile); + writeFileSync(target, sitemap); + + return [options.sitemapFile]; +}