@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
JavaScript
;
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