| | |
| | | interface Options { |
| | | enableSiteMap: boolean |
| | | enableRSS: boolean |
| | | includeEmptyFiles: boolean |
| | | } |
| | | |
| | | const defaultOptions: Options = { |
| | | enableSiteMap: true, |
| | | enableRSS: true, |
| | | includeEmptyFiles: false, |
| | | } |
| | | |
| | | function generateSiteMap(cfg: GlobalConfiguration, idx: ContentIndex): string { |
| | |
| | | </rss>` |
| | | } |
| | | |
| | | export const ContentIndex: QuartzEmitterPlugin<Options> = (opts) => { |
| | | export const ContentIndex: QuartzEmitterPlugin<Partial<Options>> = (opts) => { |
| | | opts = { ...defaultOptions, ...opts } |
| | | return { |
| | | name: "ContentIndex", |
| | |
| | | for (const [_tree, file] of content) { |
| | | const slug = file.data.slug! |
| | | const date = file.data.dates?.modified ?? new Date() |
| | | if (opts?.includeEmptyFiles || (file.data.text && file.data.text !== "")) { |
| | | linkIndex.set(slug, { |
| | | title: file.data.frontmatter?.title!, |
| | | links: file.data.links ?? [], |
| | |
| | | description: file.data.description ?? "" |
| | | }) |
| | | } |
| | | } |
| | | |
| | | if (opts?.enableSiteMap) { |
| | | await emit({ |
| | |
| | | return [slug, content] |
| | | }) |
| | | ) |
| | | |
| | | await emit({ |
| | | content: JSON.stringify(simplifiedIndex), |
| | | slug: fp, |