\n` } tablecell(e, t) { const n = t.header ? "th" : "td"; return (t.align ? `<${n} align="${t.align}">` : `<${n}>`) + e + `${n}>\n` } strong(e) { return `${e}` } em(e) { return `${e}` } codespan(e) { return `${e}` } br() { return " " } del(e) { return `${e}` } link(e, t, n) { const s = g(e); if (null === s) return n; let r = '" + n + "", r } image(e, t, n) { const s = g(e); if (null === s) return n; let r = `", r } text(e) { return e } } class re { strong(e) { return e } em(e) { return e } codespan(e) { return e } del(e) { return e } html(e) { return e } text(e) { return e } link(e, t, n) { return "" + n } image(e, t, n) { return "" + n } br() { return "" } } class ie { options; renderer; textRenderer; constructor(t) { this.options = t || e.defaults, this.options.renderer = this.options.renderer || new se, this.renderer = this.options.renderer, this.renderer.options = this.options, this.textRenderer = new re } static parse(e, t) { return new ie(t).parse(e) } static parseInline(e, t) { return new ie(t).parseInline(e) } parse(e, t = !0) { let n = ""; for (let s = 0; s < e.length; s++) { const r = e[s]; if (this.options.extensions && this.options.extensions.renderers && this.options.extensions.renderers[r.type]) { const e = r, t = this.options.extensions.renderers[e.type].call({ parser: this }, e); if (!1 !== t || !["space", "hr", "heading", "code", "table", "blockquote", "list", "html", "paragraph", "text"].includes(e.type)) { n += t || ""; continue } } switch (r.type) { case "space": continue; case "hr": n += this.renderer.hr(); continue; case "heading": { const e = r; n += this.renderer.heading(this.parseInline(e.tokens), e.depth, p(this.parseInline(e.tokens, this.textRenderer))); continue } case "code": { const e = r; n += this.renderer.code(e.text, e.lang, !!e.escaped); continue } case "table": { const e = r; let t = "", s = ""; for (let t = 0; t < e.header.length; t++)s += this.renderer.tablecell(this.parseInline(e.header[t].tokens), { header: !0, align: e.align[t] }); t += this.renderer.tablerow(s); let i = ""; for (let t = 0; t < e.rows.length; t++) { const n = e.rows[t]; s = ""; for (let t = 0; t < n.length; t++)s += this.renderer.tablecell(this.parseInline(n[t].tokens), { header: !1, align: e.align[t] }); i += this.renderer.tablerow(s) } n += this.renderer.table(t, i); continue } case "blockquote": { const e = r, t = this.parse(e.tokens); n += this.renderer.blockquote(t); continue } case "list": { const e = r, t = e.ordered, s = e.start, i = e.loose; let l = ""; for (let t = 0; t < e.items.length; t++) { const n = e.items[t], s = n.checked, r = n.task; let o = ""; if (n.task) { const e = this.renderer.checkbox(!!s); i ? n.tokens.length > 0 && "paragraph" === n.tokens[0].type ? (n.tokens[0].text = e + " " + n.tokens[0].text, n.tokens[0].tokens && n.tokens[0].tokens.length > 0 && "text" === n.tokens[0].tokens[0].type && (n.tokens[0].tokens[0].text = e + " " + n.tokens[0].tokens[0].text)) : n.tokens.unshift({ type: "text", text: e + " " }) : o += e + " " } o += this.parse(n.tokens, i), l += this.renderer.listitem(o, r, !!s) } n += this.renderer.list(l, t, s); continue } case "html": { const e = r; n += this.renderer.html(e.text, e.block); continue } case "paragraph": { const e = r; n += this.renderer.paragraph(this.parseInline(e.tokens)); continue } case "text": { let i = r, l = i.tokens ? this.parseInline(i.tokens) : i.text; for (; s + 1 < e.length && "text" === e[s + 1].type;)i = e[++s], l += "\n" + (i.tokens ? this.parseInline(i.tokens) : i.text); n += t ? this.renderer.paragraph(l) : l; continue } default: { const e = 'Token with "' + r.type + '" type was not found.'; if (this.options.silent) return console.error(e), ""; throw new Error(e) } } } return n } parseInline(e, t) { t = t || this.renderer; let n = ""; for (let s = 0; s < e.length; s++) { const r = e[s]; if (this.options.extensions && this.options.extensions.renderers && this.options.extensions.renderers[r.type]) { const e = this.options.extensions.renderers[r.type].call({ parser: this }, r); if (!1 !== e || !["escape", "html", "link", "image", "strong", "em", "codespan", "br", "del", "text"].includes(r.type)) { n += e || ""; continue } } switch (r.type) { case "escape": { const e = r; n += t.text(e.text); break } case "html": { const e = r; n += t.html(e.text); break } case "link": { const e = r; n += t.link(e.href, e.title, this.parseInline(e.tokens, t)); break } case "image": { const e = r; n += t.image(e.href, e.title, e.text); break } case "strong": { const e = r; n += t.strong(this.parseInline(e.tokens, t)); break } case "em": { const e = r; n += t.em(this.parseInline(e.tokens, t)); break } case "codespan": { const e = r; n += t.codespan(e.text); break } case "br": n += t.br(); break; case "del": { const e = r; n += t.del(this.parseInline(e.tokens, t)); break } case "text": { const e = r; n += t.text(e.text); break } default: { const e = 'Token with "' + r.type + '" type was not found.'; if (this.options.silent) return console.error(e), ""; throw new Error(e) } } } return n } } class le { options; constructor(t) { this.options = t || e.defaults } static passThroughHooks = new Set(["preprocess", "postprocess", "processAllTokens"]); preprocess(e) { return e } postprocess(e) { return e } processAllTokens(e) { return e } } class oe { defaults = { async: !1, breaks: !1, extensions: null, gfm: !0, hooks: null, pedantic: !1, renderer: null, silent: !1, tokenizer: null, walkTokens: null }; options = this.setOptions; parse = this.#e(ne.lex, ie.parse); parseInline = this.#e(ne.lexInline, ie.parseInline); Parser = ie; Renderer = se; TextRenderer = re; Lexer = ne; Tokenizer = w; Hooks = le; constructor(...e) { this.use(...e) } walkTokens(e, t) { let n = []; for (const s of e) switch (n = n.concat(t.call(this, s)), s.type) { case "table": { const e = s; for (const s of e.header) n = n.concat(this.walkTokens(s.tokens, t)); for (const s of e.rows) for (const e of s) n = n.concat(this.walkTokens(e.tokens, t)); break } case "list": { const e = s; n = n.concat(this.walkTokens(e.items, t)); break } default: { const e = s; this.defaults.extensions?.childTokens?.[e.type] ? this.defaults.extensions.childTokens[e.type].forEach((s => { const r = e[s].flat(1 / 0); n = n.concat(this.walkTokens(r, t)) })) : e.tokens && (n = n.concat(this.walkTokens(e.tokens, t))) } }return n } use(...e) { const t = this.defaults.extensions || { renderers: {}, childTokens: {} }; return e.forEach((e => { const n = { ...e }; if (n.async = this.defaults.async || n.async || !1, e.extensions && (e.extensions.forEach((e => { if (!e.name) throw new Error("extension name required"); if ("renderer" in e) { const n = t.renderers[e.name]; t.renderers[e.name] = n ? function (...t) { let s = e.renderer.apply(this, t); return !1 === s && (s = n.apply(this, t)), s } : e.renderer } if ("tokenizer" in e) { if (!e.level || "block" !== e.level && "inline" !== e.level) throw new Error("extension level must be 'block' or 'inline'"); const n = t[e.level]; n ? n.unshift(e.tokenizer) : t[e.level] = [e.tokenizer], e.start && ("block" === e.level ? t.startBlock ? t.startBlock.push(e.start) : t.startBlock = [e.start] : "inline" === e.level && (t.startInline ? t.startInline.push(e.start) : t.startInline = [e.start])) } "childTokens" in e && e.childTokens && (t.childTokens[e.name] = e.childTokens) })), n.extensions = t), e.renderer) { const t = this.defaults.renderer || new se(this.defaults); for (const n in e.renderer) { if (!(n in t)) throw new Error(`renderer '${n}' does not exist`); if ("options" === n) continue; const s = n, r = e.renderer[s], i = t[s]; t[s] = (...e) => { let n = r.apply(t, e); return !1 === n && (n = i.apply(t, e)), n || "" } } n.renderer = t } if (e.tokenizer) { const t = this.defaults.tokenizer || new w(this.defaults); for (const n in e.tokenizer) { if (!(n in t)) throw new Error(`tokenizer '${n}' does not exist`); if (["options", "rules", "lexer"].includes(n)) continue; const s = n, r = e.tokenizer[s], i = t[s]; t[s] = (...e) => { let n = r.apply(t, e); return !1 === n && (n = i.apply(t, e)), n } } n.tokenizer = t } if (e.hooks) { const t = this.defaults.hooks || new le; for (const n in e.hooks) { if (!(n in t)) throw new Error(`hook '${n}' does not exist`); if ("options" === n) continue; const s = n, r = e.hooks[s], i = t[s]; le.passThroughHooks.has(n) ? t[s] = e => { if (this.defaults.async) return Promise.resolve(r.call(t, e)).then((e => i.call(t, e))); const n = r.call(t, e); return i.call(t, n) } : t[s] = (...e) => { let n = r.apply(t, e); return !1 === n && (n = i.apply(t, e)), n } } n.hooks = t } if (e.walkTokens) { const t = this.defaults.walkTokens, s = e.walkTokens; n.walkTokens = function (e) { let n = []; return n.push(s.call(this, e)), t && (n = n.concat(t.call(this, e))), n } } this.defaults = { ...this.defaults, ...n } })), this } setOptions(e) { return this.defaults = { ...this.defaults, ...e }, this } lexer(e, t) { return ne.lex(e, t ?? this.defaults) } parser(e, t) { return ie.parse(e, t ?? this.defaults) } #e(e, t) { return (n, s) => { const r = { ...s }, i = { ...this.defaults, ...r }; !0 === this.defaults.async && !1 === r.async && (i.silent || console.warn("marked(): The async option was set to true by an extension. The async: false option sent to parse will be ignored."), i.async = !0); const l = this.#t(!!i.silent, !!i.async); if (null == n) return l(new Error("marked(): input parameter is undefined or null")); if ("string" != typeof n) return l(new Error("marked(): input parameter is of type " + Object.prototype.toString.call(n) + ", string expected")); if (i.hooks && (i.hooks.options = i), i.async) return Promise.resolve(i.hooks ? i.hooks.preprocess(n) : n).then((t => e(t, i))).then((e => i.hooks ? i.hooks.processAllTokens(e) : e)).then((e => i.walkTokens ? Promise.all(this.walkTokens(e, i.walkTokens)).then((() => e)) : e)).then((e => t(e, i))).then((e => i.hooks ? i.hooks.postprocess(e) : e)).catch(l); try { i.hooks && (n = i.hooks.preprocess(n)); let s = e(n, i); i.hooks && (s = i.hooks.processAllTokens(s)), i.walkTokens && this.walkTokens(s, i.walkTokens); let r = t(s, i); return i.hooks && (r = i.hooks.postprocess(r)), r } catch (e) { return l(e) } } } #t(e, t) { return n => { if (n.message += "\nPlease report this to https://github.com/markedjs/marked.", e) { const e = "
An error occurred:
" + c(n.message + "", !0) + "
"; return t ? Promise.resolve(e) : e } if (t) return Promise.reject(n); throw n } } } const ae = new oe; function ce(e, t) { return ae.parse(e, t) } ce.options = ce.setOptions = function (e) { return ae.setOptions(e), ce.defaults = ae.defaults, n(ce.defaults), ce }, ce.getDefaults = t, ce.defaults = e.defaults, ce.use = function (...e) { return ae.use(...e), ce.defaults = ae.defaults, n(ce.defaults), ce }, ce.walkTokens = function (e, t) { return ae.walkTokens(e, t) }, ce.parseInline = ae.parseInline, ce.Parser = ie, ce.parser = ie.parse, ce.Renderer = se, ce.TextRenderer = re, ce.Lexer = ne, ce.lexer = ne.lex, ce.Tokenizer = w, ce.Hooks = le, ce.parse = ce; const he = ce.options, pe = ce.setOptions, ue = ce.use, ke = ce.walkTokens, ge = ce.parseInline, fe = ce, de = ie.parse, xe = ne.lex; e.Hooks = le, e.Lexer = ne, e.Marked = oe, e.Parser = ie, e.Renderer = se, e.TextRenderer = re, e.Tokenizer = w, e.getDefaults = t, e.lexer = xe, e.marked = ce, e.options = he, e.parse = fe, e.parseInline = ge, e.parser = de, e.setOptions = pe, e.use = ue, e.walkTokens = ke }));