| | |
| | | import { StaticResources } from "../resources" |
| | | import { FilePath, ServerSlug } from "../path" |
| | | import { BuildCtx } from "../ctx" |
| | | 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: [], |
| | | additionalHead: [], |
| | | } |
| | | |
| | | for (const transformer of ctx.cfg.plugins.transformers) { |
| | | 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 |
| | |
| | | declare module "vfile" { |
| | | // inserted in processors.ts |
| | | interface DataMap { |
| | | slug: ServerSlug |
| | | slug: FullSlug |
| | | filePath: FilePath |
| | | relativePath: FilePath |
| | | } |
| | | } |