typedoc-plugin-markdown
Version:
A plugin for TypeDoc that enables TypeScript API documentation to be generated in Markdown.
57 lines (56 loc) • 2.23 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.typeParameterTable = void 0;
const comment_1 = require("./comment");
const strip_line_breaks_1 = require("./strip-line-breaks");
const type_1 = require("./type");
function typeParameterTable() {
return table(this);
}
exports.typeParameterTable = typeParameterTable;
function table(parameters) {
const showTypeCol = hasTypes(parameters);
const comments = parameters.map((param) => { var _a, _b, _c, _d; return !!((_b = (_a = param.comment) === null || _a === void 0 ? void 0 : _a.text) === null || _b === void 0 ? void 0 : _b.trim()) || !!((_d = (_c = param.comment) === null || _c === void 0 ? void 0 : _c.shortText) === null || _d === void 0 ? void 0 : _d.trim()); });
const hasComments = !comments.every((value) => !value);
const headers = ['Name'];
if (showTypeCol) {
headers.push('Type');
}
if (hasComments) {
headers.push('Description');
}
const rows = parameters.map((parameter) => {
const row = [];
row.push(`\`${parameter.name}\``);
if (showTypeCol) {
const typeCol = [];
if (!parameter.type && !parameter.default) {
typeCol.push(`\`${parameter.name}\``);
}
if (parameter.type) {
typeCol.push(`extends ${type_1.type.call(parameter.type, 'object')}`);
}
if (parameter.default) {
typeCol.push(type_1.type.call(parameter.default));
}
row.push(typeCol.join(''));
}
if (hasComments) {
if (parameter.comment) {
row.push(strip_line_breaks_1.stripLineBreaks(comment_1.comment.call(parameter.comment)).replace(/\|/g, '\\|'));
}
else {
row.push('-');
}
}
return `| ${row.join(' | ')} |\n`;
});
const output = `\n| ${headers.join(' | ')} |\n| ${headers
.map(() => ':------')
.join(' | ')} |\n${rows.join('')}`;
return output;
}
function hasTypes(parameters) {
const types = parameters.map((param) => !!param.type || !!param.default);
return !types.every((value) => !value);
}