Remove chalk and rimraf from the project

This commit is contained in:
fl0werpowers 2025-03-27 16:58:19 +01:00
parent b397dae951
commit da1e99df3c
13 changed files with 95 additions and 69 deletions

View File

@ -42,7 +42,6 @@
"@tweenjs/tween.js": "^25.0.0", "@tweenjs/tween.js": "^25.0.0",
"ansi-truncate": "^1.2.0", "ansi-truncate": "^1.2.0",
"async-mutex": "^0.5.0", "async-mutex": "^0.5.0",
"chalk": "^5.4.1",
"chokidar": "^4.0.3", "chokidar": "^4.0.3",
"cli-spinner": "^0.2.10", "cli-spinner": "^0.2.10",
"d3": "^7.9.0", "d3": "^7.9.0",
@ -84,7 +83,6 @@
"remark-rehype": "^11.1.1", "remark-rehype": "^11.1.1",
"remark-smartypants": "^3.0.2", "remark-smartypants": "^3.0.2",
"rfdc": "^1.4.1", "rfdc": "^1.4.1",
"rimraf": "^6.0.1",
"satori": "^0.12.1", "satori": "^0.12.1",
"serve-handler": "^6.1.6", "serve-handler": "^6.1.6",
"sharp": "^0.33.5", "sharp": "^0.33.5",

View File

