import { FilePath, joinSegments, resolveRelative, simplifySlug } from "../../util/path" import { QuartzEmitterPlugin } from "../types" import { write } from "./helpers" import DepGraph from "../../depgraph" import { getAliasSlugs } from "../transformers/frontmatter" export const AliasRedirects: QuartzEmitterPlugin = () => ({ name: "AliasRedirects", async getDependencyGraph(ctx, content, _resources) { const graph = new DepGraph() const { argv } = ctx for (const [_tree, file] of content) { for (const slug of getAliasSlugs(file.data.frontmatter?.aliases ?? [], argv, file)) { graph.addEdge(file.data.filePath!, joinSegments(argv.output, slug + ".html") as FilePath) } } return graph }, async *emit(ctx, content, _resources) { for (const [_tree, file] of content) { 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", }) } } }, })