@helldoc/core
Version:
helldoc core
39 lines (38 loc) • 1.28 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
exports.__esModule = true;
var marked_1 = __importDefault(require("marked"));
function extractHeaders(content, parser) {
if (parser === void 0) { parser = marked_1["default"].lexer; }
var tokens = parser(content);
var headingTokens = tokens.filter(function (token) { return token.type === "heading"; });
var slugger = new marked_1["default"].Slugger();
var headers = headingTokens.map(function (_a) {
var depth = _a.depth, text = _a.text;
return ({
id: slugger.slug(text),
level: depth,
text: text,
parent: null
});
});
headers.forEach(function (header, idx) {
header.parent = findHeaderParent(header.level, idx - 1, headers);
});
return headers;
}
exports.extractHeaders = extractHeaders;
function findHeaderParent(level, idx, tokens) {
for (; idx >= 0; idx--) {
var prevToken = tokens[idx];
if (level > prevToken.level) {
return prevToken.id;
}
if (prevToken.level === level) {
return prevToken.parent || null;
}
}
return null;
}