{"version":3,"sources":["jsdelivr-header.js","/npm/marked@16.2.0/src/marked.ts","/npm/marked@16.2.0/src/defaults.ts","/npm/marked@16.2.0/src/rules.ts","/npm/marked@16.2.0/src/helpers.ts","/npm/marked@16.2.0/src/Tokenizer.ts","/npm/marked@16.2.0/src/Lexer.ts","/npm/marked@16.2.0/src/Renderer.ts","/npm/marked@16.2.0/src/TextRenderer.ts","/npm/marked@16.2.0/src/Parser.ts","/npm/marked@16.2.0/src/Hooks.ts","/npm/marked@16.2.0/src/Instance.ts"],"names":[],"mappings":"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","file":"/npm/marked@16.2.0/lib/marked.umd.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /npm/marked@16.2.0/lib/marked.umd.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","import { _Lexer } from './Lexer.ts';\nimport { _Parser } from './Parser.ts';\nimport { _Tokenizer } from './Tokenizer.ts';\nimport { _Renderer } from './Renderer.ts';\nimport { _TextRenderer } from './TextRenderer.ts';\nimport { _Hooks } from './Hooks.ts';\nimport { Marked } from './Instance.ts';\nimport {\n  _getDefaults,\n  changeDefaults,\n  _defaults,\n} from './defaults.ts';\nimport type { MarkedExtension, MarkedOptions } from './MarkedOptions.ts';\nimport type { Token, TokensList } from './Tokens.ts';\nimport type { MaybePromise } from './Instance.ts';\n\nconst markedInstance = new Marked();\n\n/**\n * Compiles markdown to HTML asynchronously.\n *\n * @param src String of markdown source to be compiled\n * @param options Hash of options, having async: true\n * @return Promise of string of compiled HTML\n */\nexport function marked(src: string, options: MarkedOptions & { async: true }): Promise<string>;\n\n/**\n * Compiles markdown to HTML.\n *\n * @param src String of markdown source to be compiled\n * @param options Optional hash of options\n * @return String of compiled HTML. Will be a Promise of string if async is set to true by any extensions.\n */\nexport function marked(src: string, options: MarkedOptions & { async: false }): string;\nexport function marked(src: string, options: MarkedOptions & { async: true }): Promise<string>;\nexport function marked(src: string, options?: MarkedOptions | null): string | Promise<string>;\nexport function marked(src: string, opt?: MarkedOptions | null): string | Promise<string> {\n  return markedInstance.parse(src, opt);\n}\n\n/**\n * Sets the default options.\n *\n * @param options Hash of options\n */\nmarked.options =\nmarked.setOptions = function(options: MarkedOptions) {\n  markedInstance.setOptions(options);\n  marked.defaults = markedInstance.defaults;\n  changeDefaults(marked.defaults);\n  return marked;\n};\n\n/**\n * Gets the original marked default options.\n */\nmarked.getDefaults = _getDefaults;\n\nmarked.defaults = _defaults;\n\n/**\n * Use Extension\n */\n\nmarked.use = function(...args: MarkedExtension[]) {\n  markedInstance.use(...args);\n  marked.defaults = markedInstance.defaults;\n  changeDefaults(marked.defaults);\n  return marked;\n};\n\n/**\n * Run callback for every token\n */\n\nmarked.walkTokens = function(tokens: Token[] | TokensList, callback: (token: Token) => MaybePromise | MaybePromise[]) {\n  return markedInstance.walkTokens(tokens, callback);\n};\n\n/**\n * Compiles markdown to HTML without enclosing `p` tag.\n *\n * @param src String of markdown source to be compiled\n * @param options Hash of options\n * @return String of compiled HTML\n */\nmarked.parseInline = markedInstance.parseInline;\n\n/**\n * Expose\n */\nmarked.Parser = _Parser;\nmarked.parser = _Parser.parse;\nmarked.Renderer = _Renderer;\nmarked.TextRenderer = _TextRenderer;\nmarked.Lexer = _Lexer;\nmarked.lexer = _Lexer.lex;\nmarked.Tokenizer = _Tokenizer;\nmarked.Hooks = _Hooks;\nmarked.parse = marked;\n\nexport const options = marked.options;\nexport const setOptions = marked.setOptions;\nexport const use = marked.use;\nexport const walkTokens = marked.walkTokens;\nexport const parseInline = marked.parseInline;\nexport const parse = marked;\nexport const parser = _Parser.parse;\nexport const lexer = _Lexer.lex;\nexport { _defaults as defaults, _getDefaults as getDefaults } from './defaults.ts';\nexport { _Lexer as Lexer } from './Lexer.ts';\nexport { _Parser as Parser } from './Parser.ts';\nexport { _Tokenizer as Tokenizer } from './Tokenizer.ts';\nexport { _Renderer as Renderer } from './Renderer.ts';\nexport { _TextRenderer as TextRenderer } from './TextRenderer.ts';\nexport { _Hooks as Hooks } from './Hooks.ts';\nexport { Marked } from './Instance.ts';\nexport type * from './MarkedOptions.ts';\nexport type * from './Tokens.ts';\n","import type { MarkedOptions } from './MarkedOptions.ts';\n\n/**\n * Gets the original marked default options.\n */\nexport function _getDefaults<ParserOutput = string, RendererOutput = string>(): MarkedOptions<ParserOutput, RendererOutput> {\n  return {\n    async: false,\n    breaks: false,\n    extensions: null,\n    gfm: true,\n    hooks: null,\n    pedantic: false,\n    renderer: null,\n    silent: false,\n    tokenizer: null,\n    walkTokens: null,\n  };\n}\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport let _defaults: MarkedOptions<any, any> = _getDefaults();\n\nexport function changeDefaults<ParserOutput = string, RendererOutput = string>(newDefaults: MarkedOptions<ParserOutput, RendererOutput>) {\n  _defaults = newDefaults;\n}\n","const noopTest = { exec: () => null } as unknown as RegExp;\n\nfunction edit(regex: string | RegExp, opt = '') {\n  let source = typeof regex === 'string' ? regex : regex.source;\n  const obj = {\n    replace: (name: string | RegExp, val: string | RegExp) => {\n      let valSource = typeof val === 'string' ? val : val.source;\n      valSource = valSource.replace(other.caret, '$1');\n      source = source.replace(name, valSource);\n      return obj;\n    },\n    getRegex: () => {\n      return new RegExp(source, opt);\n    },\n  };\n  return obj;\n}\n\nexport const other = {\n  codeRemoveIndent: /^(?: {1,4}| {0,3}\\t)/gm,\n  outputLinkReplace: /\\\\([\\[\\]])/g,\n  indentCodeCompensation: /^(\\s+)(?:```)/,\n  beginningSpace: /^\\s+/,\n  endingHash: /#$/,\n  startingSpaceChar: /^ /,\n  endingSpaceChar: / $/,\n  nonSpaceChar: /[^ ]/,\n  newLineCharGlobal: /\\n/g,\n  tabCharGlobal: /\\t/g,\n  multipleSpaceGlobal: /\\s+/g,\n  blankLine: /^[ \\t]*$/,\n  doubleBlankLine: /\\n[ \\t]*\\n[ \\t]*$/,\n  blockquoteStart: /^ {0,3}>/,\n  blockquoteSetextReplace: /\\n {0,3}((?:=+|-+) *)(?=\\n|$)/g,\n  blockquoteSetextReplace2: /^ {0,3}>[ \\t]?/gm,\n  listReplaceTabs: /^\\t+/,\n  listReplaceNesting: /^ {1,4}(?=( {4})*[^ ])/g,\n  listIsTask: /^\\[[ xX]\\] /,\n  listReplaceTask: /^\\[[ xX]\\] +/,\n  anyLine: /\\n.*\\n/,\n  hrefBrackets: /^<(.*)>$/,\n  tableDelimiter: /[:|]/,\n  tableAlignChars: /^\\||\\| *$/g,\n  tableRowBlankLine: /\\n[ \\t]*$/,\n  tableAlignRight: /^ *-+: *$/,\n  tableAlignCenter: /^ *:-+: *$/,\n  tableAlignLeft: /^ *:-+ *$/,\n  startATag: /^<a /i,\n  endATag: /^<\\/a>/i,\n  startPreScriptTag: /^<(pre|code|kbd|script)(\\s|>)/i,\n  endPreScriptTag: /^<\\/(pre|code|kbd|script)(\\s|>)/i,\n  startAngleBracket: /^</,\n  endAngleBracket: />$/,\n  pedanticHrefTitle: /^([^'\"]*[^\\s])\\s+(['\"])(.*)\\2/,\n  unicodeAlphaNumeric: /[\\p{L}\\p{N}]/u,\n  escapeTest: /[&<>\"']/,\n  escapeReplace: /[&<>\"']/g,\n  escapeTestNoEncode: /[<>\"']|&(?!(#\\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\\w+);)/,\n  escapeReplaceNoEncode: /[<>\"']|&(?!(#\\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\\w+);)/g,\n  unescapeTest: /&(#(?:\\d+)|(?:#x[0-9A-Fa-f]+)|(?:\\w+));?/ig,\n  caret: /(^|[^\\[])\\^/g,\n  percentDecode: /%25/g,\n  findPipe: /\\|/g,\n  splitPipe: / \\|/,\n  slashPipe: /\\\\\\|/g,\n  carriageReturn: /\\r\\n|\\r/g,\n  spaceLine: /^ +$/gm,\n  notSpaceStart: /^\\S*/,\n  endingNewline: /\\n$/,\n  listItemRegex: (bull: string) => new RegExp(`^( {0,3}${bull})((?:[\\t ][^\\\\n]*)?(?:\\\\n|$))`),\n  nextBulletRegex: (indent: number) => new RegExp(`^ {0,${Math.min(3, indent - 1)}}(?:[*+-]|\\\\d{1,9}[.)])((?:[ \\t][^\\\\n]*)?(?:\\\\n|$))`),\n  hrRegex: (indent: number) => new RegExp(`^ {0,${Math.min(3, indent - 1)}}((?:- *){3,}|(?:_ *){3,}|(?:\\\\* *){3,})(?:\\\\n+|$)`),\n  fencesBeginRegex: (indent: number) => new RegExp(`^ {0,${Math.min(3, indent - 1)}}(?:\\`\\`\\`|~~~)`),\n  headingBeginRegex: (indent: number) => new RegExp(`^ {0,${Math.min(3, indent - 1)}}#`),\n  htmlBeginRegex: (indent: number) => new RegExp(`^ {0,${Math.min(3, indent - 1)}}<(?:[a-z].*>|!--)`, 'i'),\n};\n\n/**\n * Block-Level Grammar\n */\n\nconst newline = /^(?:[ \\t]*(?:\\n|$))+/;\nconst blockCode = /^((?: {4}| {0,3}\\t)[^\\n]+(?:\\n(?:[ \\t]*(?:\\n|$))*)?)+/;\nconst fences = /^ {0,3}(`{3,}(?=[^`\\n]*(?:\\n|$))|~{3,})([^\\n]*)(?:\\n|$)(?:|([\\s\\S]*?)(?:\\n|$))(?: {0,3}\\1[~`]* *(?=\\n|$)|$)/;\nconst hr = /^ {0,3}((?:-[\\t ]*){3,}|(?:_[ \\t]*){3,}|(?:\\*[ \\t]*){3,})(?:\\n+|$)/;\nconst heading = /^ {0,3}(#{1,6})(?=\\s|$)(.*)(?:\\n+|$)/;\nconst bullet = /(?:[*+-]|\\d{1,9}[.)])/;\nconst lheadingCore = /^(?!bull |blockCode|fences|blockquote|heading|html|table)((?:.|\\n(?!\\s*?\\n|bull |blockCode|fences|blockquote|heading|html|table))+?)\\n {0,3}(=+|-+) *(?:\\n+|$)/;\nconst lheading = edit(lheadingCore)\n  .replace(/bull/g, bullet) // lists can interrupt\n  .replace(/blockCode/g, /(?: {4}| {0,3}\\t)/) // indented code blocks can interrupt\n  .replace(/fences/g, / {0,3}(?:`{3,}|~{3,})/) // fenced code blocks can interrupt\n  .replace(/blockquote/g, / {0,3}>/) // blockquote can interrupt\n  .replace(/heading/g, / {0,3}#{1,6}/) // ATX heading can interrupt\n  .replace(/html/g, / {0,3}<[^\\n>]+>\\n/) // block html can interrupt\n  .replace(/\\|table/g, '') // table not in commonmark\n  .getRegex();\nconst lheadingGfm = edit(lheadingCore)\n  .replace(/bull/g, bullet) // lists can interrupt\n  .replace(/blockCode/g, /(?: {4}| {0,3}\\t)/) // indented code blocks can interrupt\n  .replace(/fences/g, / {0,3}(?:`{3,}|~{3,})/) // fenced code blocks can interrupt\n  .replace(/blockquote/g, / {0,3}>/) // blockquote can interrupt\n  .replace(/heading/g, / {0,3}#{1,6}/) // ATX heading can interrupt\n  .replace(/html/g, / {0,3}<[^\\n>]+>\\n/) // block html can interrupt\n  .replace(/table/g, / {0,3}\\|?(?:[:\\- ]*\\|)+[\\:\\- ]*\\n/) // table can interrupt\n  .getRegex();\nconst _paragraph = /^([^\\n]+(?:\\n(?!hr|heading|lheading|blockquote|fences|list|html|table| +\\n)[^\\n]+)*)/;\nconst blockText = /^[^\\n]+/;\nconst _blockLabel = /(?!\\s*\\])(?:\\\\.|[^\\[\\]\\\\])+/;\nconst def = edit(/^ {0,3}\\[(label)\\]: *(?:\\n[ \\t]*)?([^<\\s][^\\s]*|<.*?>)(?:(?: +(?:\\n[ \\t]*)?| *\\n[ \\t]*)(title))? *(?:\\n+|$)/)\n  .replace('label', _blockLabel)\n  .replace('title', /(?:\"(?:\\\\\"?|[^\"\\\\])*\"|'[^'\\n]*(?:\\n[^'\\n]+)*\\n?'|\\([^()]*\\))/)\n  .getRegex();\n\nconst list = edit(/^( {0,3}bull)([ \\t][^\\n]+?)?(?:\\n|$)/)\n  .replace(/bull/g, bullet)\n  .getRegex();\n\nconst _tag = 'address|article|aside|base|basefont|blockquote|body|caption'\n  + '|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption'\n  + '|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe'\n  + '|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option'\n  + '|p|param|search|section|summary|table|tbody|td|tfoot|th|thead|title'\n  + '|tr|track|ul';\nconst _comment = /<!--(?:-?>|[\\s\\S]*?(?:-->|$))/;\nconst html = edit(\n  '^ {0,3}(?:' // optional indentation\n+ '<(script|pre|style|textarea)[\\\\s>][\\\\s\\\\S]*?(?:</\\\\1>[^\\\\n]*\\\\n+|$)' // (1)\n+ '|comment[^\\\\n]*(\\\\n+|$)' // (2)\n+ '|<\\\\?[\\\\s\\\\S]*?(?:\\\\?>\\\\n*|$)' // (3)\n+ '|<![A-Z][\\\\s\\\\S]*?(?:>\\\\n*|$)' // (4)\n+ '|<!\\\\[CDATA\\\\[[\\\\s\\\\S]*?(?:\\\\]\\\\]>\\\\n*|$)' // (5)\n+ '|</?(tag)(?: +|\\\\n|/?>)[\\\\s\\\\S]*?(?:(?:\\\\n[ \\t]*)+\\\\n|$)' // (6)\n+ '|<(?!script|pre|style|textarea)([a-z][\\\\w-]*)(?:attribute)*? */?>(?=[ \\\\t]*(?:\\\\n|$))[\\\\s\\\\S]*?(?:(?:\\\\n[ \\t]*)+\\\\n|$)' // (7) open tag\n+ '|</(?!script|pre|style|textarea)[a-z][\\\\w-]*\\\\s*>(?=[ \\\\t]*(?:\\\\n|$))[\\\\s\\\\S]*?(?:(?:\\\\n[ \\t]*)+\\\\n|$)' // (7) closing tag\n+ ')', 'i')\n  .replace('comment', _comment)\n  .replace('tag', _tag)\n  .replace('attribute', / +[a-zA-Z:_][\\w.:-]*(?: *= *\"[^\"\\n]*\"| *= *'[^'\\n]*'| *= *[^\\s\"'=<>`]+)?/)\n  .getRegex();\n\nconst paragraph = edit(_paragraph)\n  .replace('hr', hr)\n  .replace('heading', ' {0,3}#{1,6}(?:\\\\s|$)')\n  .replace('|lheading', '') // setext headings don't interrupt commonmark paragraphs\n  .replace('|table', '')\n  .replace('blockquote', ' {0,3}>')\n  .replace('fences', ' {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n')\n  .replace('list', ' {0,3}(?:[*+-]|1[.)]) ') // only lists starting from 1 can interrupt\n  .replace('html', '</?(?:tag)(?: +|\\\\n|/?>)|<(?:script|pre|style|textarea|!--)')\n  .replace('tag', _tag) // pars can be interrupted by type (6) html blocks\n  .getRegex();\n\nconst blockquote = edit(/^( {0,3}> ?(paragraph|[^\\n]*)(?:\\n|$))+/)\n  .replace('paragraph', paragraph)\n  .getRegex();\n\n/**\n * Normal Block Grammar\n */\n\nconst blockNormal = {\n  blockquote,\n  code: blockCode,\n  def,\n  fences,\n  heading,\n  hr,\n  html,\n  lheading,\n  list,\n  newline,\n  paragraph,\n  table: noopTest,\n  text: blockText,\n};\n\ntype BlockKeys = keyof typeof blockNormal;\n\n/**\n * GFM Block Grammar\n */\n\nconst gfmTable = edit(\n  '^ *([^\\\\n ].*)\\\\n' // Header\n+ ' {0,3}((?:\\\\| *)?:?-+:? *(?:\\\\| *:?-+:? *)*(?:\\\\| *)?)' // Align\n+ '(?:\\\\n((?:(?! *\\\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\\\n|$))*)\\\\n*|$)') // Cells\n  .replace('hr', hr)\n  .replace('heading', ' {0,3}#{1,6}(?:\\\\s|$)')\n  .replace('blockquote', ' {0,3}>')\n  .replace('code', '(?: {4}| {0,3}\\t)[^\\\\n]')\n  .replace('fences', ' {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n')\n  .replace('list', ' {0,3}(?:[*+-]|1[.)]) ') // only lists starting from 1 can interrupt\n  .replace('html', '</?(?:tag)(?: +|\\\\n|/?>)|<(?:script|pre|style|textarea|!--)')\n  .replace('tag', _tag) // tables can be interrupted by type (6) html blocks\n  .getRegex();\n\nconst blockGfm: Record<BlockKeys, RegExp> = {\n  ...blockNormal,\n  lheading: lheadingGfm,\n  table: gfmTable,\n  paragraph: edit(_paragraph)\n    .replace('hr', hr)\n    .replace('heading', ' {0,3}#{1,6}(?:\\\\s|$)')\n    .replace('|lheading', '') // setext headings don't interrupt commonmark paragraphs\n    .replace('table', gfmTable) // interrupt paragraphs with table\n    .replace('blockquote', ' {0,3}>')\n    .replace('fences', ' {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n')\n    .replace('list', ' {0,3}(?:[*+-]|1[.)]) ') // only lists starting from 1 can interrupt\n    .replace('html', '</?(?:tag)(?: +|\\\\n|/?>)|<(?:script|pre|style|textarea|!--)')\n    .replace('tag', _tag) // pars can be interrupted by type (6) html blocks\n    .getRegex(),\n};\n\n/**\n * Pedantic grammar (original John Gruber's loose markdown specification)\n */\n\nconst blockPedantic: Record<BlockKeys, RegExp> = {\n  ...blockNormal,\n  html: edit(\n    '^ *(?:comment *(?:\\\\n|\\\\s*$)'\n    + '|<(tag)[\\\\s\\\\S]+?</\\\\1> *(?:\\\\n{2,}|\\\\s*$)' // closed tag\n    + '|<tag(?:\"[^\"]*\"|\\'[^\\']*\\'|\\\\s[^\\'\"/>\\\\s]*)*?/?> *(?:\\\\n{2,}|\\\\s*$))')\n    .replace('comment', _comment)\n    .replace(/tag/g, '(?!(?:'\n      + 'a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub'\n      + '|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)'\n      + '\\\\b)\\\\w+(?!:|[^\\\\w\\\\s@]*@)\\\\b')\n    .getRegex(),\n  def: /^ *\\[([^\\]]+)\\]: *<?([^\\s>]+)>?(?: +([\"(][^\\n]+[\")]))? *(?:\\n+|$)/,\n  heading: /^(#{1,6})(.*)(?:\\n+|$)/,\n  fences: noopTest, // fences not supported\n  lheading: /^(.+?)\\n {0,3}(=+|-+) *(?:\\n+|$)/,\n  paragraph: edit(_paragraph)\n    .replace('hr', hr)\n    .replace('heading', ' *#{1,6} *[^\\n]')\n    .replace('lheading', lheading)\n    .replace('|table', '')\n    .replace('blockquote', ' {0,3}>')\n    .replace('|fences', '')\n    .replace('|list', '')\n    .replace('|html', '')\n    .replace('|tag', '')\n    .getRegex(),\n};\n\n/**\n * Inline-Level Grammar\n */\n\nconst escape = /^\\\\([!\"#$%&'()*+,\\-./:;<=>?@\\[\\]\\\\^_`{|}~])/;\nconst inlineCode = /^(`+)([^`]|[^`][\\s\\S]*?[^`])\\1(?!`)/;\nconst br = /^( {2,}|\\\\)\\n(?!\\s*$)/;\nconst inlineText = /^(`+|[^`])(?:(?= {2,}\\n)|[\\s\\S]*?(?:(?=[\\\\<!\\[`*_]|\\b_|$)|[^ ](?= {2,}\\n)))/;\n\n// list of unicode punctuation marks, plus any missing characters from CommonMark spec\nconst _punctuation = /[\\p{P}\\p{S}]/u;\nconst _punctuationOrSpace = /[\\s\\p{P}\\p{S}]/u;\nconst _notPunctuationOrSpace = /[^\\s\\p{P}\\p{S}]/u;\nconst punctuation = edit(/^((?![*_])punctSpace)/, 'u')\n  .replace(/punctSpace/g, _punctuationOrSpace).getRegex();\n\n// GFM allows ~ inside strong and em for strikethrough\nconst _punctuationGfmStrongEm = /(?!~)[\\p{P}\\p{S}]/u;\nconst _punctuationOrSpaceGfmStrongEm = /(?!~)[\\s\\p{P}\\p{S}]/u;\nconst _notPunctuationOrSpaceGfmStrongEm = /(?:[^\\s\\p{P}\\p{S}]|~)/u;\n\n// sequences em should skip over [title](link), `code`, <html>\nconst blockSkip = /\\[[^[\\]]*?\\]\\((?:\\\\.|[^\\\\\\(\\)]|\\((?:\\\\.|[^\\\\\\(\\)])*\\))*\\)|`[^`]*?`|<(?! )[^<>]*?>/g;\n\nconst emStrongLDelimCore = /^(?:\\*+(?:((?!\\*)punct)|[^\\s*]))|^_+(?:((?!_)punct)|([^\\s_]))/;\n\nconst emStrongLDelim = edit(emStrongLDelimCore, 'u')\n  .replace(/punct/g, _punctuation)\n  .getRegex();\n\nconst emStrongLDelimGfm = edit(emStrongLDelimCore, 'u')\n  .replace(/punct/g, _punctuationGfmStrongEm)\n  .getRegex();\n\nconst emStrongRDelimAstCore =\n  '^[^_*]*?__[^_*]*?\\\\*[^_*]*?(?=__)' // Skip orphan inside strong\n+ '|[^*]+(?=[^*])' // Consume to delim\n+ '|(?!\\\\*)punct(\\\\*+)(?=[\\\\s]|$)' // (1) #*** can only be a Right Delimiter\n+ '|notPunctSpace(\\\\*+)(?!\\\\*)(?=punctSpace|$)' // (2) a***#, a*** can only be a Right Delimiter\n+ '|(?!\\\\*)punctSpace(\\\\*+)(?=notPunctSpace)' // (3) #***a, ***a can only be Left Delimiter\n+ '|[\\\\s](\\\\*+)(?!\\\\*)(?=punct)' // (4) ***# can only be Left Delimiter\n+ '|(?!\\\\*)punct(\\\\*+)(?!\\\\*)(?=punct)' // (5) #***# can be either Left or Right Delimiter\n+ '|notPunctSpace(\\\\*+)(?=notPunctSpace)'; // (6) a***a can be either Left or Right Delimiter\n\nconst emStrongRDelimAst = edit(emStrongRDelimAstCore, 'gu')\n  .replace(/notPunctSpace/g, _notPunctuationOrSpace)\n  .replace(/punctSpace/g, _punctuationOrSpace)\n  .replace(/punct/g, _punctuation)\n  .getRegex();\n\nconst emStrongRDelimAstGfm = edit(emStrongRDelimAstCore, 'gu')\n  .replace(/notPunctSpace/g, _notPunctuationOrSpaceGfmStrongEm)\n  .replace(/punctSpace/g, _punctuationOrSpaceGfmStrongEm)\n  .replace(/punct/g, _punctuationGfmStrongEm)\n  .getRegex();\n\n// (6) Not allowed for _\nconst emStrongRDelimUnd = edit(\n  '^[^_*]*?\\\\*\\\\*[^_*]*?_[^_*]*?(?=\\\\*\\\\*)' // Skip orphan inside strong\n+ '|[^_]+(?=[^_])' // Consume to delim\n+ '|(?!_)punct(_+)(?=[\\\\s]|$)' // (1) #___ can only be a Right Delimiter\n+ '|notPunctSpace(_+)(?!_)(?=punctSpace|$)' // (2) a___#, a___ can only be a Right Delimiter\n+ '|(?!_)punctSpace(_+)(?=notPunctSpace)' // (3) #___a, ___a can only be Left Delimiter\n+ '|[\\\\s](_+)(?!_)(?=punct)' // (4) ___# can only be Left Delimiter\n+ '|(?!_)punct(_+)(?!_)(?=punct)', 'gu') // (5) #___# can be either Left or Right Delimiter\n  .replace(/notPunctSpace/g, _notPunctuationOrSpace)\n  .replace(/punctSpace/g, _punctuationOrSpace)\n  .replace(/punct/g, _punctuation)\n  .getRegex();\n\nconst anyPunctuation = edit(/\\\\(punct)/, 'gu')\n  .replace(/punct/g, _punctuation)\n  .getRegex();\n\nconst autolink = edit(/^<(scheme:[^\\s\\x00-\\x1f<>]*|email)>/)\n  .replace('scheme', /[a-zA-Z][a-zA-Z0-9+.-]{1,31}/)\n  .replace('email', /[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/)\n  .getRegex();\n\nconst _inlineComment = edit(_comment).replace('(?:-->|$)', '-->').getRegex();\nconst tag = edit(\n  '^comment'\n    + '|^</[a-zA-Z][\\\\w:-]*\\\\s*>' // self-closing tag\n    + '|^<[a-zA-Z][\\\\w-]*(?:attribute)*?\\\\s*/?>' // open tag\n    + '|^<\\\\?[\\\\s\\\\S]*?\\\\?>' // processing instruction, e.g. <?php ?>\n    + '|^<![a-zA-Z]+\\\\s[\\\\s\\\\S]*?>' // declaration, e.g. <!DOCTYPE html>\n    + '|^<!\\\\[CDATA\\\\[[\\\\s\\\\S]*?\\\\]\\\\]>') // CDATA section\n  .replace('comment', _inlineComment)\n  .replace('attribute', /\\s+[a-zA-Z:_][\\w.:-]*(?:\\s*=\\s*\"[^\"]*\"|\\s*=\\s*'[^']*'|\\s*=\\s*[^\\s\"'=<>`]+)?/)\n  .getRegex();\n\nconst _inlineLabel = /(?:\\[(?:\\\\.|[^\\[\\]\\\\])*\\]|\\\\.|`[^`]*`|[^\\[\\]\\\\`])*?/;\n\nconst link = edit(/^!?\\[(label)\\]\\(\\s*(href)(?:(?:[ \\t]*(?:\\n[ \\t]*)?)(title))?\\s*\\)/)\n  .replace('label', _inlineLabel)\n  .replace('href', /<(?:\\\\.|[^\\n<>\\\\])+>|[^ \\t\\n\\x00-\\x1f]*/)\n  .replace('title', /\"(?:\\\\\"?|[^\"\\\\])*\"|'(?:\\\\'?|[^'\\\\])*'|\\((?:\\\\\\)?|[^)\\\\])*\\)/)\n  .getRegex();\n\nconst reflink = edit(/^!?\\[(label)\\]\\[(ref)\\]/)\n  .replace('label', _inlineLabel)\n  .replace('ref', _blockLabel)\n  .getRegex();\n\nconst nolink = edit(/^!?\\[(ref)\\](?:\\[\\])?/)\n  .replace('ref', _blockLabel)\n  .getRegex();\n\nconst reflinkSearch = edit('reflink|nolink(?!\\\\()', 'g')\n  .replace('reflink', reflink)\n  .replace('nolink', nolink)\n  .getRegex();\n\n/**\n * Normal Inline Grammar\n */\n\nconst inlineNormal = {\n  _backpedal: noopTest, // only used for GFM url\n  anyPunctuation,\n  autolink,\n  blockSkip,\n  br,\n  code: inlineCode,\n  del: noopTest,\n  emStrongLDelim,\n  emStrongRDelimAst,\n  emStrongRDelimUnd,\n  escape,\n  link,\n  nolink,\n  punctuation,\n  reflink,\n  reflinkSearch,\n  tag,\n  text: inlineText,\n  url: noopTest,\n};\n\ntype InlineKeys = keyof typeof inlineNormal;\n\n/**\n * Pedantic Inline Grammar\n */\n\nconst inlinePedantic: Record<InlineKeys, RegExp> = {\n  ...inlineNormal,\n  link: edit(/^!?\\[(label)\\]\\((.*?)\\)/)\n    .replace('label', _inlineLabel)\n    .getRegex(),\n  reflink: edit(/^!?\\[(label)\\]\\s*\\[([^\\]]*)\\]/)\n    .replace('label', _inlineLabel)\n    .getRegex(),\n};\n\n/**\n * GFM Inline Grammar\n */\n\nconst inlineGfm: Record<InlineKeys, RegExp> = {\n  ...inlineNormal,\n  emStrongRDelimAst: emStrongRDelimAstGfm,\n  emStrongLDelim: emStrongLDelimGfm,\n  url: edit(/^((?:ftp|https?):\\/\\/|www\\.)(?:[a-zA-Z0-9\\-]+\\.?)+[^\\s<]*|^email/, 'i')\n    .replace('email', /[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/)\n    .getRegex(),\n  _backpedal: /(?:[^?!.,:;*_'\"~()&]+|\\([^)]*\\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_'\"~)]+(?!$))+/,\n  del: /^(~~?)(?=[^\\s~])((?:\\\\.|[^\\\\])*?(?:\\\\.|[^\\s~\\\\]))\\1(?=[^~]|$)/,\n  text: /^([`~]+|[^`~])(?:(?= {2,}\\n)|(?=[a-zA-Z0-9.!#$%&'*+\\/=?_`{\\|}~-]+@)|[\\s\\S]*?(?:(?=[\\\\<!\\[`*~_]|\\b_|https?:\\/\\/|ftp:\\/\\/|www\\.|$)|[^ ](?= {2,}\\n)|[^a-zA-Z0-9.!#$%&'*+\\/=?_`{\\|}~-](?=[a-zA-Z0-9.!#$%&'*+\\/=?_`{\\|}~-]+@)))/,\n};\n\n/**\n * GFM + Line Breaks Inline Grammar\n */\n\nconst inlineBreaks: Record<InlineKeys, RegExp> = {\n  ...inlineGfm,\n  br: edit(br).replace('{2,}', '*').getRegex(),\n  text: edit(inlineGfm.text)\n    .replace('\\\\b_', '\\\\b_| {2,}\\\\n')\n    .replace(/\\{2,\\}/g, '*')\n    .getRegex(),\n};\n\n/**\n * exports\n */\n\nexport const block = {\n  normal: blockNormal,\n  gfm: blockGfm,\n  pedantic: blockPedantic,\n};\n\nexport const inline = {\n  normal: inlineNormal,\n  gfm: inlineGfm,\n  breaks: inlineBreaks,\n  pedantic: inlinePedantic,\n};\n\nexport interface Rules {\n  other: typeof other\n  block: Record<BlockKeys, RegExp>\n  inline: Record<InlineKeys, RegExp>\n}\n","import { other } from './rules.ts';\n\n/**\n * Helpers\n */\nconst escapeReplacements: { [index: string]: string } = {\n  '&': '&amp;',\n  '<': '&lt;',\n  '>': '&gt;',\n  '\"': '&quot;',\n  \"'\": '&#39;',\n};\nconst getEscapeReplacement = (ch: string) => escapeReplacements[ch];\n\nexport function escape(html: string, encode?: boolean) {\n  if (encode) {\n    if (other.escapeTest.test(html)) {\n      return html.replace(other.escapeReplace, getEscapeReplacement);\n    }\n  } else {\n    if (other.escapeTestNoEncode.test(html)) {\n      return html.replace(other.escapeReplaceNoEncode, getEscapeReplacement);\n    }\n  }\n\n  return html;\n}\n\nexport function unescape(html: string) {\n  // explicitly match decimal, hex, and named HTML entities\n  return html.replace(other.unescapeTest, (_, n) => {\n    n = n.toLowerCase();\n    if (n === 'colon') return ':';\n    if (n.charAt(0) === '#') {\n      return n.charAt(1) === 'x'\n        ? String.fromCharCode(parseInt(n.substring(2), 16))\n        : String.fromCharCode(+n.substring(1));\n    }\n    return '';\n  });\n}\n\nexport function cleanUrl(href: string) {\n  try {\n    href = encodeURI(href).replace(other.percentDecode, '%');\n  } catch {\n    return null;\n  }\n  return href;\n}\n\nexport function splitCells(tableRow: string, count?: number) {\n  // ensure that every cell-delimiting pipe has a space\n  // before it to distinguish it from an escaped pipe\n  const row = tableRow.replace(other.findPipe, (match, offset, str) => {\n      let escaped = false;\n      let curr = offset;\n      while (--curr >= 0 && str[curr] === '\\\\') escaped = !escaped;\n      if (escaped) {\n        // odd number of slashes means | is escaped\n        // so we leave it alone\n        return '|';\n      } else {\n        // add space before unescaped |\n        return ' |';\n      }\n    }),\n    cells = row.split(other.splitPipe);\n  let i = 0;\n\n  // First/last cell in a row cannot be empty if it has no leading/trailing pipe\n  if (!cells[0].trim()) {\n    cells.shift();\n  }\n  if (cells.length > 0 && !cells.at(-1)?.trim()) {\n    cells.pop();\n  }\n\n  if (count) {\n    if (cells.length > count) {\n      cells.splice(count);\n    } else {\n      while (cells.length < count) cells.push('');\n    }\n  }\n\n  for (; i < cells.length; i++) {\n    // leading or trailing whitespace is ignored per the gfm spec\n    cells[i] = cells[i].trim().replace(other.slashPipe, '|');\n  }\n  return cells;\n}\n\n/**\n * Remove trailing 'c's. Equivalent to str.replace(/c*$/, '').\n * /c*$/ is vulnerable to REDOS.\n *\n * @param str\n * @param c\n * @param invert Remove suffix of non-c chars instead. Default falsey.\n */\nexport function rtrim(str: string, c: string, invert?: boolean) {\n  const l = str.length;\n  if (l === 0) {\n    return '';\n  }\n\n  // Length of suffix matching the invert condition.\n  let suffLen = 0;\n\n  // Step left until we fail to match the invert condition.\n  while (suffLen < l) {\n    const currChar = str.charAt(l - suffLen - 1);\n    if (currChar === c && !invert) {\n      suffLen++;\n    } else if (currChar !== c && invert) {\n      suffLen++;\n    } else {\n      break;\n    }\n  }\n\n  return str.slice(0, l - suffLen);\n}\n\nexport function findClosingBracket(str: string, b: string) {\n  if (str.indexOf(b[1]) === -1) {\n    return -1;\n  }\n\n  let level = 0;\n  for (let i = 0; i < str.length; i++) {\n    if (str[i] === '\\\\') {\n      i++;\n    } else if (str[i] === b[0]) {\n      level++;\n    } else if (str[i] === b[1]) {\n      level--;\n      if (level < 0) {\n        return i;\n      }\n    }\n  }\n  if (level > 0) {\n    return -2;\n  }\n\n  return -1;\n}\n","import { _defaults } from './defaults.ts';\nimport {\n  rtrim,\n  splitCells,\n  findClosingBracket,\n} from './helpers.ts';\nimport type { Rules } from './rules.ts';\nimport type { _Lexer } from './Lexer.ts';\nimport type { Links, Tokens, Token } from './Tokens.ts';\nimport type { MarkedOptions } from './MarkedOptions.ts';\n\nfunction outputLink(cap: string[], link: Pick<Tokens.Link, 'href' | 'title'>, raw: string, lexer: _Lexer, rules: Rules): Tokens.Link | Tokens.Image {\n  const href = link.href;\n  const title = link.title || null;\n  const text = cap[1].replace(rules.other.outputLinkReplace, '$1');\n\n  lexer.state.inLink = true;\n  const token: Tokens.Link | Tokens.Image = {\n    type: cap[0].charAt(0) === '!' ? 'image' : 'link',\n    raw,\n    href,\n    title,\n    text,\n    tokens: lexer.inlineTokens(text),\n  };\n  lexer.state.inLink = false;\n  return token;\n}\n\nfunction indentCodeCompensation(raw: string, text: string, rules: Rules) {\n  const matchIndentToCode = raw.match(rules.other.indentCodeCompensation);\n\n  if (matchIndentToCode === null) {\n    return text;\n  }\n\n  const indentToCode = matchIndentToCode[1];\n\n  return text\n    .split('\\n')\n    .map(node => {\n      const matchIndentInNode = node.match(rules.other.beginningSpace);\n      if (matchIndentInNode === null) {\n        return node;\n      }\n\n      const [indentInNode] = matchIndentInNode;\n\n      if (indentInNode.length >= indentToCode.length) {\n        return node.slice(indentToCode.length);\n      }\n\n      return node;\n    })\n    .join('\\n');\n}\n\n/**\n * Tokenizer\n */\nexport class _Tokenizer<ParserOutput = string, RendererOutput = string> {\n  options: MarkedOptions<ParserOutput, RendererOutput>;\n  rules!: Rules; // set by the lexer\n  lexer!: _Lexer<ParserOutput, RendererOutput>; // set by the lexer\n\n  constructor(options?: MarkedOptions<ParserOutput, RendererOutput>) {\n    this.options = options || _defaults;\n  }\n\n  space(src: string): Tokens.Space | undefined {\n    const cap = this.rules.block.newline.exec(src);\n    if (cap && cap[0].length > 0) {\n      return {\n        type: 'space',\n        raw: cap[0],\n      };\n    }\n  }\n\n  code(src: string): Tokens.Code | undefined {\n    const cap = this.rules.block.code.exec(src);\n    if (cap) {\n      const text = cap[0].replace(this.rules.other.codeRemoveIndent, '');\n      return {\n        type: 'code',\n        raw: cap[0],\n        codeBlockStyle: 'indented',\n        text: !this.options.pedantic\n          ? rtrim(text, '\\n')\n          : text,\n      };\n    }\n  }\n\n  fences(src: string): Tokens.Code | undefined {\n    const cap = this.rules.block.fences.exec(src);\n    if (cap) {\n      const raw = cap[0];\n      const text = indentCodeCompensation(raw, cap[3] || '', this.rules);\n\n      return {\n        type: 'code',\n        raw,\n        lang: cap[2] ? cap[2].trim().replace(this.rules.inline.anyPunctuation, '$1') : cap[2],\n        text,\n      };\n    }\n  }\n\n  heading(src: string): Tokens.Heading | undefined {\n    const cap = this.rules.block.heading.exec(src);\n    if (cap) {\n      let text = cap[2].trim();\n\n      // remove trailing #s\n      if (this.rules.other.endingHash.test(text)) {\n        const trimmed = rtrim(text, '#');\n        if (this.options.pedantic) {\n          text = trimmed.trim();\n        } else if (!trimmed || this.rules.other.endingSpaceChar.test(trimmed)) {\n          // CommonMark requires space before trailing #s\n          text = trimmed.trim();\n        }\n      }\n\n      return {\n        type: 'heading',\n        raw: cap[0],\n        depth: cap[1].length,\n        text,\n        tokens: this.lexer.inline(text),\n      };\n    }\n  }\n\n  hr(src: string): Tokens.Hr | undefined {\n    const cap = this.rules.block.hr.exec(src);\n    if (cap) {\n      return {\n        type: 'hr',\n        raw: rtrim(cap[0], '\\n'),\n      };\n    }\n  }\n\n  blockquote(src: string): Tokens.Blockquote | undefined {\n    const cap = this.rules.block.blockquote.exec(src);\n    if (cap) {\n      let lines = rtrim(cap[0], '\\n').split('\\n');\n      let raw = '';\n      let text = '';\n      const tokens: Token[] = [];\n\n      while (lines.length > 0) {\n        let inBlockquote = false;\n        const currentLines = [];\n\n        let i;\n        for (i = 0; i < lines.length; i++) {\n          // get lines up to a continuation\n          if (this.rules.other.blockquoteStart.test(lines[i])) {\n            currentLines.push(lines[i]);\n            inBlockquote = true;\n          } else if (!inBlockquote) {\n            currentLines.push(lines[i]);\n          } else {\n            break;\n          }\n        }\n        lines = lines.slice(i);\n\n        const currentRaw = currentLines.join('\\n');\n        const currentText = currentRaw\n          // precede setext continuation with 4 spaces so it isn't a setext\n          .replace(this.rules.other.blockquoteSetextReplace, '\\n    $1')\n          .replace(this.rules.other.blockquoteSetextReplace2, '');\n        raw = raw ? `${raw}\\n${currentRaw}` : currentRaw;\n        text = text ? `${text}\\n${currentText}` : currentText;\n\n        // parse blockquote lines as top level tokens\n        // merge paragraphs if this is a continuation\n        const top = this.lexer.state.top;\n        this.lexer.state.top = true;\n        this.lexer.blockTokens(currentText, tokens, true);\n        this.lexer.state.top = top;\n\n        // if there is no continuation then we are done\n        if (lines.length === 0) {\n          break;\n        }\n\n        const lastToken = tokens.at(-1);\n\n        if (lastToken?.type === 'code') {\n          // blockquote continuation cannot be preceded by a code block\n          break;\n        } else if (lastToken?.type === 'blockquote') {\n          // include continuation in nested blockquote\n          const oldToken = lastToken as Tokens.Blockquote;\n          const newText = oldToken.raw + '\\n' + lines.join('\\n');\n          const newToken = this.blockquote(newText)!;\n          tokens[tokens.length - 1] = newToken;\n\n          raw = raw.substring(0, raw.length - oldToken.raw.length) + newToken.raw;\n          text = text.substring(0, text.length - oldToken.text.length) + newToken.text;\n          break;\n        } else if (lastToken?.type === 'list') {\n          // include continuation in nested list\n          const oldToken = lastToken as Tokens.List;\n          const newText = oldToken.raw + '\\n' + lines.join('\\n');\n          const newToken = this.list(newText)!;\n          tokens[tokens.length - 1] = newToken;\n\n          raw = raw.substring(0, raw.length - lastToken.raw.length) + newToken.raw;\n          text = text.substring(0, text.length - oldToken.raw.length) + newToken.raw;\n          lines = newText.substring(tokens.at(-1)!.raw.length).split('\\n');\n          continue;\n        }\n      }\n\n      return {\n        type: 'blockquote',\n        raw,\n        tokens,\n        text,\n      };\n    }\n  }\n\n  list(src: string): Tokens.List | undefined {\n    let cap = this.rules.block.list.exec(src);\n    if (cap) {\n      let bull = cap[1].trim();\n      const isordered = bull.length > 1;\n\n      const list: Tokens.List = {\n        type: 'list',\n        raw: '',\n        ordered: isordered,\n        start: isordered ? +bull.slice(0, -1) : '',\n        loose: false,\n        items: [],\n      };\n\n      bull = isordered ? `\\\\d{1,9}\\\\${bull.slice(-1)}` : `\\\\${bull}`;\n\n      if (this.options.pedantic) {\n        bull = isordered ? bull : '[*+-]';\n      }\n\n      // Get next list item\n      const itemRegex = this.rules.other.listItemRegex(bull);\n      let endsWithBlankLine = false;\n      // Check if current bullet point can start a new List Item\n      while (src) {\n        let endEarly = false;\n        let raw = '';\n        let itemContents = '';\n        if (!(cap = itemRegex.exec(src))) {\n          break;\n        }\n\n        if (this.rules.block.hr.test(src)) { // End list if bullet was actually HR (possibly move into itemRegex?)\n          break;\n        }\n\n        raw = cap[0];\n        src = src.substring(raw.length);\n\n        let line = cap[2].split('\\n', 1)[0].replace(this.rules.other.listReplaceTabs, (t: string) => ' '.repeat(3 * t.length));\n        let nextLine = src.split('\\n', 1)[0];\n        let blankLine = !line.trim();\n\n        let indent = 0;\n        if (this.options.pedantic) {\n          indent = 2;\n          itemContents = line.trimStart();\n        } else if (blankLine) {\n          indent = cap[1].length + 1;\n        } else {\n          indent = cap[2].search(this.rules.other.nonSpaceChar); // Find first non-space char\n          indent = indent > 4 ? 1 : indent; // Treat indented code blocks (> 4 spaces) as having only 1 indent\n          itemContents = line.slice(indent);\n          indent += cap[1].length;\n        }\n\n        if (blankLine && this.rules.other.blankLine.test(nextLine)) { // Items begin with at most one blank line\n          raw += nextLine + '\\n';\n          src = src.substring(nextLine.length + 1);\n          endEarly = true;\n        }\n\n        if (!endEarly) {\n          const nextBulletRegex = this.rules.other.nextBulletRegex(indent);\n          const hrRegex = this.rules.other.hrRegex(indent);\n          const fencesBeginRegex = this.rules.other.fencesBeginRegex(indent);\n          const headingBeginRegex = this.rules.other.headingBeginRegex(indent);\n          const htmlBeginRegex = this.rules.other.htmlBeginRegex(indent);\n\n          // Check if following lines should be included in List Item\n          while (src) {\n            const rawLine = src.split('\\n', 1)[0];\n            let nextLineWithoutTabs;\n            nextLine = rawLine;\n\n            // Re-align to follow commonmark nesting rules\n            if (this.options.pedantic) {\n              nextLine = nextLine.replace(this.rules.other.listReplaceNesting, '  ');\n              nextLineWithoutTabs = nextLine;\n            } else {\n              nextLineWithoutTabs = nextLine.replace(this.rules.other.tabCharGlobal, '    ');\n            }\n\n            // End list item if found code fences\n            if (fencesBeginRegex.test(nextLine)) {\n              break;\n            }\n\n            // End list item if found start of new heading\n            if (headingBeginRegex.test(nextLine)) {\n              break;\n            }\n\n            // End list item if found start of html block\n            if (htmlBeginRegex.test(nextLine)) {\n              break;\n            }\n\n            // End list item if found start of new bullet\n            if (nextBulletRegex.test(nextLine)) {\n              break;\n            }\n\n            // Horizontal rule found\n            if (hrRegex.test(nextLine)) {\n              break;\n            }\n\n            if (nextLineWithoutTabs.search(this.rules.other.nonSpaceChar) >= indent || !nextLine.trim()) { // Dedent if possible\n              itemContents += '\\n' + nextLineWithoutTabs.slice(indent);\n            } else {\n              // not enough indentation\n              if (blankLine) {\n                break;\n              }\n\n              // paragraph continuation unless last line was a different block level element\n              if (line.replace(this.rules.other.tabCharGlobal, '    ').search(this.rules.other.nonSpaceChar) >= 4) { // indented code block\n                break;\n              }\n              if (fencesBeginRegex.test(line)) {\n                break;\n              }\n              if (headingBeginRegex.test(line)) {\n                break;\n              }\n              if (hrRegex.test(line)) {\n                break;\n              }\n\n              itemContents += '\\n' + nextLine;\n            }\n\n            if (!blankLine && !nextLine.trim()) { // Check if current line is blank\n              blankLine = true;\n            }\n\n            raw += rawLine + '\\n';\n            src = src.substring(rawLine.length + 1);\n            line = nextLineWithoutTabs.slice(indent);\n          }\n        }\n\n        if (!list.loose) {\n          // If the previous item ended with a blank line, the list is loose\n          if (endsWithBlankLine) {\n            list.loose = true;\n          } else if (this.rules.other.doubleBlankLine.test(raw)) {\n            endsWithBlankLine = true;\n          }\n        }\n\n        let istask: RegExpExecArray | null = null;\n        let ischecked: boolean | undefined;\n        // Check for task list items\n        if (this.options.gfm) {\n          istask = this.rules.other.listIsTask.exec(itemContents);\n          if (istask) {\n            ischecked = istask[0] !== '[ ] ';\n            itemContents = itemContents.replace(this.rules.other.listReplaceTask, '');\n          }\n        }\n\n        list.items.push({\n          type: 'list_item',\n          raw,\n          task: !!istask,\n          checked: ischecked,\n          loose: false,\n          text: itemContents,\n          tokens: [],\n        });\n\n        list.raw += raw;\n      }\n\n      // Do not consume newlines at end of final item. Alternatively, make itemRegex *start* with any newlines to simplify/speed up endsWithBlankLine logic\n      const lastItem = list.items.at(-1);\n      if (lastItem) {\n        lastItem.raw = lastItem.raw.trimEnd();\n        lastItem.text = lastItem.text.trimEnd();\n      } else {\n        // not a list since there were no items\n        return;\n      }\n      list.raw = list.raw.trimEnd();\n\n      // Item child tokens handled here at end because we needed to have the final item to trim it first\n      for (let i = 0; i < list.items.length; i++) {\n        this.lexer.state.top = false;\n        list.items[i].tokens = this.lexer.blockTokens(list.items[i].text, []);\n\n        if (!list.loose) {\n          // Check if list should be loose\n          const spacers = list.items[i].tokens.filter(t => t.type === 'space');\n          const hasMultipleLineBreaks = spacers.length > 0 && spacers.some(t => this.rules.other.anyLine.test(t.raw));\n\n          list.loose = hasMultipleLineBreaks;\n        }\n      }\n\n      // Set all items to loose if list is loose\n      if (list.loose) {\n        for (let i = 0; i < list.items.length; i++) {\n          list.items[i].loose = true;\n        }\n      }\n\n      return list;\n    }\n  }\n\n  html(src: string): Tokens.HTML | undefined {\n    const cap = this.rules.block.html.exec(src);\n    if (cap) {\n      const token: Tokens.HTML = {\n        type: 'html',\n        block: true,\n        raw: cap[0],\n        pre: cap[1] === 'pre' || cap[1] === 'script' || cap[1] === 'style',\n        text: cap[0],\n      };\n      return token;\n    }\n  }\n\n  def(src: string): Tokens.Def | undefined {\n    const cap = this.rules.block.def.exec(src);\n    if (cap) {\n      const tag = cap[1].toLowerCase().replace(this.rules.other.multipleSpaceGlobal, ' ');\n      const href = cap[2] ? cap[2].replace(this.rules.other.hrefBrackets, '$1').replace(this.rules.inline.anyPunctuation, '$1') : '';\n      const title = cap[3] ? cap[3].substring(1, cap[3].length - 1).replace(this.rules.inline.anyPunctuation, '$1') : cap[3];\n      return {\n        type: 'def',\n        tag,\n        raw: cap[0],\n        href,\n        title,\n      };\n    }\n  }\n\n  table(src: string): Tokens.Table | undefined {\n    const cap = this.rules.block.table.exec(src);\n    if (!cap) {\n      return;\n    }\n\n    if (!this.rules.other.tableDelimiter.test(cap[2])) {\n      // delimiter row must have a pipe (|) or colon (:) otherwise it is a setext heading\n      return;\n    }\n\n    const headers = splitCells(cap[1]);\n    const aligns = cap[2].replace(this.rules.other.tableAlignChars, '').split('|');\n    const rows = cap[3]?.trim() ? cap[3].replace(this.rules.other.tableRowBlankLine, '').split('\\n') : [];\n\n    const item: Tokens.Table = {\n      type: 'table',\n      raw: cap[0],\n      header: [],\n      align: [],\n      rows: [],\n    };\n\n    if (headers.length !== aligns.length) {\n      // header and align columns must be equal, rows can be different.\n      return;\n    }\n\n    for (const align of aligns) {\n      if (this.rules.other.tableAlignRight.test(align)) {\n        item.align.push('right');\n      } else if (this.rules.other.tableAlignCenter.test(align)) {\n        item.align.push('center');\n      } else if (this.rules.other.tableAlignLeft.test(align)) {\n        item.align.push('left');\n      } else {\n        item.align.push(null);\n      }\n    }\n\n    for (let i = 0; i < headers.length; i++) {\n      item.header.push({\n        text: headers[i],\n        tokens: this.lexer.inline(headers[i]),\n        header: true,\n        align: item.align[i],\n      });\n    }\n\n    for (const row of rows) {\n      item.rows.push(splitCells(row, item.header.length).map((cell, i) => {\n        return {\n          text: cell,\n          tokens: this.lexer.inline(cell),\n          header: false,\n          align: item.align[i],\n        };\n      }));\n    }\n\n    return item;\n  }\n\n  lheading(src: string): Tokens.Heading | undefined {\n    const cap = this.rules.block.lheading.exec(src);\n    if (cap) {\n      return {\n        type: 'heading',\n        raw: cap[0],\n        depth: cap[2].charAt(0) === '=' ? 1 : 2,\n        text: cap[1],\n        tokens: this.lexer.inline(cap[1]),\n      };\n    }\n  }\n\n  paragraph(src: string): Tokens.Paragraph | undefined {\n    const cap = this.rules.block.paragraph.exec(src);\n    if (cap) {\n      const text = cap[1].charAt(cap[1].length - 1) === '\\n'\n        ? cap[1].slice(0, -1)\n        : cap[1];\n      return {\n        type: 'paragraph',\n        raw: cap[0],\n        text,\n        tokens: this.lexer.inline(text),\n      };\n    }\n  }\n\n  text(src: string): Tokens.Text | undefined {\n    const cap = this.rules.block.text.exec(src);\n    if (cap) {\n      return {\n        type: 'text',\n        raw: cap[0],\n        text: cap[0],\n        tokens: this.lexer.inline(cap[0]),\n      };\n    }\n  }\n\n  escape(src: string): Tokens.Escape | undefined {\n    const cap = this.rules.inline.escape.exec(src);\n    if (cap) {\n      return {\n        type: 'escape',\n        raw: cap[0],\n        text: cap[1],\n      };\n    }\n  }\n\n  tag(src: string): Tokens.Tag | undefined {\n    const cap = this.rules.inline.tag.exec(src);\n    if (cap) {\n      if (!this.lexer.state.inLink && this.rules.other.startATag.test(cap[0])) {\n        this.lexer.state.inLink = true;\n      } else if (this.lexer.state.inLink && this.rules.other.endATag.test(cap[0])) {\n        this.lexer.state.inLink = false;\n      }\n      if (!this.lexer.state.inRawBlock && this.rules.other.startPreScriptTag.test(cap[0])) {\n        this.lexer.state.inRawBlock = true;\n      } else if (this.lexer.state.inRawBlock && this.rules.other.endPreScriptTag.test(cap[0])) {\n        this.lexer.state.inRawBlock = false;\n      }\n\n      return {\n        type: 'html',\n        raw: cap[0],\n        inLink: this.lexer.state.inLink,\n        inRawBlock: this.lexer.state.inRawBlock,\n        block: false,\n        text: cap[0],\n      };\n    }\n  }\n\n  link(src: string): Tokens.Link | Tokens.Image | undefined {\n    const cap = this.rules.inline.link.exec(src);\n    if (cap) {\n      const trimmedUrl = cap[2].trim();\n      if (!this.options.pedantic && this.rules.other.startAngleBracket.test(trimmedUrl)) {\n        // commonmark requires matching angle brackets\n        if (!(this.rules.other.endAngleBracket.test(trimmedUrl))) {\n          return;\n        }\n\n        // ending angle bracket cannot be escaped\n        const rtrimSlash = rtrim(trimmedUrl.slice(0, -1), '\\\\');\n        if ((trimmedUrl.length - rtrimSlash.length) % 2 === 0) {\n          return;\n        }\n      } else {\n        // find closing parenthesis\n        const lastParenIndex = findClosingBracket(cap[2], '()');\n        if (lastParenIndex === -2) {\n          // more open parens than closed\n          return;\n        }\n\n        if (lastParenIndex > -1) {\n          const start = cap[0].indexOf('!') === 0 ? 5 : 4;\n          const linkLen = start + cap[1].length + lastParenIndex;\n          cap[2] = cap[2].substring(0, lastParenIndex);\n          cap[0] = cap[0].substring(0, linkLen).trim();\n          cap[3] = '';\n        }\n      }\n      let href = cap[2];\n      let title = '';\n      if (this.options.pedantic) {\n        // split pedantic href and title\n        const link = this.rules.other.pedanticHrefTitle.exec(href);\n\n        if (link) {\n          href = link[1];\n          title = link[3];\n        }\n      } else {\n        title = cap[3] ? cap[3].slice(1, -1) : '';\n      }\n\n      href = href.trim();\n      if (this.rules.other.startAngleBracket.test(href)) {\n        if (this.options.pedantic && !(this.rules.other.endAngleBracket.test(trimmedUrl))) {\n          // pedantic allows starting angle bracket without ending angle bracket\n          href = href.slice(1);\n        } else {\n          href = href.slice(1, -1);\n        }\n      }\n      return outputLink(cap, {\n        href: href ? href.replace(this.rules.inline.anyPunctuation, '$1') : href,\n        title: title ? title.replace(this.rules.inline.anyPunctuation, '$1') : title,\n      }, cap[0], this.lexer, this.rules);\n    }\n  }\n\n  reflink(src: string, links: Links): Tokens.Link | Tokens.Image | Tokens.Text | undefined {\n    let cap;\n    if ((cap = this.rules.inline.reflink.exec(src))\n      || (cap = this.rules.inline.nolink.exec(src))) {\n      const linkString = (cap[2] || cap[1]).replace(this.rules.other.multipleSpaceGlobal, ' ');\n      const link = links[linkString.toLowerCase()];\n      if (!link) {\n        const text = cap[0].charAt(0);\n        return {\n          type: 'text',\n          raw: text,\n          text,\n        };\n      }\n      return outputLink(cap, link, cap[0], this.lexer, this.rules);\n    }\n  }\n\n  emStrong(src: string, maskedSrc: string, prevChar = ''): Tokens.Em | Tokens.Strong | undefined {\n    let match = this.rules.inline.emStrongLDelim.exec(src);\n    if (!match) return;\n\n    // _ can't be between two alphanumerics. \\p{L}\\p{N} includes non-english alphabet/numbers as well\n    if (match[3] && prevChar.match(this.rules.other.unicodeAlphaNumeric)) return;\n\n    const nextChar = match[1] || match[2] || '';\n\n    if (!nextChar || !prevChar || this.rules.inline.punctuation.exec(prevChar)) {\n      // unicode Regex counts emoji as 1 char; spread into array for proper count (used multiple times below)\n      const lLength = [...match[0]].length - 1;\n      let rDelim, rLength, delimTotal = lLength, midDelimTotal = 0;\n\n      const endReg = match[0][0] === '*' ? this.rules.inline.emStrongRDelimAst : this.rules.inline.emStrongRDelimUnd;\n      endReg.lastIndex = 0;\n\n      // Clip maskedSrc to same section of string as src (move to lexer?)\n      maskedSrc = maskedSrc.slice(-1 * src.length + lLength);\n\n      while ((match = endReg.exec(maskedSrc)) != null) {\n        rDelim = match[1] || match[2] || match[3] || match[4] || match[5] || match[6];\n\n        if (!rDelim) continue; // skip single * in __abc*abc__\n\n        rLength = [...rDelim].length;\n\n        if (match[3] || match[4]) { // found another Left Delim\n          delimTotal += rLength;\n          continue;\n        } else if (match[5] || match[6]) { // either Left or Right Delim\n          if (lLength % 3 && !((lLength + rLength) % 3)) {\n            midDelimTotal += rLength;\n            continue; // CommonMark Emphasis Rules 9-10\n          }\n        }\n\n        delimTotal -= rLength;\n\n        if (delimTotal > 0) continue; // Haven't found enough closing delimiters\n\n        // Remove extra characters. *a*** -> *a*\n        rLength = Math.min(rLength, rLength + delimTotal + midDelimTotal);\n        // char length can be >1 for unicode characters;\n        const lastCharLength = [...match[0]][0].length;\n        const raw = src.slice(0, lLength + match.index + lastCharLength + rLength);\n\n        // Create `em` if smallest delimiter has odd char count. *a***\n        if (Math.min(lLength, rLength) % 2) {\n          const text = raw.slice(1, -1);\n          return {\n            type: 'em',\n            raw,\n            text,\n            tokens: this.lexer.inlineTokens(text),\n          };\n        }\n\n        // Create 'strong' if smallest delimiter has even char count. **a***\n        const text = raw.slice(2, -2);\n        return {\n          type: 'strong',\n          raw,\n          text,\n          tokens: this.lexer.inlineTokens(text),\n        };\n      }\n    }\n  }\n\n  codespan(src: string): Tokens.Codespan | undefined {\n    const cap = this.rules.inline.code.exec(src);\n    if (cap) {\n      let text = cap[2].replace(this.rules.other.newLineCharGlobal, ' ');\n      const hasNonSpaceChars = this.rules.other.nonSpaceChar.test(text);\n      const hasSpaceCharsOnBothEnds = this.rules.other.startingSpaceChar.test(text) && this.rules.other.endingSpaceChar.test(text);\n      if (hasNonSpaceChars && hasSpaceCharsOnBothEnds) {\n        text = text.substring(1, text.length - 1);\n      }\n      return {\n        type: 'codespan',\n        raw: cap[0],\n        text,\n      };\n    }\n  }\n\n  br(src: string): Tokens.Br | undefined {\n    const cap = this.rules.inline.br.exec(src);\n    if (cap) {\n      return {\n        type: 'br',\n        raw: cap[0],\n      };\n    }\n  }\n\n  del(src: string): Tokens.Del | undefined {\n    const cap = this.rules.inline.del.exec(src);\n    if (cap) {\n      return {\n        type: 'del',\n        raw: cap[0],\n        text: cap[2],\n        tokens: this.lexer.inlineTokens(cap[2]),\n      };\n    }\n  }\n\n  autolink(src: string): Tokens.Link | undefined {\n    const cap = this.rules.inline.autolink.exec(src);\n    if (cap) {\n      let text, href;\n      if (cap[2] === '@') {\n        text = cap[1];\n        href = 'mailto:' + text;\n      } else {\n        text = cap[1];\n        href = text;\n      }\n\n      return {\n        type: 'link',\n        raw: cap[0],\n        text,\n        href,\n        tokens: [\n          {\n            type: 'text',\n            raw: text,\n            text,\n          },\n        ],\n      };\n    }\n  }\n\n  url(src: string): Tokens.Link | undefined {\n    let cap;\n    if (cap = this.rules.inline.url.exec(src)) {\n      let text, href;\n      if (cap[2] === '@') {\n        text = cap[0];\n        href = 'mailto:' + text;\n      } else {\n        // do extended autolink path validation\n        let prevCapZero;\n        do {\n          prevCapZero = cap[0];\n          cap[0] = this.rules.inline._backpedal.exec(cap[0])?.[0] ?? '';\n        } while (prevCapZero !== cap[0]);\n        text = cap[0];\n        if (cap[1] === 'www.') {\n          href = 'http://' + cap[0];\n        } else {\n          href = cap[0];\n        }\n      }\n      return {\n        type: 'link',\n        raw: cap[0],\n        text,\n        href,\n        tokens: [\n          {\n            type: 'text',\n            raw: text,\n            text,\n          },\n        ],\n      };\n    }\n  }\n\n  inlineText(src: string): Tokens.Text | undefined {\n    const cap = this.rules.inline.text.exec(src);\n    if (cap) {\n      const escaped = this.lexer.state.inRawBlock;\n      return {\n        type: 'text',\n        raw: cap[0],\n        text: cap[0],\n        escaped,\n      };\n    }\n  }\n}\n","import { _Tokenizer } from './Tokenizer.ts';\nimport { _defaults } from './defaults.ts';\nimport { other, block, inline } from './rules.ts';\nimport type { Token, TokensList, Tokens } from './Tokens.ts';\nimport type { MarkedOptions } from './MarkedOptions.ts';\n\n/**\n * Block Lexer\n */\nexport class _Lexer<ParserOutput = string, RendererOutput = string> {\n  tokens: TokensList;\n  options: MarkedOptions<ParserOutput, RendererOutput>;\n  state: {\n    inLink: boolean;\n    inRawBlock: boolean;\n    top: boolean;\n  };\n\n  private tokenizer: _Tokenizer<ParserOutput, RendererOutput>;\n  private inlineQueue: { src: string, tokens: Token[] }[];\n\n  constructor(options?: MarkedOptions<ParserOutput, RendererOutput>) {\n    // TokenList cannot be created in one go\n    this.tokens = [] as unknown as TokensList;\n    this.tokens.links = Object.create(null);\n    this.options = options || _defaults;\n    this.options.tokenizer = this.options.tokenizer || new _Tokenizer<ParserOutput, RendererOutput>();\n    this.tokenizer = this.options.tokenizer;\n    this.tokenizer.options = this.options;\n    this.tokenizer.lexer = this;\n    this.inlineQueue = [];\n    this.state = {\n      inLink: false,\n      inRawBlock: false,\n      top: true,\n    };\n\n    const rules = {\n      other,\n      block: block.normal,\n      inline: inline.normal,\n    };\n\n    if (this.options.pedantic) {\n      rules.block = block.pedantic;\n      rules.inline = inline.pedantic;\n    } else if (this.options.gfm) {\n      rules.block = block.gfm;\n      if (this.options.breaks) {\n        rules.inline = inline.breaks;\n      } else {\n        rules.inline = inline.gfm;\n      }\n    }\n    this.tokenizer.rules = rules;\n  }\n\n  /**\n   * Expose Rules\n   */\n  static get rules() {\n    return {\n      block,\n      inline,\n    };\n  }\n\n  /**\n   * Static Lex Method\n   */\n  static lex<ParserOutput = string, RendererOutput = string>(src: string, options?: MarkedOptions<ParserOutput, RendererOutput>) {\n    const lexer = new _Lexer<ParserOutput, RendererOutput>(options);\n    return lexer.lex(src);\n  }\n\n  /**\n   * Static Lex Inline Method\n   */\n  static lexInline<ParserOutput = string, RendererOutput = string>(src: string, options?: MarkedOptions<ParserOutput, RendererOutput>) {\n    const lexer = new _Lexer<ParserOutput, RendererOutput>(options);\n    return lexer.inlineTokens(src);\n  }\n\n  /**\n   * Preprocessing\n   */\n  lex(src: string) {\n    src = src.replace(other.carriageReturn, '\\n');\n\n    this.blockTokens(src, this.tokens);\n\n    for (let i = 0; i < this.inlineQueue.length; i++) {\n      const next = this.inlineQueue[i];\n      this.inlineTokens(next.src, next.tokens);\n    }\n    this.inlineQueue = [];\n\n    return this.tokens;\n  }\n\n  /**\n   * Lexing\n   */\n  blockTokens(src: string, tokens?: Token[], lastParagraphClipped?: boolean): Token[];\n  blockTokens(src: string, tokens?: TokensList, lastParagraphClipped?: boolean): TokensList;\n  blockTokens(src: string, tokens: Token[] = [], lastParagraphClipped = false) {\n    if (this.options.pedantic) {\n      src = src.replace(other.tabCharGlobal, '    ').replace(other.spaceLine, '');\n    }\n\n    while (src) {\n      let token: Tokens.Generic | undefined;\n\n      if (this.options.extensions?.block?.some((extTokenizer) => {\n        if (token = extTokenizer.call({ lexer: this }, src, tokens)) {\n          src = src.substring(token.raw.length);\n          tokens.push(token);\n          return true;\n        }\n        return false;\n      })) {\n        continue;\n      }\n\n      // newline\n      if (token = this.tokenizer.space(src)) {\n        src = src.substring(token.raw.length);\n        const lastToken = tokens.at(-1);\n        if (token.raw.length === 1 && lastToken !== undefined) {\n          // if there's a single \\n as a spacer, it's terminating the last line,\n          // so move it there so that we don't get unnecessary paragraph tags\n          lastToken.raw += '\\n';\n        } else {\n          tokens.push(token);\n        }\n        continue;\n      }\n\n      // code\n      if (token = this.tokenizer.code(src)) {\n        src = src.substring(token.raw.length);\n        const lastToken = tokens.at(-1);\n        // An indented code block cannot interrupt a paragraph.\n        if (lastToken?.type === 'paragraph' || lastToken?.type === 'text') {\n          lastToken.raw += (lastToken.raw.endsWith('\\n') ? '' : '\\n') + token.raw;\n          lastToken.text += '\\n' + token.text;\n          this.inlineQueue.at(-1)!.src = lastToken.text;\n        } else {\n          tokens.push(token);\n        }\n        continue;\n      }\n\n      // fences\n      if (token = this.tokenizer.fences(src)) {\n        src = src.substring(token.raw.length);\n        tokens.push(token);\n        continue;\n      }\n\n      // heading\n      if (token = this.tokenizer.heading(src)) {\n        src = src.substring(token.raw.length);\n        tokens.push(token);\n        continue;\n      }\n\n      // hr\n      if (token = this.tokenizer.hr(src)) {\n        src = src.substring(token.raw.length);\n        tokens.push(token);\n        continue;\n      }\n\n      // blockquote\n      if (token = this.tokenizer.blockquote(src)) {\n        src = src.substring(token.raw.length);\n        tokens.push(token);\n        continue;\n      }\n\n      // list\n      if (token = this.tokenizer.list(src)) {\n        src = src.substring(token.raw.length);\n        tokens.push(token);\n        continue;\n      }\n\n      // html\n      if (token = this.tokenizer.html(src)) {\n        src = src.substring(token.raw.length);\n        tokens.push(token);\n        continue;\n      }\n\n      // def\n      if (token = this.tokenizer.def(src)) {\n        src = src.substring(token.raw.length);\n        const lastToken = tokens.at(-1);\n        if (lastToken?.type === 'paragraph' || lastToken?.type === 'text') {\n          lastToken.raw += (lastToken.raw.endsWith('\\n') ? '' : '\\n') + token.raw;\n          lastToken.text += '\\n' + token.raw;\n          this.inlineQueue.at(-1)!.src = lastToken.text;\n        } else if (!this.tokens.links[token.tag]) {\n          this.tokens.links[token.tag] = {\n            href: token.href,\n            title: token.title,\n          };\n          tokens.push(token);\n        }\n        continue;\n      }\n\n      // table (gfm)\n      if (token = this.tokenizer.table(src)) {\n        src = src.substring(token.raw.length);\n        tokens.push(token);\n        continue;\n      }\n\n      // lheading\n      if (token = this.tokenizer.lheading(src)) {\n        src = src.substring(token.raw.length);\n        tokens.push(token);\n        continue;\n      }\n\n      // top-level paragraph\n      // prevent paragraph consuming extensions by clipping 'src' to extension start\n      let cutSrc = src;\n      if (this.options.extensions?.startBlock) {\n        let startIndex = Infinity;\n        const tempSrc = src.slice(1);\n        let tempStart;\n        this.options.extensions.startBlock.forEach((getStartIndex) => {\n          tempStart = getStartIndex.call({ lexer: this }, tempSrc);\n          if (typeof tempStart === 'number' && tempStart >= 0) {\n            startIndex = Math.min(startIndex, tempStart);\n          }\n        });\n        if (startIndex < Infinity && startIndex >= 0) {\n          cutSrc = src.substring(0, startIndex + 1);\n        }\n      }\n      if (this.state.top && (token = this.tokenizer.paragraph(cutSrc))) {\n        const lastToken = tokens.at(-1);\n        if (lastParagraphClipped && lastToken?.type === 'paragraph') {\n          lastToken.raw += (lastToken.raw.endsWith('\\n') ? '' : '\\n') + token.raw;\n          lastToken.text += '\\n' + token.text;\n          this.inlineQueue.pop();\n          this.inlineQueue.at(-1)!.src = lastToken.text;\n        } else {\n          tokens.push(token);\n        }\n        lastParagraphClipped = cutSrc.length !== src.length;\n        src = src.substring(token.raw.length);\n        continue;\n      }\n\n      // text\n      if (token = this.tokenizer.text(src)) {\n        src = src.substring(token.raw.length);\n        const lastToken = tokens.at(-1);\n        if (lastToken?.type === 'text') {\n          lastToken.raw += (lastToken.raw.endsWith('\\n') ? '' : '\\n') + token.raw;\n          lastToken.text += '\\n' + token.text;\n          this.inlineQueue.pop();\n          this.inlineQueue.at(-1)!.src = lastToken.text;\n        } else {\n          tokens.push(token);\n        }\n        continue;\n      }\n\n      if (src) {\n        const errMsg = 'Infinite loop on byte: ' + src.charCodeAt(0);\n        if (this.options.silent) {\n          console.error(errMsg);\n          break;\n        } else {\n          throw new Error(errMsg);\n        }\n      }\n    }\n\n    this.state.top = true;\n    return tokens;\n  }\n\n  inline(src: string, tokens: Token[] = []) {\n    this.inlineQueue.push({ src, tokens });\n    return tokens;\n  }\n\n  /**\n   * Lexing/Compiling\n   */\n  inlineTokens(src: string, tokens: Token[] = []): Token[] {\n    // String with links masked to avoid interference with em and strong\n    let maskedSrc = src;\n    let match: RegExpExecArray | null = null;\n\n    // Mask out reflinks\n    if (this.tokens.links) {\n      const links = Object.keys(this.tokens.links);\n      if (links.length > 0) {\n        while ((match = this.tokenizer.rules.inline.reflinkSearch.exec(maskedSrc)) != null) {\n          if (links.includes(match[0].slice(match[0].lastIndexOf('[') + 1, -1))) {\n            maskedSrc = maskedSrc.slice(0, match.index)\n              + '[' + 'a'.repeat(match[0].length - 2) + ']'\n              + maskedSrc.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex);\n          }\n        }\n      }\n    }\n\n    // Mask out escaped characters\n    while ((match = this.tokenizer.rules.inline.anyPunctuation.exec(maskedSrc)) != null) {\n      maskedSrc = maskedSrc.slice(0, match.index) + '++' + maskedSrc.slice(this.tokenizer.rules.inline.anyPunctuation.lastIndex);\n    }\n\n    // Mask out other blocks\n    while ((match = this.tokenizer.rules.inline.blockSkip.exec(maskedSrc)) != null) {\n      maskedSrc = maskedSrc.slice(0, match.index) + '[' + 'a'.repeat(match[0].length - 2) + ']' + maskedSrc.slice(this.tokenizer.rules.inline.blockSkip.lastIndex);\n    }\n\n    let keepPrevChar = false;\n    let prevChar = '';\n    while (src) {\n      if (!keepPrevChar) {\n        prevChar = '';\n      }\n      keepPrevChar = false;\n\n      let token: Tokens.Generic | undefined;\n\n      // extensions\n      if (this.options.extensions?.inline?.some((extTokenizer) => {\n        if (token = extTokenizer.call({ lexer: this }, src, tokens)) {\n          src = src.substring(token.raw.length);\n          tokens.push(token);\n          return true;\n        }\n        return false;\n      })) {\n        continue;\n      }\n\n      // escape\n      if (token = this.tokenizer.escape(src)) {\n        src = src.substring(token.raw.length);\n        tokens.push(token);\n        continue;\n      }\n\n      // tag\n      if (token = this.tokenizer.tag(src)) {\n        src = src.substring(token.raw.length);\n        tokens.push(token);\n        continue;\n      }\n\n      // link\n      if (token = this.tokenizer.link(src)) {\n        src = src.substring(token.raw.length);\n        tokens.push(token);\n        continue;\n      }\n\n      // reflink, nolink\n      if (token = this.tokenizer.reflink(src, this.tokens.links)) {\n        src = src.substring(token.raw.length);\n        const lastToken = tokens.at(-1);\n        if (token.type === 'text' && lastToken?.type === 'text') {\n          lastToken.raw += token.raw;\n          lastToken.text += token.text;\n        } else {\n          tokens.push(token);\n        }\n        continue;\n      }\n\n      // em & strong\n      if (token = this.tokenizer.emStrong(src, maskedSrc, prevChar)) {\n        src = src.substring(token.raw.length);\n        tokens.push(token);\n        continue;\n      }\n\n      // code\n      if (token = this.tokenizer.codespan(src)) {\n        src = src.substring(token.raw.length);\n        tokens.push(token);\n        continue;\n      }\n\n      // br\n      if (token = this.tokenizer.br(src)) {\n        src = src.substring(token.raw.length);\n        tokens.push(token);\n        continue;\n      }\n\n      // del (gfm)\n      if (token = this.tokenizer.del(src)) {\n        src = src.substring(token.raw.length);\n        tokens.push(token);\n        continue;\n      }\n\n      // autolink\n      if (token = this.tokenizer.autolink(src)) {\n        src = src.substring(token.raw.length);\n        tokens.push(token);\n        continue;\n      }\n\n      // url (gfm)\n      if (!this.state.inLink && (token = this.tokenizer.url(src))) {\n        src = src.substring(token.raw.length);\n        tokens.push(token);\n        continue;\n      }\n\n      // text\n      // prevent inlineText consuming extensions by clipping 'src' to extension start\n      let cutSrc = src;\n      if (this.options.extensions?.startInline) {\n        let startIndex = Infinity;\n        const tempSrc = src.slice(1);\n        let tempStart;\n        this.options.extensions.startInline.forEach((getStartIndex) => {\n          tempStart = getStartIndex.call({ lexer: this }, tempSrc);\n          if (typeof tempStart === 'number' && tempStart >= 0) {\n            startIndex = Math.min(startIndex, tempStart);\n          }\n        });\n        if (startIndex < Infinity && startIndex >= 0) {\n          cutSrc = src.substring(0, startIndex + 1);\n        }\n      }\n      if (token = this.tokenizer.inlineText(cutSrc)) {\n        src = src.substring(token.raw.length);\n        if (token.raw.slice(-1) !== '_') { // Track prevChar before string of ____ started\n          prevChar = token.raw.slice(-1);\n        }\n        keepPrevChar = true;\n        const lastToken = tokens.at(-1);\n        if (lastToken?.type === 'text') {\n          lastToken.raw += token.raw;\n          lastToken.text += token.text;\n        } else {\n          tokens.push(token);\n        }\n        continue;\n      }\n\n      if (src) {\n        const errMsg = 'Infinite loop on byte: ' + src.charCodeAt(0);\n        if (this.options.silent) {\n          console.error(errMsg);\n          break;\n        } else {\n          throw new Error(errMsg);\n        }\n      }\n    }\n\n    return tokens;\n  }\n}\n","import { _defaults } from './defaults.ts';\nimport {\n  cleanUrl,\n  escape,\n} from './helpers.ts';\nimport { other } from './rules.ts';\nimport type { MarkedOptions } from './MarkedOptions.ts';\nimport type { Tokens } from './Tokens.ts';\nimport type { _Parser } from './Parser.ts';\n\n/**\n * Renderer\n */\nexport class _Renderer<ParserOutput = string, RendererOutput = string> {\n  options: MarkedOptions<ParserOutput, RendererOutput>;\n  parser!: _Parser<ParserOutput, RendererOutput>; // set by the parser\n  constructor(options?: MarkedOptions<ParserOutput, RendererOutput>) {\n    this.options = options || _defaults;\n  }\n\n  space(token: Tokens.Space): RendererOutput {\n    return '' as RendererOutput;\n  }\n\n  code({ text, lang, escaped }: Tokens.Code): RendererOutput {\n    const langString = (lang || '').match(other.notSpaceStart)?.[0];\n\n    const code = text.replace(other.endingNewline, '') + '\\n';\n\n    if (!langString) {\n      return '<pre><code>'\n        + (escaped ? code : escape(code, true))\n        + '</code></pre>\\n' as RendererOutput;\n    }\n\n    return '<pre><code class=\"language-'\n      + escape(langString)\n      + '\">'\n      + (escaped ? code : escape(code, true))\n      + '</code></pre>\\n' as RendererOutput;\n  }\n\n  blockquote({ tokens }: Tokens.Blockquote): RendererOutput {\n    const body = this.parser.parse(tokens);\n    return `<blockquote>\\n${body}</blockquote>\\n` as RendererOutput;\n  }\n\n  html({ text }: Tokens.HTML | Tokens.Tag): RendererOutput {\n    return text as RendererOutput;\n  }\n\n  def(token: Tokens.Def): RendererOutput {\n    return '' as RendererOutput;\n  }\n\n  heading({ tokens, depth }: Tokens.Heading): RendererOutput {\n    return `<h${depth}>${this.parser.parseInline(tokens)}</h${depth}>\\n` as RendererOutput;\n  }\n\n  hr(token: Tokens.Hr): RendererOutput {\n    return '<hr>\\n' as RendererOutput;\n  }\n\n  list(token: Tokens.List): RendererOutput {\n    const ordered = token.ordered;\n    const start = token.start;\n\n    let body = '';\n    for (let j = 0; j < token.items.length; j++) {\n      const item = token.items[j];\n      body += this.listitem(item);\n    }\n\n    const type = ordered ? 'ol' : 'ul';\n    const startAttr = (ordered && start !== 1) ? (' start=\"' + start + '\"') : '';\n    return '<' + type + startAttr + '>\\n' + body + '</' + type + '>\\n' as RendererOutput;\n  }\n\n  listitem(item: Tokens.ListItem): RendererOutput {\n    let itemBody = '';\n    if (item.task) {\n      const checkbox = this.checkbox({ checked: !!item.checked });\n      if (item.loose) {\n        if (item.tokens[0]?.type === 'paragraph') {\n          item.tokens[0].text = checkbox + ' ' + item.tokens[0].text;\n          if (item.tokens[0].tokens && item.tokens[0].tokens.length > 0 && item.tokens[0].tokens[0].type === 'text') {\n            item.tokens[0].tokens[0].text = checkbox + ' ' + escape(item.tokens[0].tokens[0].text);\n            item.tokens[0].tokens[0].escaped = true;\n          }\n        } else {\n          item.tokens.unshift({\n            type: 'text',\n            raw: checkbox + ' ',\n            text: checkbox + ' ',\n            escaped: true,\n          });\n        }\n      } else {\n        itemBody += checkbox + ' ';\n      }\n    }\n\n    itemBody += this.parser.parse(item.tokens, !!item.loose);\n\n    return `<li>${itemBody}</li>\\n` as RendererOutput;\n  }\n\n  checkbox({ checked }: Tokens.Checkbox): RendererOutput {\n    return '<input '\n      + (checked ? 'checked=\"\" ' : '')\n      + 'disabled=\"\" type=\"checkbox\">' as RendererOutput;\n  }\n\n  paragraph({ tokens }: Tokens.Paragraph): RendererOutput {\n    return `<p>${this.parser.parseInline(tokens)}</p>\\n` as RendererOutput;\n  }\n\n  table(token: Tokens.Table): RendererOutput {\n    let header = '';\n\n    // header\n    let cell = '';\n    for (let j = 0; j < token.header.length; j++) {\n      cell += this.tablecell(token.header[j]);\n    }\n    header += this.tablerow({ text: cell as ParserOutput });\n\n    let body = '';\n    for (let j = 0; j < token.rows.length; j++) {\n      const row = token.rows[j];\n\n      cell = '';\n      for (let k = 0; k < row.length; k++) {\n        cell += this.tablecell(row[k]);\n      }\n\n      body += this.tablerow({ text: cell as ParserOutput });\n    }\n    if (body) body = `<tbody>${body}</tbody>`;\n\n    return '<table>\\n'\n      + '<thead>\\n'\n      + header\n      + '</thead>\\n'\n      + body\n      + '</table>\\n' as RendererOutput;\n  }\n\n  tablerow({ text }: Tokens.TableRow<ParserOutput>): RendererOutput {\n    return `<tr>\\n${text}</tr>\\n` as RendererOutput;\n  }\n\n  tablecell(token: Tokens.TableCell): RendererOutput {\n    const content = this.parser.parseInline(token.tokens);\n    const type = token.header ? 'th' : 'td';\n    const tag = token.align\n      ? `<${type} align=\"${token.align}\">`\n      : `<${type}>`;\n    return tag + content + `</${type}>\\n` as RendererOutput;\n  }\n\n  /**\n   * span level renderer\n   */\n  strong({ tokens }: Tokens.Strong): RendererOutput {\n    return `<strong>${this.parser.parseInline(tokens)}</strong>` as RendererOutput;\n  }\n\n  em({ tokens }: Tokens.Em): RendererOutput {\n    return `<em>${this.parser.parseInline(tokens)}</em>` as RendererOutput;\n  }\n\n  codespan({ text }: Tokens.Codespan): RendererOutput {\n    return `<code>${escape(text, true)}</code>` as RendererOutput;\n  }\n\n  br(token: Tokens.Br): RendererOutput {\n    return '<br>' as RendererOutput;\n  }\n\n  del({ tokens }: Tokens.Del): RendererOutput {\n    return `<del>${this.parser.parseInline(tokens)}</del>` as RendererOutput;\n  }\n\n  link({ href, title, tokens }: Tokens.Link): RendererOutput {\n    const text = this.parser.parseInline(tokens) as string;\n    const cleanHref = cleanUrl(href);\n    if (cleanHref === null) {\n      return text as RendererOutput;\n    }\n    href = cleanHref;\n    let out = '<a href=\"' + href + '\"';\n    if (title) {\n      out += ' title=\"' + (escape(title)) + '\"';\n    }\n    out += '>' + text + '</a>';\n    return out as RendererOutput;\n  }\n\n  image({ href, title, text, tokens }: Tokens.Image): RendererOutput {\n    if (tokens) {\n      text = this.parser.parseInline(tokens, this.parser.textRenderer) as string;\n    }\n    const cleanHref = cleanUrl(href);\n    if (cleanHref === null) {\n      return escape(text) as RendererOutput;\n    }\n    href = cleanHref;\n\n    let out = `<img src=\"${href}\" alt=\"${text}\"`;\n    if (title) {\n      out += ` title=\"${escape(title)}\"`;\n    }\n    out += '>';\n    return out as RendererOutput;\n  }\n\n  text(token: Tokens.Text | Tokens.Escape): RendererOutput {\n    return 'tokens' in token && token.tokens\n      ? this.parser.parseInline(token.tokens) as unknown as RendererOutput\n      : ('escaped' in token && token.escaped ? token.text as RendererOutput : escape(token.text) as RendererOutput);\n  }\n}\n","import type { Tokens } from './Tokens.ts';\n\n/**\n * TextRenderer\n * returns only the textual part of the token\n */\nexport class _TextRenderer<RendererOutput = string> {\n  // no need for block level renderers\n  strong({ text }: Tokens.Strong): RendererOutput {\n    return text as RendererOutput;\n  }\n\n  em({ text }: Tokens.Em): RendererOutput {\n    return text as RendererOutput;\n  }\n\n  codespan({ text }: Tokens.Codespan): RendererOutput {\n    return text as RendererOutput;\n  }\n\n  del({ text }: Tokens.Del): RendererOutput {\n    return text as RendererOutput;\n  }\n\n  html({ text }: Tokens.HTML | Tokens.Tag): RendererOutput {\n    return text as RendererOutput;\n  }\n\n  text({ text }: Tokens.Text | Tokens.Escape | Tokens.Tag): RendererOutput {\n    return text as RendererOutput;\n  }\n\n  link({ text }: Tokens.Link): RendererOutput {\n    return '' + text as RendererOutput;\n  }\n\n  image({ text }: Tokens.Image): RendererOutput {\n    return '' + text as RendererOutput;\n  }\n\n  br(): RendererOutput {\n    return '' as RendererOutput;\n  }\n}\n","import { _Renderer } from './Renderer.ts';\nimport { _TextRenderer } from './TextRenderer.ts';\nimport { _defaults } from './defaults.ts';\nimport type { MarkedToken, Token, Tokens } from './Tokens.ts';\nimport type { MarkedOptions } from './MarkedOptions.ts';\n\n/**\n * Parsing & Compiling\n */\nexport class _Parser<ParserOutput = string, RendererOutput = string> {\n  options: MarkedOptions<ParserOutput, RendererOutput>;\n  renderer: _Renderer<ParserOutput, RendererOutput>;\n  textRenderer: _TextRenderer<RendererOutput>;\n  constructor(options?: MarkedOptions<ParserOutput, RendererOutput>) {\n    this.options = options || _defaults;\n    this.options.renderer = this.options.renderer || new _Renderer<ParserOutput, RendererOutput>();\n    this.renderer = this.options.renderer;\n    this.renderer.options = this.options;\n    this.renderer.parser = this;\n    this.textRenderer = new _TextRenderer<RendererOutput>();\n  }\n\n  /**\n   * Static Parse Method\n   */\n  static parse<ParserOutput = string, RendererOutput = string>(tokens: Token[], options?: MarkedOptions<ParserOutput, RendererOutput>) {\n    const parser = new _Parser<ParserOutput, RendererOutput>(options);\n    return parser.parse(tokens);\n  }\n\n  /**\n   * Static Parse Inline Method\n   */\n  static parseInline<ParserOutput = string, RendererOutput = string>(tokens: Token[], options?: MarkedOptions<ParserOutput, RendererOutput>) {\n    const parser = new _Parser<ParserOutput, RendererOutput>(options);\n    return parser.parseInline(tokens);\n  }\n\n  /**\n   * Parse Loop\n   */\n  parse(tokens: Token[], top = true): ParserOutput {\n    let out = '';\n\n    for (let i = 0; i < tokens.length; i++) {\n      const anyToken = tokens[i];\n\n      // Run any renderer extensions\n      if (this.options.extensions?.renderers?.[anyToken.type]) {\n        const genericToken = anyToken as Tokens.Generic;\n        const ret = this.options.extensions.renderers[genericToken.type].call({ parser: this }, genericToken);\n        if (ret !== false || !['space', 'hr', 'heading', 'code', 'table', 'blockquote', 'list', 'html', 'def', 'paragraph', 'text'].includes(genericToken.type)) {\n          out += ret || '';\n          continue;\n        }\n      }\n\n      const token = anyToken as MarkedToken;\n\n      switch (token.type) {\n        case 'space': {\n          out += this.renderer.space(token);\n          continue;\n        }\n        case 'hr': {\n          out += this.renderer.hr(token);\n          continue;\n        }\n        case 'heading': {\n          out += this.renderer.heading(token);\n          continue;\n        }\n        case 'code': {\n          out += this.renderer.code(token);\n          continue;\n        }\n        case 'table': {\n          out += this.renderer.table(token);\n          continue;\n        }\n        case 'blockquote': {\n          out += this.renderer.blockquote(token);\n          continue;\n        }\n        case 'list': {\n          out += this.renderer.list(token);\n          continue;\n        }\n        case 'html': {\n          out += this.renderer.html(token);\n          continue;\n        }\n        case 'def': {\n          out += this.renderer.def(token);\n          continue;\n        }\n        case 'paragraph': {\n          out += this.renderer.paragraph(token);\n          continue;\n        }\n        case 'text': {\n          let textToken = token;\n          let body = this.renderer.text(textToken) as string;\n          while (i + 1 < tokens.length && tokens[i + 1].type === 'text') {\n            textToken = tokens[++i] as Tokens.Text;\n            body += ('\\n' + this.renderer.text(textToken));\n          }\n          if (top) {\n            out += this.renderer.paragraph({\n              type: 'paragraph',\n              raw: body,\n              text: body,\n              tokens: [{ type: 'text', raw: body, text: body, escaped: true }],\n            });\n          } else {\n            out += body;\n          }\n          continue;\n        }\n\n        default: {\n          const errMsg = 'Token with \"' + token.type + '\" type was not found.';\n          if (this.options.silent) {\n            console.error(errMsg);\n            return '' as ParserOutput;\n          } else {\n            throw new Error(errMsg);\n          }\n        }\n      }\n    }\n\n    return out as ParserOutput;\n  }\n\n  /**\n   * Parse Inline Tokens\n   */\n  parseInline(tokens: Token[], renderer: _Renderer<ParserOutput, RendererOutput> | _TextRenderer<RendererOutput> = this.renderer): ParserOutput {\n    let out = '';\n\n    for (let i = 0; i < tokens.length; i++) {\n      const anyToken = tokens[i];\n\n      // Run any renderer extensions\n      if (this.options.extensions?.renderers?.[anyToken.type]) {\n        const ret = this.options.extensions.renderers[anyToken.type].call({ parser: this }, anyToken);\n        if (ret !== false || !['escape', 'html', 'link', 'image', 'strong', 'em', 'codespan', 'br', 'del', 'text'].includes(anyToken.type)) {\n          out += ret || '';\n          continue;\n        }\n      }\n\n      const token = anyToken as MarkedToken;\n\n      switch (token.type) {\n        case 'escape': {\n          out += renderer.text(token);\n          break;\n        }\n        case 'html': {\n          out += renderer.html(token);\n          break;\n        }\n        case 'link': {\n          out += renderer.link(token);\n          break;\n        }\n        case 'image': {\n          out += renderer.image(token);\n          break;\n        }\n        case 'strong': {\n          out += renderer.strong(token);\n          break;\n        }\n        case 'em': {\n          out += renderer.em(token);\n          break;\n        }\n        case 'codespan': {\n          out += renderer.codespan(token);\n          break;\n        }\n        case 'br': {\n          out += renderer.br(token);\n          break;\n        }\n        case 'del': {\n          out += renderer.del(token);\n          break;\n        }\n        case 'text': {\n          out += renderer.text(token);\n          break;\n        }\n        default: {\n          const errMsg = 'Token with \"' + token.type + '\" type was not found.';\n          if (this.options.silent) {\n            console.error(errMsg);\n            return '' as ParserOutput;\n          } else {\n            throw new Error(errMsg);\n          }\n        }\n      }\n    }\n    return out as ParserOutput;\n  }\n}\n","import { _defaults } from './defaults.ts';\nimport { _Lexer } from './Lexer.ts';\nimport { _Parser } from './Parser.ts';\nimport type { MarkedOptions } from './MarkedOptions.ts';\nimport type { Token, TokensList } from './Tokens.ts';\n\nexport class _Hooks<ParserOutput = string, RendererOutput = string> {\n  options: MarkedOptions<ParserOutput, RendererOutput>;\n  block?: boolean;\n\n  constructor(options?: MarkedOptions<ParserOutput, RendererOutput>) {\n    this.options = options || _defaults;\n  }\n\n  static passThroughHooks = new Set([\n    'preprocess',\n    'postprocess',\n    'processAllTokens',\n  ]);\n\n  /**\n   * Process markdown before marked\n   */\n  preprocess(markdown: string) {\n    return markdown;\n  }\n\n  /**\n   * Process HTML after marked is finished\n   */\n  postprocess(html: ParserOutput) {\n    return html;\n  }\n\n  /**\n   * Process all tokens before walk tokens\n   */\n  processAllTokens(tokens: Token[] | TokensList) {\n    return tokens;\n  }\n\n  /**\n   * Provide function to tokenize markdown\n   */\n  provideLexer() {\n    return this.block ? _Lexer.lex : _Lexer.lexInline;\n  }\n\n  /**\n   * Provide function to parse tokens\n   */\n  provideParser() {\n    return this.block ? _Parser.parse<ParserOutput, RendererOutput> : _Parser.parseInline<ParserOutput, RendererOutput>;\n  }\n}\n","import { _getDefaults } from './defaults.ts';\nimport { _Lexer } from './Lexer.ts';\nimport { _Parser } from './Parser.ts';\nimport { _Hooks } from './Hooks.ts';\nimport { _Renderer } from './Renderer.ts';\nimport { _Tokenizer } from './Tokenizer.ts';\nimport { _TextRenderer } from './TextRenderer.ts';\nimport { escape } from './helpers.ts';\nimport type { MarkedExtension, MarkedOptions } from './MarkedOptions.ts';\nimport type { Token, Tokens, TokensList } from './Tokens.ts';\n\nexport type MaybePromise = void | Promise<void>;\n\ntype UnknownFunction = (...args: unknown[]) => unknown;\ntype GenericRendererFunction = (...args: unknown[]) => string | false;\n\nexport class Marked<ParserOutput = string, RendererOutput = string> {\n  defaults = _getDefaults<ParserOutput, RendererOutput>();\n  options = this.setOptions;\n\n  parse = this.parseMarkdown(true);\n  parseInline = this.parseMarkdown(false);\n\n  Parser = _Parser<ParserOutput, RendererOutput>;\n  Renderer = _Renderer<ParserOutput, RendererOutput>;\n  TextRenderer = _TextRenderer<RendererOutput>;\n  Lexer = _Lexer;\n  Tokenizer = _Tokenizer<ParserOutput, RendererOutput>;\n  Hooks = _Hooks<ParserOutput, RendererOutput>;\n\n  constructor(...args: MarkedExtension<ParserOutput, RendererOutput>[]) {\n    this.use(...args);\n  }\n\n  /**\n   * Run callback for every token\n   */\n  walkTokens(tokens: Token[] | TokensList, callback: (token: Token) => MaybePromise | MaybePromise[]) {\n    let values: MaybePromise[] = [];\n    for (const token of tokens) {\n      values = values.concat(callback.call(this, token));\n      switch (token.type) {\n        case 'table': {\n          const tableToken = token as Tokens.Table;\n          for (const cell of tableToken.header) {\n            values = values.concat(this.walkTokens(cell.tokens, callback));\n          }\n          for (const row of tableToken.rows) {\n            for (const cell of row) {\n              values = values.concat(this.walkTokens(cell.tokens, callback));\n            }\n          }\n          break;\n        }\n        case 'list': {\n          const listToken = token as Tokens.List;\n          values = values.concat(this.walkTokens(listToken.items, callback));\n          break;\n        }\n        default: {\n          const genericToken = token as Tokens.Generic;\n          if (this.defaults.extensions?.childTokens?.[genericToken.type]) {\n            this.defaults.extensions.childTokens[genericToken.type].forEach((childTokens) => {\n              const tokens = genericToken[childTokens].flat(Infinity) as Token[] | TokensList;\n              values = values.concat(this.walkTokens(tokens, callback));\n            });\n          } else if (genericToken.tokens) {\n            values = values.concat(this.walkTokens(genericToken.tokens, callback));\n          }\n        }\n      }\n    }\n    return values;\n  }\n\n  use(...args: MarkedExtension<ParserOutput, RendererOutput>[]) {\n    const extensions: MarkedOptions<ParserOutput, RendererOutput>['extensions'] = this.defaults.extensions || { renderers: {}, childTokens: {} };\n\n    args.forEach((pack) => {\n      // copy options to new object\n      const opts = { ...pack } as MarkedOptions<ParserOutput, RendererOutput>;\n\n      // set async to true if it was set to true before\n      opts.async = this.defaults.async || opts.async || false;\n\n      // ==-- Parse \"addon\" extensions --== //\n      if (pack.extensions) {\n        pack.extensions.forEach((ext) => {\n          if (!ext.name) {\n            throw new Error('extension name required');\n          }\n          if ('renderer' in ext) { // Renderer extensions\n            const prevRenderer = extensions.renderers[ext.name];\n            if (prevRenderer) {\n              // Replace extension with func to run new extension but fall back if false\n              extensions.renderers[ext.name] = function(...args) {\n                let ret = ext.renderer.apply(this, args);\n                if (ret === false) {\n                  ret = prevRenderer.apply(this, args);\n                }\n                return ret;\n              };\n            } else {\n              extensions.renderers[ext.name] = ext.renderer;\n            }\n          }\n          if ('tokenizer' in ext) { // Tokenizer Extensions\n            if (!ext.level || (ext.level !== 'block' && ext.level !== 'inline')) {\n              throw new Error(\"extension level must be 'block' or 'inline'\");\n            }\n            const extLevel = extensions[ext.level];\n            if (extLevel) {\n              extLevel.unshift(ext.tokenizer);\n            } else {\n              extensions[ext.level] = [ext.tokenizer];\n            }\n            if (ext.start) { // Function to check for start of token\n              if (ext.level === 'block') {\n                if (extensions.startBlock) {\n                  extensions.startBlock.push(ext.start);\n                } else {\n                  extensions.startBlock = [ext.start];\n                }\n              } else if (ext.level === 'inline') {\n                if (extensions.startInline) {\n                  extensions.startInline.push(ext.start);\n                } else {\n                  extensions.startInline = [ext.start];\n                }\n              }\n            }\n          }\n          if ('childTokens' in ext && ext.childTokens) { // Child tokens to be visited by walkTokens\n            extensions.childTokens[ext.name] = ext.childTokens;\n          }\n        });\n        opts.extensions = extensions;\n      }\n\n      // ==-- Parse \"overwrite\" extensions --== //\n      if (pack.renderer) {\n        const renderer = this.defaults.renderer || new _Renderer<ParserOutput, RendererOutput>(this.defaults);\n        for (const prop in pack.renderer) {\n          if (!(prop in renderer)) {\n            throw new Error(`renderer '${prop}' does not exist`);\n          }\n          if (['options', 'parser'].includes(prop)) {\n            // ignore options property\n            continue;\n          }\n          const rendererProp = prop as Exclude<keyof _Renderer<ParserOutput, RendererOutput>, 'options' | 'parser'>;\n          const rendererFunc = pack.renderer[rendererProp] as GenericRendererFunction;\n          const prevRenderer = renderer[rendererProp] as GenericRendererFunction;\n          // Replace renderer with func to run extension, but fall back if false\n          renderer[rendererProp] = (...args: unknown[]) => {\n            let ret = rendererFunc.apply(renderer, args);\n            if (ret === false) {\n              ret = prevRenderer.apply(renderer, args);\n            }\n            return (ret || '') as RendererOutput;\n          };\n        }\n        opts.renderer = renderer;\n      }\n      if (pack.tokenizer) {\n        const tokenizer = this.defaults.tokenizer || new _Tokenizer<ParserOutput, RendererOutput>(this.defaults);\n        for (const prop in pack.tokenizer) {\n          if (!(prop in tokenizer)) {\n            throw new Error(`tokenizer '${prop}' does not exist`);\n          }\n          if (['options', 'rules', 'lexer'].includes(prop)) {\n            // ignore options, rules, and lexer properties\n            continue;\n          }\n          const tokenizerProp = prop as Exclude<keyof _Tokenizer<ParserOutput, RendererOutput>, 'options' | 'rules' | 'lexer'>;\n          const tokenizerFunc = pack.tokenizer[tokenizerProp] as UnknownFunction;\n          const prevTokenizer = tokenizer[tokenizerProp] as UnknownFunction;\n          // Replace tokenizer with func to run extension, but fall back if false\n          // @ts-expect-error cannot type tokenizer function dynamically\n          tokenizer[tokenizerProp] = (...args: unknown[]) => {\n            let ret = tokenizerFunc.apply(tokenizer, args);\n            if (ret === false) {\n              ret = prevTokenizer.apply(tokenizer, args);\n            }\n            return ret;\n          };\n        }\n        opts.tokenizer = tokenizer;\n      }\n\n      // ==-- Parse Hooks extensions --== //\n      if (pack.hooks) {\n        const hooks = this.defaults.hooks || new _Hooks<ParserOutput, RendererOutput>();\n        for (const prop in pack.hooks) {\n          if (!(prop in hooks)) {\n            throw new Error(`hook '${prop}' does not exist`);\n          }\n          if (['options', 'block'].includes(prop)) {\n            // ignore options and block properties\n            continue;\n          }\n          const hooksProp = prop as Exclude<keyof _Hooks<ParserOutput, RendererOutput>, 'options' | 'block'>;\n          const hooksFunc = pack.hooks[hooksProp] as UnknownFunction;\n          const prevHook = hooks[hooksProp] as UnknownFunction;\n          if (_Hooks.passThroughHooks.has(prop)) {\n            // @ts-expect-error cannot type hook function dynamically\n            hooks[hooksProp] = (arg: unknown) => {\n              if (this.defaults.async) {\n                return Promise.resolve(hooksFunc.call(hooks, arg)).then(ret => {\n                  return prevHook.call(hooks, ret);\n                });\n              }\n\n              const ret = hooksFunc.call(hooks, arg);\n              return prevHook.call(hooks, ret);\n            };\n          } else {\n            // @ts-expect-error cannot type hook function dynamically\n            hooks[hooksProp] = (...args: unknown[]) => {\n              let ret = hooksFunc.apply(hooks, args);\n              if (ret === false) {\n                ret = prevHook.apply(hooks, args);\n              }\n              return ret;\n            };\n          }\n        }\n        opts.hooks = hooks;\n      }\n\n      // ==-- Parse WalkTokens extensions --== //\n      if (pack.walkTokens) {\n        const walkTokens = this.defaults.walkTokens;\n        const packWalktokens = pack.walkTokens;\n        opts.walkTokens = function(token) {\n          let values: MaybePromise[] = [];\n          values.push(packWalktokens.call(this, token));\n          if (walkTokens) {\n            values = values.concat(walkTokens.call(this, token));\n          }\n          return values;\n        };\n      }\n\n      this.defaults = { ...this.defaults, ...opts };\n    });\n\n    return this;\n  }\n\n  setOptions(opt: MarkedOptions<ParserOutput, RendererOutput>) {\n    this.defaults = { ...this.defaults, ...opt };\n    return this;\n  }\n\n  lexer(src: string, options?: MarkedOptions<ParserOutput, RendererOutput>) {\n    return _Lexer.lex(src, options ?? this.defaults);\n  }\n\n  parser(tokens: Token[], options?: MarkedOptions<ParserOutput, RendererOutput>) {\n    return _Parser.parse<ParserOutput, RendererOutput>(tokens, options ?? this.defaults);\n  }\n\n  private parseMarkdown(blockType: boolean) {\n    type overloadedParse = {\n      (src: string, options: MarkedOptions<ParserOutput, RendererOutput> & { async: true }): Promise<ParserOutput>;\n      (src: string, options: MarkedOptions<ParserOutput, RendererOutput> & { async: false }): ParserOutput;\n      (src: string, options?: MarkedOptions<ParserOutput, RendererOutput> | null): ParserOutput | Promise<ParserOutput>;\n    };\n\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    const parse: overloadedParse = (src: string, options?: MarkedOptions<ParserOutput, RendererOutput> | null): any => {\n      const origOpt = { ...options };\n      const opt = { ...this.defaults, ...origOpt };\n\n      const throwError = this.onError(!!opt.silent, !!opt.async);\n\n      // throw error if an extension set async to true but parse was called with async: false\n      if (this.defaults.async === true && origOpt.async === false) {\n        return throwError(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.'));\n      }\n\n      // throw error in case of non string input\n      if (typeof src === 'undefined' || src === null) {\n        return throwError(new Error('marked(): input parameter is undefined or null'));\n      }\n      if (typeof src !== 'string') {\n        return throwError(new Error('marked(): input parameter is of type '\n          + Object.prototype.toString.call(src) + ', string expected'));\n      }\n\n      if (opt.hooks) {\n        opt.hooks.options = opt;\n        opt.hooks.block = blockType;\n      }\n\n      const lexer = opt.hooks ? opt.hooks.provideLexer() : (blockType ? _Lexer.lex : _Lexer.lexInline);\n      const parser = opt.hooks ? opt.hooks.provideParser() : (blockType ? _Parser.parse : _Parser.parseInline);\n\n      if (opt.async) {\n        return Promise.resolve(opt.hooks ? opt.hooks.preprocess(src) : src)\n          .then(src => lexer(src, opt))\n          .then(tokens => opt.hooks ? opt.hooks.processAllTokens(tokens) : tokens)\n          .then(tokens => opt.walkTokens ? Promise.all(this.walkTokens(tokens, opt.walkTokens)).then(() => tokens) : tokens)\n          .then(tokens => parser(tokens, opt))\n          .then(html => opt.hooks ? opt.hooks.postprocess(html) : html)\n          .catch(throwError);\n      }\n\n      try {\n        if (opt.hooks) {\n          src = opt.hooks.preprocess(src) as string;\n        }\n        let tokens = lexer(src, opt);\n        if (opt.hooks) {\n          tokens = opt.hooks.processAllTokens(tokens);\n        }\n        if (opt.walkTokens) {\n          this.walkTokens(tokens, opt.walkTokens);\n        }\n        let html = parser(tokens, opt);\n        if (opt.hooks) {\n          html = opt.hooks.postprocess(html);\n        }\n        return html;\n      } catch(e) {\n        return throwError(e as Error);\n      }\n    };\n\n    return parse;\n  }\n\n  private onError(silent: boolean, async: boolean) {\n    return (e: Error): string | Promise<string> => {\n      e.message += '\\nPlease report this to https://github.com/markedjs/marked.';\n\n      if (silent) {\n        const msg = '<p>An error occurred:</p><pre>'\n          + escape(e.message + '', true)\n          + '</pre>';\n        if (async) {\n          return Promise.resolve(msg);\n        }\n        return msg;\n      }\n\n      if (async) {\n        return Promise.reject(e);\n      }\n      throw e;\n    };\n  }\n}\n"]}