50 lines
1.1 KiB
TypeScript
50 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">
|