Files
Tiny-Lab/Local/storage/thlab-notes/worker/quartz/plugins/config.ts
T
2026-07-11 17:08:37 +00:00

52 lines
1.4 KiB
TypeScript

import {
QuartzTransformerPluginInstance,
QuartzFilterPluginInstance,
QuartzEmitterPluginInstance,
PageTypePluginEntry,
} from "./types"
import { LoadedPlugin } from "./loader/types"
export interface PluginConfiguration {
transformers: (QuartzTransformerPluginInstance | LoadedPlugin)[]
filters: (QuartzFilterPluginInstance | LoadedPlugin)[]
emitters: (QuartzEmitterPluginInstance | LoadedPlugin)[]
pageTypes?: (PageTypePluginEntry | LoadedPlugin)[]
}
export function isLoadedPlugin(plugin: unknown): plugin is LoadedPlugin {
return (
typeof plugin === "object" &&
plugin !== null &&
"plugin" in plugin &&
"manifest" in plugin &&
"type" in plugin &&
typeof (plugin as LoadedPlugin).plugin === "function"
)
}
export function getPluginInstance<T extends object | undefined>(
plugin:
| QuartzTransformerPluginInstance
| QuartzFilterPluginInstance
| QuartzEmitterPluginInstance
| PageTypePluginEntry
| LoadedPlugin,
options?: T,
):
| QuartzTransformerPluginInstance
| QuartzFilterPluginInstance
| QuartzEmitterPluginInstance
| PageTypePluginEntry {
if (isLoadedPlugin(plugin)) {
const factory = plugin.plugin as (
opts?: T,
) =>
| QuartzTransformerPluginInstance
| QuartzFilterPluginInstance
| QuartzEmitterPluginInstance
| PageTypePluginEntry
return factory(options)
}
return plugin
}