fix: allow arbitrary transclusion

This commit is contained in:
saberzero1
2026-05-23 01:18:30 +02:00
parent 5b6588189f
commit 0593c8cd6a

View File

@@ -198,12 +198,16 @@ export const PageTypeDispatcher: QuartzEmitterPlugin<Partial<DispatcherOptions>>
}
}
// Render Body components to populate htmlAst for transclusion
populateVirtualPageHtmlAst(virtualEntries, ctx, allFiles, resources)
// Merge virtual page data into allFiles so renderPage can resolve transcludes
// Merge virtual page data into allFiles before populating htmlAst so that
// Body components rendered during populateVirtualPageHtmlAst can resolve
// cross-virtual-page embeds (e.g. a .base file embedded in a .canvas file).
// The vfile.data objects are shared by reference, so htmlAst set on earlier
// entries becomes visible to later entries in the same pass.
const allFilesWithVirtual = [...allFiles, ...virtualEntries.map((ve) => ve.vfile.data)]
// Render Body components to populate htmlAst for transclusion
populateVirtualPageHtmlAst(virtualEntries, ctx, allFilesWithVirtual, resources)
// Phase 2: Emit regular pages (with virtual page data available for transclusion)
for (const [tree, file] of content) {
const slug = file.data.slug!
@@ -288,12 +292,11 @@ export const PageTypeDispatcher: QuartzEmitterPlugin<Partial<DispatcherOptions>>
}
}
// Render Body components to populate htmlAst for transclusion
populateVirtualPageHtmlAst(virtualEntries, ctx, allFiles, resources)
// Merge virtual page data into allFiles for transclude resolution
const allFilesWithVirtual = [...allFiles, ...virtualEntries.map((ve) => ve.vfile.data)]
// Render Body components to populate htmlAst for transclusion
populateVirtualPageHtmlAst(virtualEntries, ctx, allFilesWithVirtual, resources)
// Phase 2: Emit changed regular pages
for (const [tree, file] of content) {
const slug = file.data.slug!