`}tablecell(t){let e=this.parser.parseInline(t.tokens),r=t.header?"th":"td";return(t.align?`<${r} align="${t.align}">`:`<${r}>`)+e+`${r}>
`}strong({tokens:t}){return`${this.parser.parseInline(t)}`}em({tokens:t}){return`${this.parser.parseInline(t)}`}codespan({text:t}){return`${S(t,!0)}`}br(t){return" "}del({tokens:t}){return`${this.parser.parseInline(t)}`}link({href:t,title:e,text:r,tokens:s,autolink:n}){let i=n?S(r,!0):this.parser.parseInline(s),a=xe(t);if(a===null)return i;t=S(a,n);let l='"+i+"",l}image({href:t,title:e,text:r,tokens:s}){s&&(r=this.parser.parseInline(s,this.parser.textRenderer));let n=xe(t);if(n===null)return S(r);t=n;let i=`",i}text(t){return"tokens"in t&&t.tokens?this.parser.parseInline(t.tokens):"escaped"in t&&t.escaped?t.text:S(t.text)}},oe=class{strong({text:t}){return t}em({text:t}){return t}codespan({text:t}){return t}del({text:t}){return t}html({text:t}){return t}text({text:t}){return t}link({text:t}){return""+t}image({text:t}){return""+t}br(){return""}checkbox({raw:t}){return t}},$=class ee{options;renderer;textRenderer;constructor(e){this.options=e||P,this.options.renderer=this.options.renderer||new X,this.renderer=this.options.renderer,this.renderer.options=this.options,this.renderer.parser=this,this.textRenderer=new oe}static parse(e,r){return new ee(r).parse(e)}static parseInline(e,r){return new ee(r).parseInline(e)}parse(e){this.renderer.parser=this;let r="";for(let s=0;s{let a=n[i].flat(1/0);r=r.concat(this.walkTokens(a,e))}):n.tokens&&(r=r.concat(this.walkTokens(n.tokens,e)))}}return r}use(...t){let e=this.defaults.extensions||{renderers:{},childTokens:{}};return t.forEach(r=>{let s={...r};if(s.async=this.defaults.async||s.async||!1,r.extensions&&(r.extensions.forEach(n=>{if(!n.name)throw new Error("extension name required");if("renderer"in n){let i=e.renderers[n.name];i?e.renderers[n.name]=function(...a){let l=n.renderer.apply(this,a);return l===!1&&(l=i.apply(this,a)),l}:e.renderers[n.name]=n.renderer}if("tokenizer"in n){if(!n.level||n.level!=="block"&&n.level!=="inline")throw new Error("extension level must be 'block' or 'inline'");let i=e[n.level];i?i.unshift(n.tokenizer):e[n.level]=[n.tokenizer],n.start&&(n.level==="block"?e.startBlock?e.startBlock.push(n.start):e.startBlock=[n.start]:n.level==="inline"&&(e.startInline?e.startInline.push(n.start):e.startInline=[n.start]))}"childTokens"in n&&n.childTokens&&(e.childTokens[n.name]=n.childTokens)}),s.extensions=e),r.renderer){let n=this.defaults.renderer||new X(this.defaults);for(let i in r.renderer){if(!(i in n))throw new Error(`renderer '${i}' does not exist`);if(["options","parser"].includes(i))continue;let a=i,l=r.renderer[a],c=n[a];n[a]=(...o)=>{let p=l.apply(n,o);return p===!1&&(p=c.apply(n,o)),p||""}}s.renderer=n}if(r.tokenizer){let n=this.defaults.tokenizer||new G(this.defaults);for(let i in r.tokenizer){if(!(i in n))throw new Error(`tokenizer '${i}' does not exist`);if(["options","rules","lexer"].includes(i))continue;let a=i,l=r.tokenizer[a],c=n[a];n[a]=(...o)=>{let p=l.apply(n,o);return p===!1&&(p=c.apply(n,o)),p}}s.tokenizer=n}if(r.hooks){let n=this.defaults.hooks||new D;for(let i in r.hooks){if(!(i in n))throw new Error(`hook '${i}' does not exist`);if(["options","block"].includes(i))continue;let a=i,l=r.hooks[a],c=n[a];D.passThroughHooks.has(i)?n[a]=o=>{if(this.defaults.async&&D.passThroughHooksRespectAsync.has(i))return(async()=>{let h=await l.call(n,o);return c.call(n,h)})();let p=l.call(n,o);return c.call(n,p)}:n[a]=(...o)=>{if(this.defaults.async)return(async()=>{let h=await l.apply(n,o);return h===!1&&(h=await c.apply(n,o)),h})();let p=l.apply(n,o);return p===!1&&(p=c.apply(n,o)),p}}s.hooks=n}if(r.walkTokens){let n=this.defaults.walkTokens,i=r.walkTokens;s.walkTokens=function(a){let l=[];return l.push(i.call(this,a)),n&&(l=l.concat(n.call(this,a))),l}}this.defaults={...this.defaults,...s}}),this}setOptions(t){return this.defaults={...this.defaults,...t},this}lexer(t,e){return y.lex(t,e??this.defaults)}parser(t,e){return $.parse(t,e??this.defaults)}parseMarkdown(t){return(e,r)=>{let s={...r},n={...this.defaults,...s},i=this.onError(!!n.silent,!!n.async);if(this.defaults.async===!0&&s.async===!1)return i(new Error("marked(): The async option was set to true by an extension. Remove async: false from the parse options object to return a Promise."));if(typeof e>"u"||e===null)return i(new Error("marked(): input parameter is undefined or null"));if(typeof e!="string")return i(new Error("marked(): input parameter is of type "+Object.prototype.toString.call(e)+", string expected"));if(n.hooks&&(n.hooks.options=n,n.hooks.block=t),n.async)return(async()=>{let a=n.hooks?await n.hooks.preprocess(e):e,l=await(n.hooks?await n.hooks.provideLexer(t):t?y.lex:y.lexInline)(a,n),c=n.hooks?await n.hooks.processAllTokens(l):l;n.walkTokens&&await Promise.all(this.walkTokens(c,n.walkTokens));let o=await(n.hooks?await n.hooks.provideParser(t):t?$.parse:$.parseInline)(c,n);return n.hooks?await n.hooks.postprocess(o):o})().catch(i);try{n.hooks&&(e=n.hooks.preprocess(e));let a=(n.hooks?n.hooks.provideLexer(t):t?y.lex:y.lexInline)(e,n);n.hooks&&(a=n.hooks.processAllTokens(a)),n.walkTokens&&this.walkTokens(a,n.walkTokens);let l=(n.hooks?n.hooks.provideParser(t):t?$.parse:$.parseInline)(a,n);return n.hooks&&(l=n.hooks.postprocess(l)),l}catch(a){return i(a)}}}onError(t,e){return r=>{if(r.message+=`
Please report this to https://github.com/markedjs/marked.`,t){let s="
An error occurred:
"+S(r.message+"",!0)+"
";return e?Promise.resolve(s):s}if(e)return Promise.reject(r);throw r}}},_=new ce;function g(t,e){return _.parse(t,e)}g.options=g.setOptions=function(t){return _.setOptions(t),g.defaults=_.defaults,$e(g.defaults),g};g.getDefaults=te;g.defaults=P;function Wt(...t){return _.use(...t),g.defaults=_.defaults,$e(g.defaults),g}g.use=Wt;g.walkTokens=function(t,e){return _.walkTokens(t,e)};g.parseInline=_.parseInline;g.Parser=$;g.parser=$.parse;g.Renderer=X;g.TextRenderer=oe;g.Lexer=y;g.lexer=y.lex;g.Tokenizer=G;g.Hooks=D;g.parse=g;var lr=g.options,ar=g.setOptions,or=g.walkTokens,cr=g.parseInline;var pr=$.parse,hr=y.lex;var pe="/x/proj/gh-proxy/src/sanitizer.js",Kt=["Google Chrome","Microsoft Edge","Firefox","Safari"];function Vt(){let t=process.env.BROWSER;if(t)return t;for(let e of Kt)if(Y(`/Applications/${e}.app`))return e;return"Safari"}function Fe(t){return String(t).replace(/[&<>"']/g,e=>{switch(e){case"&":return"&";case"<":return"<";case">":return">";case'"':return""";case"'":return"'";default:return e}})}function er(t,e){return`
${Fe(t)}
${e}
`}function tr(t){let e={preprocess(r){return r.replace(/^\uFEFF/,"")}};return t&&(e.postprocess=function(r){return t.process(r)}),new ce({gfm:!0,breaks:!1,pedantic:!1,silent:!1,async:!1,hooks:e})}var qe=Y(pe);function H(t){let e=qe?` -x, --xss Enable XSS filtering (matches gh-proxy sanitization)
`:"";(t===0?process.stdout:process.stderr).write(`Usage: render-md ${qe?"[-x|--xss] ":""}[-o FILE|--output FILE] [--] [file]
`+e+` -o, --output FILE Write HTML to FILE instead of opening in browser
-o, --output - Write HTML to stdout
-h, --help Show this help
-- End option parsing
file Markdown file to render (default: stdin)
`),process.exit(t)}function Me(t,e,r){let s=r instanceof Error?r.message:String(r);process.stderr.write(`render-md: cannot ${t} ${e}: ${s}
`),process.exit(1)}function rr(t,e){if(!Y(e))return!1;let r=Ce(t),s=Ce(e);return r.dev===s.dev&&r.ino===s.ino}var Oe=!1,z=null,m=null,I=!0,U=process.argv.slice(2);for(let t=0;t=U.length&&H(1),z=U[t]):I&&(e==="-h"||e==="--help")?H(0):I&&e.startsWith("-")?(process.stderr.write(`render-md: unknown option: ${e}
`),H(1)):(m!==null&&(process.stderr.write(`render-md: multiple input files: ${m}, ${e}
`),H(1)),m=e)}var He=null;if(Oe)try{let{createHtmlSanitizer:t}=await import(pe);He=t()}catch{process.stderr.write(`render-md: -x/--xss requires gh-proxy XSS config at ${pe}
Install: ensure /x/proj/gh-proxy exists with npm dependencies installed
`),process.exit(1)}!m&&process.stdin.isTTY&&H(0);var he;if(m){Y(m)||(process.stderr.write(`render-md: ${m}: No such file
`),process.exit(1));try{he=Le(m,"utf-8")}catch(t){Me("read",m,t)}}else he=Le(0,"utf-8");var nr=tr(He),sr=m?Xt(m).replace(/\.md$/i,""):"Untitled",ir=nr.parse(he),Q=er(sr,ir);if(m){let t=Ze(De(m)),e=Jt(t+Ut).href;Q=Q.replace("",`
`)}if(z==="-")process.stdout.write(Q);else if(z){m&&rr(m,z)&&(process.stderr.write(`render-md: refusing to overwrite input file: ${z}
`),process.exit(1));try{Ie(z,Q,"utf-8")}catch(t){Me("write",z,t)}process.stderr.write(`Wrote ${z}
`)}else{let t;if(m){let r=De(process.env.PWD||process.cwd(),m);t=Be("/tmp","md",r+".html")}else t=Be("/tmp","md",`render-md-${Date.now()}.html`);Gt(Ze(t),{recursive:!0}),Ie(t,Q,"utf-8");let e=Vt();try{Yt("open",["-a",e,t],{stdio:"ignore"})}catch{process.stderr.write(`render-md: failed to open browser "${e}"
`),process.stderr.write(`Output written to ${t}
`),process.exit(1)}}