@@ -3,12 +3,13 @@ import type { Nodes } from 'hast';
33import type { Transformer } from 'unified' ;
44import type { Expression , ExpressionStatement , ObjectExpression , Program } from 'estree' ;
55import { createGenerator , type DocEntry , type Generator } from '@/lib/base' ;
6- import { renderMarkdownToHast , renderTypeToHast } from '@/markdown' ;
6+ import { type MarkdownRenderer , markdownRenderer } from '@/markdown' ;
77import { valueToEstree } from 'estree-util-value-to-estree' ;
88import { visit } from 'unist-util-visit' ;
99import { type BaseTypeTableProps , type GenerateTypeTableOptions } from '@/lib/type-table' ;
1010import { toEstree } from 'hast-util-to-estree' ;
1111import { type ParameterTag , parseTags } from '@/lib/parse-tags' ;
12+ import type { ResolvedShikiConfig } from 'fumadocs-core/highlight/config' ;
1213
1314function objectBuilder ( ) {
1415 const out : ObjectExpression = {
@@ -46,21 +47,19 @@ function objectBuilder() {
4647
4748async function buildTypeProp (
4849 entries : DocEntry [ ] ,
49- {
50- renderMarkdown = renderMarkdownToHast ,
51- renderType = renderTypeToHast ,
52- } : RemarkAutoTypeTableOptions ,
50+ renderer : MarkdownRenderer ,
5351) : Promise < ObjectExpression > {
5452 async function onItem ( entry : DocEntry ) {
5553 const node = objectBuilder ( ) ;
5654 const tags = parseTags ( entry . tags ) ;
57- node . addJsxProperty ( 'type' , await renderType ( entry . simplifiedType ) ) ;
58- node . addJsxProperty ( 'typeDescription' , await renderType ( entry . type ) ) ;
55+ node . addJsxProperty ( 'type' , await renderer . renderTypeToHast ( entry . simplifiedType ) ) ;
56+ node . addJsxProperty ( 'typeDescription' , await renderer . renderTypeToHast ( entry . type ) ) ;
5957 node . addExpressionNode ( 'required' , valueToEstree ( entry . required ) ) ;
6058
61- if ( tags . default ) node . addJsxProperty ( 'default' , await renderType ( tags . default ) ) ;
59+ if ( tags . default ) node . addJsxProperty ( 'default' , await renderer . renderTypeToHast ( tags . default ) ) ;
6260
63- if ( tags . returns ) node . addJsxProperty ( 'returns' , await renderMarkdown ( tags . returns ) ) ;
61+ if ( tags . returns )
62+ node . addJsxProperty ( 'returns' , await renderer . renderMarkdownToHast ( tags . returns ) ) ;
6463
6564 if ( tags . params ) {
6665 node . addExpressionNode ( 'parameters' , {
@@ -70,7 +69,7 @@ async function buildTypeProp(
7069 }
7170
7271 if ( entry . description ) {
73- node . addJsxProperty ( 'description' , await renderMarkdown ( entry . description ) ) ;
72+ node . addJsxProperty ( 'description' , await renderer . renderMarkdownToHast ( entry . description ) ) ;
7473 }
7574
7675 return node . build ( ) ;
@@ -80,7 +79,7 @@ async function buildTypeProp(
8079 const node = objectBuilder ( ) ;
8180 node . addExpressionNode ( 'name' , valueToEstree ( param . name ) ) ;
8281 if ( param . description )
83- node . addJsxProperty ( 'description' , await renderMarkdown ( param . description ) ) ;
82+ node . addJsxProperty ( 'description' , await renderer . renderMarkdownToHast ( param . description ) ) ;
8483
8584 return node . build ( ) ;
8685 }
@@ -111,8 +110,12 @@ export interface RemarkAutoTypeTableOptions {
111110 */
112111 outputName ?: string ;
113112
114- renderMarkdown ?: typeof renderMarkdownToHast ;
115- renderType ?: typeof renderTypeToHast ;
113+ /**
114+ * config for Shiki when using default `renderMarkdown` & `renderType`.
115+ */
116+ shiki ?: ResolvedShikiConfig ;
117+ renderMarkdown ?: MarkdownRenderer [ 'renderMarkdownToHast' ] ;
118+ renderType ?: MarkdownRenderer [ 'renderTypeToHast' ] ;
116119
117120 /**
118121 * Customise type table generation
@@ -145,7 +148,19 @@ export function remarkAutoTypeTable(
145148 options : generateOptions = { } ,
146149 remarkStringify = true ,
147150 generator = createGenerator ( ) ,
151+ renderMarkdown,
152+ renderType,
153+ shiki,
148154 } = config ;
155+ let renderer : MarkdownRenderer ;
156+
157+ if ( renderMarkdown && renderType ) {
158+ renderer = { renderMarkdownToHast : renderMarkdown , renderTypeToHast : renderType } ;
159+ } else {
160+ renderer = markdownRenderer ( shiki ) ;
161+ if ( renderMarkdown ) renderer . renderMarkdownToHast = renderMarkdown ;
162+ if ( renderType ) renderer . renderTypeToHast = renderType ;
163+ }
149164
150165 return async ( tree , file ) => {
151166 const queue : Promise < void > [ ] = [ ] ;
@@ -178,7 +193,7 @@ export function remarkAutoTypeTable(
178193 body : [
179194 {
180195 type : 'ExpressionStatement' ,
181- expression : await buildTypeProp ( doc . entries , config ) ,
196+ expression : await buildTypeProp ( doc . entries , renderer ) ,
182197 } ,
183198 ] ,
184199 } satisfies Program ,
0 commit comments