fix(fast rebuild): call only required emitters, don't always copy assets (#845)

* fix(fast rebuild): call only required emitters, don't always copy assets

* Type function
This commit is contained in:
kabirgh 2024-02-11 20:20:44 +00:00 committed by GitHub
parent 389f2e8bee
commit 226891b9b1
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 12 additions and 5 deletions

View file

@ -203,8 +203,9 @@ async function partialRebuildFromEntrypoint(
const emitterGraph = const emitterGraph =
(await emitter.getDependencyGraph?.(ctx, processedFiles, staticResources)) ?? null (await emitter.getDependencyGraph?.(ctx, processedFiles, staticResources)) ?? null
// emmiter may not define a dependency graph. nothing to update if so // only update the graph if the emitter plugin uses the changed file
if (emitterGraph) { // eg. Assets plugin ignores md files, so we skip updating the graph
if (emitterGraph?.hasNode(fp)) {
// merge the new dependencies into the dep graph // merge the new dependencies into the dep graph
dependencies[emitter.name]?.updateIncomingEdgesForNode(emitterGraph, fp) dependencies[emitter.name]?.updateIncomingEdgesForNode(emitterGraph, fp)
} }

View file

@ -4,6 +4,13 @@ import path from "path"
import fs from "fs" import fs from "fs"
import { glob } from "../../util/glob" import { glob } from "../../util/glob"
import DepGraph from "../../depgraph" import DepGraph from "../../depgraph"
import { Argv } from "../../util/ctx"
import { QuartzConfig } from "../../cfg"
const filesToCopy = async (argv: Argv, cfg: QuartzConfig) => {
// glob all non MD files in content folder and copy it over
return await glob("**", argv.directory, ["**/*.md", ...cfg.configuration.ignorePatterns])
}
export const Assets: QuartzEmitterPlugin = () => { export const Assets: QuartzEmitterPlugin = () => {
return { return {
@ -15,7 +22,7 @@ export const Assets: QuartzEmitterPlugin = () => {
const { argv, cfg } = ctx const { argv, cfg } = ctx
const graph = new DepGraph<FilePath>() const graph = new DepGraph<FilePath>()
const fps = await glob("**", argv.directory, ["**/*.md", ...cfg.configuration.ignorePatterns]) const fps = await filesToCopy(argv, cfg)
for (const fp of fps) { for (const fp of fps) {
const ext = path.extname(fp) const ext = path.extname(fp)
@ -30,9 +37,8 @@ export const Assets: QuartzEmitterPlugin = () => {
return graph return graph
}, },
async emit({ argv, cfg }, _content, _resources): Promise<FilePath[]> { async emit({ argv, cfg }, _content, _resources): Promise<FilePath[]> {
// glob all non MD/MDX/HTML files in content folder and copy it over
const assetsPath = argv.output const assetsPath = argv.output
const fps = await glob("**", argv.directory, ["**/*.md", ...cfg.configuration.ignorePatterns]) const fps = await filesToCopy(argv, cfg)
const res: FilePath[] = [] const res: FilePath[] = []
for (const fp of fps) { for (const fp of fps) {
const ext = path.extname(fp) const ext = path.extname(fp)