UNPKG

@tenedev/markdom

Version:

A Markdown and HTML parser for Node.js with TOC generation and anchor support.

2 lines (1 loc) 1.54 kB
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});const e={parse:function(e){const l=[],r=(e,r,c)=>{const a=function(e){return e.toLowerCase().replace(/\s+/g,"-").replace(/[^\w-]+/g,"")}(r);return c&&l.push({level:e,id:a,title:r}),`<h${e} id="${a}"><a href="#${a}" class="heading-anchor">🔗</a> ${r}</h${e}>`},c=(e,l)=>e.replace(/```([\s\S]*?)```/g,((e,l)=>`<pre><code>${l.trim()}</code></pre>`)).replace(/^###### (.+)$/gm,((e,c)=>r(6,c,l))).replace(/^##### (.+)$/gm,((e,c)=>r(5,c,l))).replace(/^#### (.+)$/gm,((e,c)=>r(4,c,l))).replace(/^### (.+)$/gm,((e,c)=>r(3,c,l))).replace(/^## (.+)$/gm,((e,c)=>r(2,c,l))).replace(/^# (.+)$/gm,((e,c)=>r(1,c,l))).replace(/\*\*\*(.+?)\*\*\*/g,"<strong><em>$1</em></strong>").replace(/\*\*(.+?)\*\*/g,"<strong>$1</strong>").replace(/\*(.+?)\*/g,"<em>$1</em>").replace(/`(.+?)`/g,"<code>$1</code>").replace(/!\[(.*?)\]\((.*?)\)/g,'<img alt="$1" src="$2" />').replace(/\[(.*?)\]\((.*?)\)/g,'<a href="$2">$1</a>').replace(/\n{2,}/g,"</p><p>").replace(/^((?!<h\d|<pre|<ul|<ol|<li|<code|<div|<img|<a|<strong|<em|<p).+)$/gm,"<p>$1</p>"),[a,t=""]=e.split(/<!--\s*TOC-HERE\s*-->/i),p=c(a,!1),s=c(t,!0),o=function(e){return e.reduce(((e,l)=>(e[l.level-1]?e[l.level-1]+=`<li class="toc-level-${l.level}"><a href="#${l.id}">${l.title}</a></li>`:e[l.level-1]=`<ul><li class="toc-level-${l.level}"><a href="#${l.id}">${l.title}</a></li></ul>`,e)),[]).join("")}(l);return{html:`${p}\x3c!-- TOC-HERE --\x3e${s}`.replace(/<!--\s*TOC-HERE\s*-->/i,o),toc:l}}};exports.default=e,exports.markdom=e;