(Feat) Init WebSite
This commit is contained in:
@@ -0,0 +1,59 @@
|
||||
import { getAllPosts } from "@/lib/devblog";
|
||||
|
||||
const SITE_URL = "https://highlandgamesstudio.com";
|
||||
const SITE_TITLE = "Highland Games Studio — Devblog";
|
||||
const SITE_DESCRIPTION =
|
||||
"Behind-the-scenes updates, design decisions, and milestones from Highland Games Studio.";
|
||||
|
||||
function escapeXml(input: string): string {
|
||||
return input
|
||||
.replace(/&/g, "&")
|
||||
.replace(/</g, "<")
|
||||
.replace(/>/g, ">")
|
||||
.replace(/"/g, """)
|
||||
.replace(/'/g, "'");
|
||||
}
|
||||
|
||||
export async function GET() {
|
||||
const posts = getAllPosts();
|
||||
const lastBuildDate = new Date().toUTCString();
|
||||
const latest = posts[0];
|
||||
const pubDate = latest
|
||||
? new Date(latest.date).toUTCString()
|
||||
: lastBuildDate;
|
||||
|
||||
const items = posts
|
||||
.map((post) => {
|
||||
const url = `${SITE_URL}/devblog/${post.slug}`;
|
||||
return `
|
||||
<item>
|
||||
<title>${escapeXml(post.title)}</title>
|
||||
<link>${url}</link>
|
||||
<guid isPermaLink="true">${url}</guid>
|
||||
<pubDate>${new Date(post.date).toUTCString()}</pubDate>
|
||||
${post.author ? `<author>${escapeXml(post.author)}</author>` : ""}
|
||||
<description>${escapeXml(post.excerpt || "")}</description>
|
||||
</item>`;
|
||||
})
|
||||
.join("");
|
||||
|
||||
const xml = `<?xml version="1.0" encoding="UTF-8"?>
|
||||
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
|
||||
<channel>
|
||||
<title>${escapeXml(SITE_TITLE)}</title>
|
||||
<link>${SITE_URL}/devblog</link>
|
||||
<description>${escapeXml(SITE_DESCRIPTION)}</description>
|
||||
<language>en</language>
|
||||
<lastBuildDate>${lastBuildDate}</lastBuildDate>
|
||||
<pubDate>${pubDate}</pubDate>
|
||||
<atom:link href="${SITE_URL}/feed.xml" rel="self" type="application/rss+xml" />${items}
|
||||
</channel>
|
||||
</rss>`;
|
||||
|
||||
return new Response(xml, {
|
||||
headers: {
|
||||
"Content-Type": "application/rss+xml; charset=utf-8",
|
||||
"Cache-Control": "public, max-age=0, s-maxage=3600, stale-while-revalidate=86400",
|
||||
},
|
||||
});
|
||||
}
|
||||
Reference in New Issue
Block a user