import { StaticResources } from "../util/resources" import { FilePath, FullSlug } from "../util/path" import { BuildCtx } from "../util/ctx" export function getStaticResourcesFromPlugins(ctx: BuildCtx) { const staticResources: StaticResources = { css: [], js: [], } for (const transformer of ctx.cfg.plugins.transformers) { const res = transformer.externalResources ? transformer.externalResources(ctx) : {} if (res?.js) { staticResources.js.push(...res.js) } if (res?.css) { staticResources.css.push(...res.css) } } // 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" declare module "vfile" { // inserted in processors.ts interface DataMap { slug: FullSlug filePath: FilePath relativePath: FilePath } }