tsdoc-markdown
Version:
Generates markdown documentation from TypeScript source code.
49 lines (48 loc) • 5.35 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);
var j=t=>(t??[]).map(({name:e,documentation:i})=>({name:e,documentation:i??""})),O=t=>t!==void 0&&t!==""?`: ${t}`:"",b=t=>t.map(({name:e,documentation:i})=>`* \`${e}\`${O(i)}`),M=t=>t.reduce(([e,i],y)=>[[...e,...y.isStatic!==!0?[y]:[]],[...i,...y.isStatic===!0?[y]:[]]],[[],[]]),C=({entry:t,headingLevel:e,emoji:i})=>{let{name:y,url:u,documentation:r,methods:h,properties:m,constructors:d}=t,s=[`${e}${g({emoji:i,key:"classes"})} ${y}
`];r!==void 0&&r!==""&&s.push(`${r}
`),u!==void 0&&s.push(L({emoji:i,url:u}));let l=(d??[]).filter(({visibility:a})=>a==="public");l.length>0&&(s.push(`${e}# Constructors
`),s.push(...l.map(({parameters:a,documentation:f,visibility:w})=>{let T=[`\`${w}\`${O(f)}
`];return((a==null?void 0:a.length)??0)>0&&(T.push(`Parameters:
`),T.push(...b(j(a)))),T.join(`
`)})),s.push(`
`));let c=({methods:a,titlePrefix:f})=>{((a==null?void 0:a.length)??0)!==0&&(s.push(`${e}# ${f??""}Methods
`),s.push(`${$({entries:a,emoji:i})}
`),s.push(D({entries:a??[],headingLevel:`${e}#`,docType:"Method",emoji:i})))},[o,n]=M(h??[]);c({methods:n,titlePrefix:"Static "}),c({methods:o});let p=({properties:a,titlePrefix:f})=>{((a==null?void 0:a.length)??0)!==0&&(s.push(`${e}# ${f??""}Properties
`),s.push(`${$({entries:a??[],emoji:i})}
`),s.push(D({entries:a??[],headingLevel:`${e}#`,docType:"Property",emoji:i})))},[P,k]=M(m??[]);return p({properties:k,titlePrefix:"Static "}),p({properties:P}),s.join(`
`)},S=({entry:t,headingLevel:e,emoji:i})=>{let{name:y,documentation:u}=t,r=[`${e}# ${i==null?"":":gear: "}${y}
`];return u!==void 0&&r.push(`${u}
`),r.push("| Property | Type | Description |"),r.push("| ---------- | ---------- | ---------- |"),(t.properties??[]).forEach(({name:h,type:m,documentation:d,jsDocs:s})=>{let l=(s??[]).map(({name:c,text:o})=>`${c}${o!==void 0?`: ${o.map(({text:n})=>n).join("")}`:""}`);r.push(`| \`${h}\` | \`${E(m??"")}\` | ${d!==void 0&&d!==""?E(d).replace(/\r?\n|\r/g,""):""}${l.length>0?` ${E(l.join(""))}`:""} |`)}),r.push(`
`),r.join(`
`)},L=({url:t,emoji:e})=>`[${g({emoji:e,key:"link"}).trim()}${e!=null?" ":""}Source](${t})
`,E=t=>t.split(`
`).map(e=>e.trim()).join(" ").replace(/ \| /g," or ").replace(/ & /g," and "),D=({entries:t,headingLevel:e,docType:i,emoji:y})=>{let u=d=>{let c=d.filter(({name:n})=>n==="param").map(({text:n})=>n).reduce((n,p)=>p===void 0?n:[...n,p],[]),o=n=>{var k,a;if(n.find(({kind:f,text:w})=>f==="parameterName"&&w!=="")===void 0)return;let p=((k=n.find(({kind:f})=>f==="parameterName"))==null?void 0:k.text)??"",P=((a=n.find(({kind:f})=>f==="text"))==null?void 0:a.text)??"";return{name:p,documentation:P}};return c.map(o).filter(n=>n!==void 0)},r=d=>d.filter(({name:c})=>c==="example").map(({text:c})=>c).filter(Boolean).flat(1).map(({text:c})=>c).filter(Boolean),h=t.map(({name:d,type:s,documentation:l,parameters:c,jsDocs:o,url:n})=>({name:d,type:s??"",documentation:l??"",params:[...j(c),...u(o??[])],examples:[...r(o??[])],url:n})),m=({name:d,documentation:s,type:l,params:c,examples:o,url:n})=>{let p=[`${e}# ${y==null?"":":gear: "}${d}
`];return s.length&&p.push(`${s}
`),p.push(`| ${l==="Type"?"Type alias":i} | Type |`),p.push("| ---------- | ---------- |"),p.push(`| \`${d}\` | ${l!==void 0&&l!==""?`\`${E(l)}\``:""} |
`),c.length&&(p.push(`Parameters:
`),p.push(...b(c)),p.push(`
`)),o.length&&(p.push(`Examples:
`),p.push(...o),p.push(`
`)),n!==void 0&&p.push(L({emoji:y,url:n})),p.join(`
`)};return h.map(m).join(`
`)},$=({entries:t,emoji:e})=>t.map(({name:i})=>`- [${i}](#${e==null?"":`${e.entry}-`}${i.toLowerCase().replace(/ /g,"-")})`).join(`
`),g=({emoji:t,key:e})=>t==null?"":` :${t[e]}:`,x={classes:"factory",functions:"toolbox",constants:"wrench",enum:"nut_and_bolt",entry:"gear",link:"link",interfaces:"tropical_drink",types:"cocktail"},I=({entries:t,options:e})=>{let{headingLevel:i,emoji:y}=e??{headingLevel:"##",emoji:x},u=i??"##",r=y===null?void 0:y??x,h=t.filter(({doc_type:n})=>n==="function"),m=t.filter(({doc_type:n})=>n==="class"),d=t.filter(({doc_type:n})=>n==="const"),s=t.filter(({doc_type:n})=>n==="enum"),l=t.filter(({doc_type:n})=>n==="type"),c=t.filter(({doc_type:n})=>n==="interface"),o=[];return h.length&&(o.push(`${u}${g({emoji:r,key:"functions"})} Functions
`),o.push(`${$({entries:h,emoji:r})}
`),o.push(`${D({entries:h,headingLevel:u,emoji:r,docType:"Function"})}
`)),d.length&&(o.push(`${u}${g({emoji:r,key:"constants"})} Constants
`),o.push(`${$({entries:d,emoji:r})}
`),o.push(`${D({entries:d,headingLevel:u,emoji:r,docType:"Constant"})}
`)),o.push(m.map(n=>C({entry:n,headingLevel:u,emoji:r})).join(`
`)),s.length&&(o.push(`${u}${g({emoji:r,key:"enum"})} Enum
`),o.push(`${$({entries:s,emoji:r})}
`),o.push(s.map(n=>S({entry:n,headingLevel:u,emoji:r})).join(`
`))),c.length&&(o.push(`${u}${g({emoji:r,key:"interfaces"})} Interfaces
`),o.push(`${$({entries:c,emoji:r})}
`),o.push(c.map(n=>S({entry:n,headingLevel:u,emoji:r})).join(`
`))),l.length&&(o.push(`${u}${g({emoji:r,key:"types"})} Types
`),o.push(`${$({entries:l,emoji:r})}
`),o.push(`${D({entries:l,headingLevel:u,emoji:r,docType:"Type"})}
`)),o.join(`
`)};export{I as a};
//# sourceMappingURL=chunk-DKAQQIUL.mjs.map