UNPKG

@m2d/core

Version:

Core engine to convert extended MDAST to DOCX. Supports plugins for footnotes, images, lists, tables, and more. Designed for seamless Markdown-to-DOCX conversion.

4 lines (3 loc) 3.61 kB
import{b as S,c as v}from"./chunk-NIBTWVZC.mjs";import{Bookmark as R,BorderStyle as k,CheckBox as g,ExternalHyperlink as B,FootnoteReferenceRun as E,InternalHyperlink as L,Paragraph as I,TextRun as h}from"docx";import*as D from"docx";var z=(u,y,x)=>{let c=async(w,b={})=>{var P,l;return(await Promise.all((l=(P=w.children)==null?void 0:P.map(async e=>{var r,t,n;let a=(await Promise.all(x.map(o=>{var m,f;return(f=(m=o.inline)==null?void 0:m.call(o,D,e,b,u,y,c))!=null?f:[]}))).flat(),s=Object.assign({},b,e.data),p=(t=e.url)!=null?t:u[(r=e.identifier)==null?void 0:r.toUpperCase()];switch(e.type){case"text":return[...a,...s.pre?e.value.split(` `).map(o=>new h({text:o,...s,break:1})):[new h({text:e.value,...s})]];case"checkbox":return[...a,new g({checked:!!e.checked})];case"break":return[...a,new h({break:1})];case"inlineCode":return[...a,new h({text:e.value,...s,style:"code",font:{name:"Consolas"}})];case"emphasis":return s.italics=!0,[...a,...await c(e,s)];case"strong":return s.bold=!0,[...a,...await c(e,s)];case"delete":return s.strike=!0,[...a,...await c(e,s)];case"link":case"linkReference":return s.underline={},[...a,p.startsWith("#")?new L({anchor:p.slice(1),children:await c(e,s)}):new B({link:p,children:await c(e,s)})];case"footnoteReference":return[...a,new E((n=y[e.identifier].id)!=null?n:0)];case"fragment":return[...a,...await c(e,s)];case"":return[...a];default:return console.warn(`Unsupported inline node type: ${e.type}`),[...a]}}))!=null?l:[])).flat()};return c},O=async(u,y,x,c)=>{let{plugins:w,useTitle:b,...P}={...v,...c};w.forEach(a=>{var s;return(s=a==null?void 0:a.preprocess)==null?void 0:s.call(a,u)});let l=z(y,x,w),e=async(a,s)=>{var p;return(await Promise.all((p=a.children)==null?void 0:p.map(async r=>{var o,m,f,C;let t={...s},n=(await Promise.all(w.map(i=>{var d,N;return(N=(d=i.block)==null?void 0:d.call(i,D,r,t,e,l))!=null?N:[]}))).flat();switch(Object.assign(t,r.data),r.type){case"paragraph":{let i=t.pre?{alignment:"left"}:{},d=typeof t.checked=="boolean"?[new g({checked:t.checked,checkedState:{value:"2611"},uncheckedState:{value:"2610"}}),new h(" ")]:[];return[...n,new I({...i,...t,children:[...d,...await l(r,t)]})]}case"heading":return[new I({...t,...n,heading:b?r.depth===1?"Title":`Heading${r.depth-1}`:`Heading${r.depth}`,children:[new R({id:S(r).replace(/[. ]+/g,"-").toLowerCase(),children:await l(r,t)})]})];case"code":return[...n,new I({border:{bottom:{style:k.SINGLE,space:5,size:1},left:{style:k.SINGLE,space:10,size:1},right:{style:k.SINGLE,space:5,size:1},top:{style:k.SINGLE,space:6,size:1}},...t,alignment:"left",style:"blockCode",children:r.value.split(` `).map((i,d)=>new h({...t,text:i,break:d===0?0:1,style:"code",font:{name:"Consolas"}}))})];case"list":return r.ordered?(t.bullet={level:((m=(o=t.bullet)==null?void 0:o.level)!=null?m:-1)+1},console.warn("Please add numbering plugin to support ordered lists. For now, we use only bullets for both the ordered and the unordered list.")):t.bullet={level:((C=(f=t.bullet)==null?void 0:f.level)!=null?C:-1)+1},[...n,...await e(r,t)];case"blockquote":return[...n,...await e(r,t)];case"listItem":return t.checked=r.checked,[...n,...await e(r,t)];case"thematicBreak":return[...n,new I({...r.data,border:{top:{style:k.SINGLE,size:6}}})];case"definition":case"footnoteDefinition":return n;case"table":return console.warn("Please add table plugin to support tables."),n;case"fragment":return[...n,...await e(r,t)];case"":return n;case"yaml":case"html":default:return console.warn(`May be an unsupported node type: ${r.type}`,r),n}}))).flat()};return{...P,children:await e(u,{})}};export{O as a};