UNPKG

tsdoc-markdown

Version:

Generates markdown documentation from TypeScript source code.

56 lines (54 loc) 6.88 kB
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