@mfyz/markdown-renderer-with-custom-directives
Version:
Zero-dependency markdown renderer with custom directives
5 lines (4 loc) • 4.42 kB
JavaScript
var o=Object.defineProperty;var h=Object.getOwnPropertyDescriptor;var _=Object.getOwnPropertyNames;var g=Object.prototype.hasOwnProperty;var d=(i,r)=>{for(var e in r)o(i,e,{get:r[e],enumerable:!0})},$=(i,r,e,n)=>{if(r&&typeof r=="object"||typeof r=="function")for(let t of _(r))!g.call(i,t)&&t!==e&&o(i,t,{get:()=>r[t],enumerable:!(n=h(r,t))||n.enumerable});return i};var b=i=>$(o({},"__esModule",{value:!0}),i);var m={};d(m,{MarkdownRenderer:()=>a,default:()=>f,render:()=>u});module.exports=b(m);var a=class i{constructor(){this.buttonDirectivePattern=/\[([^\]]+)\]\(button:([^)]+)\)/g,this.colorDirectivePattern=/:color\[([^\]]+)\]\{([^}]+)\}/g,this.buttonDirectiveNewPattern=/:button\[([^\]]+)\]\{([^}]+)\}/g,this.patterns={bold:/\*\*(.*?)\*\*/g,italic:/\*(.*?)\*/g,strike:/~~(.*?)~~/g,link:/\[([^\]]+)\]\(([^)]+)\)/g,color:/:color\[([^\]]+)\]\{([^}]+)\}/g,h1:/^# (.+)$/gm,h2:/^## (.+)$/gm,h3:/^### (.+)$/gm,h4:/^#### (.+)$/gm,h5:/^##### (.+)$/gm,h6:/^###### (.+)$/gm,ul:/^[-*] (.+)$/gm,lineBreak:/\n/g}}parseButtonParams(r){let e={};return r.split(",").forEach(n=>{let[t,s]=n.trim().split("=");t&&s&&(e[t.trim()]=s.trim())}),e}static processBasicMarkdown(r){let e=new i;return r.replace(e.patterns.bold,"<strong>$1</strong>").replace(e.patterns.italic,"<em>$1</em>").replace(e.patterns.strike,"<del>$1</del>").replace(e.patterns.link,'<a href="$2">$1</a>')}static processColorDirective(r){let e=new i;return r.replace(e.patterns.color,(n,t,s)=>`<span style="color:${s}">${t}</span>`)}processButtonDirective(r,e,n){let t=this.parseButtonParams(n),s="display:inline-block;text-decoration:none;padding:8px 16px;cursor:pointer;color:white;border-radius:"+(t.shape==="pill"?"9999px":"8px")+";background-color:"+(t.color==="purple"?"#6366f1":"#3b82f6");return`<a href="${t.url}" style="${s}">${e}</a>`}processColorDirective(r,e,n){return`<span style="color:${n}">${e}</span>`}processButtonDirectiveNew(r,e,n){let t={};n.split(" ").forEach(l=>{let[c,p]=l.split("=");c&&p&&(t[c]=p)});let s="display:inline-block;text-decoration:none;padding:8px 16px;cursor:pointer;color:white;border-radius:"+(t.shape==="pill"?"9999px":"8px")+";background-color:"+(t.color==="purple"?"#6366f1":"#3b82f6");return`<a href="${t.url}" style="${s}">${e}</a>`}static processHeadlines(r){let e=new i;return r.replace(e.patterns.h6,"<h6>$1</h6>__HEADLINE_MARKER__").replace(e.patterns.h5,"<h5>$1</h5>__HEADLINE_MARKER__").replace(e.patterns.h4,"<h4>$1</h4>__HEADLINE_MARKER__").replace(e.patterns.h3,"<h3>$1</h3>__HEADLINE_MARKER__").replace(e.patterns.h2,"<h2>$1</h2>__HEADLINE_MARKER__").replace(e.patterns.h1,"<h1>$1</h1>__HEADLINE_MARKER__")}static processLists(r){r=r.replace(this.patterns.ul,"<li>$1</li>");let e=r.split(`
`),n=!1,t=[];for(let s of e)s.startsWith("<li>")?(n||(t.push("<ul>"),n=!0),t.push(s)):(n&&(t.push("</ul>"),n=!1),t.push(s));return n&&t.push("</ul>"),t.join(`
`).replace(/\n<\/ul>/g,"</ul>").replace(/<ul>\n/g,"<ul>").replace(/(<li>.*?<\/li>)\n(?=<li>)/g,"$1")}static processLineBreaks(r){return r.replace(/(__HEADLINE_MARKER__)\n+/g,(e,n,t,s)=>{let l=e.match(/\n/g)?.length||0;return l>2?"<br>".repeat(l-2):""}).replace(/__HEADLINE_MARKER__/g,"").replace(/\n\n+/g,"<br><br>").replace(/\n/g,"<br>")}render(r){if(!r)return"";let e=r;return e=e.replace(/^(#{1,6})\s+(.+)$/gm,(n,t,s)=>{let l=t.length;return`<h${l}>${s}</h${l}>__HEADLINE_MARKER__`}),e=e.replace(/^[-*]\s+(.+)$/gm,"<li>$1</li>"),e=e.replace(/(<li>[^<]*<\/li>\n?)+/g,n=>`<ul>${n.replace(/\n/g,"")}</ul>`),e=e.replace(this.patterns.bold,"<strong>$1</strong>").replace(this.patterns.italic,"<em>$1</em>").replace(this.patterns.strike,"<del>$1</del>").replace(this.patterns.link,'<a href="$2">$1</a>'),e=e.replace(this.patterns.color,(n,t,s)=>this.processColorDirective(n,t,s)),e=e.replace(this.buttonDirectivePattern,(n,t,s)=>this.processButtonDirective(n,t,s)),e=e.replace(this.buttonDirectiveNewPattern,(n,t,s)=>this.processButtonDirectiveNew(n,t,s)),e=e.replace(/(<\/ul>)(\n+)/g,"$1__LIST_MARKER__"),e=e.replace(/__HEADLINE_MARKER__\n(?!\n)/g,"").replace(/__HEADLINE_MARKER__\n\n(?!\n)/g,"").replace(/__HEADLINE_MARKER__\n\n\n+/g,"<br>").replace(/__LIST_MARKER__/g,"").replace(/\n{3,}/g,"<br>").replace(/\n{2}/g,"<br><br>").replace(/\n/g,"<br>").replace(/__HEADLINE_MARKER__|__LIST_MARKER__/g,""),e}},E=new a,u=i=>E.render(i),f=a;try{if(typeof module<"u"){let i={default:a,render:u};Object.assign(module.exports,i)}}catch{}
//# sourceMappingURL=index.cjs.map