From 93bd7c5caf967677998c2feed47db3d72372566e Mon Sep 17 00:00:00 2001 From: saberzero1 Date: Fri, 13 Feb 2026 20:10:06 +0100 Subject: [PATCH] fix: populate ctx.trie in PageTypeDispatcher before rendering Components like FolderContent depend on ctx.trie for folder hierarchy. The dispatcher now lazily initializes it via trieFromAllFiles in emit and force-rebuilds it in partialEmit to reflect file changes. --- quartz/plugins/pageTypes/dispatcher.ts | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/quartz/plugins/pageTypes/dispatcher.ts b/quartz/plugins/pageTypes/dispatcher.ts index 5c5fa75bc..f739b8c45 100644 --- a/quartz/plugins/pageTypes/dispatcher.ts +++ b/quartz/plugins/pageTypes/dispatcher.ts @@ -5,7 +5,7 @@ import { FullPageLayout } from "../../cfg" import { FullSlug, pathToRoot } from "../../util/path" import { ProcessedContent, defaultProcessedContent } from "../vfile" import { write } from "../emitters/helpers" -import { BuildCtx } from "../../util/ctx" +import { BuildCtx, trieFromAllFiles } from "../../util/ctx" import { StaticResources } from "../../util/resources" function getPageTypes(ctx: BuildCtx): QuartzPageTypePluginInstance[] { @@ -104,6 +104,9 @@ export const PageTypeDispatcher: QuartzEmitterPlugin> const cfg = ctx.cfg.configuration const allFiles = content.map((c) => c[1].data) + // Ensure trie is available for components that need folder hierarchy (e.g. FolderContent) + ctx.trie ??= trieFromAllFiles(allFiles) + for (const [tree, file] of content) { const slug = file.data.slug! const fileData = file.data @@ -140,6 +143,9 @@ export const PageTypeDispatcher: QuartzEmitterPlugin> const cfg = ctx.cfg.configuration const allFiles = content.map((c) => c[1].data) + // Rebuild trie on partial emit to reflect file changes + ctx.trie = trieFromAllFiles(allFiles) + const changedSlugs = new Set() for (const changeEvent of changeEvents) { if (!changeEvent.file) continue