11import type { JSDocTagInfo , SymbolDisplayPart } from 'typescript' ;
2- import type { Params } from '../types' ;
2+ import type { JsDocsMetadata , Params } from '../types' ;
33
44const jsDocsToSymbolDisplayParts = ( {
55 jsDocs = [ ] ,
@@ -20,12 +20,12 @@ const jsDocsToSymbolDisplayParts = ({
2020 } , [ ] ) ;
2121} ;
2222
23- export const jsDocsToReturnType = ( jsDocs ?: JSDocTagInfo [ ] ) : string => {
23+ const jsDocsToReturnType = ( jsDocs ?: JSDocTagInfo [ ] ) : string => {
2424 const returns = jsDocsToSymbolDisplayParts ( { jsDocs, tagInfoName : 'returns' } ) ;
2525 return returns . map ( ( parts ) => parts . map ( ( { text} ) => text ) . join ( '' ) ) . join ( ' ' ) ;
2626} ;
2727
28- export const jsDocsToReferences = ( jsDocs ?: JSDocTagInfo [ ] ) : string [ ] => {
28+ const jsDocsToReferences = ( jsDocs ?: JSDocTagInfo [ ] ) : string [ ] => {
2929 const sees = jsDocsToSymbolDisplayParts ( { jsDocs, tagInfoName : 'see' } ) ;
3030
3131 return sees
@@ -55,11 +55,17 @@ export const jsDocsToParams = (jsDocs?: JSDocTagInfo[]): Params[] => {
5555 return params . map ( toParam ) . filter ( ( param ) => param !== undefined ) as Params [ ] ;
5656} ;
5757
58- export const jsDocsToExamples = ( jsDocs : JSDocTagInfo [ ] ) : string [ ] => {
58+ const jsDocsToExamples = ( jsDocs : JSDocTagInfo [ ] ) : string [ ] => {
5959 const examples : JSDocTagInfo [ ] = jsDocs . filter ( ( { name} : JSDocTagInfo ) => name === 'example' ) ;
6060 const texts = examples
6161 . map ( ( { text} ) => text )
6262 . filter ( Boolean )
6363 . flat ( 1 ) as SymbolDisplayPart [ ] ;
6464 return texts . map ( ( { text} ) => text ) . filter ( Boolean ) ;
6565} ;
66+
67+ export const jsDocsMetadata = ( jsDocs ?: JSDocTagInfo [ ] ) : JsDocsMetadata => ( {
68+ returnType : jsDocsToReturnType ( jsDocs ) ,
69+ references : jsDocsToReferences ( jsDocs ) ,
70+ examples : [ ...jsDocsToExamples ( jsDocs ?? [ ] ) ]
71+ } ) ;
0 commit comments