Compute the base path from cfg.baseUrl and set it as a data attribute on
<body> so client-side scripts can resolve links correctly when Quartz is
deployed to a subdirectory (e.g., user.github.io/repository).
Replace per-plugin npm install with a single aggregated npm install
in the quartz root. Plugins declaring requiresInstall in their quartz
manifest now have their peerDependencies collected and installed
together, letting npm resolve compatible versions across plugins.
Remove dependencies that are only used by plugins and already bundled
into their dist files via devDependencies/tsup. This reduces the
install footprint by ~136 packages.
Removed: flexsearch, github-slugger (kept - needed by @quartz-community/utils),
gray-matter, hast-util-to-html, hast-util-to-string, is-absolute-url,
js-yaml, mdast-util-find-and-replace, mdast-util-to-hast,
mdast-util-to-string, reading-time, rehype-autolink-headings,
rehype-citation, rehype-katex, rehype-mathjax, rehype-pretty-code,
rehype-raw, rehype-slug, remark-breaks, remark-frontmatter,
remark-gfm, remark-math, remark-smartypants, satori, toml,
@types/js-yaml.
Kept native-binary deps: sharp, @napi-rs/simple-git,
@myriaddreamin/rehype-typst (cannot be bundled by plugins).
Add logOverride to the main esbuild build context to silence three
warning types that originate from upstream third-party code bundled
inside plugin dist files:
- direct-eval: gray-matter's JS frontmatter engine in note-properties
- equals-negative-zero: webidl-conversions in citations
- duplicate-object-key: BibTeX month mapping in citations
- validatePluginExternals() scans plugin dist/ for unbundled imports
and warns when non-allowlisted externals are detected
- installPluginDepsIfNeeded() runs npm install for plugins with
quartz.requiresInstall flag (for native deps like sharp)
- Added requiresInstall field to PluginManifest type