UNPKG

@ng-doc/builder

Version:

<!-- PROJECT LOGO --> <br /> <div align="center"> <a href="https://github.com/ng-doc/ng-doc"> <img src="https://ng-doc.com/assets/images/ng-doc.svg?raw=true" alt="Logo" height="150px"> </a>

151 lines 4.63 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.Formatter = void 0; exports.getJsDocDescription = getJsDocDescription; exports.getJsDocTag = getJsDocTag; exports.getJsDocTags = getJsDocTags; exports.getAllJsDocTags = getAllJsDocTags; exports.hasJsDocTag = hasJsDocTag; exports.getJsDocParam = getJsDocParam; const tsdoc_1 = require("@microsoft/tsdoc"); const core_1 = require("@ng-doc/core"); const markdown_to_html_1 = require("./markdown-to-html"); class Formatter { static renderDocNode(docNode) { let result = ''; if (docNode) { if (docNode instanceof tsdoc_1.DocExcerpt) { result += docNode.content.toString(); } for (const childNode of Formatter.filterOutStatusTag(docNode.getChildNodes())) { result += Formatter.renderDocNode(childNode); } } return result; } static renderDocNodes(docNodes) { let result = ''; for (const docNode of docNodes) { result += Formatter.renderDocNode(docNode); } return result; } static filterOutStatusTag(docNodes) { if (docNodes.length < 2) return docNodes; const result = []; for (let i = 0; i < docNodes.length; i += 2) { const node1 = docNodes.at(i), node2 = docNodes.at(i + 1); if (node1 instanceof tsdoc_1.DocErrorText && node1.text === '@' && node2 instanceof tsdoc_1.DocPlainText && node2.text.startsWith('status:')) { continue; } if (node1) result.push(node1); if (node2) result.push(node2); } return result; } } exports.Formatter = Formatter; /** * * @param node */ function getJsDocDescription(node) { if (!node) return ''; const jsDocs = (0, core_1.asArray)(node.getJsDocs()[0]); const tsdocParser = new tsdoc_1.TSDocParser(); const parserContext = tsdocParser.parseString(jsDocs[0]?.getText() ?? ''); return (0, markdown_to_html_1.markdownToHtml)(Formatter.renderDocNodes(parserContext.docComment.summarySection.getChildNodes())).trim(); } /** * * @param node * @param tagName */ function getJsDocTag(node, tagName) { if (!node) return ''; const jsDocs = (0, core_1.asArray)(node.getJsDocs()[0]); const tag = jsDocs .map((doc) => doc.getStructure()) .map((doc) => doc.tags?.find((tag) => tag.tagName === tagName)) .filter(Boolean) .map((tag) => tag?.text) .join(''); return (0, markdown_to_html_1.markdownToHtml)(tag).trim(); } /** * * @param node * @param tagName */ function getJsDocTags(node, tagName) { if (!node) return []; const jsDocs = (0, core_1.asArray)(node.getJsDocs()[0]); const tags = jsDocs .map((doc) => doc.getStructure()) .map((doc) => doc.tags?.filter((tag) => tag.tagName === tagName)) .flat() .filter(core_1.isPresent) .map((tag) => tag?.text); return tags.map((tag) => (0, markdown_to_html_1.markdownToHtml)(String(tag)).trim()); } /** * * @param node */ function getAllJsDocTags(node) { if (!node) return {}; const jsDocs = (0, core_1.asArray)(node.getJsDocs()[0]); const tags = jsDocs .map((doc) => doc.getStructure()) .map((doc) => doc.tags) .flat() .filter(core_1.isPresent) .reduce((acc, tag) => { if (!acc[tag.tagName]) { acc[tag.tagName] = []; } acc[tag.tagName].push(String(tag.text)); return acc; }, {}); return tags; } /** * * @param node * @param tagName */ function hasJsDocTag(node, tagName) { if (!node) return false; const jsDocs = (0, core_1.asArray)(node.getJsDocs()[0]); return jsDocs .map((doc) => doc.getStructure()) .map((doc) => doc.tags?.some((tag) => tag.tagName === tagName)) .filter(core_1.isPresent) .some(Boolean); } /** * * @param node * @param paramName */ function getJsDocParam(node, paramName) { if (!node) return ''; const jsDocs = (0, core_1.asArray)(node.getJsDocs()[0]); const tsdocParser = new tsdoc_1.TSDocParser(); const parserContext = tsdocParser.parseString(jsDocs[0]?.getText() ?? ''); const param = Formatter.renderDocNodes(parserContext.docComment.params.tryGetBlockByName(paramName)?.content?.getChildNodes() ?? []); return (0, markdown_to_html_1.markdownToHtml)(param).trim(); } //# sourceMappingURL=get-js-doc.js.map