UNPKG

ts-markdown

Version:

An extensible TypeScript markdown generator that takes JSON and creates a markdown document.

2 lines 12.8 kB
var tsMarkdown=function(n,I){"use strict";const e=(n,e)=>{if("footnote"in n)return`[^${n.footnote.id}]`;throw new Error("Entry is not a footnote entry. Unable to render.")};function t(n,e,r){var t,n=function r(t){return Array.isArray(t)?t.reduce((n,e)=>[...n,...r(e)],[]):null!==t&&"object"==typeof t&&"footnote"in t?[t]:null!==t&&"object"==typeof t?Object.keys(t).reduce((n,e)=>[...n,...r(t[e])],[]):[]}(n);return 0<n.length&&(e+="\n\n"+(t=r,n.map(r=>{return o(Array.isArray(r.footnote.content)?r.footnote.content:[r.footnote.content],t).split("\n").map((n,e)=>{return(0===e?`[^${r.footnote.id}]: `:" ")+n}).join("\n")}).join("\n\n"))),e}function o(t,o){var i,l=o.prefix??"";let u="";for(const[c,s]of t.entries()){a=l,d=c,i=s;let e="string"!=typeof a?a(d,i):a;var a,d=f(s,o);let{markdown:n,blockLevel:r}="string"==typeof d?{markdown:d,blockLevel:!1}:d;u+=n.split("\n").map(n=>e+n).join("\n"),(i=s)&&"object"==typeof i&&"append"in i&&""!==(a=f(s.append,o))&&(u+="\n"+a),c<t.length-1&&(u+="\n"),c<t.length-1&&r&&(u=u+e+"\n")}return u}function f(e,r){if(null===e&&r.renderers?.null)return r.renderers.null(e,r);if(void 0===e&&r.renderers?.null)return r.renderers.undefined(e,r);if("string"==typeof e&&r.renderers?.string)return r.renderers.string(e,r);if("boolean"==typeof e&&r.renderers?.boolean)return r.renderers.boolean(e,r);if("number"==typeof e&&r.renderers?.number)return r.renderers.number(e,r);if("bigint"==typeof e&&r.renderers?.bigint)return r.renderers.bigint(e,r);if(e instanceof Date&&r.renderers?.date)return r.renderers.date(e,r);if("object"==typeof e)for(var t in e){let n=r.renderers?.[t];if(n)return n(e,r)}return""}const r=(n,e)=>{if("blockquote"in n)return{markdown:o(Array.isArray(n.blockquote)?n.blockquote:[n.blockquote],{...e,prefix:"> "}),blockLevel:!0};throw new Error("Entry is not a blockquote entry. Unable to render.")};const i=(n,e)=>{var r;if("bold"in n)return""+(r=n.indicator??e.boldIndicator??"*")+r+f(n.bold,e)+r+r;throw new Error("Entry is not a bold entry. Unable to render.")};const l=(n,e)=>{if("code"in n){let r=0;n.code.split("").reduce((n,e)=>{e="`"===e?n+1:0;return r=Math.max(r,e),e},0);var t=n.code.startsWith("`")?" ":"",o=n.code.endsWith("`")?" ":"",i="".padEnd(r+1,"`");return i+t+n.code+o+i}throw new Error("Entry is not a code entry. Unable to render.")};const u=(n,r)=>{var t=r.useCodeblockFencing??n.fenced;if("codeblock"in n){let e=t?"":" ";var o=t?function(n,e){n=a(n),e=e??"";return n+n+n+e}(t,n.language)+"\n":"",t=t?"\n"+function(n,e){n=a(n.fenced??e.useCodeblockFencing);return n+n+n}(n,r):"";return{markdown:o+("string"==typeof n.codeblock?e+n.codeblock.split("\n").join("\n"+e):n.codeblock.map(n=>e+n).join("\n"))+t,blockLevel:!0}}throw new Error("Entry is not a codeblock entry. Unable to render.")};function a(n){return"~"===n?"~":"`"}const d=(r,t)=>{if("dl"in r){var o,i,l=t.useDescriptionListHtml??r.html,u=l?" <dt>":"",a=l?"</dt>":"",d=l?" <dd>":": ",c=l?"</dd>":"";let n=[],e=(l&&n.push("<dl>"),void 0);for(o of r.dl)"dt"in o&&"dd"===e&&0<n.length&&n.push("\n"),"dt"in o?(i=u+f(o.dt,t)+a,n.push(i),e="dt"):"dd"in o&&(i=d+f(o.dd,t)+c,n.push(i),e="dd");return l&&n.push("</dl>"),{markdown:n.join("\n"),blockLevel:!0}}throw new Error("Entry is not a dl entry. Unable to render.")};const c=(n,e)=>{if("emoji"in n)return`:${n.emoji}:`;throw new Error("Entry is not an emoji entry. Unable to render.")};const s=n=>{if("frontmatter"in n)return{markdown:`--- ${I.stringify(n.frontmatter)}---`,blockLevel:!0};throw new Error("Entry is not a frontmatter object. Unable to render")};function h(n,e=""){return void 0!==n?e+`{#${n}}`:""}const b=(e,r)=>{if("h1"in e){var t=e.underline??r.useH1Underlining;let n=(t?"":"# ")+f(e.h1,r)+h(e.id," ");return t&&(n+="\n"+"".padEnd(n.length,"=")),{markdown:n,blockLevel:!0}}throw new Error("Entry is not an h1 entry. Unable to render.")};const p=(e,r)=>{if("h2"in e){var t=e.underline??r.useH2Underlining;let n=(t?"":"## ")+f(e.h2,r)+h(e.id," ");return t&&(n+="\n"+"".padEnd(n.length,"-")),{markdown:n,blockLevel:!0}}throw new Error("Entry is not an h2 entry. Unable to render.")};const y=(n,e)=>{if("h3"in n)return{markdown:"### "+f(n.h3,e)+h(n.id," "),blockLevel:!0};throw new Error("Entry is not an h3 entry. Unable to render.")};const g=(n,e)=>{if("h4"in n)return{markdown:"#### "+f(n.h4,e)+h(n.id," "),blockLevel:!0};throw new Error("Entry is not an h4 entry. Unable to render.")};const m=(n,e)=>{if("h5"in n)return{markdown:"##### "+f(n.h5,e)+h(n.id," "),blockLevel:!0};throw new Error("Entry is not an h5 entry. Unable to render.")};const k=(n,e)=>{if("h6"in n)return{markdown:"###### "+f(n.h6,e)+h(n.id," "),blockLevel:!0};throw new Error("Entry is not an h6 entry. Unable to render.")};const w=(n,e)=>{if("highlight"in n)return`==${f(n.highlight,e)}==`;throw new Error("Entry is not a highlight entry. Unable to render.")};const E=(n,e)=>{if("hr"in n)return{markdown:""+(n=n.indicator??"-")+n+n,blockLevel:!0};throw new Error("Entry is not an hr entry. Unable to render.")};const v=(n,e)=>{var r,t;if("img"in n)return r=n.img.source.replace(/\s/g,"%20"),t=void 0!==n.img.title?` "${n.img.title}"`:"",`![${n.img.alt??""}](${r}${t})`;throw new Error("Entry is not an img entry. Unable to render.")};const R=(n,e)=>{var r;if("italic"in n)return""+(r=n.indicator??e.italicIndicator??"*")+f(n.italic,e)+r;throw new Error("Entry is not an italic entry. Unable to render.")};const j=(n,e)=>{if("link"in n){var r=n.link.href.replace(/\s/g,"%20");if(!n.link.text)return`<${r}>`;var t=void 0!==n.link.title?` "${n.link.title}"`:"";return`[${n.link.text}](${r}${t})`}throw new Error("Entry is not a link entry. Unable to render.")};const U=(n,r)=>{if("ol"in n)return{markdown:n.ol.map((n,e)=>o(Array.isArray(n)?n:[n],{...r,prefix:n=>0===n?e+1+". ":" "})).join("\n"),blockLevel:!0};throw new Error("Entry is not an ol entry. Unable to render.")};const x=(n,e)=>{if("p"in n)return{markdown:"string"==typeof(n=function(n,e){if("string"==typeof n.p)return f(A(n.p),e);if(Array.isArray(n.p))return A(n.p.map(n=>f(n,e)).join(""));n=f(n.p,e),n="string"==typeof n?n:n.markdown;return A(n).split("\n").map(n=>A(n)).join("\n")}(n,e))?n:n.markdown,blockLevel:!0};throw new Error("Entry is not a p entry. Unable to render.")};function A(n){return n?.trimStart().replace(/(^.*?)[\t]+/g,"").trimStart()}const $=n=>n,L=n=>"",S=n=>"",q=n=>n.toString(),M=n=>n.toString(),F=n=>n.toString(),C=n=>n.toISOString(),O=(n,e)=>{if("strikethrough"in n)return`~~${f(n.strikethrough,e)}~~`;throw new Error("Entry is not a strikethrough entry. Unable to render.")};const V=(n,e)=>{var r,t;if("sub"in n)return t=(r=n.html??e.useSubscriptHtml??!1)?"</sub>":"~",(r?"<sub>":"~")+f(n.sub,e)+t;throw new Error("Entry is not a sub entry. Unable to render.")};const W=(n,e)=>{var r,t;if("sup"in n)return t=(r=n.html??e.useSuperscriptHtml??!1)?"</sup>":"^",(r?"<sup>":"^")+f(n.sup,e)+t;throw new Error("Entry is not an sup entry. Unable to render.")};const _=(n,e)=>{if("table"in n)return{markdown:function(o,i){!function e(r,t=P){if("string"==typeof r)return t(r);if(Array.isArray(r))for(let n=0;n<r.length;n++)r[n]=e(r[n],t);if("object"==typeof r&&null!==r){let n=r;for(var o of Object.keys(n))n[o]=e(n[o],t)}return r}(o,o.pipeReplacer);let n=o.table.columns.length,e=(o.table.columns.reduce((n,e)=>n.concat("string"==typeof e?e:e.name),[]),[]);for(let t=0;t<n;t++){let r=o.table.columns[t],n=[function(n){return("string"==typeof n?n:n.name).length}(o.table.columns[t]),...o.table.rows.reduce((n,e)=>{e=Array.isArray(e)?e[t]:e[T(r)];if(void 0!==e){e=H(e,i,o.prefixCellValues);if("string"!=typeof e)throw new Error("Unknown table rendering scenario encountered. Multi-line table cell content is not supported.");n.push(e)}return n},[]).map(n=>n.length)];e[t]=n.reduce((n,e)=>Math.max(3,n,e),0)}return[function(n,r,t){return`| ${n.table.columns.map((n,e)=>D(function(n){return"string"==typeof n?n:n.name}(n),r[e],t[e])).join(" | ")} |`}(o,e,o.table.columns),function(n,r){return`|${n.map((n,e)=>function(n){return"string"!=typeof n&&("left"===n.align||"center"===n.align)?":":" "}(r[e])+"".padStart(n,"-")+function(n){return"string"!=typeof n&&("right"===n.align||"center"===n.align)?":":" "}(r[e])).join("|")}|`}(e,o.table.columns),...function(o,i,e,l){return o.table.rows.map(t=>{let n=[];return Array.isArray(t)?n=[...t.map((n,e)=>D(H(n,l,o.prefixCellValues),i[e],o.table.columns[e]))]:"object"==typeof t&&(n=e.reduce((n,e,r)=>n.concat(D(H(t[T(e)],l,o.prefixCellValues)??"",i[r],o.table.columns[r])),[])),`| ${n.join(" | ")} |`})}(o,e,o.table.columns,i)].join("\n")}(n,e),blockLevel:!0};throw new Error("Entry is not a table entry. Unable to render.")};function H(n,e,r=!0){return o([n],{...e,prefix:r?e.prefix:""})}function D(n,e,r){return"string"!=typeof r&&"left"!==r.align&&r.align?"center"===r.align?n.padStart(n.length+Math.floor(e-n.length)/2," ").padEnd(e," "):"right"===r.align?n.padStart(e," "):n:n.padEnd(e," ")}function P(n){return n.replaceAll("|","&#124;")}function T(n){return"string"==typeof n?n:n.field??n.name}const z=(n,e)=>{if("tasks"in n)return{markdown:(o=e,n.tasks.map(n=>{let e=!1,r="";if("string"==typeof n)r=n;else if("task"in n){e=!0===n.completed;var t=f(n.task,o);if("string"!=typeof t)throw new Error("Unexpected rendering scenario encountered. A task list item cannot have multi-line content.");r=t}else{t=f(n,o);if("string"!=typeof t)throw new Error("Unexpected rendering scenario encountered. A task list item cannot have multi-line content.");r=t}return`- [${e?"x":" "}] `+r}).join("\n")),blockLevel:!0};var o;throw new Error("Entry is not a tasks entry. Unable to render.")};const B=(n,e)=>{if("text"in n)return(Array.isArray(n.text)?n.text:[n.text]).map(n=>f(n,e)).join("");throw new Error("Entry is not a text entry. Unable to render.")};const G=(n,e)=>{if("ul"in n)return{markdown:function(n,e){let r=n.indicator??e.unorderedListItemIndicator??"-";return n.ul.map(n=>Array.isArray(n)?o(n,{...e,prefix:n=>0===n?r+" ":" "}):r+" "+f(n,e)).map(n=>n.replace(/^([\-\+\*]\s[\d]+)(\.)/,"$1\\.")).join("\n")}(n,e),blockLevel:!0};throw new Error("Entry is not an ul entry. Unable to render.")};function J(n={}){return{string:$,null:L,undefined:S,boolean:q,number:M,bigint:F,date:C,h1:b,h2:p,h3:y,h4:g,h5:m,h6:k,blockquote:r,bold:i,code:l,codeblock:u,dl:d,emoji:c,footnote:e,highlight:w,hr:E,img:v,italic:R,link:j,ol:U,p:x,strikethrough:O,sub:V,sup:W,table:_,tasks:z,text:B,ul:G,frontmatter:s,...n}}return n.appendFootnotes=t,n.bigintRenderer=F,n.blockquote=function(n,e){return{blockquote:n,...e}},n.blockquoteRenderer=r,n.bold=function(n,e){return{bold:n,...e}},n.boldRenderer=i,n.booleanRenderer=q,n.code=function(n,e){return{code:n,...e}},n.codeRenderer=l,n.codeblock=function(n,e){return{codeblock:n,...e}},n.codeblockRenderer=u,n.dateRenderer=C,n.dl=function(n,e){return{dl:n,...e}},n.dlRenderer=d,n.emoji=function(n,e){return{emoji:n,...e}},n.emojiRenderer=c,n.footnote=function(n,e,r){return{footnote:{id:n,content:e},...r}},n.footnoteRenderer=e,n.frontmatter=function(n){return{frontmatter:n}},n.frontmatterRenderer=s,n.getMarkdownString=f,n.getOptionalHeaderIdText=h,n.getRenderers=J,n.h1=function(n,e){return{h1:n,...e}},n.h1Renderer=b,n.h2=function(n,e){return{h2:n,...e}},n.h2Renderer=p,n.h3=function(n,e){return{h3:n,...e}},n.h3Renderer=y,n.h4=function(n,e){return{h4:n,...e}},n.h4Renderer=g,n.h5=function(n,e){return{h5:n,...e}},n.h5Renderer=m,n.h6=function(n,e){return{h6:n,...e}},n.h6Renderer=k,n.header=function(n,e,r){switch(n){case 1:case 2:case 3:case 4:case 5:case 6:return{["h"+n]:e,...r};default:throw new Error(`Header level ${n} is not supported.`)}},n.highlight=function(n,e){return{highlight:n,...e}},n.highlightRenderer=w,n.hr=function(n){return{hr:!0,...n}},n.hrRenderer=E,n.img=function(n){return{img:n}},n.imgRenderer=v,n.italic=function(n,e){return{italic:n,...e}},n.italicRenderer=R,n.link=function(n){return{link:n}},n.linkRenderer=j,n.nullRenderer=L,n.numberRenderer=M,n.ol=function(n,e){return{ol:n,...e}},n.olRenderer=U,n.p=function(n,e){return{p:n,...e}},n.pRenderer=x,n.renderEntries=o,n.strikethrough=function(n,e){return{strikethrough:n,...e}},n.strikethroughRenderer=O,n.stringRenderer=$,n.sub=function(n,e){return{sub:n,...e}},n.subRenderer=V,n.sup=function(n,e){return{sup:n,...e}},n.supRenderer=W,n.table=function(n,e){return{table:n,...e}},n.tableRenderer=_,n.tasks=function(n,e){return{tasks:n,...e}},n.tasksRenderer=z,n.text=function(n){return{text:n}},n.textRenderer=B,n.tsMarkdown=function(n,e){(e??={prefix:""}).renderers??=J();let r=o(n,e);return r=t(n,r=e.onDocumentFootnoteAppending?e.onDocumentFootnoteAppending(n,r,e):r,e),r=e.onDocumentFootnoteAppended?e.onDocumentFootnoteAppended(n,r,e):r},n.ul=function(n,e){return{ul:n,...e}},n.ulRenderer=G,n.undefinedRenderer=S,Object.defineProperty(n,"__esModule",{value:!0}),n}({},yaml);