From 40a72eba4455b8ca5f662d660b028d90deff7cd1 Mon Sep 17 00:00:00 2001 From: Jacky Zhao Date: Sun, 16 Mar 2025 13:46:16 -0700 Subject: [PATCH] update docs --- docs/advanced/making plugins.md | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/docs/advanced/making plugins.md b/docs/advanced/making plugins.md index b65bd374e..f5cb19901 100644 --- a/docs/advanced/making plugins.md +++ b/docs/advanced/making plugins.md @@ -221,12 +221,26 @@ export type QuartzEmitterPlugin = ( export type QuartzEmitterPluginInstance = { name: string - emit(ctx: BuildCtx, content: ProcessedContent[], resources: StaticResources): Promise + emit( + ctx: BuildCtx, + content: ProcessedContent[], + resources: StaticResources, + ): Promise | AsyncGenerator + partialEmit?( + ctx: BuildCtx, + content: ProcessedContent[], + resources: StaticResources, + changeEvents: ChangeEvent[], + ): Promise | AsyncGenerator | null getQuartzComponents(ctx: BuildCtx): QuartzComponent[] } ``` -An emitter plugin must define a `name` field, an `emit` function, and a `getQuartzComponents` function. `emit` is responsible for looking at all the parsed and filtered content and then appropriately creating files and returning a list of paths to files the plugin created. +An emitter plugin must define a `name` field, an `emit` function, and a `getQuartzComponents` function. It can optionally implement a `partialEmit` function for incremental builds. + +- `emit` is responsible for looking at all the parsed and filtered content and then appropriately creating files and returning a list of paths to files the plugin created. +- `partialEmit` is an optional function that enables incremental builds. It receives information about which files have changed (`changeEvents`) and can selectively rebuild only the necessary files. This is useful for optimizing build times in development mode. If `partialEmit` is undefined, it will default to the `emit` function. +- `getQuartzComponents` declares which Quartz components the emitter uses to construct its pages. Creating new files can be done via regular Node [fs module](https://nodejs.org/api/fs.html) (i.e. `fs.cp` or `fs.writeFile`) or via the `write` function in `quartz/plugins/emitters/helpers.ts` if you are creating files that contain text. `write` has the following signature: