diff --git a/prisma/migrations/20220601153532_add_rendered/migration.sql b/prisma/migrations/20220601153532_add_rendered/migration.sql new file mode 100644 index 00000000..b530ae39 --- /dev/null +++ b/prisma/migrations/20220601153532_add_rendered/migration.sql @@ -0,0 +1,2 @@ +-- AlterTable +ALTER TABLE "pages" ADD COLUMN "rendered" JSONB; diff --git a/prisma/schema.prisma b/prisma/schema.prisma index 858d18da..d1e68d97 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -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") diff --git a/src/models/page.model.ts b/src/models/page.model.ts index 546235fd..32d550a3 100644 --- a/src/models/page.model.ts +++ b/src/models/page.model.ts @@ -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( } 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 {