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