51 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			51 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
import { QuartzConfig } from "../cfg"
 | 
						|
import { QuartzPluginData } from "../plugins/vfile"
 | 
						|
import { FileTrieNode } from "./fileTrie"
 | 
						|
import { FilePath, FullSlug } from "./path"
 | 
						|
 | 
						|
export interface Argv {
 | 
						|
  directory: string
 | 
						|
  verbose: boolean
 | 
						|
  output: string
 | 
						|
  serve: boolean
 | 
						|
  watch: boolean
 | 
						|
  port: number
 | 
						|
  wsPort: number
 | 
						|
  remoteDevHost?: string
 | 
						|
  concurrency?: number
 | 
						|
}
 | 
						|
 | 
						|
export type BuildTimeTrieData = QuartzPluginData & {
 | 
						|
  slug: string
 | 
						|
  title: string
 | 
						|
  filePath: string
 | 
						|
}
 | 
						|
 | 
						|
export interface BuildCtx {
 | 
						|
  buildId: string
 | 
						|
  argv: Argv
 | 
						|
  cfg: QuartzConfig
 | 
						|
  allSlugs: FullSlug[]
 | 
						|
  allFiles: FilePath[]
 | 
						|
  trie?: FileTrieNode<BuildTimeTrieData>
 | 
						|
  incremental: boolean
 | 
						|
}
 | 
						|
 | 
						|
export function trieFromAllFiles(allFiles: QuartzPluginData[]): FileTrieNode<BuildTimeTrieData> {
 | 
						|
  const trie = new FileTrieNode<BuildTimeTrieData>([])
 | 
						|
  allFiles.forEach((file) => {
 | 
						|
    if (file.frontmatter) {
 | 
						|
      trie.add({
 | 
						|
        ...file,
 | 
						|
        slug: file.slug!,
 | 
						|
        title: file.frontmatter.title,
 | 
						|
        filePath: file.filePath!,
 | 
						|
      })
 | 
						|
    }
 | 
						|
  })
 | 
						|
 | 
						|
  return trie
 | 
						|
}
 | 
						|
 | 
						|
export type WorkerSerializableBuildCtx = Omit<BuildCtx, "cfg" | "trie">
 |