jointrashposs/scripts/gen-sitemap.ts
2023-09-23 18:17:13 +09:00

31 lines
1.1 KiB
TypeScript

import type { Nitro } from "nitropack";
//import { useRuntimeConfig } from "nuxt/app";
import { SitemapStream, streamToPromise, SitemapItem } from 'sitemap';
import { Readable } from 'stream';
import { writeFileSync } from 'fs';
import path from 'path';
export default async function genSitemap(nitro: Nitro) {
if (!nitro._prerenderedRoutes) {
return;
}
const domain = nitro.options.runtimeConfig.public.baseUrl;
const publicDir = nitro.options.output.publicDir;
const routes = nitro._prerenderedRoutes?.map((e) => e.fileName || null).filter((e, i, a) => e && a.indexOf(e) === i && e.endsWith("index.html")).map((e) => {
return {
url: e?.replace(/index\.html$/, ''),
changefreq: 'weekly',
priority: .7,
} as SitemapItem;
});
const smStream = new SitemapStream({ hostname: domain });
Readable.from(routes).pipe(smStream);
const data = await streamToPromise(smStream);
writeFileSync(path.join(publicDir, 'sitemap.xml'), data.toString());
console.log("Sitemap was generated");
}