jointrashposs/scripts/gen-sitemap.ts
kakkokari-gtyih 8e52c51c49 wip
2023-07-08 17:36:02 +09:00

31 lines
1.0 KiB
TypeScript

import type { Nitro } from "nitropack";
import { SitemapStream, streamToPromise, SitemapItem } from 'sitemap';
import { Readable } from 'stream';
import { writeFileSync } from 'fs';
import path from 'path';
// サイトドメインを指定(最後スラッシュ不要)
const domain = "https://YOUR_DOMAIN";
export default async function genSitemap(nitro: Nitro) {
if (!nitro._prerenderedRoutes) {
return;
}
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());
}