personal-site/utils/page_updater/update_pagelist.ts

90 lines
2.3 KiB
TypeScript
Raw Normal View History

2025-01-03 21:50:12 -08:00
import * as fs from 'node:fs';
2025-01-03 21:53:16 -08:00
import * as pages from './pages.ts';
2025-01-03 21:50:12 -08:00
import { format } from 'date-fns';
// Type for metadata and page info
export interface Page {
metadata: pages.PageInfoMetdata;
id: string;
url: string;
hash: string;
}
2025-01-04 11:45:02 -08:00
export interface PageCategory {
posts: Page[];
title: string;
description: string;
tags: string[];
}
2025-01-03 21:50:12 -08:00
export interface PageList {
last_generated: string;
2025-01-04 11:45:02 -08:00
categories: Record<string, PageCategory>;
2025-01-03 21:50:12 -08:00
}
// Function to generate the page list
2025-01-04 11:45:02 -08:00
function generatePageCategory(pagesInfo: Record<string, any>): PageCategory {
2025-01-03 21:50:12 -08:00
const pageList: Page[] = [];
for (const [path, page] of Object.entries(pagesInfo)) {
const pageDict: Page = {
metadata: page.metadata,
id: page.local_path,
2025-01-04 02:48:50 -08:00
url: page.absolute_path.replace("content", ""),
2025-01-03 21:50:12 -08:00
hash: page.hash
};
pageList.push(pageDict);
}
pageList.forEach(page => {
if (page.metadata.date) {
page.metadata.date = format(new Date(page.metadata.date), 'yyyy-MM-dd HH:mm:ss');
}
});
2025-01-04 11:45:02 -08:00
const pageListDict: PageCategory = {
posts: pageList,
title: "",
description: "",
tags: []
2025-01-03 21:50:12 -08:00
};
return pageListDict;
}
2025-01-04 11:45:02 -08:00
const postDirectories: pages.PageLocation[] = [
{
title: "Blog",
description: "A collection of blog posts",
tags: ["blog"],
map: "blog",
root: "content/blog"
}
]
var postList: PageList = {
last_generated: format(new Date(), 'yyyy-MM-dd HH:mm:ss'),
categories: {}
}
for (const postDirectory of postDirectories) {
const pagesInfo = pages.getPagesInfo("", postDirectory);
postList.categories[postDirectory.title] = generatePageCategory(pagesInfo);
}
// Sort the posts by date
for (const category of Object.values(postList.categories)) {
category.posts.sort((a, b) => {
if (!a.metadata.date) {
return 1;
}
if (!b.metadata.date) {
return -1;
}
return new Date(b.metadata.date).getTime() - new Date(a.metadata.date).getTime();
});
}
2025-01-03 21:50:12 -08:00
console.log(JSON.stringify(postList, null, 2));
// Output to assets/blog_list.json (overwriting)
2025-01-04 11:52:46 -08:00
fs.writeFileSync("assets/meta/blog_list.json", JSON.stringify(postList, null, 2));