From 6ba9c7c02aa75e58849f334514719e31be1cf522 Mon Sep 17 00:00:00 2001
From: dralagen <dralagen@dralagen.fr>
Date: Tue, 29 Apr 2025 05:00:28 +0000
Subject: [PATCH] doc(favicon): add documentation of favicon plugin (#1948)

---
 docs/plugins/Favicon.md            |   19 +++++++++++++++++++
 quartz/plugins/emitters/favicon.ts |   14 ++++++++++----
 2 files changed, 29 insertions(+), 4 deletions(-)

diff --git a/docs/plugins/Favicon.md b/docs/plugins/Favicon.md
new file mode 100644
index 0000000..a6d4d4e
--- /dev/null
+++ b/docs/plugins/Favicon.md
@@ -0,0 +1,19 @@
+---
+title: Favicon
+tags:
+  - plugin/emitter
+---
+
+This plugin emits a `favicon.ico` into the `public` folder. It creates the favicon from `icon.png` located in the `quartz/static` folder.
+The plugin resizes `icon.png` to 48x48px to make it as small as possible.
+
+> [!note]
+> For information on how to add, remove or configure plugins, see the [[configuration#Plugins|Configuration]] page.
+
+This plugin has no configuration options.
+
+## API
+
+- Category: Emitter
+- Function name: `Plugin.Favicon()`.
+- Source: [`quartz/plugins/emitters/favicon.ts`](https://github.com/jackyzha0/quartz/blob/v4/quartz/plugins/emitters/favicon.ts).
diff --git a/quartz/plugins/emitters/favicon.ts b/quartz/plugins/emitters/favicon.ts
index c58322c..b05f930 100644
--- a/quartz/plugins/emitters/favicon.ts
+++ b/quartz/plugins/emitters/favicon.ts
@@ -1,16 +1,22 @@
 import sharp from "sharp"
-import { joinSegments, QUARTZ, FilePath } from "../../util/path"
+import { joinSegments, QUARTZ, FullSlug } from "../../util/path"
 import { QuartzEmitterPlugin } from "../types"
+import { write } from "./helpers"
+import { BuildCtx } from "../../util/ctx"
 
 export const Favicon: QuartzEmitterPlugin = () => ({
   name: "Favicon",
   async *emit({ argv }) {
     const iconPath = joinSegments(QUARTZ, "static", "icon.png")
-    const dest = joinSegments(argv.output, "favicon.ico") as FilePath
 
-    await sharp(iconPath).resize(48, 48).toFormat("png").toFile(dest)
+    const faviconContent = sharp(iconPath).resize(48, 48).toFormat("png")
 
-    yield dest
+    yield write({
+      ctx: { argv } as BuildCtx,
+      slug: "favicon" as FullSlug,
+      ext: ".ico",
+      content: faviconContent,
+    })
   },
   async *partialEmit() {},
 })

--
Gitblit v1.10.0