From 6562fb93206453ec9b4c314edb00a204407e1823 Mon Sep 17 00:00:00 2001 From: saberzero1 Date: Sun, 22 Feb 2026 23:42:15 +0100 Subject: [PATCH] feat: support array categories in plugin manifests Plugins like note-properties export both transformer and component functionality. Allow PluginManifest.category to be a single value or an array, with config-loader resolving to the first processing category (transformer/filter/emitter/pageType) for dispatch. --- quartz/plugins/loader/config-loader.ts | 13 +++++++++++-- quartz/plugins/loader/types.ts | 2 +- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/quartz/plugins/loader/config-loader.ts b/quartz/plugins/loader/config-loader.ts index a8842be58..1623f747d 100644 --- a/quartz/plugins/loader/config-loader.ts +++ b/quartz/plugins/loader/config-loader.ts @@ -258,8 +258,17 @@ export async function loadQuartzConfig(): Promise { for (const entry of enabledEntries) { const manifest = manifests.get(entry.source) const category = manifest?.category + // Resolve processing category: for array categories (e.g. ["transformer", "component"]), + // find the first processing category. "component" is handled separately via loadComponentsFromPackage. + const processingCategories = ["transformer", "filter", "emitter", "pageType"] as const + let resolvedCategory: string | undefined + if (Array.isArray(category)) { + resolvedCategory = category.find((c) => (processingCategories as readonly string[]).includes(c)) + } else { + resolvedCategory = category + } - switch (category) { + switch (resolvedCategory) { case "transformer": transformers.push({ entry, manifest }) break @@ -358,7 +367,7 @@ export async function loadQuartzConfig(): Promise { // Import built-in plugins const builtinPlugins = await import("../index") - const builtinTransformers = [builtinPlugins.FrontMatter()] + const builtinTransformers: unknown[] = [] const builtinEmitters = [ builtinPlugins.ComponentResources(), builtinPlugins.Assets(), diff --git a/quartz/plugins/loader/types.ts b/quartz/plugins/loader/types.ts index 012616282..c321fc70b 100644 --- a/quartz/plugins/loader/types.ts +++ b/quartz/plugins/loader/types.ts @@ -49,7 +49,7 @@ export interface PluginManifest { author?: string homepage?: string keywords?: string[] - category?: PluginCategory + category?: PluginCategory | PluginCategory[] quartzVersion?: string /** Plugin sources this plugin depends on (e.g., "github:quartz-community/crawl-links") */ dependencies?: string[]