UNPKG

front-matter-markdown

Version:

get the config and toc object from the markdown string.

81 lines (71 loc) 2.12 kB
(function() { var AstHeadingsToFileObject, isArray, isString; isArray = require('util-ex/lib/is/type/array'); isString = require('util-ex/lib/is/type/string'); module.exports = AstHeadingsToFileObject = (function() { var textToObject; function AstHeadingsToFileObject(nodes) { var contents, lastObj, level, parents, result; contents = []; result = { contents: contents }; level = nodes[0].level; lastObj = null; parents = [result]; nodes.forEach(function(node, i) { var obj, parent; obj = textToObject(node); if (node.level > level) { contents = lastObj.contents = []; parents.push(lastObj); level = node.level; } else if (node.level < level) { parent = parents.pop() || result; contents = parent.contents; level = node.level; } contents.push(obj); return lastObj = obj; }); if (!result.contents.length) { result = null; } return result; } AstHeadingsToFileObject.textToObject = textToObject = function(textNode) { var result; result = {}; if (isString(textNode.text)) { result.title = textNode.text; } else if (!isArray(textNode.text)) { textNode = textNode.text; if (textNode.type === 'link') { result.title = textNode.text; result.path = textNode.href; if (textNode.title) { result.hint = textNode.title; } } else { result.title = textNode; } } else { result.title = []; textNode.text.forEach(function(n) { if (n.type === 'link') { result.title.push(n.text); result.path = n.href; if (n.title) { return result.hint = n.title; } } else { return result.title.push(n); } }); } return result; }; return AstHeadingsToFileObject; })(); }).call(this); //# sourceMappingURL=ast-headings-to-file-object.js.map