UNPKG

typedoc-plugin-markdown

Version:

A plugin for TypeDoc that enables TypeScript API documentation to be generated in Markdown.

89 lines (88 loc) 3.64 kB
import { backTicks, link } from '../../../libs/markdown/index.js'; import { escapeChars } from '../../../libs/utils/index.js'; export function getCommentParts(model) { const md = []; for (const part of model) { switch (part.kind) { case 'text': md.push(part.text); break; case 'code': md.push(part.text); break; case 'inline-tag': switch (part.tag) { case '@label': case '@inheritdoc': break; case '@link': case '@linkcode': case '@linkplain': { if (part.target) { let url; if (typeof part.target === 'string') { url = part.target; } else if ('id' in part.target) { if (this.router.hasUrl(part.target)) { url = getReflectionUrl(this, part.target); } if (typeof url === 'undefined') { let target = part.target.parent; while (!this.router.hasUrl(target)) { target = target.parent; } url = getReflectionUrl(this, target); } } const text = part.tag === '@linkcode' ? backTicks(part.text) : escapeChars(part.text); md.push(url ? link(text, url) : text); } else { md.push(escapeChars(part.text)); } break; } default: md.push(escapeChars(part.text)); break; } break; case 'relative-link': switch (typeof part.target) { case 'number': { const reflection = this.page.project.files.resolve(part.target, this.page.model.project); let url; if (typeof reflection === 'object' && this.router.hasUrl(reflection)) { url = this.urlTo(reflection); } else { const fileName = this.page.project.files.getName(part.target); if (fileName) { const anchor = part.targetAnchor ? `#${part.targetAnchor}` : ''; url = this.relativeURL(`_media/${fileName}${anchor}`); } } if (url) { md.push(url); break; } } // fall through case 'undefined': md.push(part.text); break; } break; default: md.push(''); } } return md.join(''); } export function getReflectionUrl(context, reflection) { return context.urlTo(reflection); }