@mdast2docx/mermaid
Version:
Enhance Markdown-to-DOCX conversion with Mermaid and mindmap diagram support using this plugin for @m2d/core. Converts code blocks into SVG images with customizable Mermaid config.
5 lines (4 loc) • 1.3 kB
JavaScript
import c from"mermaid";import{simpleCleanup as y,createPersistentCache as P}from"@m2d/core/cache";var u="mmd",o={fontFamily:"sans-serif",suppressErrorRendering:!0},R={cacheMode:"both",ignoreKeys:["type","lang"],parallel:!0},A=e=>{var f,l;let t={...o,...e==null?void 0:e.mermaidConfig};c.initialize(t);let C={cache:(f=e==null?void 0:e.cache)!=null?f:void 0,...R,...e==null?void 0:e.cacheConfig},h=(l=e==null?void 0:e.maxAgeMinutes)!=null?l:30*24*60,d=!1,s=async(r,n)=>{let i=`m${crypto.randomUUID()}`;try{return await c.render(i,r)}catch(a){if(console.warn(a),e!=null&&e.fixMermaid)try{return await c.render(i,e.fixMermaid(r,a))}catch(m){console.warn(m)}}},g=r=>{var n,i;if((n=r.children)==null||n.forEach(g),r.type==="code"&&/(mindmap|mermaid|mmd)/.test((i=r.lang)!=null?i:"")){let a=r.value;r.lang==="mindmap"&&!a.startsWith("mindmap")&&(a=`mindmap
${a}`),/^mindmap|gantt|gitGraph|timeline/i.test(a)||(a=a.split(`
`).map(M=>M.trim()).join(`
`));let m={type:"svg",value:P(s,u,C)(a,t),data:{mermaid:a}};Object.assign(r,{type:"paragraph",children:[m],data:{alignment:"center"}})}};return{preprocess:g,postprocess:()=>{var r,n;(!((r=e==null?void 0:e.cacheConfig)!=null&&r.cacheMode)||((n=e==null?void 0:e.cacheConfig)==null?void 0:n.cacheMode)!=="memory")&&!d&&(d=!0,y(h,u))}}};export{A as mermaidPlugin};