UNPKG

@benpsnyder/analogjs-esm-vite-plugin-nitro

Version:

A Vite plugin for adding a nitro API server

68 lines 2.46 kB
import { writeFileSync } from 'node:fs'; import { create } from 'xmlbuilder2'; import { resolve } from 'node:path'; export async function buildSitemap(config, sitemapConfig, routes, outputDir, routeSitemaps) { const routeList = await optionHasRoutes(routes); if (routeList.length) { const slash = checkSlash(sitemapConfig.host || ''); const sitemapData = routeList.map((page) => { const url = `${slash}${page.replace(/^\/+/g, '')}`; const config = routeSitemaps[url]; const props = typeof config === 'object' ? config : config?.(); return { page: `${sitemapConfig.host}${url}`, lastMod: props?.lastmod ?? new Date().toISOString().split('T')[0], changefreq: props?.changefreq, priority: props?.priority, }; }); const sitemap = createXml('urlset'); for (const item of sitemapData) { const page = sitemap.ele('url'); page.ele('loc').txt(item.page); page.ele('lastmod').txt(item.lastMod); if (item.changefreq) { page.ele('changefreq').txt(item.changefreq); } if (item.priority) { page.ele('priority').txt(item.priority); } } const mapPath = `${resolve(outputDir)}/sitemap.xml`; try { console.log(`Writing sitemap at ${mapPath}`); writeFileSync(mapPath, sitemap.end({ prettyPrint: true })); } catch (e) { console.error(`Unable to write file at ${mapPath}`, e); } } } function createXml(elementName) { return create({ version: '1.0', encoding: 'UTF-8' }) .ele(elementName, { xmlns: 'https://www.sitemaps.org/schemas/sitemap/0.9', }) .com(`This file was automatically generated by Analog.`); } function checkSlash(host) { const finalChar = host.slice(-1); return finalChar === '/' ? '' : '/'; } async function optionHasRoutes(routes) { let routeList; if (typeof routes === 'function') { // returns an array or undefined routeList = await routes(); } else if (Array.isArray(routes)) { // returns an array of strings routeList = routes; } else { // default it to an empty of array routeList = []; } return routeList.filter(Boolean); } //# sourceMappingURL=build-sitemap.js.map