From c538c151c7462ad0395ff2c15c5e11e89e362aa8 Mon Sep 17 00:00:00 2001
From: Striven <sg.striven@cutecat.club>
Date: Sat, 04 Apr 2026 19:47:16 +0000
Subject: [PATCH] Initial commit
---
quartz/processors/parse.ts | 50 ++++++++++++++++++++++++++++++++++++--------------
1 files changed, 36 insertions(+), 14 deletions(-)
diff --git a/quartz/processors/parse.ts b/quartz/processors/parse.ts
index 479313f..1099cd9 100644
--- a/quartz/processors/parse.ts
+++ b/quartz/processors/parse.ts
@@ -7,12 +7,13 @@
import { MarkdownContent, ProcessedContent } from "../plugins/vfile"
import { PerfTimer } from "../util/perf"
import { read } from "to-vfile"
-import { FilePath, FullSlug, QUARTZ, slugifyFilePath } from "../util/path"
+import { FilePath, QUARTZ, slugifyFilePath } from "../util/path"
import path from "path"
import workerpool, { Promise as WorkerPromise } from "workerpool"
import { QuartzLogger } from "../util/log"
import { trace } from "../util/trace"
-import { BuildCtx } from "../util/ctx"
+import { BuildCtx, WorkerSerializableBuildCtx } from "../util/ctx"
+import { styleText } from "util"
export type QuartzMdProcessor = Processor<MDRoot, MDRoot, MDRoot>
export type QuartzHtmlProcessor = Processor<undefined, MDRoot, HTMLRoot>
@@ -171,25 +172,46 @@
workerType: "thread",
})
const errorHandler = (err: any) => {
- console.error(`${err}`.replace(/^error:\s*/i, ""))
+ console.error(err)
process.exit(1)
}
- const mdPromises: WorkerPromise<[MarkdownContent[], FullSlug[]]>[] = []
- for (const chunk of chunks(fps, CHUNK_SIZE)) {
- mdPromises.push(pool.exec("parseMarkdown", [ctx.buildId, argv, chunk]))
+ const serializableCtx: WorkerSerializableBuildCtx = {
+ buildId: ctx.buildId,
+ argv: ctx.argv,
+ allSlugs: ctx.allSlugs,
+ allFiles: ctx.allFiles,
+ incremental: ctx.incremental,
}
- const mdResults: [MarkdownContent[], FullSlug[]][] =
- await WorkerPromise.all(mdPromises).catch(errorHandler)
- const childPromises: WorkerPromise<ProcessedContent[]>[] = []
- for (const [_, extraSlugs] of mdResults) {
- ctx.allSlugs.push(...extraSlugs)
+ const textToMarkdownPromises: WorkerPromise<MarkdownContent[]>[] = []
+ let processedFiles = 0
+ for (const chunk of chunks(fps, CHUNK_SIZE)) {
+ textToMarkdownPromises.push(pool.exec("parseMarkdown", [serializableCtx, chunk]))
}
- for (const [mdChunk, _] of mdResults) {
- childPromises.push(pool.exec("processHtml", [ctx.buildId, argv, mdChunk, ctx.allSlugs]))
+
+ const mdResults: Array<MarkdownContent[]> = await Promise.all(
+ textToMarkdownPromises.map(async (promise) => {
+ const result = await promise
+ processedFiles += result.length
+ log.updateText(`text->markdown ${styleText("gray", `${processedFiles}/${fps.length}`)}`)
+ return result
+ }),
+ ).catch(errorHandler)
+
+ const markdownToHtmlPromises: WorkerPromise<ProcessedContent[]>[] = []
+ processedFiles = 0
+ for (const mdChunk of mdResults) {
+ markdownToHtmlPromises.push(pool.exec("processHtml", [serializableCtx, mdChunk]))
}
- const results: ProcessedContent[][] = await WorkerPromise.all(childPromises).catch(errorHandler)
+ const results: ProcessedContent[][] = await Promise.all(
+ markdownToHtmlPromises.map(async (promise) => {
+ const result = await promise
+ processedFiles += result.length
+ log.updateText(`markdown->html ${styleText("gray", `${processedFiles}/${fps.length}`)}`)
+ return result
+ }),
+ ).catch(errorHandler)
res = results.flat()
await pool.terminate()
--
Gitblit v1.10.0