prerender markdown to html

This commit is contained in:
EGOIST 2022-06-01 23:36:00 +08:00
parent 26d0c5e8db
commit 6cf9ddc676
3 changed files with 15 additions and 5 deletions

View File

@ -0,0 +1,2 @@
-- AlterTable
ALTER TABLE "pages" ADD COLUMN "rendered" JSONB;

View File

@ -119,6 +119,8 @@ model Page {
deletedAt DateTime?
subscribersNotifiedAt DateTime?
authors User[]
// prerendered markdown to html, including extra data like excerpt
rendered Json?
@@unique([siteId, slug])
@@map("pages")

View File

@ -109,9 +109,9 @@ export async function createOrUpdatePage(
await checkPageSlug({ slug, excludePage: page.id, siteId: page.siteId })
// Just checking if the page content can be rendered
if (input.content) {
await renderPageContent(input.content)
}
const rendered = input.content
? await renderPageContent(input.content)
: undefined
const updated = await prismaPrimary.page.update({
where: {
@ -125,6 +125,7 @@ export async function createOrUpdatePage(
excerpt: input.excerpt && stripHTML(input.excerpt),
slug,
type: input.isPost ? "POST" : "PAGE",
rendered,
},
})
@ -209,7 +210,9 @@ export async function getPagesBySite(
if (!input.includeContent && !input.includeExcerpt) {
return node
}
const rendered = await renderPageContent(node.content)
const rendered = node.rendered
? (node.rendered as Rendered)
: await renderPageContent(node.content)
if (!input.includeContent) {
rendered.contentHTML = ""
}
@ -219,6 +222,7 @@ export async function getPagesBySite(
}
return {
...node,
contentHTML: rendered.contentHTML,
autoExcerpt: rendered.excerpt,
}
}),
@ -308,7 +312,9 @@ export async function getPage<TRender extends boolean = false>(
}
const rendered = (
input.render ? await renderPageContent(page.content) : null
input.render
? page.rendered || (await renderPageContent(page.content))
: null
) as TRender extends true ? Rendered : null
return {