Jacky Zhao
2025-03-13 696403d3fa79f79fa3340bb1fe11533d1fdaf0a4
quartz/util/fileTrie.ts
@@ -4,6 +4,7 @@
interface FileTrieData {
  slug: string
  title: string
  filePath: string
}
export class FileTrieNode<T extends FileTrieData = ContentDetails> {
@@ -11,6 +12,11 @@
  children: Array<FileTrieNode<T>>
  private slugSegments: string[]
  // prefer showing the file path segment over the slug segment
  // so that folders that dont have index files can be shown as is
  // without dashes in the slug
  private fileSegmentHint?: string
  private displayNameOverride?: string
  data: T | null
  constructor(segments: string[], data?: T) {
@@ -18,10 +24,18 @@
    this.slugSegments = segments
    this.data = data ?? null
    this.isFolder = false
    this.displayNameOverride = undefined
  }
  get displayName(): string {
    return this.data?.title ?? this.slugSegment ?? ""
    const nonIndexTitle = this.data?.title === "index" ? undefined : this.data?.title
    return (
      this.displayNameOverride ?? nonIndexTitle ?? this.fileSegmentHint ?? this.slugSegment ?? ""
    )
  }
  set displayName(name: string) {
    this.displayNameOverride = name
  }
  get slug(): FullSlug {
@@ -63,6 +77,9 @@
      // recursive case, we are not at the end of the path
      const child =
        this.children.find((c) => c.slugSegment === segment) ?? this.makeChild(path, undefined)
      const fileParts = file.filePath.split("/")
      child.fileSegmentHint = fileParts.at(-path.length)
      child.insert(path.slice(1), file)
    }
  }