UNPKG

astro-loader-hashnode

Version:

Astro content loader for seamlessly integrating Hashnode blog posts into your Astro website using the Content Layer API

84 lines (63 loc) โ€ข 2.45 kB
# astro-loader-hashnode Astro content loader for seamlessly integrating Hashnode blog posts into your Astro website using the Content Layer API. ## Installation ```bash npm install astro-loader-hashnode # or pnpm add astro-loader-hashnode # or yarn add astro-loader-hashnode ``` ## Quick Start ```ts // src/content.config.ts import { defineCollection } from 'astro:content'; import { hashnodeLoader } from 'astro-loader-hashnode'; export const collections = { blog: defineCollection({ loader: hashnodeLoader({ publicationHost: 'your-blog.hashnode.dev', }), }), }; ``` ## Features - ๐Ÿš€ **Easy Setup** - One-line configuration to get started - ๐Ÿ“ **Rich Content** - Full post content, metadata, and assets - ๐Ÿ”„ **Multiple Loaders** - Posts, series, drafts, and search - ๐ŸŽฏ **Type Safety** - Full TypeScript support - โšก **Performance** - Built-in caching and pagination - ๐Ÿ› ๏ธ **Utilities** - SEO helpers, content processing, and more - ๐Ÿงช **Schema Exposure** - Built-in Zod schema exported to Astro for type inference - ๐Ÿงต **Incremental Updates** - Digest-based change detection to skip unchanged entries - ๐Ÿ–จ๏ธ **Pre-render Support** - Each entry includes `rendered.html` so you can use Astro's `render(entry)` API - ๐Ÿ“Œ **Post Preferences** - Access Hashnode preferences like `pinnedToBlog` and `isDelisted` ## Documentation Visit our [documentation](https://github.com/raisedadead/astro-loader-hashnode#readme) for detailed usage instructions and examples. ### Rendering Content Astro can render an entry via `render(entry)`. Because the loader now supplies a `rendered` field (HTML + metadata), you can also directly set HTML: ```astro --- import { getEntry } from 'astro:content'; const post = await getEntry('blog', 'my-post-slug'); const { data, render } = post; // Option 1: use pre-rendered HTML const html = data.content.html; // Option 2: let Astro render (works if markdown available) const rendered = await render(); --- <article set:html={html} /> ``` ### Preferences Fields Some extra post preference flags are included when present on Hashnode: ```ts data.preferences?.pinnedToBlog; // boolean | undefined data.preferences?.isDelisted; // boolean | undefined ``` ### Change Detection (Digest) Each stored entry includes a digest used internally to skip unchanged items on subsequent loads, improving build performance. ## License MIT ยฉ [Mrugesh Mohapatra](https://mrugesh.dev)