Jacky Zhao
2023-08-03 d7842e0ce713e338f21374cea407a46cace18cca
quartz/build.ts
@@ -2,7 +2,7 @@
import path from "path"
import { PerfTimer } from "./perf"
import { rimraf } from "rimraf"
import { globby, isGitIgnored } from "globby"
import { isGitIgnored } from "globby"
import chalk from "chalk"
import http from "http"
import serveHandler from "serve-handler"
@@ -10,11 +10,12 @@
import { filterContent } from "./processors/filter"
import { emitContent } from "./processors/emit"
import cfg from "../quartz.config"
import { FilePath, slugifyFilePath } from "./path"
import { FilePath, joinSegments, slugifyFilePath } from "./path"
import chokidar from "chokidar"
import { ProcessedContent } from "./plugins/vfile"
import WebSocket, { WebSocketServer } from "ws"
import { Argv, BuildCtx } from "./ctx"
import { glob, toPosixPath } from "./glob"
async function buildQuartz(argv: Argv, version: string) {
  const ctx: BuildCtx = {
@@ -42,16 +43,12 @@
  console.log(`Cleaned output directory \`${output}\` in ${perf.timeSince("clean")}`)
  perf.addEvent("glob")
  const fps = await globby("**/*.md", {
    cwd: argv.directory,
    ignore: cfg.configuration.ignorePatterns,
    gitignore: true,
  })
  const fps = await glob("**/*.md", argv.directory, cfg.configuration.ignorePatterns)
  console.log(
    `Found ${fps.length} input files from \`${argv.directory}\` in ${perf.timeSince("glob")}`,
  )
  const filePaths = fps.map((fp) => `${argv.directory}${path.sep}${fp}` as FilePath)
  const filePaths = fps.map((fp) => joinSegments(argv.directory, fp) as FilePath)
  ctx.allSlugs = fps.map((fp) => slugifyFilePath(fp as FilePath))
  const parsedFiles = await parseMarkdown(ctx, filePaths)
@@ -81,8 +78,9 @@
  let toRebuild: Set<FilePath> = new Set()
  let toRemove: Set<FilePath> = new Set()
  async function rebuild(fp: string, action: "add" | "change" | "delete") {
    fp = toPosixPath(fp)
    if (!ignored(fp)) {
      const filePath = `${argv.directory}${path.sep}${fp}` as FilePath
      const filePath = joinSegments(argv.directory, fp) as FilePath
      if (action === "add" || action === "change") {
        toRebuild.add(filePath)
      } else if (action === "delete") {