quartz-research-note/quartz/plugins/index.ts

53 lines
1.4 KiB
TypeScript
Raw Normal View History

import { StaticResources } from "../util/resources"
import { FilePath, FullSlug } from "../util/path"
import { BuildCtx } from "../util/ctx"
2023-07-01 07:03:01 +00:00
2023-07-24 07:04:01 +00:00
export function getStaticResourcesFromPlugins(ctx: BuildCtx) {
2023-05-30 15:02:20 +00:00
const staticResources: StaticResources = {
css: [],
js: [],
}
2023-07-24 07:04:01 +00:00
for (const transformer of ctx.cfg.plugins.transformers) {
const res = transformer.externalResources ? transformer.externalResources(ctx) : {}
2023-05-30 15:02:20 +00:00
if (res?.js) {
staticResources.js.push(...res.js)
2023-05-30 15:02:20 +00:00
}
if (res?.css) {
staticResources.css.push(...res.css)
2023-05-30 15:02:20 +00:00
}
}
// 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))
`,
})
}
2023-05-30 15:02:20 +00:00
return staticResources
}
2023-07-23 00:27:41 +00:00
export * from "./transformers"
export * from "./filters"
export * from "./emitters"
2023-05-30 15:02:20 +00:00
2023-07-23 00:27:41 +00:00
declare module "vfile" {
2023-05-30 15:02:20 +00:00
// inserted in processors.ts
interface DataMap {
slug: FullSlug
2023-07-13 07:19:35 +00:00
filePath: FilePath
relativePath: FilePath
2023-05-30 15:02:20 +00:00
}
}