fix: make fileTrie last-write-wins; warn on slug collisions

This commit is contained in:
saberzero1
2026-04-10 21:14:23 +02:00
parent 9d26e48dc5
commit afa63033cc
5 changed files with 306 additions and 7 deletions
+13 -6
View File
@@ -10,6 +10,7 @@ import { filterContent } from "./processors/filter"
import { emitContent } from "./processors/emit"
import cfg from "../quartz"
import { FilePath, FullSlug, joinSegments, slugifyFilePath } from "./util/path"
import { detectSlugCollisions, formatCollisionWarning } from "./util/slugCollisions"
import chokidar from "chokidar"
import { ProcessedContent } from "./plugins/vfile"
import { Argv, BuildCtx } from "./util/ctx"
@@ -22,6 +23,12 @@ import { randomIdNonSecure } from "./util/random"
import { ChangeEvent, QuartzPageTypePluginInstance } from "./plugins/types"
import { minimatch } from "minimatch"
function reportSlugCollisions(content: ProcessedContent[]): void {
const collisions = detectSlugCollisions(content)
if (collisions.length === 0) return
console.warn(styleText("yellow", formatCollisionWarning(collisions)))
}
function getPageTypeExtensions(ctx: BuildCtx): Set<string> {
const extensions = new Set<string>()
const pageTypes = (ctx.cfg.plugins.pageTypes ?? []) as unknown as QuartzPageTypePluginInstance[]
@@ -123,6 +130,7 @@ async function buildQuartz(argv: Argv, mut: Mutex, clientRefresh: () => void) {
}
const parsedFiles = await parseMarkdown(ctx, filePaths)
reportSlugCollisions(parsedFiles)
const filteredContent = filterContent(ctx, parsedFiles)
await emitContent(ctx, filteredContent)
@@ -303,12 +311,11 @@ async function rebuild(changes: ChangeEvent[], clientRefresh: () => void, buildD
const aliases = addVirtualPageSlugAliases(ctx.allSlugs, ptExtensions)
ctx.allSlugs.push(...aliases)
}
let processedFiles = filterContent(
ctx,
Array.from(contentMap.values())
.filter((file) => file.type === "markdown")
.map((file) => file.content),
)
const markdownContent = Array.from(contentMap.values())
.filter((file) => file.type === "markdown")
.map((file) => file.content)
reportSlugCollisions(markdownContent)
let processedFiles = filterContent(ctx, markdownContent)
let emittedFiles = 0