feat: support emitters defining external resources, emit link from contentindex directly

This commit is contained in:
Jacky Zhao
2025-03-05 18:16:17 -08:00
parent 5a39719898
commit 5b13ff2199
8 changed files with 34 additions and 8 deletions

View File

@ -182,6 +182,20 @@ export const ContentIndex: QuartzEmitterPlugin<Partial<Options>> = (opts) => {
return emitted
},
externalResources: (ctx) => {
if (opts?.enableRSS) {
return {
additionalHead: [
<link
rel="alternate"
type="application/rss+xml"
title="RSS Feed"
href={`https://${ctx.cfg.configuration.baseUrl}/index.xml`}
/>,
],
}
}
},
getQuartzComponents: () => [],
}
}

View File

@ -6,9 +6,10 @@ 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)
@ -16,6 +17,9 @@ export function getStaticResourcesFromPlugins(ctx: BuildCtx) {
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

View File

@ -59,8 +59,6 @@ export const Latex: QuartzTransformerPlugin<Partial<Options>> = (opts) => {
},
],
}
default:
return { css: [], js: [] }
}
},
}

View File

@ -13,6 +13,7 @@ export interface PluginTypes {
}
type OptionType = object | undefined
type ExternalResourcesFn = (ctx: BuildCtx) => Partial<StaticResources> | undefined
export type QuartzTransformerPlugin<Options extends OptionType = undefined> = (
opts?: Options,
) => QuartzTransformerPluginInstance
@ -21,7 +22,7 @@ export type QuartzTransformerPluginInstance = {
textTransform?: (ctx: BuildCtx, src: string) => string
markdownPlugins?: (ctx: BuildCtx) => PluggableList
htmlPlugins?: (ctx: BuildCtx) => PluggableList
externalResources?: (ctx: BuildCtx) => Partial<StaticResources>
externalResources?: ExternalResourcesFn
}
export type QuartzFilterPlugin<Options extends OptionType = undefined> = (
@ -44,4 +45,5 @@ export type QuartzEmitterPluginInstance = {
content: ProcessedContent[],
resources: StaticResources,
): Promise<DepGraph<FilePath>>
externalResources?: ExternalResourcesFn
}