This commit is contained in:
taskylizard
2023-12-31 11:15:48 +00:00
parent 9baef43c75
commit f8572d0b47
9 changed files with 103 additions and 66 deletions

View File

@@ -4,3 +4,5 @@
export * from "./meta";
export * from "./opengraph";
export * from "./rss";
export * from "./satoriConfig";

View File

@@ -5,6 +5,7 @@ import { createContentLoader } from "vitepress";
import type { ContentData, SiteConfig } from "vitepress";
import { type SatoriOptions, satoriVue } from "x-satori/vue";
import { renderAsync } from "@resvg/resvg-js";
import consola from "consola";
const __dirname = dirname(fileURLToPath(import.meta.url));
const __fonts = resolve(__dirname, "../fonts");
@@ -48,6 +49,7 @@ export async function generateImages(config: SiteConfig): Promise<void> {
fonts,
});
}
return consola.info("Generated opengraph images.");
}
interface GenerateImagesOptions {
@@ -90,5 +92,5 @@ async function generateImage({
await mkdir(outputFolder, { recursive: true });
return await writeFile(outputFile, render.asPng());
await writeFile(outputFile, render.asPng());
}

42
.vitepress/hooks/rss.ts Normal file
View File

@@ -0,0 +1,42 @@
import path from "node:path";
import { writeFileSync } from "node:fs";
import { Feed } from "feed";
import { createContentLoader, type ContentData, type SiteConfig } from "vitepress";
import consola from "consola";
import { meta } from "../constants";
export async function generateFeed(config: SiteConfig): Promise<void> {
const feed: Feed = new Feed({
id: meta.hostname,
link: meta.hostname,
title: `FMHY blog`,
description: meta.description,
language: "en-US",
image: "https://github.com/fmhy.png",
favicon: `${meta.hostname}/favicon.ico`,
copyright: `Copyright (c) 2023-present FMHY`,
});
const posts: ContentData[] = await createContentLoader("posts/*.md", {
excerpt: true,
render: true,
transform: (rawData) => {
return rawData.sort((a, b) => {
return Number(new Date(b.frontmatter.date)) - Number(new Date(a.frontmatter.date));
});
},
}).load();
for (const { url, frontmatter, html } of posts) {
feed.addItem({
title: frontmatter.title as string,
id: `${meta.hostname}${url.replace(/\/\d+\./, "/")}`,
link: `${meta.hostname}${url.replace(/\/\d+\./, "/")}`,
date: frontmatter.date,
content: html!,
});
}
writeFileSync(path.join(config.outDir, "feed.rss"), feed.rss2());
return consola.info("Generated rss feed.");
}