a7d91f05f9
- Removed frontmatter from description plugin's vfile augmentation to avoid conflicting DataMap declarations (TS2717/TS2687) - Aligned frontmatter type in index.ts with note-properties plugin declaration - Updated quartz.lock.json for description plugin
100 lines
2.8 KiB
TypeScript
100 lines
2.8 KiB
TypeScript
import { StaticResources } from "../util/resources"
|
|
import { FilePath, FullSlug, SimpleSlug } from "../util/path"
|
|
import { BuildCtx } from "../util/ctx"
|
|
import { Root as HtmlRoot } from "hast"
|
|
import { Element } from "hast"
|
|
|
|
export function getStaticResourcesFromPlugins(ctx: BuildCtx) {
|
|
const staticResources: StaticResources = {
|
|
css: [],
|
|
js: [],
|
|
additionalHead: [],
|
|
}
|
|
|
|
for (const transformer of [...ctx.cfg.plugins.transformers, ...ctx.cfg.plugins.emitters]) {
|
|
const res = transformer.externalResources ? transformer.externalResources(ctx) : {}
|
|
if (res?.js) {
|
|
staticResources.js.push(...res.js)
|
|
}
|
|
if (res?.css) {
|
|
staticResources.css.push(...res.css)
|
|
}
|
|
if (res?.additionalHead) {
|
|
staticResources.additionalHead.push(...res.additionalHead)
|
|
}
|
|
}
|
|
|
|
// if serving locally, listen for rebuilds and reload the page
|
|
if (ctx.argv.serve) {
|
|
const wsUrl = ctx.argv.remoteDevHost
|
|
? `wss://${ctx.argv.remoteDevHost}:${ctx.argv.wsPort}`
|
|
: `ws://localhost:${ctx.argv.wsPort}`
|
|
|
|
staticResources.js.push({
|
|
loadTime: "afterDOMReady",
|
|
contentType: "inline",
|
|
script: `
|
|
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))
|
|
`,
|
|
})
|
|
}
|
|
|
|
return staticResources
|
|
}
|
|
|
|
export * from "./transformers"
|
|
export * from "./filters"
|
|
export * from "./emitters"
|
|
export * from "./types"
|
|
export * from "./config"
|
|
export * as PageTypes from "./pageTypes"
|
|
export * as PluginLoader from "./loader"
|
|
|
|
declare module "vfile" {
|
|
// inserted in processors.ts
|
|
interface DataMap {
|
|
slug: FullSlug
|
|
filePath: FilePath
|
|
relativePath: FilePath
|
|
// from description transformer
|
|
description: string
|
|
text: string
|
|
// from crawl-links transformer
|
|
links: SimpleSlug[]
|
|
// from table-of-contents transformer
|
|
toc: { depth: number; text: string; slug: string }[]
|
|
collapseToc: boolean
|
|
// from obsidian-flavored-markdown transformer
|
|
blocks: Record<string, Element>
|
|
htmlAst: HtmlRoot
|
|
hasMermaidDiagram: boolean | undefined
|
|
// from frontmatter transformer (e.g. note-properties)
|
|
frontmatter: { [key: string]: unknown } & {
|
|
title: string
|
|
} & Partial<{
|
|
tags: string[]
|
|
aliases: string[]
|
|
modified: string
|
|
created: string
|
|
published: string
|
|
description: string
|
|
socialDescription: string
|
|
publish: boolean | string
|
|
draft: boolean | string
|
|
lang: string
|
|
enableToc: string
|
|
cssclasses: string[]
|
|
socialImage: string
|
|
comments: boolean | string
|
|
}>
|
|
// from created-modified-date transformer
|
|
dates: {
|
|
created: Date
|
|
modified: Date
|
|
published: Date
|
|
}
|
|
}
|
|
}
|