import { resolveRelative, simplifySlug } from "../../util/path" import { QuartzEmitterPlugin } from "../types" import { write } from "./helpers" import { BuildCtx } from "../../util/ctx" import { VFile } from "vfile" async function* processFile(ctx: BuildCtx, file: VFile) { const ogSlug = simplifySlug(file.data.slug!) for (const slug of file.data.aliases ?? []) { const redirUrl = resolveRelative(slug, file.data.slug!) yield write({ ctx, content: ` ${ogSlug} `, slug, ext: ".html", }) } } export const AliasRedirects: QuartzEmitterPlugin = () => ({ name: "AliasRedirects", async *emit(ctx, content) { for (const [_tree, file] of content) { yield* processFile(ctx, file) } }, async *partialEmit(ctx, _content, _resources, changeEvents) { for (const changeEvent of changeEvents) { if (!changeEvent.file) continue if (changeEvent.type === "add" || changeEvent.type === "change") { // add new ones if this file still exists yield* processFile(ctx, changeEvent.file) } } }, })