improve error handling while serving
This commit is contained in:
parent
88e040c290
commit
5d8b034af1
3
content/build.md
Normal file
3
content/build.md
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
---
|
||||||
|
title: "Building your Quartz"
|
||||||
|
---
|
@ -2,7 +2,6 @@
|
|||||||
draft: true
|
draft: true
|
||||||
---
|
---
|
||||||
|
|
||||||
- typography fixes
|
|
||||||
- parse tags in content
|
- parse tags in content
|
||||||
- breadcrumbs component
|
- breadcrumbs component
|
||||||
- filetree component
|
- filetree component
|
||||||
|
@ -16,10 +16,12 @@ npm i
|
|||||||
npx quartz create
|
npx quartz create
|
||||||
```
|
```
|
||||||
|
|
||||||
This will guide you through initializing your Quartz with content and previewing it locally.
|
This will guide you through initializing your Quartz with content.
|
||||||
|
|
||||||
When you're ready, you can edit `quartz.config.ts` to customize and configure Quartz more. Read the [[configuration]] page for more information on what each field in the configuration does.
|
When you're ready, you can edit `quartz.config.ts` to customize and configure Quartz more. Read the [[configuration]] page for more information on what each field in the configuration does.
|
||||||
|
|
||||||
|
Then, when you're ready, see how to [[build]] and [[hosting|host]] Quartz.
|
||||||
|
|
||||||
## 🔧 Features
|
## 🔧 Features
|
||||||
|
|
||||||
- [[full-text search|Full-text search]], [[graph view]], [[backlinks]], [[Latex]], [[syntax highlighting]], [[popover previews]], and many more right out of the box
|
- [[full-text search|Full-text search]], [[graph view]], [[backlinks]], [[Latex]], [[syntax highlighting]], [[popover previews]], and many more right out of the box
|
||||||
|
@ -23,7 +23,7 @@ interface Argv {
|
|||||||
port: number
|
port: number
|
||||||
}
|
}
|
||||||
|
|
||||||
export default async function buildQuartz(argv: Argv, version: string) {
|
async function buildQuartz(argv: Argv, version: string) {
|
||||||
console.log(chalk.bgGreen.black(`\n Quartz v${version} \n`))
|
console.log(chalk.bgGreen.black(`\n Quartz v${version} \n`))
|
||||||
const perf = new PerfTimer()
|
const perf = new PerfTimer()
|
||||||
const output = argv.output
|
const output = argv.output
|
||||||
@ -82,23 +82,29 @@ export default async function buildQuartz(argv: Argv, version: string) {
|
|||||||
if (!ignored(fp)) {
|
if (!ignored(fp)) {
|
||||||
console.log(chalk.yellow(`Detected change in ${fp}, rebuilding...`))
|
console.log(chalk.yellow(`Detected change in ${fp}, rebuilding...`))
|
||||||
const fullPath = `${argv.directory}${path.sep}${fp}` as FilePath
|
const fullPath = `${argv.directory}${path.sep}${fp}` as FilePath
|
||||||
if (action === "add" || action === "change") {
|
|
||||||
const [parsedContent] = await parseMarkdown(
|
try {
|
||||||
cfg.plugins.transformers,
|
if (action === "add" || action === "change") {
|
||||||
argv.directory,
|
const [parsedContent] = await parseMarkdown(
|
||||||
[fullPath],
|
cfg.plugins.transformers,
|
||||||
argv.verbose,
|
argv.directory,
|
||||||
)
|
[fullPath],
|
||||||
contentMap.set(fullPath, parsedContent)
|
argv.verbose,
|
||||||
} else if (action === "unlink") {
|
)
|
||||||
contentMap.delete(fullPath)
|
contentMap.set(fullPath, parsedContent)
|
||||||
|
} else if (action === "unlink") {
|
||||||
|
contentMap.delete(fullPath)
|
||||||
|
}
|
||||||
|
|
||||||
|
await rimraf(output)
|
||||||
|
const parsedFiles = [...contentMap.values()]
|
||||||
|
const filteredContent = filterContent(cfg.plugins.filters, parsedFiles, argv.verbose)
|
||||||
|
await emitContent(argv.directory, output, cfg, filteredContent, argv.serve, argv.verbose)
|
||||||
|
console.log(chalk.green(`Done rebuilding in ${perf.timeSince("rebuild")}`))
|
||||||
|
} catch {
|
||||||
|
console.log(chalk.yellow(`Rebuild failed. Waiting on a change to fix the error...`))
|
||||||
}
|
}
|
||||||
|
|
||||||
await rimraf(output)
|
|
||||||
const parsedFiles = [...contentMap.values()]
|
|
||||||
const filteredContent = filterContent(cfg.plugins.filters, parsedFiles, argv.verbose)
|
|
||||||
await emitContent(argv.directory, output, cfg, filteredContent, argv.serve, argv.verbose)
|
|
||||||
console.log(chalk.green(`Done rebuilding in ${perf.timeSince("rebuild")}`))
|
|
||||||
connections.forEach((conn) => conn.send("rebuild"))
|
connections.forEach((conn) => conn.send("rebuild"))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -133,3 +139,12 @@ export default async function buildQuartz(argv: Argv, version: string) {
|
|||||||
console.log("hint: exit with ctrl+c")
|
console.log("hint: exit with ctrl+c")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export default async (argv: Argv, version: string) => {
|
||||||
|
try {
|
||||||
|
await buildQuartz(argv, version)
|
||||||
|
} catch {
|
||||||
|
console.log(chalk.red("\nExiting Quartz due to a fatal error"))
|
||||||
|
process.exit(1)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -17,10 +17,12 @@ export class QuartzLogger {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
success(text: string) {
|
end(text?: string) {
|
||||||
if (!this.verbose) {
|
if (!this.verbose) {
|
||||||
this.spinner!.stop(true)
|
this.spinner!.stop(true)
|
||||||
}
|
}
|
||||||
console.log(text)
|
if (text) {
|
||||||
|
console.log(text)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -143,7 +143,7 @@ export async function emitContent(
|
|||||||
}
|
}
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
trace(`Failed to emit from plugin \`${emitter.name}\``, err as Error)
|
trace(`Failed to emit from plugin \`${emitter.name}\``, err as Error)
|
||||||
process.exit(1)
|
throw err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -173,5 +173,5 @@ export async function emitContent(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
log.success(`Emitted ${emittedFiles} files to \`${output}\` in ${perf.timeSince()}`)
|
log.end(`Emitted ${emittedFiles} files to \`${output}\` in ${perf.timeSince()}`)
|
||||||
}
|
}
|
||||||
|
@ -107,7 +107,7 @@ export function createFileParser(
|
|||||||
}
|
}
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
trace(`\nFailed to process \`${fp}\``, err as Error)
|
trace(`\nFailed to process \`${fp}\``, err as Error)
|
||||||
process.exit(1)
|
throw err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -135,9 +135,14 @@ export async function parseMarkdown(
|
|||||||
let res: ProcessedContent[] = []
|
let res: ProcessedContent[] = []
|
||||||
log.start(`Parsing input files using ${concurrency} threads`)
|
log.start(`Parsing input files using ${concurrency} threads`)
|
||||||
if (concurrency === 1) {
|
if (concurrency === 1) {
|
||||||
const processor = createProcessor(transformers)
|
try {
|
||||||
const parse = createFileParser(transformers, baseDir, fps, allSlugs, verbose)
|
const processor = createProcessor(transformers)
|
||||||
res = await parse(processor)
|
const parse = createFileParser(transformers, baseDir, fps, allSlugs, verbose)
|
||||||
|
res = await parse(processor)
|
||||||
|
} catch (error) {
|
||||||
|
log.end()
|
||||||
|
throw error
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
await transpileWorkerScript()
|
await transpileWorkerScript()
|
||||||
const pool = workerpool.pool("./quartz/bootstrap-worker.mjs", {
|
const pool = workerpool.pool("./quartz/bootstrap-worker.mjs", {
|
||||||
@ -156,6 +161,6 @@ export async function parseMarkdown(
|
|||||||
await pool.terminate()
|
await pool.terminate()
|
||||||
}
|
}
|
||||||
|
|
||||||
log.success(`Parsed ${res.length} Markdown files in ${perf.timeSince()}`)
|
log.end(`Parsed ${res.length} Markdown files in ${perf.timeSince()}`)
|
||||||
return res
|
return res
|
||||||
}
|
}
|
||||||
|
@ -5,7 +5,9 @@ export function trace(msg: string, err: Error) {
|
|||||||
const stack = err.stack
|
const stack = err.stack
|
||||||
console.log()
|
console.log()
|
||||||
console.log(
|
console.log(
|
||||||
chalk.bgRed.white.bold(" ERROR ") +
|
"\n" +
|
||||||
|
chalk.bgRed.black.bold(" ERROR ") +
|
||||||
|
"\n" +
|
||||||
chalk.red(` ${msg}`) +
|
chalk.red(` ${msg}`) +
|
||||||
(err.message.length > 0 ? `: ${err.message}` : ""),
|
(err.message.length > 0 ? `: ${err.message}` : ""),
|
||||||
)
|
)
|
||||||
|
Loading…
Reference in New Issue
Block a user