📄 Add Commercial License for ee folder (#1532)
This commit is contained in:
60
ee/apps/landing-page/app/db/blog.ts
Normal file
60
ee/apps/landing-page/app/db/blog.ts
Normal file
@ -0,0 +1,60 @@
|
||||
import fs from 'fs'
|
||||
import path from 'path'
|
||||
|
||||
type Metadata = {
|
||||
title: string
|
||||
publishedAt: string
|
||||
summary: string
|
||||
image?: string
|
||||
}
|
||||
|
||||
function parseFrontmatter(fileContent: string) {
|
||||
const frontmatterRegex = /---\s*([\s\S]*?)\s*---/
|
||||
const match = frontmatterRegex.exec(fileContent)
|
||||
const frontMatterBlock = match![1]
|
||||
const content = fileContent.replace(frontmatterRegex, '').trim()
|
||||
const frontMatterLines = frontMatterBlock.trim().split('\n')
|
||||
const metadata: Partial<Metadata> = {}
|
||||
|
||||
frontMatterLines.forEach((line) => {
|
||||
const [key, ...valueArr] = line.split(': ')
|
||||
let value = valueArr.join(': ').trim()
|
||||
value = value.replace(/^['"](.*)['"]$/, '$1') // Remove quotes
|
||||
metadata[key.trim() as keyof Metadata] = value
|
||||
})
|
||||
|
||||
return { metadata: metadata as Metadata, content }
|
||||
}
|
||||
|
||||
function getMDXFiles(dir: fs.PathLike) {
|
||||
return fs.readdirSync(dir).filter((file) => path.extname(file) === '.mdx')
|
||||
}
|
||||
|
||||
function readMDXFile(filePath: fs.PathOrFileDescriptor) {
|
||||
const rawContent = fs.readFileSync(filePath, 'utf-8')
|
||||
return parseFrontmatter(rawContent)
|
||||
}
|
||||
|
||||
function extractTweetIds(content: string) {
|
||||
const tweetMatches = content.match(/<StaticTweet\sid="[0-9]+"\s\/>/g)
|
||||
return tweetMatches?.map((tweet) => tweet.match(/[0-9]+/g)?.[0]) || []
|
||||
}
|
||||
|
||||
function getMDXData(dir: string) {
|
||||
const mdxFiles = getMDXFiles(dir)
|
||||
return mdxFiles.map((file) => {
|
||||
const { metadata, content } = readMDXFile(path.join(dir, file))
|
||||
const slug = path.basename(file, path.extname(file))
|
||||
const tweetIds = extractTweetIds(content)
|
||||
return {
|
||||
metadata,
|
||||
slug,
|
||||
tweetIds,
|
||||
content,
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
export function getBlogPosts() {
|
||||
return getMDXData(path.join(process.cwd(), 'content'))
|
||||
}
|
Reference in New Issue
Block a user