foxmd 0.1.0-beta.2 → 0.1.0-beta.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs CHANGED
@@ -1 +1 @@
1
- Object.defineProperty(exports,"__esModule",{value:!0}),require("server-only");var e=require("foxts/lazy-value"),t=require("marked"),s=require("react"),r=require("html-entities"),l=require("foxts/fast-string-array-join"),a=require("fast-escape-regexp");let n=new Map([["bash","shell"],["zsh","shell"],["sh","shell"],["js","javascript"],["ts","typescript"],["py","python"],["yml","yaml"]]),i=/[\u0000-\u001F]/g,o=/[\s!"#$%&'()*+,./:;<=>?@[\\\]^_`{|}~-]+/g,c={};for(let e of[{base:"A",letters:"AⒶA\xc0\xc1\xc2ẦẤẪẨ\xc3ĀĂẰẮẴẲȦǠ\xc4ǞẢ\xc5ǺǍȀȂẠẬẶḀĄȺⱯ"},{base:"AA",letters:"Ꜳ"},{base:"AE",letters:"\xc6ǼǢ"},{base:"AO",letters:"Ꜵ"},{base:"AU",letters:"Ꜷ"},{base:"AV",letters:"ꜸꜺ"},{base:"AY",letters:"Ꜽ"},{base:"B",letters:"BⒷBḂḄḆɃƂƁ"},{base:"C",letters:"CⒸCĆĈĊČ\xc7ḈƇȻꜾ"},{base:"D",letters:"DⒹDḊĎḌḐḒḎĐƋƊƉꝹ"},{base:"DZ",letters:"DZDŽ"},{base:"Dz",letters:"DzDž"},{base:"E",letters:"EⒺE\xc8\xc9\xcaỀẾỄỂẼĒḔḖĔĖ\xcbẺĚȄȆẸỆȨḜĘḘḚƐƎ"},{base:"F",letters:"FⒻFḞƑꝻ"},{base:"G",letters:"GⒼGǴĜḠĞĠǦĢǤƓꞠꝽꝾ"},{base:"H",letters:"HⒽHĤḢḦȞḤḨḪĦⱧⱵꞍ"},{base:"I",letters:"IⒾI\xcc\xcd\xceĨĪĬİ\xcfḮỈǏȈȊỊĮḬƗ"},{base:"J",letters:"JⒿJĴɈ"},{base:"K",letters:"KⓀKḰǨḲĶḴƘⱩꝀꝂꝄꞢ"},{base:"L",letters:"LⓁLĿĹĽḶḸĻḼḺŁȽⱢⱠꝈꝆꞀ"},{base:"LJ",letters:"LJ"},{base:"Lj",letters:"Lj"},{base:"M",letters:"MⓂMḾṀṂⱮƜ"},{base:"N",letters:"NⓃNǸŃ\xd1ṄŇṆŅṊṈȠƝꞐꞤ"},{base:"NJ",letters:"NJ"},{base:"Nj",letters:"Nj"},{base:"O",letters:"OⓄO\xd2\xd3\xd4ỒỐỖỔ\xd5ṌȬṎŌṐṒŎȮȰ\xd6ȪỎŐǑȌȎƠỜỚỠỞỢỌỘǪǬ\xd8ǾƆƟꝊꝌ"},{base:"OI",letters:"Ƣ"},{base:"OO",letters:"Ꝏ"},{base:"OU",letters:"Ȣ"},{base:"OE",letters:"\x8cŒ"},{base:"oe",letters:"\x9cœ"},{base:"P",letters:"PⓅPṔṖƤⱣꝐꝒꝔ"},{base:"Q",letters:"QⓆQꝖꝘɊ"},{base:"R",letters:"RⓇRŔṘŘȐȒṚṜŖṞɌⱤꝚꞦꞂ"},{base:"S",letters:"SⓈSẞŚṤŜṠŠṦṢṨȘŞⱾꞨꞄ"},{base:"T",letters:"TⓉTṪŤṬȚŢṰṮŦƬƮȾꞆ"},{base:"TZ",letters:"Ꜩ"},{base:"U",letters:"UⓊU\xd9\xda\xdbŨṸŪṺŬ\xdcǛǗǕǙỦŮŰǓȔȖƯỪỨỮỬỰỤṲŲṶṴɄ"},{base:"V",letters:"VⓋVṼṾƲꝞɅ"},{base:"VY",letters:"Ꝡ"},{base:"W",letters:"WⓌWẀẂŴẆẄẈⱲ"},{base:"X",letters:"XⓍXẊẌ"},{base:"Y",letters:"YⓎYỲ\xddŶỸȲẎŸỶỴƳɎỾ"},{base:"Z",letters:"ZⓏZŹẐŻŽẒẔƵȤⱿⱫꝢ"},{base:"a",letters:"aⓐaẚ\xe0\xe1\xe2ầấẫẩ\xe3āăằắẵẳȧǡ\xe4ǟả\xe5ǻǎȁȃạậặḁąⱥɐ"},{base:"aa",letters:"ꜳ"},{base:"ae",letters:"\xe6ǽǣ"},{base:"ao",letters:"ꜵ"},{base:"au",letters:"ꜷ"},{base:"av",letters:"ꜹꜻ"},{base:"ay",letters:"ꜽ"},{base:"b",letters:"bⓑbḃḅḇƀƃɓ"},{base:"c",letters:"cⓒcćĉċč\xe7ḉƈȼꜿↄ"},{base:"d",letters:"dⓓdḋďḍḑḓḏđƌɖɗꝺ"},{base:"dz",letters:"dzdž"},{base:"e",letters:"eⓔe\xe8\xe9\xeaềếễểẽēḕḗĕė\xebẻěȅȇẹệȩḝęḙḛɇɛǝ"},{base:"f",letters:"fⓕfḟƒꝼ"},{base:"g",letters:"gⓖgǵĝḡğġǧģǥɠꞡᵹꝿ"},{base:"h",letters:"hⓗhĥḣḧȟḥḩḫẖħⱨⱶɥ"},{base:"hv",letters:"ƕ"},{base:"i",letters:"iⓘi\xec\xed\xeeĩīĭ\xefḯỉǐȉȋịįḭɨı"},{base:"j",letters:"jⓙjĵǰɉ"},{base:"k",letters:"kⓚkḱǩḳķḵƙⱪꝁꝃꝅꞣ"},{base:"l",letters:"lⓛlŀĺľḷḹļḽḻſłƚɫⱡꝉꞁꝇ"},{base:"lj",letters:"lj"},{base:"m",letters:"mⓜmḿṁṃɱɯ"},{base:"n",letters:"nⓝnǹń\xf1ṅňṇņṋṉƞɲʼnꞑꞥ"},{base:"nj",letters:"nj"},{base:"o",letters:"oⓞo\xf2\xf3\xf4ồốỗổ\xf5ṍȭṏōṑṓŏȯȱ\xf6ȫỏőǒȍȏơờớỡởợọộǫǭ\xf8ǿɔꝋꝍɵ"},{base:"oi",letters:"ƣ"},{base:"ou",letters:"ȣ"},{base:"oo",letters:"ꝏ"},{base:"p",letters:"pⓟpṕṗƥᵽꝑꝓꝕ"},{base:"q",letters:"qⓠqɋꝗꝙ"},{base:"r",letters:"rⓡrŕṙřȑȓṛṝŗṟɍɽꝛꞧꞃ"},{base:"s",letters:"sⓢs\xdfśṥŝṡšṧṣṩșşȿꞩꞅẛ"},{base:"t",letters:"tⓣtṫẗťṭțţṱṯŧƭʈⱦꞇ"},{base:"tz",letters:"ꜩ"},{base:"u",letters:"uⓤu\xf9\xfa\xfbũṹūṻŭ\xfcǜǘǖǚủůűǔȕȗưừứữửựụṳųṷṵʉ"},{base:"v",letters:"vⓥvṽṿʋꝟʌ"},{base:"vy",letters:"ꝡ"},{base:"w",letters:"wⓦwẁẃŵẇẅẘẉⱳ"},{base:"x",letters:"xⓧxẋẍ"},{base:"y",letters:"yⓨyỳ\xfdŷỹȳẏ\xffỷẙỵƴɏỿ"},{base:"z",letters:"zⓩzźẑżžẓẕƶȥɀⱬꝣ"}])for(let t of e.letters.split(""))c[t]=e.base;let b=e.lazyValue(()=>new t.Marked);exports.foxmd=function(e,{foxmdRendererOptions:t,markedInstance:d=b(),lexerOptions:u=function(e){return{gfm:!0,breaks:!0,tokenizer:e.defaults.tokenizer}}(d),isInline:p=!1}={}){let m=d.lexer(e,u),h=function(e,{UNSAFE_pickSingleImageChildOutOfParentParagraph:t=!1}={}){let s=new Map;function n(t=[]){e.elIdList.push(0);let s=t.map(t=>{switch(t.type){case"text":return e.incrementElId(),e.text(r.decode(t.text));case"strong":return e.incrementElId(),e.strong(n(t.tokens).jsx);case"em":return e.incrementElId(),e.em(n(t.tokens).jsx);case"del":return e.incrementElId(),e.del(n(t.tokens).jsx);case"codespan":return e.incrementElId(),e.codespan(r.decode(t.text));case"link":return e.incrementElId(),e.link(t.href,n(t.tokens).jsx,t.title??void 0);case"image":return e.incrementElId(),e.image(t.href,t.text,t.title);case"html":return e.incrementElId(),e.html(t.text);case"br":return e.incrementElId(),e.br();case"escape":return e.incrementElId(),e.text(t.text);default:return console.warn(`[foxmd] Token with "${t.type}" type was not found`),null}});return e.elIdList.pop(),{jsx:s,toc:[]}}return{parse:function b(d){let u=[];e.elIdList.push(0);let p=d.map(d=>{switch(d.type){case"space":return null;case"heading":{let t=d.depth,b=function e(t=[]){return l.fastStringArrayJoin(t.map(t=>{switch(t.type){case"text":case"codespan":return r.decode(t.text);case"strong":case"em":case"del":case"link":return e(t.tokens);case"image":case"html":case"br":case"escape":return"";default:return console.warn(`[foxmd] Token with "${t.type}" type was not found`),""}}),"-")}(d.tokens),p=function(e){if("string"!=typeof e)throw TypeError("str must be a string!");let t=a.escapeRegexp("-");return e.replaceAll(/[^\u0000-\u007E]/g,e=>c[e]||e).replaceAll(i,"").replaceAll(o,"-").replaceAll(RegExp(`${t}{2,}`,"g"),"-").replaceAll(RegExp(`^${t}+|${t}+$`,"g"),"").toLowerCase()}(b),m=1;return s.has(p)?(m=s.get(p)+1,s.set(p,m),p=p+"-"+m):s.set(p,m),u.push({text:b,id:p,level:t}),e.incrementElId(),e.heading(n(d.tokens).jsx,t,p)}case"paragraph":if(t&&d.tokens?.length===1&&"image"===d.tokens[0].type)return n(d.tokens).jsx;return e.incrementElId(),e.paragraph(n(d.tokens).jsx);case"text":return d.tokens?n(d.tokens).jsx:d.text;case"blockquote":{let t=b(d.tokens).jsx;return e.incrementElId(),e.blockquote(t)}case"list":{e.elIdList.push(0);let t=d.items.map(t=>{let s=[];return t.task&&(e.incrementElId(),s.push(e.checkbox(t.checked??!1))),s.push(b(t.tokens).jsx),e.incrementElId(),e.listItem(s)});return e.elIdList.pop(),e.incrementElId(),e.list(t,d.ordered,d.ordered?d.start:void 0)}case"code":return e.incrementElId(),e.code(d.text,d.lang);case"html":return e.incrementElId(),e.html(d.text);case"table":{e.elIdList.push(0);let t=d.header.map((t,s)=>e.tableCell(n(t.tokens).jsx,{header:!0,align:d.align[s]}));e.elIdList.pop(),e.incrementElId();let s=e.tableRow(t);e.incrementElId();let r=e.tableHeader(s);e.elIdList.push(0);let l=d.rows.map(t=>{e.elIdList.push(0);let s=t.map((t,s)=>e.tableCell(n(t.tokens).jsx,{header:!1,align:d.align[s]}));return e.elIdList.pop(),e.incrementElId(),e.tableRow(s)});e.elIdList.pop(),e.incrementElId();let a=e.tableBody(l);return e.incrementElId(),e.table([r,a])}case"hr":return e.incrementElId(),e.hr();default:return console.warn(`[foxmd] Token with "${d.type}" type was not found`),null}});return e.elIdList.pop(),{jsx:p,toc:u}},parseInline:n}}(function({suppressHydrationWarning:e=!1,specialImageSizeInTitleOrAlt:t=!0,customRenderMethods:r={},UNSAFE_allowHtml:l=!1}={}){return{...function(e,t,r){let l=[];function a(){return l.join("-")}function i(t,r=null,l={}){let n={key:"foxmd-"+a(),suppressHydrationWarning:e};return s.createElement(t,{...l,...n},r)}return{get elIdList(){return l},get elementId(){return a()},incrementElId(){l[l.length-1]+=1},heading:(e,t,s)=>i(`h${t}`,e,{id:s}),paragraph:e=>i("p",e),link:(e,t,s)=>((e.startsWith("javascript:")||e.startsWith("data:")||e.startsWith("vbscript:"))&&(e=""),i("a",t,{href:e,title:s,target:void 0})),image(e,s,r){let l,a;if(t){if(s.includes("|")){let[e,t]=s.split("|");t&&t.includes("x")&&([l,a]=t.split("x").map(e=>e.trim()),s=e)}(void 0===l||void 0===a)&&r?.includes("size:")&&(r=r.replace(/size:(\d+)x(\d+)/,(e,t,s)=>(l=t,a=s,"")))}return i("img",null,{src:e,alt:s,title:r,width:l,height:a})},codespan:(e,t=null)=>i("code",e,{className:t?`language-${t}`:void 0}),code(e,t=""){return i("pre",this.codespan(e,t),{"data-language":(n.has(t)?n.get(t):t).toUpperCase()})},blockquote:e=>i("blockquote",e),list:(e,t,s)=>i(t?"ol":"ul",e,t&&1!==s?{start:s}:{}),listItem:e=>i("li",e),checkbox:e=>i("input",null,{type:"checkbox",disabled:!0,checked:e}),table:e=>i("table",e),tableHeader:e=>i("thead",e),tableBody:e=>i("tbody",e),tableRow:e=>i("tr",e),tableCell:(e,t)=>i(t.header?"th":"td",e,{align:t.align}),strong:e=>i("strong",e),em:e=>i("em",e),del:e=>i("del",e),text:e=>e,html:e=>r?i("div",null,{dangerouslySetInnerHTML:{__html:e},style:{display:"contents"}}):e,hr:()=>i("hr"),br:()=>i("br")}}(e,t,l),...r}}(t));return p?h.parseInline(m):h.parse(m)};
1
+ Object.defineProperty(exports,"__esModule",{value:!0}),require("server-only");var e=require("foxts/lazy-value"),t=require("marked"),s=require("react"),r=require("html-entities"),l=require("foxts/fast-string-array-join"),a=require("fast-escape-regexp");let n=new Map([["bash","shell"],["zsh","shell"],["sh","shell"],["js","javascript"],["ts","typescript"],["py","python"],["yml","yaml"]]);function i({suppressHydrationWarning:e=!1,specialImageSizeInTitleOrAlt:t=!0,customRenderMethods:r={},UNSAFE_allowHtml:l=!1}={}){return{...function(e,t,r){let l=[];function a(){return l.join("-")}function i(t,r=null,l={}){let n={key:"foxmd-"+a(),suppressHydrationWarning:e};return s.createElement(t,{...l,...n},r)}return{get elIdList(){return l},get elementId(){return a()},incrementElId(){l[l.length-1]+=1},heading:(e,t,s)=>i(`h${t}`,e,{id:s}),paragraph:e=>i("p",e),link:(e,t,s)=>((e.startsWith("javascript:")||e.startsWith("data:")||e.startsWith("vbscript:"))&&(e=""),i("a",t,{href:e,title:s,target:void 0})),image(e,s,r){let l,a;if(t){if(s.includes("|")){let[e,t]=s.split("|");t&&t.includes("x")&&([l,a]=t.split("x").map(e=>e.trim()),s=e)}(void 0===l||void 0===a)&&r?.includes("size:")&&(r=r.replace(/size:(\d+)x(\d+)/,(e,t,s)=>(l=t,a=s,"")))}return i("img",null,{src:e,alt:s,title:r,width:l,height:a})},codespan:(e,t=null)=>i("code",e,{className:t?`language-${t}`:void 0}),code(e,t=""){return i("pre",this.codespan(e,t),{"data-language":(n.has(t)?n.get(t):t).toUpperCase()})},blockquote:e=>i("blockquote",e),list:(e,t,s)=>i(t?"ol":"ul",e,t&&1!==s?{start:s}:{}),listItem:e=>i("li",e),checkbox:e=>i("input",null,{type:"checkbox",disabled:!0,checked:e}),table:e=>i("table",e),tableHeader:e=>i("thead",e),tableBody:e=>i("tbody",e),tableRow:e=>i("tr",e),tableCell:(e,t)=>i(t.header?"th":"td",e,{align:t.align}),strong:e=>i("strong",e),em:e=>i("em",e),del:e=>i("del",e),text:e=>e,html:e=>r?i("div",null,{dangerouslySetInnerHTML:{__html:e},style:{display:"contents"}}):e,hr:()=>i("hr"),br:()=>i("br")}}(e,t,l),...r}}let o=/[\u0000-\u001F]/g,c=/[\s!"#$%&'()*+,./:;<=>?@[\\\]^_`{|}~-]+/g,b={};for(let e of[{base:"A",letters:"AⒶA\xc0\xc1\xc2ẦẤẪẨ\xc3ĀĂẰẮẴẲȦǠ\xc4ǞẢ\xc5ǺǍȀȂẠẬẶḀĄȺⱯ"},{base:"AA",letters:"Ꜳ"},{base:"AE",letters:"\xc6ǼǢ"},{base:"AO",letters:"Ꜵ"},{base:"AU",letters:"Ꜷ"},{base:"AV",letters:"ꜸꜺ"},{base:"AY",letters:"Ꜽ"},{base:"B",letters:"BⒷBḂḄḆɃƂƁ"},{base:"C",letters:"CⒸCĆĈĊČ\xc7ḈƇȻꜾ"},{base:"D",letters:"DⒹDḊĎḌḐḒḎĐƋƊƉꝹ"},{base:"DZ",letters:"DZDŽ"},{base:"Dz",letters:"DzDž"},{base:"E",letters:"EⒺE\xc8\xc9\xcaỀẾỄỂẼĒḔḖĔĖ\xcbẺĚȄȆẸỆȨḜĘḘḚƐƎ"},{base:"F",letters:"FⒻFḞƑꝻ"},{base:"G",letters:"GⒼGǴĜḠĞĠǦĢǤƓꞠꝽꝾ"},{base:"H",letters:"HⒽHĤḢḦȞḤḨḪĦⱧⱵꞍ"},{base:"I",letters:"IⒾI\xcc\xcd\xceĨĪĬİ\xcfḮỈǏȈȊỊĮḬƗ"},{base:"J",letters:"JⒿJĴɈ"},{base:"K",letters:"KⓀKḰǨḲĶḴƘⱩꝀꝂꝄꞢ"},{base:"L",letters:"LⓁLĿĹĽḶḸĻḼḺŁȽⱢⱠꝈꝆꞀ"},{base:"LJ",letters:"LJ"},{base:"Lj",letters:"Lj"},{base:"M",letters:"MⓂMḾṀṂⱮƜ"},{base:"N",letters:"NⓃNǸŃ\xd1ṄŇṆŅṊṈȠƝꞐꞤ"},{base:"NJ",letters:"NJ"},{base:"Nj",letters:"Nj"},{base:"O",letters:"OⓄO\xd2\xd3\xd4ỒỐỖỔ\xd5ṌȬṎŌṐṒŎȮȰ\xd6ȪỎŐǑȌȎƠỜỚỠỞỢỌỘǪǬ\xd8ǾƆƟꝊꝌ"},{base:"OI",letters:"Ƣ"},{base:"OO",letters:"Ꝏ"},{base:"OU",letters:"Ȣ"},{base:"OE",letters:"\x8cŒ"},{base:"oe",letters:"\x9cœ"},{base:"P",letters:"PⓅPṔṖƤⱣꝐꝒꝔ"},{base:"Q",letters:"QⓆQꝖꝘɊ"},{base:"R",letters:"RⓇRŔṘŘȐȒṚṜŖṞɌⱤꝚꞦꞂ"},{base:"S",letters:"SⓈSẞŚṤŜṠŠṦṢṨȘŞⱾꞨꞄ"},{base:"T",letters:"TⓉTṪŤṬȚŢṰṮŦƬƮȾꞆ"},{base:"TZ",letters:"Ꜩ"},{base:"U",letters:"UⓊU\xd9\xda\xdbŨṸŪṺŬ\xdcǛǗǕǙỦŮŰǓȔȖƯỪỨỮỬỰỤṲŲṶṴɄ"},{base:"V",letters:"VⓋVṼṾƲꝞɅ"},{base:"VY",letters:"Ꝡ"},{base:"W",letters:"WⓌWẀẂŴẆẄẈⱲ"},{base:"X",letters:"XⓍXẊẌ"},{base:"Y",letters:"YⓎYỲ\xddŶỸȲẎŸỶỴƳɎỾ"},{base:"Z",letters:"ZⓏZŹẐŻŽẒẔƵȤⱿⱫꝢ"},{base:"a",letters:"aⓐaẚ\xe0\xe1\xe2ầấẫẩ\xe3āăằắẵẳȧǡ\xe4ǟả\xe5ǻǎȁȃạậặḁąⱥɐ"},{base:"aa",letters:"ꜳ"},{base:"ae",letters:"\xe6ǽǣ"},{base:"ao",letters:"ꜵ"},{base:"au",letters:"ꜷ"},{base:"av",letters:"ꜹꜻ"},{base:"ay",letters:"ꜽ"},{base:"b",letters:"bⓑbḃḅḇƀƃɓ"},{base:"c",letters:"cⓒcćĉċč\xe7ḉƈȼꜿↄ"},{base:"d",letters:"dⓓdḋďḍḑḓḏđƌɖɗꝺ"},{base:"dz",letters:"dzdž"},{base:"e",letters:"eⓔe\xe8\xe9\xeaềếễểẽēḕḗĕė\xebẻěȅȇẹệȩḝęḙḛɇɛǝ"},{base:"f",letters:"fⓕfḟƒꝼ"},{base:"g",letters:"gⓖgǵĝḡğġǧģǥɠꞡᵹꝿ"},{base:"h",letters:"hⓗhĥḣḧȟḥḩḫẖħⱨⱶɥ"},{base:"hv",letters:"ƕ"},{base:"i",letters:"iⓘi\xec\xed\xeeĩīĭ\xefḯỉǐȉȋịįḭɨı"},{base:"j",letters:"jⓙjĵǰɉ"},{base:"k",letters:"kⓚkḱǩḳķḵƙⱪꝁꝃꝅꞣ"},{base:"l",letters:"lⓛlŀĺľḷḹļḽḻſłƚɫⱡꝉꞁꝇ"},{base:"lj",letters:"lj"},{base:"m",letters:"mⓜmḿṁṃɱɯ"},{base:"n",letters:"nⓝnǹń\xf1ṅňṇņṋṉƞɲʼnꞑꞥ"},{base:"nj",letters:"nj"},{base:"o",letters:"oⓞo\xf2\xf3\xf4ồốỗổ\xf5ṍȭṏōṑṓŏȯȱ\xf6ȫỏőǒȍȏơờớỡởợọộǫǭ\xf8ǿɔꝋꝍɵ"},{base:"oi",letters:"ƣ"},{base:"ou",letters:"ȣ"},{base:"oo",letters:"ꝏ"},{base:"p",letters:"pⓟpṕṗƥᵽꝑꝓꝕ"},{base:"q",letters:"qⓠqɋꝗꝙ"},{base:"r",letters:"rⓡrŕṙřȑȓṛṝŗṟɍɽꝛꞧꞃ"},{base:"s",letters:"sⓢs\xdfśṥŝṡšṧṣṩșşȿꞩꞅẛ"},{base:"t",letters:"tⓣtṫẗťṭțţṱṯŧƭʈⱦꞇ"},{base:"tz",letters:"ꜩ"},{base:"u",letters:"uⓤu\xf9\xfa\xfbũṹūṻŭ\xfcǜǘǖǚủůűǔȕȗưừứữửựụṳųṷṵʉ"},{base:"v",letters:"vⓥvṽṿʋꝟʌ"},{base:"vy",letters:"ꝡ"},{base:"w",letters:"wⓦwẁẃŵẇẅẘẉⱳ"},{base:"x",letters:"xⓧxẋẍ"},{base:"y",letters:"yⓨyỳ\xfdŷỹȳẏ\xffỷẙỵƴɏỿ"},{base:"z",letters:"zⓩzźẑżžẓẕƶȥɀⱬꝣ"}])for(let t of e.letters.split(""))b[t]=e.base;function d(e,{UNSAFE_pickSingleImageChildOutOfParentParagraph:t=!1}={}){let s=new Map;function n(t=[]){e.elIdList.push(0);let s=t.map(t=>{switch(t.type){case"text":return e.incrementElId(),e.text(r.decode(t.text));case"strong":return e.incrementElId(),e.strong(n(t.tokens).jsx);case"em":return e.incrementElId(),e.em(n(t.tokens).jsx);case"del":return e.incrementElId(),e.del(n(t.tokens).jsx);case"codespan":return e.incrementElId(),e.codespan(r.decode(t.text));case"link":return e.incrementElId(),e.link(t.href,n(t.tokens).jsx,t.title??void 0);case"image":return e.incrementElId(),e.image(t.href,t.text,t.title);case"html":return e.incrementElId(),e.html(t.text);case"br":return e.incrementElId(),e.br();case"escape":return e.incrementElId(),e.text(t.text);default:return console.warn(`[foxmd] Token with "${t.type}" type was not found`),null}});return e.elIdList.pop(),{jsx:s,toc:[]}}return{parse:function i(d){let u=[];e.elIdList.push(0);let p=d.map(d=>{switch(d.type){case"space":return null;case"heading":{let t=d.depth,i=function e(t=[]){return l.fastStringArrayJoin(t.map(t=>{switch(t.type){case"text":case"codespan":return r.decode(t.text);case"strong":case"em":case"del":case"link":return e(t.tokens);case"image":case"html":case"br":case"escape":return"";default:return console.warn(`[foxmd] Token with "${t.type}" type was not found`),""}}),"-")}(d.tokens),p=function(e){if("string"!=typeof e)throw TypeError("str must be a string!");let t=a.escapeRegexp("-");return e.replaceAll(/[^\u0000-\u007E]/g,e=>b[e]||e).replaceAll(o,"").replaceAll(c,"-").replaceAll(RegExp(`${t}{2,}`,"g"),"-").replaceAll(RegExp(`^${t}+|${t}+$`,"g"),"").toLowerCase()}(i),m=1;return s.has(p)?(m=s.get(p)+1,s.set(p,m),p=p+"-"+m):s.set(p,m),u.push({text:i,id:p,level:t}),e.incrementElId(),e.heading(n(d.tokens).jsx,t,p)}case"paragraph":if(t&&d.tokens?.length===1&&"image"===d.tokens[0].type)return n(d.tokens).jsx;return e.incrementElId(),e.paragraph(n(d.tokens).jsx);case"text":return d.tokens?n(d.tokens).jsx:d.text;case"blockquote":{let t=i(d.tokens).jsx;return e.incrementElId(),e.blockquote(t)}case"list":{e.elIdList.push(0);let t=d.items.map(t=>{let s=[];return t.task&&(e.incrementElId(),s.push(e.checkbox(t.checked??!1))),s.push(i(t.tokens).jsx),e.incrementElId(),e.listItem(s)});return e.elIdList.pop(),e.incrementElId(),e.list(t,d.ordered,d.ordered?d.start:void 0)}case"code":return e.incrementElId(),e.code(d.text,d.lang);case"html":return e.incrementElId(),e.html(d.text);case"table":{e.elIdList.push(0);let t=d.header.map((t,s)=>e.tableCell(n(t.tokens).jsx,{header:!0,align:d.align[s]}));e.elIdList.pop(),e.incrementElId();let s=e.tableRow(t);e.incrementElId();let r=e.tableHeader(s);e.elIdList.push(0);let l=d.rows.map(t=>{e.elIdList.push(0);let s=t.map((t,s)=>e.tableCell(n(t.tokens).jsx,{header:!1,align:d.align[s]}));return e.elIdList.pop(),e.incrementElId(),e.tableRow(s)});e.elIdList.pop(),e.incrementElId();let a=e.tableBody(l);return e.incrementElId(),e.table([r,a])}case"hr":return e.incrementElId(),e.hr();default:return console.warn(`[foxmd] Token with "${d.type}" type was not found`),null}});return e.elIdList.pop(),{jsx:p,toc:u}},parseInline:n}}let u=e.lazyValue(()=>new t.Marked);exports.createFoxmdParser=d,exports.createFoxmdRenderer=i,exports.foxmd=function(e,{foxmdRendererOptions:t,foxmdParserOptions:s,markedInstance:r=u(),lexerOptions:l=function(e){return{gfm:!0,breaks:!0,tokenizer:e.defaults.tokenizer}}(r),isInline:a=!1}={}){let n=r.lexer(e,l),o=d(i(t),s);return a?o.parseInline(n):o.parse(n)};
package/dist/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
+ import { Token, Marked, MarkedOptions } from 'marked';
1
2
  import React, { ReactNode } from 'react';
2
- import { Marked, MarkedOptions } from 'marked';
3
3
 
4
4
  type HeadingLevels = 1 | 2 | 3 | 4 | 5 | 6;
5
5
  interface TableFlags {
@@ -40,6 +40,33 @@ declare function createInternalFoxmdRenderer(suppressHydrationWarning: boolean,
40
40
  hr(): ReactNode;
41
41
  br(): ReactNode;
42
42
  };
43
+ declare function createFoxmdRenderer({ suppressHydrationWarning, specialImageSizeInTitleOrAlt, customRenderMethods, UNSAFE_allowHtml }?: FoxmdRendererOptions): {
44
+ heading: (children: ReactNode, level: HeadingLevels, id?: string) => ReactNode;
45
+ paragraph: (children: ReactNode) => ReactNode;
46
+ link: (href: string, text: ReactNode, title?: string) => ReactNode;
47
+ image: (src: string, alt: string, title?: string) => ReactNode;
48
+ codespan: (code: ReactNode, lang?: string | null) => ReactNode;
49
+ code: (code: ReactNode, lang?: string | undefined) => ReactNode;
50
+ blockquote: (children: ReactNode) => ReactNode;
51
+ list: (children: ReactNode, ordered: boolean, start: number | undefined) => ReactNode;
52
+ listItem: (children: ReactNode[]) => ReactNode;
53
+ checkbox: (checked: boolean | undefined) => ReactNode;
54
+ table: (children: ReactNode[]) => ReactNode;
55
+ tableHeader: (children: ReactNode) => ReactNode;
56
+ tableBody: (children: ReactNode[]) => ReactNode;
57
+ tableRow: (children: ReactNode[]) => ReactNode;
58
+ tableCell: (children: ReactNode[], flags: TableFlags) => ReactNode;
59
+ strong: (children: ReactNode) => ReactNode;
60
+ em: (children: ReactNode) => ReactNode;
61
+ del: (children: ReactNode) => ReactNode;
62
+ text: (text: ReactNode) => ReactNode;
63
+ html: (html: string) => ReactNode;
64
+ hr: () => ReactNode;
65
+ br: () => ReactNode;
66
+ elIdList: number[];
67
+ elementId: string;
68
+ incrementElId(): void;
69
+ };
43
70
  type FoxmdRenderer = ReturnType<typeof createInternalFoxmdRenderer>;
44
71
 
45
72
  interface FoxmdParserParseResult {
@@ -50,14 +77,22 @@ interface FoxmdParserParseResult {
50
77
  level: number;
51
78
  }>;
52
79
  }
80
+ interface FoxmdParserOptions {
81
+ UNSAFE_pickSingleImageChildOutOfParentParagraph?: boolean;
82
+ }
83
+ declare function createFoxmdParser(renderer: FoxmdRenderer, { UNSAFE_pickSingleImageChildOutOfParentParagraph }?: FoxmdParserOptions): {
84
+ parse: (tokens: Token[]) => FoxmdParserParseResult;
85
+ parseInline: (tokens?: Token[]) => FoxmdParserParseResult;
86
+ };
53
87
 
54
88
  interface FoxmdOptions {
55
89
  foxmdRendererOptions?: FoxmdRendererOptions;
90
+ foxmdParserOptions?: FoxmdParserOptions;
56
91
  markedInstance?: Marked;
57
92
  lexerOptions?: MarkedOptions;
58
93
  isInline?: boolean;
59
94
  }
60
- declare function foxmd(markdownString: string, { foxmdRendererOptions, markedInstance, lexerOptions, isInline }?: FoxmdOptions): FoxmdParserParseResult;
95
+ declare function foxmd(markdownString: string, { foxmdRendererOptions, foxmdParserOptions, markedInstance, lexerOptions, isInline }?: FoxmdOptions): FoxmdParserParseResult;
61
96
 
62
- export { foxmd };
63
- export type { FoxmdOptions };
97
+ export { createFoxmdParser, createFoxmdRenderer, foxmd };
98
+ export type { FoxmdOptions, FoxmdParserOptions, FoxmdRendererOptions };
package/dist/index.mjs CHANGED
@@ -1 +1 @@
1
- import"server-only";import{lazyValue as e}from"foxts/lazy-value";import{Marked as t}from"marked";import{createElement as s}from"react";import{decode as r}from"html-entities";import{fastStringArrayJoin as l}from"foxts/fast-string-array-join";import{escapeRegexp as a}from"fast-escape-regexp";let n=new Map([["bash","shell"],["zsh","shell"],["sh","shell"],["js","javascript"],["ts","typescript"],["py","python"],["yml","yaml"]]),o=/[\u0000-\u001F]/g,i=/[\s!"#$%&'()*+,./:;<=>?@[\\\]^_`{|}~-]+/g,b={};for(let e of[{base:"A",letters:"AⒶA\xc0\xc1\xc2ẦẤẪẨ\xc3ĀĂẰẮẴẲȦǠ\xc4ǞẢ\xc5ǺǍȀȂẠẬẶḀĄȺⱯ"},{base:"AA",letters:"Ꜳ"},{base:"AE",letters:"\xc6ǼǢ"},{base:"AO",letters:"Ꜵ"},{base:"AU",letters:"Ꜷ"},{base:"AV",letters:"ꜸꜺ"},{base:"AY",letters:"Ꜽ"},{base:"B",letters:"BⒷBḂḄḆɃƂƁ"},{base:"C",letters:"CⒸCĆĈĊČ\xc7ḈƇȻꜾ"},{base:"D",letters:"DⒹDḊĎḌḐḒḎĐƋƊƉꝹ"},{base:"DZ",letters:"DZDŽ"},{base:"Dz",letters:"DzDž"},{base:"E",letters:"EⒺE\xc8\xc9\xcaỀẾỄỂẼĒḔḖĔĖ\xcbẺĚȄȆẸỆȨḜĘḘḚƐƎ"},{base:"F",letters:"FⒻFḞƑꝻ"},{base:"G",letters:"GⒼGǴĜḠĞĠǦĢǤƓꞠꝽꝾ"},{base:"H",letters:"HⒽHĤḢḦȞḤḨḪĦⱧⱵꞍ"},{base:"I",letters:"IⒾI\xcc\xcd\xceĨĪĬİ\xcfḮỈǏȈȊỊĮḬƗ"},{base:"J",letters:"JⒿJĴɈ"},{base:"K",letters:"KⓀKḰǨḲĶḴƘⱩꝀꝂꝄꞢ"},{base:"L",letters:"LⓁLĿĹĽḶḸĻḼḺŁȽⱢⱠꝈꝆꞀ"},{base:"LJ",letters:"LJ"},{base:"Lj",letters:"Lj"},{base:"M",letters:"MⓂMḾṀṂⱮƜ"},{base:"N",letters:"NⓃNǸŃ\xd1ṄŇṆŅṊṈȠƝꞐꞤ"},{base:"NJ",letters:"NJ"},{base:"Nj",letters:"Nj"},{base:"O",letters:"OⓄO\xd2\xd3\xd4ỒỐỖỔ\xd5ṌȬṎŌṐṒŎȮȰ\xd6ȪỎŐǑȌȎƠỜỚỠỞỢỌỘǪǬ\xd8ǾƆƟꝊꝌ"},{base:"OI",letters:"Ƣ"},{base:"OO",letters:"Ꝏ"},{base:"OU",letters:"Ȣ"},{base:"OE",letters:"\x8cŒ"},{base:"oe",letters:"\x9cœ"},{base:"P",letters:"PⓅPṔṖƤⱣꝐꝒꝔ"},{base:"Q",letters:"QⓆQꝖꝘɊ"},{base:"R",letters:"RⓇRŔṘŘȐȒṚṜŖṞɌⱤꝚꞦꞂ"},{base:"S",letters:"SⓈSẞŚṤŜṠŠṦṢṨȘŞⱾꞨꞄ"},{base:"T",letters:"TⓉTṪŤṬȚŢṰṮŦƬƮȾꞆ"},{base:"TZ",letters:"Ꜩ"},{base:"U",letters:"UⓊU\xd9\xda\xdbŨṸŪṺŬ\xdcǛǗǕǙỦŮŰǓȔȖƯỪỨỮỬỰỤṲŲṶṴɄ"},{base:"V",letters:"VⓋVṼṾƲꝞɅ"},{base:"VY",letters:"Ꝡ"},{base:"W",letters:"WⓌWẀẂŴẆẄẈⱲ"},{base:"X",letters:"XⓍXẊẌ"},{base:"Y",letters:"YⓎYỲ\xddŶỸȲẎŸỶỴƳɎỾ"},{base:"Z",letters:"ZⓏZŹẐŻŽẒẔƵȤⱿⱫꝢ"},{base:"a",letters:"aⓐaẚ\xe0\xe1\xe2ầấẫẩ\xe3āăằắẵẳȧǡ\xe4ǟả\xe5ǻǎȁȃạậặḁąⱥɐ"},{base:"aa",letters:"ꜳ"},{base:"ae",letters:"\xe6ǽǣ"},{base:"ao",letters:"ꜵ"},{base:"au",letters:"ꜷ"},{base:"av",letters:"ꜹꜻ"},{base:"ay",letters:"ꜽ"},{base:"b",letters:"bⓑbḃḅḇƀƃɓ"},{base:"c",letters:"cⓒcćĉċč\xe7ḉƈȼꜿↄ"},{base:"d",letters:"dⓓdḋďḍḑḓḏđƌɖɗꝺ"},{base:"dz",letters:"dzdž"},{base:"e",letters:"eⓔe\xe8\xe9\xeaềếễểẽēḕḗĕė\xebẻěȅȇẹệȩḝęḙḛɇɛǝ"},{base:"f",letters:"fⓕfḟƒꝼ"},{base:"g",letters:"gⓖgǵĝḡğġǧģǥɠꞡᵹꝿ"},{base:"h",letters:"hⓗhĥḣḧȟḥḩḫẖħⱨⱶɥ"},{base:"hv",letters:"ƕ"},{base:"i",letters:"iⓘi\xec\xed\xeeĩīĭ\xefḯỉǐȉȋịįḭɨı"},{base:"j",letters:"jⓙjĵǰɉ"},{base:"k",letters:"kⓚkḱǩḳķḵƙⱪꝁꝃꝅꞣ"},{base:"l",letters:"lⓛlŀĺľḷḹļḽḻſłƚɫⱡꝉꞁꝇ"},{base:"lj",letters:"lj"},{base:"m",letters:"mⓜmḿṁṃɱɯ"},{base:"n",letters:"nⓝnǹń\xf1ṅňṇņṋṉƞɲʼnꞑꞥ"},{base:"nj",letters:"nj"},{base:"o",letters:"oⓞo\xf2\xf3\xf4ồốỗổ\xf5ṍȭṏōṑṓŏȯȱ\xf6ȫỏőǒȍȏơờớỡởợọộǫǭ\xf8ǿɔꝋꝍɵ"},{base:"oi",letters:"ƣ"},{base:"ou",letters:"ȣ"},{base:"oo",letters:"ꝏ"},{base:"p",letters:"pⓟpṕṗƥᵽꝑꝓꝕ"},{base:"q",letters:"qⓠqɋꝗꝙ"},{base:"r",letters:"rⓡrŕṙřȑȓṛṝŗṟɍɽꝛꞧꞃ"},{base:"s",letters:"sⓢs\xdfśṥŝṡšṧṣṩșşȿꞩꞅẛ"},{base:"t",letters:"tⓣtṫẗťṭțţṱṯŧƭʈⱦꞇ"},{base:"tz",letters:"ꜩ"},{base:"u",letters:"uⓤu\xf9\xfa\xfbũṹūṻŭ\xfcǜǘǖǚủůűǔȕȗưừứữửựụṳųṷṵʉ"},{base:"v",letters:"vⓥvṽṿʋꝟʌ"},{base:"vy",letters:"ꝡ"},{base:"w",letters:"wⓦwẁẃŵẇẅẘẉⱳ"},{base:"x",letters:"xⓧxẋẍ"},{base:"y",letters:"yⓨyỳ\xfdŷỹȳẏ\xffỷẙỵƴɏỿ"},{base:"z",letters:"zⓩzźẑżžẓẕƶȥɀⱬꝣ"}])for(let t of e.letters.split(""))b[t]=e.base;let c=e(()=>new t);function d(e,{foxmdRendererOptions:t,markedInstance:u=c(),lexerOptions:p=function(e){return{gfm:!0,breaks:!0,tokenizer:e.defaults.tokenizer}}(u),isInline:m=!1}={}){let h=u.lexer(e,p),g=function(e,{UNSAFE_pickSingleImageChildOutOfParentParagraph:t=!1}={}){let s=new Map;function n(t=[]){e.elIdList.push(0);let s=t.map(t=>{switch(t.type){case"text":return e.incrementElId(),e.text(r(t.text));case"strong":return e.incrementElId(),e.strong(n(t.tokens).jsx);case"em":return e.incrementElId(),e.em(n(t.tokens).jsx);case"del":return e.incrementElId(),e.del(n(t.tokens).jsx);case"codespan":return e.incrementElId(),e.codespan(r(t.text));case"link":return e.incrementElId(),e.link(t.href,n(t.tokens).jsx,t.title??void 0);case"image":return e.incrementElId(),e.image(t.href,t.text,t.title);case"html":return e.incrementElId(),e.html(t.text);case"br":return e.incrementElId(),e.br();case"escape":return e.incrementElId(),e.text(t.text);default:return console.warn(`[foxmd] Token with "${t.type}" type was not found`),null}});return e.elIdList.pop(),{jsx:s,toc:[]}}return{parse:function c(d){let u=[];e.elIdList.push(0);let p=d.map(d=>{switch(d.type){case"space":return null;case"heading":{let t=d.depth,c=function e(t=[]){return l(t.map(t=>{switch(t.type){case"text":case"codespan":return r(t.text);case"strong":case"em":case"del":case"link":return e(t.tokens);case"image":case"html":case"br":case"escape":return"";default:return console.warn(`[foxmd] Token with "${t.type}" type was not found`),""}}),"-")}(d.tokens),p=function(e){if("string"!=typeof e)throw TypeError("str must be a string!");let t=a("-");return e.replaceAll(/[^\u0000-\u007E]/g,e=>b[e]||e).replaceAll(o,"").replaceAll(i,"-").replaceAll(RegExp(`${t}{2,}`,"g"),"-").replaceAll(RegExp(`^${t}+|${t}+$`,"g"),"").toLowerCase()}(c),m=1;return s.has(p)?(m=s.get(p)+1,s.set(p,m),p=p+"-"+m):s.set(p,m),u.push({text:c,id:p,level:t}),e.incrementElId(),e.heading(n(d.tokens).jsx,t,p)}case"paragraph":if(t&&d.tokens?.length===1&&"image"===d.tokens[0].type)return n(d.tokens).jsx;return e.incrementElId(),e.paragraph(n(d.tokens).jsx);case"text":return d.tokens?n(d.tokens).jsx:d.text;case"blockquote":{let t=c(d.tokens).jsx;return e.incrementElId(),e.blockquote(t)}case"list":{e.elIdList.push(0);let t=d.items.map(t=>{let s=[];return t.task&&(e.incrementElId(),s.push(e.checkbox(t.checked??!1))),s.push(c(t.tokens).jsx),e.incrementElId(),e.listItem(s)});return e.elIdList.pop(),e.incrementElId(),e.list(t,d.ordered,d.ordered?d.start:void 0)}case"code":return e.incrementElId(),e.code(d.text,d.lang);case"html":return e.incrementElId(),e.html(d.text);case"table":{e.elIdList.push(0);let t=d.header.map((t,s)=>e.tableCell(n(t.tokens).jsx,{header:!0,align:d.align[s]}));e.elIdList.pop(),e.incrementElId();let s=e.tableRow(t);e.incrementElId();let r=e.tableHeader(s);e.elIdList.push(0);let l=d.rows.map(t=>{e.elIdList.push(0);let s=t.map((t,s)=>e.tableCell(n(t.tokens).jsx,{header:!1,align:d.align[s]}));return e.elIdList.pop(),e.incrementElId(),e.tableRow(s)});e.elIdList.pop(),e.incrementElId();let a=e.tableBody(l);return e.incrementElId(),e.table([r,a])}case"hr":return e.incrementElId(),e.hr();default:return console.warn(`[foxmd] Token with "${d.type}" type was not found`),null}});return e.elIdList.pop(),{jsx:p,toc:u}},parseInline:n}}(function({suppressHydrationWarning:e=!1,specialImageSizeInTitleOrAlt:t=!0,customRenderMethods:r={},UNSAFE_allowHtml:l=!1}={}){return{...function(e,t,r){let l=[];function a(){return l.join("-")}function o(t,r=null,l={}){let n={key:"foxmd-"+a(),suppressHydrationWarning:e};return s(t,{...l,...n},r)}return{get elIdList(){return l},get elementId(){return a()},incrementElId(){l[l.length-1]+=1},heading:(e,t,s)=>o(`h${t}`,e,{id:s}),paragraph:e=>o("p",e),link:(e,t,s)=>((e.startsWith("javascript:")||e.startsWith("data:")||e.startsWith("vbscript:"))&&(e=""),o("a",t,{href:e,title:s,target:void 0})),image(e,s,r){let l,a;if(t){if(s.includes("|")){let[e,t]=s.split("|");t&&t.includes("x")&&([l,a]=t.split("x").map(e=>e.trim()),s=e)}(void 0===l||void 0===a)&&r?.includes("size:")&&(r=r.replace(/size:(\d+)x(\d+)/,(e,t,s)=>(l=t,a=s,"")))}return o("img",null,{src:e,alt:s,title:r,width:l,height:a})},codespan:(e,t=null)=>o("code",e,{className:t?`language-${t}`:void 0}),code(e,t=""){return o("pre",this.codespan(e,t),{"data-language":(n.has(t)?n.get(t):t).toUpperCase()})},blockquote:e=>o("blockquote",e),list:(e,t,s)=>o(t?"ol":"ul",e,t&&1!==s?{start:s}:{}),listItem:e=>o("li",e),checkbox:e=>o("input",null,{type:"checkbox",disabled:!0,checked:e}),table:e=>o("table",e),tableHeader:e=>o("thead",e),tableBody:e=>o("tbody",e),tableRow:e=>o("tr",e),tableCell:(e,t)=>o(t.header?"th":"td",e,{align:t.align}),strong:e=>o("strong",e),em:e=>o("em",e),del:e=>o("del",e),text:e=>e,html:e=>r?o("div",null,{dangerouslySetInnerHTML:{__html:e},style:{display:"contents"}}):e,hr:()=>o("hr"),br:()=>o("br")}}(e,t,l),...r}}(t));return m?g.parseInline(h):g.parse(h)}export{d as foxmd};
1
+ import"server-only";import{lazyValue as e}from"foxts/lazy-value";import{Marked as t}from"marked";import{createElement as s}from"react";import{decode as r}from"html-entities";import{fastStringArrayJoin as l}from"foxts/fast-string-array-join";import{escapeRegexp as a}from"fast-escape-regexp";let n=new Map([["bash","shell"],["zsh","shell"],["sh","shell"],["js","javascript"],["ts","typescript"],["py","python"],["yml","yaml"]]);function o({suppressHydrationWarning:e=!1,specialImageSizeInTitleOrAlt:t=!0,customRenderMethods:r={},UNSAFE_allowHtml:l=!1}={}){return{...function(e,t,r){let l=[];function a(){return l.join("-")}function o(t,r=null,l={}){let n={key:"foxmd-"+a(),suppressHydrationWarning:e};return s(t,{...l,...n},r)}return{get elIdList(){return l},get elementId(){return a()},incrementElId(){l[l.length-1]+=1},heading:(e,t,s)=>o(`h${t}`,e,{id:s}),paragraph:e=>o("p",e),link:(e,t,s)=>((e.startsWith("javascript:")||e.startsWith("data:")||e.startsWith("vbscript:"))&&(e=""),o("a",t,{href:e,title:s,target:void 0})),image(e,s,r){let l,a;if(t){if(s.includes("|")){let[e,t]=s.split("|");t&&t.includes("x")&&([l,a]=t.split("x").map(e=>e.trim()),s=e)}(void 0===l||void 0===a)&&r?.includes("size:")&&(r=r.replace(/size:(\d+)x(\d+)/,(e,t,s)=>(l=t,a=s,"")))}return o("img",null,{src:e,alt:s,title:r,width:l,height:a})},codespan:(e,t=null)=>o("code",e,{className:t?`language-${t}`:void 0}),code(e,t=""){return o("pre",this.codespan(e,t),{"data-language":(n.has(t)?n.get(t):t).toUpperCase()})},blockquote:e=>o("blockquote",e),list:(e,t,s)=>o(t?"ol":"ul",e,t&&1!==s?{start:s}:{}),listItem:e=>o("li",e),checkbox:e=>o("input",null,{type:"checkbox",disabled:!0,checked:e}),table:e=>o("table",e),tableHeader:e=>o("thead",e),tableBody:e=>o("tbody",e),tableRow:e=>o("tr",e),tableCell:(e,t)=>o(t.header?"th":"td",e,{align:t.align}),strong:e=>o("strong",e),em:e=>o("em",e),del:e=>o("del",e),text:e=>e,html:e=>r?o("div",null,{dangerouslySetInnerHTML:{__html:e},style:{display:"contents"}}):e,hr:()=>o("hr"),br:()=>o("br")}}(e,t,l),...r}}let i=/[\u0000-\u001F]/g,b=/[\s!"#$%&'()*+,./:;<=>?@[\\\]^_`{|}~-]+/g,c={};for(let e of[{base:"A",letters:"AⒶA\xc0\xc1\xc2ẦẤẪẨ\xc3ĀĂẰẮẴẲȦǠ\xc4ǞẢ\xc5ǺǍȀȂẠẬẶḀĄȺⱯ"},{base:"AA",letters:"Ꜳ"},{base:"AE",letters:"\xc6ǼǢ"},{base:"AO",letters:"Ꜵ"},{base:"AU",letters:"Ꜷ"},{base:"AV",letters:"ꜸꜺ"},{base:"AY",letters:"Ꜽ"},{base:"B",letters:"BⒷBḂḄḆɃƂƁ"},{base:"C",letters:"CⒸCĆĈĊČ\xc7ḈƇȻꜾ"},{base:"D",letters:"DⒹDḊĎḌḐḒḎĐƋƊƉꝹ"},{base:"DZ",letters:"DZDŽ"},{base:"Dz",letters:"DzDž"},{base:"E",letters:"EⒺE\xc8\xc9\xcaỀẾỄỂẼĒḔḖĔĖ\xcbẺĚȄȆẸỆȨḜĘḘḚƐƎ"},{base:"F",letters:"FⒻFḞƑꝻ"},{base:"G",letters:"GⒼGǴĜḠĞĠǦĢǤƓꞠꝽꝾ"},{base:"H",letters:"HⒽHĤḢḦȞḤḨḪĦⱧⱵꞍ"},{base:"I",letters:"IⒾI\xcc\xcd\xceĨĪĬİ\xcfḮỈǏȈȊỊĮḬƗ"},{base:"J",letters:"JⒿJĴɈ"},{base:"K",letters:"KⓀKḰǨḲĶḴƘⱩꝀꝂꝄꞢ"},{base:"L",letters:"LⓁLĿĹĽḶḸĻḼḺŁȽⱢⱠꝈꝆꞀ"},{base:"LJ",letters:"LJ"},{base:"Lj",letters:"Lj"},{base:"M",letters:"MⓂMḾṀṂⱮƜ"},{base:"N",letters:"NⓃNǸŃ\xd1ṄŇṆŅṊṈȠƝꞐꞤ"},{base:"NJ",letters:"NJ"},{base:"Nj",letters:"Nj"},{base:"O",letters:"OⓄO\xd2\xd3\xd4ỒỐỖỔ\xd5ṌȬṎŌṐṒŎȮȰ\xd6ȪỎŐǑȌȎƠỜỚỠỞỢỌỘǪǬ\xd8ǾƆƟꝊꝌ"},{base:"OI",letters:"Ƣ"},{base:"OO",letters:"Ꝏ"},{base:"OU",letters:"Ȣ"},{base:"OE",letters:"\x8cŒ"},{base:"oe",letters:"\x9cœ"},{base:"P",letters:"PⓅPṔṖƤⱣꝐꝒꝔ"},{base:"Q",letters:"QⓆQꝖꝘɊ"},{base:"R",letters:"RⓇRŔṘŘȐȒṚṜŖṞɌⱤꝚꞦꞂ"},{base:"S",letters:"SⓈSẞŚṤŜṠŠṦṢṨȘŞⱾꞨꞄ"},{base:"T",letters:"TⓉTṪŤṬȚŢṰṮŦƬƮȾꞆ"},{base:"TZ",letters:"Ꜩ"},{base:"U",letters:"UⓊU\xd9\xda\xdbŨṸŪṺŬ\xdcǛǗǕǙỦŮŰǓȔȖƯỪỨỮỬỰỤṲŲṶṴɄ"},{base:"V",letters:"VⓋVṼṾƲꝞɅ"},{base:"VY",letters:"Ꝡ"},{base:"W",letters:"WⓌWẀẂŴẆẄẈⱲ"},{base:"X",letters:"XⓍXẊẌ"},{base:"Y",letters:"YⓎYỲ\xddŶỸȲẎŸỶỴƳɎỾ"},{base:"Z",letters:"ZⓏZŹẐŻŽẒẔƵȤⱿⱫꝢ"},{base:"a",letters:"aⓐaẚ\xe0\xe1\xe2ầấẫẩ\xe3āăằắẵẳȧǡ\xe4ǟả\xe5ǻǎȁȃạậặḁąⱥɐ"},{base:"aa",letters:"ꜳ"},{base:"ae",letters:"\xe6ǽǣ"},{base:"ao",letters:"ꜵ"},{base:"au",letters:"ꜷ"},{base:"av",letters:"ꜹꜻ"},{base:"ay",letters:"ꜽ"},{base:"b",letters:"bⓑbḃḅḇƀƃɓ"},{base:"c",letters:"cⓒcćĉċč\xe7ḉƈȼꜿↄ"},{base:"d",letters:"dⓓdḋďḍḑḓḏđƌɖɗꝺ"},{base:"dz",letters:"dzdž"},{base:"e",letters:"eⓔe\xe8\xe9\xeaềếễểẽēḕḗĕė\xebẻěȅȇẹệȩḝęḙḛɇɛǝ"},{base:"f",letters:"fⓕfḟƒꝼ"},{base:"g",letters:"gⓖgǵĝḡğġǧģǥɠꞡᵹꝿ"},{base:"h",letters:"hⓗhĥḣḧȟḥḩḫẖħⱨⱶɥ"},{base:"hv",letters:"ƕ"},{base:"i",letters:"iⓘi\xec\xed\xeeĩīĭ\xefḯỉǐȉȋịįḭɨı"},{base:"j",letters:"jⓙjĵǰɉ"},{base:"k",letters:"kⓚkḱǩḳķḵƙⱪꝁꝃꝅꞣ"},{base:"l",letters:"lⓛlŀĺľḷḹļḽḻſłƚɫⱡꝉꞁꝇ"},{base:"lj",letters:"lj"},{base:"m",letters:"mⓜmḿṁṃɱɯ"},{base:"n",letters:"nⓝnǹń\xf1ṅňṇņṋṉƞɲʼnꞑꞥ"},{base:"nj",letters:"nj"},{base:"o",letters:"oⓞo\xf2\xf3\xf4ồốỗổ\xf5ṍȭṏōṑṓŏȯȱ\xf6ȫỏőǒȍȏơờớỡởợọộǫǭ\xf8ǿɔꝋꝍɵ"},{base:"oi",letters:"ƣ"},{base:"ou",letters:"ȣ"},{base:"oo",letters:"ꝏ"},{base:"p",letters:"pⓟpṕṗƥᵽꝑꝓꝕ"},{base:"q",letters:"qⓠqɋꝗꝙ"},{base:"r",letters:"rⓡrŕṙřȑȓṛṝŗṟɍɽꝛꞧꞃ"},{base:"s",letters:"sⓢs\xdfśṥŝṡšṧṣṩșşȿꞩꞅẛ"},{base:"t",letters:"tⓣtṫẗťṭțţṱṯŧƭʈⱦꞇ"},{base:"tz",letters:"ꜩ"},{base:"u",letters:"uⓤu\xf9\xfa\xfbũṹūṻŭ\xfcǜǘǖǚủůűǔȕȗưừứữửựụṳųṷṵʉ"},{base:"v",letters:"vⓥvṽṿʋꝟʌ"},{base:"vy",letters:"ꝡ"},{base:"w",letters:"wⓦwẁẃŵẇẅẘẉⱳ"},{base:"x",letters:"xⓧxẋẍ"},{base:"y",letters:"yⓨyỳ\xfdŷỹȳẏ\xffỷẙỵƴɏỿ"},{base:"z",letters:"zⓩzźẑżžẓẕƶȥɀⱬꝣ"}])for(let t of e.letters.split(""))c[t]=e.base;function d(e,{UNSAFE_pickSingleImageChildOutOfParentParagraph:t=!1}={}){let s=new Map;function n(t=[]){e.elIdList.push(0);let s=t.map(t=>{switch(t.type){case"text":return e.incrementElId(),e.text(r(t.text));case"strong":return e.incrementElId(),e.strong(n(t.tokens).jsx);case"em":return e.incrementElId(),e.em(n(t.tokens).jsx);case"del":return e.incrementElId(),e.del(n(t.tokens).jsx);case"codespan":return e.incrementElId(),e.codespan(r(t.text));case"link":return e.incrementElId(),e.link(t.href,n(t.tokens).jsx,t.title??void 0);case"image":return e.incrementElId(),e.image(t.href,t.text,t.title);case"html":return e.incrementElId(),e.html(t.text);case"br":return e.incrementElId(),e.br();case"escape":return e.incrementElId(),e.text(t.text);default:return console.warn(`[foxmd] Token with "${t.type}" type was not found`),null}});return e.elIdList.pop(),{jsx:s,toc:[]}}return{parse:function o(d){let u=[];e.elIdList.push(0);let p=d.map(d=>{switch(d.type){case"space":return null;case"heading":{let t=d.depth,o=function e(t=[]){return l(t.map(t=>{switch(t.type){case"text":case"codespan":return r(t.text);case"strong":case"em":case"del":case"link":return e(t.tokens);case"image":case"html":case"br":case"escape":return"";default:return console.warn(`[foxmd] Token with "${t.type}" type was not found`),""}}),"-")}(d.tokens),p=function(e){if("string"!=typeof e)throw TypeError("str must be a string!");let t=a("-");return e.replaceAll(/[^\u0000-\u007E]/g,e=>c[e]||e).replaceAll(i,"").replaceAll(b,"-").replaceAll(RegExp(`${t}{2,}`,"g"),"-").replaceAll(RegExp(`^${t}+|${t}+$`,"g"),"").toLowerCase()}(o),m=1;return s.has(p)?(m=s.get(p)+1,s.set(p,m),p=p+"-"+m):s.set(p,m),u.push({text:o,id:p,level:t}),e.incrementElId(),e.heading(n(d.tokens).jsx,t,p)}case"paragraph":if(t&&d.tokens?.length===1&&"image"===d.tokens[0].type)return n(d.tokens).jsx;return e.incrementElId(),e.paragraph(n(d.tokens).jsx);case"text":return d.tokens?n(d.tokens).jsx:d.text;case"blockquote":{let t=o(d.tokens).jsx;return e.incrementElId(),e.blockquote(t)}case"list":{e.elIdList.push(0);let t=d.items.map(t=>{let s=[];return t.task&&(e.incrementElId(),s.push(e.checkbox(t.checked??!1))),s.push(o(t.tokens).jsx),e.incrementElId(),e.listItem(s)});return e.elIdList.pop(),e.incrementElId(),e.list(t,d.ordered,d.ordered?d.start:void 0)}case"code":return e.incrementElId(),e.code(d.text,d.lang);case"html":return e.incrementElId(),e.html(d.text);case"table":{e.elIdList.push(0);let t=d.header.map((t,s)=>e.tableCell(n(t.tokens).jsx,{header:!0,align:d.align[s]}));e.elIdList.pop(),e.incrementElId();let s=e.tableRow(t);e.incrementElId();let r=e.tableHeader(s);e.elIdList.push(0);let l=d.rows.map(t=>{e.elIdList.push(0);let s=t.map((t,s)=>e.tableCell(n(t.tokens).jsx,{header:!1,align:d.align[s]}));return e.elIdList.pop(),e.incrementElId(),e.tableRow(s)});e.elIdList.pop(),e.incrementElId();let a=e.tableBody(l);return e.incrementElId(),e.table([r,a])}case"hr":return e.incrementElId(),e.hr();default:return console.warn(`[foxmd] Token with "${d.type}" type was not found`),null}});return e.elIdList.pop(),{jsx:p,toc:u}},parseInline:n}}let u=e(()=>new t);function p(e,{foxmdRendererOptions:t,foxmdParserOptions:s,markedInstance:r=u(),lexerOptions:l=function(e){return{gfm:!0,breaks:!0,tokenizer:e.defaults.tokenizer}}(r),isInline:a=!1}={}){let n=r.lexer(e,l),i=d(o(t),s);return a?i.parseInline(n):i.parse(n)}export{d as createFoxmdParser,o as createFoxmdRenderer,p as foxmd};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "foxmd",
3
- "version": "0.1.0-beta.2",
3
+ "version": "0.1.0-beta.4",
4
4
  "description": "An opinionated Markdown to React transformer for React Server Component",
5
5
  "repository": {
6
6
  "url": "https://github.com/SukkaW/foxmd"