UNPKG

jsx-slack

Version:

Build JSON object for Slack Block Kit surfaces from JSX

2 lines (1 loc) 1.47 kB
const f=/(<[^>]*>|:[-a-z0-9ÀÁÂÃÄÇÈÉÊËÍÎÏÑÓÔÕÖŒœÙÚÛÜŸßàáâãäçèéêëíîïñóôõöùúûüÿ__++'\u1100-\u11ff\u2e80-\u2fd5\u3005\u3041-\u3096\u30a0-\u30ff\u3130-\u318f\u3400-\u4db5\u4e00-\u9fcb\ua960-\ua97f\uac00-\ud7ff\uff10-\uff19\uff41-\uff5a\uff61-\uff9f]+:)/,a=e=>u=>`<span data-escape="${e.repeat(u.length)}">${u}</span>`,r={blockquote:e=>e.replace(/^((?:<(?:[^>]|>(?=<))*>)?)(&gt;)/gm,(u,c,t)=>`${c}\xAD${t}`).replace(/^((?:<(?:[^>]|>(?=<))*>)?)(>)/gm,(u,c,t)=>`${c}${a("\xAD\uFF1E")(t)}`),bold:e=>e.replace(/\*+/g,a("\u2217")).replace(/*+/g,a("\uFE61")),italic:e=>e.replace(/_+/g,a("\u02CD")).replace(/_+/g,a("\u2E0F")),code:e=>e.replace(/`+/g,a("\u02CB")).replace(/`+/g,a("\u02CB")),strikethrough:e=>e.replace(/~+/g,a("\u223C"))},g=e=>Object.values(r).reduce((u,c)=>c(u),e),n=(e,u=g)=>e.split(f).reduce((c,t,p)=>[...c,p%2?t:u(t)],[]).join(""),s=e=>e.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;"),i=e=>s(e).replace(/\|+/g,encodeURI),l=(e,u,c)=>e.split(u).reduce((t,p,o)=>t.concat(o%2?p:c(p)),[]).join(""),d=e=>l(e,/(<[\s\S]*?>)/,u=>l(u,/(&\w+;)/,c=>[...c].map(t=>`&#${t.codePointAt(0)};`))),m=e=>typeof e=="string"?e.replace(/&(amp|gt|lt|quot|#\d+);/g,(u,c)=>c.startsWith("#")?String.fromCodePoint(Number.parseInt(c.slice(1),10)):{amp:"&",gt:">",lt:"<",quot:'"'}[c]):e;export{m as decodeEntity,n as escapeChars,s as escapeEntity,d as escapeEverythingContents,r as escapeReplacers,i as escapeURL};