| | |
| | | import { Features, transform } from "lightningcss" |
| | | import { transform as transpile } from "esbuild" |
| | | import { write } from "./helpers" |
| | | import DepGraph from "../../depgraph" |
| | | |
| | | type ComponentResources = { |
| | | css: string[] |
| | |
| | | loadTime: "afterDOMReady", |
| | | contentType: "inline", |
| | | script: ` |
| | | const socket = new WebSocket('${wsUrl}') |
| | | socket.addEventListener('message', () => document.location.reload()) |
| | | `, |
| | | const socket = new WebSocket('${wsUrl}') |
| | | // reload(true) ensures resources like images and scripts are fetched again in firefox |
| | | socket.addEventListener('message', () => document.location.reload(true)) |
| | | `, |
| | | }) |
| | | } |
| | | } |
| | |
| | | getQuartzComponents() { |
| | | return [] |
| | | }, |
| | | async getDependencyGraph(ctx, content, _resources) { |
| | | // This emitter adds static resources to the `resources` parameter. One |
| | | // important resource this emitter adds is the code to start a websocket |
| | | // connection and listen to rebuild messages, which triggers a page reload. |
| | | // The resources parameter with the reload logic is later used by the |
| | | // ContentPage emitter while creating the final html page. In order for |
| | | // the reload logic to be included, and so for partial rebuilds to work, |
| | | // we need to run this emitter for all markdown files. |
| | | const graph = new DepGraph<FilePath>() |
| | | |
| | | for (const [_tree, file] of content) { |
| | | const sourcePath = file.data.filePath! |
| | | const slug = file.data.slug! |
| | | graph.addEdge(sourcePath, joinSegments(ctx.argv.output, slug + ".html") as FilePath) |
| | | } |
| | | |
| | | return graph |
| | | }, |
| | | async emit(ctx, _content, resources): Promise<FilePath[]> { |
| | | const promises: Promise<FilePath>[] = [] |
| | | const cfg = ctx.cfg.configuration |