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 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 } } }