@mfyz/markdown-renderer-with-custom-directives
Version:
Zero-dependency markdown renderer with custom directives
5 lines (4 loc) • 3.89 kB
JavaScript
var d=Object.create;var n=Object.defineProperty;var g=Object.getOwnPropertyDescriptor;var A=Object.getOwnPropertyNames;var b=Object.getPrototypeOf,N=Object.prototype.hasOwnProperty;var R=(r,e,s)=>e in r?n(r,e,{enumerable:!0,configurable:!0,writable:!0,value:s}):r[e]=s;var S=(r,e)=>()=>(e||r((e={exports:{}}).exports,e),e.exports);var $=(r,e,s,o)=>{if(e&&typeof e=="object"||typeof e=="function")for(let t of A(e))!N.call(r,t)&&t!==s&&n(r,t,{get:()=>e[t],enumerable:!(o=g(e,t))||o.enumerable});return r};var f=(r,e,s)=>(s=r!=null?d(b(r)):{},$(e||!r||!r.__esModule?n(s,"default",{value:r,enumerable:!0}):s,r));var h=(r,e,s)=>R(r,typeof e!="symbol"?e+"":e,s);var T=S((m,u)=>{var l=class{static parseButtonParams(e){let s={url:"",shape:"rounded",color:"blue"};return e.split(" ").forEach(o=>{let[t,i]=o.split("=");t&&i&&(s[t]=i)}),s}static processBasicMarkdown(e){return 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>')}static processColorDirective(e){return e.replace(this.PATTERNS.color,(s,o,t)=>{let i=this.processBasicMarkdown(o);return`<span style="color:${t}">${i}</span>`})}static processButtonDirective(e){return e.replace(this.PATTERNS.button,(s,o,t)=>{let{url:i,shape:c,color:a}=this.parseButtonParams(t),_=[this.BUTTON_STYLES.base,this.BUTTON_STYLES.shapes[c]||this.BUTTON_STYLES.shapes.rounded,this.BUTTON_STYLES.colors[a]||this.BUTTON_STYLES.colors.blue].join("; "),E=this.processBasicMarkdown(o);return`<a href="${i}" style="${_}">${E}</a>`})}static processHeadlines(e){return e.replace(this.PATTERNS.h6,"<h6>$1</h6>__HEADLINE_MARKER__").replace(this.PATTERNS.h5,"<h5>$1</h5>__HEADLINE_MARKER__").replace(this.PATTERNS.h4,"<h4>$1</h4>__HEADLINE_MARKER__").replace(this.PATTERNS.h3,"<h3>$1</h3>__HEADLINE_MARKER__").replace(this.PATTERNS.h2,"<h2>$1</h2>__HEADLINE_MARKER__").replace(this.PATTERNS.h1,"<h1>$1</h1>__HEADLINE_MARKER__")}static processLists(e){e=e.replace(this.PATTERNS.ul,"<li>$1</li>");let s=e.split(`
`),o=!1,t=[];for(let i of s)i.startsWith("<li>")?(o||(t.push("<ul>"),o=!0),t.push(i)):(o&&(t.push("</ul>"),o=!1),t.push(i));return o&&t.push("</ul>"),t.join(`
`).replace(/\n<\/ul>/g,"</ul>").replace(/<ul>\n/g,"<ul>").replace(/(<li>.*?<\/li>)\n(?=<li>)/g,"$1")}static processLineBreaks(e){return e.replace(/(__HEADLINE_MARKER__)\n+/g,(s,o,t,i)=>{var a;let c=((a=s.match(/\n/g))==null?void 0:a.length)||0;return c>2?"<br>".repeat(c-2):""}).replace(/__HEADLINE_MARKER__/g,"").replace(/\n\n+/g,"<br><br>").replace(/\n/g,"<br>")}static render(e){if(!e)return"";let s=e;return s=this.processHeadlines(s),s=this.processLists(s),s=this.processBasicMarkdown(s),s=this.processColorDirective(s),s=this.processButtonDirective(s),s=this.processLineBreaks(s),s}};h(l,"PATTERNS",{bold:/\*\*(.*?)\*\*/g,italic:/\*(.*?)\*/g,strike:/~~(.*?)~~/g,link:/\[(.*?)\]\((.*?)\)/g,h6:/^#{6}\s+(.+)$/gm,h5:/^#{5}\s+(.+)$/gm,h4:/^#{4}\s+(.+)$/gm,h3:/^#{3}\s+(.+)$/gm,h2:/^#{2}\s+(.+)$/gm,h1:/^#\s+(.+)$/gm,ul:/^[\s]*[-*]\s+(.+)$/gm,lineBreak:/\n/g,color:/:color\[(.*?)\]{(.*?)}/g,button:/:button\[(.*?)\]{(.*?)}/g}),h(l,"BUTTON_STYLES",{shapes:{pill:"border-radius: 9999px",rect:"border-radius: 0",rounded:"border-radius: 5px"},colors:{purple:"background-color: #8a63d2",blue:"background-color: #3b82f6",green:"background-color: #22c55e",red:"background-color: #ef4444",yellow:"background-color: #eab308",gray:"background-color: #6b7280"},base:["display: inline-block","text-decoration: none","padding: 2px 10px","cursor: pointer","color: white"].join("; ")});function L(r){return l.render(r)}u.exports={render:L,MarkdownRenderer:l,default:l}});var p=f(T()),{render:P}=p.default;var D=p.default;var export_MarkdownRenderer=p.default;export{export_MarkdownRenderer as MarkdownRenderer,D as default,P as render};
//# sourceMappingURL=index.esm.mjs.map