mirror of
https://github.com/apophenia-news/apophenia.news.git
synced 2026-09-18 21:45:42 +00:00
Feat: Copy article assets during page generation
Co-authored-by: kimi-k3 <kimi@moonshot.cn>
This commit is contained in:
@@ -1,4 +1,5 @@
|
|||||||
import fs from "node:fs/promises";
|
import fs from "node:fs/promises";
|
||||||
|
import path from "node:path";
|
||||||
import fg from "fast-glob";
|
import fg from "fast-glob";
|
||||||
import matter from "gray-matter";
|
import matter from "gray-matter";
|
||||||
import { marked } from "marked";
|
import { marked } from "marked";
|
||||||
@@ -18,6 +19,21 @@ const getUnlistedSlugs = async () => {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const copyArticleAssets = async (file, slug) => {
|
||||||
|
const dir = path.dirname(file);
|
||||||
|
const entries = await fs.readdir(dir, { withFileTypes: true });
|
||||||
|
await Promise.all(
|
||||||
|
entries
|
||||||
|
.filter((entry) => entry.name !== "index.md")
|
||||||
|
.map((entry) =>
|
||||||
|
fs.cp(path.join(dir, entry.name), path.join(SRC, slug, entry.name), {
|
||||||
|
recursive: true,
|
||||||
|
force: true
|
||||||
|
})
|
||||||
|
)
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
const run = async () => {
|
const run = async () => {
|
||||||
const [files, unlisted] = await Promise.all([
|
const [files, unlisted] = await Promise.all([
|
||||||
fg(ARTICLES_GLOB, { cwd: ROOT, absolute: true }),
|
fg(ARTICLES_GLOB, { cwd: ROOT, absolute: true }),
|
||||||
@@ -33,6 +49,7 @@ const run = async () => {
|
|||||||
|
|
||||||
articles.push({
|
articles.push({
|
||||||
...data,
|
...data,
|
||||||
|
sourceFile: file,
|
||||||
isUnlisted: unlisted.has(data.slug),
|
isUnlisted: unlisted.has(data.slug),
|
||||||
html: fixInternalLinks(marked.parse(content))
|
html: fixInternalLinks(marked.parse(content))
|
||||||
});
|
});
|
||||||
@@ -53,6 +70,7 @@ const run = async () => {
|
|||||||
|
|
||||||
for (const article of articles) {
|
for (const article of articles) {
|
||||||
await writePage([SRC, article.slug, "index.html"], renderArticle(article));
|
await writePage([SRC, article.slug, "index.html"], renderArticle(article));
|
||||||
|
await copyArticleAssets(article.sourceFile, article.slug);
|
||||||
}
|
}
|
||||||
|
|
||||||
await writeDiscoveryFiles(listedArticles, AUTHOR_PAGES);
|
await writeDiscoveryFiles(listedArticles, AUTHOR_PAGES);
|
||||||
|
|||||||
Reference in New Issue
Block a user