38 lines
1 KiB
JavaScript
38 lines
1 KiB
JavaScript
const { promises: fs } = require('fs')
|
|
const path = require('path')
|
|
const RSS = require('rss')
|
|
const matter = require('gray-matter')
|
|
|
|
async function generate() {
|
|
const feed = new RSS({
|
|
title: 'Your Name',
|
|
site_url: 'https://yoursite.com',
|
|
feed_url: 'https://yoursite.com/feed.xml'
|
|
})
|
|
|
|
const posts = await fs.readdir(path.join(__dirname, '..', 'pages', 'posts'))
|
|
|
|
await Promise.all(
|
|
posts.map(async (name) => {
|
|
if (name.startsWith('index.')) return
|
|
|
|
const content = await fs.readFile(
|
|
path.join(__dirname, '..', 'pages', 'posts', name)
|
|
)
|
|
const frontmatter = matter(content)
|
|
|
|
feed.item({
|
|
title: frontmatter.data.title,
|
|
url: '/posts/' + name.replace(/\.mdx?/, ''),
|
|
date: frontmatter.data.date,
|
|
description: frontmatter.data.description,
|
|
categories: frontmatter.data.tag.split(', '),
|
|
author: frontmatter.data.author
|
|
})
|
|
})
|
|
)
|
|
|
|
await fs.writeFile('./public/feed.xml', feed.xml({ indent: true }))
|
|
}
|
|
|
|
generate()
|