tsdoc-markdown
Version:
Generates markdown documentation from TypeScript source code.
56 lines (54 loc) • 6.88 kB
JavaScript
import { createRequire } from 'module';import path from 'path';import {fileURLToPath} from 'url';const __filename = fileURLToPath(import.meta.url);const __dirname = path.dirname(__filename);const require = createRequire(import.meta.url);
import{a as j}from"./chunk-MQ67SAUG.mjs";import{existsSync as z,readFileSync as G,writeFileSync as x}from"node:fs";var S=({jsDocs:n=[],tagInfoName:t})=>n.filter(({name:r})=>r===t).map(({text:r})=>r).reduce((r,o)=>o===void 0?r:[...r,o],[]),q=n=>S({jsDocs:n,tagInfoName:"returns"}).map(s=>s.map(({text:e})=>e).join("")).join(" "),A=n=>S({jsDocs:n,tagInfoName:"see"}).map(s=>s.filter(({text:e})=>e!=="*").reduce((e,{text:r})=>`${e}${r}`,"")).map(s=>s.trim()),O=n=>{let t=S({jsDocs:n,tagInfoName:"param"}),s=e=>{var p,u;if(e.find(({kind:d,text:m})=>d==="parameterName"&&m!=="")===void 0)return;let r=((p=e.find(({kind:d})=>d==="parameterName"))==null?void 0:p.text)??"",o=((u=e.find(({kind:d})=>d==="text"))==null?void 0:u.text)??"";return{name:r,documentation:o}};return t.map(s).filter(e=>e!==void 0)},H=n=>n.filter(({name:e})=>e==="example").map(({text:e})=>e).filter(Boolean).flat(1).map(({text:e})=>e).filter(Boolean),T=n=>({returnType:q(n),references:A(n),examples:[...H(n??[])]});var I=n=>{let t=s=>{let e=/\{@link\s+([^\s}]+)\s*(?:\s+([^}]+))?\}/.exec(s);if(e!==null){let[r,o,p]=e;return o.startsWith("http")?`* [${p??o}](${o})`:`* \`${o.trim()}\`${p?` \u2013 ${p}`:""}`}return s.startsWith("http")?`* [${s}](${s})`:`* ${s}`};return n.map(t)};var D=({emoji:n,key:t})=>n==null?"":` :${n[t]}:`,W=({url:n,emoji:t})=>`[${D({emoji:t,key:"link"}).trim()}${t!=null?" ":""}Source](${n})
`,w=({returnType:n,references:t,examples:s,url:e,emoji:r})=>{let o=[];return n!==void 0&&n!==""&&(o.push(`Returns:
`),o.push(`${n}
`)),t!=null&&t.length&&(o.push(`References:
`),o.push(...I(t)),o.push(`
`)),s.length&&(o.push(`Examples:
`),o.push(...s),o.push(`
`)),e!==void 0&&o.push(W({emoji:r,url:e})),o};var b=n=>(n??[]).map(({name:t,documentation:s})=>({name:t,documentation:s??""})),L=n=>n!==void 0&&n!==""?`: ${n}`:"",_=n=>n.map(({name:t,documentation:s})=>`* \`${t}\`${L(s)}`),C=n=>n.reduce(([t,s],e)=>[[...t,...e.isStatic!==!0?[e]:[]],[...s,...e.isStatic===!0?[e]:[]]],[[],[]]),U=({entry:n,headingLevel:t,emoji:s})=>{let{name:e,url:r,documentation:o,methods:p,properties:u,constructors:d,jsDocs:m}=n,c=[`${t}${D({emoji:s,key:"classes"})} ${e}
`];o!==void 0&&o!==""&&c.push(`${o}
`);let f=w({...T(m),url:r,emoji:s});c.push(...f);let a=(d??[]).filter(({visibility:l})=>l==="public");a.length>0&&(c.push(`${t}# Constructors
`),c.push(...a.map(({parameters:l,documentation:$,visibility:F})=>{let P=[`\`${F}\`${L($)}
`];return((l==null?void 0:l.length)??0)>0&&(P.push(`Parameters:
`),P.push(..._(b(l)))),P.join(`
`)})),c.push(`
`));let i=({methods:l,titlePrefix:$})=>{((l==null?void 0:l.length)??0)!==0&&(c.push(`${t}# ${$??""}Methods
`),c.push(`${g({entries:l,emoji:s})}
`),c.push(k({entries:l??[],headingLevel:`${t}#`,docType:"Method",emoji:s})))},[y,h]=C(p??[]);i({methods:h,titlePrefix:"Static "}),i({methods:y});let E=({properties:l,titlePrefix:$})=>{((l==null?void 0:l.length)??0)!==0&&(c.push(`${t}# ${$??""}Properties
`),c.push(`${g({entries:l??[],emoji:s})}
`),c.push(k({entries:l??[],headingLevel:`${t}#`,docType:"Property",emoji:s})))},[v,B]=C(u??[]);return E({properties:B,titlePrefix:"Static "}),E({properties:v}),c.join(`
`)},J=({entry:n,headingLevel:t,emoji:s})=>{let{name:e,documentation:r,jsDocs:o,url:p}=n,u=[`${t}# ${s==null?"":":gear: "}${e}
`];r!==void 0&&u.push(`${r}
`),u.push("| Property | Type | Description |"),u.push("| ---------- | ---------- | ---------- |"),(n.properties??[]).forEach(({name:m,type:c,documentation:f,jsDocs:a})=>{let i=(a??[]).map(({name:y,text:h})=>`${y}${h!==void 0?`: ${h.map(({text:E})=>E).join("")}`:""}`);u.push(`| \`${m}\` | \`${M(c??"")}\` | ${f!==void 0&&f!==""?M(f).replace(/\r?\n|\r/g,""):""}${i.length>0?` ${M(i.join(""))}`:""} |`)}),u.push(`
`);let d=w({...T(o),url:p,emoji:s});return u.push(...d),u.join(`
`)},M=n=>n.split(`
`).map(t=>t.trim()).join(" ").replace(/ \| /g," or ").replace(/ & /g," and "),k=({entries:n,headingLevel:t,docType:s,emoji:e})=>{let r=n.map(({name:p,type:u,documentation:d,parameters:m,jsDocs:c,url:f})=>({name:p,type:u??"",documentation:d??"",params:[...b(m),...O(c)],...T(c),url:f})),o=({name:p,documentation:u,type:d,params:m,returnType:c,references:f,examples:a,url:i})=>{let y=[`${t}# ${e==null?"":":gear: "}${p}
`];u.length&&y.push(`${u}
`),y.push(`| ${d==="Type"?"Type alias":s} | Type |`),y.push("| ---------- | ---------- |"),y.push(`| \`${p}\` | ${d!==void 0&&d!==""?`\`${M(d)}\``:""} |
`),m.length&&(y.push(`Parameters:
`),y.push(..._(m)),y.push(`
`));let h=w({returnType:c,references:f,examples:a,url:i,emoji:e});return y.push(...h),y.join(`
`)};return r.map(o).join(`
`)},g=({entries:n,emoji:t})=>n.map(({name:s})=>`- [${s}](#${t==null?"":`${t.entry}-`}${s.toLowerCase().replace(/ /g,"-")})`).join(`
`),R={classes:"factory",functions:"toolbox",constants:"wrench",enum:"nut_and_bolt",entry:"gear",link:"link",interfaces:"tropical_drink",types:"cocktail"},N=({entries:n,options:t})=>{let{headingLevel:s,emoji:e}=t??{headingLevel:"##",emoji:R},r=s??"##",o=e===null?void 0:e??R,p=n.filter(({doc_type:i})=>i==="function"),u=n.filter(({doc_type:i})=>i==="class"),d=n.filter(({doc_type:i})=>i==="const"),m=n.filter(({doc_type:i})=>i==="enum"),c=n.filter(({doc_type:i})=>i==="type"),f=n.filter(({doc_type:i})=>i==="interface"),a=[];return p.length&&(a.push(`${r}${D({emoji:o,key:"functions"})} Functions
`),a.push(`${g({entries:p,emoji:o})}
`),a.push(`${k({entries:p,headingLevel:r,emoji:o,docType:"Function"})}
`)),d.length&&(a.push(`${r}${D({emoji:o,key:"constants"})} Constants
`),a.push(`${g({entries:d,emoji:o})}
`),a.push(`${k({entries:d,headingLevel:r,emoji:o,docType:"Constant"})}
`)),a.push(u.map(i=>U({entry:i,headingLevel:r,emoji:o})).join(`
`)),m.length&&(a.push(`${r}${D({emoji:o,key:"enum"})} Enum
`),a.push(`${g({entries:m,emoji:o})}
`),a.push(m.map(i=>J({entry:i,headingLevel:r,emoji:o})).join(`
`))),f.length&&(a.push(`${r}${D({emoji:o,key:"interfaces"})} Interfaces
`),a.push(`${g({entries:f,emoji:o})}
`),a.push(f.map(i=>J({entry:i,headingLevel:r,emoji:o})).join(`
`))),c.length&&(a.push(`${r}${D({emoji:o,key:"types"})} Types
`),a.push(`${g({entries:c,emoji:o})}
`),a.push(`${k({entries:c,headingLevel:r,emoji:o,docType:"Type"})}
`)),a.join(`
`)};var en=({inputFiles:n,outputFile:t,markdownOptions:s,buildOptions:e})=>{let r=j({inputFiles:n,options:e}),o=N({entries:r,options:s});if(z(t)){let p=G(t,"utf-8"),u=/(<!-- TSDOC_START -->)[\s\S]*?(<!-- TSDOC_END -->)$/gm;if(p.match(u)===null){x(t,o,"utf-8");return}let d=`<!-- TSDOC_START -->
${o}
<!-- TSDOC_END -->`;x(t,p.replace(u,d),"utf-8");return}x(t,o,"utf-8")};export{j as buildDocumentation,N as documentationToMarkdown,en as generateDocumentation};
//# sourceMappingURL=index.mjs.map