@ -2,9 +2,9 @@ import sourceMapSupport from "source-map-support"
sourceMapSupport.install(options) sourceMapSupport.install(options)
import path from "path" import path from "path"
import { PerfTimer } from "./util/perf" import { PerfTimer } from "./util/perf"
import { rimraf } from "rimraf" import { rm } from "fs/promises"
import { GlobbyFilterFunction, isGitIgnored } from "globby" import { globby, GlobbyFilterFunction, isGitIgnored } from "globby"
import chalk from "chalk" import { styleText } from "util"
import { parseMarkdown } from "./processors/parse" import { parseMarkdown } from "./processors/parse"
import { filterContent } from "./processors/filter" import { filterContent } from "./processors/filter"
import { emitContent } from "./processors/emit" import { emitContent } from "./processors/emit"
@ -67,7 +67,7 @@ async function buildQuartz(argv: Argv, mut: Mutex, clientRefresh: () => void) {
const release = await mut.acquire() const release = await mut.acquire()
perf.addEvent("clean") perf.addEvent("clean")
await rimraf(path.join(output, "*"), { glob: true }) for (const rmPath of await globby(path.join(output, "*"))) await rm(rmPath, { recursive: true })
console.log(`Cleaned output directory \`${output}\` in ${perf.timeSince("clean")}`) console.log(`Cleaned output directory \`${output}\` in ${perf.timeSince("clean")}`)
perf.addEvent("glob") perf.addEvent("glob")
@ -85,7 +85,9 @@ async function buildQuartz(argv: Argv, mut: Mutex, clientRefresh: () => void) {
const filteredContent = filterContent(ctx, parsedFiles) const filteredContent = filterContent(ctx, parsedFiles)
await emitContent(ctx, filteredContent) 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() release()
if (argv.watch) { if (argv.watch) {
@ -186,7 +188,7 @@ async function rebuild(changes: ChangeEvent[], clientRefresh: () => void, buildD
const perf = new PerfTimer() const perf = new PerfTimer()
perf.addEvent("rebuild") perf.addEvent("rebuild")
console.log(chalk.yellow("Detected change, rebuilding...")) console.log(styleText("yellow", "Detected change, rebuilding..."))
// update changesSinceLastBuild // update changesSinceLastBuild
for (const change of changes) { for (const change of changes) {
@ -281,7 +283,7 @@ async function rebuild(changes: ChangeEvent[], clientRefresh: () => void, buildD
} }
console.log(`Emitted ${emittedFiles} files to \`${argv.output}\` in ${perf.timeSince("rebuild")}`) 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) changes.splice(0, numChangesInBuild)
clientRefresh() clientRefresh()
release() release()

View File

@ -1,11 +1,11 @@
import { promises } from "fs" import { promises } from "fs"
import path from "path" import path from "path"
import esbuild from "esbuild" import esbuild from "esbuild"
import chalk from "chalk" import { styleText } from "util"
import { sassPlugin } from "esbuild-sass-plugin" import { sassPlugin } from "esbuild-sass-plugin"
import fs from "fs" import fs from "fs"
import { intro, outro, select, text } from "@clack/prompts" import { intro, outro, select, text } from "@clack/prompts"
import { rimraf } from "rimraf" import { rm } from "fs/promises"
import chokidar from "chokidar" import chokidar from "chokidar"
import prettyBytes from "pretty-bytes" import prettyBytes from "pretty-bytes"
import { execSync, spawnSync } from "child_process" import { execSync, spawnSync } from "child_process"
@ -48,7 +48,7 @@ function resolveContentPath(contentPath) {
*/ */
export async function handleCreate(argv) { export async function handleCreate(argv) {
console.log() console.log()
intro(chalk.bgGreen.black(` Quartz v${version} `)) intro(styleText(["bgGreen", "black"], ` Quartz v${version} `))
const contentFolder = resolveContentPath(argv.directory) const contentFolder = resolveContentPath(argv.directory)
let setupStrategy = argv.strategy?.toLowerCase() let setupStrategy = argv.strategy?.toLowerCase()
let linkResolutionStrategy = argv.links?.toLowerCase() let linkResolutionStrategy = argv.links?.toLowerCase()
@ -61,12 +61,16 @@ export async function handleCreate(argv) {
// Error handling // Error handling
if (!sourceDirectory) { if (!sourceDirectory) {
outro( outro(
chalk.red( styleText(
`Setup strategies (arg '${chalk.yellow( "red",
`Setup strategies (arg '${styleText(
"yellow",
`-${CreateArgv.strategy.alias[0]}`, `-${CreateArgv.strategy.alias[0]}`,
)}') other than '${chalk.yellow( )}') other than '${styleText(
"yellow",
"new", "new",
)}' require content folder argument ('${chalk.yellow( )}' require content folder argument ('${styleText(
"yellow",
`-${CreateArgv.source.alias[0]}`, `-${CreateArgv.source.alias[0]}`,
)}') to be set`, )}') to be set`,
), ),
@ -75,19 +79,23 @@ export async function handleCreate(argv) {
} else { } else {
if (!fs.existsSync(sourceDirectory)) { if (!fs.existsSync(sourceDirectory)) {
outro( outro(
chalk.red( styleText(
`Input directory to copy/symlink 'content' from not found ('${chalk.yellow( "red",
`Input directory to copy/symlink 'content' from not found ('${styleText(
"yellow",
sourceDirectory, sourceDirectory,
)}', invalid argument "${chalk.yellow(`-${CreateArgv.source.alias[0]}`)})`, )}', invalid argument "${styleText("yellow", `-${CreateArgv.source.alias[0]}`)})`,
), ),
) )
process.exit(1) process.exit(1)
} else if (!fs.lstatSync(sourceDirectory).isDirectory()) { } else if (!fs.lstatSync(sourceDirectory).isDirectory()) {
outro( outro(
chalk.red( styleText(
`Source directory to copy/symlink 'content' from is not a directory (found file at '${chalk.yellow( "red",
`Source directory to copy/symlink 'content' from is not a directory (found file at '${styleText(
"yellow",
sourceDirectory, sourceDirectory,
)}', invalid argument ${chalk.yellow(`-${CreateArgv.source.alias[0]}`)}")`, )}', invalid argument ${styleText("yellow", `-${CreateArgv.source.alias[0]}`)}")`,
), ),
) )
process.exit(1) process.exit(1)
@ -119,7 +127,7 @@ export async function handleCreate(argv) {
if (contentStat.isSymbolicLink()) { if (contentStat.isSymbolicLink()) {
await fs.promises.unlink(contentFolder) await fs.promises.unlink(contentFolder)
} else { } else {
await rimraf(contentFolder) await rm(path, { recursive: true })
} }
} }
@ -229,7 +237,7 @@ export async function handleBuild(argv) {
argv.watch = true argv.watch = true
} }
console.log(chalk.bgGreen.black(`\n Quartz v${version} \n`)) console.log(`\n${styleText(["bgGreen", "black"], ` Quartz v${version} `)} \n`)
const ctx = await esbuild.context({ const ctx = await esbuild.context({
entryPoints: [fp], entryPoints: [fp],
outfile: cacheFile, outfile: cacheFile,
@ -304,13 +312,13 @@ export async function handleBuild(argv) {
} }
if (cleanupBuild) { if (cleanupBuild) {
console.log(chalk.yellow("Detected a source code change, doing a hard rebuild...")) console.log(styleText("yellow", "Detected a source code change, doing a hard rebuild..."))
await cleanupBuild() await cleanupBuild()
} }
const result = await ctx.rebuild().catch((err) => { const result = await ctx.rebuild().catch((err) => {
console.error(`${chalk.red("Couldn't parse Quartz configuration:")} ${fp}`) console.error(`${styleText("red", "Couldn't parse Quartz configuration:")} ${fp}`)
console.log(`Reason: ${chalk.grey(err)}`) console.log(`Reason: ${styleText("grey", err)}`)
process.exit(1) process.exit(1)
}) })
release() release()
@ -348,7 +356,8 @@ export async function handleBuild(argv) {
const server = http.createServer(async (req, res) => { const server = http.createServer(async (req, res) => {
if (argv.baseDir && !req.url?.startsWith(argv.baseDir)) { if (argv.baseDir && !req.url?.startsWith(argv.baseDir)) {
console.log( console.log(
chalk.red( styleText(
"red",
`[404] ${req.url} (warning: link outside of site, this is likely a Quartz bug)`, `[404] ${req.url} (warning: link outside of site, this is likely a Quartz bug)`,
), ),
) )
@ -383,8 +392,10 @@ export async function handleBuild(argv) {
}) })
const status = res.statusCode const status = res.statusCode
const statusString = const statusString =
status >= 200 && status < 300 ? chalk.green(`[${status}]`) : chalk.red(`[${status}]`) status >= 200 && status < 300
console.log(statusString + chalk.grey(` ${argv.baseDir}${req.url}`)) ? styleText("green", `[${status}]`)
: styleText("red", `[${status}]`)
console.log(statusString + styleText("grey", ` ${argv.baseDir}${req.url}`))
release() release()
} }
@ -393,7 +404,10 @@ export async function handleBuild(argv) {
res.writeHead(302, { res.writeHead(302, {
Location: newFp, Location: newFp,
}) })
console.log(chalk.yellow("[302]") + chalk.grey(` ${argv.baseDir}${req.url} -> ${newFp}`)) console.log(
styleText("yellow", "[302]") +
styleText("grey", ` ${argv.baseDir}${req.url} -> ${newFp}`),
)
res.end() res.end()
} }
@ -443,7 +457,8 @@ export async function handleBuild(argv) {
const wss = new WebSocketServer({ port: argv.wsPort }) const wss = new WebSocketServer({ port: argv.wsPort })
wss.on("connection", (ws) => connections.push(ws)) wss.on("connection", (ws) => connections.push(ws))
console.log( console.log(
chalk.cyan( styleText(
"cyan",
`Started a Quartz server listening at http://localhost:${argv.port}${argv.baseDir}`, `Started a Quartz server listening at http://localhost:${argv.port}${argv.baseDir}`,
), ),
) )
@ -467,7 +482,7 @@ export async function handleBuild(argv) {
.on("change", () => build(clientRefresh)) .on("change", () => build(clientRefresh))
.on("unlink", () => build(clientRefresh)) .on("unlink", () => build(clientRefresh))
console.log(chalk.grey("hint: exit with ctrl+c")) console.log(styleText("grey", "hint: exit with ctrl+c"))
} }
} }
@ -477,7 +492,7 @@ export async function handleBuild(argv) {
*/ */
export async function handleUpdate(argv) { export async function handleUpdate(argv) {
const contentFolder = resolveContentPath(argv.directory) const contentFolder = resolveContentPath(argv.directory)
console.log(chalk.bgGreen.black(`\n Quartz v${version} \n`)) console.log(`\n${styleText(["bgGreen", "black"], ` Quartz v${version} `)} \n`)
console.log("Backing up your content") console.log("Backing up your content")
execSync( execSync(
`git remote show upstream || git remote add upstream https://github.com/jackyzha0/quartz.git`, `git remote show upstream || git remote add upstream https://github.com/jackyzha0/quartz.git`,
@ -490,7 +505,7 @@ export async function handleUpdate(argv) {
try { try {
gitPull(UPSTREAM_NAME, QUARTZ_SOURCE_BRANCH) gitPull(UPSTREAM_NAME, QUARTZ_SOURCE_BRANCH)
} catch { } catch {
console.log(chalk.red("An error occurred above while pulling updates.")) console.log(styleText("red", "An error occurred above while pulling updates."))
await popContentFolder(contentFolder) await popContentFolder(contentFolder)
return return
} }
@ -517,9 +532,9 @@ export async function handleUpdate(argv) {
const res = spawnSync("npm", ["i"], opts) const res = spawnSync("npm", ["i"], opts)
if (res.status === 0) { if (res.status === 0) {
console.log(chalk.green("Done!")) console.log(styleText("green", "Done!"))
} else { } else {
console.log(chalk.red("An error occurred above while installing dependencies.")) console.log(styleText("red", "An error occurred above while installing dependencies."))
} }
} }
@ -538,14 +553,14 @@ export async function handleRestore(argv) {
*/ */
export async function handleSync(argv) { export async function handleSync(argv) {
const contentFolder = resolveContentPath(argv.directory) const contentFolder = resolveContentPath(argv.directory)
console.log(chalk.bgGreen.black(`\n Quartz v${version} \n`)) console.log(`\n${styleText(["bgGreen", "black"], ` Quartz v${version} `)}\n`)
console.log("Backing up your content") console.log("Backing up your content")
if (argv.commit) { if (argv.commit) {
const contentStat = await fs.promises.lstat(contentFolder) const contentStat = await fs.promises.lstat(contentFolder)
if (contentStat.isSymbolicLink()) { if (contentStat.isSymbolicLink()) {
const linkTarg = await fs.promises.readlink(contentFolder) const linkTarg = await fs.promises.readlink(contentFolder)
console.log(chalk.yellow("Detected symlink, trying to dereference before committing")) console.log(styleText("yellow", "Detected symlink, trying to dereference before committing"))
// stash symlink file // stash symlink file
await stashContentFolder(contentFolder) await stashContentFolder(contentFolder)
@ -580,7 +595,7 @@ export async function handleSync(argv) {
try { try {
gitPull(ORIGIN_NAME, QUARTZ_SOURCE_BRANCH) gitPull(ORIGIN_NAME, QUARTZ_SOURCE_BRANCH)
} catch { } catch {
console.log(chalk.red("An error occurred above while pulling updates.")) console.log(styleText("red", "An error occurred above while pulling updates."))
await popContentFolder(contentFolder) await popContentFolder(contentFolder)
return return
} }
@ -593,10 +608,12 @@ export async function handleSync(argv) {
stdio: "inherit", stdio: "inherit",
}) })
if (res.status !== 0) { if (res.status !== 0) {
console.log(chalk.red(`An error occurred above while pushing to remote ${ORIGIN_NAME}.`)) console.log(
styleText("red", `An error occurred above while pushing to remote ${ORIGIN_NAME}.`),
)
return return
} }
} }
console.log(chalk.green("Done!")) console.log(styleText("green", "Done!"))
} }

View File

@ -1,5 +1,5 @@
import { isCancel, outro } from "@clack/prompts" import { isCancel, outro } from "@clack/prompts"
import chalk from "chalk" import { styleText } from "util"
import { contentCacheFolder } from "./constants.js" import { contentCacheFolder } from "./constants.js"
import { spawnSync } from "child_process" import { spawnSync } from "child_process"
import fs from "fs" import fs from "fs"
@ -14,7 +14,7 @@ export function escapePath(fp) {
export function exitIfCancel(val) { export function exitIfCancel(val) {
if (isCancel(val)) { if (isCancel(val)) {
outro(chalk.red("Exiting")) outro(styleText("red", "Exiting"))
process.exit(0) process.exit(0)
} else { } else {
return val return val
@ -36,9 +36,9 @@ export function gitPull(origin, branch) {
const flags = ["--no-rebase", "--autostash", "-s", "recursive", "-X", "ours", "--no-edit"] const flags = ["--no-rebase", "--autostash", "-s", "recursive", "-X", "ours", "--no-edit"]
const out = spawnSync("git", ["pull", ...flags, origin, branch], { stdio: "inherit" }) const out = spawnSync("git", ["pull", ...flags, origin, branch], { stdio: "inherit" })
if (out.stderr) { if (out.stderr) {
throw new Error(chalk.red(`Error while pulling updates: ${out.stderr}`)) throw new Error(styleText("red", `Error while pulling updates: ${out.stderr}`))
} else if (out.status !== 0) { } else if (out.status !== 0) {
throw new Error(chalk.red("Error while pulling updates")) throw new Error(styleText("red", "Error while pulling updates"))
} }
} }

View File

@ -1,7 +1,7 @@
import { FilePath, joinSegments } from "../../util/path" import { FilePath, joinSegments } from "../../util/path"
import { QuartzEmitterPlugin } from "../types" import { QuartzEmitterPlugin } from "../types"
import fs from "fs" import fs from "fs"
import chalk from "chalk" import { styleText } from "util"
export function extractDomainFromBaseUrl(baseUrl: string) { export function extractDomainFromBaseUrl(baseUrl: string) {
const url = new URL(`https://${baseUrl}`) const url = new URL(`https://${baseUrl}`)
@ -12,7 +12,9 @@ export const CNAME: QuartzEmitterPlugin = () => ({
name: "CNAME", name: "CNAME",
async emit({ argv, cfg }) { async emit({ argv, cfg }) {
if (!cfg.configuration.baseUrl) { if (!cfg.configuration.baseUrl) {
console.warn(chalk.yellow("CNAME emitter requires `baseUrl` to be set in your configuration")) console.warn(
styleText("yellow", "CNAME emitter requires `baseUrl` to be set in your configuration"),
)
return [] return []
} }
const path = joinSegments(argv.output, "CNAME") const path = joinSegments(argv.output, "CNAME")

View File

@ -8,7 +8,7 @@ import { FullPageLayout } from "../../cfg"
import { pathToRoot } from "../../util/path" import { pathToRoot } from "../../util/path"
import { defaultContentPageLayout, sharedPageComponents } from "../../../quartz.layout" import { defaultContentPageLayout, sharedPageComponents } from "../../../quartz.layout"
import { Content } from "../../components" import { Content } from "../../components"
import chalk from "chalk" import { styleText } from "util"
import { write } from "./helpers" import { write } from "./helpers"
import { BuildCtx } from "../../util/ctx" import { BuildCtx } from "../../util/ctx"
import { Node } from "unist" import { Node } from "unist"
@ -90,7 +90,8 @@ export const ContentPage: QuartzEmitterPlugin<Partial<FullPageLayout>> = (userOp
if (!containsIndex) { if (!containsIndex) {
console.log( console.log(
chalk.yellow( styleText(
"yellow",
`\nWarning: you seem to be missing an \`index.md\` home page file at the root of your \`${ctx.argv.directory}\` folder (\`${path.join(ctx.argv.directory, "index.md")} does not exist\`). This may cause errors when deploying.`, `\nWarning: you seem to be missing an \`index.md\` home page file at the root of your \`${ctx.argv.directory}\` folder (\`${path.join(ctx.argv.directory, "index.md")} does not exist\`). This may cause errors when deploying.`,
), ),
) )

View File

@ -11,7 +11,7 @@ import { write } from "./helpers"
import { BuildCtx } from "../../util/ctx" import { BuildCtx } from "../../util/ctx"
import { QuartzPluginData } from "../vfile" import { QuartzPluginData } from "../vfile"
import fs from "node:fs/promises" import fs from "node:fs/promises"
import chalk from "chalk" import { styleText } from "util"
const defaultOptions: SocialImageOptions = { const defaultOptions: SocialImageOptions = {
colorScheme: "lightMode", colorScheme: "lightMode",
@ -36,7 +36,7 @@ async function generateSocialImage(
const iconData = await fs.readFile(iconPath) const iconData = await fs.readFile(iconPath)
iconBase64 = `data:image/png;base64,${iconData.toString("base64")}` iconBase64 = `data:image/png;base64,${iconData.toString("base64")}`
} catch (err) { } catch (err) {
console.warn(chalk.yellow(`Warning: Could not find icon at ${iconPath}`)) console.warn(styleText("yellow", `Warning: Could not find icon at ${iconPath}`))
} }
const imageComponent = userOpts.imageStructure({ const imageComponent = userOpts.imageStructure({

View File

@ -1,8 +1,8 @@
import fs from "fs" import fs from "fs"
import { Repository } from "@napi-rs/simple-git" import { Repository } from "@napi-rs/simple-git"
import { QuartzTransformerPlugin } from "../types" import { QuartzTransformerPlugin } from "../types"
import chalk from "chalk"
import path from "path" import path from "path"
import { styleText } from "util"
export interface Options { export interface Options {
priority: ("frontmatter" | "git" | "filesystem")[] priority: ("frontmatter" | "git" | "filesystem")[]
@ -17,7 +17,8 @@ function coerceDate(fp: string, d: any): Date {
const invalidDate = isNaN(dt.getTime()) || dt.getTime() === 0 const invalidDate = isNaN(dt.getTime()) || dt.getTime() === 0
if (invalidDate && d !== undefined) { if (invalidDate && d !== undefined) {
console.log( console.log(
chalk.yellow( styleText(
"yellow",
`\nWarning: found invalid date "${d}" in \`${fp}\`. Supported formats: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date#date_time_string_format`, `\nWarning: found invalid date "${d}" in \`${fp}\`. Supported formats: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date#date_time_string_format`,
), ),
) )
@ -42,7 +43,10 @@ export const CreatedModifiedDate: QuartzTransformerPlugin<Partial<Options>> = (u
repositoryWorkdir = repo.workdir() ?? ctx.argv.directory repositoryWorkdir = repo.workdir() ?? ctx.argv.directory
} catch (e) { } catch (e) {
console.log( console.log(
chalk.yellow(`\nWarning: couldn't find git repository for ${ctx.argv.directory}`), styleText(
"yellow",
`\nWarning: couldn't find git repository for ${ctx.argv.directory}`,
),
) )
} }
} }
@ -69,7 +73,8 @@ export const CreatedModifiedDate: QuartzTransformerPlugin<Partial<Options>> = (u
modified ||= await repo.getFileLatestModifiedDateAsync(relativePath) modified ||= await repo.getFileLatestModifiedDateAsync(relativePath)
} catch { } catch {
console.log( console.log(
chalk.yellow( styleText(
"yellow",
`\nWarning: ${file.data.filePath!} isn't yet tracked by git, dates will be inaccurate`, `\nWarning: ${file.data.filePath!} isn't yet tracked by git, dates will be inaccurate`,
), ),
) )

View File

@ -4,7 +4,7 @@ import { ProcessedContent } from "../plugins/vfile"
import { QuartzLogger } from "../util/log" import { QuartzLogger } from "../util/log"
import { trace } from "../util/trace" import { trace } from "../util/trace"
import { BuildCtx } from "../util/ctx" import { BuildCtx } from "../util/ctx"
import chalk from "chalk" import { styleText } from "util"
export async function emitContent(ctx: BuildCtx, content: ProcessedContent[]) { export async function emitContent(ctx: BuildCtx, content: ProcessedContent[]) {
const { argv, cfg } = ctx const { argv, cfg } = ctx
@ -26,7 +26,7 @@ export async function emitContent(ctx: BuildCtx, content: ProcessedContent[]) {
if (ctx.argv.verbose) { if (ctx.argv.verbose) {
console.log(`[emit:${emitter.name}] ${file}`) console.log(`[emit:${emitter.name}] ${file}`)
} else { } else {
log.updateText(`${emitter.name} -> ${chalk.gray(file)}`) log.updateText(`${emitter.name} -> ${styleText("gray", file)}`)
} }
} }
} else { } else {
@ -36,7 +36,7 @@ export async function emitContent(ctx: BuildCtx, content: ProcessedContent[]) {
if (ctx.argv.verbose) { if (ctx.argv.verbose) {
console.log(`[emit:${emitter.name}] ${file}`) console.log(`[emit:${emitter.name}] ${file}`)
} else { } else {
log.updateText(`${emitter.name} -> ${chalk.gray(file)}`) log.updateText(`${emitter.name} -> ${styleText("gray", file)}`)
} }
} }
} }

View File

@ -13,7 +13,7 @@ import workerpool, { Promise as WorkerPromise } from "workerpool"
import { QuartzLogger } from "../util/log" import { QuartzLogger } from "../util/log"
import { trace } from "../util/trace" import { trace } from "../util/trace"
import { BuildCtx, WorkerSerializableBuildCtx } from "../util/ctx" import { BuildCtx, WorkerSerializableBuildCtx } from "../util/ctx"
import chalk from "chalk" import { styleText } from "util"
export type QuartzMdProcessor = Processor<MDRoot, MDRoot, MDRoot> export type QuartzMdProcessor = Processor<MDRoot, MDRoot, MDRoot>
export type QuartzHtmlProcessor = Processor<undefined, MDRoot, HTMLRoot> export type QuartzHtmlProcessor = Processor<undefined, MDRoot, HTMLRoot>
@ -194,7 +194,7 @@ export async function parseMarkdown(ctx: BuildCtx, fps: FilePath[]): Promise<Pro
textToMarkdownPromises.map(async (promise) => { textToMarkdownPromises.map(async (promise) => {
const result = await promise const result = await promise
processedFiles += result.length processedFiles += result.length
log.updateText(`text->markdown ${chalk.gray(`${processedFiles}/${fps.length}`)}`) log.updateText(`text->markdown ${styleText("gray", `${processedFiles}/${fps.length}`)}`)
return result return result
}), }),
).catch(errorHandler) ).catch(errorHandler)
@ -208,7 +208,7 @@ export async function parseMarkdown(ctx: BuildCtx, fps: FilePath[]): Promise<Pro
markdownToHtmlPromises.map(async (promise) => { markdownToHtmlPromises.map(async (promise) => {
const result = await promise const result = await promise
processedFiles += result.length processedFiles += result.length
log.updateText(`markdown->html ${chalk.gray(`${processedFiles}/${fps.length}`)}`) log.updateText(`markdown->html ${styleText("gray", `${processedFiles}/${fps.length}`)}`)
return result return result
}), }),
).catch(errorHandler) ).catch(errorHandler)

View File

@ -9,7 +9,7 @@ import { QUARTZ } from "./path"
import { formatDate, getDate } from "../components/Date" import { formatDate, getDate } from "../components/Date"
import readingTime from "reading-time" import readingTime from "reading-time"
import { i18n } from "../i18n" import { i18n } from "../i18n"
import chalk from "chalk" import { styleText } from "util"
const defaultHeaderWeight = [700] const defaultHeaderWeight = [700]
const defaultBodyWeight = [400] const defaultBodyWeight = [400]
@ -100,7 +100,8 @@ export async function fetchTtf(
if (!match) { if (!match) {
console.log( console.log(
chalk.yellow( styleText(
"yellow",
`\nWarning: Failed to fetch font ${rawFontName} with weight ${weight}, got ${cssResponse.statusText}`, `\nWarning: Failed to fetch font ${rawFontName} with weight ${weight}, got ${cssResponse.statusText}`,
), ),
) )

View File

@ -1,5 +1,5 @@
import chalk from "chalk"
import pretty from "pretty-time" import pretty from "pretty-time"
import { styleText } from "util"
export class PerfTimer { export class PerfTimer {
evts: { [key: string]: [number, number] } evts: { [key: string]: [number, number] }
@ -14,6 +14,6 @@ export class PerfTimer {
} }
timeSince(evtName?: string): string { timeSince(evtName?: string): string {
return chalk.yellow(pretty(process.hrtime(this.evts[evtName ?? "start"]))) return styleText("yellow", pretty(process.hrtime(this.evts[evtName ?? "start"])))
} }
} }

View File

@ -1,4 +1,4 @@
import chalk from "chalk" import { styleText } from "util"
import process from "process" import process from "process"
import { isMainThread } from "workerpool" import { isMainThread } from "workerpool"
@ -11,9 +11,9 @@ export function trace(msg: string, err: Error) {
lines.push("") lines.push("")
lines.push( lines.push(
"\n" + "\n" +
chalk.bgRed.black.bold(" ERROR ") + styleText(["bgRed", "black", "bold"], " ERROR ") +
"\n\n" + "\n\n" +
chalk.red(` ${msg}`) + styleText("red", ` ${msg}`) +
(err.message.length > 0 ? `: ${err.message}` : ""), (err.message.length > 0 ? `: ${err.message}` : ""),
) )