Skip to content

Commit f919726

Browse files
authoredAug 12, 2024
feat: add minify xml option (#336)
1 parent e45432b commit f919726

File tree

6 files changed

+17
-6
lines changed

6 files changed

+17
-6
lines changed
 

‎playground/nuxt.config.ts

+1
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,7 @@ export default defineNuxtConfig({
8787
debug: true,
8888
// sitemapName: 'test.xml',
8989
// dynamicUrlsApiEndpoint: '/__sitemap',
90+
minify: false,
9091
cacheMaxAgeSeconds: 10,
9192
xslColumns: [
9293
{ label: 'URL', width: '50%' },

‎src/module.ts

+2
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ export default defineNuxtModule<ModuleOptions>({
5555
enabled: true,
5656
credits: true,
5757
cacheMaxAgeSeconds: 60 * 10, // cache for 10 minutes
58+
minify: false,
5859
debug: false,
5960
defaultSitemapsChunkSize: 1000,
6061
autoLastmod: false,
@@ -513,6 +514,7 @@ declare module 'vue-router' {
513514
autoLastmod: config.autoLastmod,
514515
defaultSitemapsChunkSize: config.defaultSitemapsChunkSize,
515516

517+
minify: config.minify,
516518
sortEntries: config.sortEntries,
517519
debug: config.debug,
518520
// needed for nuxt/content integration and prerendering

‎src/runtime/nitro/sitemap/builder/sitemap-index.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@ export async function buildSitemapIndex(resolvers: NitroUrlResolvers, runtimeCon
9090
return entries
9191
}
9292

93-
export function urlsToIndexXml(sitemaps: SitemapIndexEntry[], resolvers: NitroUrlResolvers, { version, xsl, credits }: Pick<ModuleRuntimeConfig, 'version' | 'xsl' | 'credits'>) {
93+
export function urlsToIndexXml(sitemaps: SitemapIndexEntry[], resolvers: NitroUrlResolvers, { version, xsl, credits, minify }: Pick<ModuleRuntimeConfig, 'version' | 'xsl' | 'credits' | 'minify'>) {
9494
const sitemapXml = sitemaps.map(e => [
9595
' <sitemap>',
9696
` <loc>${escapeValueForXml(e.sitemap)}</loc>`,
@@ -103,5 +103,5 @@ export function urlsToIndexXml(sitemaps: SitemapIndexEntry[], resolvers: NitroUr
103103
'<sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">',
104104
sitemapXml,
105105
'</sitemapindex>',
106-
], resolvers, { version, xsl, credits })
106+
], resolvers, { version, xsl, credits, minify })
107107
}

‎src/runtime/nitro/sitemap/builder/sitemap.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -240,7 +240,7 @@ export async function buildSitemapUrls(sitemap: SitemapDefinition, resolvers: Ni
240240
return maybeSlice(sortedUrls)
241241
}
242242

243-
export function urlsToXml(urls: ResolvedSitemapUrl[], resolvers: NitroUrlResolvers, { version, xsl, credits }: Pick<ModuleRuntimeConfig, 'version' | 'xsl' | 'credits'>) {
243+
export function urlsToXml(urls: ResolvedSitemapUrl[], resolvers: NitroUrlResolvers, { version, xsl, credits, minify }: Pick<ModuleRuntimeConfig, 'version' | 'xsl' | 'credits' | 'minify'>) {
244244
const urlset = urls.map((e) => {
245245
const keys = Object.keys(e).filter(k => !k.startsWith('_'))
246246
return [
@@ -253,5 +253,5 @@ export function urlsToXml(urls: ResolvedSitemapUrl[], resolvers: NitroUrlResolve
253253
'<urlset xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:video="http://www.google.com/schemas/sitemap-video/1.1" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:image="http://www.google.com/schemas/sitemap-image/1.1" xmlns:news="http://www.google.com/schemas/sitemap-news/0.9" xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd http://www.google.com/schemas/sitemap-image/1.1 http://www.google.com/schemas/sitemap-image/1.1/sitemap-image.xsd" xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">',
254254
urlset.join('\n'),
255255
'</urlset>',
256-
], resolvers, { version, xsl, credits })
256+
], resolvers, { version, xsl, credits, minify })
257257
}

‎src/runtime/nitro/sitemap/builder/xml.ts

+3-1
Original file line numberDiff line numberDiff line change
@@ -80,13 +80,15 @@ export function handleEntry(k: string, e: Record<string, any> | (string | Record
8080
return Array.isArray(e[k]) ? handleArray(k, e[k]) : typeof e[k] === 'object' ? handleObject(k, e[k]) : ` <${k}>${escapeValueForXml(e[k])}</${k}>`
8181
}
8282

83-
export function wrapSitemapXml(input: string[], resolvers: NitroUrlResolvers, options: Pick<ModuleRuntimeConfig, 'version' | 'xsl' | 'credits'>) {
83+
export function wrapSitemapXml(input: string[], resolvers: NitroUrlResolvers, options: Pick<ModuleRuntimeConfig, 'version' | 'xsl' | 'credits' | 'minify'>) {
8484
const xsl = options.xsl ? resolvers.relativeBaseUrlResolver(options.xsl) : false
8585
const credits = options.credits
8686

8787
input.unshift(`<?xml version="1.0" encoding="UTF-8"?>${xsl ? `<?xml-stylesheet type="text/xsl" href="${xsl}"?>` : ''}`)
8888
if (credits)
8989
input.push(`<!-- XML Sitemap generated by @nuxtjs/sitemap v${options.version} at ${new Date().toISOString()} -->`)
90+
if (options.minify)
91+
return input.join('').replace(/(?<!<[^>]*)\s(?![^<]*>)/g, '')
9092
return input.join('\n')
9193
}
9294

‎src/runtime/types.ts

+7-1
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,12 @@ export interface ModuleOptions extends SitemapDefinition {
1818
* @default false
1919
*/
2020
debug: boolean
21+
/**
22+
* Minify the sitemap xml
23+
*
24+
* @default false
25+
*/
26+
minify: boolean
2127
/**
2228
* Should lastmod be automatically added to the sitemap.
2329
*
@@ -206,7 +212,7 @@ export interface AutoI18nConfig {
206212
strategy: 'prefix' | 'prefix_except_default' | 'prefix_and_default' | 'no_prefix'
207213
}
208214

209-
export interface ModuleRuntimeConfig extends Pick<ModuleOptions, 'sitemapsPathPrefix' | 'cacheMaxAgeSeconds' | 'sitemapName' | 'excludeAppSources' | 'sortEntries' | 'defaultSitemapsChunkSize' | 'xslColumns' | 'xslTips' | 'debug' | 'discoverImages' | 'discoverVideos' | 'autoLastmod' | 'xsl' | 'credits' > {
215+
export interface ModuleRuntimeConfig extends Pick<ModuleOptions, 'sitemapsPathPrefix' | 'cacheMaxAgeSeconds' | 'sitemapName' | 'excludeAppSources' | 'sortEntries' | 'defaultSitemapsChunkSize' | 'xslColumns' | 'xslTips' | 'debug' | 'discoverImages' | 'discoverVideos' | 'autoLastmod' | 'xsl' | 'credits' | 'minify'> {
210216
version: string
211217
isNuxtContentDocumentDriven: boolean
212218
sitemaps: { index?: Pick<SitemapDefinition, 'sitemapName' | '_route'> & { sitemaps: SitemapIndexEntry[] } } & Record<string, Omit<SitemapDefinition, 'urls'> & { _hasSourceChunk?: boolean }>

0 commit comments

Comments
 (0)