From da1b6b37fe2ee09359b532f0d2669975b4476c95 Mon Sep 17 00:00:00 2001
From: Jacky Zhao <j.zhao2k19@gmail.com>
Date: Fri, 14 Mar 2025 17:05:26 +0000
Subject: [PATCH] fix(explorer): fix incorrect recursive case for folder rendering
---
quartz/build.ts | 66 ++++++++++++++++++++------------
1 files changed, 41 insertions(+), 25 deletions(-)
diff --git a/quartz/build.ts b/quartz/build.ts
index 38efe36..91a5a5a 100644
--- a/quartz/build.ts
+++ b/quartz/build.ts
@@ -19,6 +19,7 @@
import { Mutex } from "async-mutex"
import DepGraph from "./depgraph"
import { getStaticResourcesFromPlugins } from "./plugins"
+import { randomIdNonSecure } from "./util/random"
type Dependencies = Record<string, DepGraph<FilePath> | null>
@@ -38,13 +39,9 @@
type FileEvent = "add" | "change" | "delete"
-function newBuildId() {
- return Math.random().toString(36).substring(2, 8)
-}
-
async function buildQuartz(argv: Argv, mut: Mutex, clientRefresh: () => void) {
const ctx: BuildCtx = {
- buildId: newBuildId(),
+ buildId: randomIdNonSecure(),
argv,
cfg,
allSlugs: [],
@@ -139,9 +136,9 @@
const buildFromEntry = argv.fastRebuild ? partialRebuildFromEntrypoint : rebuildFromEntrypoint
watcher
- .on("add", (fp) => buildFromEntry(fp, "add", clientRefresh, buildData))
- .on("change", (fp) => buildFromEntry(fp, "change", clientRefresh, buildData))
- .on("unlink", (fp) => buildFromEntry(fp, "delete", clientRefresh, buildData))
+ .on("add", (fp) => buildFromEntry(fp as string, "add", clientRefresh, buildData))
+ .on("change", (fp) => buildFromEntry(fp as string, "change", clientRefresh, buildData))
+ .on("unlink", (fp) => buildFromEntry(fp as string, "delete", clientRefresh, buildData))
return async () => {
await watcher.close()
@@ -162,8 +159,8 @@
return
}
- const buildId = newBuildId()
- ctx.buildId = buildId
+ const buildId = randomIdNonSecure()
+ ctx.buildId = buildId
buildData.lastBuildMs = new Date().getTime()
const release = await mut.acquire()
@@ -253,15 +250,25 @@
([_node, vfile]) => !toRemove.has(vfile.data.filePath!),
)
- const emittedFps = await emitter.emit(ctx, files, staticResources)
-
- if (ctx.argv.verbose) {
- for (const file of emittedFps) {
- console.log(`[emit:${emitter.name}] ${file}`)
+ const emitted = await emitter.emit(ctx, files, staticResources)
+ if (Symbol.asyncIterator in emitted) {
+ // Async generator case
+ for await (const file of emitted) {
+ emittedFiles++
+ if (ctx.argv.verbose) {
+ console.log(`[emit:${emitter.name}] ${file}`)
+ }
+ }
+ } else {
+ // Array case
+ emittedFiles += emitted.length
+ if (ctx.argv.verbose) {
+ for (const file of emitted) {
+ console.log(`[emit:${emitter.name}] ${file}`)
+ }
}
}
- emittedFiles += emittedFps.length
continue
}
@@ -283,15 +290,24 @@
.filter((file) => !toRemove.has(file))
.map((file) => contentMap.get(file)!)
- const emittedFps = await emitter.emit(ctx, upstreamContent, staticResources)
-
- if (ctx.argv.verbose) {
- for (const file of emittedFps) {
- console.log(`[emit:${emitter.name}] ${file}`)
+ const emitted = await emitter.emit(ctx, upstreamContent, staticResources)
+ if (Symbol.asyncIterator in emitted) {
+ // Async generator case
+ for await (const file of emitted) {
+ emittedFiles++
+ if (ctx.argv.verbose) {
+ console.log(`[emit:${emitter.name}] ${file}`)
+ }
+ }
+ } else {
+ // Array case
+ emittedFiles += emitted.length
+ if (ctx.argv.verbose) {
+ for (const file of emitted) {
+ console.log(`[emit:${emitter.name}] ${file}`)
+ }
}
}
-
- emittedFiles += emittedFps.length
}
}
@@ -359,8 +375,8 @@
toRemove.add(filePath)
}
- const buildId = newBuildId()
- ctx.buildId = buildId
+ const buildId = randomIdNonSecure()
+ ctx.buildId = buildId
buildData.lastBuildMs = new Date().getTime()
const release = await mut.acquire()
--
Gitblit v1.10.0