angrybeanie-front-end/data/internal/sitemap-generator.js

65 lines
1.9 KiB
JavaScript
Raw Permalink Normal View History

import { getAllPosts } from "../external/cms"
import fs from "fs"
import prettier from "prettier"
import config from './config'
import path from "path"
export const generateSitemap = async () => {
const getDate = new Date().toISOString()
const staticPaths = fs.readdirSync("pages", {withFileTypes: true})
.filter((staticPage) => {
if(staticPage.isFile()) {
return ![
"api",
"_app.js",
"_document.js",
"404.js",
"sitemap.xml.js",
"index.js"
].includes(staticPage.name);
}
})
.map((staticPagePath) => {
return `${config.siteURL}/${path.parse(staticPagePath.name).name}`;
}
);
const postData = await getAllPosts()
const postList = []
postData.data.forEach(post => postList.push({slug: post.attributes.Slug, updatedAt: post.attributes.updatedAt}))
const formatted = sitemap => prettier.format(sitemap, { parser: "html" });
const pageListMap = staticPaths.map(page => {
return `
<url>
<loc>${page}</loc>
<lastmod>${getDate}</lastmod>
<priority>1</priority>
</url>`
}).join("")
const postListSiteMap = postList.map(post => {
return `
<url>
<loc>${`${config.siteURL}/news/${post.slug}`}</loc>
<lastmod>${post.updatedAt}</lastmod>
<priority>0.5</priority>
</url>`
})
.join("")
2022-06-18 09:01:04 +10:00
const generatedSitemap = `<?xml version="1.0" encoding="UTF-8"?>
2022-06-17 22:01:17 +10:00
<urlset
xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd"
>${pageListMap}${postListSiteMap}
</urlset>
`
const formattedSitemap = [formatted(generatedSitemap)];
fs.writeFileSync("public/sitemap.xml", generatedSitemap, "utf8")
}