| | |
| | | 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" |
| | |
| | | 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 = { |
| | |
| | | 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) |
| | |
| | | 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") { |