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/build.ts | 35 ++++++++++++++++++++++-------------
1 files changed, 22 insertions(+), 13 deletions(-)
diff --git a/quartz/build.ts b/quartz/build.ts
index 032063f..b98f4a8 100644
--- a/quartz/build.ts
+++ b/quartz/build.ts
@@ -2,9 +2,9 @@
sourceMapSupport.install(options)
import path from "path"
import { PerfTimer } from "./util/perf"
-import { rimraf } from "rimraf"
+import { rm } from "fs/promises"
import { GlobbyFilterFunction, isGitIgnored } from "globby"
-import chalk from "chalk"
+import { styleText } from "util"
import { parseMarkdown } from "./processors/parse"
import { filterContent } from "./processors/filter"
import { emitContent } from "./processors/emit"
@@ -21,7 +21,6 @@
import { randomIdNonSecure } from "./util/random"
import { ChangeEvent } from "./plugins/types"
import { minimatch } from "minimatch"
-import { FileTrieNode } from "./util/fileTrie"
type ContentMap = Map<
FilePath,
@@ -68,7 +67,7 @@
const release = await mut.acquire()
perf.addEvent("clean")
- await rimraf(path.join(output, "*"), { glob: true })
+ await rm(output, { recursive: true, force: true })
console.log(`Cleaned output directory \`${output}\` in ${perf.timeSince("clean")}`)
perf.addEvent("glob")
@@ -86,7 +85,9 @@
const filteredContent = filterContent(ctx, parsedFiles)
await emitContent(ctx, filteredContent)
- console.log(chalk.green(`Done processing ${markdownPaths.length} files in ${perf.timeSince()}`))
+ console.log(
+ styleText("green", `Done processing ${markdownPaths.length} files in ${perf.timeSince()}`),
+ )
release()
if (argv.watch) {
@@ -124,9 +125,10 @@
ctx,
mut,
contentMap,
- ignored: (path) => {
- if (gitIgnoredMatcher(path)) return true
- const pathStr = path.toString()
+ ignored: (fp) => {
+ const pathStr = toPosixPath(fp.toString())
+ if (pathStr.startsWith(".git/")) return true
+ if (gitIgnoredMatcher(pathStr)) return true
for (const pattern of cfg.configuration.ignorePatterns) {
if (minimatch(pathStr, pattern)) {
return true
@@ -141,6 +143,7 @@
}
const watcher = chokidar.watch(".", {
+ awaitWriteFinish: { stabilityThreshold: 250 },
persistent: true,
cwd: argv.directory,
ignoreInitial: true,
@@ -149,16 +152,19 @@
const changes: ChangeEvent[] = []
watcher
.on("add", (fp) => {
+ fp = toPosixPath(fp)
if (buildData.ignored(fp)) return
changes.push({ path: fp as FilePath, type: "add" })
void rebuild(changes, clientRefresh, buildData)
})
.on("change", (fp) => {
+ fp = toPosixPath(fp)
if (buildData.ignored(fp)) return
changes.push({ path: fp as FilePath, type: "change" })
void rebuild(changes, clientRefresh, buildData)
})
.on("unlink", (fp) => {
+ fp = toPosixPath(fp)
if (buildData.ignored(fp)) return
changes.push({ path: fp as FilePath, type: "delete" })
void rebuild(changes, clientRefresh, buildData)
@@ -187,7 +193,7 @@
const perf = new PerfTimer()
perf.addEvent("rebuild")
- console.log(chalk.yellow("Detected change, rebuilding..."))
+ console.log(styleText("yellow", "Detected change, rebuilding..."))
// update changesSinceLastBuild
for (const change of changes) {
@@ -249,9 +255,12 @@
// update allFiles and then allSlugs with the consistent view of content map
ctx.allFiles = Array.from(contentMap.keys())
ctx.allSlugs = ctx.allFiles.map((fp) => slugifyFilePath(fp as FilePath))
- const processedFiles = Array.from(contentMap.values())
- .filter((file) => file.type === "markdown")
- .map((file) => file.content)
+ let processedFiles = filterContent(
+ ctx,
+ Array.from(contentMap.values())
+ .filter((file) => file.type === "markdown")
+ .map((file) => file.content),
+ )
let emittedFiles = 0
for (const emitter of cfg.plugins.emitters) {
@@ -282,7 +291,7 @@
}
console.log(`Emitted ${emittedFiles} files to \`${argv.output}\` in ${perf.timeSince("rebuild")}`)
- console.log(chalk.green(`Done rebuilding in ${perf.timeSince()}`))
+ console.log(styleText("green", `Done rebuilding in ${perf.timeSince()}`))
changes.splice(0, numChangesInBuild)
clientRefresh()
release()
--
Gitblit v1.10.0