Skip to content

Commit 5fa5969

Browse files
committed
fix: expand components-list in raw md
1 parent 2e8f795 commit 5fa5969

File tree

3 files changed

+32
-4
lines changed

3 files changed

+32
-4
lines changed

docs/server/plugins/llms.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@ import type { H3Event } from 'h3'
22
import type { PageCollectionItemBase } from '@nuxt/content'
33

44
export default defineNitroPlugin((nitroApp) => {
5-
nitroApp.hooks.hook('content:llms:generate:document', async (_: H3Event, doc: PageCollectionItemBase) => {
6-
transformMDC(doc as any)
5+
nitroApp.hooks.hook('content:llms:generate:document', async (event: H3Event, doc: PageCollectionItemBase) => {
6+
await transformMDC(event, doc as any)
77
})
88

99
nitroApp.hooks.hook('llms:generate', (_, { sections }) => {

docs/server/routes/raw/[...slug].md.get.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ export default eventHandler(async (event) => {
2020
page.body.value.unshift(['h1', {}, page.title])
2121
}
2222

23-
const transformedPage = transformMDC({
23+
const transformedPage = await transformMDC(event, {
2424
title: page.title,
2525
body: page.body
2626
})

docs/server/utils/transformMDC.ts

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
1+
import type { H3Event } from 'h3'
12
import json5 from 'json5'
23
import { camelCase, kebabCase } from 'scule'
34
import { visit } from '@nuxt/content/runtime'
5+
import { queryCollection } from '@nuxt/content/server'
46
import * as theme from '../../.nuxt/ui'
57
import meta from '#nuxt-component-meta'
68
// @ts-expect-error - no types available
@@ -291,7 +293,7 @@ const generateComponentCode = ({
291293
</template>`
292294
}
293295

294-
export function transformMDC(doc: Document): Document {
296+
export async function transformMDC(event: H3Event, doc: Document): Promise<Document> {
295297
const componentName = camelCase(doc.title)
296298

297299
visitAndReplace(doc, 'component-theme', (node) => {
@@ -394,5 +396,31 @@ export function transformMDC(doc: Document): Document {
394396
replaceNodeWithPre(node, 'vue', code, `${name}.vue`)
395397
})
396398

399+
const componentsListNodes: any[] = []
400+
visit(doc.body, (node) => {
401+
if (Array.isArray(node) && node[0] === 'components-list') {
402+
componentsListNodes.push(node)
403+
}
404+
return true
405+
}, node => node)
406+
407+
for (const node of componentsListNodes) {
408+
const category = node[1]?.category
409+
if (!category) continue
410+
411+
const components = await queryCollection(event, 'docs')
412+
.where('path', 'LIKE', '/docs/components/%')
413+
.where('extension', '=', 'md')
414+
.where('category', '=', category)
415+
.select('path', 'title')
416+
.all()
417+
418+
const links = components.map((c: any) => `- [${c.title}](https://ui.nuxt.com${c.path})`).join('\n')
419+
420+
node[0] = 'p'
421+
node[1] = {}
422+
node[2] = links
423+
}
424+
397425
return doc
398426
}

0 commit comments

Comments
 (0)