Files
poyraz-portfolio/lib/content-page.ts
T

74 lines
2.1 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import { readdir, readFile } from "node:fs/promises";
import path from "node:path";
import matter from "gray-matter";
import type { PodcastEpisode, PodcastKind } from "@/data/content-types";
type EpisodeFrontmatter = {
title: string;
date: string;
youtubeUrl: string;
spotifyUrl: string;
podcast: PodcastKind;
};
const PODCAST_DIR = path.join(process.cwd(), "content", "podcasts");
const PDF_DIR = path.join(process.cwd(), "public", "pdf");
function sortEpisodesByDateDesc(episodes: PodcastEpisode[]) {
return [...episodes].sort((a, b) => {
const aTime = Number(new Date(a.date));
const bTime = Number(new Date(b.date));
if (!Number.isNaN(aTime) && !Number.isNaN(bTime)) {
return bTime - aTime;
}
return a.title.localeCompare(b.title);
});
}
async function readPodcastEpisodes(kind: PodcastKind): Promise<PodcastEpisode[]> {
const folder = path.join(PODCAST_DIR, kind);
const files = await readdir(folder);
const mdFiles = files.filter((file) => file.endsWith(".md"));
const episodes = await Promise.all(
mdFiles.map(async (file) => {
const fullPath = path.join(folder, file);
const raw = await readFile(fullPath, "utf8");
const parsed = matter(raw);
const data = parsed.data as Partial<EpisodeFrontmatter>;
return {
slug: file.replace(/\.md$/, ""),
title: data.title ?? "Başlıksız Bölüm",
date: data.date ?? "1970-01-01",
youtubeUrl: data.youtubeUrl ?? "",
spotifyUrl: data.spotifyUrl ?? "",
podcast: data.podcast ?? kind,
markdown: parsed.content.trim(),
} satisfies PodcastEpisode;
}),
);
return sortEpisodesByDateDesc(episodes);
}
export async function getPodcastCollections() {
const [yazilim, masaBasi] = await Promise.all([
readPodcastEpisodes("yazilim"),
readPodcastEpisodes("masa-basi"),
]);
return {
yazilim,
masaBasi,
};
}
export async function getPdfNotes() {
const files = await readdir(PDF_DIR);
const pdfFiles = files.filter((file) => file.toLowerCase().endsWith(".pdf"));
return pdfFiles.sort((a, b) => a.localeCompare(b));
}