@svengroup/openapi-to-pdf
Version:
Create PDF API reference documentation from OpenAPI 3.0.x specification files.
74 lines (73 loc) • 2.41 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.genererateTocMarkdown = genererateTocMarkdown;
exports.getToc = getToc;
exports.generateSubSectionTocMarkdown = generateSubSectionTocMarkdown;
exports.generateSectionTitleMarkdown = generateSectionTitleMarkdown;
exports.nestInUnorderedListListItem = nestInUnorderedListListItem;
const marked_1 = __importDefault(require("marked"));
function genererateTocMarkdown(md, config) {
let toc = getToc(md);
let toc_str = `# ${config?.headings?.toc ?? 'Contents'}\n\n`;
if (config?.max_toc_level) {
toc = toc.filter((toc_item) => {
return toc_item.level <= config.max_toc_level;
});
}
toc_str += `|Section||\n`;
toc_str += "|-|-|\n";
toc.map((toc_item) => {
const section_title = generateSectionTitleMarkdown(toc_item);
toc_str += `|${section_title}|`;
toc_str += `[Skip](#${toc_item.slug})|\n`;
});
toc_str += "\n\n";
toc_str += `<div class="page-break"></div>`;
toc_str += "\n\n";
return toc_str;
}
;
function getToc(md, levels) {
const toc = [];
const renderer = new marked_1.default.Renderer();
renderer.heading = (text, level, raw, slugger) => {
const slug = slugger.slug(raw);
if (levels) {
if (levels.includes(level)) {
toc.push({ level, text, slug });
}
}
else {
toc.push({ level, text, slug });
}
return text;
};
marked_1.default.marked(md, { renderer });
return toc;
}
function generateSubSectionTocMarkdown(toc) {
let endpoints_str = "";
if (toc.length > 0) {
for (const toc_item of toc) {
endpoints_str += `- [${toc_item.text}](#${toc_item.slug})\n`;
}
endpoints_str += `\n\n`;
}
return endpoints_str;
}
function generateSectionTitleMarkdown(toc_item) {
if (toc_item.level === 1) {
return `**${toc_item.text}**<img width="500" height="1">`;
}
let text = toc_item.text;
for (let i = 1; i <= toc_item.level - 1; i++) {
text = nestInUnorderedListListItem(text);
}
return `${text}`;
}
function nestInUnorderedListListItem(text) {
return `<ul><li>${text}</li></ul>`;
}