UNPKG

@ykocaman/astro-medium-loader

Version:
41 lines (40 loc) 1.43 kB
import { z } from "astro/zod"; import { getMediumPosts } from "./medium.js"; export function mediumLoader({ username, storage }) { storage = { ...{ enabled: false, path: '.astro/cache/medium' }, ...storage }; if (!username) { throw new Error('Medium username is required'); } return { name: 'medium-loader', schema: () => z.object({ title: z.string(), link: z.string().url(), isoDate: z.date(), pubDate: z.date(), updatedDate: z.date().optional(), description: z.string(), content: z.string(), canonical: z.string(), categories: z.array(z.string()).optional(), heroImage: z.string().optional(), source: z.string().default('medium'), external: z.boolean().default(true), }), load: async ({ store, parseData, renderMarkdown }) => { const posts = await getMediumPosts({ username, storage }); store.clear(); for (const post of posts) { const data = await parseData({ id: post.slug, data: post, }); store.set({ id: post.slug, data, rendered: await renderMarkdown(post.content + post.canonical), }); } } }; }