{"version":3,"file":"vuemark.umd.cjs","sources":["../node_modules/.pnpm/devlop@1.1.0/node_modules/devlop/lib/default.js","../node_modules/.pnpm/character-entities-legacy@3.0.0/node_modules/character-entities-legacy/index.js","../node_modules/.pnpm/character-reference-invalid@2.0.1/node_modules/character-reference-invalid/index.js","../node_modules/.pnpm/is-decimal@2.0.1/node_modules/is-decimal/index.js","../node_modules/.pnpm/is-hexadecimal@2.0.1/node_modules/is-hexadecimal/index.js","../node_modules/.pnpm/is-alphabetical@2.0.1/node_modules/is-alphabetical/index.js","../node_modules/.pnpm/is-alphanumerical@2.0.1/node_modules/is-alphanumerical/index.js","../node_modules/.pnpm/decode-named-character-reference@1.0.2/node_modules/decode-named-character-reference/index.dom.js","../node_modules/.pnpm/parse-entities@4.0.1/node_modules/parse-entities/lib/index.js","../node_modules/.pnpm/stringify-entities@4.0.4/node_modules/stringify-entities/lib/core.js","../node_modules/.pnpm/stringify-entities@4.0.4/node_modules/stringify-entities/lib/util/format-basic.js","../node_modules/.pnpm/stringify-entities@4.0.4/node_modules/stringify-entities/lib/index.js","../node_modules/.pnpm/unist-util-is@6.0.0/node_modules/unist-util-is/lib/index.js","../node_modules/.pnpm/unist-util-visit-parents@6.0.1/node_modules/unist-util-visit-parents/lib/color.js","../node_modules/.pnpm/unist-util-visit-parents@6.0.1/node_modules/unist-util-visit-parents/lib/index.js","../node_modules/.pnpm/mdast-util-directive@3.0.0/node_modules/mdast-util-directive/lib/index.js","../node_modules/.pnpm/micromark-util-character@2.1.0/node_modules/micromark-util-character/index.js","../node_modules/.pnpm/micromark-factory-space@2.0.0/node_modules/micromark-factory-space/index.js","../node_modules/.pnpm/micromark-factory-whitespace@2.0.0/node_modules/micromark-factory-whitespace/index.js","../node_modules/.pnpm/micromark-extension-directive@3.0.1/node_modules/micromark-extension-directive/lib/factory-attributes.js","../node_modules/.pnpm/micromark-extension-directive@3.0.1/node_modules/micromark-extension-directive/lib/factory-label.js","../node_modules/.pnpm/micromark-extension-directive@3.0.1/node_modules/micromark-extension-directive/lib/factory-name.js","../node_modules/.pnpm/micromark-extension-directive@3.0.1/node_modules/micromark-extension-directive/lib/directive-container.js","../node_modules/.pnpm/micromark-extension-directive@3.0.1/node_modules/micromark-extension-directive/lib/directive-leaf.js","../node_modules/.pnpm/micromark-extension-directive@3.0.1/node_modules/micromark-extension-directive/lib/directive-text.js","../node_modules/.pnpm/micromark-extension-directive@3.0.1/node_modules/micromark-extension-directive/lib/syntax.js","../node_modules/.pnpm/remark-directive@3.0.0/node_modules/remark-directive/lib/index.js","../node_modules/.pnpm/format@0.2.2/node_modules/format/format.js","../node_modules/.pnpm/fault@2.0.1/node_modules/fault/index.js","../node_modules/.pnpm/micromark-extension-frontmatter@2.0.0/node_modules/micromark-extension-frontmatter/lib/to-matters.js","../node_modules/.pnpm/micromark-extension-frontmatter@2.0.0/node_modules/micromark-extension-frontmatter/lib/syntax.js","../node_modules/.pnpm/escape-string-regexp@5.0.0/node_modules/escape-string-regexp/index.js","../node_modules/.pnpm/mdast-util-frontmatter@2.0.1/node_modules/mdast-util-frontmatter/lib/index.js","../node_modules/.pnpm/remark-frontmatter@5.0.0/node_modules/remark-frontmatter/lib/index.js","../node_modules/.pnpm/ccount@2.0.1/node_modules/ccount/index.js","../node_modules/.pnpm/mdast-util-find-and-replace@3.0.1/node_modules/mdast-util-find-and-replace/lib/index.js","../node_modules/.pnpm/mdast-util-gfm-autolink-literal@2.0.0/node_modules/mdast-util-gfm-autolink-literal/lib/index.js","../node_modules/.pnpm/micromark-util-normalize-identifier@2.0.0/node_modules/micromark-util-normalize-identifier/index.js","../node_modules/.pnpm/mdast-util-gfm-footnote@2.0.0/node_modules/mdast-util-gfm-footnote/lib/index.js","../node_modules/.pnpm/mdast-util-gfm-strikethrough@2.0.0/node_modules/mdast-util-gfm-strikethrough/lib/index.js","../node_modules/.pnpm/markdown-table@3.0.3/node_modules/markdown-table/index.js","../node_modules/.pnpm/mdast-util-to-markdown@2.1.0/node_modules/mdast-util-to-markdown/lib/handle/blockquote.js","../node_modules/.pnpm/mdast-util-to-markdown@2.1.0/node_modules/mdast-util-to-markdown/lib/util/pattern-in-scope.js","../node_modules/.pnpm/mdast-util-to-markdown@2.1.0/node_modules/mdast-util-to-markdown/lib/handle/break.js","../node_modules/.pnpm/longest-streak@3.1.0/node_modules/longest-streak/index.js","../node_modules/.pnpm/mdast-util-to-markdown@2.1.0/node_modules/mdast-util-to-markdown/lib/util/format-code-as-indented.js","../node_modules/.pnpm/mdast-util-to-markdown@2.1.0/node_modules/mdast-util-to-markdown/lib/util/check-fence.js","../node_modules/.pnpm/mdast-util-to-markdown@2.1.0/node_modules/mdast-util-to-markdown/lib/handle/code.js","../node_modules/.pnpm/mdast-util-to-markdown@2.1.0/node_modules/mdast-util-to-markdown/lib/util/check-quote.js","../node_modules/.pnpm/mdast-util-to-markdown@2.1.0/node_modules/mdast-util-to-markdown/lib/handle/definition.js","../node_modules/.pnpm/mdast-util-to-markdown@2.1.0/node_modules/mdast-util-to-markdown/lib/util/check-emphasis.js","../node_modules/.pnpm/mdast-util-to-markdown@2.1.0/node_modules/mdast-util-to-markdown/lib/handle/emphasis.js","../node_modules/.pnpm/unist-util-visit@5.0.0/node_modules/unist-util-visit/lib/index.js","../node_modules/.pnpm/mdast-util-to-string@4.0.0/node_modules/mdast-util-to-string/lib/index.js","../node_modules/.pnpm/mdast-util-to-markdown@2.1.0/node_modules/mdast-util-to-markdown/lib/util/format-heading-as-setext.js","../node_modules/.pnpm/mdast-util-to-markdown@2.1.0/node_modules/mdast-util-to-markdown/lib/handle/heading.js","../node_modules/.pnpm/mdast-util-to-markdown@2.1.0/node_modules/mdast-util-to-markdown/lib/handle/html.js","../node_modules/.pnpm/mdast-util-to-markdown@2.1.0/node_modules/mdast-util-to-markdown/lib/handle/image.js","../node_modules/.pnpm/mdast-util-to-markdown@2.1.0/node_modules/mdast-util-to-markdown/lib/handle/image-reference.js","../node_modules/.pnpm/mdast-util-to-markdown@2.1.0/node_modules/mdast-util-to-markdown/lib/handle/inline-code.js","../node_modules/.pnpm/mdast-util-to-markdown@2.1.0/node_modules/mdast-util-to-markdown/lib/util/format-link-as-autolink.js","../node_modules/.pnpm/mdast-util-to-markdown@2.1.0/node_modules/mdast-util-to-markdown/lib/handle/link.js","../node_modules/.pnpm/mdast-util-to-markdown@2.1.0/node_modules/mdast-util-to-markdown/lib/handle/link-reference.js","../node_modules/.pnpm/mdast-util-to-markdown@2.1.0/node_modules/mdast-util-to-markdown/lib/util/check-bullet.js","../node_modules/.pnpm/mdast-util-to-markdown@2.1.0/node_modules/mdast-util-to-markdown/lib/util/check-bullet-other.js","../node_modules/.pnpm/mdast-util-to-markdown@2.1.0/node_modules/mdast-util-to-markdown/lib/util/check-bullet-ordered.js","../node_modules/.pnpm/mdast-util-to-markdown@2.1.0/node_modules/mdast-util-to-markdown/lib/util/check-rule.js","../node_modules/.pnpm/mdast-util-to-markdown@2.1.0/node_modules/mdast-util-to-markdown/lib/handle/list.js","../node_modules/.pnpm/mdast-util-to-markdown@2.1.0/node_modules/mdast-util-to-markdown/lib/util/check-list-item-indent.js","../node_modules/.pnpm/mdast-util-to-markdown@2.1.0/node_modules/mdast-util-to-markdown/lib/handle/list-item.js","../node_modules/.pnpm/mdast-util-to-markdown@2.1.0/node_modules/mdast-util-to-markdown/lib/handle/paragraph.js","../node_modules/.pnpm/mdast-util-phrasing@4.1.0/node_modules/mdast-util-phrasing/lib/index.js","../node_modules/.pnpm/mdast-util-to-markdown@2.1.0/node_modules/mdast-util-to-markdown/lib/handle/root.js","../node_modules/.pnpm/mdast-util-to-markdown@2.1.0/node_modules/mdast-util-to-markdown/lib/util/check-strong.js","../node_modules/.pnpm/mdast-util-to-markdown@2.1.0/node_modules/mdast-util-to-markdown/lib/handle/strong.js","../node_modules/.pnpm/mdast-util-to-markdown@2.1.0/node_modules/mdast-util-to-markdown/lib/handle/text.js","../node_modules/.pnpm/mdast-util-to-markdown@2.1.0/node_modules/mdast-util-to-markdown/lib/util/check-rule-repetition.js","../node_modules/.pnpm/mdast-util-to-markdown@2.1.0/node_modules/mdast-util-to-markdown/lib/handle/thematic-break.js","../node_modules/.pnpm/mdast-util-to-markdown@2.1.0/node_modules/mdast-util-to-markdown/lib/handle/index.js","../node_modules/.pnpm/micromark-util-decode-numeric-character-reference@2.0.1/node_modules/micromark-util-decode-numeric-character-reference/index.js","../node_modules/.pnpm/micromark-util-decode-string@2.0.0/node_modules/micromark-util-decode-string/index.js","../node_modules/.pnpm/mdast-util-gfm-table@2.0.0/node_modules/mdast-util-gfm-table/lib/index.js","../node_modules/.pnpm/mdast-util-gfm-task-list-item@2.0.0/node_modules/mdast-util-gfm-task-list-item/lib/index.js","../node_modules/.pnpm/mdast-util-gfm@3.0.0/node_modules/mdast-util-gfm/lib/index.js","../node_modules/.pnpm/micromark-util-chunked@2.0.0/node_modules/micromark-util-chunked/index.js","../node_modules/.pnpm/micromark-util-combine-extensions@2.0.0/node_modules/micromark-util-combine-extensions/index.js","../node_modules/.pnpm/micromark-extension-gfm-autolink-literal@2.1.0/node_modules/micromark-extension-gfm-autolink-literal/lib/syntax.js","../node_modules/.pnpm/micromark-util-sanitize-uri@2.0.0/node_modules/micromark-util-sanitize-uri/index.js","../node_modules/.pnpm/micromark-util-classify-character@2.0.0/node_modules/micromark-util-classify-character/index.js","../node_modules/.pnpm/micromark-util-resolve-all@2.0.0/node_modules/micromark-util-resolve-all/index.js","../node_modules/.pnpm/micromark-core-commonmark@2.0.1/node_modules/micromark-core-commonmark/lib/attention.js","../node_modules/.pnpm/micromark-core-commonmark@2.0.1/node_modules/micromark-core-commonmark/lib/autolink.js","../node_modules/.pnpm/micromark-core-commonmark@2.0.1/node_modules/micromark-core-commonmark/lib/blank-line.js","../node_modules/.pnpm/micromark-core-commonmark@2.0.1/node_modules/micromark-core-commonmark/lib/block-quote.js","../node_modules/.pnpm/micromark-core-commonmark@2.0.1/node_modules/micromark-core-commonmark/lib/character-escape.js","../node_modules/.pnpm/micromark-core-commonmark@2.0.1/node_modules/micromark-core-commonmark/lib/character-reference.js","../node_modules/.pnpm/micromark-core-commonmark@2.0.1/node_modules/micromark-core-commonmark/lib/code-fenced.js","../node_modules/.pnpm/micromark-core-commonmark@2.0.1/node_modules/micromark-core-commonmark/lib/code-indented.js","../node_modules/.pnpm/micromark-core-commonmark@2.0.1/node_modules/micromark-core-commonmark/lib/code-text.js","../node_modules/.pnpm/micromark-util-subtokenize@2.0.1/node_modules/micromark-util-subtokenize/lib/splice-buffer.js","../node_modules/.pnpm/micromark-util-subtokenize@2.0.1/node_modules/micromark-util-subtokenize/index.js","../node_modules/.pnpm/micromark-core-commonmark@2.0.1/node_modules/micromark-core-commonmark/lib/content.js","../node_modules/.pnpm/micromark-factory-destination@2.0.0/node_modules/micromark-factory-destination/index.js","../node_modules/.pnpm/micromark-factory-label@2.0.0/node_modules/micromark-factory-label/index.js","../node_modules/.pnpm/micromark-factory-title@2.0.0/node_modules/micromark-factory-title/index.js","../node_modules/.pnpm/micromark-core-commonmark@2.0.1/node_modules/micromark-core-commonmark/lib/definition.js","../node_modules/.pnpm/micromark-core-commonmark@2.0.1/node_modules/micromark-core-commonmark/lib/hard-break-escape.js","../node_modules/.pnpm/micromark-core-commonmark@2.0.1/node_modules/micromark-core-commonmark/lib/heading-atx.js","../node_modules/.pnpm/micromark-util-html-tag-name@2.0.0/node_modules/micromark-util-html-tag-name/index.js","../node_modules/.pnpm/micromark-core-commonmark@2.0.1/node_modules/micromark-core-commonmark/lib/html-flow.js","../node_modules/.pnpm/micromark-core-commonmark@2.0.1/node_modules/micromark-core-commonmark/lib/html-text.js","../node_modules/.pnpm/micromark-core-commonmark@2.0.1/node_modules/micromark-core-commonmark/lib/label-end.js","../node_modules/.pnpm/micromark-core-commonmark@2.0.1/node_modules/micromark-core-commonmark/lib/label-start-image.js","../node_modules/.pnpm/micromark-core-commonmark@2.0.1/node_modules/micromark-core-commonmark/lib/label-start-link.js","../node_modules/.pnpm/micromark-core-commonmark@2.0.1/node_modules/micromark-core-commonmark/lib/line-ending.js","../node_modules/.pnpm/micromark-core-commonmark@2.0.1/node_modules/micromark-core-commonmark/lib/thematic-break.js","../node_modules/.pnpm/micromark-core-commonmark@2.0.1/node_modules/micromark-core-commonmark/lib/list.js","../node_modules/.pnpm/micromark-core-commonmark@2.0.1/node_modules/micromark-core-commonmark/lib/setext-underline.js","../node_modules/.pnpm/micromark-extension-gfm-footnote@2.1.0/node_modules/micromark-extension-gfm-footnote/lib/syntax.js","../node_modules/.pnpm/micromark-extension-gfm-strikethrough@2.1.0/node_modules/micromark-extension-gfm-strikethrough/lib/syntax.js","../node_modules/.pnpm/micromark-extension-gfm-table@2.1.0/node_modules/micromark-extension-gfm-table/lib/edit-map.js","../node_modules/.pnpm/micromark-extension-gfm-table@2.1.0/node_modules/micromark-extension-gfm-table/lib/infer.js","../node_modules/.pnpm/micromark-extension-gfm-table@2.1.0/node_modules/micromark-extension-gfm-table/lib/syntax.js","../node_modules/.pnpm/micromark-extension-gfm-task-list-item@2.1.0/node_modules/micromark-extension-gfm-task-list-item/lib/syntax.js","../node_modules/.pnpm/micromark-extension-gfm@3.0.0/node_modules/micromark-extension-gfm/index.js","../node_modules/.pnpm/remark-gfm@4.0.0/node_modules/remark-gfm/lib/index.js","../node_modules/.pnpm/micromark@4.0.0/node_modules/micromark/lib/initialize/content.js","../node_modules/.pnpm/micromark@4.0.0/node_modules/micromark/lib/initialize/document.js","../node_modules/.pnpm/micromark@4.0.0/node_modules/micromark/lib/initialize/flow.js","../node_modules/.pnpm/micromark@4.0.0/node_modules/micromark/lib/initialize/text.js","../node_modules/.pnpm/micromark@4.0.0/node_modules/micromark/lib/create-tokenizer.js","../node_modules/.pnpm/micromark@4.0.0/node_modules/micromark/lib/constructs.js","../node_modules/.pnpm/micromark@4.0.0/node_modules/micromark/lib/parse.js","../node_modules/.pnpm/micromark@4.0.0/node_modules/micromark/lib/postprocess.js","../node_modules/.pnpm/micromark@4.0.0/node_modules/micromark/lib/preprocess.js","../node_modules/.pnpm/unist-util-stringify-position@4.0.0/node_modules/unist-util-stringify-position/lib/index.js","../node_modules/.pnpm/mdast-util-from-markdown@2.0.1/node_modules/mdast-util-from-markdown/lib/index.js","../node_modules/.pnpm/remark-parse@11.0.0/node_modules/remark-parse/lib/index.js","../node_modules/.pnpm/bail@2.0.2/node_modules/bail/index.js","../node_modules/.pnpm/extend@3.0.2/node_modules/extend/index.js","../node_modules/.pnpm/is-plain-obj@4.1.0/node_modules/is-plain-obj/index.js","../node_modules/.pnpm/trough@2.2.0/node_modules/trough/lib/index.js","../node_modules/.pnpm/vfile-message@4.0.2/node_modules/vfile-message/lib/index.js","../node_modules/.pnpm/vfile@6.0.2/node_modules/vfile/lib/minpath.browser.js","../node_modules/.pnpm/vfile@6.0.2/node_modules/vfile/lib/minproc.browser.js","../node_modules/.pnpm/vfile@6.0.2/node_modules/vfile/lib/minurl.shared.js","../node_modules/.pnpm/vfile@6.0.2/node_modules/vfile/lib/minurl.browser.js","../node_modules/.pnpm/vfile@6.0.2/node_modules/vfile/lib/index.js","../node_modules/.pnpm/unified@11.0.5/node_modules/unified/lib/callable-instance.js","../node_modules/.pnpm/unified@11.0.5/node_modules/unified/lib/index.js","../node_modules/.pnpm/trim-lines@3.0.1/node_modules/trim-lines/index.js","../packages/core/presets/index.ts","../packages/core/utils.ts","../packages/core/useVueMark.ts","../packages/core/presets/components/Heading.vue","../packages/core/presets/components/FootnoteReference.vue","../packages/core/presets/components/Table.vue","../packages/core/presets/components/TableRow.vue"],"sourcesContent":["export function deprecate(fn) {\n  return fn\n}\n\nexport function equal() {}\n\nexport function ok() {}\n\nexport function unreachable() {}\n","/**\n * List of legacy HTML named character references that don’t need a trailing semicolon.\n *\n * @type {Array<string>}\n */\nexport const characterEntitiesLegacy = [\n  'AElig',\n  'AMP',\n  'Aacute',\n  'Acirc',\n  'Agrave',\n  'Aring',\n  'Atilde',\n  'Auml',\n  'COPY',\n  'Ccedil',\n  'ETH',\n  'Eacute',\n  'Ecirc',\n  'Egrave',\n  'Euml',\n  'GT',\n  'Iacute',\n  'Icirc',\n  'Igrave',\n  'Iuml',\n  'LT',\n  'Ntilde',\n  'Oacute',\n  'Ocirc',\n  'Ograve',\n  'Oslash',\n  'Otilde',\n  'Ouml',\n  'QUOT',\n  'REG',\n  'THORN',\n  'Uacute',\n  'Ucirc',\n  'Ugrave',\n  'Uuml',\n  'Yacute',\n  'aacute',\n  'acirc',\n  'acute',\n  'aelig',\n  'agrave',\n  'amp',\n  'aring',\n  'atilde',\n  'auml',\n  'brvbar',\n  'ccedil',\n  'cedil',\n  'cent',\n  'copy',\n  'curren',\n  'deg',\n  'divide',\n  'eacute',\n  'ecirc',\n  'egrave',\n  'eth',\n  'euml',\n  'frac12',\n  'frac14',\n  'frac34',\n  'gt',\n  'iacute',\n  'icirc',\n  'iexcl',\n  'igrave',\n  'iquest',\n  'iuml',\n  'laquo',\n  'lt',\n  'macr',\n  'micro',\n  'middot',\n  'nbsp',\n  'not',\n  'ntilde',\n  'oacute',\n  'ocirc',\n  'ograve',\n  'ordf',\n  'ordm',\n  'oslash',\n  'otilde',\n  'ouml',\n  'para',\n  'plusmn',\n  'pound',\n  'quot',\n  'raquo',\n  'reg',\n  'sect',\n  'shy',\n  'sup1',\n  'sup2',\n  'sup3',\n  'szlig',\n  'thorn',\n  'times',\n  'uacute',\n  'ucirc',\n  'ugrave',\n  'uml',\n  'uuml',\n  'yacute',\n  'yen',\n  'yuml'\n]\n","/**\n * Map of invalid numeric character references to their replacements, according to HTML.\n *\n * @type {Record<number, string>}\n */\nexport const characterReferenceInvalid = {\n  0: '�',\n  128: '€',\n  130: '‚',\n  131: 'ƒ',\n  132: '„',\n  133: '…',\n  134: '†',\n  135: '‡',\n  136: 'ˆ',\n  137: '‰',\n  138: 'Š',\n  139: '‹',\n  140: 'Œ',\n  142: 'Ž',\n  145: '‘',\n  146: '’',\n  147: '“',\n  148: '”',\n  149: '•',\n  150: '–',\n  151: '—',\n  152: '˜',\n  153: '™',\n  154: 'š',\n  155: '›',\n  156: 'œ',\n  158: 'ž',\n  159: 'Ÿ'\n}\n","/**\n * Check if the given character code, or the character code at the first\n * character, is decimal.\n *\n * @param {string|number} character\n * @returns {boolean} Whether `character` is a decimal\n */\nexport function isDecimal(character) {\n  const code =\n    typeof character === 'string' ? character.charCodeAt(0) : character\n\n  return code >= 48 && code <= 57 /* 0-9 */\n}\n","/**\n * Check if the given character code, or the character code at the first\n * character, is hexadecimal.\n *\n * @param {string|number} character\n * @returns {boolean} Whether `character` is hexadecimal\n */\nexport function isHexadecimal(character) {\n  const code =\n    typeof character === 'string' ? character.charCodeAt(0) : character\n\n  return (\n    (code >= 97 /* a */ && code <= 102) /* z */ ||\n    (code >= 65 /* A */ && code <= 70) /* Z */ ||\n    (code >= 48 /* A */ && code <= 57) /* Z */\n  )\n}\n","/**\n * Check if the given character code, or the character code at the first\n * character, is alphabetical.\n *\n * @param {string|number} character\n * @returns {boolean} Whether `character` is alphabetical.\n */\nexport function isAlphabetical(character) {\n  const code =\n    typeof character === 'string' ? character.charCodeAt(0) : character\n\n  return (\n    (code >= 97 && code <= 122) /* a-z */ ||\n    (code >= 65 && code <= 90) /* A-Z */\n  )\n}\n","import {isAlphabetical} from 'is-alphabetical'\nimport {isDecimal} from 'is-decimal'\n\n/**\n * Check if the given character code, or the character code at the first\n * character, is alphanumerical.\n *\n * @param {string|number} character\n * @returns {boolean} Whether `character` is alphanumerical.\n */\nexport function isAlphanumerical(character) {\n  return isAlphabetical(character) || isDecimal(character)\n}\n","/// <reference lib=\"dom\" />\n\n/* eslint-env browser */\n\nconst element = document.createElement('i')\n\n/**\n * @param {string} value\n * @returns {string|false}\n */\nexport function decodeNamedCharacterReference(value) {\n  const characterReference = '&' + value + ';'\n  element.innerHTML = characterReference\n  const char = element.textContent\n\n  // Some named character references do not require the closing semicolon\n  // (`&not`, for instance), which leads to situations where parsing the assumed\n  // named reference of `&notit;` will result in the string `¬it;`.\n  // When we encounter a trailing semicolon after parsing, and the character\n  // reference to decode was not a semicolon (`&semi;`), we can assume that the\n  // matching was not complete.\n  // @ts-expect-error: TypeScript is wrong that `textContent` on elements can\n  // yield `null`.\n  if (char.charCodeAt(char.length - 1) === 59 /* `;` */ && value !== 'semi') {\n    return false\n  }\n\n  // If the decoded string is equal to the input, the character reference was\n  // not valid.\n  // @ts-expect-error: TypeScript is wrong that `textContent` on elements can\n  // yield `null`.\n  return char === characterReference ? false : char\n}\n","/**\n * @typedef {import('unist').Point} Point\n * @typedef {import('unist').Position} Position\n */\n\nimport {characterEntitiesLegacy} from 'character-entities-legacy'\nimport {characterReferenceInvalid} from 'character-reference-invalid'\nimport {isDecimal} from 'is-decimal'\nimport {isHexadecimal} from 'is-hexadecimal'\nimport {isAlphanumerical} from 'is-alphanumerical'\nimport {decodeNamedCharacterReference} from 'decode-named-character-reference'\n\nconst fromCharCode = String.fromCharCode\n\n// Warning messages.\nconst messages = [\n  '',\n  /* 1: Non terminated (named) */\n  'Named character references must be terminated by a semicolon',\n  /* 2: Non terminated (numeric) */\n  'Numeric character references must be terminated by a semicolon',\n  /* 3: Empty (named) */\n  'Named character references cannot be empty',\n  /* 4: Empty (numeric) */\n  'Numeric character references cannot be empty',\n  /* 5: Unknown (named) */\n  'Named character references must be known',\n  /* 6: Disallowed (numeric) */\n  'Numeric character references cannot be disallowed',\n  /* 7: Prohibited (numeric) */\n  'Numeric character references cannot be outside the permissible Unicode range'\n]\n\n/**\n * Parse HTML character references.\n *\n * @param {string} value\n * @param {import('../index.js').Options} [options={}]\n */\nexport function parseEntities(value, options = {}) {\n  const additional =\n    typeof options.additional === 'string'\n      ? options.additional.charCodeAt(0)\n      : options.additional\n  /** @type {Array<string>} */\n  const result = []\n  let index = 0\n  let lines = -1\n  let queue = ''\n  /** @type {Point|undefined} */\n  let point\n  /** @type {Array<number>|undefined} */\n  let indent\n\n  if (options.position) {\n    if ('start' in options.position || 'indent' in options.position) {\n      // @ts-expect-error: points don’t have indent.\n      indent = options.position.indent\n      // @ts-expect-error: points don’t have indent.\n      point = options.position.start\n    } else {\n      point = options.position\n    }\n  }\n\n  let line = (point ? point.line : 0) || 1\n  let column = (point ? point.column : 0) || 1\n\n  // Cache the current point.\n  let previous = now()\n  /** @type {number|undefined} */\n  let character\n\n  // Ensure the algorithm walks over the first character (inclusive).\n  index--\n\n  while (++index <= value.length) {\n    // If the previous character was a newline.\n    if (character === 10 /* `\\n` */) {\n      column = (indent ? indent[lines] : 0) || 1\n    }\n\n    character = value.charCodeAt(index)\n\n    if (character === 38 /* `&` */) {\n      const following = value.charCodeAt(index + 1)\n\n      // The behavior depends on the identity of the next character.\n      if (\n        following === 9 /* `\\t` */ ||\n        following === 10 /* `\\n` */ ||\n        following === 12 /* `\\f` */ ||\n        following === 32 /* ` ` */ ||\n        following === 38 /* `&` */ ||\n        following === 60 /* `<` */ ||\n        Number.isNaN(following) ||\n        (additional && following === additional)\n      ) {\n        // Not a character reference.\n        // No characters are consumed, and nothing is returned.\n        // This is not an error, either.\n        queue += fromCharCode(character)\n        column++\n        continue\n      }\n\n      const start = index + 1\n      let begin = start\n      let end = start\n      /** @type {string} */\n      let type\n\n      if (following === 35 /* `#` */) {\n        // Numerical reference.\n        end = ++begin\n\n        // The behavior further depends on the next character.\n        const following = value.charCodeAt(end)\n\n        if (following === 88 /* `X` */ || following === 120 /* `x` */) {\n          // ASCII hexadecimal digits.\n          type = 'hexadecimal'\n          end = ++begin\n        } else {\n          // ASCII decimal digits.\n          type = 'decimal'\n        }\n      } else {\n        // Named reference.\n        type = 'named'\n      }\n\n      let characterReferenceCharacters = ''\n      let characterReference = ''\n      let characters = ''\n      // Each type of character reference accepts different characters.\n      // This test is used to detect whether a reference has ended (as the semicolon\n      // is not strictly needed).\n      const test =\n        type === 'named'\n          ? isAlphanumerical\n          : type === 'decimal'\n          ? isDecimal\n          : isHexadecimal\n\n      end--\n\n      while (++end <= value.length) {\n        const following = value.charCodeAt(end)\n\n        if (!test(following)) {\n          break\n        }\n\n        characters += fromCharCode(following)\n\n        // Check if we can match a legacy named reference.\n        // If so, we cache that as the last viable named reference.\n        // This ensures we do not need to walk backwards later.\n        if (type === 'named' && characterEntitiesLegacy.includes(characters)) {\n          characterReferenceCharacters = characters\n          // @ts-expect-error: always able to decode.\n          characterReference = decodeNamedCharacterReference(characters)\n        }\n      }\n\n      let terminated = value.charCodeAt(end) === 59 /* `;` */\n\n      if (terminated) {\n        end++\n\n        const namedReference =\n          type === 'named' ? decodeNamedCharacterReference(characters) : false\n\n        if (namedReference) {\n          characterReferenceCharacters = characters\n          characterReference = namedReference\n        }\n      }\n\n      let diff = 1 + end - start\n      let reference = ''\n\n      if (!terminated && options.nonTerminated === false) {\n        // Empty.\n      } else if (!characters) {\n        // An empty (possible) reference is valid, unless it’s numeric (thus an\n        // ampersand followed by an octothorp).\n        if (type !== 'named') {\n          warning(4 /* Empty (numeric) */, diff)\n        }\n      } else if (type === 'named') {\n        // An ampersand followed by anything unknown, and not terminated, is\n        // invalid.\n        if (terminated && !characterReference) {\n          warning(5 /* Unknown (named) */, 1)\n        } else {\n          // If there’s something after an named reference which is not known,\n          // cap the reference.\n          if (characterReferenceCharacters !== characters) {\n            end = begin + characterReferenceCharacters.length\n            diff = 1 + end - begin\n            terminated = false\n          }\n\n          // If the reference is not terminated, warn.\n          if (!terminated) {\n            const reason = characterReferenceCharacters\n              ? 1 /* Non terminated (named) */\n              : 3 /* Empty (named) */\n\n            if (options.attribute) {\n              const following = value.charCodeAt(end)\n\n              if (following === 61 /* `=` */) {\n                warning(reason, diff)\n                characterReference = ''\n              } else if (isAlphanumerical(following)) {\n                characterReference = ''\n              } else {\n                warning(reason, diff)\n              }\n            } else {\n              warning(reason, diff)\n            }\n          }\n        }\n\n        reference = characterReference\n      } else {\n        if (!terminated) {\n          // All nonterminated numeric references are not rendered, and emit a\n          // warning.\n          warning(2 /* Non terminated (numeric) */, diff)\n        }\n\n        // When terminated and numerical, parse as either hexadecimal or\n        // decimal.\n        let referenceCode = Number.parseInt(\n          characters,\n          type === 'hexadecimal' ? 16 : 10\n        )\n\n        // Emit a warning when the parsed number is prohibited, and replace with\n        // replacement character.\n        if (prohibited(referenceCode)) {\n          warning(7 /* Prohibited (numeric) */, diff)\n          reference = fromCharCode(65533 /* `�` */)\n        } else if (referenceCode in characterReferenceInvalid) {\n          // Emit a warning when the parsed number is disallowed, and replace by\n          // an alternative.\n          warning(6 /* Disallowed (numeric) */, diff)\n          reference = characterReferenceInvalid[referenceCode]\n        } else {\n          // Parse the number.\n          let output = ''\n\n          // Emit a warning when the parsed number should not be used.\n          if (disallowed(referenceCode)) {\n            warning(6 /* Disallowed (numeric) */, diff)\n          }\n\n          // Serialize the number.\n          if (referenceCode > 0xffff) {\n            referenceCode -= 0x10000\n            output += fromCharCode((referenceCode >>> (10 & 0x3ff)) | 0xd800)\n            referenceCode = 0xdc00 | (referenceCode & 0x3ff)\n          }\n\n          reference = output + fromCharCode(referenceCode)\n        }\n      }\n\n      // Found it!\n      // First eat the queued characters as normal text, then eat a reference.\n      if (reference) {\n        flush()\n\n        previous = now()\n        index = end - 1\n        column += end - start + 1\n        result.push(reference)\n        const next = now()\n        next.offset++\n\n        if (options.reference) {\n          options.reference.call(\n            options.referenceContext,\n            reference,\n            {start: previous, end: next},\n            value.slice(start - 1, end)\n          )\n        }\n\n        previous = next\n      } else {\n        // If we could not find a reference, queue the checked characters (as\n        // normal characters), and move the pointer to their end.\n        // This is possible because we can be certain neither newlines nor\n        // ampersands are included.\n        characters = value.slice(start - 1, end)\n        queue += characters\n        column += characters.length\n        index = end - 1\n      }\n    } else {\n      // Handle anything other than an ampersand, including newlines and EOF.\n      if (character === 10 /* `\\n` */) {\n        line++\n        lines++\n        column = 0\n      }\n\n      if (Number.isNaN(character)) {\n        flush()\n      } else {\n        queue += fromCharCode(character)\n        column++\n      }\n    }\n  }\n\n  // Return the reduced nodes.\n  return result.join('')\n\n  // Get current position.\n  function now() {\n    return {\n      line,\n      column,\n      offset: index + ((point ? point.offset : 0) || 0)\n    }\n  }\n\n  /**\n   * Handle the warning.\n   *\n   * @param {1|2|3|4|5|6|7} code\n   * @param {number} offset\n   */\n  function warning(code, offset) {\n    /** @type {ReturnType<now>} */\n    let position\n\n    if (options.warning) {\n      position = now()\n      position.column += offset\n      position.offset += offset\n\n      options.warning.call(\n        options.warningContext,\n        messages[code],\n        position,\n        code\n      )\n    }\n  }\n\n  /**\n   * Flush `queue` (normal text).\n   * Macro invoked before each reference and at the end of `value`.\n   * Does nothing when `queue` is empty.\n   */\n  function flush() {\n    if (queue) {\n      result.push(queue)\n\n      if (options.text) {\n        options.text.call(options.textContext, queue, {\n          start: previous,\n          end: now()\n        })\n      }\n\n      queue = ''\n    }\n  }\n}\n\n/**\n * Check if `character` is outside the permissible unicode range.\n *\n * @param {number} code\n * @returns {boolean}\n */\nfunction prohibited(code) {\n  return (code >= 0xd800 && code <= 0xdfff) || code > 0x10ffff\n}\n\n/**\n * Check if `character` is disallowed.\n *\n * @param {number} code\n * @returns {boolean}\n */\nfunction disallowed(code) {\n  return (\n    (code >= 0x0001 && code <= 0x0008) ||\n    code === 0x000b ||\n    (code >= 0x000d && code <= 0x001f) ||\n    (code >= 0x007f && code <= 0x009f) ||\n    (code >= 0xfdd0 && code <= 0xfdef) ||\n    (code & 0xffff) === 0xffff ||\n    (code & 0xffff) === 0xfffe\n  )\n}\n","/**\n * @typedef CoreOptions\n * @property {ReadonlyArray<string>} [subset=[]]\n *   Whether to only escape the given subset of characters.\n * @property {boolean} [escapeOnly=false]\n *   Whether to only escape possibly dangerous characters.\n *   Those characters are `\"`, `&`, `'`, `<`, `>`, and `` ` ``.\n *\n * @typedef FormatOptions\n * @property {(code: number, next: number, options: CoreWithFormatOptions) => string} format\n *   Format strategy.\n *\n * @typedef {CoreOptions & FormatOptions & import('./util/format-smart.js').FormatSmartOptions} CoreWithFormatOptions\n */\n\nconst defaultSubsetRegex = /[\"&'<>`]/g\nconst surrogatePairsRegex = /[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]/g\nconst controlCharactersRegex =\n  // eslint-disable-next-line no-control-regex, unicorn/no-hex-escape\n  /[\\x01-\\t\\v\\f\\x0E-\\x1F\\x7F\\x81\\x8D\\x8F\\x90\\x9D\\xA0-\\uFFFF]/g\nconst regexEscapeRegex = /[|\\\\{}()[\\]^$+*?.]/g\n\n/** @type {WeakMap<ReadonlyArray<string>, RegExp>} */\nconst subsetToRegexCache = new WeakMap()\n\n/**\n * Encode certain characters in `value`.\n *\n * @param {string} value\n * @param {CoreWithFormatOptions} options\n * @returns {string}\n */\nexport function core(value, options) {\n  value = value.replace(\n    options.subset\n      ? charactersToExpressionCached(options.subset)\n      : defaultSubsetRegex,\n    basic\n  )\n\n  if (options.subset || options.escapeOnly) {\n    return value\n  }\n\n  return (\n    value\n      // Surrogate pairs.\n      .replace(surrogatePairsRegex, surrogate)\n      // BMP control characters (C0 except for LF, CR, SP; DEL; and some more\n      // non-ASCII ones).\n      .replace(controlCharactersRegex, basic)\n  )\n\n  /**\n   * @param {string} pair\n   * @param {number} index\n   * @param {string} all\n   */\n  function surrogate(pair, index, all) {\n    return options.format(\n      (pair.charCodeAt(0) - 0xd800) * 0x400 +\n        pair.charCodeAt(1) -\n        0xdc00 +\n        0x10000,\n      all.charCodeAt(index + 2),\n      options\n    )\n  }\n\n  /**\n   * @param {string} character\n   * @param {number} index\n   * @param {string} all\n   */\n  function basic(character, index, all) {\n    return options.format(\n      character.charCodeAt(0),\n      all.charCodeAt(index + 1),\n      options\n    )\n  }\n}\n\n/**\n * A wrapper function that caches the result of `charactersToExpression` with a WeakMap.\n * This can improve performance when tooling calls `charactersToExpression` repeatedly\n * with the same subset.\n *\n * @param {ReadonlyArray<string>} subset\n * @returns {RegExp}\n */\nfunction charactersToExpressionCached(subset) {\n  let cached = subsetToRegexCache.get(subset)\n\n  if (!cached) {\n    cached = charactersToExpression(subset)\n    subsetToRegexCache.set(subset, cached)\n  }\n\n  return cached\n}\n\n/**\n * @param {ReadonlyArray<string>} subset\n * @returns {RegExp}\n */\nfunction charactersToExpression(subset) {\n  /** @type {Array<string>} */\n  const groups = []\n  let index = -1\n\n  while (++index < subset.length) {\n    groups.push(subset[index].replace(regexEscapeRegex, '\\\\$&'))\n  }\n\n  return new RegExp('(?:' + groups.join('|') + ')', 'g')\n}\n","/**\n * The smallest way to encode a character.\n *\n * @param {number} code\n * @returns {string}\n */\nexport function formatBasic(code) {\n  return '&#x' + code.toString(16).toUpperCase() + ';'\n}\n","/**\n * @typedef {import('./core.js').CoreOptions & import('./util/format-smart.js').FormatSmartOptions} Options\n * @typedef {import('./core.js').CoreOptions} LightOptions\n */\n\nimport {core} from './core.js'\nimport {formatSmart} from './util/format-smart.js'\nimport {formatBasic} from './util/format-basic.js'\n\n/**\n * Encode special characters in `value`.\n *\n * @param {string} value\n *   Value to encode.\n * @param {Options} [options]\n *   Configuration.\n * @returns {string}\n *   Encoded value.\n */\nexport function stringifyEntities(value, options) {\n  return core(value, Object.assign({format: formatSmart}, options))\n}\n\n/**\n * Encode special characters in `value` as hexadecimals.\n *\n * @param {string} value\n *   Value to encode.\n * @param {LightOptions} [options]\n *   Configuration.\n * @returns {string}\n *   Encoded value.\n */\nexport function stringifyEntitiesLight(value, options) {\n  return core(value, Object.assign({format: formatBasic}, options))\n}\n","/**\n * @typedef {import('unist').Node} Node\n * @typedef {import('unist').Parent} Parent\n */\n\n/**\n * @template Fn\n * @template Fallback\n * @typedef {Fn extends (value: any) => value is infer Thing ? Thing : Fallback} Predicate\n */\n\n/**\n * @callback Check\n *   Check that an arbitrary value is a node.\n * @param {unknown} this\n *   The given context.\n * @param {unknown} [node]\n *   Anything (typically a node).\n * @param {number | null | undefined} [index]\n *   The node’s position in its parent.\n * @param {Parent | null | undefined} [parent]\n *   The node’s parent.\n * @returns {boolean}\n *   Whether this is a node and passes a test.\n *\n * @typedef {Record<string, unknown> | Node} Props\n *   Object to check for equivalence.\n *\n *   Note: `Node` is included as it is common but is not indexable.\n *\n * @typedef {Array<Props | TestFunction | string> | Props | TestFunction | string | null | undefined} Test\n *   Check for an arbitrary node.\n *\n * @callback TestFunction\n *   Check if a node passes a test.\n * @param {unknown} this\n *   The given context.\n * @param {Node} node\n *   A node.\n * @param {number | undefined} [index]\n *   The node’s position in its parent.\n * @param {Parent | undefined} [parent]\n *   The node’s parent.\n * @returns {boolean | undefined | void}\n *   Whether this node passes the test.\n *\n *   Note: `void` is included until TS sees no return as `undefined`.\n */\n\n/**\n * Check if `node` is a `Node` and whether it passes the given test.\n *\n * @param {unknown} node\n *   Thing to check, typically `Node`.\n * @param {Test} test\n *   A check for a specific node.\n * @param {number | null | undefined} index\n *   The node’s position in its parent.\n * @param {Parent | null | undefined} parent\n *   The node’s parent.\n * @param {unknown} context\n *   Context object (`this`) to pass to `test` functions.\n * @returns {boolean}\n *   Whether `node` is a node and passes a test.\n */\nexport const is =\n  // Note: overloads in JSDoc can’t yet use different `@template`s.\n  /**\n   * @type {(\n   *   (<Condition extends string>(node: unknown, test: Condition, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node & {type: Condition}) &\n   *   (<Condition extends Props>(node: unknown, test: Condition, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node & Condition) &\n   *   (<Condition extends TestFunction>(node: unknown, test: Condition, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node & Predicate<Condition, Node>) &\n   *   ((node?: null | undefined) => false) &\n   *   ((node: unknown, test?: null | undefined, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node) &\n   *   ((node: unknown, test?: Test, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => boolean)\n   * )}\n   */\n  (\n    /**\n     * @param {unknown} [node]\n     * @param {Test} [test]\n     * @param {number | null | undefined} [index]\n     * @param {Parent | null | undefined} [parent]\n     * @param {unknown} [context]\n     * @returns {boolean}\n     */\n    // eslint-disable-next-line max-params\n    function (node, test, index, parent, context) {\n      const check = convert(test)\n\n      if (\n        index !== undefined &&\n        index !== null &&\n        (typeof index !== 'number' ||\n          index < 0 ||\n          index === Number.POSITIVE_INFINITY)\n      ) {\n        throw new Error('Expected positive finite index')\n      }\n\n      if (\n        parent !== undefined &&\n        parent !== null &&\n        (!is(parent) || !parent.children)\n      ) {\n        throw new Error('Expected parent node')\n      }\n\n      if (\n        (parent === undefined || parent === null) !==\n        (index === undefined || index === null)\n      ) {\n        throw new Error('Expected both parent and index')\n      }\n\n      return looksLikeANode(node)\n        ? check.call(context, node, index, parent)\n        : false\n    }\n  )\n\n/**\n * Generate an assertion from a test.\n *\n * Useful if you’re going to test many nodes, for example when creating a\n * utility where something else passes a compatible test.\n *\n * The created function is a bit faster because it expects valid input only:\n * a `node`, `index`, and `parent`.\n *\n * @param {Test} test\n *   *   when nullish, checks if `node` is a `Node`.\n *   *   when `string`, works like passing `(node) => node.type === test`.\n *   *   when `function` checks if function passed the node is true.\n *   *   when `object`, checks that all keys in test are in node, and that they have (strictly) equal values.\n *   *   when `array`, checks if any one of the subtests pass.\n * @returns {Check}\n *   An assertion.\n */\nexport const convert =\n  // Note: overloads in JSDoc can’t yet use different `@template`s.\n  /**\n   * @type {(\n   *   (<Condition extends string>(test: Condition) => (node: unknown, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node & {type: Condition}) &\n   *   (<Condition extends Props>(test: Condition) => (node: unknown, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node & Condition) &\n   *   (<Condition extends TestFunction>(test: Condition) => (node: unknown, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node & Predicate<Condition, Node>) &\n   *   ((test?: null | undefined) => (node?: unknown, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node) &\n   *   ((test?: Test) => Check)\n   * )}\n   */\n  (\n    /**\n     * @param {Test} [test]\n     * @returns {Check}\n     */\n    function (test) {\n      if (test === null || test === undefined) {\n        return ok\n      }\n\n      if (typeof test === 'function') {\n        return castFactory(test)\n      }\n\n      if (typeof test === 'object') {\n        return Array.isArray(test) ? anyFactory(test) : propsFactory(test)\n      }\n\n      if (typeof test === 'string') {\n        return typeFactory(test)\n      }\n\n      throw new Error('Expected function, string, or object as test')\n    }\n  )\n\n/**\n * @param {Array<Props | TestFunction | string>} tests\n * @returns {Check}\n */\nfunction anyFactory(tests) {\n  /** @type {Array<Check>} */\n  const checks = []\n  let index = -1\n\n  while (++index < tests.length) {\n    checks[index] = convert(tests[index])\n  }\n\n  return castFactory(any)\n\n  /**\n   * @this {unknown}\n   * @type {TestFunction}\n   */\n  function any(...parameters) {\n    let index = -1\n\n    while (++index < checks.length) {\n      if (checks[index].apply(this, parameters)) return true\n    }\n\n    return false\n  }\n}\n\n/**\n * Turn an object into a test for a node with a certain fields.\n *\n * @param {Props} check\n * @returns {Check}\n */\nfunction propsFactory(check) {\n  const checkAsRecord = /** @type {Record<string, unknown>} */ (check)\n\n  return castFactory(all)\n\n  /**\n   * @param {Node} node\n   * @returns {boolean}\n   */\n  function all(node) {\n    const nodeAsRecord = /** @type {Record<string, unknown>} */ (\n      /** @type {unknown} */ (node)\n    )\n\n    /** @type {string} */\n    let key\n\n    for (key in check) {\n      if (nodeAsRecord[key] !== checkAsRecord[key]) return false\n    }\n\n    return true\n  }\n}\n\n/**\n * Turn a string into a test for a node with a certain type.\n *\n * @param {string} check\n * @returns {Check}\n */\nfunction typeFactory(check) {\n  return castFactory(type)\n\n  /**\n   * @param {Node} node\n   */\n  function type(node) {\n    return node && node.type === check\n  }\n}\n\n/**\n * Turn a custom test into a test for a node that passes that test.\n *\n * @param {TestFunction} testFunction\n * @returns {Check}\n */\nfunction castFactory(testFunction) {\n  return check\n\n  /**\n   * @this {unknown}\n   * @type {Check}\n   */\n  function check(value, index, parent) {\n    return Boolean(\n      looksLikeANode(value) &&\n        testFunction.call(\n          this,\n          value,\n          typeof index === 'number' ? index : undefined,\n          parent || undefined\n        )\n    )\n  }\n}\n\nfunction ok() {\n  return true\n}\n\n/**\n * @param {unknown} value\n * @returns {value is Node}\n */\nfunction looksLikeANode(value) {\n  return value !== null && typeof value === 'object' && 'type' in value\n}\n","/**\n * @param {string} d\n * @returns {string}\n */\nexport function color(d) {\n  return d\n}\n","/**\n * @typedef {import('unist').Node} UnistNode\n * @typedef {import('unist').Parent} UnistParent\n */\n\n/**\n * @typedef {Exclude<import('unist-util-is').Test, undefined> | undefined} Test\n *   Test from `unist-util-is`.\n *\n *   Note: we have remove and add `undefined`, because otherwise when generating\n *   automatic `.d.ts` files, TS tries to flatten paths from a local perspective,\n *   which doesn’t work when publishing on npm.\n */\n\n/**\n * @typedef {(\n *   Fn extends (value: any) => value is infer Thing\n *   ? Thing\n *   : Fallback\n * )} Predicate\n *   Get the value of a type guard `Fn`.\n * @template Fn\n *   Value; typically function that is a type guard (such as `(x): x is Y`).\n * @template Fallback\n *   Value to yield if `Fn` is not a type guard.\n */\n\n/**\n * @typedef {(\n *   Check extends null | undefined // No test.\n *   ? Value\n *   : Value extends {type: Check} // String (type) test.\n *   ? Value\n *   : Value extends Check // Partial test.\n *   ? Value\n *   : Check extends Function // Function test.\n *   ? Predicate<Check, Value> extends Value\n *     ? Predicate<Check, Value>\n *     : never\n *   : never // Some other test?\n * )} MatchesOne\n *   Check whether a node matches a primitive check in the type system.\n * @template Value\n *   Value; typically unist `Node`.\n * @template Check\n *   Value; typically `unist-util-is`-compatible test, but not arrays.\n */\n\n/**\n * @typedef {(\n *   Check extends Array<any>\n *   ? MatchesOne<Value, Check[keyof Check]>\n *   : MatchesOne<Value, Check>\n * )} Matches\n *   Check whether a node matches a check in the type system.\n * @template Value\n *   Value; typically unist `Node`.\n * @template Check\n *   Value; typically `unist-util-is`-compatible test.\n */\n\n/**\n * @typedef {0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10} Uint\n *   Number; capped reasonably.\n */\n\n/**\n * @typedef {I extends 0 ? 1 : I extends 1 ? 2 : I extends 2 ? 3 : I extends 3 ? 4 : I extends 4 ? 5 : I extends 5 ? 6 : I extends 6 ? 7 : I extends 7 ? 8 : I extends 8 ? 9 : 10} Increment\n *   Increment a number in the type system.\n * @template {Uint} [I=0]\n *   Index.\n */\n\n/**\n * @typedef {(\n *   Node extends UnistParent\n *   ? Node extends {children: Array<infer Children>}\n *     ? Child extends Children ? Node : never\n *     : never\n *   : never\n * )} InternalParent\n *   Collect nodes that can be parents of `Child`.\n * @template {UnistNode} Node\n *   All node types in a tree.\n * @template {UnistNode} Child\n *   Node to search for.\n */\n\n/**\n * @typedef {InternalParent<InclusiveDescendant<Tree>, Child>} Parent\n *   Collect nodes in `Tree` that can be parents of `Child`.\n * @template {UnistNode} Tree\n *   All node types in a tree.\n * @template {UnistNode} Child\n *   Node to search for.\n */\n\n/**\n * @typedef {(\n *   Depth extends Max\n *   ? never\n *   :\n *     | InternalParent<Node, Child>\n *     | InternalAncestor<Node, InternalParent<Node, Child>, Max, Increment<Depth>>\n * )} InternalAncestor\n *   Collect nodes in `Tree` that can be ancestors of `Child`.\n * @template {UnistNode} Node\n *   All node types in a tree.\n * @template {UnistNode} Child\n *   Node to search for.\n * @template {Uint} [Max=10]\n *   Max; searches up to this depth.\n * @template {Uint} [Depth=0]\n *   Current depth.\n */\n\n/**\n * @typedef {InternalAncestor<InclusiveDescendant<Tree>, Child>} Ancestor\n *   Collect nodes in `Tree` that can be ancestors of `Child`.\n * @template {UnistNode} Tree\n *   All node types in a tree.\n * @template {UnistNode} Child\n *   Node to search for.\n */\n\n/**\n * @typedef {(\n *   Tree extends UnistParent\n *     ? Depth extends Max\n *       ? Tree\n *       : Tree | InclusiveDescendant<Tree['children'][number], Max, Increment<Depth>>\n *     : Tree\n * )} InclusiveDescendant\n *   Collect all (inclusive) descendants of `Tree`.\n *\n *   > 👉 **Note**: for performance reasons, this seems to be the fastest way to\n *   > recurse without actually running into an infinite loop, which the\n *   > previous version did.\n *   >\n *   > Practically, a max of `2` is typically enough assuming a `Root` is\n *   > passed, but it doesn’t improve performance.\n *   > It gets higher with `List > ListItem > Table > TableRow > TableCell`.\n *   > Using up to `10` doesn’t hurt or help either.\n * @template {UnistNode} Tree\n *   Tree type.\n * @template {Uint} [Max=10]\n *   Max; searches up to this depth.\n * @template {Uint} [Depth=0]\n *   Current depth.\n */\n\n/**\n * @typedef {'skip' | boolean} Action\n *   Union of the action types.\n *\n * @typedef {number} Index\n *   Move to the sibling at `index` next (after node itself is completely\n *   traversed).\n *\n *   Useful if mutating the tree, such as removing the node the visitor is\n *   currently on, or any of its previous siblings.\n *   Results less than 0 or greater than or equal to `children.length` stop\n *   traversing the parent.\n *\n * @typedef {[(Action | null | undefined | void)?, (Index | null | undefined)?]} ActionTuple\n *   List with one or two values, the first an action, the second an index.\n *\n * @typedef {Action | ActionTuple | Index | null | undefined | void} VisitorResult\n *   Any value that can be returned from a visitor.\n */\n\n/**\n * @callback Visitor\n *   Handle a node (matching `test`, if given).\n *\n *   Visitors are free to transform `node`.\n *   They can also transform the parent of node (the last of `ancestors`).\n *\n *   Replacing `node` itself, if `SKIP` is not returned, still causes its\n *   descendants to be walked (which is a bug).\n *\n *   When adding or removing previous siblings of `node` (or next siblings, in\n *   case of reverse), the `Visitor` should return a new `Index` to specify the\n *   sibling to traverse after `node` is traversed.\n *   Adding or removing next siblings of `node` (or previous siblings, in case\n *   of reverse) is handled as expected without needing to return a new `Index`.\n *\n *   Removing the children property of an ancestor still results in them being\n *   traversed.\n * @param {Visited} node\n *   Found node.\n * @param {Array<VisitedParents>} ancestors\n *   Ancestors of `node`.\n * @returns {VisitorResult}\n *   What to do next.\n *\n *   An `Index` is treated as a tuple of `[CONTINUE, Index]`.\n *   An `Action` is treated as a tuple of `[Action]`.\n *\n *   Passing a tuple back only makes sense if the `Action` is `SKIP`.\n *   When the `Action` is `EXIT`, that action can be returned.\n *   When the `Action` is `CONTINUE`, `Index` can be returned.\n * @template {UnistNode} [Visited=UnistNode]\n *   Visited node type.\n * @template {UnistParent} [VisitedParents=UnistParent]\n *   Ancestor type.\n */\n\n/**\n * @typedef {Visitor<Matches<InclusiveDescendant<Tree>, Check>, Ancestor<Tree, Matches<InclusiveDescendant<Tree>, Check>>>} BuildVisitor\n *   Build a typed `Visitor` function from a tree and a test.\n *\n *   It will infer which values are passed as `node` and which as `parents`.\n * @template {UnistNode} [Tree=UnistNode]\n *   Tree type.\n * @template {Test} [Check=Test]\n *   Test type.\n */\n\nimport {convert} from 'unist-util-is'\nimport {color} from 'unist-util-visit-parents/do-not-use-color'\n\n/** @type {Readonly<ActionTuple>} */\nconst empty = []\n\n/**\n * Continue traversing as normal.\n */\nexport const CONTINUE = true\n\n/**\n * Stop traversing immediately.\n */\nexport const EXIT = false\n\n/**\n * Do not traverse this node’s children.\n */\nexport const SKIP = 'skip'\n\n/**\n * Visit nodes, with ancestral information.\n *\n * This algorithm performs *depth-first* *tree traversal* in *preorder*\n * (**NLR**) or if `reverse` is given, in *reverse preorder* (**NRL**).\n *\n * You can choose for which nodes `visitor` is called by passing a `test`.\n * For complex tests, you should test yourself in `visitor`, as it will be\n * faster and will have improved type information.\n *\n * Walking the tree is an intensive task.\n * Make use of the return values of the visitor when possible.\n * Instead of walking a tree multiple times, walk it once, use `unist-util-is`\n * to check if a node matches, and then perform different operations.\n *\n * You can change the tree.\n * See `Visitor` for more info.\n *\n * @overload\n * @param {Tree} tree\n * @param {Check} check\n * @param {BuildVisitor<Tree, Check>} visitor\n * @param {boolean | null | undefined} [reverse]\n * @returns {undefined}\n *\n * @overload\n * @param {Tree} tree\n * @param {BuildVisitor<Tree>} visitor\n * @param {boolean | null | undefined} [reverse]\n * @returns {undefined}\n *\n * @param {UnistNode} tree\n *   Tree to traverse.\n * @param {Visitor | Test} test\n *   `unist-util-is`-compatible test\n * @param {Visitor | boolean | null | undefined} [visitor]\n *   Handle each node.\n * @param {boolean | null | undefined} [reverse]\n *   Traverse in reverse preorder (NRL) instead of the default preorder (NLR).\n * @returns {undefined}\n *   Nothing.\n *\n * @template {UnistNode} Tree\n *   Node type.\n * @template {Test} Check\n *   `unist-util-is`-compatible test.\n */\nexport function visitParents(tree, test, visitor, reverse) {\n  /** @type {Test} */\n  let check\n\n  if (typeof test === 'function' && typeof visitor !== 'function') {\n    reverse = visitor\n    // @ts-expect-error no visitor given, so `visitor` is test.\n    visitor = test\n  } else {\n    // @ts-expect-error visitor given, so `test` isn’t a visitor.\n    check = test\n  }\n\n  const is = convert(check)\n  const step = reverse ? -1 : 1\n\n  factory(tree, undefined, [])()\n\n  /**\n   * @param {UnistNode} node\n   * @param {number | undefined} index\n   * @param {Array<UnistParent>} parents\n   */\n  function factory(node, index, parents) {\n    const value = /** @type {Record<string, unknown>} */ (\n      node && typeof node === 'object' ? node : {}\n    )\n\n    if (typeof value.type === 'string') {\n      const name =\n        // `hast`\n        typeof value.tagName === 'string'\n          ? value.tagName\n          : // `xast`\n          typeof value.name === 'string'\n          ? value.name\n          : undefined\n\n      Object.defineProperty(visit, 'name', {\n        value:\n          'node (' + color(node.type + (name ? '<' + name + '>' : '')) + ')'\n      })\n    }\n\n    return visit\n\n    function visit() {\n      /** @type {Readonly<ActionTuple>} */\n      let result = empty\n      /** @type {Readonly<ActionTuple>} */\n      let subresult\n      /** @type {number} */\n      let offset\n      /** @type {Array<UnistParent>} */\n      let grandparents\n\n      if (!test || is(node, index, parents[parents.length - 1] || undefined)) {\n        // @ts-expect-error: `visitor` is now a visitor.\n        result = toResult(visitor(node, parents))\n\n        if (result[0] === EXIT) {\n          return result\n        }\n      }\n\n      if ('children' in node && node.children) {\n        const nodeAsParent = /** @type {UnistParent} */ (node)\n\n        if (nodeAsParent.children && result[0] !== SKIP) {\n          offset = (reverse ? nodeAsParent.children.length : -1) + step\n          grandparents = parents.concat(nodeAsParent)\n\n          while (offset > -1 && offset < nodeAsParent.children.length) {\n            const child = nodeAsParent.children[offset]\n\n            subresult = factory(child, offset, grandparents)()\n\n            if (subresult[0] === EXIT) {\n              return subresult\n            }\n\n            offset =\n              typeof subresult[1] === 'number' ? subresult[1] : offset + step\n          }\n        }\n      }\n\n      return result\n    }\n  }\n}\n\n/**\n * Turn a return value into a clean result.\n *\n * @param {VisitorResult} value\n *   Valid return values from visitors.\n * @returns {Readonly<ActionTuple>}\n *   Clean result.\n */\nfunction toResult(value) {\n  if (Array.isArray(value)) {\n    return value\n  }\n\n  if (typeof value === 'number') {\n    return [CONTINUE, value]\n  }\n\n  return value === null || value === undefined ? empty : [value]\n}\n","/**\n * @typedef {import('mdast').Nodes} Nodes\n * @typedef {import('mdast').Paragraph} Paragraph\n *\n * @typedef {import('mdast-util-from-markdown').CompileContext} CompileContext\n * @typedef {import('mdast-util-from-markdown').Extension} FromMarkdownExtension\n * @typedef {import('mdast-util-from-markdown').Handle} FromMarkdownHandle\n * @typedef {import('mdast-util-from-markdown').Token} Token\n *\n * @typedef {import('mdast-util-to-markdown').ConstructName} ConstructName\n * @typedef {import('mdast-util-to-markdown').Handle} ToMarkdownHandle\n * @typedef {import('mdast-util-to-markdown').Options} ToMarkdownExtension\n * @typedef {import('mdast-util-to-markdown').State} State\n *\n * @typedef {import('../index.js').Directives} Directives\n * @typedef {import('../index.js').LeafDirective} LeafDirective\n * @typedef {import('../index.js').TextDirective} TextDirective\n */\n\nimport {ok as assert} from 'devlop'\nimport {parseEntities} from 'parse-entities'\nimport {stringifyEntitiesLight} from 'stringify-entities'\nimport {visitParents} from 'unist-util-visit-parents'\n\nconst own = {}.hasOwnProperty\n\nconst shortcut = /^[^\\t\\n\\r \"#'.<=>`}]+$/\n\nhandleDirective.peek = peekDirective\n\n/**\n * Create an extension for `mdast-util-from-markdown` to enable directives in\n * markdown.\n *\n * @returns {FromMarkdownExtension}\n *   Extension for `mdast-util-from-markdown` to enable directives.\n */\nexport function directiveFromMarkdown() {\n  return {\n    canContainEols: ['textDirective'],\n    enter: {\n      directiveContainer: enterContainer,\n      directiveContainerAttributes: enterAttributes,\n      directiveContainerLabel: enterContainerLabel,\n\n      directiveLeaf: enterLeaf,\n      directiveLeafAttributes: enterAttributes,\n\n      directiveText: enterText,\n      directiveTextAttributes: enterAttributes\n    },\n    exit: {\n      directiveContainer: exit,\n      directiveContainerAttributeClassValue: exitAttributeClassValue,\n      directiveContainerAttributeIdValue: exitAttributeIdValue,\n      directiveContainerAttributeName: exitAttributeName,\n      directiveContainerAttributeValue: exitAttributeValue,\n      directiveContainerAttributes: exitAttributes,\n      directiveContainerLabel: exitContainerLabel,\n      directiveContainerName: exitName,\n\n      directiveLeaf: exit,\n      directiveLeafAttributeClassValue: exitAttributeClassValue,\n      directiveLeafAttributeIdValue: exitAttributeIdValue,\n      directiveLeafAttributeName: exitAttributeName,\n      directiveLeafAttributeValue: exitAttributeValue,\n      directiveLeafAttributes: exitAttributes,\n      directiveLeafName: exitName,\n\n      directiveText: exit,\n      directiveTextAttributeClassValue: exitAttributeClassValue,\n      directiveTextAttributeIdValue: exitAttributeIdValue,\n      directiveTextAttributeName: exitAttributeName,\n      directiveTextAttributeValue: exitAttributeValue,\n      directiveTextAttributes: exitAttributes,\n      directiveTextName: exitName\n    }\n  }\n}\n\n/**\n * Create an extension for `mdast-util-to-markdown` to enable directives in\n * markdown.\n *\n * @returns {ToMarkdownExtension}\n *   Extension for `mdast-util-to-markdown` to enable directives.\n */\nexport function directiveToMarkdown() {\n  return {\n    unsafe: [\n      {\n        character: '\\r',\n        inConstruct: ['leafDirectiveLabel', 'containerDirectiveLabel']\n      },\n      {\n        character: '\\n',\n        inConstruct: ['leafDirectiveLabel', 'containerDirectiveLabel']\n      },\n      {\n        before: '[^:]',\n        character: ':',\n        after: '[A-Za-z]',\n        inConstruct: ['phrasing']\n      },\n      {atBreak: true, character: ':', after: ':'}\n    ],\n    handlers: {\n      containerDirective: handleDirective,\n      leafDirective: handleDirective,\n      textDirective: handleDirective\n    }\n  }\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction enterContainer(token) {\n  enter.call(this, 'containerDirective', token)\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction enterLeaf(token) {\n  enter.call(this, 'leafDirective', token)\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction enterText(token) {\n  enter.call(this, 'textDirective', token)\n}\n\n/**\n * @this {CompileContext}\n * @param {Directives['type']} type\n * @param {Token} token\n */\nfunction enter(type, token) {\n  this.enter({type, name: '', attributes: {}, children: []}, token)\n}\n\n/**\n * @this {CompileContext}\n * @param {Token} token\n */\nfunction exitName(token) {\n  const node = this.stack[this.stack.length - 1]\n  assert(\n    node.type === 'containerDirective' ||\n      node.type === 'leafDirective' ||\n      node.type === 'textDirective'\n  )\n  node.name = this.sliceSerialize(token)\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction enterContainerLabel(token) {\n  this.enter(\n    {type: 'paragraph', data: {directiveLabel: true}, children: []},\n    token\n  )\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction exitContainerLabel(token) {\n  this.exit(token)\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction enterAttributes() {\n  this.data.directiveAttributes = []\n  this.buffer() // Capture EOLs\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction exitAttributeIdValue(token) {\n  const list = this.data.directiveAttributes\n  assert(list, 'expected `directiveAttributes`')\n  list.push([\n    'id',\n    parseEntities(this.sliceSerialize(token), {\n      attribute: true\n    })\n  ])\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction exitAttributeClassValue(token) {\n  const list = this.data.directiveAttributes\n  assert(list, 'expected `directiveAttributes`')\n  list.push([\n    'class',\n    parseEntities(this.sliceSerialize(token), {\n      attribute: true\n    })\n  ])\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction exitAttributeValue(token) {\n  const list = this.data.directiveAttributes\n  assert(list, 'expected `directiveAttributes`')\n  list[list.length - 1][1] = parseEntities(this.sliceSerialize(token), {\n    attribute: true\n  })\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction exitAttributeName(token) {\n  const list = this.data.directiveAttributes\n  assert(list, 'expected `directiveAttributes`')\n\n  // Attribute names in CommonMark are significantly limited, so character\n  // references can’t exist.\n  list.push([this.sliceSerialize(token), ''])\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction exitAttributes() {\n  const list = this.data.directiveAttributes\n  assert(list, 'expected `directiveAttributes`')\n  /** @type {Record<string, string>} */\n  const cleaned = {}\n  let index = -1\n\n  while (++index < list.length) {\n    const attribute = list[index]\n\n    if (attribute[0] === 'class' && cleaned.class) {\n      cleaned.class += ' ' + attribute[1]\n    } else {\n      cleaned[attribute[0]] = attribute[1]\n    }\n  }\n\n  this.data.directiveAttributes = undefined\n  this.resume() // Drop EOLs\n  const node = this.stack[this.stack.length - 1]\n  assert(\n    node.type === 'containerDirective' ||\n      node.type === 'leafDirective' ||\n      node.type === 'textDirective'\n  )\n  node.attributes = cleaned\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction exit(token) {\n  this.exit(token)\n}\n\n/**\n * @type {ToMarkdownHandle}\n * @param {Directives} node\n */\nfunction handleDirective(node, _, state, info) {\n  const tracker = state.createTracker(info)\n  const sequence = fence(node)\n  const exit = state.enter(node.type)\n  let value = tracker.move(sequence + (node.name || ''))\n  /** @type {LeafDirective | Paragraph | TextDirective | undefined} */\n  let label\n\n  if (node.type === 'containerDirective') {\n    const head = (node.children || [])[0]\n    label = inlineDirectiveLabel(head) ? head : undefined\n  } else {\n    label = node\n  }\n\n  if (label && label.children && label.children.length > 0) {\n    const exit = state.enter('label')\n    /** @type {ConstructName} */\n    const labelType = `${node.type}Label`\n    const subexit = state.enter(labelType)\n    value += tracker.move('[')\n    value += tracker.move(\n      // @ts-expect-error: `containerPhrasing` is typed correctly, but TS\n      // generates *hardcoded* types, which means that our dynamically added\n      // directives are not present.\n      // At some point, TS should fix that, and `from-markdown` should be fine.\n      state.containerPhrasing(label, {\n        ...tracker.current(),\n        before: value,\n        after: ']'\n      })\n    )\n    value += tracker.move(']')\n    subexit()\n    exit()\n  }\n\n  value += tracker.move(attributes(node, state))\n\n  if (node.type === 'containerDirective') {\n    const head = (node.children || [])[0]\n    let shallow = node\n\n    if (inlineDirectiveLabel(head)) {\n      shallow = Object.assign({}, node, {children: node.children.slice(1)})\n    }\n\n    if (shallow && shallow.children && shallow.children.length > 0) {\n      value += tracker.move('\\n')\n      value += tracker.move(state.containerFlow(shallow, tracker.current()))\n    }\n\n    value += tracker.move('\\n' + sequence)\n  }\n\n  exit()\n  return value\n}\n\n/** @type {ToMarkdownHandle} */\nfunction peekDirective() {\n  return ':'\n}\n\n/**\n * @param {Directives} node\n * @param {State} state\n * @returns {string}\n */\nfunction attributes(node, state) {\n  const quote = state.options.quote || '\"'\n  const subset = node.type === 'textDirective' ? [quote] : [quote, '\\n', '\\r']\n  const attrs = node.attributes || {}\n  /** @type {Array<string>} */\n  const values = []\n  /** @type {string | undefined} */\n  let classesFull\n  /** @type {string | undefined} */\n  let classes\n  /** @type {string | undefined} */\n  let id\n  /** @type {string} */\n  let key\n\n  for (key in attrs) {\n    if (\n      own.call(attrs, key) &&\n      attrs[key] !== undefined &&\n      attrs[key] !== null\n    ) {\n      const value = String(attrs[key])\n\n      if (key === 'id') {\n        id = shortcut.test(value) ? '#' + value : quoted('id', value)\n      } else if (key === 'class') {\n        const list = value.split(/[\\t\\n\\r ]+/g)\n        /** @type {Array<string>} */\n        const classesFullList = []\n        /** @type {Array<string>} */\n        const classesList = []\n        let index = -1\n\n        while (++index < list.length) {\n          ;(shortcut.test(list[index]) ? classesList : classesFullList).push(\n            list[index]\n          )\n        }\n\n        classesFull =\n          classesFullList.length > 0\n            ? quoted('class', classesFullList.join(' '))\n            : ''\n        classes = classesList.length > 0 ? '.' + classesList.join('.') : ''\n      } else {\n        values.push(quoted(key, value))\n      }\n    }\n  }\n\n  if (classesFull) {\n    values.unshift(classesFull)\n  }\n\n  if (classes) {\n    values.unshift(classes)\n  }\n\n  if (id) {\n    values.unshift(id)\n  }\n\n  return values.length > 0 ? '{' + values.join(' ') + '}' : ''\n\n  /**\n   * @param {string} key\n   * @param {string} value\n   * @returns {string}\n   */\n  function quoted(key, value) {\n    return (\n      key +\n      (value\n        ? '=' + quote + stringifyEntitiesLight(value, {subset}) + quote\n        : '')\n    )\n  }\n}\n\n/**\n * @param {Nodes} node\n * @returns {node is Paragraph & {data: {directiveLabel: true}}}\n */\nfunction inlineDirectiveLabel(node) {\n  return Boolean(\n    node && node.type === 'paragraph' && node.data && node.data.directiveLabel\n  )\n}\n\n/**\n * @param {Directives} node\n * @returns {string}\n */\nfunction fence(node) {\n  let size = 0\n\n  if (node.type === 'containerDirective') {\n    visitParents(node, function (node, parents) {\n      if (node.type === 'containerDirective') {\n        let index = parents.length\n        let nesting = 0\n\n        while (index--) {\n          if (parents[index].type === 'containerDirective') {\n            nesting++\n          }\n        }\n\n        if (nesting > size) size = nesting\n      }\n    })\n    size += 3\n  } else if (node.type === 'leafDirective') {\n    size = 2\n  } else {\n    size = 1\n  }\n\n  return ':'.repeat(size)\n}\n","/**\n * @typedef {import('micromark-util-types').Code} Code\n */\n\n/**\n * Check whether the character code represents an ASCII alpha (`a` through `z`,\n * case insensitive).\n *\n * An **ASCII alpha** is an ASCII upper alpha or ASCII lower alpha.\n *\n * An **ASCII upper alpha** is a character in the inclusive range U+0041 (`A`)\n * to U+005A (`Z`).\n *\n * An **ASCII lower alpha** is a character in the inclusive range U+0061 (`a`)\n * to U+007A (`z`).\n *\n * @param code\n *   Code.\n * @returns {boolean}\n *   Whether it matches.\n */\nexport const asciiAlpha = regexCheck(/[A-Za-z]/);\n\n/**\n * Check whether the character code represents an ASCII alphanumeric (`a`\n * through `z`, case insensitive, or `0` through `9`).\n *\n * An **ASCII alphanumeric** is an ASCII digit (see `asciiDigit`) or ASCII alpha\n * (see `asciiAlpha`).\n *\n * @param code\n *   Code.\n * @returns {boolean}\n *   Whether it matches.\n */\nexport const asciiAlphanumeric = regexCheck(/[\\dA-Za-z]/);\n\n/**\n * Check whether the character code represents an ASCII atext.\n *\n * atext is an ASCII alphanumeric (see `asciiAlphanumeric`), or a character in\n * the inclusive ranges U+0023 NUMBER SIGN (`#`) to U+0027 APOSTROPHE (`'`),\n * U+002A ASTERISK (`*`), U+002B PLUS SIGN (`+`), U+002D DASH (`-`), U+002F\n * SLASH (`/`), U+003D EQUALS TO (`=`), U+003F QUESTION MARK (`?`), U+005E\n * CARET (`^`) to U+0060 GRAVE ACCENT (`` ` ``), or U+007B LEFT CURLY BRACE\n * (`{`) to U+007E TILDE (`~`).\n *\n * See:\n * **\\[RFC5322]**:\n * [Internet Message Format](https://tools.ietf.org/html/rfc5322).\n * P. Resnick.\n * IETF.\n *\n * @param code\n *   Code.\n * @returns {boolean}\n *   Whether it matches.\n */\nexport const asciiAtext = regexCheck(/[#-'*+\\--9=?A-Z^-~]/);\n\n/**\n * Check whether a character code is an ASCII control character.\n *\n * An **ASCII control** is a character in the inclusive range U+0000 NULL (NUL)\n * to U+001F (US), or U+007F (DEL).\n *\n * @param {Code} code\n *   Code.\n * @returns {boolean}\n *   Whether it matches.\n */\nexport function asciiControl(code) {\n  return (\n    // Special whitespace codes (which have negative values), C0 and Control\n    // character DEL\n    code !== null && (code < 32 || code === 127)\n  );\n}\n\n/**\n * Check whether the character code represents an ASCII digit (`0` through `9`).\n *\n * An **ASCII digit** is a character in the inclusive range U+0030 (`0`) to\n * U+0039 (`9`).\n *\n * @param code\n *   Code.\n * @returns {boolean}\n *   Whether it matches.\n */\nexport const asciiDigit = regexCheck(/\\d/);\n\n/**\n * Check whether the character code represents an ASCII hex digit (`a` through\n * `f`, case insensitive, or `0` through `9`).\n *\n * An **ASCII hex digit** is an ASCII digit (see `asciiDigit`), ASCII upper hex\n * digit, or an ASCII lower hex digit.\n *\n * An **ASCII upper hex digit** is a character in the inclusive range U+0041\n * (`A`) to U+0046 (`F`).\n *\n * An **ASCII lower hex digit** is a character in the inclusive range U+0061\n * (`a`) to U+0066 (`f`).\n *\n * @param code\n *   Code.\n * @returns {boolean}\n *   Whether it matches.\n */\nexport const asciiHexDigit = regexCheck(/[\\dA-Fa-f]/);\n\n/**\n * Check whether the character code represents ASCII punctuation.\n *\n * An **ASCII punctuation** is a character in the inclusive ranges U+0021\n * EXCLAMATION MARK (`!`) to U+002F SLASH (`/`), U+003A COLON (`:`) to U+0040 AT\n * SIGN (`@`), U+005B LEFT SQUARE BRACKET (`[`) to U+0060 GRAVE ACCENT\n * (`` ` ``), or U+007B LEFT CURLY BRACE (`{`) to U+007E TILDE (`~`).\n *\n * @param code\n *   Code.\n * @returns {boolean}\n *   Whether it matches.\n */\nexport const asciiPunctuation = regexCheck(/[!-/:-@[-`{-~]/);\n\n/**\n * Check whether a character code is a markdown line ending.\n *\n * A **markdown line ending** is the virtual characters M-0003 CARRIAGE RETURN\n * LINE FEED (CRLF), M-0004 LINE FEED (LF) and M-0005 CARRIAGE RETURN (CR).\n *\n * In micromark, the actual character U+000A LINE FEED (LF) and U+000D CARRIAGE\n * RETURN (CR) are replaced by these virtual characters depending on whether\n * they occurred together.\n *\n * @param {Code} code\n *   Code.\n * @returns {boolean}\n *   Whether it matches.\n */\nexport function markdownLineEnding(code) {\n  return code !== null && code < -2;\n}\n\n/**\n * Check whether a character code is a markdown line ending (see\n * `markdownLineEnding`) or markdown space (see `markdownSpace`).\n *\n * @param {Code} code\n *   Code.\n * @returns {boolean}\n *   Whether it matches.\n */\nexport function markdownLineEndingOrSpace(code) {\n  return code !== null && (code < 0 || code === 32);\n}\n\n/**\n * Check whether a character code is a markdown space.\n *\n * A **markdown space** is the concrete character U+0020 SPACE (SP) and the\n * virtual characters M-0001 VIRTUAL SPACE (VS) and M-0002 HORIZONTAL TAB (HT).\n *\n * In micromark, the actual character U+0009 CHARACTER TABULATION (HT) is\n * replaced by one M-0002 HORIZONTAL TAB (HT) and between 0 and 3 M-0001 VIRTUAL\n * SPACE (VS) characters, depending on the column at which the tab occurred.\n *\n * @param {Code} code\n *   Code.\n * @returns {boolean}\n *   Whether it matches.\n */\nexport function markdownSpace(code) {\n  return code === -2 || code === -1 || code === 32;\n}\n\n// Size note: removing ASCII from the regex and using `asciiPunctuation` here\n// In fact adds to the bundle size.\n/**\n * Check whether the character code represents Unicode punctuation.\n *\n * A **Unicode punctuation** is a character in the Unicode `Pc` (Punctuation,\n * Connector), `Pd` (Punctuation, Dash), `Pe` (Punctuation, Close), `Pf`\n * (Punctuation, Final quote), `Pi` (Punctuation, Initial quote), `Po`\n * (Punctuation, Other), or `Ps` (Punctuation, Open) categories, or an ASCII\n * punctuation (see `asciiPunctuation`).\n *\n * See:\n * **\\[UNICODE]**:\n * [The Unicode Standard](https://www.unicode.org/versions/).\n * Unicode Consortium.\n *\n * @param code\n *   Code.\n * @returns\n *   Whether it matches.\n */\nexport const unicodePunctuation = regexCheck(/\\p{P}|\\p{S}/u);\n\n/**\n * Check whether the character code represents Unicode whitespace.\n *\n * Note that this does handle micromark specific markdown whitespace characters.\n * See `markdownLineEndingOrSpace` to check that.\n *\n * A **Unicode whitespace** is a character in the Unicode `Zs` (Separator,\n * Space) category, or U+0009 CHARACTER TABULATION (HT), U+000A LINE FEED (LF),\n * U+000C (FF), or U+000D CARRIAGE RETURN (CR) (**\\[UNICODE]**).\n *\n * See:\n * **\\[UNICODE]**:\n * [The Unicode Standard](https://www.unicode.org/versions/).\n * Unicode Consortium.\n *\n * @param code\n *   Code.\n * @returns\n *   Whether it matches.\n */\nexport const unicodeWhitespace = regexCheck(/\\s/);\n\n/**\n * Create a code check from a regex.\n *\n * @param {RegExp} regex\n * @returns {(code: Code) => boolean}\n */\nfunction regexCheck(regex) {\n  return check;\n\n  /**\n   * Check whether a code matches the bound regex.\n   *\n   * @param {Code} code\n   *   Character code.\n   * @returns {boolean}\n   *   Whether the character code matches the bound regex.\n   */\n  function check(code) {\n    return code !== null && code > -1 && regex.test(String.fromCharCode(code));\n  }\n}","/**\n * @typedef {import('micromark-util-types').Effects} Effects\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenType} TokenType\n */\n\nimport {markdownSpace} from 'micromark-util-character'\n\n// To do: implement `spaceOrTab`, `spaceOrTabMinMax`, `spaceOrTabWithOptions`.\n\n/**\n * Parse spaces and tabs.\n *\n * There is no `nok` parameter:\n *\n * *   spaces in markdown are often optional, in which case this factory can be\n *     used and `ok` will be switched to whether spaces were found or not\n * *   one line ending or space can be detected with `markdownSpace(code)` right\n *     before using `factorySpace`\n *\n * ###### Examples\n *\n * Where `␉` represents a tab (plus how much it expands) and `␠` represents a\n * single space.\n *\n * ```markdown\n * ␉\n * ␠␠␠␠\n * ␉␠\n * ```\n *\n * @param {Effects} effects\n *   Context.\n * @param {State} ok\n *   State switched to when successful.\n * @param {TokenType} type\n *   Type (`' \\t'`).\n * @param {number | undefined} [max=Infinity]\n *   Max (exclusive).\n * @returns {State}\n *   Start state.\n */\nexport function factorySpace(effects, ok, type, max) {\n  const limit = max ? max - 1 : Number.POSITIVE_INFINITY\n  let size = 0\n  return start\n\n  /** @type {State} */\n  function start(code) {\n    if (markdownSpace(code)) {\n      effects.enter(type)\n      return prefix(code)\n    }\n    return ok(code)\n  }\n\n  /** @type {State} */\n  function prefix(code) {\n    if (markdownSpace(code) && size++ < limit) {\n      effects.consume(code)\n      return prefix\n    }\n    effects.exit(type)\n    return ok(code)\n  }\n}\n","/**\n * @typedef {import('micromark-util-types').Effects} Effects\n * @typedef {import('micromark-util-types').State} State\n */\n\nimport {factorySpace} from 'micromark-factory-space'\nimport {markdownLineEnding, markdownSpace} from 'micromark-util-character'\n/**\n * Parse spaces and tabs.\n *\n * There is no `nok` parameter:\n *\n * *   line endings or spaces in markdown are often optional, in which case this\n *     factory can be used and `ok` will be switched to whether spaces were found\n *     or not\n * *   one line ending or space can be detected with\n *     `markdownLineEndingOrSpace(code)` right before using `factoryWhitespace`\n *\n * @param {Effects} effects\n *   Context.\n * @param {State} ok\n *   State switched to when successful.\n * @returns {State}\n *   Start state.\n */\nexport function factoryWhitespace(effects, ok) {\n  /** @type {boolean} */\n  let seen\n  return start\n\n  /** @type {State} */\n  function start(code) {\n    if (markdownLineEnding(code)) {\n      effects.enter('lineEnding')\n      effects.consume(code)\n      effects.exit('lineEnding')\n      seen = true\n      return start\n    }\n    if (markdownSpace(code)) {\n      return factorySpace(\n        effects,\n        start,\n        seen ? 'linePrefix' : 'lineSuffix'\n      )(code)\n    }\n    return ok(code)\n  }\n}\n","/**\n * @import {Code, Effects, State, TokenType} from 'micromark-util-types'\n */\n\nimport { factorySpace } from 'micromark-factory-space';\nimport { factoryWhitespace } from 'micromark-factory-whitespace';\nimport { asciiAlpha, asciiAlphanumeric, markdownLineEnding, markdownLineEndingOrSpace, markdownSpace } from 'micromark-util-character';\n/**\n * @param {Effects} effects\n * @param {State} ok\n * @param {State} nok\n * @param {TokenType} attributesType\n * @param {TokenType} attributesMarkerType\n * @param {TokenType} attributeType\n * @param {TokenType} attributeIdType\n * @param {TokenType} attributeClassType\n * @param {TokenType} attributeNameType\n * @param {TokenType} attributeInitializerType\n * @param {TokenType} attributeValueLiteralType\n * @param {TokenType} attributeValueType\n * @param {TokenType} attributeValueMarker\n * @param {TokenType} attributeValueData\n * @param {boolean | undefined} [disallowEol=false]\n */\nexport function factoryAttributes(effects, ok, nok, attributesType, attributesMarkerType, attributeType, attributeIdType, attributeClassType, attributeNameType, attributeInitializerType, attributeValueLiteralType, attributeValueType, attributeValueMarker, attributeValueData, disallowEol) {\n  /** @type {TokenType} */\n  let type;\n  /** @type {Code | undefined} */\n  let marker;\n  return start;\n\n  /** @type {State} */\n  function start(code) {\n    effects.enter(attributesType);\n    effects.enter(attributesMarkerType);\n    effects.consume(code);\n    effects.exit(attributesMarkerType);\n    return between;\n  }\n\n  /** @type {State} */\n  function between(code) {\n    if (code === 35) {\n      type = attributeIdType;\n      return shortcutStart(code);\n    }\n    if (code === 46) {\n      type = attributeClassType;\n      return shortcutStart(code);\n    }\n    if (code === 58 || code === 95 || asciiAlpha(code)) {\n      effects.enter(attributeType);\n      effects.enter(attributeNameType);\n      effects.consume(code);\n      return name;\n    }\n    if (disallowEol && markdownSpace(code)) {\n      return factorySpace(effects, between, \"whitespace\")(code);\n    }\n    if (!disallowEol && markdownLineEndingOrSpace(code)) {\n      return factoryWhitespace(effects, between)(code);\n    }\n    return end(code);\n  }\n\n  /** @type {State} */\n  function shortcutStart(code) {\n    // Assume it’s registered.\n    const markerType = /** @type {TokenType} */type + 'Marker';\n    effects.enter(attributeType);\n    effects.enter(type);\n    effects.enter(markerType);\n    effects.consume(code);\n    effects.exit(markerType);\n    return shortcutStartAfter;\n  }\n\n  /** @type {State} */\n  function shortcutStartAfter(code) {\n    if (code === null || code === 34 || code === 35 || code === 39 || code === 46 || code === 60 || code === 61 || code === 62 || code === 96 || code === 125 || markdownLineEndingOrSpace(code)) {\n      return nok(code);\n    }\n\n    // Assume it’s registered.\n    const valueType = /** @type {TokenType} */type + 'Value';\n    effects.enter(valueType);\n    effects.consume(code);\n    return shortcut;\n  }\n\n  /** @type {State} */\n  function shortcut(code) {\n    if (code === null || code === 34 || code === 39 || code === 60 || code === 61 || code === 62 || code === 96) {\n      return nok(code);\n    }\n    if (code === 35 || code === 46 || code === 125 || markdownLineEndingOrSpace(code)) {\n      // Assume it’s registered.\n      const valueType = /** @type {TokenType} */type + 'Value';\n      effects.exit(valueType);\n      effects.exit(type);\n      effects.exit(attributeType);\n      return between(code);\n    }\n    effects.consume(code);\n    return shortcut;\n  }\n\n  /** @type {State} */\n  function name(code) {\n    if (code === 45 || code === 46 || code === 58 || code === 95 || asciiAlphanumeric(code)) {\n      effects.consume(code);\n      return name;\n    }\n    effects.exit(attributeNameType);\n    if (disallowEol && markdownSpace(code)) {\n      return factorySpace(effects, nameAfter, \"whitespace\")(code);\n    }\n    if (!disallowEol && markdownLineEndingOrSpace(code)) {\n      return factoryWhitespace(effects, nameAfter)(code);\n    }\n    return nameAfter(code);\n  }\n\n  /** @type {State} */\n  function nameAfter(code) {\n    if (code === 61) {\n      effects.enter(attributeInitializerType);\n      effects.consume(code);\n      effects.exit(attributeInitializerType);\n      return valueBefore;\n    }\n\n    // Attribute w/o value.\n    effects.exit(attributeType);\n    return between(code);\n  }\n\n  /** @type {State} */\n  function valueBefore(code) {\n    if (code === null || code === 60 || code === 61 || code === 62 || code === 96 || code === 125 || disallowEol && markdownLineEnding(code)) {\n      return nok(code);\n    }\n    if (code === 34 || code === 39) {\n      effects.enter(attributeValueLiteralType);\n      effects.enter(attributeValueMarker);\n      effects.consume(code);\n      effects.exit(attributeValueMarker);\n      marker = code;\n      return valueQuotedStart;\n    }\n    if (disallowEol && markdownSpace(code)) {\n      return factorySpace(effects, valueBefore, \"whitespace\")(code);\n    }\n    if (!disallowEol && markdownLineEndingOrSpace(code)) {\n      return factoryWhitespace(effects, valueBefore)(code);\n    }\n    effects.enter(attributeValueType);\n    effects.enter(attributeValueData);\n    effects.consume(code);\n    marker = undefined;\n    return valueUnquoted;\n  }\n\n  /** @type {State} */\n  function valueUnquoted(code) {\n    if (code === null || code === 34 || code === 39 || code === 60 || code === 61 || code === 62 || code === 96) {\n      return nok(code);\n    }\n    if (code === 125 || markdownLineEndingOrSpace(code)) {\n      effects.exit(attributeValueData);\n      effects.exit(attributeValueType);\n      effects.exit(attributeType);\n      return between(code);\n    }\n    effects.consume(code);\n    return valueUnquoted;\n  }\n\n  /** @type {State} */\n  function valueQuotedStart(code) {\n    if (code === marker) {\n      effects.enter(attributeValueMarker);\n      effects.consume(code);\n      effects.exit(attributeValueMarker);\n      effects.exit(attributeValueLiteralType);\n      effects.exit(attributeType);\n      return valueQuotedAfter;\n    }\n    effects.enter(attributeValueType);\n    return valueQuotedBetween(code);\n  }\n\n  /** @type {State} */\n  function valueQuotedBetween(code) {\n    if (code === marker) {\n      effects.exit(attributeValueType);\n      return valueQuotedStart(code);\n    }\n    if (code === null) {\n      return nok(code);\n    }\n\n    // Note: blank lines can’t exist in content.\n    if (markdownLineEnding(code)) {\n      return disallowEol ? nok(code) : factoryWhitespace(effects, valueQuotedBetween)(code);\n    }\n    effects.enter(attributeValueData);\n    effects.consume(code);\n    return valueQuoted;\n  }\n\n  /** @type {State} */\n  function valueQuoted(code) {\n    if (code === marker || code === null || markdownLineEnding(code)) {\n      effects.exit(attributeValueData);\n      return valueQuotedBetween(code);\n    }\n    effects.consume(code);\n    return valueQuoted;\n  }\n\n  /** @type {State} */\n  function valueQuotedAfter(code) {\n    return code === 125 || markdownLineEndingOrSpace(code) ? between(code) : end(code);\n  }\n\n  /** @type {State} */\n  function end(code) {\n    if (code === 125) {\n      effects.enter(attributesMarkerType);\n      effects.consume(code);\n      effects.exit(attributesMarkerType);\n      effects.exit(attributesType);\n      return ok;\n    }\n    return nok(code);\n  }\n}","/**\n * @import {Code, Effects, State, Token, TokenType} from 'micromark-util-types'\n */\n\nimport { markdownLineEnding } from 'micromark-util-character';\n// This is a fork of:\n// <https://github.com/micromark/micromark/tree/main/packages/micromark-factory-label>\n// to allow empty labels, balanced brackets (such as for nested directives),\n// text instead of strings, and optionally disallows EOLs.\n\n/**\n * @param {Effects} effects\n * @param {State} ok\n * @param {State} nok\n * @param {TokenType} type\n * @param {TokenType} markerType\n * @param {TokenType} stringType\n * @param {boolean | undefined} [disallowEol=false]\n */\nexport function factoryLabel(effects, ok, nok, type, markerType, stringType, disallowEol) {\n  let size = 0;\n  let balance = 0;\n  /** @type {Token | undefined} */\n  let previous;\n  return start;\n\n  /** @type {State} */\n  function start(code) {\n    effects.enter(type);\n    effects.enter(markerType);\n    effects.consume(code);\n    effects.exit(markerType);\n    return afterStart;\n  }\n\n  /** @type {State} */\n  function afterStart(code) {\n    if (code === 93) {\n      effects.enter(markerType);\n      effects.consume(code);\n      effects.exit(markerType);\n      effects.exit(type);\n      return ok;\n    }\n    effects.enter(stringType);\n    return lineStart(code);\n  }\n\n  /** @type {State} */\n  function lineStart(code) {\n    if (code === 93 && !balance) {\n      return atClosingBrace(code);\n    }\n    const token = effects.enter(\"chunkText\", {\n      contentType: \"text\",\n      previous\n    });\n    if (previous) previous.next = token;\n    previous = token;\n    return data(code);\n  }\n\n  /** @type {State} */\n  function data(code) {\n    if (code === null || size > 999) {\n      return nok(code);\n    }\n    if (code === 91 && ++balance > 32) {\n      return nok(code);\n    }\n    if (code === 93 && !balance--) {\n      effects.exit(\"chunkText\");\n      return atClosingBrace(code);\n    }\n    if (markdownLineEnding(code)) {\n      if (disallowEol) {\n        return nok(code);\n      }\n      effects.consume(code);\n      effects.exit(\"chunkText\");\n      return lineStart;\n    }\n    effects.consume(code);\n    return code === 92 ? dataEscape : data;\n  }\n\n  /** @type {State} */\n  function dataEscape(code) {\n    if (code === 91 || code === 92 || code === 93) {\n      effects.consume(code);\n      size++;\n      return data;\n    }\n    return data(code);\n  }\n\n  /** @type {State} */\n  function atClosingBrace(code) {\n    effects.exit(stringType);\n    effects.enter(markerType);\n    effects.consume(code);\n    effects.exit(markerType);\n    effects.exit(type);\n    return ok;\n  }\n}","/**\n * @import {Code, Effects, State, TokenizeContext, TokenType} from 'micromark-util-types'\n */\n\nimport { asciiAlpha, asciiAlphanumeric } from 'micromark-util-character';\n/**\n * @this {TokenizeContext}\n * @param {Effects} effects\n * @param {State} ok\n * @param {State} nok\n * @param {TokenType} type\n */\nexport function factoryName(effects, ok, nok, type) {\n  const self = this;\n  return start;\n\n  /** @type {State} */\n  function start(code) {\n    if (asciiAlpha(code)) {\n      effects.enter(type);\n      effects.consume(code);\n      return name;\n    }\n    return nok(code);\n  }\n\n  /** @type {State} */\n  function name(code) {\n    if (code === 45 || code === 95 || asciiAlphanumeric(code)) {\n      effects.consume(code);\n      return name;\n    }\n    effects.exit(type);\n    return self.previous === 45 || self.previous === 95 ? nok(code) : ok(code);\n  }\n}","/**\n * @import {Construct, State, Token, TokenizeContext, Tokenizer} from 'micromark-util-types'\n */\n\nimport { factorySpace } from 'micromark-factory-space';\nimport { markdownLineEnding } from 'micromark-util-character';\nimport { factoryAttributes } from './factory-attributes.js';\nimport { factoryLabel } from './factory-label.js';\nimport { factoryName } from './factory-name.js';\n\n/** @type {Construct} */\nexport const directiveContainer = {\n  tokenize: tokenizeDirectiveContainer,\n  concrete: true\n};\nconst label = {\n  tokenize: tokenizeLabel,\n  partial: true\n};\nconst attributes = {\n  tokenize: tokenizeAttributes,\n  partial: true\n};\nconst nonLazyLine = {\n  tokenize: tokenizeNonLazyLine,\n  partial: true\n};\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeDirectiveContainer(effects, ok, nok) {\n  const self = this;\n  const tail = self.events[self.events.length - 1];\n  const initialSize = tail && tail[1].type === \"linePrefix\" ? tail[2].sliceSerialize(tail[1], true).length : 0;\n  let sizeOpen = 0;\n  /** @type {Token} */\n  let previous;\n  return start;\n\n  /** @type {State} */\n  function start(code) {\n    effects.enter('directiveContainer');\n    effects.enter('directiveContainerFence');\n    effects.enter('directiveContainerSequence');\n    return sequenceOpen(code);\n  }\n\n  /** @type {State} */\n  function sequenceOpen(code) {\n    if (code === 58) {\n      effects.consume(code);\n      sizeOpen++;\n      return sequenceOpen;\n    }\n    if (sizeOpen < 3) {\n      return nok(code);\n    }\n    effects.exit('directiveContainerSequence');\n    return factoryName.call(self, effects, afterName, nok, 'directiveContainerName')(code);\n  }\n\n  /** @type {State} */\n  function afterName(code) {\n    return code === 91 ? effects.attempt(label, afterLabel, afterLabel)(code) : afterLabel(code);\n  }\n\n  /** @type {State} */\n  function afterLabel(code) {\n    return code === 123 ? effects.attempt(attributes, afterAttributes, afterAttributes)(code) : afterAttributes(code);\n  }\n\n  /** @type {State} */\n  function afterAttributes(code) {\n    return factorySpace(effects, openAfter, \"whitespace\")(code);\n  }\n\n  /** @type {State} */\n  function openAfter(code) {\n    effects.exit('directiveContainerFence');\n    if (code === null) {\n      return afterOpening(code);\n    }\n    if (markdownLineEnding(code)) {\n      if (self.interrupt) {\n        return ok(code);\n      }\n      return effects.attempt(nonLazyLine, contentStart, afterOpening)(code);\n    }\n    return nok(code);\n  }\n\n  /** @type {State} */\n  function afterOpening(code) {\n    effects.exit('directiveContainer');\n    return ok(code);\n  }\n\n  /** @type {State} */\n  function contentStart(code) {\n    if (code === null) {\n      effects.exit('directiveContainer');\n      return ok(code);\n    }\n    effects.enter('directiveContainerContent');\n    return lineStart(code);\n  }\n\n  /** @type {State} */\n  function lineStart(code) {\n    if (code === null) {\n      return after(code);\n    }\n    return effects.attempt({\n      tokenize: tokenizeClosingFence,\n      partial: true\n    }, after, initialSize ? factorySpace(effects, chunkStart, \"linePrefix\", initialSize + 1) : chunkStart)(code);\n  }\n\n  /** @type {State} */\n  function chunkStart(code) {\n    if (code === null) {\n      return after(code);\n    }\n    const token = effects.enter(\"chunkDocument\", {\n      contentType: \"document\",\n      previous\n    });\n    if (previous) previous.next = token;\n    previous = token;\n    return contentContinue(code);\n  }\n\n  /** @type {State} */\n  function contentContinue(code) {\n    if (code === null) {\n      const t = effects.exit(\"chunkDocument\");\n      self.parser.lazy[t.start.line] = false;\n      return after(code);\n    }\n    if (markdownLineEnding(code)) {\n      return effects.check(nonLazyLine, nonLazyLineAfter, lineAfter)(code);\n    }\n    effects.consume(code);\n    return contentContinue;\n  }\n\n  /** @type {State} */\n  function nonLazyLineAfter(code) {\n    effects.consume(code);\n    const t = effects.exit(\"chunkDocument\");\n    self.parser.lazy[t.start.line] = false;\n    return lineStart;\n  }\n\n  /** @type {State} */\n  function lineAfter(code) {\n    const t = effects.exit(\"chunkDocument\");\n    self.parser.lazy[t.start.line] = false;\n    return after(code);\n  }\n\n  /** @type {State} */\n  function after(code) {\n    effects.exit('directiveContainerContent');\n    effects.exit('directiveContainer');\n    return ok(code);\n  }\n\n  /**\n   * @this {TokenizeContext}\n   * @type {Tokenizer}\n   */\n  function tokenizeClosingFence(effects, ok, nok) {\n    let size = 0;\n    return factorySpace(effects, closingPrefixAfter, \"linePrefix\", self.parser.constructs.disable.null.includes('codeIndented') ? undefined : 4);\n\n    /** @type {State} */\n    function closingPrefixAfter(code) {\n      effects.enter('directiveContainerFence');\n      effects.enter('directiveContainerSequence');\n      return closingSequence(code);\n    }\n\n    /** @type {State} */\n    function closingSequence(code) {\n      if (code === 58) {\n        effects.consume(code);\n        size++;\n        return closingSequence;\n      }\n      if (size < sizeOpen) return nok(code);\n      effects.exit('directiveContainerSequence');\n      return factorySpace(effects, closingSequenceEnd, \"whitespace\")(code);\n    }\n\n    /** @type {State} */\n    function closingSequenceEnd(code) {\n      if (code === null || markdownLineEnding(code)) {\n        effects.exit('directiveContainerFence');\n        return ok(code);\n      }\n      return nok(code);\n    }\n  }\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeLabel(effects, ok, nok) {\n  // Always a `[`\n  return factoryLabel(effects, ok, nok, 'directiveContainerLabel', 'directiveContainerLabelMarker', 'directiveContainerLabelString', true);\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeAttributes(effects, ok, nok) {\n  // Always a `{`\n  return factoryAttributes(effects, ok, nok, 'directiveContainerAttributes', 'directiveContainerAttributesMarker', 'directiveContainerAttribute', 'directiveContainerAttributeId', 'directiveContainerAttributeClass', 'directiveContainerAttributeName', 'directiveContainerAttributeInitializerMarker', 'directiveContainerAttributeValueLiteral', 'directiveContainerAttributeValue', 'directiveContainerAttributeValueMarker', 'directiveContainerAttributeValueData', true);\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeNonLazyLine(effects, ok, nok) {\n  const self = this;\n  return start;\n\n  /** @type {State} */\n  function start(code) {\n    effects.enter(\"lineEnding\");\n    effects.consume(code);\n    effects.exit(\"lineEnding\");\n    return lineStart;\n  }\n\n  /** @type {State} */\n  function lineStart(code) {\n    return self.parser.lazy[self.now().line] ? nok(code) : ok(code);\n  }\n}","/**\n * @import {Construct, State, TokenizeContext, Tokenizer} from 'micromark-util-types'\n */\n\nimport { factorySpace } from 'micromark-factory-space';\nimport { markdownLineEnding } from 'micromark-util-character';\nimport { factoryAttributes } from './factory-attributes.js';\nimport { factoryLabel } from './factory-label.js';\nimport { factoryName } from './factory-name.js';\n\n/** @type {Construct} */\nexport const directiveLeaf = {\n  tokenize: tokenizeDirectiveLeaf\n};\nconst label = {\n  tokenize: tokenizeLabel,\n  partial: true\n};\nconst attributes = {\n  tokenize: tokenizeAttributes,\n  partial: true\n};\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeDirectiveLeaf(effects, ok, nok) {\n  const self = this;\n  return start;\n\n  /** @type {State} */\n  function start(code) {\n    effects.enter('directiveLeaf');\n    effects.enter('directiveLeafSequence');\n    effects.consume(code);\n    return inStart;\n  }\n\n  /** @type {State} */\n  function inStart(code) {\n    if (code === 58) {\n      effects.consume(code);\n      effects.exit('directiveLeafSequence');\n      return factoryName.call(self, effects, afterName, nok, 'directiveLeafName');\n    }\n    return nok(code);\n  }\n\n  /** @type {State} */\n  function afterName(code) {\n    return code === 91 ? effects.attempt(label, afterLabel, afterLabel)(code) : afterLabel(code);\n  }\n\n  /** @type {State} */\n  function afterLabel(code) {\n    return code === 123 ? effects.attempt(attributes, afterAttributes, afterAttributes)(code) : afterAttributes(code);\n  }\n\n  /** @type {State} */\n  function afterAttributes(code) {\n    return factorySpace(effects, end, \"whitespace\")(code);\n  }\n\n  /** @type {State} */\n  function end(code) {\n    if (code === null || markdownLineEnding(code)) {\n      effects.exit('directiveLeaf');\n      return ok(code);\n    }\n    return nok(code);\n  }\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeLabel(effects, ok, nok) {\n  // Always a `[`\n  return factoryLabel(effects, ok, nok, 'directiveLeafLabel', 'directiveLeafLabelMarker', 'directiveLeafLabelString', true);\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeAttributes(effects, ok, nok) {\n  // Always a `{`\n  return factoryAttributes(effects, ok, nok, 'directiveLeafAttributes', 'directiveLeafAttributesMarker', 'directiveLeafAttribute', 'directiveLeafAttributeId', 'directiveLeafAttributeClass', 'directiveLeafAttributeName', 'directiveLeafAttributeInitializerMarker', 'directiveLeafAttributeValueLiteral', 'directiveLeafAttributeValue', 'directiveLeafAttributeValueMarker', 'directiveLeafAttributeValueData', true);\n}","/**\n * @import {Construct, Previous, State, TokenizeContext, Tokenizer} from 'micromark-util-types'\n */\n\nimport { factoryAttributes } from './factory-attributes.js';\nimport { factoryLabel } from './factory-label.js';\nimport { factoryName } from './factory-name.js';\n\n/** @type {Construct} */\nexport const directiveText = {\n  tokenize: tokenizeDirectiveText,\n  previous\n};\nconst label = {\n  tokenize: tokenizeLabel,\n  partial: true\n};\nconst attributes = {\n  tokenize: tokenizeAttributes,\n  partial: true\n};\n\n/**\n * @this {TokenizeContext}\n * @type {Previous}\n */\nfunction previous(code) {\n  // If there is a previous code, there will always be a tail.\n  return code !== 58 || this.events[this.events.length - 1][1].type === \"characterEscape\";\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeDirectiveText(effects, ok, nok) {\n  const self = this;\n  return start;\n\n  /** @type {State} */\n  function start(code) {\n    effects.enter('directiveText');\n    effects.enter('directiveTextMarker');\n    effects.consume(code);\n    effects.exit('directiveTextMarker');\n    return factoryName.call(self, effects, afterName, nok, 'directiveTextName');\n  }\n\n  /** @type {State} */\n  function afterName(code) {\n    return code === 58 ? nok(code) : code === 91 ? effects.attempt(label, afterLabel, afterLabel)(code) : afterLabel(code);\n  }\n\n  /** @type {State} */\n  function afterLabel(code) {\n    return code === 123 ? effects.attempt(attributes, afterAttributes, afterAttributes)(code) : afterAttributes(code);\n  }\n\n  /** @type {State} */\n  function afterAttributes(code) {\n    effects.exit('directiveText');\n    return ok(code);\n  }\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeLabel(effects, ok, nok) {\n  // Always a `[`\n  return factoryLabel(effects, ok, nok, 'directiveTextLabel', 'directiveTextLabelMarker', 'directiveTextLabelString');\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeAttributes(effects, ok, nok) {\n  // Always a `{`\n  return factoryAttributes(effects, ok, nok, 'directiveTextAttributes', 'directiveTextAttributesMarker', 'directiveTextAttribute', 'directiveTextAttributeId', 'directiveTextAttributeClass', 'directiveTextAttributeName', 'directiveTextAttributeInitializerMarker', 'directiveTextAttributeValueLiteral', 'directiveTextAttributeValue', 'directiveTextAttributeValueMarker', 'directiveTextAttributeValueData');\n}","/**\n * @import {Extension} from 'micromark-util-types'\n */\n\nimport { directiveContainer } from './directive-container.js';\nimport { directiveLeaf } from './directive-leaf.js';\nimport { directiveText } from './directive-text.js';\n\n/**\n * Create an extension for `micromark` to enable directive syntax.\n *\n * @returns {Extension}\n *   Extension for `micromark` that can be passed in `extensions`, to\n *   enable directive syntax.\n */\nexport function directive() {\n  return {\n    text: {\n      [58]: directiveText\n    },\n    flow: {\n      [58]: [directiveContainer, directiveLeaf]\n    }\n  };\n}","/// <reference types=\"remark-parse\" />\n/// <reference types=\"remark-stringify\" />\n/// <reference types=\"mdast-util-directive\" />\n\n/**\n * @typedef {import('mdast').Root} Root\n * @typedef {import('unified').Processor<Root>} Processor\n */\n\nimport {directiveFromMarkdown, directiveToMarkdown} from 'mdast-util-directive'\nimport {directive} from 'micromark-extension-directive'\n\n/**\n * Add support for generic directives.\n *\n * ###### Notes\n *\n * Doesn’t handle the directives: create your own plugin to do that.\n *\n * @returns {undefined}\n *   Nothing.\n */\nexport default function remarkDirective() {\n  // @ts-expect-error: TS is wrong about `this`.\n  // eslint-disable-next-line unicorn/no-this-assignment\n  const self = /** @type {Processor} */ (this)\n  const data = self.data()\n\n  const micromarkExtensions =\n    data.micromarkExtensions || (data.micromarkExtensions = [])\n  const fromMarkdownExtensions =\n    data.fromMarkdownExtensions || (data.fromMarkdownExtensions = [])\n  const toMarkdownExtensions =\n    data.toMarkdownExtensions || (data.toMarkdownExtensions = [])\n\n  micromarkExtensions.push(directive())\n  fromMarkdownExtensions.push(directiveFromMarkdown())\n  toMarkdownExtensions.push(directiveToMarkdown())\n}\n","//\n// format - printf-like string formatting for JavaScript\n// github.com/samsonjs/format\n// @_sjs\n//\n// Copyright 2010 - 2013 Sami Samhuri <sami@samhuri.net>\n//\n// MIT License\n// http://sjs.mit-license.org\n//\n\n;(function() {\n\n  //// Export the API\n  var namespace;\n\n  // CommonJS / Node module\n  if (typeof module !== 'undefined') {\n    namespace = module.exports = format;\n  }\n\n  // Browsers and other environments\n  else {\n    // Get the global object. Works in ES3, ES5, and ES5 strict mode.\n    namespace = (function(){ return this || (1,eval)('this') }());\n  }\n\n  namespace.format = format;\n  namespace.vsprintf = vsprintf;\n\n  if (typeof console !== 'undefined' && typeof console.log === 'function') {\n    namespace.printf = printf;\n  }\n\n  function printf(/* ... */) {\n    console.log(format.apply(null, arguments));\n  }\n\n  function vsprintf(fmt, replacements) {\n    return format.apply(null, [fmt].concat(replacements));\n  }\n\n  function format(fmt) {\n    var argIndex = 1 // skip initial format argument\n      , args = [].slice.call(arguments)\n      , i = 0\n      , n = fmt.length\n      , result = ''\n      , c\n      , escaped = false\n      , arg\n      , tmp\n      , leadingZero = false\n      , precision\n      , nextArg = function() { return args[argIndex++]; }\n      , slurpNumber = function() {\n          var digits = '';\n          while (/\\d/.test(fmt[i])) {\n            digits += fmt[i++];\n            c = fmt[i];\n          }\n          return digits.length > 0 ? parseInt(digits) : null;\n        }\n      ;\n    for (; i < n; ++i) {\n      c = fmt[i];\n      if (escaped) {\n        escaped = false;\n        if (c == '.') {\n          leadingZero = false;\n          c = fmt[++i];\n        }\n        else if (c == '0' && fmt[i + 1] == '.') {\n          leadingZero = true;\n          i += 2;\n          c = fmt[i];\n        }\n        else {\n          leadingZero = true;\n        }\n        precision = slurpNumber();\n        switch (c) {\n        case 'b': // number in binary\n          result += parseInt(nextArg(), 10).toString(2);\n          break;\n        case 'c': // character\n          arg = nextArg();\n          if (typeof arg === 'string' || arg instanceof String)\n            result += arg;\n          else\n            result += String.fromCharCode(parseInt(arg, 10));\n          break;\n        case 'd': // number in decimal\n          result += parseInt(nextArg(), 10);\n          break;\n        case 'f': // floating point number\n          tmp = String(parseFloat(nextArg()).toFixed(precision || 6));\n          result += leadingZero ? tmp : tmp.replace(/^0/, '');\n          break;\n        case 'j': // JSON\n          result += JSON.stringify(nextArg());\n          break;\n        case 'o': // number in octal\n          result += '0' + parseInt(nextArg(), 10).toString(8);\n          break;\n        case 's': // string\n          result += nextArg();\n          break;\n        case 'x': // lowercase hexadecimal\n          result += '0x' + parseInt(nextArg(), 10).toString(16);\n          break;\n        case 'X': // uppercase hexadecimal\n          result += '0x' + parseInt(nextArg(), 10).toString(16).toUpperCase();\n          break;\n        default:\n          result += c;\n          break;\n        }\n      } else if (c === '%') {\n        escaped = true;\n      } else {\n        result += c;\n      }\n    }\n    return result;\n  }\n\n}());\n","// @ts-expect-error\nimport formatter from 'format'\n\nexport const fault = Object.assign(create(Error), {\n  eval: create(EvalError),\n  range: create(RangeError),\n  reference: create(ReferenceError),\n  syntax: create(SyntaxError),\n  type: create(TypeError),\n  uri: create(URIError)\n})\n\n/**\n * Create a new `EConstructor`, with the formatted `format` as a first argument.\n *\n * @template {Error} Fault\n * @template {new (reason: string) => Fault} Class\n * @param {Class} Constructor\n */\nexport function create(Constructor) {\n  /** @type {string} */\n  // @ts-expect-error\n  FormattedError.displayName = Constructor.displayName || Constructor.name\n\n  return FormattedError\n\n  /**\n   * Create an error with a printf-like formatted message.\n   *\n   * @param {string|null} [format]\n   *   Template string.\n   * @param {...unknown} values\n   *   Values to render in `format`.\n   * @returns {Fault}\n   */\n  function FormattedError(format, ...values) {\n    /** @type {string} */\n    const reason = format ? formatter(format, ...values) : format\n    return new Constructor(reason)\n  }\n}\n","/**\n * @typedef {'toml' | 'yaml'} Preset\n *   Known name of a frontmatter style.\n *\n * @typedef Info\n *   Sequence.\n *\n *   Depending on how this structure is used, it reflects a marker or a fence.\n * @property {string} close\n *   Closing.\n * @property {string} open\n *   Opening.\n *\n * @typedef MatterProps\n *   Fields describing a kind of matter.\n * @property {string} type\n *   Node type to tokenize as.\n * @property {boolean | null | undefined} [anywhere=false]\n *   Whether matter can be found anywhere in the document, normally, only matter\n *   at the start of the document is recognized.\n *\n *   > 👉 **Note**: using this is a terrible idea.\n *   > It’s called frontmatter, not matter-in-the-middle or so.\n *   > This makes your markdown less portable.\n *\n * @typedef MarkerProps\n *   Marker configuration.\n * @property {Info | string} marker\n *   Character repeated 3 times, used as complete fences.\n *\n *   For example the character `'-'` will result in `'---'` being used as the\n *   fence\n *   Pass `open` and `close` to specify different characters for opening and\n *   closing fences.\n * @property {never} [fence]\n *   If `marker` is set, `fence` must not be set.\n *\n * @typedef FenceProps\n *   Fence configuration.\n * @property {Info | string} fence\n *   Complete fences.\n *\n *   This can be used when fences contain different characters or lengths\n *   other than 3.\n *   Pass `open` and `close` to interface to specify different characters for opening and\n *   closing fences.\n * @property {never} [marker]\n *   If `fence` is set, `marker` must not be set.\n *\n * @typedef {(MatterProps & FenceProps) | (MatterProps & MarkerProps)} Matter\n *   Fields describing a kind of matter.\n *\n *   > 👉 **Note**: using `anywhere` is a terrible idea.\n *   > It’s called frontmatter, not matter-in-the-middle or so.\n *   > This makes your markdown less portable.\n *\n *   > 👉 **Note**: `marker` and `fence` are mutually exclusive.\n *   > If `marker` is set, `fence` must not be set, and vice versa.\n *\n * @typedef {Matter | Preset | Array<Matter | Preset>} Options\n *   Configuration.\n */\n\nimport {fault} from 'fault'\nconst own = {}.hasOwnProperty\nconst markers = {\n  yaml: '-',\n  toml: '+'\n}\n\n/**\n * Simplify options by normalizing them to an array of matters.\n *\n * @param {Options | null | undefined} [options='yaml']\n *   Configuration (default: `'yaml'`).\n * @returns {Array<Matter>}\n *   List of matters.\n */\nexport function toMatters(options) {\n  /** @type {Array<Matter>} */\n  const result = []\n  let index = -1\n\n  /** @type {Array<Matter | Preset>} */\n  const presetsOrMatters = Array.isArray(options)\n    ? options\n    : options\n    ? [options]\n    : ['yaml']\n  while (++index < presetsOrMatters.length) {\n    result[index] = matter(presetsOrMatters[index])\n  }\n  return result\n}\n\n/**\n * Simplify an option.\n *\n * @param {Matter | Preset} option\n *   Configuration.\n * @returns {Matter}\n *   Matter.\n */\nfunction matter(option) {\n  let result = option\n  if (typeof result === 'string') {\n    if (!own.call(markers, result)) {\n      throw fault('Missing matter definition for `%s`', result)\n    }\n    result = {\n      type: result,\n      marker: markers[result]\n    }\n  } else if (typeof result !== 'object') {\n    throw fault('Expected matter to be an object, not `%j`', result)\n  }\n  if (!own.call(result, 'type')) {\n    throw fault('Missing `type` in matter `%j`', result)\n  }\n  if (!own.call(result, 'fence') && !own.call(result, 'marker')) {\n    throw fault('Missing `marker` or `fence` in matter `%j`', result)\n  }\n  return result\n}\n","/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').ConstructRecord} ConstructRecord\n * @typedef {import('micromark-util-types').Extension} Extension\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenType} TokenType\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n *\n * @typedef {import('./to-matters.js').Info} Info\n * @typedef {import('./to-matters.js').Matter} Matter\n * @typedef {import('./to-matters.js').Options} Options\n */\n\nimport {markdownLineEnding, markdownSpace} from 'micromark-util-character'\nimport {toMatters} from './to-matters.js'\n\n/**\n * Create an extension for `micromark` to enable frontmatter syntax.\n *\n * @param {Options | null | undefined} [options='yaml']\n *   Configuration (default: `'yaml'`).\n * @returns {Extension}\n *   Extension for `micromark` that can be passed in `extensions`, to\n *   enable frontmatter syntax.\n */\nexport function frontmatter(options) {\n  const matters = toMatters(options)\n  /** @type {ConstructRecord} */\n  const flow = {}\n  let index = -1\n  while (++index < matters.length) {\n    const matter = matters[index]\n    const code = fence(matter, 'open').charCodeAt(0)\n    const construct = createConstruct(matter)\n    const existing = flow[code]\n    if (Array.isArray(existing)) {\n      existing.push(construct)\n    } else {\n      // Never a single object, always an array.\n      flow[code] = [construct]\n    }\n  }\n  return {\n    flow\n  }\n}\n\n/**\n * @param {Matter} matter\n * @returns {Construct}\n */\nfunction createConstruct(matter) {\n  const anywhere = matter.anywhere\n  const frontmatterType = /** @type {TokenType} */ matter.type\n  const fenceType = /** @type {TokenType} */ frontmatterType + 'Fence'\n  const sequenceType = /** @type {TokenType} */ fenceType + 'Sequence'\n  const valueType = /** @type {TokenType} */ frontmatterType + 'Value'\n  const closingFenceConstruct = {\n    tokenize: tokenizeClosingFence,\n    partial: true\n  }\n\n  /**\n   * Fence to look for.\n   *\n   * @type {string}\n   */\n  let buffer\n  let bufferIndex = 0\n  return {\n    tokenize: tokenizeFrontmatter,\n    concrete: true\n  }\n\n  /**\n   * @this {TokenizeContext}\n   * @type {Tokenizer}\n   */\n  function tokenizeFrontmatter(effects, ok, nok) {\n    const self = this\n    return start\n\n    /**\n     * Start of frontmatter.\n     *\n     * ```markdown\n     * > | ---\n     *     ^\n     *   | title: \"Venus\"\n     *   | ---\n     * ```\n     *\n     * @type {State}\n     */\n    function start(code) {\n      const position = self.now()\n      if (\n        // Indent not allowed.\n        position.column === 1 &&\n        // Normally, only allowed in first line.\n        (position.line === 1 || anywhere)\n      ) {\n        buffer = fence(matter, 'open')\n        bufferIndex = 0\n        if (code === buffer.charCodeAt(bufferIndex)) {\n          effects.enter(frontmatterType)\n          effects.enter(fenceType)\n          effects.enter(sequenceType)\n          return openSequence(code)\n        }\n      }\n      return nok(code)\n    }\n\n    /**\n     * In open sequence.\n     *\n     * ```markdown\n     * > | ---\n     *     ^\n     *   | title: \"Venus\"\n     *   | ---\n     * ```\n     *\n     * @type {State}\n     */\n    function openSequence(code) {\n      if (bufferIndex === buffer.length) {\n        effects.exit(sequenceType)\n        if (markdownSpace(code)) {\n          effects.enter('whitespace')\n          return openSequenceWhitespace(code)\n        }\n        return openAfter(code)\n      }\n      if (code === buffer.charCodeAt(bufferIndex++)) {\n        effects.consume(code)\n        return openSequence\n      }\n      return nok(code)\n    }\n\n    /**\n     * In whitespace after open sequence.\n     *\n     * ```markdown\n     * > | ---␠\n     *        ^\n     *   | title: \"Venus\"\n     *   | ---\n     * ```\n     *\n     * @type {State}\n     */\n    function openSequenceWhitespace(code) {\n      if (markdownSpace(code)) {\n        effects.consume(code)\n        return openSequenceWhitespace\n      }\n      effects.exit('whitespace')\n      return openAfter(code)\n    }\n\n    /**\n     * After open sequence.\n     *\n     * ```markdown\n     * > | ---\n     *        ^\n     *   | title: \"Venus\"\n     *   | ---\n     * ```\n     *\n     * @type {State}\n     */\n    function openAfter(code) {\n      if (markdownLineEnding(code)) {\n        effects.exit(fenceType)\n        effects.enter('lineEnding')\n        effects.consume(code)\n        effects.exit('lineEnding')\n        // Get ready for closing fence.\n        buffer = fence(matter, 'close')\n        bufferIndex = 0\n        return effects.attempt(closingFenceConstruct, after, contentStart)\n      }\n\n      // EOF is not okay.\n      return nok(code)\n    }\n\n    /**\n     * Start of content chunk.\n     *\n     * ```markdown\n     *   | ---\n     * > | title: \"Venus\"\n     *     ^\n     *   | ---\n     * ```\n     *\n     * @type {State}\n     */\n    function contentStart(code) {\n      if (code === null || markdownLineEnding(code)) {\n        return contentEnd(code)\n      }\n      effects.enter(valueType)\n      return contentInside(code)\n    }\n\n    /**\n     * In content chunk.\n     *\n     * ```markdown\n     *   | ---\n     * > | title: \"Venus\"\n     *     ^\n     *   | ---\n     * ```\n     *\n     * @type {State}\n     */\n    function contentInside(code) {\n      if (code === null || markdownLineEnding(code)) {\n        effects.exit(valueType)\n        return contentEnd(code)\n      }\n      effects.consume(code)\n      return contentInside\n    }\n\n    /**\n     * End of content chunk.\n     *\n     * ```markdown\n     *   | ---\n     * > | title: \"Venus\"\n     *                   ^\n     *   | ---\n     * ```\n     *\n     * @type {State}\n     */\n    function contentEnd(code) {\n      // Require a closing fence.\n      if (code === null) {\n        return nok(code)\n      }\n\n      // Can only be an eol.\n      effects.enter('lineEnding')\n      effects.consume(code)\n      effects.exit('lineEnding')\n      return effects.attempt(closingFenceConstruct, after, contentStart)\n    }\n\n    /**\n     * After frontmatter.\n     *\n     * ```markdown\n     *   | ---\n     *   | title: \"Venus\"\n     * > | ---\n     *        ^\n     * ```\n     *\n     * @type {State}\n     */\n    function after(code) {\n      // `code` must be eol/eof.\n      effects.exit(frontmatterType)\n      return ok(code)\n    }\n  }\n\n  /** @type {Tokenizer} */\n  function tokenizeClosingFence(effects, ok, nok) {\n    let bufferIndex = 0\n    return closeStart\n\n    /**\n     * Start of close sequence.\n     *\n     * ```markdown\n     *   | ---\n     *   | title: \"Venus\"\n     * > | ---\n     *     ^\n     * ```\n     *\n     * @type {State}\n     */\n    function closeStart(code) {\n      if (code === buffer.charCodeAt(bufferIndex)) {\n        effects.enter(fenceType)\n        effects.enter(sequenceType)\n        return closeSequence(code)\n      }\n      return nok(code)\n    }\n\n    /**\n     * In close sequence.\n     *\n     * ```markdown\n     *   | ---\n     *   | title: \"Venus\"\n     * > | ---\n     *     ^\n     * ```\n     *\n     * @type {State}\n     */\n    function closeSequence(code) {\n      if (bufferIndex === buffer.length) {\n        effects.exit(sequenceType)\n        if (markdownSpace(code)) {\n          effects.enter('whitespace')\n          return closeSequenceWhitespace(code)\n        }\n        return closeAfter(code)\n      }\n      if (code === buffer.charCodeAt(bufferIndex++)) {\n        effects.consume(code)\n        return closeSequence\n      }\n      return nok(code)\n    }\n\n    /**\n     * In whitespace after close sequence.\n     *\n     * ```markdown\n     * > | ---\n     *   | title: \"Venus\"\n     *   | ---␠\n     *        ^\n     * ```\n     *\n     * @type {State}\n     */\n    function closeSequenceWhitespace(code) {\n      if (markdownSpace(code)) {\n        effects.consume(code)\n        return closeSequenceWhitespace\n      }\n      effects.exit('whitespace')\n      return closeAfter(code)\n    }\n\n    /**\n     * After close sequence.\n     *\n     * ```markdown\n     *   | ---\n     *   | title: \"Venus\"\n     * > | ---\n     *        ^\n     * ```\n     *\n     * @type {State}\n     */\n    function closeAfter(code) {\n      if (code === null || markdownLineEnding(code)) {\n        effects.exit(fenceType)\n        return ok(code)\n      }\n      return nok(code)\n    }\n  }\n}\n\n/**\n * @param {Matter} matter\n * @param {'close' | 'open'} prop\n * @returns {string}\n */\nfunction fence(matter, prop) {\n  return matter.marker\n    ? pick(matter.marker, prop).repeat(3)\n    : // @ts-expect-error: They’re mutually exclusive.\n      pick(matter.fence, prop)\n}\n\n/**\n * @param {Info | string} schema\n * @param {'close' | 'open'} prop\n * @returns {string}\n */\nfunction pick(schema, prop) {\n  return typeof schema === 'string' ? schema : schema[prop]\n}\n","export default function escapeStringRegexp(string) {\n\tif (typeof string !== 'string') {\n\t\tthrow new TypeError('Expected a string');\n\t}\n\n\t// Escape characters with special meaning either inside or outside character sets.\n\t// Use a simple backslash escape when it’s always valid, and a `\\xnn` escape when the simpler form would be disallowed by Unicode patterns’ stricter grammar.\n\treturn string\n\t\t.replace(/[|\\\\{}()[\\]^$+*?.]/g, '\\\\$&')\n\t\t.replace(/-/g, '\\\\x2d');\n}\n","/**\n * @typedef {import('mdast').Literal} Literal\n *\n * @typedef {import('mdast-util-from-markdown').CompileContext} CompileContext\n * @typedef {import('mdast-util-from-markdown').Extension} FromMarkdownExtension\n * @typedef {import('mdast-util-from-markdown').Handle} FromMarkdownHandle\n * @typedef {import('mdast-util-to-markdown').Options} ToMarkdownExtension\n *\n * @typedef {import('micromark-extension-frontmatter').Info} Info\n * @typedef {import('micromark-extension-frontmatter').Matter} Matter\n * @typedef {import('micromark-extension-frontmatter').Options} Options\n */\n\nimport {ok as assert} from 'devlop'\nimport {toMatters} from 'micromark-extension-frontmatter'\nimport escapeStringRegexp from 'escape-string-regexp'\n\n/**\n * Create an extension for `mdast-util-from-markdown`.\n *\n * @param {Options | null | undefined} [options]\n *   Configuration (optional).\n * @returns {FromMarkdownExtension}\n *   Extension for `mdast-util-from-markdown`.\n */\nexport function frontmatterFromMarkdown(options) {\n  const matters = toMatters(options)\n  /** @type {FromMarkdownExtension['enter']} */\n  const enter = {}\n  /** @type {FromMarkdownExtension['exit']} */\n  const exit = {}\n  let index = -1\n\n  while (++index < matters.length) {\n    const matter = matters[index]\n    enter[matter.type] = opener(matter)\n    exit[matter.type] = close\n    exit[matter.type + 'Value'] = value\n  }\n\n  return {enter, exit}\n}\n\n/**\n * @param {Matter} matter\n * @returns {FromMarkdownHandle} enter\n */\nfunction opener(matter) {\n  return open\n\n  /**\n   * @this {CompileContext}\n   * @type {FromMarkdownHandle}\n   */\n  function open(token) {\n    // @ts-expect-error: custom.\n    this.enter({type: matter.type, value: ''}, token)\n    this.buffer()\n  }\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction close(token) {\n  const data = this.resume()\n  const node = this.stack[this.stack.length - 1]\n  assert('value' in node)\n  this.exit(token)\n  // Remove the initial and final eol.\n  node.value = data.replace(/^(\\r?\\n|\\r)|(\\r?\\n|\\r)$/g, '')\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction value(token) {\n  this.config.enter.data.call(this, token)\n  this.config.exit.data.call(this, token)\n}\n\n/**\n * Create an extension for `mdast-util-to-markdown`.\n *\n * @param {Options | null | undefined} [options]\n *   Configuration (optional).\n * @returns {ToMarkdownExtension}\n *   Extension for `mdast-util-to-markdown`.\n */\nexport function frontmatterToMarkdown(options) {\n  /** @type {ToMarkdownExtension['unsafe']} */\n  const unsafe = []\n  /** @type {ToMarkdownExtension['handlers']} */\n  const handlers = {}\n  const matters = toMatters(options)\n  let index = -1\n\n  while (++index < matters.length) {\n    const matter = matters[index]\n\n    // @ts-expect-error: this can add custom frontmatter nodes.\n    // Typing those is the responsibility of the end user.\n    handlers[matter.type] = handler(matter)\n\n    const open = fence(matter, 'open')\n\n    unsafe.push({\n      atBreak: true,\n      character: open.charAt(0),\n      after: escapeStringRegexp(open.charAt(1))\n    })\n  }\n\n  return {unsafe, handlers}\n}\n\n/**\n * Create a handle that can serialize a frontmatter node as markdown.\n *\n * @param {Matter} matter\n *   Structure.\n * @returns {(node: Literal) => string} enter\n *   Handler.\n */\nfunction handler(matter) {\n  const open = fence(matter, 'open')\n  const close = fence(matter, 'close')\n\n  return handle\n\n  /**\n   * Serialize a frontmatter node as markdown.\n   *\n   * @param {Literal} node\n   *   Node to serialize.\n   * @returns {string}\n   *   Serialized node.\n   */\n  function handle(node) {\n    return open + (node.value ? '\\n' + node.value : '') + '\\n' + close\n  }\n}\n\n/**\n * Get an `open` or `close` fence.\n *\n * @param {Matter} matter\n *   Structure.\n * @param {'close' | 'open'} prop\n *   Field to get.\n * @returns {string}\n *   Fence.\n */\nfunction fence(matter, prop) {\n  return matter.marker\n    ? pick(matter.marker, prop).repeat(3)\n    : // @ts-expect-error: They’re mutually exclusive.\n      pick(matter.fence, prop)\n}\n\n/**\n * Take `open` or `close` fields when schema is an info object, or use the\n * given value when it is a string.\n *\n * @param {Info | string} schema\n *   Info object or value.\n * @param {'close' | 'open'} prop\n *   Field to get.\n * @returns {string}\n *   Thing to use for the opening or closing.\n */\nfunction pick(schema, prop) {\n  return typeof schema === 'string' ? schema : schema[prop]\n}\n","/// <reference types=\"remark-parse\" />\n/// <reference types=\"remark-stringify\" />\n\n/**\n * @typedef {import('mdast').Root} Root\n * @typedef {import('micromark-extension-frontmatter').Options} Options\n * @typedef {import('unified').Processor<Root>} Processor\n */\n\nimport {\n  frontmatterFromMarkdown,\n  frontmatterToMarkdown\n} from 'mdast-util-frontmatter'\nimport {frontmatter} from 'micromark-extension-frontmatter'\n\n/** @type {Options} */\nconst emptyOptions = 'yaml'\n\n/**\n * Add support for frontmatter.\n *\n * ###### Notes\n *\n * Doesn’t parse the data inside them: create your own plugin to do that.\n *\n * @param {Options | null | undefined} [options='yaml']\n *   Configuration (default: `'yaml'`).\n * @returns {undefined}\n *   Nothing.\n */\nexport default function remarkFrontmatter(options) {\n  // @ts-expect-error: TS is wrong about `this`.\n  // eslint-disable-next-line unicorn/no-this-assignment\n  const self = /** @type {Processor} */ (this)\n  const settings = options || emptyOptions\n  const data = self.data()\n\n  const micromarkExtensions =\n    data.micromarkExtensions || (data.micromarkExtensions = [])\n  const fromMarkdownExtensions =\n    data.fromMarkdownExtensions || (data.fromMarkdownExtensions = [])\n  const toMarkdownExtensions =\n    data.toMarkdownExtensions || (data.toMarkdownExtensions = [])\n\n  micromarkExtensions.push(frontmatter(settings))\n  fromMarkdownExtensions.push(frontmatterFromMarkdown(settings))\n  toMarkdownExtensions.push(frontmatterToMarkdown(settings))\n}\n","/**\n * Count how often a character (or substring) is used in a string.\n *\n * @param {string} value\n *   Value to search in.\n * @param {string} character\n *   Character (or substring) to look for.\n * @return {number}\n *   Number of times `character` occurred in `value`.\n */\nexport function ccount(value, character) {\n  const source = String(value)\n\n  if (typeof character !== 'string') {\n    throw new TypeError('Expected character')\n  }\n\n  let count = 0\n  let index = source.indexOf(character)\n\n  while (index !== -1) {\n    count++\n    index = source.indexOf(character, index + character.length)\n  }\n\n  return count\n}\n","/**\n * @typedef {import('mdast').Nodes} Nodes\n * @typedef {import('mdast').Parents} Parents\n * @typedef {import('mdast').PhrasingContent} PhrasingContent\n * @typedef {import('mdast').Root} Root\n * @typedef {import('mdast').Text} Text\n * @typedef {import('unist-util-visit-parents').Test} Test\n * @typedef {import('unist-util-visit-parents').VisitorResult} VisitorResult\n */\n\n/**\n * @typedef RegExpMatchObject\n *   Info on the match.\n * @property {number} index\n *   The index of the search at which the result was found.\n * @property {string} input\n *   A copy of the search string in the text node.\n * @property {[...Array<Parents>, Text]} stack\n *   All ancestors of the text node, where the last node is the text itself.\n *\n * @typedef {RegExp | string} Find\n *   Pattern to find.\n *\n *   Strings are escaped and then turned into global expressions.\n *\n * @typedef {Array<FindAndReplaceTuple>} FindAndReplaceList\n *   Several find and replaces, in array form.\n *\n * @typedef {[Find, Replace?]} FindAndReplaceTuple\n *   Find and replace in tuple form.\n *\n * @typedef {ReplaceFunction | string | null | undefined} Replace\n *   Thing to replace with.\n *\n * @callback ReplaceFunction\n *   Callback called when a search matches.\n * @param {...any} parameters\n *   The parameters are the result of corresponding search expression:\n *\n *   * `value` (`string`) — whole match\n *   * `...capture` (`Array<string>`) — matches from regex capture groups\n *   * `match` (`RegExpMatchObject`) — info on the match\n * @returns {Array<PhrasingContent> | PhrasingContent | string | false | null | undefined}\n *   Thing to replace with.\n *\n *   * when `null`, `undefined`, `''`, remove the match\n *   * …or when `false`, do not replace at all\n *   * …or when `string`, replace with a text node of that value\n *   * …or when `Node` or `Array<Node>`, replace with those nodes\n *\n * @typedef {[RegExp, ReplaceFunction]} Pair\n *   Normalized find and replace.\n *\n * @typedef {Array<Pair>} Pairs\n *   All find and replaced.\n *\n * @typedef Options\n *   Configuration.\n * @property {Test | null | undefined} [ignore]\n *   Test for which nodes to ignore (optional).\n */\n\nimport escape from 'escape-string-regexp'\nimport {visitParents} from 'unist-util-visit-parents'\nimport {convert} from 'unist-util-is'\n\n/**\n * Find patterns in a tree and replace them.\n *\n * The algorithm searches the tree in *preorder* for complete values in `Text`\n * nodes.\n * Partial matches are not supported.\n *\n * @param {Nodes} tree\n *   Tree to change.\n * @param {FindAndReplaceList | FindAndReplaceTuple} list\n *   Patterns to find.\n * @param {Options | null | undefined} [options]\n *   Configuration (when `find` is not `Find`).\n * @returns {undefined}\n *   Nothing.\n */\nexport function findAndReplace(tree, list, options) {\n  const settings = options || {}\n  const ignored = convert(settings.ignore || [])\n  const pairs = toPairs(list)\n  let pairIndex = -1\n\n  while (++pairIndex < pairs.length) {\n    visitParents(tree, 'text', visitor)\n  }\n\n  /** @type {import('unist-util-visit-parents').BuildVisitor<Root, 'text'>} */\n  function visitor(node, parents) {\n    let index = -1\n    /** @type {Parents | undefined} */\n    let grandparent\n\n    while (++index < parents.length) {\n      const parent = parents[index]\n      /** @type {Array<Nodes> | undefined} */\n      const siblings = grandparent ? grandparent.children : undefined\n\n      if (\n        ignored(\n          parent,\n          siblings ? siblings.indexOf(parent) : undefined,\n          grandparent\n        )\n      ) {\n        return\n      }\n\n      grandparent = parent\n    }\n\n    if (grandparent) {\n      return handler(node, parents)\n    }\n  }\n\n  /**\n   * Handle a text node which is not in an ignored parent.\n   *\n   * @param {Text} node\n   *   Text node.\n   * @param {Array<Parents>} parents\n   *   Parents.\n   * @returns {VisitorResult}\n   *   Result.\n   */\n  function handler(node, parents) {\n    const parent = parents[parents.length - 1]\n    const find = pairs[pairIndex][0]\n    const replace = pairs[pairIndex][1]\n    let start = 0\n    /** @type {Array<Nodes>} */\n    const siblings = parent.children\n    const index = siblings.indexOf(node)\n    let change = false\n    /** @type {Array<PhrasingContent>} */\n    let nodes = []\n\n    find.lastIndex = 0\n\n    let match = find.exec(node.value)\n\n    while (match) {\n      const position = match.index\n      /** @type {RegExpMatchObject} */\n      const matchObject = {\n        index: match.index,\n        input: match.input,\n        stack: [...parents, node]\n      }\n      let value = replace(...match, matchObject)\n\n      if (typeof value === 'string') {\n        value = value.length > 0 ? {type: 'text', value} : undefined\n      }\n\n      // It wasn’t a match after all.\n      if (value === false) {\n        // False acts as if there was no match.\n        // So we need to reset `lastIndex`, which currently being at the end of\n        // the current match, to the beginning.\n        find.lastIndex = position + 1\n      } else {\n        if (start !== position) {\n          nodes.push({\n            type: 'text',\n            value: node.value.slice(start, position)\n          })\n        }\n\n        if (Array.isArray(value)) {\n          nodes.push(...value)\n        } else if (value) {\n          nodes.push(value)\n        }\n\n        start = position + match[0].length\n        change = true\n      }\n\n      if (!find.global) {\n        break\n      }\n\n      match = find.exec(node.value)\n    }\n\n    if (change) {\n      if (start < node.value.length) {\n        nodes.push({type: 'text', value: node.value.slice(start)})\n      }\n\n      parent.children.splice(index, 1, ...nodes)\n    } else {\n      nodes = [node]\n    }\n\n    return index + nodes.length\n  }\n}\n\n/**\n * Turn a tuple or a list of tuples into pairs.\n *\n * @param {FindAndReplaceList | FindAndReplaceTuple} tupleOrList\n *   Schema.\n * @returns {Pairs}\n *   Clean pairs.\n */\nfunction toPairs(tupleOrList) {\n  /** @type {Pairs} */\n  const result = []\n\n  if (!Array.isArray(tupleOrList)) {\n    throw new TypeError('Expected find and replace tuple or list of tuples')\n  }\n\n  /** @type {FindAndReplaceList} */\n  // @ts-expect-error: correct.\n  const list =\n    !tupleOrList[0] || Array.isArray(tupleOrList[0])\n      ? tupleOrList\n      : [tupleOrList]\n\n  let index = -1\n\n  while (++index < list.length) {\n    const tuple = list[index]\n    result.push([toExpression(tuple[0]), toFunction(tuple[1])])\n  }\n\n  return result\n}\n\n/**\n * Turn a find into an expression.\n *\n * @param {Find} find\n *   Find.\n * @returns {RegExp}\n *   Expression.\n */\nfunction toExpression(find) {\n  return typeof find === 'string' ? new RegExp(escape(find), 'g') : find\n}\n\n/**\n * Turn a replace into a function.\n *\n * @param {Replace} replace\n *   Replace.\n * @returns {ReplaceFunction}\n *   Function.\n */\nfunction toFunction(replace) {\n  return typeof replace === 'function'\n    ? replace\n    : function () {\n        return replace\n      }\n}\n","/**\n * @typedef {import('mdast').Link} Link\n * @typedef {import('mdast').PhrasingContent} PhrasingContent\n *\n * @typedef {import('mdast-util-from-markdown').CompileContext} CompileContext\n * @typedef {import('mdast-util-from-markdown').Extension} FromMarkdownExtension\n * @typedef {import('mdast-util-from-markdown').Handle} FromMarkdownHandle\n * @typedef {import('mdast-util-from-markdown').Transform} FromMarkdownTransform\n *\n * @typedef {import('mdast-util-to-markdown').ConstructName} ConstructName\n * @typedef {import('mdast-util-to-markdown').Options} ToMarkdownExtension\n *\n * @typedef {import('mdast-util-find-and-replace').RegExpMatchObject} RegExpMatchObject\n * @typedef {import('mdast-util-find-and-replace').ReplaceFunction} ReplaceFunction\n */\n\nimport {ccount} from 'ccount'\nimport {ok as assert} from 'devlop'\nimport {unicodePunctuation, unicodeWhitespace} from 'micromark-util-character'\nimport {findAndReplace} from 'mdast-util-find-and-replace'\n\n/** @type {ConstructName} */\nconst inConstruct = 'phrasing'\n/** @type {Array<ConstructName>} */\nconst notInConstruct = ['autolink', 'link', 'image', 'label']\n\n/**\n * Create an extension for `mdast-util-from-markdown` to enable GFM autolink\n * literals in markdown.\n *\n * @returns {FromMarkdownExtension}\n *   Extension for `mdast-util-to-markdown` to enable GFM autolink literals.\n */\nexport function gfmAutolinkLiteralFromMarkdown() {\n  return {\n    transforms: [transformGfmAutolinkLiterals],\n    enter: {\n      literalAutolink: enterLiteralAutolink,\n      literalAutolinkEmail: enterLiteralAutolinkValue,\n      literalAutolinkHttp: enterLiteralAutolinkValue,\n      literalAutolinkWww: enterLiteralAutolinkValue\n    },\n    exit: {\n      literalAutolink: exitLiteralAutolink,\n      literalAutolinkEmail: exitLiteralAutolinkEmail,\n      literalAutolinkHttp: exitLiteralAutolinkHttp,\n      literalAutolinkWww: exitLiteralAutolinkWww\n    }\n  }\n}\n\n/**\n * Create an extension for `mdast-util-to-markdown` to enable GFM autolink\n * literals in markdown.\n *\n * @returns {ToMarkdownExtension}\n *   Extension for `mdast-util-to-markdown` to enable GFM autolink literals.\n */\nexport function gfmAutolinkLiteralToMarkdown() {\n  return {\n    unsafe: [\n      {\n        character: '@',\n        before: '[+\\\\-.\\\\w]',\n        after: '[\\\\-.\\\\w]',\n        inConstruct,\n        notInConstruct\n      },\n      {\n        character: '.',\n        before: '[Ww]',\n        after: '[\\\\-.\\\\w]',\n        inConstruct,\n        notInConstruct\n      },\n      {\n        character: ':',\n        before: '[ps]',\n        after: '\\\\/',\n        inConstruct,\n        notInConstruct\n      }\n    ]\n  }\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction enterLiteralAutolink(token) {\n  this.enter({type: 'link', title: null, url: '', children: []}, token)\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction enterLiteralAutolinkValue(token) {\n  this.config.enter.autolinkProtocol.call(this, token)\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction exitLiteralAutolinkHttp(token) {\n  this.config.exit.autolinkProtocol.call(this, token)\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction exitLiteralAutolinkWww(token) {\n  this.config.exit.data.call(this, token)\n  const node = this.stack[this.stack.length - 1]\n  assert(node.type === 'link')\n  node.url = 'http://' + this.sliceSerialize(token)\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction exitLiteralAutolinkEmail(token) {\n  this.config.exit.autolinkEmail.call(this, token)\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction exitLiteralAutolink(token) {\n  this.exit(token)\n}\n\n/** @type {FromMarkdownTransform} */\nfunction transformGfmAutolinkLiterals(tree) {\n  findAndReplace(\n    tree,\n    [\n      [/(https?:\\/\\/|www(?=\\.))([-.\\w]+)([^ \\t\\r\\n]*)/gi, findUrl],\n      [/([-.\\w+]+)@([-\\w]+(?:\\.[-\\w]+)+)/g, findEmail]\n    ],\n    {ignore: ['link', 'linkReference']}\n  )\n}\n\n/**\n * @type {ReplaceFunction}\n * @param {string} _\n * @param {string} protocol\n * @param {string} domain\n * @param {string} path\n * @param {RegExpMatchObject} match\n * @returns {Array<PhrasingContent> | Link | false}\n */\n// eslint-disable-next-line max-params\nfunction findUrl(_, protocol, domain, path, match) {\n  let prefix = ''\n\n  // Not an expected previous character.\n  if (!previous(match)) {\n    return false\n  }\n\n  // Treat `www` as part of the domain.\n  if (/^w/i.test(protocol)) {\n    domain = protocol + domain\n    protocol = ''\n    prefix = 'http://'\n  }\n\n  if (!isCorrectDomain(domain)) {\n    return false\n  }\n\n  const parts = splitUrl(domain + path)\n\n  if (!parts[0]) return false\n\n  /** @type {Link} */\n  const result = {\n    type: 'link',\n    title: null,\n    url: prefix + protocol + parts[0],\n    children: [{type: 'text', value: protocol + parts[0]}]\n  }\n\n  if (parts[1]) {\n    return [result, {type: 'text', value: parts[1]}]\n  }\n\n  return result\n}\n\n/**\n * @type {ReplaceFunction}\n * @param {string} _\n * @param {string} atext\n * @param {string} label\n * @param {RegExpMatchObject} match\n * @returns {Link | false}\n */\nfunction findEmail(_, atext, label, match) {\n  if (\n    // Not an expected previous character.\n    !previous(match, true) ||\n    // Label ends in not allowed character.\n    /[-\\d_]$/.test(label)\n  ) {\n    return false\n  }\n\n  return {\n    type: 'link',\n    title: null,\n    url: 'mailto:' + atext + '@' + label,\n    children: [{type: 'text', value: atext + '@' + label}]\n  }\n}\n\n/**\n * @param {string} domain\n * @returns {boolean}\n */\nfunction isCorrectDomain(domain) {\n  const parts = domain.split('.')\n\n  if (\n    parts.length < 2 ||\n    (parts[parts.length - 1] &&\n      (/_/.test(parts[parts.length - 1]) ||\n        !/[a-zA-Z\\d]/.test(parts[parts.length - 1]))) ||\n    (parts[parts.length - 2] &&\n      (/_/.test(parts[parts.length - 2]) ||\n        !/[a-zA-Z\\d]/.test(parts[parts.length - 2])))\n  ) {\n    return false\n  }\n\n  return true\n}\n\n/**\n * @param {string} url\n * @returns {[string, string | undefined]}\n */\nfunction splitUrl(url) {\n  const trailExec = /[!\"&'),.:;<>?\\]}]+$/.exec(url)\n\n  if (!trailExec) {\n    return [url, undefined]\n  }\n\n  url = url.slice(0, trailExec.index)\n\n  let trail = trailExec[0]\n  let closingParenIndex = trail.indexOf(')')\n  const openingParens = ccount(url, '(')\n  let closingParens = ccount(url, ')')\n\n  while (closingParenIndex !== -1 && openingParens > closingParens) {\n    url += trail.slice(0, closingParenIndex + 1)\n    trail = trail.slice(closingParenIndex + 1)\n    closingParenIndex = trail.indexOf(')')\n    closingParens++\n  }\n\n  return [url, trail]\n}\n\n/**\n * @param {RegExpMatchObject} match\n * @param {boolean | null | undefined} [email=false]\n * @returns {boolean}\n */\nfunction previous(match, email) {\n  const code = match.input.charCodeAt(match.index - 1)\n\n  return (\n    (match.index === 0 ||\n      unicodeWhitespace(code) ||\n      unicodePunctuation(code)) &&\n    (!email || code !== 47)\n  )\n}\n","/**\n * Normalize an identifier (as found in references, definitions).\n *\n * Collapses markdown whitespace, trim, and then lower- and uppercase.\n *\n * Some characters are considered “uppercase”, such as U+03F4 (`ϴ`), but if their\n * lowercase counterpart (U+03B8 (`θ`)) is uppercased will result in a different\n * uppercase character (U+0398 (`Θ`)).\n * So, to get a canonical form, we perform both lower- and uppercase.\n *\n * Using uppercase last makes sure keys will never interact with default\n * prototypal values (such as `constructor`): nothing in the prototype of\n * `Object` is uppercase.\n *\n * @param {string} value\n *   Identifier to normalize.\n * @returns {string}\n *   Normalized identifier.\n */\nexport function normalizeIdentifier(value) {\n  return (\n    value\n      // Collapse markdown whitespace.\n      .replace(/[\\t\\n\\r ]+/g, ' ')\n      // Trim.\n      .replace(/^ | $/g, '')\n      // Some characters are considered “uppercase”, but if their lowercase\n      // counterpart is uppercased will result in a different uppercase\n      // character.\n      // Hence, to get that form, we perform both lower- and uppercase.\n      // Upper case makes sure keys will not interact with default prototypal\n      // methods: no method is uppercase.\n      .toLowerCase()\n      .toUpperCase()\n  )\n}\n","/**\n * @typedef {import('mdast').FootnoteDefinition} FootnoteDefinition\n * @typedef {import('mdast').FootnoteReference} FootnoteReference\n * @typedef {import('mdast-util-from-markdown').CompileContext} CompileContext\n * @typedef {import('mdast-util-from-markdown').Extension} FromMarkdownExtension\n * @typedef {import('mdast-util-from-markdown').Handle} FromMarkdownHandle\n * @typedef {import('mdast-util-to-markdown').Handle} ToMarkdownHandle\n * @typedef {import('mdast-util-to-markdown').Map} Map\n * @typedef {import('mdast-util-to-markdown').Options} ToMarkdownExtension\n */\n\nimport {ok as assert} from 'devlop'\nimport {normalizeIdentifier} from 'micromark-util-normalize-identifier'\n\nfootnoteReference.peek = footnoteReferencePeek\n\n/**\n * Create an extension for `mdast-util-from-markdown` to enable GFM footnotes\n * in markdown.\n *\n * @returns {FromMarkdownExtension}\n *   Extension for `mdast-util-from-markdown`.\n */\nexport function gfmFootnoteFromMarkdown() {\n  return {\n    enter: {\n      gfmFootnoteDefinition: enterFootnoteDefinition,\n      gfmFootnoteDefinitionLabelString: enterFootnoteDefinitionLabelString,\n      gfmFootnoteCall: enterFootnoteCall,\n      gfmFootnoteCallString: enterFootnoteCallString\n    },\n    exit: {\n      gfmFootnoteDefinition: exitFootnoteDefinition,\n      gfmFootnoteDefinitionLabelString: exitFootnoteDefinitionLabelString,\n      gfmFootnoteCall: exitFootnoteCall,\n      gfmFootnoteCallString: exitFootnoteCallString\n    }\n  }\n}\n\n/**\n * Create an extension for `mdast-util-to-markdown` to enable GFM footnotes\n * in markdown.\n *\n * @returns {ToMarkdownExtension}\n *   Extension for `mdast-util-to-markdown`.\n */\nexport function gfmFootnoteToMarkdown() {\n  return {\n    // This is on by default already.\n    unsafe: [{character: '[', inConstruct: ['phrasing', 'label', 'reference']}],\n    handlers: {footnoteDefinition, footnoteReference}\n  }\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction enterFootnoteDefinition(token) {\n  this.enter(\n    {type: 'footnoteDefinition', identifier: '', label: '', children: []},\n    token\n  )\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction enterFootnoteDefinitionLabelString() {\n  this.buffer()\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction exitFootnoteDefinitionLabelString(token) {\n  const label = this.resume()\n  const node = this.stack[this.stack.length - 1]\n  assert(node.type === 'footnoteDefinition')\n  node.label = label\n  node.identifier = normalizeIdentifier(\n    this.sliceSerialize(token)\n  ).toLowerCase()\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction exitFootnoteDefinition(token) {\n  this.exit(token)\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction enterFootnoteCall(token) {\n  this.enter({type: 'footnoteReference', identifier: '', label: ''}, token)\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction enterFootnoteCallString() {\n  this.buffer()\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction exitFootnoteCallString(token) {\n  const label = this.resume()\n  const node = this.stack[this.stack.length - 1]\n  assert(node.type === 'footnoteReference')\n  node.label = label\n  node.identifier = normalizeIdentifier(\n    this.sliceSerialize(token)\n  ).toLowerCase()\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction exitFootnoteCall(token) {\n  this.exit(token)\n}\n\n/**\n * @type {ToMarkdownHandle}\n * @param {FootnoteReference} node\n */\nfunction footnoteReference(node, _, state, info) {\n  const tracker = state.createTracker(info)\n  let value = tracker.move('[^')\n  const exit = state.enter('footnoteReference')\n  const subexit = state.enter('reference')\n  value += tracker.move(\n    state.safe(state.associationId(node), {\n      ...tracker.current(),\n      before: value,\n      after: ']'\n    })\n  )\n  subexit()\n  exit()\n  value += tracker.move(']')\n  return value\n}\n\n/** @type {ToMarkdownHandle} */\nfunction footnoteReferencePeek() {\n  return '['\n}\n\n/**\n * @type {ToMarkdownHandle}\n * @param {FootnoteDefinition} node\n */\nfunction footnoteDefinition(node, _, state, info) {\n  const tracker = state.createTracker(info)\n  let value = tracker.move('[^')\n  const exit = state.enter('footnoteDefinition')\n  const subexit = state.enter('label')\n  value += tracker.move(\n    state.safe(state.associationId(node), {\n      ...tracker.current(),\n      before: value,\n      after: ']'\n    })\n  )\n  subexit()\n  value += tracker.move(\n    ']:' + (node.children && node.children.length > 0 ? ' ' : '')\n  )\n  tracker.shift(4)\n  value += tracker.move(\n    state.indentLines(state.containerFlow(node, tracker.current()), map)\n  )\n  exit()\n\n  return value\n}\n\n/** @type {Map} */\nfunction map(line, index, blank) {\n  if (index === 0) {\n    return line\n  }\n\n  return (blank ? '' : '    ') + line\n}\n","/**\n * @typedef {import('mdast').Delete} Delete\n *\n * @typedef {import('mdast-util-from-markdown').CompileContext} CompileContext\n * @typedef {import('mdast-util-from-markdown').Extension} FromMarkdownExtension\n * @typedef {import('mdast-util-from-markdown').Handle} FromMarkdownHandle\n *\n * @typedef {import('mdast-util-to-markdown').ConstructName} ConstructName\n * @typedef {import('mdast-util-to-markdown').Handle} ToMarkdownHandle\n * @typedef {import('mdast-util-to-markdown').Options} ToMarkdownExtension\n */\n\n/**\n * List of constructs that occur in phrasing (paragraphs, headings), but cannot\n * contain strikethrough.\n * So they sort of cancel each other out.\n * Note: could use a better name.\n *\n * Note: keep in sync with: <https://github.com/syntax-tree/mdast-util-to-markdown/blob/8ce8dbf/lib/unsafe.js#L14>\n *\n * @type {Array<ConstructName>}\n */\nconst constructsWithoutStrikethrough = [\n  'autolink',\n  'destinationLiteral',\n  'destinationRaw',\n  'reference',\n  'titleQuote',\n  'titleApostrophe'\n]\n\nhandleDelete.peek = peekDelete\n\n/**\n * Create an extension for `mdast-util-from-markdown` to enable GFM\n * strikethrough in markdown.\n *\n * @returns {FromMarkdownExtension}\n *   Extension for `mdast-util-from-markdown` to enable GFM strikethrough.\n */\nexport function gfmStrikethroughFromMarkdown() {\n  return {\n    canContainEols: ['delete'],\n    enter: {strikethrough: enterStrikethrough},\n    exit: {strikethrough: exitStrikethrough}\n  }\n}\n\n/**\n * Create an extension for `mdast-util-to-markdown` to enable GFM\n * strikethrough in markdown.\n *\n * @returns {ToMarkdownExtension}\n *   Extension for `mdast-util-to-markdown` to enable GFM strikethrough.\n */\nexport function gfmStrikethroughToMarkdown() {\n  return {\n    unsafe: [\n      {\n        character: '~',\n        inConstruct: 'phrasing',\n        notInConstruct: constructsWithoutStrikethrough\n      }\n    ],\n    handlers: {delete: handleDelete}\n  }\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction enterStrikethrough(token) {\n  this.enter({type: 'delete', children: []}, token)\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction exitStrikethrough(token) {\n  this.exit(token)\n}\n\n/**\n * @type {ToMarkdownHandle}\n * @param {Delete} node\n */\nfunction handleDelete(node, _, state, info) {\n  const tracker = state.createTracker(info)\n  const exit = state.enter('strikethrough')\n  let value = tracker.move('~~')\n  value += state.containerPhrasing(node, {\n    ...tracker.current(),\n    before: value,\n    after: '~'\n  })\n  value += tracker.move('~~')\n  exit()\n  return value\n}\n\n/** @type {ToMarkdownHandle} */\nfunction peekDelete() {\n  return '~'\n}\n","/**\n * @typedef Options\n *   Configuration (optional).\n * @property {string|null|ReadonlyArray<string|null|undefined>} [align]\n *   One style for all columns, or styles for their respective columns.\n *   Each style is either `'l'` (left), `'r'` (right), or `'c'` (center).\n *   Other values are treated as `''`, which doesn’t place the colon in the\n *   alignment row but does align left.\n *   *Only the lowercased first character is used, so `Right` is fine.*\n * @property {boolean} [padding=true]\n *   Whether to add a space of padding between delimiters and cells.\n *\n *   When `true`, there is padding:\n *\n *   ```markdown\n *   | Alpha | B     |\n *   | ----- | ----- |\n *   | C     | Delta |\n *   ```\n *\n *   When `false`, there is no padding:\n *\n *   ```markdown\n *   |Alpha|B    |\n *   |-----|-----|\n *   |C    |Delta|\n *   ```\n * @property {boolean} [delimiterStart=true]\n *   Whether to begin each row with the delimiter.\n *\n *   > 👉 **Note**: please don’t use this: it could create fragile structures\n *   > that aren’t understandable to some markdown parsers.\n *\n *   When `true`, there are starting delimiters:\n *\n *   ```markdown\n *   | Alpha | B     |\n *   | ----- | ----- |\n *   | C     | Delta |\n *   ```\n *\n *   When `false`, there are no starting delimiters:\n *\n *   ```markdown\n *   Alpha | B     |\n *   ----- | ----- |\n *   C     | Delta |\n *   ```\n * @property {boolean} [delimiterEnd=true]\n *   Whether to end each row with the delimiter.\n *\n *   > 👉 **Note**: please don’t use this: it could create fragile structures\n *   > that aren’t understandable to some markdown parsers.\n *\n *   When `true`, there are ending delimiters:\n *\n *   ```markdown\n *   | Alpha | B     |\n *   | ----- | ----- |\n *   | C     | Delta |\n *   ```\n *\n *   When `false`, there are no ending delimiters:\n *\n *   ```markdown\n *   | Alpha | B\n *   | ----- | -----\n *   | C     | Delta\n *   ```\n * @property {boolean} [alignDelimiters=true]\n *   Whether to align the delimiters.\n *   By default, they are aligned:\n *\n *   ```markdown\n *   | Alpha | B     |\n *   | ----- | ----- |\n *   | C     | Delta |\n *   ```\n *\n *   Pass `false` to make them staggered:\n *\n *   ```markdown\n *   | Alpha | B |\n *   | - | - |\n *   | C | Delta |\n *   ```\n * @property {(value: string) => number} [stringLength]\n *   Function to detect the length of table cell content.\n *   This is used when aligning the delimiters (`|`) between table cells.\n *   Full-width characters and emoji mess up delimiter alignment when viewing\n *   the markdown source.\n *   To fix this, you can pass this function, which receives the cell content\n *   and returns its “visible” size.\n *   Note that what is and isn’t visible depends on where the text is displayed.\n *\n *   Without such a function, the following:\n *\n *   ```js\n *   markdownTable([\n *     ['Alpha', 'Bravo'],\n *     ['中文', 'Charlie'],\n *     ['👩‍❤️‍👩', 'Delta']\n *   ])\n *   ```\n *\n *   Yields:\n *\n *   ```markdown\n *   | Alpha | Bravo |\n *   | - | - |\n *   | 中文 | Charlie |\n *   | 👩‍❤️‍👩 | Delta |\n *   ```\n *\n *   With [`string-width`](https://github.com/sindresorhus/string-width):\n *\n *   ```js\n *   import stringWidth from 'string-width'\n *\n *   markdownTable(\n *     [\n *       ['Alpha', 'Bravo'],\n *       ['中文', 'Charlie'],\n *       ['👩‍❤️‍👩', 'Delta']\n *     ],\n *     {stringLength: stringWidth}\n *   )\n *   ```\n *\n *   Yields:\n *\n *   ```markdown\n *   | Alpha | Bravo   |\n *   | ----- | ------- |\n *   | 中文  | Charlie |\n *   | 👩‍❤️‍👩    | Delta   |\n *   ```\n */\n\n/**\n * @typedef {Options} MarkdownTableOptions\n * @todo\n *   Remove next major.\n */\n\n/**\n * Generate a markdown ([GFM](https://docs.github.com/en/github/writing-on-github/working-with-advanced-formatting/organizing-information-with-tables)) table..\n *\n * @param {ReadonlyArray<ReadonlyArray<string|null|undefined>>} table\n *   Table data (matrix of strings).\n * @param {Options} [options]\n *   Configuration (optional).\n * @returns {string}\n */\nexport function markdownTable(table, options = {}) {\n  const align = (options.align || []).concat()\n  const stringLength = options.stringLength || defaultStringLength\n  /** @type {Array<number>} Character codes as symbols for alignment per column. */\n  const alignments = []\n  /** @type {Array<Array<string>>} Cells per row. */\n  const cellMatrix = []\n  /** @type {Array<Array<number>>} Sizes of each cell per row. */\n  const sizeMatrix = []\n  /** @type {Array<number>} */\n  const longestCellByColumn = []\n  let mostCellsPerRow = 0\n  let rowIndex = -1\n\n  // This is a superfluous loop if we don’t align delimiters, but otherwise we’d\n  // do superfluous work when aligning, so optimize for aligning.\n  while (++rowIndex < table.length) {\n    /** @type {Array<string>} */\n    const row = []\n    /** @type {Array<number>} */\n    const sizes = []\n    let columnIndex = -1\n\n    if (table[rowIndex].length > mostCellsPerRow) {\n      mostCellsPerRow = table[rowIndex].length\n    }\n\n    while (++columnIndex < table[rowIndex].length) {\n      const cell = serialize(table[rowIndex][columnIndex])\n\n      if (options.alignDelimiters !== false) {\n        const size = stringLength(cell)\n        sizes[columnIndex] = size\n\n        if (\n          longestCellByColumn[columnIndex] === undefined ||\n          size > longestCellByColumn[columnIndex]\n        ) {\n          longestCellByColumn[columnIndex] = size\n        }\n      }\n\n      row.push(cell)\n    }\n\n    cellMatrix[rowIndex] = row\n    sizeMatrix[rowIndex] = sizes\n  }\n\n  // Figure out which alignments to use.\n  let columnIndex = -1\n\n  if (typeof align === 'object' && 'length' in align) {\n    while (++columnIndex < mostCellsPerRow) {\n      alignments[columnIndex] = toAlignment(align[columnIndex])\n    }\n  } else {\n    const code = toAlignment(align)\n\n    while (++columnIndex < mostCellsPerRow) {\n      alignments[columnIndex] = code\n    }\n  }\n\n  // Inject the alignment row.\n  columnIndex = -1\n  /** @type {Array<string>} */\n  const row = []\n  /** @type {Array<number>} */\n  const sizes = []\n\n  while (++columnIndex < mostCellsPerRow) {\n    const code = alignments[columnIndex]\n    let before = ''\n    let after = ''\n\n    if (code === 99 /* `c` */) {\n      before = ':'\n      after = ':'\n    } else if (code === 108 /* `l` */) {\n      before = ':'\n    } else if (code === 114 /* `r` */) {\n      after = ':'\n    }\n\n    // There *must* be at least one hyphen-minus in each alignment cell.\n    let size =\n      options.alignDelimiters === false\n        ? 1\n        : Math.max(\n            1,\n            longestCellByColumn[columnIndex] - before.length - after.length\n          )\n\n    const cell = before + '-'.repeat(size) + after\n\n    if (options.alignDelimiters !== false) {\n      size = before.length + size + after.length\n\n      if (size > longestCellByColumn[columnIndex]) {\n        longestCellByColumn[columnIndex] = size\n      }\n\n      sizes[columnIndex] = size\n    }\n\n    row[columnIndex] = cell\n  }\n\n  // Inject the alignment row.\n  cellMatrix.splice(1, 0, row)\n  sizeMatrix.splice(1, 0, sizes)\n\n  rowIndex = -1\n  /** @type {Array<string>} */\n  const lines = []\n\n  while (++rowIndex < cellMatrix.length) {\n    const row = cellMatrix[rowIndex]\n    const sizes = sizeMatrix[rowIndex]\n    columnIndex = -1\n    /** @type {Array<string>} */\n    const line = []\n\n    while (++columnIndex < mostCellsPerRow) {\n      const cell = row[columnIndex] || ''\n      let before = ''\n      let after = ''\n\n      if (options.alignDelimiters !== false) {\n        const size =\n          longestCellByColumn[columnIndex] - (sizes[columnIndex] || 0)\n        const code = alignments[columnIndex]\n\n        if (code === 114 /* `r` */) {\n          before = ' '.repeat(size)\n        } else if (code === 99 /* `c` */) {\n          if (size % 2) {\n            before = ' '.repeat(size / 2 + 0.5)\n            after = ' '.repeat(size / 2 - 0.5)\n          } else {\n            before = ' '.repeat(size / 2)\n            after = before\n          }\n        } else {\n          after = ' '.repeat(size)\n        }\n      }\n\n      if (options.delimiterStart !== false && !columnIndex) {\n        line.push('|')\n      }\n\n      if (\n        options.padding !== false &&\n        // Don’t add the opening space if we’re not aligning and the cell is\n        // empty: there will be a closing space.\n        !(options.alignDelimiters === false && cell === '') &&\n        (options.delimiterStart !== false || columnIndex)\n      ) {\n        line.push(' ')\n      }\n\n      if (options.alignDelimiters !== false) {\n        line.push(before)\n      }\n\n      line.push(cell)\n\n      if (options.alignDelimiters !== false) {\n        line.push(after)\n      }\n\n      if (options.padding !== false) {\n        line.push(' ')\n      }\n\n      if (\n        options.delimiterEnd !== false ||\n        columnIndex !== mostCellsPerRow - 1\n      ) {\n        line.push('|')\n      }\n    }\n\n    lines.push(\n      options.delimiterEnd === false\n        ? line.join('').replace(/ +$/, '')\n        : line.join('')\n    )\n  }\n\n  return lines.join('\\n')\n}\n\n/**\n * @param {string|null|undefined} [value]\n * @returns {string}\n */\nfunction serialize(value) {\n  return value === null || value === undefined ? '' : String(value)\n}\n\n/**\n * @param {string} value\n * @returns {number}\n */\nfunction defaultStringLength(value) {\n  return value.length\n}\n\n/**\n * @param {string|null|undefined} value\n * @returns {number}\n */\nfunction toAlignment(value) {\n  const code = typeof value === 'string' ? value.codePointAt(0) : 0\n\n  return code === 67 /* `C` */ || code === 99 /* `c` */\n    ? 99 /* `c` */\n    : code === 76 /* `L` */ || code === 108 /* `l` */\n    ? 108 /* `l` */\n    : code === 82 /* `R` */ || code === 114 /* `r` */\n    ? 114 /* `r` */\n    : 0\n}\n","/**\n * @typedef {import('mdast').Blockquote} Blockquote\n * @typedef {import('mdast').Parents} Parents\n * @typedef {import('../types.js').Info} Info\n * @typedef {import('../types.js').Map} Map\n * @typedef {import('../types.js').State} State\n */\n\n/**\n * @param {Blockquote} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function blockquote(node, _, state, info) {\n  const exit = state.enter('blockquote')\n  const tracker = state.createTracker(info)\n  tracker.move('> ')\n  tracker.shift(2)\n  const value = state.indentLines(\n    state.containerFlow(node, tracker.current()),\n    map\n  )\n  exit()\n  return value\n}\n\n/** @type {Map} */\nfunction map(line, _, blank) {\n  return '>' + (blank ? '' : ' ') + line\n}\n","/**\n * @typedef {import('../types.js').ConstructName} ConstructName\n * @typedef {import('../types.js').Unsafe} Unsafe\n */\n\n/**\n * @param {Array<ConstructName>} stack\n * @param {Unsafe} pattern\n * @returns {boolean}\n */\nexport function patternInScope(stack, pattern) {\n  return (\n    listInScope(stack, pattern.inConstruct, true) &&\n    !listInScope(stack, pattern.notInConstruct, false)\n  )\n}\n\n/**\n * @param {Array<ConstructName>} stack\n * @param {Unsafe['inConstruct']} list\n * @param {boolean} none\n * @returns {boolean}\n */\nfunction listInScope(stack, list, none) {\n  if (typeof list === 'string') {\n    list = [list]\n  }\n\n  if (!list || list.length === 0) {\n    return none\n  }\n\n  let index = -1\n\n  while (++index < list.length) {\n    if (stack.includes(list[index])) {\n      return true\n    }\n  }\n\n  return false\n}\n","/**\n * @typedef {import('mdast').Break} Break\n * @typedef {import('mdast').Parents} Parents\n * @typedef {import('../types.js').Info} Info\n * @typedef {import('../types.js').State} State\n */\n\nimport {patternInScope} from '../util/pattern-in-scope.js'\n\n/**\n * @param {Break} _\n * @param {Parents | undefined} _1\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function hardBreak(_, _1, state, info) {\n  let index = -1\n\n  while (++index < state.unsafe.length) {\n    // If we can’t put eols in this construct (setext headings, tables), use a\n    // space instead.\n    if (\n      state.unsafe[index].character === '\\n' &&\n      patternInScope(state.stack, state.unsafe[index])\n    ) {\n      return /[ \\t]/.test(info.before) ? '' : ' '\n    }\n  }\n\n  return '\\\\\\n'\n}\n","/**\n * Get the count of the longest repeating streak of `substring` in `value`.\n *\n * @param {string} value\n *   Content to search in.\n * @param {string} substring\n *   Substring to look for, typically one character.\n * @returns {number}\n *   Count of most frequent adjacent `substring`s in `value`.\n */\nexport function longestStreak(value, substring) {\n  const source = String(value)\n  let index = source.indexOf(substring)\n  let expected = index\n  let count = 0\n  let max = 0\n\n  if (typeof substring !== 'string') {\n    throw new TypeError('Expected substring')\n  }\n\n  while (index !== -1) {\n    if (index === expected) {\n      if (++count > max) {\n        max = count\n      }\n    } else {\n      count = 1\n    }\n\n    expected = index + substring.length\n    index = source.indexOf(substring, expected)\n  }\n\n  return max\n}\n","/**\n * @typedef {import('mdast').Code} Code\n * @typedef {import('../types.js').State} State\n */\n\n/**\n * @param {Code} node\n * @param {State} state\n * @returns {boolean}\n */\nexport function formatCodeAsIndented(node, state) {\n  return Boolean(\n    state.options.fences === false &&\n      node.value &&\n      // If there’s no info…\n      !node.lang &&\n      // And there’s a non-whitespace character…\n      /[^ \\r\\n]/.test(node.value) &&\n      // And the value doesn’t start or end in a blank…\n      !/^[\\t ]*(?:[\\r\\n]|$)|(?:^|[\\r\\n])[\\t ]*$/.test(node.value)\n  )\n}\n","/**\n * @typedef {import('../types.js').Options} Options\n * @typedef {import('../types.js').State} State\n */\n\n/**\n * @param {State} state\n * @returns {Exclude<Options['fence'], null | undefined>}\n */\nexport function checkFence(state) {\n  const marker = state.options.fence || '`'\n\n  if (marker !== '`' && marker !== '~') {\n    throw new Error(\n      'Cannot serialize code with `' +\n        marker +\n        '` for `options.fence`, expected `` ` `` or `~`'\n    )\n  }\n\n  return marker\n}\n","/**\n * @typedef {import('mdast').Code} Code\n * @typedef {import('mdast').Parents} Parents\n * @typedef {import('../types.js').Info} Info\n * @typedef {import('../types.js').Map} Map\n * @typedef {import('../types.js').State} State\n */\n\nimport {longestStreak} from 'longest-streak'\nimport {formatCodeAsIndented} from '../util/format-code-as-indented.js'\nimport {checkFence} from '../util/check-fence.js'\n\n/**\n * @param {Code} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function code(node, _, state, info) {\n  const marker = checkFence(state)\n  const raw = node.value || ''\n  const suffix = marker === '`' ? 'GraveAccent' : 'Tilde'\n\n  if (formatCodeAsIndented(node, state)) {\n    const exit = state.enter('codeIndented')\n    const value = state.indentLines(raw, map)\n    exit()\n    return value\n  }\n\n  const tracker = state.createTracker(info)\n  const sequence = marker.repeat(Math.max(longestStreak(raw, marker) + 1, 3))\n  const exit = state.enter('codeFenced')\n  let value = tracker.move(sequence)\n\n  if (node.lang) {\n    const subexit = state.enter(`codeFencedLang${suffix}`)\n    value += tracker.move(\n      state.safe(node.lang, {\n        before: value,\n        after: ' ',\n        encode: ['`'],\n        ...tracker.current()\n      })\n    )\n    subexit()\n  }\n\n  if (node.lang && node.meta) {\n    const subexit = state.enter(`codeFencedMeta${suffix}`)\n    value += tracker.move(' ')\n    value += tracker.move(\n      state.safe(node.meta, {\n        before: value,\n        after: '\\n',\n        encode: ['`'],\n        ...tracker.current()\n      })\n    )\n    subexit()\n  }\n\n  value += tracker.move('\\n')\n\n  if (raw) {\n    value += tracker.move(raw + '\\n')\n  }\n\n  value += tracker.move(sequence)\n  exit()\n  return value\n}\n\n/** @type {Map} */\nfunction map(line, _, blank) {\n  return (blank ? '' : '    ') + line\n}\n","/**\n * @typedef {import('../types.js').Options} Options\n * @typedef {import('../types.js').State} State\n */\n\n/**\n * @param {State} state\n * @returns {Exclude<Options['quote'], null | undefined>}\n */\nexport function checkQuote(state) {\n  const marker = state.options.quote || '\"'\n\n  if (marker !== '\"' && marker !== \"'\") {\n    throw new Error(\n      'Cannot serialize title with `' +\n        marker +\n        '` for `options.quote`, expected `\"`, or `\\'`'\n    )\n  }\n\n  return marker\n}\n","/**\n * @typedef {import('mdast').Definition} Definition\n * @typedef {import('mdast').Parents} Parents\n * @typedef {import('../types.js').Info} Info\n * @typedef {import('../types.js').State} State\n */\n\nimport {checkQuote} from '../util/check-quote.js'\n\n/**\n * @param {Definition} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function definition(node, _, state, info) {\n  const quote = checkQuote(state)\n  const suffix = quote === '\"' ? 'Quote' : 'Apostrophe'\n  const exit = state.enter('definition')\n  let subexit = state.enter('label')\n  const tracker = state.createTracker(info)\n  let value = tracker.move('[')\n  value += tracker.move(\n    state.safe(state.associationId(node), {\n      before: value,\n      after: ']',\n      ...tracker.current()\n    })\n  )\n  value += tracker.move(']: ')\n\n  subexit()\n\n  if (\n    // If there’s no url, or…\n    !node.url ||\n    // If there are control characters or whitespace.\n    /[\\0- \\u007F]/.test(node.url)\n  ) {\n    subexit = state.enter('destinationLiteral')\n    value += tracker.move('<')\n    value += tracker.move(\n      state.safe(node.url, {before: value, after: '>', ...tracker.current()})\n    )\n    value += tracker.move('>')\n  } else {\n    // No whitespace, raw is prettier.\n    subexit = state.enter('destinationRaw')\n    value += tracker.move(\n      state.safe(node.url, {\n        before: value,\n        after: node.title ? ' ' : '\\n',\n        ...tracker.current()\n      })\n    )\n  }\n\n  subexit()\n\n  if (node.title) {\n    subexit = state.enter(`title${suffix}`)\n    value += tracker.move(' ' + quote)\n    value += tracker.move(\n      state.safe(node.title, {\n        before: value,\n        after: quote,\n        ...tracker.current()\n      })\n    )\n    value += tracker.move(quote)\n    subexit()\n  }\n\n  exit()\n\n  return value\n}\n","/**\n * @typedef {import('../types.js').Options} Options\n * @typedef {import('../types.js').State} State\n */\n\n/**\n * @param {State} state\n * @returns {Exclude<Options['emphasis'], null | undefined>}\n */\nexport function checkEmphasis(state) {\n  const marker = state.options.emphasis || '*'\n\n  if (marker !== '*' && marker !== '_') {\n    throw new Error(\n      'Cannot serialize emphasis with `' +\n        marker +\n        '` for `options.emphasis`, expected `*`, or `_`'\n    )\n  }\n\n  return marker\n}\n","/**\n * @typedef {import('mdast').Emphasis} Emphasis\n * @typedef {import('mdast').Parents} Parents\n * @typedef {import('../types.js').Info} Info\n * @typedef {import('../types.js').State} State\n */\n\nimport {checkEmphasis} from '../util/check-emphasis.js'\n\nemphasis.peek = emphasisPeek\n\n// To do: there are cases where emphasis cannot “form” depending on the\n// previous or next character of sequences.\n// There’s no way around that though, except for injecting zero-width stuff.\n// Do we need to safeguard against that?\n/**\n * @param {Emphasis} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function emphasis(node, _, state, info) {\n  const marker = checkEmphasis(state)\n  const exit = state.enter('emphasis')\n  const tracker = state.createTracker(info)\n  let value = tracker.move(marker)\n  value += tracker.move(\n    state.containerPhrasing(node, {\n      before: value,\n      after: marker,\n      ...tracker.current()\n    })\n  )\n  value += tracker.move(marker)\n  exit()\n  return value\n}\n\n/**\n * @param {Emphasis} _\n * @param {Parents | undefined} _1\n * @param {State} state\n * @returns {string}\n */\nfunction emphasisPeek(_, _1, state) {\n  return state.options.emphasis || '*'\n}\n","/**\n * @typedef {import('unist').Node} UnistNode\n * @typedef {import('unist').Parent} UnistParent\n * @typedef {import('unist-util-visit-parents').VisitorResult} VisitorResult\n */\n\n/**\n * @typedef {Exclude<import('unist-util-is').Test, undefined> | undefined} Test\n *   Test from `unist-util-is`.\n *\n *   Note: we have remove and add `undefined`, because otherwise when generating\n *   automatic `.d.ts` files, TS tries to flatten paths from a local perspective,\n *   which doesn’t work when publishing on npm.\n */\n\n// To do: use types from `unist-util-visit-parents` when it’s released.\n\n/**\n * @typedef {(\n *   Fn extends (value: any) => value is infer Thing\n *   ? Thing\n *   : Fallback\n * )} Predicate\n *   Get the value of a type guard `Fn`.\n * @template Fn\n *   Value; typically function that is a type guard (such as `(x): x is Y`).\n * @template Fallback\n *   Value to yield if `Fn` is not a type guard.\n */\n\n/**\n * @typedef {(\n *   Check extends null | undefined // No test.\n *   ? Value\n *   : Value extends {type: Check} // String (type) test.\n *   ? Value\n *   : Value extends Check // Partial test.\n *   ? Value\n *   : Check extends Function // Function test.\n *   ? Predicate<Check, Value> extends Value\n *     ? Predicate<Check, Value>\n *     : never\n *   : never // Some other test?\n * )} MatchesOne\n *   Check whether a node matches a primitive check in the type system.\n * @template Value\n *   Value; typically unist `Node`.\n * @template Check\n *   Value; typically `unist-util-is`-compatible test, but not arrays.\n */\n\n/**\n * @typedef {(\n *   Check extends Array<any>\n *   ? MatchesOne<Value, Check[keyof Check]>\n *   : MatchesOne<Value, Check>\n * )} Matches\n *   Check whether a node matches a check in the type system.\n * @template Value\n *   Value; typically unist `Node`.\n * @template Check\n *   Value; typically `unist-util-is`-compatible test.\n */\n\n/**\n * @typedef {0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10} Uint\n *   Number; capped reasonably.\n */\n\n/**\n * @typedef {I extends 0 ? 1 : I extends 1 ? 2 : I extends 2 ? 3 : I extends 3 ? 4 : I extends 4 ? 5 : I extends 5 ? 6 : I extends 6 ? 7 : I extends 7 ? 8 : I extends 8 ? 9 : 10} Increment\n *   Increment a number in the type system.\n * @template {Uint} [I=0]\n *   Index.\n */\n\n/**\n * @typedef {(\n *   Node extends UnistParent\n *   ? Node extends {children: Array<infer Children>}\n *     ? Child extends Children ? Node : never\n *     : never\n *   : never\n * )} InternalParent\n *   Collect nodes that can be parents of `Child`.\n * @template {UnistNode} Node\n *   All node types in a tree.\n * @template {UnistNode} Child\n *   Node to search for.\n */\n\n/**\n * @typedef {InternalParent<InclusiveDescendant<Tree>, Child>} Parent\n *   Collect nodes in `Tree` that can be parents of `Child`.\n * @template {UnistNode} Tree\n *   All node types in a tree.\n * @template {UnistNode} Child\n *   Node to search for.\n */\n\n/**\n * @typedef {(\n *   Depth extends Max\n *   ? never\n *   :\n *     | InternalParent<Node, Child>\n *     | InternalAncestor<Node, InternalParent<Node, Child>, Max, Increment<Depth>>\n * )} InternalAncestor\n *   Collect nodes in `Tree` that can be ancestors of `Child`.\n * @template {UnistNode} Node\n *   All node types in a tree.\n * @template {UnistNode} Child\n *   Node to search for.\n * @template {Uint} [Max=10]\n *   Max; searches up to this depth.\n * @template {Uint} [Depth=0]\n *   Current depth.\n */\n\n/**\n * @typedef {(\n *   Tree extends UnistParent\n *     ? Depth extends Max\n *       ? Tree\n *       : Tree | InclusiveDescendant<Tree['children'][number], Max, Increment<Depth>>\n *     : Tree\n * )} InclusiveDescendant\n *   Collect all (inclusive) descendants of `Tree`.\n *\n *   > 👉 **Note**: for performance reasons, this seems to be the fastest way to\n *   > recurse without actually running into an infinite loop, which the\n *   > previous version did.\n *   >\n *   > Practically, a max of `2` is typically enough assuming a `Root` is\n *   > passed, but it doesn’t improve performance.\n *   > It gets higher with `List > ListItem > Table > TableRow > TableCell`.\n *   > Using up to `10` doesn’t hurt or help either.\n * @template {UnistNode} Tree\n *   Tree type.\n * @template {Uint} [Max=10]\n *   Max; searches up to this depth.\n * @template {Uint} [Depth=0]\n *   Current depth.\n */\n\n/**\n * @callback Visitor\n *   Handle a node (matching `test`, if given).\n *\n *   Visitors are free to transform `node`.\n *   They can also transform `parent`.\n *\n *   Replacing `node` itself, if `SKIP` is not returned, still causes its\n *   descendants to be walked (which is a bug).\n *\n *   When adding or removing previous siblings of `node` (or next siblings, in\n *   case of reverse), the `Visitor` should return a new `Index` to specify the\n *   sibling to traverse after `node` is traversed.\n *   Adding or removing next siblings of `node` (or previous siblings, in case\n *   of reverse) is handled as expected without needing to return a new `Index`.\n *\n *   Removing the children property of `parent` still results in them being\n *   traversed.\n * @param {Visited} node\n *   Found node.\n * @param {Visited extends UnistNode ? number | undefined : never} index\n *   Index of `node` in `parent`.\n * @param {Ancestor extends UnistParent ? Ancestor | undefined : never} parent\n *   Parent of `node`.\n * @returns {VisitorResult}\n *   What to do next.\n *\n *   An `Index` is treated as a tuple of `[CONTINUE, Index]`.\n *   An `Action` is treated as a tuple of `[Action]`.\n *\n *   Passing a tuple back only makes sense if the `Action` is `SKIP`.\n *   When the `Action` is `EXIT`, that action can be returned.\n *   When the `Action` is `CONTINUE`, `Index` can be returned.\n * @template {UnistNode} [Visited=UnistNode]\n *   Visited node type.\n * @template {UnistParent} [Ancestor=UnistParent]\n *   Ancestor type.\n */\n\n/**\n * @typedef {Visitor<Visited, Parent<Ancestor, Visited>>} BuildVisitorFromMatch\n *   Build a typed `Visitor` function from a node and all possible parents.\n *\n *   It will infer which values are passed as `node` and which as `parent`.\n * @template {UnistNode} Visited\n *   Node type.\n * @template {UnistParent} Ancestor\n *   Parent type.\n */\n\n/**\n * @typedef {(\n *   BuildVisitorFromMatch<\n *     Matches<Descendant, Check>,\n *     Extract<Descendant, UnistParent>\n *   >\n * )} BuildVisitorFromDescendants\n *   Build a typed `Visitor` function from a list of descendants and a test.\n *\n *   It will infer which values are passed as `node` and which as `parent`.\n * @template {UnistNode} Descendant\n *   Node type.\n * @template {Test} Check\n *   Test type.\n */\n\n/**\n * @typedef {(\n *   BuildVisitorFromDescendants<\n *     InclusiveDescendant<Tree>,\n *     Check\n *   >\n * )} BuildVisitor\n *   Build a typed `Visitor` function from a tree and a test.\n *\n *   It will infer which values are passed as `node` and which as `parent`.\n * @template {UnistNode} [Tree=UnistNode]\n *   Node type.\n * @template {Test} [Check=Test]\n *   Test type.\n */\n\nimport {visitParents} from 'unist-util-visit-parents'\n\nexport {CONTINUE, EXIT, SKIP} from 'unist-util-visit-parents'\n\n/**\n * Visit nodes.\n *\n * This algorithm performs *depth-first* *tree traversal* in *preorder*\n * (**NLR**) or if `reverse` is given, in *reverse preorder* (**NRL**).\n *\n * You can choose for which nodes `visitor` is called by passing a `test`.\n * For complex tests, you should test yourself in `visitor`, as it will be\n * faster and will have improved type information.\n *\n * Walking the tree is an intensive task.\n * Make use of the return values of the visitor when possible.\n * Instead of walking a tree multiple times, walk it once, use `unist-util-is`\n * to check if a node matches, and then perform different operations.\n *\n * You can change the tree.\n * See `Visitor` for more info.\n *\n * @overload\n * @param {Tree} tree\n * @param {Check} check\n * @param {BuildVisitor<Tree, Check>} visitor\n * @param {boolean | null | undefined} [reverse]\n * @returns {undefined}\n *\n * @overload\n * @param {Tree} tree\n * @param {BuildVisitor<Tree>} visitor\n * @param {boolean | null | undefined} [reverse]\n * @returns {undefined}\n *\n * @param {UnistNode} tree\n *   Tree to traverse.\n * @param {Visitor | Test} testOrVisitor\n *   `unist-util-is`-compatible test (optional, omit to pass a visitor).\n * @param {Visitor | boolean | null | undefined} [visitorOrReverse]\n *   Handle each node (when test is omitted, pass `reverse`).\n * @param {boolean | null | undefined} [maybeReverse=false]\n *   Traverse in reverse preorder (NRL) instead of the default preorder (NLR).\n * @returns {undefined}\n *   Nothing.\n *\n * @template {UnistNode} Tree\n *   Node type.\n * @template {Test} Check\n *   `unist-util-is`-compatible test.\n */\nexport function visit(tree, testOrVisitor, visitorOrReverse, maybeReverse) {\n  /** @type {boolean | null | undefined} */\n  let reverse\n  /** @type {Test} */\n  let test\n  /** @type {Visitor} */\n  let visitor\n\n  if (\n    typeof testOrVisitor === 'function' &&\n    typeof visitorOrReverse !== 'function'\n  ) {\n    test = undefined\n    visitor = testOrVisitor\n    reverse = visitorOrReverse\n  } else {\n    // @ts-expect-error: assume the overload with test was given.\n    test = testOrVisitor\n    // @ts-expect-error: assume the overload with test was given.\n    visitor = visitorOrReverse\n    reverse = maybeReverse\n  }\n\n  visitParents(tree, test, overload, reverse)\n\n  /**\n   * @param {UnistNode} node\n   * @param {Array<UnistParent>} parents\n   */\n  function overload(node, parents) {\n    const parent = parents[parents.length - 1]\n    const index = parent ? parent.children.indexOf(node) : undefined\n    return visitor(node, index, parent)\n  }\n}\n","/**\n * @typedef {import('mdast').Nodes} Nodes\n *\n * @typedef Options\n *   Configuration (optional).\n * @property {boolean | null | undefined} [includeImageAlt=true]\n *   Whether to use `alt` for `image`s (default: `true`).\n * @property {boolean | null | undefined} [includeHtml=true]\n *   Whether to use `value` of HTML (default: `true`).\n */\n\n/** @type {Options} */\nconst emptyOptions = {}\n\n/**\n * Get the text content of a node or list of nodes.\n *\n * Prefers the node’s plain-text fields, otherwise serializes its children,\n * and if the given value is an array, serialize the nodes in it.\n *\n * @param {unknown} [value]\n *   Thing to serialize, typically `Node`.\n * @param {Options | null | undefined} [options]\n *   Configuration (optional).\n * @returns {string}\n *   Serialized `value`.\n */\nexport function toString(value, options) {\n  const settings = options || emptyOptions\n  const includeImageAlt =\n    typeof settings.includeImageAlt === 'boolean'\n      ? settings.includeImageAlt\n      : true\n  const includeHtml =\n    typeof settings.includeHtml === 'boolean' ? settings.includeHtml : true\n\n  return one(value, includeImageAlt, includeHtml)\n}\n\n/**\n * One node or several nodes.\n *\n * @param {unknown} value\n *   Thing to serialize.\n * @param {boolean} includeImageAlt\n *   Include image `alt`s.\n * @param {boolean} includeHtml\n *   Include HTML.\n * @returns {string}\n *   Serialized node.\n */\nfunction one(value, includeImageAlt, includeHtml) {\n  if (node(value)) {\n    if ('value' in value) {\n      return value.type === 'html' && !includeHtml ? '' : value.value\n    }\n\n    if (includeImageAlt && 'alt' in value && value.alt) {\n      return value.alt\n    }\n\n    if ('children' in value) {\n      return all(value.children, includeImageAlt, includeHtml)\n    }\n  }\n\n  if (Array.isArray(value)) {\n    return all(value, includeImageAlt, includeHtml)\n  }\n\n  return ''\n}\n\n/**\n * Serialize a list of nodes.\n *\n * @param {Array<unknown>} values\n *   Thing to serialize.\n * @param {boolean} includeImageAlt\n *   Include image `alt`s.\n * @param {boolean} includeHtml\n *   Include HTML.\n * @returns {string}\n *   Serialized nodes.\n */\nfunction all(values, includeImageAlt, includeHtml) {\n  /** @type {Array<string>} */\n  const result = []\n  let index = -1\n\n  while (++index < values.length) {\n    result[index] = one(values[index], includeImageAlt, includeHtml)\n  }\n\n  return result.join('')\n}\n\n/**\n * Check if `value` looks like a node.\n *\n * @param {unknown} value\n *   Thing.\n * @returns {value is Nodes}\n *   Whether `value` is a node.\n */\nfunction node(value) {\n  return Boolean(value && typeof value === 'object')\n}\n","/**\n * @typedef {import('mdast').Heading} Heading\n * @typedef {import('../types.js').State} State\n */\n\nimport {EXIT, visit} from 'unist-util-visit'\nimport {toString} from 'mdast-util-to-string'\n\n/**\n * @param {Heading} node\n * @param {State} state\n * @returns {boolean}\n */\nexport function formatHeadingAsSetext(node, state) {\n  let literalWithBreak = false\n\n  // Look for literals with a line break.\n  // Note that this also\n  visit(node, function (node) {\n    if (\n      ('value' in node && /\\r?\\n|\\r/.test(node.value)) ||\n      node.type === 'break'\n    ) {\n      literalWithBreak = true\n      return EXIT\n    }\n  })\n\n  return Boolean(\n    (!node.depth || node.depth < 3) &&\n      toString(node) &&\n      (state.options.setext || literalWithBreak)\n  )\n}\n","/**\n * @typedef {import('mdast').Heading} Heading\n * @typedef {import('mdast').Parents} Parents\n * @typedef {import('../types.js').Info} Info\n * @typedef {import('../types.js').State} State\n */\n\nimport {formatHeadingAsSetext} from '../util/format-heading-as-setext.js'\n\n/**\n * @param {Heading} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function heading(node, _, state, info) {\n  const rank = Math.max(Math.min(6, node.depth || 1), 1)\n  const tracker = state.createTracker(info)\n\n  if (formatHeadingAsSetext(node, state)) {\n    const exit = state.enter('headingSetext')\n    const subexit = state.enter('phrasing')\n    const value = state.containerPhrasing(node, {\n      ...tracker.current(),\n      before: '\\n',\n      after: '\\n'\n    })\n    subexit()\n    exit()\n\n    return (\n      value +\n      '\\n' +\n      (rank === 1 ? '=' : '-').repeat(\n        // The whole size…\n        value.length -\n          // Minus the position of the character after the last EOL (or\n          // 0 if there is none)…\n          (Math.max(value.lastIndexOf('\\r'), value.lastIndexOf('\\n')) + 1)\n      )\n    )\n  }\n\n  const sequence = '#'.repeat(rank)\n  const exit = state.enter('headingAtx')\n  const subexit = state.enter('phrasing')\n\n  // Note: for proper tracking, we should reset the output positions when there\n  // is no content returned, because then the space is not output.\n  // Practically, in that case, there is no content, so it doesn’t matter that\n  // we’ve tracked one too many characters.\n  tracker.move(sequence + ' ')\n\n  let value = state.containerPhrasing(node, {\n    before: '# ',\n    after: '\\n',\n    ...tracker.current()\n  })\n\n  if (/^[\\t ]/.test(value)) {\n    // To do: what effect has the character reference on tracking?\n    value =\n      '&#x' +\n      value.charCodeAt(0).toString(16).toUpperCase() +\n      ';' +\n      value.slice(1)\n  }\n\n  value = value ? sequence + ' ' + value : sequence\n\n  if (state.options.closeAtx) {\n    value += ' ' + sequence\n  }\n\n  subexit()\n  exit()\n\n  return value\n}\n","/**\n * @typedef {import('mdast').Html} Html\n */\n\nhtml.peek = htmlPeek\n\n/**\n * @param {Html} node\n * @returns {string}\n */\nexport function html(node) {\n  return node.value || ''\n}\n\n/**\n * @returns {string}\n */\nfunction htmlPeek() {\n  return '<'\n}\n","/**\n * @typedef {import('mdast').Image} Image\n * @typedef {import('mdast').Parents} Parents\n * @typedef {import('../types.js').Info} Info\n * @typedef {import('../types.js').State} State\n */\n\nimport {checkQuote} from '../util/check-quote.js'\n\nimage.peek = imagePeek\n\n/**\n * @param {Image} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function image(node, _, state, info) {\n  const quote = checkQuote(state)\n  const suffix = quote === '\"' ? 'Quote' : 'Apostrophe'\n  const exit = state.enter('image')\n  let subexit = state.enter('label')\n  const tracker = state.createTracker(info)\n  let value = tracker.move('![')\n  value += tracker.move(\n    state.safe(node.alt, {before: value, after: ']', ...tracker.current()})\n  )\n  value += tracker.move('](')\n\n  subexit()\n\n  if (\n    // If there’s no url but there is a title…\n    (!node.url && node.title) ||\n    // If there are control characters or whitespace.\n    /[\\0- \\u007F]/.test(node.url)\n  ) {\n    subexit = state.enter('destinationLiteral')\n    value += tracker.move('<')\n    value += tracker.move(\n      state.safe(node.url, {before: value, after: '>', ...tracker.current()})\n    )\n    value += tracker.move('>')\n  } else {\n    // No whitespace, raw is prettier.\n    subexit = state.enter('destinationRaw')\n    value += tracker.move(\n      state.safe(node.url, {\n        before: value,\n        after: node.title ? ' ' : ')',\n        ...tracker.current()\n      })\n    )\n  }\n\n  subexit()\n\n  if (node.title) {\n    subexit = state.enter(`title${suffix}`)\n    value += tracker.move(' ' + quote)\n    value += tracker.move(\n      state.safe(node.title, {\n        before: value,\n        after: quote,\n        ...tracker.current()\n      })\n    )\n    value += tracker.move(quote)\n    subexit()\n  }\n\n  value += tracker.move(')')\n  exit()\n\n  return value\n}\n\n/**\n * @returns {string}\n */\nfunction imagePeek() {\n  return '!'\n}\n","/**\n * @typedef {import('mdast').ImageReference} ImageReference\n * @typedef {import('mdast').Parents} Parents\n * @typedef {import('../types.js').Info} Info\n * @typedef {import('../types.js').State} State\n */\n\nimageReference.peek = imageReferencePeek\n\n/**\n * @param {ImageReference} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function imageReference(node, _, state, info) {\n  const type = node.referenceType\n  const exit = state.enter('imageReference')\n  let subexit = state.enter('label')\n  const tracker = state.createTracker(info)\n  let value = tracker.move('![')\n  const alt = state.safe(node.alt, {\n    before: value,\n    after: ']',\n    ...tracker.current()\n  })\n  value += tracker.move(alt + '][')\n\n  subexit()\n  // Hide the fact that we’re in phrasing, because escapes don’t work.\n  const stack = state.stack\n  state.stack = []\n  subexit = state.enter('reference')\n  // Note: for proper tracking, we should reset the output positions when we end\n  // up making a `shortcut` reference, because then there is no brace output.\n  // Practically, in that case, there is no content, so it doesn’t matter that\n  // we’ve tracked one too many characters.\n  const reference = state.safe(state.associationId(node), {\n    before: value,\n    after: ']',\n    ...tracker.current()\n  })\n  subexit()\n  state.stack = stack\n  exit()\n\n  if (type === 'full' || !alt || alt !== reference) {\n    value += tracker.move(reference + ']')\n  } else if (type === 'shortcut') {\n    // Remove the unwanted `[`.\n    value = value.slice(0, -1)\n  } else {\n    value += tracker.move(']')\n  }\n\n  return value\n}\n\n/**\n * @returns {string}\n */\nfunction imageReferencePeek() {\n  return '!'\n}\n","/**\n * @typedef {import('mdast').InlineCode} InlineCode\n * @typedef {import('mdast').Parents} Parents\n * @typedef {import('../types.js').State} State\n */\n\ninlineCode.peek = inlineCodePeek\n\n/**\n * @param {InlineCode} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @returns {string}\n */\nexport function inlineCode(node, _, state) {\n  let value = node.value || ''\n  let sequence = '`'\n  let index = -1\n\n  // If there is a single grave accent on its own in the code, use a fence of\n  // two.\n  // If there are two in a row, use one.\n  while (new RegExp('(^|[^`])' + sequence + '([^`]|$)').test(value)) {\n    sequence += '`'\n  }\n\n  // If this is not just spaces or eols (tabs don’t count), and either the\n  // first or last character are a space, eol, or tick, then pad with spaces.\n  if (\n    /[^ \\r\\n]/.test(value) &&\n    ((/^[ \\r\\n]/.test(value) && /[ \\r\\n]$/.test(value)) || /^`|`$/.test(value))\n  ) {\n    value = ' ' + value + ' '\n  }\n\n  // We have a potential problem: certain characters after eols could result in\n  // blocks being seen.\n  // For example, if someone injected the string `'\\n# b'`, then that would\n  // result in an ATX heading.\n  // We can’t escape characters in `inlineCode`, but because eols are\n  // transformed to spaces when going from markdown to HTML anyway, we can swap\n  // them out.\n  while (++index < state.unsafe.length) {\n    const pattern = state.unsafe[index]\n    const expression = state.compilePattern(pattern)\n    /** @type {RegExpExecArray | null} */\n    let match\n\n    // Only look for `atBreak`s.\n    // Btw: note that `atBreak` patterns will always start the regex at LF or\n    // CR.\n    if (!pattern.atBreak) continue\n\n    while ((match = expression.exec(value))) {\n      let position = match.index\n\n      // Support CRLF (patterns only look for one of the characters).\n      if (\n        value.charCodeAt(position) === 10 /* `\\n` */ &&\n        value.charCodeAt(position - 1) === 13 /* `\\r` */\n      ) {\n        position--\n      }\n\n      value = value.slice(0, position) + ' ' + value.slice(match.index + 1)\n    }\n  }\n\n  return sequence + value + sequence\n}\n\n/**\n * @returns {string}\n */\nfunction inlineCodePeek() {\n  return '`'\n}\n","/**\n * @typedef {import('mdast').Link} Link\n * @typedef {import('../types.js').State} State\n */\n\nimport {toString} from 'mdast-util-to-string'\n\n/**\n * @param {Link} node\n * @param {State} state\n * @returns {boolean}\n */\nexport function formatLinkAsAutolink(node, state) {\n  const raw = toString(node)\n\n  return Boolean(\n    !state.options.resourceLink &&\n      // If there’s a url…\n      node.url &&\n      // And there’s a no title…\n      !node.title &&\n      // And the content of `node` is a single text node…\n      node.children &&\n      node.children.length === 1 &&\n      node.children[0].type === 'text' &&\n      // And if the url is the same as the content…\n      (raw === node.url || 'mailto:' + raw === node.url) &&\n      // And that starts w/ a protocol…\n      /^[a-z][a-z+.-]+:/i.test(node.url) &&\n      // And that doesn’t contain ASCII control codes (character escapes and\n      // references don’t work), space, or angle brackets…\n      !/[\\0- <>\\u007F]/.test(node.url)\n  )\n}\n","/**\n * @typedef {import('mdast').Link} Link\n * @typedef {import('mdast').Parents} Parents\n * @typedef {import('../types.js').Exit} Exit\n * @typedef {import('../types.js').Info} Info\n * @typedef {import('../types.js').State} State\n */\n\nimport {checkQuote} from '../util/check-quote.js'\nimport {formatLinkAsAutolink} from '../util/format-link-as-autolink.js'\n\nlink.peek = linkPeek\n\n/**\n * @param {Link} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function link(node, _, state, info) {\n  const quote = checkQuote(state)\n  const suffix = quote === '\"' ? 'Quote' : 'Apostrophe'\n  const tracker = state.createTracker(info)\n  /** @type {Exit} */\n  let exit\n  /** @type {Exit} */\n  let subexit\n\n  if (formatLinkAsAutolink(node, state)) {\n    // Hide the fact that we’re in phrasing, because escapes don’t work.\n    const stack = state.stack\n    state.stack = []\n    exit = state.enter('autolink')\n    let value = tracker.move('<')\n    value += tracker.move(\n      state.containerPhrasing(node, {\n        before: value,\n        after: '>',\n        ...tracker.current()\n      })\n    )\n    value += tracker.move('>')\n    exit()\n    state.stack = stack\n    return value\n  }\n\n  exit = state.enter('link')\n  subexit = state.enter('label')\n  let value = tracker.move('[')\n  value += tracker.move(\n    state.containerPhrasing(node, {\n      before: value,\n      after: '](',\n      ...tracker.current()\n    })\n  )\n  value += tracker.move('](')\n  subexit()\n\n  if (\n    // If there’s no url but there is a title…\n    (!node.url && node.title) ||\n    // If there are control characters or whitespace.\n    /[\\0- \\u007F]/.test(node.url)\n  ) {\n    subexit = state.enter('destinationLiteral')\n    value += tracker.move('<')\n    value += tracker.move(\n      state.safe(node.url, {before: value, after: '>', ...tracker.current()})\n    )\n    value += tracker.move('>')\n  } else {\n    // No whitespace, raw is prettier.\n    subexit = state.enter('destinationRaw')\n    value += tracker.move(\n      state.safe(node.url, {\n        before: value,\n        after: node.title ? ' ' : ')',\n        ...tracker.current()\n      })\n    )\n  }\n\n  subexit()\n\n  if (node.title) {\n    subexit = state.enter(`title${suffix}`)\n    value += tracker.move(' ' + quote)\n    value += tracker.move(\n      state.safe(node.title, {\n        before: value,\n        after: quote,\n        ...tracker.current()\n      })\n    )\n    value += tracker.move(quote)\n    subexit()\n  }\n\n  value += tracker.move(')')\n\n  exit()\n  return value\n}\n\n/**\n * @param {Link} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @returns {string}\n */\nfunction linkPeek(node, _, state) {\n  return formatLinkAsAutolink(node, state) ? '<' : '['\n}\n","/**\n * @typedef {import('mdast').LinkReference} LinkReference\n * @typedef {import('mdast').Parents} Parents\n * @typedef {import('../types.js').Info} Info\n * @typedef {import('../types.js').State} State\n */\n\nlinkReference.peek = linkReferencePeek\n\n/**\n * @param {LinkReference} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function linkReference(node, _, state, info) {\n  const type = node.referenceType\n  const exit = state.enter('linkReference')\n  let subexit = state.enter('label')\n  const tracker = state.createTracker(info)\n  let value = tracker.move('[')\n  const text = state.containerPhrasing(node, {\n    before: value,\n    after: ']',\n    ...tracker.current()\n  })\n  value += tracker.move(text + '][')\n\n  subexit()\n  // Hide the fact that we’re in phrasing, because escapes don’t work.\n  const stack = state.stack\n  state.stack = []\n  subexit = state.enter('reference')\n  // Note: for proper tracking, we should reset the output positions when we end\n  // up making a `shortcut` reference, because then there is no brace output.\n  // Practically, in that case, there is no content, so it doesn’t matter that\n  // we’ve tracked one too many characters.\n  const reference = state.safe(state.associationId(node), {\n    before: value,\n    after: ']',\n    ...tracker.current()\n  })\n  subexit()\n  state.stack = stack\n  exit()\n\n  if (type === 'full' || !text || text !== reference) {\n    value += tracker.move(reference + ']')\n  } else if (type === 'shortcut') {\n    // Remove the unwanted `[`.\n    value = value.slice(0, -1)\n  } else {\n    value += tracker.move(']')\n  }\n\n  return value\n}\n\n/**\n * @returns {string}\n */\nfunction linkReferencePeek() {\n  return '['\n}\n","/**\n * @typedef {import('../types.js').Options} Options\n * @typedef {import('../types.js').State} State\n */\n\n/**\n * @param {State} state\n * @returns {Exclude<Options['bullet'], null | undefined>}\n */\nexport function checkBullet(state) {\n  const marker = state.options.bullet || '*'\n\n  if (marker !== '*' && marker !== '+' && marker !== '-') {\n    throw new Error(\n      'Cannot serialize items with `' +\n        marker +\n        '` for `options.bullet`, expected `*`, `+`, or `-`'\n    )\n  }\n\n  return marker\n}\n","/**\n * @typedef {import('../types.js').Options} Options\n * @typedef {import('../types.js').State} State\n */\n\nimport {checkBullet} from './check-bullet.js'\n\n/**\n * @param {State} state\n * @returns {Exclude<Options['bullet'], null | undefined>}\n */\nexport function checkBulletOther(state) {\n  const bullet = checkBullet(state)\n  const bulletOther = state.options.bulletOther\n\n  if (!bulletOther) {\n    return bullet === '*' ? '-' : '*'\n  }\n\n  if (bulletOther !== '*' && bulletOther !== '+' && bulletOther !== '-') {\n    throw new Error(\n      'Cannot serialize items with `' +\n        bulletOther +\n        '` for `options.bulletOther`, expected `*`, `+`, or `-`'\n    )\n  }\n\n  if (bulletOther === bullet) {\n    throw new Error(\n      'Expected `bullet` (`' +\n        bullet +\n        '`) and `bulletOther` (`' +\n        bulletOther +\n        '`) to be different'\n    )\n  }\n\n  return bulletOther\n}\n","/**\n * @typedef {import('../types.js').Options} Options\n * @typedef {import('../types.js').State} State\n */\n\n/**\n * @param {State} state\n * @returns {Exclude<Options['bulletOrdered'], null | undefined>}\n */\nexport function checkBulletOrdered(state) {\n  const marker = state.options.bulletOrdered || '.'\n\n  if (marker !== '.' && marker !== ')') {\n    throw new Error(\n      'Cannot serialize items with `' +\n        marker +\n        '` for `options.bulletOrdered`, expected `.` or `)`'\n    )\n  }\n\n  return marker\n}\n","/**\n * @typedef {import('../types.js').Options} Options\n * @typedef {import('../types.js').State} State\n */\n\n/**\n * @param {State} state\n * @returns {Exclude<Options['rule'], null | undefined>}\n */\nexport function checkRule(state) {\n  const marker = state.options.rule || '*'\n\n  if (marker !== '*' && marker !== '-' && marker !== '_') {\n    throw new Error(\n      'Cannot serialize rules with `' +\n        marker +\n        '` for `options.rule`, expected `*`, `-`, or `_`'\n    )\n  }\n\n  return marker\n}\n","/**\n * @typedef {import('mdast').List} List\n * @typedef {import('mdast').Parents} Parents\n * @typedef {import('../types.js').Info} Info\n * @typedef {import('../types.js').State} State\n */\n\nimport {checkBullet} from '../util/check-bullet.js'\nimport {checkBulletOther} from '../util/check-bullet-other.js'\nimport {checkBulletOrdered} from '../util/check-bullet-ordered.js'\nimport {checkRule} from '../util/check-rule.js'\n\n/**\n * @param {List} node\n * @param {Parents | undefined} parent\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function list(node, parent, state, info) {\n  const exit = state.enter('list')\n  const bulletCurrent = state.bulletCurrent\n  /** @type {string} */\n  let bullet = node.ordered ? checkBulletOrdered(state) : checkBullet(state)\n  /** @type {string} */\n  const bulletOther = node.ordered\n    ? bullet === '.'\n      ? ')'\n      : '.'\n    : checkBulletOther(state)\n  let useDifferentMarker =\n    parent && state.bulletLastUsed ? bullet === state.bulletLastUsed : false\n\n  if (!node.ordered) {\n    const firstListItem = node.children ? node.children[0] : undefined\n\n    // If there’s an empty first list item directly in two list items,\n    // we have to use a different bullet:\n    //\n    // ```markdown\n    // * - *\n    // ```\n    //\n    // …because otherwise it would become one big thematic break.\n    if (\n      // Bullet could be used as a thematic break marker:\n      (bullet === '*' || bullet === '-') &&\n      // Empty first list item:\n      firstListItem &&\n      (!firstListItem.children || !firstListItem.children[0]) &&\n      // Directly in two other list items:\n      state.stack[state.stack.length - 1] === 'list' &&\n      state.stack[state.stack.length - 2] === 'listItem' &&\n      state.stack[state.stack.length - 3] === 'list' &&\n      state.stack[state.stack.length - 4] === 'listItem' &&\n      // That are each the first child.\n      state.indexStack[state.indexStack.length - 1] === 0 &&\n      state.indexStack[state.indexStack.length - 2] === 0 &&\n      state.indexStack[state.indexStack.length - 3] === 0\n    ) {\n      useDifferentMarker = true\n    }\n\n    // If there’s a thematic break at the start of the first list item,\n    // we have to use a different bullet:\n    //\n    // ```markdown\n    // * ---\n    // ```\n    //\n    // …because otherwise it would become one big thematic break.\n    if (checkRule(state) === bullet && firstListItem) {\n      let index = -1\n\n      while (++index < node.children.length) {\n        const item = node.children[index]\n\n        if (\n          item &&\n          item.type === 'listItem' &&\n          item.children &&\n          item.children[0] &&\n          item.children[0].type === 'thematicBreak'\n        ) {\n          useDifferentMarker = true\n          break\n        }\n      }\n    }\n  }\n\n  if (useDifferentMarker) {\n    bullet = bulletOther\n  }\n\n  state.bulletCurrent = bullet\n  const value = state.containerFlow(node, info)\n  state.bulletLastUsed = bullet\n  state.bulletCurrent = bulletCurrent\n  exit()\n  return value\n}\n","/**\n * @typedef {import('../types.js').Options} Options\n * @typedef {import('../types.js').State} State\n */\n\n/**\n * @param {State} state\n * @returns {Exclude<Options['listItemIndent'], null | undefined>}\n */\nexport function checkListItemIndent(state) {\n  const style = state.options.listItemIndent || 'one'\n\n  if (style !== 'tab' && style !== 'one' && style !== 'mixed') {\n    throw new Error(\n      'Cannot serialize items with `' +\n        style +\n        '` for `options.listItemIndent`, expected `tab`, `one`, or `mixed`'\n    )\n  }\n\n  return style\n}\n","/**\n * @typedef {import('mdast').ListItem} ListItem\n * @typedef {import('mdast').Parents} Parents\n * @typedef {import('../types.js').Info} Info\n * @typedef {import('../types.js').Map} Map\n * @typedef {import('../types.js').State} State\n */\n\nimport {checkBullet} from '../util/check-bullet.js'\nimport {checkListItemIndent} from '../util/check-list-item-indent.js'\n\n/**\n * @param {ListItem} node\n * @param {Parents | undefined} parent\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function listItem(node, parent, state, info) {\n  const listItemIndent = checkListItemIndent(state)\n  let bullet = state.bulletCurrent || checkBullet(state)\n\n  // Add the marker value for ordered lists.\n  if (parent && parent.type === 'list' && parent.ordered) {\n    bullet =\n      (typeof parent.start === 'number' && parent.start > -1\n        ? parent.start\n        : 1) +\n      (state.options.incrementListMarker === false\n        ? 0\n        : parent.children.indexOf(node)) +\n      bullet\n  }\n\n  let size = bullet.length + 1\n\n  if (\n    listItemIndent === 'tab' ||\n    (listItemIndent === 'mixed' &&\n      ((parent && parent.type === 'list' && parent.spread) || node.spread))\n  ) {\n    size = Math.ceil(size / 4) * 4\n  }\n\n  const tracker = state.createTracker(info)\n  tracker.move(bullet + ' '.repeat(size - bullet.length))\n  tracker.shift(size)\n  const exit = state.enter('listItem')\n  const value = state.indentLines(\n    state.containerFlow(node, tracker.current()),\n    map\n  )\n  exit()\n\n  return value\n\n  /** @type {Map} */\n  function map(line, index, blank) {\n    if (index) {\n      return (blank ? '' : ' '.repeat(size)) + line\n    }\n\n    return (blank ? bullet : bullet + ' '.repeat(size - bullet.length)) + line\n  }\n}\n","/**\n * @typedef {import('mdast').Paragraph} Paragraph\n * @typedef {import('mdast').Parents} Parents\n * @typedef {import('../types.js').Info} Info\n * @typedef {import('../types.js').State} State\n */\n\n/**\n * @param {Paragraph} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function paragraph(node, _, state, info) {\n  const exit = state.enter('paragraph')\n  const subexit = state.enter('phrasing')\n  const value = state.containerPhrasing(node, info)\n  subexit()\n  exit()\n  return value\n}\n","/**\n * @typedef {import('mdast').Html} Html\n * @typedef {import('mdast').PhrasingContent} PhrasingContent\n */\n\nimport {convert} from 'unist-util-is'\n\n/**\n * Check if the given value is *phrasing content*.\n *\n * > 👉 **Note**: Excludes `html`, which can be both phrasing or flow.\n *\n * @param node\n *   Thing to check, typically `Node`.\n * @returns\n *   Whether `value` is phrasing content.\n */\n\nexport const phrasing =\n  /** @type {(node?: unknown) => node is Exclude<PhrasingContent, Html>} */\n  (\n    convert([\n      'break',\n      'delete',\n      'emphasis',\n      // To do: next major: removed since footnotes were added to GFM.\n      'footnote',\n      'footnoteReference',\n      'image',\n      'imageReference',\n      'inlineCode',\n      // Enabled by `mdast-util-math`:\n      'inlineMath',\n      'link',\n      'linkReference',\n      // Enabled by `mdast-util-mdx`:\n      'mdxJsxTextElement',\n      // Enabled by `mdast-util-mdx`:\n      'mdxTextExpression',\n      'strong',\n      'text',\n      // Enabled by `mdast-util-directive`:\n      'textDirective'\n    ])\n  )\n","/**\n * @typedef {import('mdast').Parents} Parents\n * @typedef {import('mdast').Root} Root\n * @typedef {import('../types.js').Info} Info\n * @typedef {import('../types.js').State} State\n */\n\nimport {phrasing} from 'mdast-util-phrasing'\n\n/**\n * @param {Root} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function root(node, _, state, info) {\n  // Note: `html` nodes are ambiguous.\n  const hasPhrasing = node.children.some(function (d) {\n    return phrasing(d)\n  })\n  const fn = hasPhrasing ? state.containerPhrasing : state.containerFlow\n  return fn.call(state, node, info)\n}\n","/**\n * @typedef {import('../types.js').Options} Options\n * @typedef {import('../types.js').State} State\n */\n\n/**\n * @param {State} state\n * @returns {Exclude<Options['strong'], null | undefined>}\n */\nexport function checkStrong(state) {\n  const marker = state.options.strong || '*'\n\n  if (marker !== '*' && marker !== '_') {\n    throw new Error(\n      'Cannot serialize strong with `' +\n        marker +\n        '` for `options.strong`, expected `*`, or `_`'\n    )\n  }\n\n  return marker\n}\n","/**\n * @typedef {import('mdast').Parents} Parents\n * @typedef {import('mdast').Strong} Strong\n * @typedef {import('../types.js').Info} Info\n * @typedef {import('../types.js').State} State\n */\n\nimport {checkStrong} from '../util/check-strong.js'\n\nstrong.peek = strongPeek\n\n// To do: there are cases where emphasis cannot “form” depending on the\n// previous or next character of sequences.\n// There’s no way around that though, except for injecting zero-width stuff.\n// Do we need to safeguard against that?\n/**\n * @param {Strong} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function strong(node, _, state, info) {\n  const marker = checkStrong(state)\n  const exit = state.enter('strong')\n  const tracker = state.createTracker(info)\n  let value = tracker.move(marker + marker)\n  value += tracker.move(\n    state.containerPhrasing(node, {\n      before: value,\n      after: marker,\n      ...tracker.current()\n    })\n  )\n  value += tracker.move(marker + marker)\n  exit()\n  return value\n}\n\n/**\n * @param {Strong} _\n * @param {Parents | undefined} _1\n * @param {State} state\n * @returns {string}\n */\nfunction strongPeek(_, _1, state) {\n  return state.options.strong || '*'\n}\n","/**\n * @typedef {import('mdast').Parents} Parents\n * @typedef {import('mdast').Text} Text\n * @typedef {import('../types.js').Info} Info\n * @typedef {import('../types.js').State} State\n */\n\n/**\n * @param {Text} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function text(node, _, state, info) {\n  return state.safe(node.value, info)\n}\n","/**\n * @typedef {import('../types.js').Options} Options\n * @typedef {import('../types.js').State} State\n */\n\n/**\n * @param {State} state\n * @returns {Exclude<Options['ruleRepetition'], null | undefined>}\n */\nexport function checkRuleRepetition(state) {\n  const repetition = state.options.ruleRepetition || 3\n\n  if (repetition < 3) {\n    throw new Error(\n      'Cannot serialize rules with repetition `' +\n        repetition +\n        '` for `options.ruleRepetition`, expected `3` or more'\n    )\n  }\n\n  return repetition\n}\n","/**\n * @typedef {import('mdast').Parents} Parents\n * @typedef {import('mdast').ThematicBreak} ThematicBreak\n * @typedef {import('../types.js').State} State\n */\n\nimport {checkRuleRepetition} from '../util/check-rule-repetition.js'\nimport {checkRule} from '../util/check-rule.js'\n\n/**\n * @param {ThematicBreak} _\n * @param {Parents | undefined} _1\n * @param {State} state\n * @returns {string}\n */\nexport function thematicBreak(_, _1, state) {\n  const value = (\n    checkRule(state) + (state.options.ruleSpaces ? ' ' : '')\n  ).repeat(checkRuleRepetition(state))\n\n  return state.options.ruleSpaces ? value.slice(0, -1) : value\n}\n","import {blockquote} from './blockquote.js'\nimport {hardBreak} from './break.js'\nimport {code} from './code.js'\nimport {definition} from './definition.js'\nimport {emphasis} from './emphasis.js'\nimport {heading} from './heading.js'\nimport {html} from './html.js'\nimport {image} from './image.js'\nimport {imageReference} from './image-reference.js'\nimport {inlineCode} from './inline-code.js'\nimport {link} from './link.js'\nimport {linkReference} from './link-reference.js'\nimport {list} from './list.js'\nimport {listItem} from './list-item.js'\nimport {paragraph} from './paragraph.js'\nimport {root} from './root.js'\nimport {strong} from './strong.js'\nimport {text} from './text.js'\nimport {thematicBreak} from './thematic-break.js'\n\n/**\n * Default (CommonMark) handlers.\n */\nexport const handle = {\n  blockquote,\n  break: hardBreak,\n  code,\n  definition,\n  emphasis,\n  hardBreak,\n  heading,\n  html,\n  image,\n  imageReference,\n  inlineCode,\n  link,\n  linkReference,\n  list,\n  listItem,\n  paragraph,\n  root,\n  strong,\n  text,\n  thematicBreak\n}\n","/**\n * Turn the number (in string form as either hexa- or plain decimal) coming from\n * a numeric character reference into a character.\n *\n * Sort of like `String.fromCodePoint(Number.parseInt(value, base))`, but makes\n * non-characters and control characters safe.\n *\n * @param {string} value\n *   Value to decode.\n * @param {number} base\n *   Numeric base.\n * @returns {string}\n *   Character.\n */\nexport function decodeNumericCharacterReference(value, base) {\n  const code = Number.parseInt(value, base);\n  if (\n  // C0 except for HT, LF, FF, CR, space.\n  code < 9 || code === 11 || code > 13 && code < 32 ||\n  // Control character (DEL) of C0, and C1 controls.\n  code > 126 && code < 160 ||\n  // Lone high surrogates and low surrogates.\n  code > 55_295 && code < 57_344 ||\n  // Noncharacters.\n  code > 64_975 && code < 65_008 || /* eslint-disable no-bitwise */\n  (code & 65_535) === 65_535 || (code & 65_535) === 65_534 || /* eslint-enable no-bitwise */\n  // Out of range\n  code > 1_114_111) {\n    return \"\\uFFFD\";\n  }\n  return String.fromCodePoint(code);\n}","import {decodeNamedCharacterReference} from 'decode-named-character-reference'\nimport {decodeNumericCharacterReference} from 'micromark-util-decode-numeric-character-reference'\nconst characterEscapeOrReference =\n  /\\\\([!-/:-@[-`{-~])|&(#(?:\\d{1,7}|x[\\da-f]{1,6})|[\\da-z]{1,31});/gi\n\n/**\n * Decode markdown strings (which occur in places such as fenced code info\n * strings, destinations, labels, and titles).\n *\n * The “string” content type allows character escapes and -references.\n * This decodes those.\n *\n * @param {string} value\n *   Value to decode.\n * @returns {string}\n *   Decoded value.\n */\nexport function decodeString(value) {\n  return value.replace(characterEscapeOrReference, decode)\n}\n\n/**\n * @param {string} $0\n * @param {string} $1\n * @param {string} $2\n * @returns {string}\n */\nfunction decode($0, $1, $2) {\n  if ($1) {\n    // Escape.\n    return $1\n  }\n\n  // Reference.\n  const head = $2.charCodeAt(0)\n  if (head === 35) {\n    const head = $2.charCodeAt(1)\n    const hex = head === 120 || head === 88\n    return decodeNumericCharacterReference($2.slice(hex ? 2 : 1), hex ? 16 : 10)\n  }\n  return decodeNamedCharacterReference($2) || $0\n}\n","/**\n * @typedef {import('mdast').InlineCode} InlineCode\n * @typedef {import('mdast').Table} Table\n * @typedef {import('mdast').TableCell} TableCell\n * @typedef {import('mdast').TableRow} TableRow\n *\n * @typedef {import('markdown-table').Options} MarkdownTableOptions\n *\n * @typedef {import('mdast-util-from-markdown').CompileContext} CompileContext\n * @typedef {import('mdast-util-from-markdown').Extension} FromMarkdownExtension\n * @typedef {import('mdast-util-from-markdown').Handle} FromMarkdownHandle\n *\n * @typedef {import('mdast-util-to-markdown').Options} ToMarkdownExtension\n * @typedef {import('mdast-util-to-markdown').Handle} ToMarkdownHandle\n * @typedef {import('mdast-util-to-markdown').State} State\n * @typedef {import('mdast-util-to-markdown').Info} Info\n */\n\n/**\n * @typedef Options\n *   Configuration.\n * @property {boolean | null | undefined} [tableCellPadding=true]\n *   Whether to add a space of padding between delimiters and cells (default:\n *   `true`).\n * @property {boolean | null | undefined} [tablePipeAlign=true]\n *   Whether to align the delimiters (default: `true`).\n * @property {MarkdownTableOptions['stringLength'] | null | undefined} [stringLength]\n *   Function to detect the length of table cell content, used when aligning\n *   the delimiters between cells (optional).\n */\n\nimport {ok as assert} from 'devlop'\nimport {markdownTable} from 'markdown-table'\nimport {defaultHandlers} from 'mdast-util-to-markdown'\n\n/**\n * Create an extension for `mdast-util-from-markdown` to enable GFM tables in\n * markdown.\n *\n * @returns {FromMarkdownExtension}\n *   Extension for `mdast-util-from-markdown` to enable GFM tables.\n */\nexport function gfmTableFromMarkdown() {\n  return {\n    enter: {\n      table: enterTable,\n      tableData: enterCell,\n      tableHeader: enterCell,\n      tableRow: enterRow\n    },\n    exit: {\n      codeText: exitCodeText,\n      table: exitTable,\n      tableData: exit,\n      tableHeader: exit,\n      tableRow: exit\n    }\n  }\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction enterTable(token) {\n  const align = token._align\n  assert(align, 'expected `_align` on table')\n  this.enter(\n    {\n      type: 'table',\n      align: align.map(function (d) {\n        return d === 'none' ? null : d\n      }),\n      children: []\n    },\n    token\n  )\n  this.data.inTable = true\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction exitTable(token) {\n  this.exit(token)\n  this.data.inTable = undefined\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction enterRow(token) {\n  this.enter({type: 'tableRow', children: []}, token)\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction exit(token) {\n  this.exit(token)\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction enterCell(token) {\n  this.enter({type: 'tableCell', children: []}, token)\n}\n\n// Overwrite the default code text data handler to unescape escaped pipes when\n// they are in tables.\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction exitCodeText(token) {\n  let value = this.resume()\n\n  if (this.data.inTable) {\n    value = value.replace(/\\\\([\\\\|])/g, replace)\n  }\n\n  const node = this.stack[this.stack.length - 1]\n  assert(node.type === 'inlineCode')\n  node.value = value\n  this.exit(token)\n}\n\n/**\n * @param {string} $0\n * @param {string} $1\n * @returns {string}\n */\nfunction replace($0, $1) {\n  // Pipes work, backslashes don’t (but can’t escape pipes).\n  return $1 === '|' ? $1 : $0\n}\n\n/**\n * Create an extension for `mdast-util-to-markdown` to enable GFM tables in\n * markdown.\n *\n * @param {Options | null | undefined} [options]\n *   Configuration.\n * @returns {ToMarkdownExtension}\n *   Extension for `mdast-util-to-markdown` to enable GFM tables.\n */\nexport function gfmTableToMarkdown(options) {\n  const settings = options || {}\n  const padding = settings.tableCellPadding\n  const alignDelimiters = settings.tablePipeAlign\n  const stringLength = settings.stringLength\n  const around = padding ? ' ' : '|'\n\n  return {\n    unsafe: [\n      {character: '\\r', inConstruct: 'tableCell'},\n      {character: '\\n', inConstruct: 'tableCell'},\n      // A pipe, when followed by a tab or space (padding), or a dash or colon\n      // (unpadded delimiter row), could result in a table.\n      {atBreak: true, character: '|', after: '[\\t :-]'},\n      // A pipe in a cell must be encoded.\n      {character: '|', inConstruct: 'tableCell'},\n      // A colon must be followed by a dash, in which case it could start a\n      // delimiter row.\n      {atBreak: true, character: ':', after: '-'},\n      // A delimiter row can also start with a dash, when followed by more\n      // dashes, a colon, or a pipe.\n      // This is a stricter version than the built in check for lists, thematic\n      // breaks, and setex heading underlines though:\n      // <https://github.com/syntax-tree/mdast-util-to-markdown/blob/51a2038/lib/unsafe.js#L57>\n      {atBreak: true, character: '-', after: '[:|-]'}\n    ],\n    handlers: {\n      inlineCode: inlineCodeWithTable,\n      table: handleTable,\n      tableCell: handleTableCell,\n      tableRow: handleTableRow\n    }\n  }\n\n  /**\n   * @type {ToMarkdownHandle}\n   * @param {Table} node\n   */\n  function handleTable(node, _, state, info) {\n    return serializeData(handleTableAsData(node, state, info), node.align)\n  }\n\n  /**\n   * This function isn’t really used normally, because we handle rows at the\n   * table level.\n   * But, if someone passes in a table row, this ensures we make somewhat sense.\n   *\n   * @type {ToMarkdownHandle}\n   * @param {TableRow} node\n   */\n  function handleTableRow(node, _, state, info) {\n    const row = handleTableRowAsData(node, state, info)\n    const value = serializeData([row])\n    // `markdown-table` will always add an align row\n    return value.slice(0, value.indexOf('\\n'))\n  }\n\n  /**\n   * @type {ToMarkdownHandle}\n   * @param {TableCell} node\n   */\n  function handleTableCell(node, _, state, info) {\n    const exit = state.enter('tableCell')\n    const subexit = state.enter('phrasing')\n    const value = state.containerPhrasing(node, {\n      ...info,\n      before: around,\n      after: around\n    })\n    subexit()\n    exit()\n    return value\n  }\n\n  /**\n   * @param {Array<Array<string>>} matrix\n   * @param {Array<string | null | undefined> | null | undefined} [align]\n   */\n  function serializeData(matrix, align) {\n    return markdownTable(matrix, {\n      align,\n      // @ts-expect-error: `markdown-table` types should support `null`.\n      alignDelimiters,\n      // @ts-expect-error: `markdown-table` types should support `null`.\n      padding,\n      // @ts-expect-error: `markdown-table` types should support `null`.\n      stringLength\n    })\n  }\n\n  /**\n   * @param {Table} node\n   * @param {State} state\n   * @param {Info} info\n   */\n  function handleTableAsData(node, state, info) {\n    const children = node.children\n    let index = -1\n    /** @type {Array<Array<string>>} */\n    const result = []\n    const subexit = state.enter('table')\n\n    while (++index < children.length) {\n      result[index] = handleTableRowAsData(children[index], state, info)\n    }\n\n    subexit()\n\n    return result\n  }\n\n  /**\n   * @param {TableRow} node\n   * @param {State} state\n   * @param {Info} info\n   */\n  function handleTableRowAsData(node, state, info) {\n    const children = node.children\n    let index = -1\n    /** @type {Array<string>} */\n    const result = []\n    const subexit = state.enter('tableRow')\n\n    while (++index < children.length) {\n      // Note: the positional info as used here is incorrect.\n      // Making it correct would be impossible due to aligning cells?\n      // And it would need copy/pasting `markdown-table` into this project.\n      result[index] = handleTableCell(children[index], node, state, info)\n    }\n\n    subexit()\n\n    return result\n  }\n\n  /**\n   * @type {ToMarkdownHandle}\n   * @param {InlineCode} node\n   */\n  function inlineCodeWithTable(node, parent, state) {\n    let value = defaultHandlers.inlineCode(node, parent, state)\n\n    if (state.stack.includes('tableCell')) {\n      value = value.replace(/\\|/g, '\\\\$&')\n    }\n\n    return value\n  }\n}\n","/**\n * @typedef {import('mdast').ListItem} ListItem\n * @typedef {import('mdast').Paragraph} Paragraph\n * @typedef {import('mdast-util-from-markdown').CompileContext} CompileContext\n * @typedef {import('mdast-util-from-markdown').Extension} FromMarkdownExtension\n * @typedef {import('mdast-util-from-markdown').Handle} FromMarkdownHandle\n * @typedef {import('mdast-util-to-markdown').Options} ToMarkdownExtension\n * @typedef {import('mdast-util-to-markdown').Handle} ToMarkdownHandle\n */\n\nimport {ok as assert} from 'devlop'\nimport {defaultHandlers} from 'mdast-util-to-markdown'\n\n/**\n * Create an extension for `mdast-util-from-markdown` to enable GFM task\n * list items in markdown.\n *\n * @returns {FromMarkdownExtension}\n *   Extension for `mdast-util-from-markdown` to enable GFM task list items.\n */\nexport function gfmTaskListItemFromMarkdown() {\n  return {\n    exit: {\n      taskListCheckValueChecked: exitCheck,\n      taskListCheckValueUnchecked: exitCheck,\n      paragraph: exitParagraphWithTaskListItem\n    }\n  }\n}\n\n/**\n * Create an extension for `mdast-util-to-markdown` to enable GFM task list\n * items in markdown.\n *\n * @returns {ToMarkdownExtension}\n *   Extension for `mdast-util-to-markdown` to enable GFM task list items.\n */\nexport function gfmTaskListItemToMarkdown() {\n  return {\n    unsafe: [{atBreak: true, character: '-', after: '[:|-]'}],\n    handlers: {listItem: listItemWithTaskListItem}\n  }\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction exitCheck(token) {\n  // We’re always in a paragraph, in a list item.\n  const node = this.stack[this.stack.length - 2]\n  assert(node.type === 'listItem')\n  node.checked = token.type === 'taskListCheckValueChecked'\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction exitParagraphWithTaskListItem(token) {\n  const parent = this.stack[this.stack.length - 2]\n\n  if (\n    parent &&\n    parent.type === 'listItem' &&\n    typeof parent.checked === 'boolean'\n  ) {\n    const node = this.stack[this.stack.length - 1]\n    assert(node.type === 'paragraph')\n    const head = node.children[0]\n\n    if (head && head.type === 'text') {\n      const siblings = parent.children\n      let index = -1\n      /** @type {Paragraph | undefined} */\n      let firstParaghraph\n\n      while (++index < siblings.length) {\n        const sibling = siblings[index]\n        if (sibling.type === 'paragraph') {\n          firstParaghraph = sibling\n          break\n        }\n      }\n\n      if (firstParaghraph === node) {\n        // Must start with a space or a tab.\n        head.value = head.value.slice(1)\n\n        if (head.value.length === 0) {\n          node.children.shift()\n        } else if (\n          node.position &&\n          head.position &&\n          typeof head.position.start.offset === 'number'\n        ) {\n          head.position.start.column++\n          head.position.start.offset++\n          node.position.start = Object.assign({}, head.position.start)\n        }\n      }\n    }\n  }\n\n  this.exit(token)\n}\n\n/**\n * @type {ToMarkdownHandle}\n * @param {ListItem} node\n */\nfunction listItemWithTaskListItem(node, parent, state, info) {\n  const head = node.children[0]\n  const checkable =\n    typeof node.checked === 'boolean' && head && head.type === 'paragraph'\n  const checkbox = '[' + (node.checked ? 'x' : ' ') + '] '\n  const tracker = state.createTracker(info)\n\n  if (checkable) {\n    tracker.move(checkbox)\n  }\n\n  let value = defaultHandlers.listItem(node, parent, state, {\n    ...info,\n    ...tracker.current()\n  })\n\n  if (checkable) {\n    value = value.replace(/^(?:[*+-]|\\d+\\.)([\\r\\n]| {1,3})/, check)\n  }\n\n  return value\n\n  /**\n   * @param {string} $0\n   * @returns {string}\n   */\n  function check($0) {\n    return $0 + checkbox\n  }\n}\n","/**\n * @typedef {import('mdast-util-from-markdown').Extension} FromMarkdownExtension\n * @typedef {import('mdast-util-to-markdown').Options} ToMarkdownExtension\n */\n\n/**\n * @typedef {import('mdast-util-gfm-table').Options} Options\n *   Configuration.\n */\n\nimport {\n  gfmAutolinkLiteralFromMarkdown,\n  gfmAutolinkLiteralToMarkdown\n} from 'mdast-util-gfm-autolink-literal'\nimport {\n  gfmFootnoteFromMarkdown,\n  gfmFootnoteToMarkdown\n} from 'mdast-util-gfm-footnote'\nimport {\n  gfmStrikethroughFromMarkdown,\n  gfmStrikethroughToMarkdown\n} from 'mdast-util-gfm-strikethrough'\nimport {gfmTableFromMarkdown, gfmTableToMarkdown} from 'mdast-util-gfm-table'\nimport {\n  gfmTaskListItemFromMarkdown,\n  gfmTaskListItemToMarkdown\n} from 'mdast-util-gfm-task-list-item'\n\n/**\n * Create an extension for `mdast-util-from-markdown` to enable GFM (autolink\n * literals, footnotes, strikethrough, tables, tasklists).\n *\n * @returns {Array<FromMarkdownExtension>}\n *   Extension for `mdast-util-from-markdown` to enable GFM (autolink literals,\n *   footnotes, strikethrough, tables, tasklists).\n */\nexport function gfmFromMarkdown() {\n  return [\n    gfmAutolinkLiteralFromMarkdown(),\n    gfmFootnoteFromMarkdown(),\n    gfmStrikethroughFromMarkdown(),\n    gfmTableFromMarkdown(),\n    gfmTaskListItemFromMarkdown()\n  ]\n}\n\n/**\n * Create an extension for `mdast-util-to-markdown` to enable GFM (autolink\n * literals, footnotes, strikethrough, tables, tasklists).\n *\n * @param {Options | null | undefined} [options]\n *   Configuration.\n * @returns {ToMarkdownExtension}\n *   Extension for `mdast-util-to-markdown` to enable GFM (autolink literals,\n *   footnotes, strikethrough, tables, tasklists).\n */\nexport function gfmToMarkdown(options) {\n  return {\n    extensions: [\n      gfmAutolinkLiteralToMarkdown(),\n      gfmFootnoteToMarkdown(),\n      gfmStrikethroughToMarkdown(),\n      gfmTableToMarkdown(options),\n      gfmTaskListItemToMarkdown()\n    ]\n  }\n}\n","/**\n * Like `Array#splice`, but smarter for giant arrays.\n *\n * `Array#splice` takes all items to be inserted as individual argument which\n * causes a stack overflow in V8 when trying to insert 100k items for instance.\n *\n * Otherwise, this does not return the removed items, and takes `items` as an\n * array instead of rest parameters.\n *\n * @template {unknown} T\n *   Item type.\n * @param {Array<T>} list\n *   List to operate on.\n * @param {number} start\n *   Index to remove/insert at (can be negative).\n * @param {number} remove\n *   Number of items to remove.\n * @param {Array<T>} items\n *   Items to inject into `list`.\n * @returns {undefined}\n *   Nothing.\n */\nexport function splice(list, start, remove, items) {\n  const end = list.length\n  let chunkStart = 0\n  /** @type {Array<unknown>} */\n  let parameters\n\n  // Make start between zero and `end` (included).\n  if (start < 0) {\n    start = -start > end ? 0 : end + start\n  } else {\n    start = start > end ? end : start\n  }\n  remove = remove > 0 ? remove : 0\n\n  // No need to chunk the items if there’s only a couple (10k) items.\n  if (items.length < 10000) {\n    parameters = Array.from(items)\n    parameters.unshift(start, remove)\n    // @ts-expect-error Hush, it’s fine.\n    list.splice(...parameters)\n  } else {\n    // Delete `remove` items starting from `start`\n    if (remove) list.splice(start, remove)\n\n    // Insert the items in chunks to not cause stack overflows.\n    while (chunkStart < items.length) {\n      parameters = items.slice(chunkStart, chunkStart + 10000)\n      parameters.unshift(start, 0)\n      // @ts-expect-error Hush, it’s fine.\n      list.splice(...parameters)\n      chunkStart += 10000\n      start += 10000\n    }\n  }\n}\n\n/**\n * Append `items` (an array) at the end of `list` (another array).\n * When `list` was empty, returns `items` instead.\n *\n * This prevents a potentially expensive operation when `list` is empty,\n * and adds items in batches to prevent V8 from hanging.\n *\n * @template {unknown} T\n *   Item type.\n * @param {Array<T>} list\n *   List to operate on.\n * @param {Array<T>} items\n *   Items to add to `list`.\n * @returns {Array<T>}\n *   Either `list` or `items`.\n */\nexport function push(list, items) {\n  if (list.length > 0) {\n    splice(list, list.length, 0, items)\n    return list\n  }\n  return items\n}\n","/**\n * @typedef {import('micromark-util-types').Extension} Extension\n * @typedef {import('micromark-util-types').Handles} Handles\n * @typedef {import('micromark-util-types').HtmlExtension} HtmlExtension\n * @typedef {import('micromark-util-types').NormalizedExtension} NormalizedExtension\n */\n\nimport {splice} from 'micromark-util-chunked'\n\nconst hasOwnProperty = {}.hasOwnProperty\n\n/**\n * Combine multiple syntax extensions into one.\n *\n * @param {Array<Extension>} extensions\n *   List of syntax extensions.\n * @returns {NormalizedExtension}\n *   A single combined extension.\n */\nexport function combineExtensions(extensions) {\n  /** @type {NormalizedExtension} */\n  const all = {}\n  let index = -1\n\n  while (++index < extensions.length) {\n    syntaxExtension(all, extensions[index])\n  }\n\n  return all\n}\n\n/**\n * Merge `extension` into `all`.\n *\n * @param {NormalizedExtension} all\n *   Extension to merge into.\n * @param {Extension} extension\n *   Extension to merge.\n * @returns {undefined}\n */\nfunction syntaxExtension(all, extension) {\n  /** @type {keyof Extension} */\n  let hook\n\n  for (hook in extension) {\n    const maybe = hasOwnProperty.call(all, hook) ? all[hook] : undefined\n    /** @type {Record<string, unknown>} */\n    const left = maybe || (all[hook] = {})\n    /** @type {Record<string, unknown> | undefined} */\n    const right = extension[hook]\n    /** @type {string} */\n    let code\n\n    if (right) {\n      for (code in right) {\n        if (!hasOwnProperty.call(left, code)) left[code] = []\n        const value = right[code]\n        constructs(\n          // @ts-expect-error Looks like a list.\n          left[code],\n          Array.isArray(value) ? value : value ? [value] : []\n        )\n      }\n    }\n  }\n}\n\n/**\n * Merge `list` into `existing` (both lists of constructs).\n * Mutates `existing`.\n *\n * @param {Array<unknown>} existing\n * @param {Array<unknown>} list\n * @returns {undefined}\n */\nfunction constructs(existing, list) {\n  let index = -1\n  /** @type {Array<unknown>} */\n  const before = []\n\n  while (++index < list.length) {\n    // @ts-expect-error Looks like an object.\n    ;(list[index].add === 'after' ? existing : before).push(list[index])\n  }\n\n  splice(existing, 0, 0, before)\n}\n\n/**\n * Combine multiple HTML extensions into one.\n *\n * @param {Array<HtmlExtension>} htmlExtensions\n *   List of HTML extensions.\n * @returns {HtmlExtension}\n *   A single combined HTML extension.\n */\nexport function combineHtmlExtensions(htmlExtensions) {\n  /** @type {HtmlExtension} */\n  const handlers = {}\n  let index = -1\n\n  while (++index < htmlExtensions.length) {\n    htmlExtension(handlers, htmlExtensions[index])\n  }\n\n  return handlers\n}\n\n/**\n * Merge `extension` into `all`.\n *\n * @param {HtmlExtension} all\n *   Extension to merge into.\n * @param {HtmlExtension} extension\n *   Extension to merge.\n * @returns {undefined}\n */\nfunction htmlExtension(all, extension) {\n  /** @type {keyof HtmlExtension} */\n  let hook\n\n  for (hook in extension) {\n    const maybe = hasOwnProperty.call(all, hook) ? all[hook] : undefined\n    const left = maybe || (all[hook] = {})\n    const right = extension[hook]\n    /** @type {keyof Handles} */\n    let type\n\n    if (right) {\n      for (type in right) {\n        // @ts-expect-error assume document vs regular handler are managed correctly.\n        left[type] = right[type]\n      }\n    }\n  }\n}\n","/**\n * @import {Code, ConstructRecord, Event, Extension, Previous, State, TokenizeContext, Tokenizer} from 'micromark-util-types'\n */\n\nimport { asciiAlpha, asciiAlphanumeric, asciiControl, markdownLineEndingOrSpace, unicodePunctuation, unicodeWhitespace } from 'micromark-util-character';\nconst wwwPrefix = {\n  tokenize: tokenizeWwwPrefix,\n  partial: true\n};\nconst domain = {\n  tokenize: tokenizeDomain,\n  partial: true\n};\nconst path = {\n  tokenize: tokenizePath,\n  partial: true\n};\nconst trail = {\n  tokenize: tokenizeTrail,\n  partial: true\n};\nconst emailDomainDotTrail = {\n  tokenize: tokenizeEmailDomainDotTrail,\n  partial: true\n};\nconst wwwAutolink = {\n  name: 'wwwAutolink',\n  tokenize: tokenizeWwwAutolink,\n  previous: previousWww\n};\nconst protocolAutolink = {\n  name: 'protocolAutolink',\n  tokenize: tokenizeProtocolAutolink,\n  previous: previousProtocol\n};\nconst emailAutolink = {\n  name: 'emailAutolink',\n  tokenize: tokenizeEmailAutolink,\n  previous: previousEmail\n};\n\n/** @type {ConstructRecord} */\nconst text = {};\n\n/**\n * Create an extension for `micromark` to support GitHub autolink literal\n * syntax.\n *\n * @returns {Extension}\n *   Extension for `micromark` that can be passed in `extensions` to enable GFM\n *   autolink literal syntax.\n */\nexport function gfmAutolinkLiteral() {\n  return {\n    text\n  };\n}\n\n/** @type {Code} */\nlet code = 48;\n\n// Add alphanumerics.\nwhile (code < 123) {\n  text[code] = emailAutolink;\n  code++;\n  if (code === 58) code = 65;else if (code === 91) code = 97;\n}\ntext[43] = emailAutolink;\ntext[45] = emailAutolink;\ntext[46] = emailAutolink;\ntext[95] = emailAutolink;\ntext[72] = [emailAutolink, protocolAutolink];\ntext[104] = [emailAutolink, protocolAutolink];\ntext[87] = [emailAutolink, wwwAutolink];\ntext[119] = [emailAutolink, wwwAutolink];\n\n// To do: perform email autolink literals on events, afterwards.\n// That’s where `markdown-rs` and `cmark-gfm` perform it.\n// It should look for `@`, then for atext backwards, and then for a label\n// forwards.\n// To do: `mailto:`, `xmpp:` protocol as prefix.\n\n/**\n * Email autolink literal.\n *\n * ```markdown\n * > | a contact@example.org b\n *       ^^^^^^^^^^^^^^^^^^^\n * ```\n *\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeEmailAutolink(effects, ok, nok) {\n  const self = this;\n  /** @type {boolean | undefined} */\n  let dot;\n  /** @type {boolean} */\n  let data;\n  return start;\n\n  /**\n   * Start of email autolink literal.\n   *\n   * ```markdown\n   * > | a contact@example.org b\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    if (!gfmAtext(code) || !previousEmail.call(self, self.previous) || previousUnbalanced(self.events)) {\n      return nok(code);\n    }\n    effects.enter('literalAutolink');\n    effects.enter('literalAutolinkEmail');\n    return atext(code);\n  }\n\n  /**\n   * In email atext.\n   *\n   * ```markdown\n   * > | a contact@example.org b\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function atext(code) {\n    if (gfmAtext(code)) {\n      effects.consume(code);\n      return atext;\n    }\n    if (code === 64) {\n      effects.consume(code);\n      return emailDomain;\n    }\n    return nok(code);\n  }\n\n  /**\n   * In email domain.\n   *\n   * The reference code is a bit overly complex as it handles the `@`, of which\n   * there may be just one.\n   * Source: <https://github.com/github/cmark-gfm/blob/ef1cfcb/extensions/autolink.c#L318>\n   *\n   * ```markdown\n   * > | a contact@example.org b\n   *               ^\n   * ```\n   *\n   * @type {State}\n   */\n  function emailDomain(code) {\n    // Dot followed by alphanumerical (not `-` or `_`).\n    if (code === 46) {\n      return effects.check(emailDomainDotTrail, emailDomainAfter, emailDomainDot)(code);\n    }\n\n    // Alphanumerical, `-`, and `_`.\n    if (code === 45 || code === 95 || asciiAlphanumeric(code)) {\n      data = true;\n      effects.consume(code);\n      return emailDomain;\n    }\n\n    // To do: `/` if xmpp.\n\n    // Note: normally we’d truncate trailing punctuation from the link.\n    // However, email autolink literals cannot contain any of those markers,\n    // except for `.`, but that can only occur if it isn’t trailing.\n    // So we can ignore truncating!\n    return emailDomainAfter(code);\n  }\n\n  /**\n   * In email domain, on dot that is not a trail.\n   *\n   * ```markdown\n   * > | a contact@example.org b\n   *                      ^\n   * ```\n   *\n   * @type {State}\n   */\n  function emailDomainDot(code) {\n    effects.consume(code);\n    dot = true;\n    return emailDomain;\n  }\n\n  /**\n   * After email domain.\n   *\n   * ```markdown\n   * > | a contact@example.org b\n   *                          ^\n   * ```\n   *\n   * @type {State}\n   */\n  function emailDomainAfter(code) {\n    // Domain must not be empty, must include a dot, and must end in alphabetical.\n    // Source: <https://github.com/github/cmark-gfm/blob/ef1cfcb/extensions/autolink.c#L332>.\n    if (data && dot && asciiAlpha(self.previous)) {\n      effects.exit('literalAutolinkEmail');\n      effects.exit('literalAutolink');\n      return ok(code);\n    }\n    return nok(code);\n  }\n}\n\n/**\n * `www` autolink literal.\n *\n * ```markdown\n * > | a www.example.org b\n *       ^^^^^^^^^^^^^^^\n * ```\n *\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeWwwAutolink(effects, ok, nok) {\n  const self = this;\n  return wwwStart;\n\n  /**\n   * Start of www autolink literal.\n   *\n   * ```markdown\n   * > | www.example.com/a?b#c\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function wwwStart(code) {\n    if (code !== 87 && code !== 119 || !previousWww.call(self, self.previous) || previousUnbalanced(self.events)) {\n      return nok(code);\n    }\n    effects.enter('literalAutolink');\n    effects.enter('literalAutolinkWww');\n    // Note: we *check*, so we can discard the `www.` we parsed.\n    // If it worked, we consider it as a part of the domain.\n    return effects.check(wwwPrefix, effects.attempt(domain, effects.attempt(path, wwwAfter), nok), nok)(code);\n  }\n\n  /**\n   * After a www autolink literal.\n   *\n   * ```markdown\n   * > | www.example.com/a?b#c\n   *                          ^\n   * ```\n   *\n   * @type {State}\n   */\n  function wwwAfter(code) {\n    effects.exit('literalAutolinkWww');\n    effects.exit('literalAutolink');\n    return ok(code);\n  }\n}\n\n/**\n * Protocol autolink literal.\n *\n * ```markdown\n * > | a https://example.org b\n *       ^^^^^^^^^^^^^^^^^^^\n * ```\n *\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeProtocolAutolink(effects, ok, nok) {\n  const self = this;\n  let buffer = '';\n  let seen = false;\n  return protocolStart;\n\n  /**\n   * Start of protocol autolink literal.\n   *\n   * ```markdown\n   * > | https://example.com/a?b#c\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function protocolStart(code) {\n    if ((code === 72 || code === 104) && previousProtocol.call(self, self.previous) && !previousUnbalanced(self.events)) {\n      effects.enter('literalAutolink');\n      effects.enter('literalAutolinkHttp');\n      buffer += String.fromCodePoint(code);\n      effects.consume(code);\n      return protocolPrefixInside;\n    }\n    return nok(code);\n  }\n\n  /**\n   * In protocol.\n   *\n   * ```markdown\n   * > | https://example.com/a?b#c\n   *     ^^^^^\n   * ```\n   *\n   * @type {State}\n   */\n  function protocolPrefixInside(code) {\n    // `5` is size of `https`\n    if (asciiAlpha(code) && buffer.length < 5) {\n      // @ts-expect-error: definitely number.\n      buffer += String.fromCodePoint(code);\n      effects.consume(code);\n      return protocolPrefixInside;\n    }\n    if (code === 58) {\n      const protocol = buffer.toLowerCase();\n      if (protocol === 'http' || protocol === 'https') {\n        effects.consume(code);\n        return protocolSlashesInside;\n      }\n    }\n    return nok(code);\n  }\n\n  /**\n   * In slashes.\n   *\n   * ```markdown\n   * > | https://example.com/a?b#c\n   *           ^^\n   * ```\n   *\n   * @type {State}\n   */\n  function protocolSlashesInside(code) {\n    if (code === 47) {\n      effects.consume(code);\n      if (seen) {\n        return afterProtocol;\n      }\n      seen = true;\n      return protocolSlashesInside;\n    }\n    return nok(code);\n  }\n\n  /**\n   * After protocol, before domain.\n   *\n   * ```markdown\n   * > | https://example.com/a?b#c\n   *             ^\n   * ```\n   *\n   * @type {State}\n   */\n  function afterProtocol(code) {\n    // To do: this is different from `markdown-rs`:\n    // https://github.com/wooorm/markdown-rs/blob/b3a921c761309ae00a51fe348d8a43adbc54b518/src/construct/gfm_autolink_literal.rs#L172-L182\n    return code === null || asciiControl(code) || markdownLineEndingOrSpace(code) || unicodeWhitespace(code) || unicodePunctuation(code) ? nok(code) : effects.attempt(domain, effects.attempt(path, protocolAfter), nok)(code);\n  }\n\n  /**\n   * After a protocol autolink literal.\n   *\n   * ```markdown\n   * > | https://example.com/a?b#c\n   *                              ^\n   * ```\n   *\n   * @type {State}\n   */\n  function protocolAfter(code) {\n    effects.exit('literalAutolinkHttp');\n    effects.exit('literalAutolink');\n    return ok(code);\n  }\n}\n\n/**\n * `www` prefix.\n *\n * ```markdown\n * > | a www.example.org b\n *       ^^^^\n * ```\n *\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeWwwPrefix(effects, ok, nok) {\n  let size = 0;\n  return wwwPrefixInside;\n\n  /**\n   * In www prefix.\n   *\n   * ```markdown\n   * > | www.example.com\n   *     ^^^^\n   * ```\n   *\n   * @type {State}\n   */\n  function wwwPrefixInside(code) {\n    if ((code === 87 || code === 119) && size < 3) {\n      size++;\n      effects.consume(code);\n      return wwwPrefixInside;\n    }\n    if (code === 46 && size === 3) {\n      effects.consume(code);\n      return wwwPrefixAfter;\n    }\n    return nok(code);\n  }\n\n  /**\n   * After www prefix.\n   *\n   * ```markdown\n   * > | www.example.com\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function wwwPrefixAfter(code) {\n    // If there is *anything*, we can link.\n    return code === null ? nok(code) : ok(code);\n  }\n}\n\n/**\n * Domain.\n *\n * ```markdown\n * > | a https://example.org b\n *               ^^^^^^^^^^^\n * ```\n *\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeDomain(effects, ok, nok) {\n  /** @type {boolean | undefined} */\n  let underscoreInLastSegment;\n  /** @type {boolean | undefined} */\n  let underscoreInLastLastSegment;\n  /** @type {boolean | undefined} */\n  let seen;\n  return domainInside;\n\n  /**\n   * In domain.\n   *\n   * ```markdown\n   * > | https://example.com/a\n   *             ^^^^^^^^^^^\n   * ```\n   *\n   * @type {State}\n   */\n  function domainInside(code) {\n    // Check whether this marker, which is a trailing punctuation\n    // marker, optionally followed by more trailing markers, and then\n    // followed by an end.\n    if (code === 46 || code === 95) {\n      return effects.check(trail, domainAfter, domainAtPunctuation)(code);\n    }\n\n    // GH documents that only alphanumerics (other than `-`, `.`, and `_`) can\n    // occur, which sounds like ASCII only, but they also support `www.點看.com`,\n    // so that’s Unicode.\n    // Instead of some new production for Unicode alphanumerics, markdown\n    // already has that for Unicode punctuation and whitespace, so use those.\n    // Source: <https://github.com/github/cmark-gfm/blob/ef1cfcb/extensions/autolink.c#L12>.\n    if (code === null || markdownLineEndingOrSpace(code) || unicodeWhitespace(code) || code !== 45 && unicodePunctuation(code)) {\n      return domainAfter(code);\n    }\n    seen = true;\n    effects.consume(code);\n    return domainInside;\n  }\n\n  /**\n   * In domain, at potential trailing punctuation, that was not trailing.\n   *\n   * ```markdown\n   * > | https://example.com\n   *                    ^\n   * ```\n   *\n   * @type {State}\n   */\n  function domainAtPunctuation(code) {\n    // There is an underscore in the last segment of the domain\n    if (code === 95) {\n      underscoreInLastSegment = true;\n    }\n    // Otherwise, it’s a `.`: save the last segment underscore in the\n    // penultimate segment slot.\n    else {\n      underscoreInLastLastSegment = underscoreInLastSegment;\n      underscoreInLastSegment = undefined;\n    }\n    effects.consume(code);\n    return domainInside;\n  }\n\n  /**\n   * After domain.\n   *\n   * ```markdown\n   * > | https://example.com/a\n   *                        ^\n   * ```\n   *\n   * @type {State} */\n  function domainAfter(code) {\n    // Note: that’s GH says a dot is needed, but it’s not true:\n    // <https://github.com/github/cmark-gfm/issues/279>\n    if (underscoreInLastLastSegment || underscoreInLastSegment || !seen) {\n      return nok(code);\n    }\n    return ok(code);\n  }\n}\n\n/**\n * Path.\n *\n * ```markdown\n * > | a https://example.org/stuff b\n *                          ^^^^^^\n * ```\n *\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizePath(effects, ok) {\n  let sizeOpen = 0;\n  let sizeClose = 0;\n  return pathInside;\n\n  /**\n   * In path.\n   *\n   * ```markdown\n   * > | https://example.com/a\n   *                        ^^\n   * ```\n   *\n   * @type {State}\n   */\n  function pathInside(code) {\n    if (code === 40) {\n      sizeOpen++;\n      effects.consume(code);\n      return pathInside;\n    }\n\n    // To do: `markdown-rs` also needs this.\n    // If this is a paren, and there are less closings than openings,\n    // we don’t check for a trail.\n    if (code === 41 && sizeClose < sizeOpen) {\n      return pathAtPunctuation(code);\n    }\n\n    // Check whether this trailing punctuation marker is optionally\n    // followed by more trailing markers, and then followed\n    // by an end.\n    if (code === 33 || code === 34 || code === 38 || code === 39 || code === 41 || code === 42 || code === 44 || code === 46 || code === 58 || code === 59 || code === 60 || code === 63 || code === 93 || code === 95 || code === 126) {\n      return effects.check(trail, ok, pathAtPunctuation)(code);\n    }\n    if (code === null || markdownLineEndingOrSpace(code) || unicodeWhitespace(code)) {\n      return ok(code);\n    }\n    effects.consume(code);\n    return pathInside;\n  }\n\n  /**\n   * In path, at potential trailing punctuation, that was not trailing.\n   *\n   * ```markdown\n   * > | https://example.com/a\"b\n   *                          ^\n   * ```\n   *\n   * @type {State}\n   */\n  function pathAtPunctuation(code) {\n    // Count closing parens.\n    if (code === 41) {\n      sizeClose++;\n    }\n    effects.consume(code);\n    return pathInside;\n  }\n}\n\n/**\n * Trail.\n *\n * This calls `ok` if this *is* the trail, followed by an end, which means\n * the entire trail is not part of the link.\n * It calls `nok` if this *is* part of the link.\n *\n * ```markdown\n * > | https://example.com\").\n *                        ^^^\n * ```\n *\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeTrail(effects, ok, nok) {\n  return trail;\n\n  /**\n   * In trail of domain or path.\n   *\n   * ```markdown\n   * > | https://example.com\").\n   *                        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function trail(code) {\n    // Regular trailing punctuation.\n    if (code === 33 || code === 34 || code === 39 || code === 41 || code === 42 || code === 44 || code === 46 || code === 58 || code === 59 || code === 63 || code === 95 || code === 126) {\n      effects.consume(code);\n      return trail;\n    }\n\n    // `&` followed by one or more alphabeticals and then a `;`, is\n    // as a whole considered as trailing punctuation.\n    // In all other cases, it is considered as continuation of the URL.\n    if (code === 38) {\n      effects.consume(code);\n      return trailCharacterReferenceStart;\n    }\n\n    // Needed because we allow literals after `[`, as we fix:\n    // <https://github.com/github/cmark-gfm/issues/278>.\n    // Check that it is not followed by `(` or `[`.\n    if (code === 93) {\n      effects.consume(code);\n      return trailBracketAfter;\n    }\n    if (\n    // `<` is an end.\n    code === 60 ||\n    // So is whitespace.\n    code === null || markdownLineEndingOrSpace(code) || unicodeWhitespace(code)) {\n      return ok(code);\n    }\n    return nok(code);\n  }\n\n  /**\n   * In trail, after `]`.\n   *\n   * > 👉 **Note**: this deviates from `cmark-gfm` to fix a bug.\n   * > See end of <https://github.com/github/cmark-gfm/issues/278> for more.\n   *\n   * ```markdown\n   * > | https://example.com](\n   *                         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function trailBracketAfter(code) {\n    // Whitespace or something that could start a resource or reference is the end.\n    // Switch back to trail otherwise.\n    if (code === null || code === 40 || code === 91 || markdownLineEndingOrSpace(code) || unicodeWhitespace(code)) {\n      return ok(code);\n    }\n    return trail(code);\n  }\n\n  /**\n   * In character-reference like trail, after `&`.\n   *\n   * ```markdown\n   * > | https://example.com&amp;).\n   *                         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function trailCharacterReferenceStart(code) {\n    // When non-alpha, it’s not a trail.\n    return asciiAlpha(code) ? trailCharacterReferenceInside(code) : nok(code);\n  }\n\n  /**\n   * In character-reference like trail.\n   *\n   * ```markdown\n   * > | https://example.com&amp;).\n   *                         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function trailCharacterReferenceInside(code) {\n    // Switch back to trail if this is well-formed.\n    if (code === 59) {\n      effects.consume(code);\n      return trail;\n    }\n    if (asciiAlpha(code)) {\n      effects.consume(code);\n      return trailCharacterReferenceInside;\n    }\n\n    // It’s not a trail.\n    return nok(code);\n  }\n}\n\n/**\n * Dot in email domain trail.\n *\n * This calls `ok` if this *is* the trail, followed by an end, which means\n * the trail is not part of the link.\n * It calls `nok` if this *is* part of the link.\n *\n * ```markdown\n * > | contact@example.org.\n *                        ^\n * ```\n *\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeEmailDomainDotTrail(effects, ok, nok) {\n  return start;\n\n  /**\n   * Dot.\n   *\n   * ```markdown\n   * > | contact@example.org.\n   *                    ^   ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    // Must be dot.\n    effects.consume(code);\n    return after;\n  }\n\n  /**\n   * After dot.\n   *\n   * ```markdown\n   * > | contact@example.org.\n   *                     ^   ^\n   * ```\n   *\n   * @type {State}\n   */\n  function after(code) {\n    // Not a trail if alphanumeric.\n    return asciiAlphanumeric(code) ? nok(code) : ok(code);\n  }\n}\n\n/**\n * See:\n * <https://github.com/github/cmark-gfm/blob/ef1cfcb/extensions/autolink.c#L156>.\n *\n * @type {Previous}\n */\nfunction previousWww(code) {\n  return code === null || code === 40 || code === 42 || code === 95 || code === 91 || code === 93 || code === 126 || markdownLineEndingOrSpace(code);\n}\n\n/**\n * See:\n * <https://github.com/github/cmark-gfm/blob/ef1cfcb/extensions/autolink.c#L214>.\n *\n * @type {Previous}\n */\nfunction previousProtocol(code) {\n  return !asciiAlpha(code);\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Previous}\n */\nfunction previousEmail(code) {\n  // Do not allow a slash “inside” atext.\n  // The reference code is a bit weird, but that’s what it results in.\n  // Source: <https://github.com/github/cmark-gfm/blob/ef1cfcb/extensions/autolink.c#L307>.\n  // Other than slash, every preceding character is allowed.\n  return !(code === 47 || gfmAtext(code));\n}\n\n/**\n * @param {Code} code\n * @returns {boolean}\n */\nfunction gfmAtext(code) {\n  return code === 43 || code === 45 || code === 46 || code === 95 || asciiAlphanumeric(code);\n}\n\n/**\n * @param {Array<Event>} events\n * @returns {boolean}\n */\nfunction previousUnbalanced(events) {\n  let index = events.length;\n  let result = false;\n  while (index--) {\n    const token = events[index][1];\n    if ((token.type === 'labelLink' || token.type === 'labelImage') && !token._balanced) {\n      result = true;\n      break;\n    }\n\n    // If we’ve seen this token, and it was marked as not having any unbalanced\n    // bracket before it, we can exit.\n    if (token._gfmAutolinkLiteralWalkedInto) {\n      result = false;\n      break;\n    }\n  }\n  if (events.length > 0 && !result) {\n    // Mark the last token as “walked into” w/o finding\n    // anything.\n    events[events.length - 1][1]._gfmAutolinkLiteralWalkedInto = true;\n  }\n  return result;\n}","import {asciiAlphanumeric} from 'micromark-util-character'\nimport {encode} from 'micromark-util-encode'\n/**\n * Make a value safe for injection as a URL.\n *\n * This encodes unsafe characters with percent-encoding and skips already\n * encoded sequences (see `normalizeUri`).\n * Further unsafe characters are encoded as character references (see\n * `micromark-util-encode`).\n *\n * A regex of allowed protocols can be given, in which case the URL is\n * sanitized.\n * For example, `/^(https?|ircs?|mailto|xmpp)$/i` can be used for `a[href]`, or\n * `/^https?$/i` for `img[src]` (this is what `github.com` allows).\n * If the URL includes an unknown protocol (one not matched by `protocol`, such\n * as a dangerous example, `javascript:`), the value is ignored.\n *\n * @param {string | null | undefined} url\n *   URI to sanitize.\n * @param {RegExp | null | undefined} [protocol]\n *   Allowed protocols.\n * @returns {string}\n *   Sanitized URI.\n */\nexport function sanitizeUri(url, protocol) {\n  const value = encode(normalizeUri(url || ''))\n  if (!protocol) {\n    return value\n  }\n  const colon = value.indexOf(':')\n  const questionMark = value.indexOf('?')\n  const numberSign = value.indexOf('#')\n  const slash = value.indexOf('/')\n  if (\n    // If there is no protocol, it’s relative.\n    colon < 0 ||\n    // If the first colon is after a `?`, `#`, or `/`, it’s not a protocol.\n    (slash > -1 && colon > slash) ||\n    (questionMark > -1 && colon > questionMark) ||\n    (numberSign > -1 && colon > numberSign) ||\n    // It is a protocol, it should be allowed.\n    protocol.test(value.slice(0, colon))\n  ) {\n    return value\n  }\n  return ''\n}\n\n/**\n * Normalize a URL.\n *\n * Encode unsafe characters with percent-encoding, skipping already encoded\n * sequences.\n *\n * @param {string} value\n *   URI to normalize.\n * @returns {string}\n *   Normalized URI.\n */\nexport function normalizeUri(value) {\n  /** @type {Array<string>} */\n  const result = []\n  let index = -1\n  let start = 0\n  let skip = 0\n  while (++index < value.length) {\n    const code = value.charCodeAt(index)\n    /** @type {string} */\n    let replace = ''\n\n    // A correct percent encoded value.\n    if (\n      code === 37 &&\n      asciiAlphanumeric(value.charCodeAt(index + 1)) &&\n      asciiAlphanumeric(value.charCodeAt(index + 2))\n    ) {\n      skip = 2\n    }\n    // ASCII.\n    else if (code < 128) {\n      if (!/[!#$&-;=?-Z_a-z~]/.test(String.fromCharCode(code))) {\n        replace = String.fromCharCode(code)\n      }\n    }\n    // Astral.\n    else if (code > 55_295 && code < 57_344) {\n      const next = value.charCodeAt(index + 1)\n\n      // A correct surrogate pair.\n      if (code < 56_320 && next > 56_319 && next < 57_344) {\n        replace = String.fromCharCode(code, next)\n        skip = 1\n      }\n      // Lone surrogate.\n      else {\n        replace = '\\uFFFD'\n      }\n    }\n    // Unicode.\n    else {\n      replace = String.fromCharCode(code)\n    }\n    if (replace) {\n      result.push(value.slice(start, index), encodeURIComponent(replace))\n      start = index + skip + 1\n      replace = ''\n    }\n    if (skip) {\n      index += skip\n      skip = 0\n    }\n  }\n  return result.join('') + value.slice(start)\n}\n","/**\n * @typedef {import('micromark-util-types').Code} Code\n */\n\nimport {\n  markdownLineEndingOrSpace,\n  unicodePunctuation,\n  unicodeWhitespace\n} from 'micromark-util-character'\n/**\n * Classify whether a code represents whitespace, punctuation, or something\n * else.\n *\n * Used for attention (emphasis, strong), whose sequences can open or close\n * based on the class of surrounding characters.\n *\n * > 👉 **Note**: eof (`null`) is seen as whitespace.\n *\n * @param {Code} code\n *   Code.\n * @returns {typeof constants.characterGroupWhitespace | typeof constants.characterGroupPunctuation | undefined}\n *   Group.\n */\nexport function classifyCharacter(code) {\n  if (\n    code === null ||\n    markdownLineEndingOrSpace(code) ||\n    unicodeWhitespace(code)\n  ) {\n    return 1\n  }\n  if (unicodePunctuation(code)) {\n    return 2\n  }\n}\n","/**\n * @typedef {import('micromark-util-types').Event} Event\n * @typedef {import('micromark-util-types').Resolver} Resolver\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n */\n\n/**\n * Call all `resolveAll`s.\n *\n * @param {Array<{resolveAll?: Resolver | undefined}>} constructs\n *   List of constructs, optionally with `resolveAll`s.\n * @param {Array<Event>} events\n *   List of events.\n * @param {TokenizeContext} context\n *   Context used by `tokenize`.\n * @returns {Array<Event>}\n *   Changed events.\n */\nexport function resolveAll(constructs, events, context) {\n  /** @type {Array<Resolver>} */\n  const called = []\n  let index = -1\n\n  while (++index < constructs.length) {\n    const resolve = constructs[index].resolveAll\n\n    if (resolve && !called.includes(resolve)) {\n      events = resolve(events, context)\n      called.push(resolve)\n    }\n  }\n\n  return events\n}\n","/**\n * @typedef {import('micromark-util-types').Code} Code\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').Event} Event\n * @typedef {import('micromark-util-types').Point} Point\n * @typedef {import('micromark-util-types').Resolver} Resolver\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').Token} Token\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\nimport { push, splice } from 'micromark-util-chunked';\nimport { classifyCharacter } from 'micromark-util-classify-character';\nimport { resolveAll } from 'micromark-util-resolve-all';\n/** @type {Construct} */\nexport const attention = {\n  name: 'attention',\n  tokenize: tokenizeAttention,\n  resolveAll: resolveAllAttention\n};\n\n/**\n * Take all events and resolve attention to emphasis or strong.\n *\n * @type {Resolver}\n */\n// eslint-disable-next-line complexity\nfunction resolveAllAttention(events, context) {\n  let index = -1;\n  /** @type {number} */\n  let open;\n  /** @type {Token} */\n  let group;\n  /** @type {Token} */\n  let text;\n  /** @type {Token} */\n  let openingSequence;\n  /** @type {Token} */\n  let closingSequence;\n  /** @type {number} */\n  let use;\n  /** @type {Array<Event>} */\n  let nextEvents;\n  /** @type {number} */\n  let offset;\n\n  // Walk through all events.\n  //\n  // Note: performance of this is fine on an mb of normal markdown, but it’s\n  // a bottleneck for malicious stuff.\n  while (++index < events.length) {\n    // Find a token that can close.\n    if (events[index][0] === 'enter' && events[index][1].type === 'attentionSequence' && events[index][1]._close) {\n      open = index;\n\n      // Now walk back to find an opener.\n      while (open--) {\n        // Find a token that can open the closer.\n        if (events[open][0] === 'exit' && events[open][1].type === 'attentionSequence' && events[open][1]._open &&\n        // If the markers are the same:\n        context.sliceSerialize(events[open][1]).charCodeAt(0) === context.sliceSerialize(events[index][1]).charCodeAt(0)) {\n          // If the opening can close or the closing can open,\n          // and the close size *is not* a multiple of three,\n          // but the sum of the opening and closing size *is* multiple of three,\n          // then don’t match.\n          if ((events[open][1]._close || events[index][1]._open) && (events[index][1].end.offset - events[index][1].start.offset) % 3 && !((events[open][1].end.offset - events[open][1].start.offset + events[index][1].end.offset - events[index][1].start.offset) % 3)) {\n            continue;\n          }\n\n          // Number of markers to use from the sequence.\n          use = events[open][1].end.offset - events[open][1].start.offset > 1 && events[index][1].end.offset - events[index][1].start.offset > 1 ? 2 : 1;\n          const start = Object.assign({}, events[open][1].end);\n          const end = Object.assign({}, events[index][1].start);\n          movePoint(start, -use);\n          movePoint(end, use);\n          openingSequence = {\n            type: use > 1 ? \"strongSequence\" : \"emphasisSequence\",\n            start,\n            end: Object.assign({}, events[open][1].end)\n          };\n          closingSequence = {\n            type: use > 1 ? \"strongSequence\" : \"emphasisSequence\",\n            start: Object.assign({}, events[index][1].start),\n            end\n          };\n          text = {\n            type: use > 1 ? \"strongText\" : \"emphasisText\",\n            start: Object.assign({}, events[open][1].end),\n            end: Object.assign({}, events[index][1].start)\n          };\n          group = {\n            type: use > 1 ? \"strong\" : \"emphasis\",\n            start: Object.assign({}, openingSequence.start),\n            end: Object.assign({}, closingSequence.end)\n          };\n          events[open][1].end = Object.assign({}, openingSequence.start);\n          events[index][1].start = Object.assign({}, closingSequence.end);\n          nextEvents = [];\n\n          // If there are more markers in the opening, add them before.\n          if (events[open][1].end.offset - events[open][1].start.offset) {\n            nextEvents = push(nextEvents, [['enter', events[open][1], context], ['exit', events[open][1], context]]);\n          }\n\n          // Opening.\n          nextEvents = push(nextEvents, [['enter', group, context], ['enter', openingSequence, context], ['exit', openingSequence, context], ['enter', text, context]]);\n\n          // Always populated by defaults.\n\n          // Between.\n          nextEvents = push(nextEvents, resolveAll(context.parser.constructs.insideSpan.null, events.slice(open + 1, index), context));\n\n          // Closing.\n          nextEvents = push(nextEvents, [['exit', text, context], ['enter', closingSequence, context], ['exit', closingSequence, context], ['exit', group, context]]);\n\n          // If there are more markers in the closing, add them after.\n          if (events[index][1].end.offset - events[index][1].start.offset) {\n            offset = 2;\n            nextEvents = push(nextEvents, [['enter', events[index][1], context], ['exit', events[index][1], context]]);\n          } else {\n            offset = 0;\n          }\n          splice(events, open - 1, index - open + 3, nextEvents);\n          index = open + nextEvents.length - offset - 2;\n          break;\n        }\n      }\n    }\n  }\n\n  // Remove remaining sequences.\n  index = -1;\n  while (++index < events.length) {\n    if (events[index][1].type === 'attentionSequence') {\n      events[index][1].type = 'data';\n    }\n  }\n  return events;\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeAttention(effects, ok) {\n  const attentionMarkers = this.parser.constructs.attentionMarkers.null;\n  const previous = this.previous;\n  const before = classifyCharacter(previous);\n\n  /** @type {NonNullable<Code>} */\n  let marker;\n  return start;\n\n  /**\n   * Before a sequence.\n   *\n   * ```markdown\n   * > | **\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    marker = code;\n    effects.enter('attentionSequence');\n    return inside(code);\n  }\n\n  /**\n   * In a sequence.\n   *\n   * ```markdown\n   * > | **\n   *     ^^\n   * ```\n   *\n   * @type {State}\n   */\n  function inside(code) {\n    if (code === marker) {\n      effects.consume(code);\n      return inside;\n    }\n    const token = effects.exit('attentionSequence');\n\n    // To do: next major: move this to resolver, just like `markdown-rs`.\n    const after = classifyCharacter(code);\n\n    // Always populated by defaults.\n\n    const open = !after || after === 2 && before || attentionMarkers.includes(code);\n    const close = !before || before === 2 && after || attentionMarkers.includes(previous);\n    token._open = Boolean(marker === 42 ? open : open && (before || !close));\n    token._close = Boolean(marker === 42 ? close : close && (after || !open));\n    return ok(code);\n  }\n}\n\n/**\n * Move a point a bit.\n *\n * Note: `move` only works inside lines! It’s not possible to move past other\n * chunks (replacement characters, tabs, or line endings).\n *\n * @param {Point} point\n * @param {number} offset\n * @returns {undefined}\n */\nfunction movePoint(point, offset) {\n  point.column += offset;\n  point.offset += offset;\n  point._bufferIndex += offset;\n}","/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\nimport { asciiAlpha, asciiAlphanumeric, asciiAtext, asciiControl } from 'micromark-util-character';\n/** @type {Construct} */\nexport const autolink = {\n  name: 'autolink',\n  tokenize: tokenizeAutolink\n};\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeAutolink(effects, ok, nok) {\n  let size = 0;\n  return start;\n\n  /**\n   * Start of an autolink.\n   *\n   * ```markdown\n   * > | a<https://example.com>b\n   *      ^\n   * > | a<user@example.com>b\n   *      ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    effects.enter(\"autolink\");\n    effects.enter(\"autolinkMarker\");\n    effects.consume(code);\n    effects.exit(\"autolinkMarker\");\n    effects.enter(\"autolinkProtocol\");\n    return open;\n  }\n\n  /**\n   * After `<`, at protocol or atext.\n   *\n   * ```markdown\n   * > | a<https://example.com>b\n   *       ^\n   * > | a<user@example.com>b\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function open(code) {\n    if (asciiAlpha(code)) {\n      effects.consume(code);\n      return schemeOrEmailAtext;\n    }\n    if (code === 64) {\n      return nok(code);\n    }\n    return emailAtext(code);\n  }\n\n  /**\n   * At second byte of protocol or atext.\n   *\n   * ```markdown\n   * > | a<https://example.com>b\n   *        ^\n   * > | a<user@example.com>b\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function schemeOrEmailAtext(code) {\n    // ASCII alphanumeric and `+`, `-`, and `.`.\n    if (code === 43 || code === 45 || code === 46 || asciiAlphanumeric(code)) {\n      // Count the previous alphabetical from `open` too.\n      size = 1;\n      return schemeInsideOrEmailAtext(code);\n    }\n    return emailAtext(code);\n  }\n\n  /**\n   * In ambiguous protocol or atext.\n   *\n   * ```markdown\n   * > | a<https://example.com>b\n   *        ^\n   * > | a<user@example.com>b\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function schemeInsideOrEmailAtext(code) {\n    if (code === 58) {\n      effects.consume(code);\n      size = 0;\n      return urlInside;\n    }\n\n    // ASCII alphanumeric and `+`, `-`, and `.`.\n    if ((code === 43 || code === 45 || code === 46 || asciiAlphanumeric(code)) && size++ < 32) {\n      effects.consume(code);\n      return schemeInsideOrEmailAtext;\n    }\n    size = 0;\n    return emailAtext(code);\n  }\n\n  /**\n   * After protocol, in URL.\n   *\n   * ```markdown\n   * > | a<https://example.com>b\n   *             ^\n   * ```\n   *\n   * @type {State}\n   */\n  function urlInside(code) {\n    if (code === 62) {\n      effects.exit(\"autolinkProtocol\");\n      effects.enter(\"autolinkMarker\");\n      effects.consume(code);\n      effects.exit(\"autolinkMarker\");\n      effects.exit(\"autolink\");\n      return ok;\n    }\n\n    // ASCII control, space, or `<`.\n    if (code === null || code === 32 || code === 60 || asciiControl(code)) {\n      return nok(code);\n    }\n    effects.consume(code);\n    return urlInside;\n  }\n\n  /**\n   * In email atext.\n   *\n   * ```markdown\n   * > | a<user.name@example.com>b\n   *              ^\n   * ```\n   *\n   * @type {State}\n   */\n  function emailAtext(code) {\n    if (code === 64) {\n      effects.consume(code);\n      return emailAtSignOrDot;\n    }\n    if (asciiAtext(code)) {\n      effects.consume(code);\n      return emailAtext;\n    }\n    return nok(code);\n  }\n\n  /**\n   * In label, after at-sign or dot.\n   *\n   * ```markdown\n   * > | a<user.name@example.com>b\n   *                 ^       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function emailAtSignOrDot(code) {\n    return asciiAlphanumeric(code) ? emailLabel(code) : nok(code);\n  }\n\n  /**\n   * In label, where `.` and `>` are allowed.\n   *\n   * ```markdown\n   * > | a<user.name@example.com>b\n   *                   ^\n   * ```\n   *\n   * @type {State}\n   */\n  function emailLabel(code) {\n    if (code === 46) {\n      effects.consume(code);\n      size = 0;\n      return emailAtSignOrDot;\n    }\n    if (code === 62) {\n      // Exit, then change the token type.\n      effects.exit(\"autolinkProtocol\").type = \"autolinkEmail\";\n      effects.enter(\"autolinkMarker\");\n      effects.consume(code);\n      effects.exit(\"autolinkMarker\");\n      effects.exit(\"autolink\");\n      return ok;\n    }\n    return emailValue(code);\n  }\n\n  /**\n   * In label, where `.` and `>` are *not* allowed.\n   *\n   * Though, this is also used in `emailLabel` to parse other values.\n   *\n   * ```markdown\n   * > | a<user.name@ex-ample.com>b\n   *                    ^\n   * ```\n   *\n   * @type {State}\n   */\n  function emailValue(code) {\n    // ASCII alphanumeric or `-`.\n    if ((code === 45 || asciiAlphanumeric(code)) && size++ < 63) {\n      const next = code === 45 ? emailValue : emailLabel;\n      effects.consume(code);\n      return next;\n    }\n    return nok(code);\n  }\n}","/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\nimport { factorySpace } from 'micromark-factory-space';\nimport { markdownLineEnding, markdownSpace } from 'micromark-util-character';\n/** @type {Construct} */\nexport const blankLine = {\n  tokenize: tokenizeBlankLine,\n  partial: true\n};\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeBlankLine(effects, ok, nok) {\n  return start;\n\n  /**\n   * Start of blank line.\n   *\n   * > 👉 **Note**: `␠` represents a space character.\n   *\n   * ```markdown\n   * > | ␠␠␊\n   *     ^\n   * > | ␊\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    return markdownSpace(code) ? factorySpace(effects, after, \"linePrefix\")(code) : after(code);\n  }\n\n  /**\n   * At eof/eol, after optional whitespace.\n   *\n   * > 👉 **Note**: `␠` represents a space character.\n   *\n   * ```markdown\n   * > | ␠␠␊\n   *       ^\n   * > | ␊\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function after(code) {\n    return code === null || markdownLineEnding(code) ? ok(code) : nok(code);\n  }\n}","/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').Exiter} Exiter\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\nimport { factorySpace } from 'micromark-factory-space';\nimport { markdownSpace } from 'micromark-util-character';\n/** @type {Construct} */\nexport const blockQuote = {\n  name: 'blockQuote',\n  tokenize: tokenizeBlockQuoteStart,\n  continuation: {\n    tokenize: tokenizeBlockQuoteContinuation\n  },\n  exit\n};\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeBlockQuoteStart(effects, ok, nok) {\n  const self = this;\n  return start;\n\n  /**\n   * Start of block quote.\n   *\n   * ```markdown\n   * > | > a\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    if (code === 62) {\n      const state = self.containerState;\n      if (!state.open) {\n        effects.enter(\"blockQuote\", {\n          _container: true\n        });\n        state.open = true;\n      }\n      effects.enter(\"blockQuotePrefix\");\n      effects.enter(\"blockQuoteMarker\");\n      effects.consume(code);\n      effects.exit(\"blockQuoteMarker\");\n      return after;\n    }\n    return nok(code);\n  }\n\n  /**\n   * After `>`, before optional whitespace.\n   *\n   * ```markdown\n   * > | > a\n   *      ^\n   * ```\n   *\n   * @type {State}\n   */\n  function after(code) {\n    if (markdownSpace(code)) {\n      effects.enter(\"blockQuotePrefixWhitespace\");\n      effects.consume(code);\n      effects.exit(\"blockQuotePrefixWhitespace\");\n      effects.exit(\"blockQuotePrefix\");\n      return ok;\n    }\n    effects.exit(\"blockQuotePrefix\");\n    return ok(code);\n  }\n}\n\n/**\n * Start of block quote continuation.\n *\n * ```markdown\n *   | > a\n * > | > b\n *     ^\n * ```\n *\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeBlockQuoteContinuation(effects, ok, nok) {\n  const self = this;\n  return contStart;\n\n  /**\n   * Start of block quote continuation.\n   *\n   * Also used to parse the first block quote opening.\n   *\n   * ```markdown\n   *   | > a\n   * > | > b\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function contStart(code) {\n    if (markdownSpace(code)) {\n      // Always populated by defaults.\n\n      return factorySpace(effects, contBefore, \"linePrefix\", self.parser.constructs.disable.null.includes('codeIndented') ? undefined : 4)(code);\n    }\n    return contBefore(code);\n  }\n\n  /**\n   * At `>`, after optional whitespace.\n   *\n   * Also used to parse the first block quote opening.\n   *\n   * ```markdown\n   *   | > a\n   * > | > b\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function contBefore(code) {\n    return effects.attempt(blockQuote, ok, nok)(code);\n  }\n}\n\n/** @type {Exiter} */\nfunction exit(effects) {\n  effects.exit(\"blockQuote\");\n}","/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\nimport { asciiPunctuation } from 'micromark-util-character';\n/** @type {Construct} */\nexport const characterEscape = {\n  name: 'characterEscape',\n  tokenize: tokenizeCharacterEscape\n};\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeCharacterEscape(effects, ok, nok) {\n  return start;\n\n  /**\n   * Start of character escape.\n   *\n   * ```markdown\n   * > | a\\*b\n   *      ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    effects.enter(\"characterEscape\");\n    effects.enter(\"escapeMarker\");\n    effects.consume(code);\n    effects.exit(\"escapeMarker\");\n    return inside;\n  }\n\n  /**\n   * After `\\`, at punctuation.\n   *\n   * ```markdown\n   * > | a\\*b\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function inside(code) {\n    // ASCII punctuation.\n    if (asciiPunctuation(code)) {\n      effects.enter(\"characterEscapeValue\");\n      effects.consume(code);\n      effects.exit(\"characterEscapeValue\");\n      effects.exit(\"characterEscape\");\n      return ok;\n    }\n    return nok(code);\n  }\n}","/**\n * @typedef {import('micromark-util-types').Code} Code\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\nimport { decodeNamedCharacterReference } from 'decode-named-character-reference';\nimport { asciiAlphanumeric, asciiDigit, asciiHexDigit } from 'micromark-util-character';\n/** @type {Construct} */\nexport const characterReference = {\n  name: 'characterReference',\n  tokenize: tokenizeCharacterReference\n};\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeCharacterReference(effects, ok, nok) {\n  const self = this;\n  let size = 0;\n  /** @type {number} */\n  let max;\n  /** @type {(code: Code) => boolean} */\n  let test;\n  return start;\n\n  /**\n   * Start of character reference.\n   *\n   * ```markdown\n   * > | a&amp;b\n   *      ^\n   * > | a&#123;b\n   *      ^\n   * > | a&#x9;b\n   *      ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    effects.enter(\"characterReference\");\n    effects.enter(\"characterReferenceMarker\");\n    effects.consume(code);\n    effects.exit(\"characterReferenceMarker\");\n    return open;\n  }\n\n  /**\n   * After `&`, at `#` for numeric references or alphanumeric for named\n   * references.\n   *\n   * ```markdown\n   * > | a&amp;b\n   *       ^\n   * > | a&#123;b\n   *       ^\n   * > | a&#x9;b\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function open(code) {\n    if (code === 35) {\n      effects.enter(\"characterReferenceMarkerNumeric\");\n      effects.consume(code);\n      effects.exit(\"characterReferenceMarkerNumeric\");\n      return numeric;\n    }\n    effects.enter(\"characterReferenceValue\");\n    max = 31;\n    test = asciiAlphanumeric;\n    return value(code);\n  }\n\n  /**\n   * After `#`, at `x` for hexadecimals or digit for decimals.\n   *\n   * ```markdown\n   * > | a&#123;b\n   *        ^\n   * > | a&#x9;b\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function numeric(code) {\n    if (code === 88 || code === 120) {\n      effects.enter(\"characterReferenceMarkerHexadecimal\");\n      effects.consume(code);\n      effects.exit(\"characterReferenceMarkerHexadecimal\");\n      effects.enter(\"characterReferenceValue\");\n      max = 6;\n      test = asciiHexDigit;\n      return value;\n    }\n    effects.enter(\"characterReferenceValue\");\n    max = 7;\n    test = asciiDigit;\n    return value(code);\n  }\n\n  /**\n   * After markers (`&#x`, `&#`, or `&`), in value, before `;`.\n   *\n   * The character reference kind defines what and how many characters are\n   * allowed.\n   *\n   * ```markdown\n   * > | a&amp;b\n   *       ^^^\n   * > | a&#123;b\n   *        ^^^\n   * > | a&#x9;b\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function value(code) {\n    if (code === 59 && size) {\n      const token = effects.exit(\"characterReferenceValue\");\n      if (test === asciiAlphanumeric && !decodeNamedCharacterReference(self.sliceSerialize(token))) {\n        return nok(code);\n      }\n\n      // To do: `markdown-rs` uses a different name:\n      // `CharacterReferenceMarkerSemi`.\n      effects.enter(\"characterReferenceMarker\");\n      effects.consume(code);\n      effects.exit(\"characterReferenceMarker\");\n      effects.exit(\"characterReference\");\n      return ok;\n    }\n    if (test(code) && size++ < max) {\n      effects.consume(code);\n      return value;\n    }\n    return nok(code);\n  }\n}","/**\n * @typedef {import('micromark-util-types').Code} Code\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\nimport { factorySpace } from 'micromark-factory-space';\nimport { markdownLineEnding, markdownSpace } from 'micromark-util-character';\n/** @type {Construct} */\nconst nonLazyContinuation = {\n  tokenize: tokenizeNonLazyContinuation,\n  partial: true\n};\n\n/** @type {Construct} */\nexport const codeFenced = {\n  name: 'codeFenced',\n  tokenize: tokenizeCodeFenced,\n  concrete: true\n};\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeCodeFenced(effects, ok, nok) {\n  const self = this;\n  /** @type {Construct} */\n  const closeStart = {\n    tokenize: tokenizeCloseStart,\n    partial: true\n  };\n  let initialPrefix = 0;\n  let sizeOpen = 0;\n  /** @type {NonNullable<Code>} */\n  let marker;\n  return start;\n\n  /**\n   * Start of code.\n   *\n   * ```markdown\n   * > | ~~~js\n   *     ^\n   *   | alert(1)\n   *   | ~~~\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    // To do: parse whitespace like `markdown-rs`.\n    return beforeSequenceOpen(code);\n  }\n\n  /**\n   * In opening fence, after prefix, at sequence.\n   *\n   * ```markdown\n   * > | ~~~js\n   *     ^\n   *   | alert(1)\n   *   | ~~~\n   * ```\n   *\n   * @type {State}\n   */\n  function beforeSequenceOpen(code) {\n    const tail = self.events[self.events.length - 1];\n    initialPrefix = tail && tail[1].type === \"linePrefix\" ? tail[2].sliceSerialize(tail[1], true).length : 0;\n    marker = code;\n    effects.enter(\"codeFenced\");\n    effects.enter(\"codeFencedFence\");\n    effects.enter(\"codeFencedFenceSequence\");\n    return sequenceOpen(code);\n  }\n\n  /**\n   * In opening fence sequence.\n   *\n   * ```markdown\n   * > | ~~~js\n   *      ^\n   *   | alert(1)\n   *   | ~~~\n   * ```\n   *\n   * @type {State}\n   */\n  function sequenceOpen(code) {\n    if (code === marker) {\n      sizeOpen++;\n      effects.consume(code);\n      return sequenceOpen;\n    }\n    if (sizeOpen < 3) {\n      return nok(code);\n    }\n    effects.exit(\"codeFencedFenceSequence\");\n    return markdownSpace(code) ? factorySpace(effects, infoBefore, \"whitespace\")(code) : infoBefore(code);\n  }\n\n  /**\n   * In opening fence, after the sequence (and optional whitespace), before info.\n   *\n   * ```markdown\n   * > | ~~~js\n   *        ^\n   *   | alert(1)\n   *   | ~~~\n   * ```\n   *\n   * @type {State}\n   */\n  function infoBefore(code) {\n    if (code === null || markdownLineEnding(code)) {\n      effects.exit(\"codeFencedFence\");\n      return self.interrupt ? ok(code) : effects.check(nonLazyContinuation, atNonLazyBreak, after)(code);\n    }\n    effects.enter(\"codeFencedFenceInfo\");\n    effects.enter(\"chunkString\", {\n      contentType: \"string\"\n    });\n    return info(code);\n  }\n\n  /**\n   * In info.\n   *\n   * ```markdown\n   * > | ~~~js\n   *        ^\n   *   | alert(1)\n   *   | ~~~\n   * ```\n   *\n   * @type {State}\n   */\n  function info(code) {\n    if (code === null || markdownLineEnding(code)) {\n      effects.exit(\"chunkString\");\n      effects.exit(\"codeFencedFenceInfo\");\n      return infoBefore(code);\n    }\n    if (markdownSpace(code)) {\n      effects.exit(\"chunkString\");\n      effects.exit(\"codeFencedFenceInfo\");\n      return factorySpace(effects, metaBefore, \"whitespace\")(code);\n    }\n    if (code === 96 && code === marker) {\n      return nok(code);\n    }\n    effects.consume(code);\n    return info;\n  }\n\n  /**\n   * In opening fence, after info and whitespace, before meta.\n   *\n   * ```markdown\n   * > | ~~~js eval\n   *           ^\n   *   | alert(1)\n   *   | ~~~\n   * ```\n   *\n   * @type {State}\n   */\n  function metaBefore(code) {\n    if (code === null || markdownLineEnding(code)) {\n      return infoBefore(code);\n    }\n    effects.enter(\"codeFencedFenceMeta\");\n    effects.enter(\"chunkString\", {\n      contentType: \"string\"\n    });\n    return meta(code);\n  }\n\n  /**\n   * In meta.\n   *\n   * ```markdown\n   * > | ~~~js eval\n   *           ^\n   *   | alert(1)\n   *   | ~~~\n   * ```\n   *\n   * @type {State}\n   */\n  function meta(code) {\n    if (code === null || markdownLineEnding(code)) {\n      effects.exit(\"chunkString\");\n      effects.exit(\"codeFencedFenceMeta\");\n      return infoBefore(code);\n    }\n    if (code === 96 && code === marker) {\n      return nok(code);\n    }\n    effects.consume(code);\n    return meta;\n  }\n\n  /**\n   * At eol/eof in code, before a non-lazy closing fence or content.\n   *\n   * ```markdown\n   * > | ~~~js\n   *          ^\n   * > | alert(1)\n   *             ^\n   *   | ~~~\n   * ```\n   *\n   * @type {State}\n   */\n  function atNonLazyBreak(code) {\n    return effects.attempt(closeStart, after, contentBefore)(code);\n  }\n\n  /**\n   * Before code content, not a closing fence, at eol.\n   *\n   * ```markdown\n   *   | ~~~js\n   * > | alert(1)\n   *             ^\n   *   | ~~~\n   * ```\n   *\n   * @type {State}\n   */\n  function contentBefore(code) {\n    effects.enter(\"lineEnding\");\n    effects.consume(code);\n    effects.exit(\"lineEnding\");\n    return contentStart;\n  }\n\n  /**\n   * Before code content, not a closing fence.\n   *\n   * ```markdown\n   *   | ~~~js\n   * > | alert(1)\n   *     ^\n   *   | ~~~\n   * ```\n   *\n   * @type {State}\n   */\n  function contentStart(code) {\n    return initialPrefix > 0 && markdownSpace(code) ? factorySpace(effects, beforeContentChunk, \"linePrefix\", initialPrefix + 1)(code) : beforeContentChunk(code);\n  }\n\n  /**\n   * Before code content, after optional prefix.\n   *\n   * ```markdown\n   *   | ~~~js\n   * > | alert(1)\n   *     ^\n   *   | ~~~\n   * ```\n   *\n   * @type {State}\n   */\n  function beforeContentChunk(code) {\n    if (code === null || markdownLineEnding(code)) {\n      return effects.check(nonLazyContinuation, atNonLazyBreak, after)(code);\n    }\n    effects.enter(\"codeFlowValue\");\n    return contentChunk(code);\n  }\n\n  /**\n   * In code content.\n   *\n   * ```markdown\n   *   | ~~~js\n   * > | alert(1)\n   *     ^^^^^^^^\n   *   | ~~~\n   * ```\n   *\n   * @type {State}\n   */\n  function contentChunk(code) {\n    if (code === null || markdownLineEnding(code)) {\n      effects.exit(\"codeFlowValue\");\n      return beforeContentChunk(code);\n    }\n    effects.consume(code);\n    return contentChunk;\n  }\n\n  /**\n   * After code.\n   *\n   * ```markdown\n   *   | ~~~js\n   *   | alert(1)\n   * > | ~~~\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function after(code) {\n    effects.exit(\"codeFenced\");\n    return ok(code);\n  }\n\n  /**\n   * @this {TokenizeContext}\n   * @type {Tokenizer}\n   */\n  function tokenizeCloseStart(effects, ok, nok) {\n    let size = 0;\n    return startBefore;\n\n    /**\n     *\n     *\n     * @type {State}\n     */\n    function startBefore(code) {\n      effects.enter(\"lineEnding\");\n      effects.consume(code);\n      effects.exit(\"lineEnding\");\n      return start;\n    }\n\n    /**\n     * Before closing fence, at optional whitespace.\n     *\n     * ```markdown\n     *   | ~~~js\n     *   | alert(1)\n     * > | ~~~\n     *     ^\n     * ```\n     *\n     * @type {State}\n     */\n    function start(code) {\n      // Always populated by defaults.\n\n      // To do: `enter` here or in next state?\n      effects.enter(\"codeFencedFence\");\n      return markdownSpace(code) ? factorySpace(effects, beforeSequenceClose, \"linePrefix\", self.parser.constructs.disable.null.includes('codeIndented') ? undefined : 4)(code) : beforeSequenceClose(code);\n    }\n\n    /**\n     * In closing fence, after optional whitespace, at sequence.\n     *\n     * ```markdown\n     *   | ~~~js\n     *   | alert(1)\n     * > | ~~~\n     *     ^\n     * ```\n     *\n     * @type {State}\n     */\n    function beforeSequenceClose(code) {\n      if (code === marker) {\n        effects.enter(\"codeFencedFenceSequence\");\n        return sequenceClose(code);\n      }\n      return nok(code);\n    }\n\n    /**\n     * In closing fence sequence.\n     *\n     * ```markdown\n     *   | ~~~js\n     *   | alert(1)\n     * > | ~~~\n     *     ^\n     * ```\n     *\n     * @type {State}\n     */\n    function sequenceClose(code) {\n      if (code === marker) {\n        size++;\n        effects.consume(code);\n        return sequenceClose;\n      }\n      if (size >= sizeOpen) {\n        effects.exit(\"codeFencedFenceSequence\");\n        return markdownSpace(code) ? factorySpace(effects, sequenceCloseAfter, \"whitespace\")(code) : sequenceCloseAfter(code);\n      }\n      return nok(code);\n    }\n\n    /**\n     * After closing fence sequence, after optional whitespace.\n     *\n     * ```markdown\n     *   | ~~~js\n     *   | alert(1)\n     * > | ~~~\n     *        ^\n     * ```\n     *\n     * @type {State}\n     */\n    function sequenceCloseAfter(code) {\n      if (code === null || markdownLineEnding(code)) {\n        effects.exit(\"codeFencedFence\");\n        return ok(code);\n      }\n      return nok(code);\n    }\n  }\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeNonLazyContinuation(effects, ok, nok) {\n  const self = this;\n  return start;\n\n  /**\n   *\n   *\n   * @type {State}\n   */\n  function start(code) {\n    if (code === null) {\n      return nok(code);\n    }\n    effects.enter(\"lineEnding\");\n    effects.consume(code);\n    effects.exit(\"lineEnding\");\n    return lineStart;\n  }\n\n  /**\n   *\n   *\n   * @type {State}\n   */\n  function lineStart(code) {\n    return self.parser.lazy[self.now().line] ? nok(code) : ok(code);\n  }\n}","/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\nimport { factorySpace } from 'micromark-factory-space';\nimport { markdownLineEnding, markdownSpace } from 'micromark-util-character';\n/** @type {Construct} */\nexport const codeIndented = {\n  name: 'codeIndented',\n  tokenize: tokenizeCodeIndented\n};\n\n/** @type {Construct} */\nconst furtherStart = {\n  tokenize: tokenizeFurtherStart,\n  partial: true\n};\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeCodeIndented(effects, ok, nok) {\n  const self = this;\n  return start;\n\n  /**\n   * Start of code (indented).\n   *\n   * > **Parsing note**: it is not needed to check if this first line is a\n   * > filled line (that it has a non-whitespace character), because blank lines\n   * > are parsed already, so we never run into that.\n   *\n   * ```markdown\n   * > |     aaa\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    // To do: manually check if interrupting like `markdown-rs`.\n\n    effects.enter(\"codeIndented\");\n    // To do: use an improved `space_or_tab` function like `markdown-rs`,\n    // so that we can drop the next state.\n    return factorySpace(effects, afterPrefix, \"linePrefix\", 4 + 1)(code);\n  }\n\n  /**\n   * At start, after 1 or 4 spaces.\n   *\n   * ```markdown\n   * > |     aaa\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function afterPrefix(code) {\n    const tail = self.events[self.events.length - 1];\n    return tail && tail[1].type === \"linePrefix\" && tail[2].sliceSerialize(tail[1], true).length >= 4 ? atBreak(code) : nok(code);\n  }\n\n  /**\n   * At a break.\n   *\n   * ```markdown\n   * > |     aaa\n   *         ^  ^\n   * ```\n   *\n   * @type {State}\n   */\n  function atBreak(code) {\n    if (code === null) {\n      return after(code);\n    }\n    if (markdownLineEnding(code)) {\n      return effects.attempt(furtherStart, atBreak, after)(code);\n    }\n    effects.enter(\"codeFlowValue\");\n    return inside(code);\n  }\n\n  /**\n   * In code content.\n   *\n   * ```markdown\n   * > |     aaa\n   *         ^^^^\n   * ```\n   *\n   * @type {State}\n   */\n  function inside(code) {\n    if (code === null || markdownLineEnding(code)) {\n      effects.exit(\"codeFlowValue\");\n      return atBreak(code);\n    }\n    effects.consume(code);\n    return inside;\n  }\n\n  /** @type {State} */\n  function after(code) {\n    effects.exit(\"codeIndented\");\n    // To do: allow interrupting like `markdown-rs`.\n    // Feel free to interrupt.\n    // tokenizer.interrupt = false\n    return ok(code);\n  }\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeFurtherStart(effects, ok, nok) {\n  const self = this;\n  return furtherStart;\n\n  /**\n   * At eol, trying to parse another indent.\n   *\n   * ```markdown\n   * > |     aaa\n   *            ^\n   *   |     bbb\n   * ```\n   *\n   * @type {State}\n   */\n  function furtherStart(code) {\n    // To do: improve `lazy` / `pierce` handling.\n    // If this is a lazy line, it can’t be code.\n    if (self.parser.lazy[self.now().line]) {\n      return nok(code);\n    }\n    if (markdownLineEnding(code)) {\n      effects.enter(\"lineEnding\");\n      effects.consume(code);\n      effects.exit(\"lineEnding\");\n      return furtherStart;\n    }\n\n    // To do: the code here in `micromark-js` is a bit different from\n    // `markdown-rs` because there it can attempt spaces.\n    // We can’t yet.\n    //\n    // To do: use an improved `space_or_tab` function like `markdown-rs`,\n    // so that we can drop the next state.\n    return factorySpace(effects, afterPrefix, \"linePrefix\", 4 + 1)(code);\n  }\n\n  /**\n   * At start, after 1 or 4 spaces.\n   *\n   * ```markdown\n   * > |     aaa\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function afterPrefix(code) {\n    const tail = self.events[self.events.length - 1];\n    return tail && tail[1].type === \"linePrefix\" && tail[2].sliceSerialize(tail[1], true).length >= 4 ? ok(code) : markdownLineEnding(code) ? furtherStart(code) : nok(code);\n  }\n}","/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').Previous} Previous\n * @typedef {import('micromark-util-types').Resolver} Resolver\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').Token} Token\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\nimport { markdownLineEnding } from 'micromark-util-character';\n/** @type {Construct} */\nexport const codeText = {\n  name: 'codeText',\n  tokenize: tokenizeCodeText,\n  resolve: resolveCodeText,\n  previous\n};\n\n// To do: next major: don’t resolve, like `markdown-rs`.\n/** @type {Resolver} */\nfunction resolveCodeText(events) {\n  let tailExitIndex = events.length - 4;\n  let headEnterIndex = 3;\n  /** @type {number} */\n  let index;\n  /** @type {number | undefined} */\n  let enter;\n\n  // If we start and end with an EOL or a space.\n  if ((events[headEnterIndex][1].type === \"lineEnding\" || events[headEnterIndex][1].type === 'space') && (events[tailExitIndex][1].type === \"lineEnding\" || events[tailExitIndex][1].type === 'space')) {\n    index = headEnterIndex;\n\n    // And we have data.\n    while (++index < tailExitIndex) {\n      if (events[index][1].type === \"codeTextData\") {\n        // Then we have padding.\n        events[headEnterIndex][1].type = \"codeTextPadding\";\n        events[tailExitIndex][1].type = \"codeTextPadding\";\n        headEnterIndex += 2;\n        tailExitIndex -= 2;\n        break;\n      }\n    }\n  }\n\n  // Merge adjacent spaces and data.\n  index = headEnterIndex - 1;\n  tailExitIndex++;\n  while (++index <= tailExitIndex) {\n    if (enter === undefined) {\n      if (index !== tailExitIndex && events[index][1].type !== \"lineEnding\") {\n        enter = index;\n      }\n    } else if (index === tailExitIndex || events[index][1].type === \"lineEnding\") {\n      events[enter][1].type = \"codeTextData\";\n      if (index !== enter + 2) {\n        events[enter][1].end = events[index - 1][1].end;\n        events.splice(enter + 2, index - enter - 2);\n        tailExitIndex -= index - enter - 2;\n        index = enter + 2;\n      }\n      enter = undefined;\n    }\n  }\n  return events;\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Previous}\n */\nfunction previous(code) {\n  // If there is a previous code, there will always be a tail.\n  return code !== 96 || this.events[this.events.length - 1][1].type === \"characterEscape\";\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeCodeText(effects, ok, nok) {\n  const self = this;\n  let sizeOpen = 0;\n  /** @type {number} */\n  let size;\n  /** @type {Token} */\n  let token;\n  return start;\n\n  /**\n   * Start of code (text).\n   *\n   * ```markdown\n   * > | `a`\n   *     ^\n   * > | \\`a`\n   *      ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    effects.enter(\"codeText\");\n    effects.enter(\"codeTextSequence\");\n    return sequenceOpen(code);\n  }\n\n  /**\n   * In opening sequence.\n   *\n   * ```markdown\n   * > | `a`\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function sequenceOpen(code) {\n    if (code === 96) {\n      effects.consume(code);\n      sizeOpen++;\n      return sequenceOpen;\n    }\n    effects.exit(\"codeTextSequence\");\n    return between(code);\n  }\n\n  /**\n   * Between something and something else.\n   *\n   * ```markdown\n   * > | `a`\n   *      ^^\n   * ```\n   *\n   * @type {State}\n   */\n  function between(code) {\n    // EOF.\n    if (code === null) {\n      return nok(code);\n    }\n\n    // To do: next major: don’t do spaces in resolve, but when compiling,\n    // like `markdown-rs`.\n    // Tabs don’t work, and virtual spaces don’t make sense.\n    if (code === 32) {\n      effects.enter('space');\n      effects.consume(code);\n      effects.exit('space');\n      return between;\n    }\n\n    // Closing fence? Could also be data.\n    if (code === 96) {\n      token = effects.enter(\"codeTextSequence\");\n      size = 0;\n      return sequenceClose(code);\n    }\n    if (markdownLineEnding(code)) {\n      effects.enter(\"lineEnding\");\n      effects.consume(code);\n      effects.exit(\"lineEnding\");\n      return between;\n    }\n\n    // Data.\n    effects.enter(\"codeTextData\");\n    return data(code);\n  }\n\n  /**\n   * In data.\n   *\n   * ```markdown\n   * > | `a`\n   *      ^\n   * ```\n   *\n   * @type {State}\n   */\n  function data(code) {\n    if (code === null || code === 32 || code === 96 || markdownLineEnding(code)) {\n      effects.exit(\"codeTextData\");\n      return between(code);\n    }\n    effects.consume(code);\n    return data;\n  }\n\n  /**\n   * In closing sequence.\n   *\n   * ```markdown\n   * > | `a`\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function sequenceClose(code) {\n    // More.\n    if (code === 96) {\n      effects.consume(code);\n      size++;\n      return sequenceClose;\n    }\n\n    // Done!\n    if (size === sizeOpen) {\n      effects.exit(\"codeTextSequence\");\n      effects.exit(\"codeText\");\n      return ok(code);\n    }\n\n    // More or less accents: mark as data.\n    token.type = \"codeTextData\";\n    return data(code);\n  }\n}","/**\n * Some of the internal operations of micromark do lots of editing\n * operations on very large arrays. This runs into problems with two\n * properties of most circa-2020 JavaScript interpreters:\n *\n *  - Array-length modifications at the high end of an array (push/pop) are\n *    expected to be common and are implemented in (amortized) time\n *    proportional to the number of elements added or removed, whereas\n *    other operations (shift/unshift and splice) are much less efficient.\n *  - Function arguments are passed on the stack, so adding tens of thousands\n *    of elements to an array with `arr.push[...newElements]` will frequently\n *    cause stack overflows. (see <https://stackoverflow.com/questions/22123769/rangeerror-maximum-call-stack-size-exceeded-why>)\n *\n * SpliceBuffers are an implementation of gap buffers, which are a\n * generalization of the \"queue made of two stacks\" idea. The splice buffer\n * maintains a cursor, and moving the cursor has cost proportional to the\n * distance the cursor moves, but inserting, deleting, or splicing in\n * new information at the cursor is as efficient as the push/pop operation.\n * This allows for an efficient sequence of splices (or pushes, pops, shifts,\n * or unshifts) as long such edits happen at the same part of the array or\n * generally sweep through the array from the beginning to the end.\n *\n * The interface for splice buffers also supports large numbers of inputs by\n * passing a single array argument rather passing multiple arguments on the\n * function call stack.\n *\n * @template T\n *   Item type.\n */\nexport class SpliceBuffer {\n  /**\n   * @param {ReadonlyArray<T> | null | undefined} [initial]\n   *   Initial items (optional).\n   * @returns\n   *   Splice buffer.\n   */\n  constructor(initial) {\n    /** @type {Array<T>} */\n    this.left = initial ? [...initial] : [];\n    /** @type {Array<T>} */\n    this.right = [];\n  }\n\n  /**\n   * Array access;\n   * does not move the cursor.\n   *\n   * @param {number} index\n   *   Index.\n   * @return {T}\n   *   Item.\n   */\n  get(index) {\n    if (index < 0 || index >= this.left.length + this.right.length) {\n      throw new RangeError('Cannot access index `' + index + '` in a splice buffer of size `' + (this.left.length + this.right.length) + '`');\n    }\n    if (index < this.left.length) return this.left[index];\n    return this.right[this.right.length - index + this.left.length - 1];\n  }\n\n  /**\n   * The length of the splice buffer, one greater than the largest index in the\n   * array.\n   */\n  get length() {\n    return this.left.length + this.right.length;\n  }\n\n  /**\n   * Remove and return `list[0]`;\n   * moves the cursor to `0`.\n   *\n   * @returns {T | undefined}\n   *   Item, optional.\n   */\n  shift() {\n    this.setCursor(0);\n    return this.right.pop();\n  }\n\n  /**\n   * Slice the buffer to get an array;\n   * does not move the cursor.\n   *\n   * @param {number} start\n   *   Start.\n   * @param {number | null | undefined} [end]\n   *   End (optional).\n   * @returns {Array<T>}\n   *   Array of items.\n   */\n  slice(start, end) {\n    /** @type {number} */\n    const stop = end === null || end === undefined ? Number.POSITIVE_INFINITY : end;\n    if (stop < this.left.length) {\n      return this.left.slice(start, stop);\n    }\n    if (start > this.left.length) {\n      return this.right.slice(this.right.length - stop + this.left.length, this.right.length - start + this.left.length).reverse();\n    }\n    return this.left.slice(start).concat(this.right.slice(this.right.length - stop + this.left.length).reverse());\n  }\n\n  /**\n   * Mimics the behavior of Array.prototype.splice() except for the change of\n   * interface necessary to avoid segfaults when patching in very large arrays.\n   *\n   * This operation moves cursor is moved to `start` and results in the cursor\n   * placed after any inserted items.\n   *\n   * @param {number} start\n   *   Start;\n   *   zero-based index at which to start changing the array;\n   *   negative numbers count backwards from the end of the array and values\n   *   that are out-of bounds are clamped to the appropriate end of the array.\n   * @param {number | null | undefined} [deleteCount=0]\n   *   Delete count (default: `0`);\n   *   maximum number of elements to delete, starting from start.\n   * @param {Array<T> | null | undefined} [items=[]]\n   *   Items to include in place of the deleted items (default: `[]`).\n   * @return {Array<T>}\n   *   Any removed items.\n   */\n  splice(start, deleteCount, items) {\n    /** @type {number} */\n    const count = deleteCount || 0;\n    this.setCursor(Math.trunc(start));\n    const removed = this.right.splice(this.right.length - count, Number.POSITIVE_INFINITY);\n    if (items) chunkedPush(this.left, items);\n    return removed.reverse();\n  }\n\n  /**\n   * Remove and return the highest-numbered item in the array, so\n   * `list[list.length - 1]`;\n   * Moves the cursor to `length`.\n   *\n   * @returns {T | undefined}\n   *   Item, optional.\n   */\n  pop() {\n    this.setCursor(Number.POSITIVE_INFINITY);\n    return this.left.pop();\n  }\n\n  /**\n   * Inserts a single item to the high-numbered side of the array;\n   * moves the cursor to `length`.\n   *\n   * @param {T} item\n   *   Item.\n   * @returns {undefined}\n   *   Nothing.\n   */\n  push(item) {\n    this.setCursor(Number.POSITIVE_INFINITY);\n    this.left.push(item);\n  }\n\n  /**\n   * Inserts many items to the high-numbered side of the array.\n   * Moves the cursor to `length`.\n   *\n   * @param {Array<T>} items\n   *   Items.\n   * @returns {undefined}\n   *   Nothing.\n   */\n  pushMany(items) {\n    this.setCursor(Number.POSITIVE_INFINITY);\n    chunkedPush(this.left, items);\n  }\n\n  /**\n   * Inserts a single item to the low-numbered side of the array;\n   * Moves the cursor to `0`.\n   *\n   * @param {T} item\n   *   Item.\n   * @returns {undefined}\n   *   Nothing.\n   */\n  unshift(item) {\n    this.setCursor(0);\n    this.right.push(item);\n  }\n\n  /**\n   * Inserts many items to the low-numbered side of the array;\n   * moves the cursor to `0`.\n   *\n   * @param {Array<T>} items\n   *   Items.\n   * @returns {undefined}\n   *   Nothing.\n   */\n  unshiftMany(items) {\n    this.setCursor(0);\n    chunkedPush(this.right, items.reverse());\n  }\n\n  /**\n   * Move the cursor to a specific position in the array. Requires\n   * time proportional to the distance moved.\n   *\n   * If `n < 0`, the cursor will end up at the beginning.\n   * If `n > length`, the cursor will end up at the end.\n   *\n   * @param {number} n\n   *   Position.\n   * @return {undefined}\n   *   Nothing.\n   */\n  setCursor(n) {\n    if (n === this.left.length || n > this.left.length && this.right.length === 0 || n < 0 && this.left.length === 0) return;\n    if (n < this.left.length) {\n      // Move cursor to the this.left\n      const removed = this.left.splice(n, Number.POSITIVE_INFINITY);\n      chunkedPush(this.right, removed.reverse());\n    } else {\n      // Move cursor to the this.right\n      const removed = this.right.splice(this.left.length + this.right.length - n, Number.POSITIVE_INFINITY);\n      chunkedPush(this.left, removed.reverse());\n    }\n  }\n}\n\n/**\n * Avoid stack overflow by pushing items onto the stack in segments\n *\n * @template T\n *   Item type.\n * @param {Array<T>} list\n *   List to inject into.\n * @param {ReadonlyArray<T>} right\n *   Items to inject.\n * @return {undefined}\n *   Nothing.\n */\nfunction chunkedPush(list, right) {\n  /** @type {number} */\n  let chunkStart = 0;\n  if (right.length < 10000) {\n    list.push(...right);\n  } else {\n    while (chunkStart < right.length) {\n      list.push(...right.slice(chunkStart, chunkStart + 10000));\n      chunkStart += 10000;\n    }\n  }\n}","/**\n * @typedef {import('micromark-util-types').Chunk} Chunk\n * @typedef {import('micromark-util-types').Event} Event\n * @typedef {import('micromark-util-types').Token} Token\n */\n\nimport { splice } from 'micromark-util-chunked';\nimport { SpliceBuffer } from './lib/splice-buffer.js';\n\n// Hidden API exposed for testing.\nexport { SpliceBuffer } from './lib/splice-buffer.js';\n\n/**\n * Tokenize subcontent.\n *\n * @param {Array<Event>} eventsArray\n *   List of events.\n * @returns {boolean}\n *   Whether subtokens were found.\n */\n// eslint-disable-next-line complexity\nexport function subtokenize(eventsArray) {\n  /** @type {Record<string, number>} */\n  const jumps = {};\n  let index = -1;\n  /** @type {Event} */\n  let event;\n  /** @type {number | undefined} */\n  let lineIndex;\n  /** @type {number} */\n  let otherIndex;\n  /** @type {Event} */\n  let otherEvent;\n  /** @type {Array<Event>} */\n  let parameters;\n  /** @type {Array<Event>} */\n  let subevents;\n  /** @type {boolean | undefined} */\n  let more;\n  const events = new SpliceBuffer(eventsArray);\n  while (++index < events.length) {\n    while (index in jumps) {\n      index = jumps[index];\n    }\n    event = events.get(index);\n\n    // Add a hook for the GFM tasklist extension, which needs to know if text\n    // is in the first content of a list item.\n    if (index && event[1].type === \"chunkFlow\" && events.get(index - 1)[1].type === \"listItemPrefix\") {\n      subevents = event[1]._tokenizer.events;\n      otherIndex = 0;\n      if (otherIndex < subevents.length && subevents[otherIndex][1].type === \"lineEndingBlank\") {\n        otherIndex += 2;\n      }\n      if (otherIndex < subevents.length && subevents[otherIndex][1].type === \"content\") {\n        while (++otherIndex < subevents.length) {\n          if (subevents[otherIndex][1].type === \"content\") {\n            break;\n          }\n          if (subevents[otherIndex][1].type === \"chunkText\") {\n            subevents[otherIndex][1]._isInFirstContentOfListItem = true;\n            otherIndex++;\n          }\n        }\n      }\n    }\n\n    // Enter.\n    if (event[0] === 'enter') {\n      if (event[1].contentType) {\n        Object.assign(jumps, subcontent(events, index));\n        index = jumps[index];\n        more = true;\n      }\n    }\n    // Exit.\n    else if (event[1]._container) {\n      otherIndex = index;\n      lineIndex = undefined;\n      while (otherIndex--) {\n        otherEvent = events.get(otherIndex);\n        if (otherEvent[1].type === \"lineEnding\" || otherEvent[1].type === \"lineEndingBlank\") {\n          if (otherEvent[0] === 'enter') {\n            if (lineIndex) {\n              events.get(lineIndex)[1].type = \"lineEndingBlank\";\n            }\n            otherEvent[1].type = \"lineEnding\";\n            lineIndex = otherIndex;\n          }\n        } else {\n          break;\n        }\n      }\n      if (lineIndex) {\n        // Fix position.\n        event[1].end = Object.assign({}, events.get(lineIndex)[1].start);\n\n        // Switch container exit w/ line endings.\n        parameters = events.slice(lineIndex, index);\n        parameters.unshift(event);\n        events.splice(lineIndex, index - lineIndex + 1, parameters);\n      }\n    }\n  }\n\n  // The changes to the `events` buffer must be copied back into the eventsArray\n  splice(eventsArray, 0, Number.POSITIVE_INFINITY, events.slice(0));\n  return !more;\n}\n\n/**\n * Tokenize embedded tokens.\n *\n * @param {SpliceBuffer<Event>} events\n * @param {number} eventIndex\n * @returns {Record<string, number>}\n */\nfunction subcontent(events, eventIndex) {\n  const token = events.get(eventIndex)[1];\n  const context = events.get(eventIndex)[2];\n  let startPosition = eventIndex - 1;\n  /** @type {Array<number>} */\n  const startPositions = [];\n  const tokenizer = token._tokenizer || context.parser[token.contentType](token.start);\n  const childEvents = tokenizer.events;\n  /** @type {Array<[number, number]>} */\n  const jumps = [];\n  /** @type {Record<string, number>} */\n  const gaps = {};\n  /** @type {Array<Chunk>} */\n  let stream;\n  /** @type {Token | undefined} */\n  let previous;\n  let index = -1;\n  /** @type {Token | undefined} */\n  let current = token;\n  let adjust = 0;\n  let start = 0;\n  const breaks = [start];\n\n  // Loop forward through the linked tokens to pass them in order to the\n  // subtokenizer.\n  while (current) {\n    // Find the position of the event for this token.\n    while (events.get(++startPosition)[1] !== current) {\n      // Empty.\n    }\n    startPositions.push(startPosition);\n    if (!current._tokenizer) {\n      stream = context.sliceStream(current);\n      if (!current.next) {\n        stream.push(null);\n      }\n      if (previous) {\n        tokenizer.defineSkip(current.start);\n      }\n      if (current._isInFirstContentOfListItem) {\n        tokenizer._gfmTasklistFirstContentOfListItem = true;\n      }\n      tokenizer.write(stream);\n      if (current._isInFirstContentOfListItem) {\n        tokenizer._gfmTasklistFirstContentOfListItem = undefined;\n      }\n    }\n\n    // Unravel the next token.\n    previous = current;\n    current = current.next;\n  }\n\n  // Now, loop back through all events (and linked tokens), to figure out which\n  // parts belong where.\n  current = token;\n  while (++index < childEvents.length) {\n    if (\n    // Find a void token that includes a break.\n    childEvents[index][0] === 'exit' && childEvents[index - 1][0] === 'enter' && childEvents[index][1].type === childEvents[index - 1][1].type && childEvents[index][1].start.line !== childEvents[index][1].end.line) {\n      start = index + 1;\n      breaks.push(start);\n      // Help GC.\n      current._tokenizer = undefined;\n      current.previous = undefined;\n      current = current.next;\n    }\n  }\n\n  // Help GC.\n  tokenizer.events = [];\n\n  // If there’s one more token (which is the cases for lines that end in an\n  // EOF), that’s perfect: the last point we found starts it.\n  // If there isn’t then make sure any remaining content is added to it.\n  if (current) {\n    // Help GC.\n    current._tokenizer = undefined;\n    current.previous = undefined;\n  } else {\n    breaks.pop();\n  }\n\n  // Now splice the events from the subtokenizer into the current events,\n  // moving back to front so that splice indices aren’t affected.\n  index = breaks.length;\n  while (index--) {\n    const slice = childEvents.slice(breaks[index], breaks[index + 1]);\n    const start = startPositions.pop();\n    jumps.push([start, start + slice.length - 1]);\n    events.splice(start, 2, slice);\n  }\n  jumps.reverse();\n  index = -1;\n  while (++index < jumps.length) {\n    gaps[adjust + jumps[index][0]] = adjust + jumps[index][1];\n    adjust += jumps[index][1] - jumps[index][0] - 1;\n  }\n  return gaps;\n}","/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').Resolver} Resolver\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').Token} Token\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\nimport { factorySpace } from 'micromark-factory-space';\nimport { markdownLineEnding } from 'micromark-util-character';\nimport { subtokenize } from 'micromark-util-subtokenize';\n/**\n * No name because it must not be turned off.\n * @type {Construct}\n */\nexport const content = {\n  tokenize: tokenizeContent,\n  resolve: resolveContent\n};\n\n/** @type {Construct} */\nconst continuationConstruct = {\n  tokenize: tokenizeContinuation,\n  partial: true\n};\n\n/**\n * Content is transparent: it’s parsed right now. That way, definitions are also\n * parsed right now: before text in paragraphs (specifically, media) are parsed.\n *\n * @type {Resolver}\n */\nfunction resolveContent(events) {\n  subtokenize(events);\n  return events;\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeContent(effects, ok) {\n  /** @type {Token | undefined} */\n  let previous;\n  return chunkStart;\n\n  /**\n   * Before a content chunk.\n   *\n   * ```markdown\n   * > | abc\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function chunkStart(code) {\n    effects.enter(\"content\");\n    previous = effects.enter(\"chunkContent\", {\n      contentType: \"content\"\n    });\n    return chunkInside(code);\n  }\n\n  /**\n   * In a content chunk.\n   *\n   * ```markdown\n   * > | abc\n   *     ^^^\n   * ```\n   *\n   * @type {State}\n   */\n  function chunkInside(code) {\n    if (code === null) {\n      return contentEnd(code);\n    }\n\n    // To do: in `markdown-rs`, each line is parsed on its own, and everything\n    // is stitched together resolving.\n    if (markdownLineEnding(code)) {\n      return effects.check(continuationConstruct, contentContinue, contentEnd)(code);\n    }\n\n    // Data.\n    effects.consume(code);\n    return chunkInside;\n  }\n\n  /**\n   *\n   *\n   * @type {State}\n   */\n  function contentEnd(code) {\n    effects.exit(\"chunkContent\");\n    effects.exit(\"content\");\n    return ok(code);\n  }\n\n  /**\n   *\n   *\n   * @type {State}\n   */\n  function contentContinue(code) {\n    effects.consume(code);\n    effects.exit(\"chunkContent\");\n    previous.next = effects.enter(\"chunkContent\", {\n      contentType: \"content\",\n      previous\n    });\n    previous = previous.next;\n    return chunkInside;\n  }\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeContinuation(effects, ok, nok) {\n  const self = this;\n  return startLookahead;\n\n  /**\n   *\n   *\n   * @type {State}\n   */\n  function startLookahead(code) {\n    effects.exit(\"chunkContent\");\n    effects.enter(\"lineEnding\");\n    effects.consume(code);\n    effects.exit(\"lineEnding\");\n    return factorySpace(effects, prefixed, \"linePrefix\");\n  }\n\n  /**\n   *\n   *\n   * @type {State}\n   */\n  function prefixed(code) {\n    if (code === null || markdownLineEnding(code)) {\n      return nok(code);\n    }\n\n    // Always populated by defaults.\n\n    const tail = self.events[self.events.length - 1];\n    if (!self.parser.constructs.disable.null.includes('codeIndented') && tail && tail[1].type === \"linePrefix\" && tail[2].sliceSerialize(tail[1], true).length >= 4) {\n      return ok(code);\n    }\n    return effects.interrupt(self.parser.constructs.flow, nok, ok)(code);\n  }\n}","/**\n * @typedef {import('micromark-util-types').Effects} Effects\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenType} TokenType\n */\n\nimport {\n  asciiControl,\n  markdownLineEndingOrSpace,\n  markdownLineEnding\n} from 'micromark-util-character'\n/**\n * Parse destinations.\n *\n * ###### Examples\n *\n * ```markdown\n * <a>\n * <a\\>b>\n * <a b>\n * <a)>\n * a\n * a\\)b\n * a(b)c\n * a(b)\n * ```\n *\n * @param {Effects} effects\n *   Context.\n * @param {State} ok\n *   State switched to when successful.\n * @param {State} nok\n *   State switched to when unsuccessful.\n * @param {TokenType} type\n *   Type for whole (`<a>` or `b`).\n * @param {TokenType} literalType\n *   Type when enclosed (`<a>`).\n * @param {TokenType} literalMarkerType\n *   Type for enclosing (`<` and `>`).\n * @param {TokenType} rawType\n *   Type when not enclosed (`b`).\n * @param {TokenType} stringType\n *   Type for the value (`a` or `b`).\n * @param {number | undefined} [max=Infinity]\n *   Depth of nested parens (inclusive).\n * @returns {State}\n *   Start state.\n */ // eslint-disable-next-line max-params\nexport function factoryDestination(\n  effects,\n  ok,\n  nok,\n  type,\n  literalType,\n  literalMarkerType,\n  rawType,\n  stringType,\n  max\n) {\n  const limit = max || Number.POSITIVE_INFINITY\n  let balance = 0\n  return start\n\n  /**\n   * Start of destination.\n   *\n   * ```markdown\n   * > | <aa>\n   *     ^\n   * > | aa\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    if (code === 60) {\n      effects.enter(type)\n      effects.enter(literalType)\n      effects.enter(literalMarkerType)\n      effects.consume(code)\n      effects.exit(literalMarkerType)\n      return enclosedBefore\n    }\n\n    // ASCII control, space, closing paren.\n    if (code === null || code === 32 || code === 41 || asciiControl(code)) {\n      return nok(code)\n    }\n    effects.enter(type)\n    effects.enter(rawType)\n    effects.enter(stringType)\n    effects.enter('chunkString', {\n      contentType: 'string'\n    })\n    return raw(code)\n  }\n\n  /**\n   * After `<`, at an enclosed destination.\n   *\n   * ```markdown\n   * > | <aa>\n   *      ^\n   * ```\n   *\n   * @type {State}\n   */\n  function enclosedBefore(code) {\n    if (code === 62) {\n      effects.enter(literalMarkerType)\n      effects.consume(code)\n      effects.exit(literalMarkerType)\n      effects.exit(literalType)\n      effects.exit(type)\n      return ok\n    }\n    effects.enter(stringType)\n    effects.enter('chunkString', {\n      contentType: 'string'\n    })\n    return enclosed(code)\n  }\n\n  /**\n   * In enclosed destination.\n   *\n   * ```markdown\n   * > | <aa>\n   *      ^\n   * ```\n   *\n   * @type {State}\n   */\n  function enclosed(code) {\n    if (code === 62) {\n      effects.exit('chunkString')\n      effects.exit(stringType)\n      return enclosedBefore(code)\n    }\n    if (code === null || code === 60 || markdownLineEnding(code)) {\n      return nok(code)\n    }\n    effects.consume(code)\n    return code === 92 ? enclosedEscape : enclosed\n  }\n\n  /**\n   * After `\\`, at a special character.\n   *\n   * ```markdown\n   * > | <a\\*a>\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function enclosedEscape(code) {\n    if (code === 60 || code === 62 || code === 92) {\n      effects.consume(code)\n      return enclosed\n    }\n    return enclosed(code)\n  }\n\n  /**\n   * In raw destination.\n   *\n   * ```markdown\n   * > | aa\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function raw(code) {\n    if (\n      !balance &&\n      (code === null || code === 41 || markdownLineEndingOrSpace(code))\n    ) {\n      effects.exit('chunkString')\n      effects.exit(stringType)\n      effects.exit(rawType)\n      effects.exit(type)\n      return ok(code)\n    }\n    if (balance < limit && code === 40) {\n      effects.consume(code)\n      balance++\n      return raw\n    }\n    if (code === 41) {\n      effects.consume(code)\n      balance--\n      return raw\n    }\n\n    // ASCII control (but *not* `\\0`) and space and `(`.\n    // Note: in `markdown-rs`, `\\0` exists in codes, in `micromark-js` it\n    // doesn’t.\n    if (code === null || code === 32 || code === 40 || asciiControl(code)) {\n      return nok(code)\n    }\n    effects.consume(code)\n    return code === 92 ? rawEscape : raw\n  }\n\n  /**\n   * After `\\`, at special character.\n   *\n   * ```markdown\n   * > | a\\*a\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function rawEscape(code) {\n    if (code === 40 || code === 41 || code === 92) {\n      effects.consume(code)\n      return raw\n    }\n    return raw(code)\n  }\n}\n","/**\n * @typedef {import('micromark-util-types').Effects} Effects\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').TokenType} TokenType\n */\n\nimport {markdownLineEnding, markdownSpace} from 'micromark-util-character'\n/**\n * Parse labels.\n *\n * > 👉 **Note**: labels in markdown are capped at 999 characters in the string.\n *\n * ###### Examples\n *\n * ```markdown\n * [a]\n * [a\n * b]\n * [a\\]b]\n * ```\n *\n * @this {TokenizeContext}\n *   Tokenize context.\n * @param {Effects} effects\n *   Context.\n * @param {State} ok\n *   State switched to when successful.\n * @param {State} nok\n *   State switched to when unsuccessful.\n * @param {TokenType} type\n *   Type of the whole label (`[a]`).\n * @param {TokenType} markerType\n *   Type for the markers (`[` and `]`).\n * @param {TokenType} stringType\n *   Type for the identifier (`a`).\n * @returns {State}\n *   Start state.\n */ // eslint-disable-next-line max-params\nexport function factoryLabel(effects, ok, nok, type, markerType, stringType) {\n  const self = this\n  let size = 0\n  /** @type {boolean} */\n  let seen\n  return start\n\n  /**\n   * Start of label.\n   *\n   * ```markdown\n   * > | [a]\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    effects.enter(type)\n    effects.enter(markerType)\n    effects.consume(code)\n    effects.exit(markerType)\n    effects.enter(stringType)\n    return atBreak\n  }\n\n  /**\n   * In label, at something, before something else.\n   *\n   * ```markdown\n   * > | [a]\n   *      ^\n   * ```\n   *\n   * @type {State}\n   */\n  function atBreak(code) {\n    if (\n      size > 999 ||\n      code === null ||\n      code === 91 ||\n      (code === 93 && !seen) ||\n      // To do: remove in the future once we’ve switched from\n      // `micromark-extension-footnote` to `micromark-extension-gfm-footnote`,\n      // which doesn’t need this.\n      // Hidden footnotes hook.\n      /* c8 ignore next 3 */\n      (code === 94 &&\n        !size &&\n        '_hiddenFootnoteSupport' in self.parser.constructs)\n    ) {\n      return nok(code)\n    }\n    if (code === 93) {\n      effects.exit(stringType)\n      effects.enter(markerType)\n      effects.consume(code)\n      effects.exit(markerType)\n      effects.exit(type)\n      return ok\n    }\n\n    // To do: indent? Link chunks and EOLs together?\n    if (markdownLineEnding(code)) {\n      effects.enter('lineEnding')\n      effects.consume(code)\n      effects.exit('lineEnding')\n      return atBreak\n    }\n    effects.enter('chunkString', {\n      contentType: 'string'\n    })\n    return labelInside(code)\n  }\n\n  /**\n   * In label, in text.\n   *\n   * ```markdown\n   * > | [a]\n   *      ^\n   * ```\n   *\n   * @type {State}\n   */\n  function labelInside(code) {\n    if (\n      code === null ||\n      code === 91 ||\n      code === 93 ||\n      markdownLineEnding(code) ||\n      size++ > 999\n    ) {\n      effects.exit('chunkString')\n      return atBreak(code)\n    }\n    effects.consume(code)\n    if (!seen) seen = !markdownSpace(code)\n    return code === 92 ? labelEscape : labelInside\n  }\n\n  /**\n   * After `\\`, at a special character.\n   *\n   * ```markdown\n   * > | [a\\*a]\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function labelEscape(code) {\n    if (code === 91 || code === 92 || code === 93) {\n      effects.consume(code)\n      size++\n      return labelInside\n    }\n    return labelInside(code)\n  }\n}\n","/**\n * @typedef {import('micromark-util-types').Code} Code\n * @typedef {import('micromark-util-types').Effects} Effects\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenType} TokenType\n */\n\nimport {factorySpace} from 'micromark-factory-space'\nimport {markdownLineEnding} from 'micromark-util-character'\n/**\n * Parse titles.\n *\n * ###### Examples\n *\n * ```markdown\n * \"a\"\n * 'b'\n * (c)\n * \"a\n * b\"\n * 'a\n *     b'\n * (a\\)b)\n * ```\n *\n * @param {Effects} effects\n *   Context.\n * @param {State} ok\n *   State switched to when successful.\n * @param {State} nok\n *   State switched to when unsuccessful.\n * @param {TokenType} type\n *   Type of the whole title (`\"a\"`, `'b'`, `(c)`).\n * @param {TokenType} markerType\n *   Type for the markers (`\"`, `'`, `(`, and `)`).\n * @param {TokenType} stringType\n *   Type for the value (`a`).\n * @returns {State}\n *   Start state.\n */ // eslint-disable-next-line max-params\nexport function factoryTitle(effects, ok, nok, type, markerType, stringType) {\n  /** @type {NonNullable<Code>} */\n  let marker\n  return start\n\n  /**\n   * Start of title.\n   *\n   * ```markdown\n   * > | \"a\"\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    if (code === 34 || code === 39 || code === 40) {\n      effects.enter(type)\n      effects.enter(markerType)\n      effects.consume(code)\n      effects.exit(markerType)\n      marker = code === 40 ? 41 : code\n      return begin\n    }\n    return nok(code)\n  }\n\n  /**\n   * After opening marker.\n   *\n   * This is also used at the closing marker.\n   *\n   * ```markdown\n   * > | \"a\"\n   *      ^\n   * ```\n   *\n   * @type {State}\n   */\n  function begin(code) {\n    if (code === marker) {\n      effects.enter(markerType)\n      effects.consume(code)\n      effects.exit(markerType)\n      effects.exit(type)\n      return ok\n    }\n    effects.enter(stringType)\n    return atBreak(code)\n  }\n\n  /**\n   * At something, before something else.\n   *\n   * ```markdown\n   * > | \"a\"\n   *      ^\n   * ```\n   *\n   * @type {State}\n   */\n  function atBreak(code) {\n    if (code === marker) {\n      effects.exit(stringType)\n      return begin(marker)\n    }\n    if (code === null) {\n      return nok(code)\n    }\n\n    // Note: blank lines can’t exist in content.\n    if (markdownLineEnding(code)) {\n      // To do: use `space_or_tab_eol_with_options`, connect.\n      effects.enter('lineEnding')\n      effects.consume(code)\n      effects.exit('lineEnding')\n      return factorySpace(effects, atBreak, 'linePrefix')\n    }\n    effects.enter('chunkString', {\n      contentType: 'string'\n    })\n    return inside(code)\n  }\n\n  /**\n   *\n   *\n   * @type {State}\n   */\n  function inside(code) {\n    if (code === marker || code === null || markdownLineEnding(code)) {\n      effects.exit('chunkString')\n      return atBreak(code)\n    }\n    effects.consume(code)\n    return code === 92 ? escape : inside\n  }\n\n  /**\n   * After `\\`, at a special character.\n   *\n   * ```markdown\n   * > | \"a\\*b\"\n   *      ^\n   * ```\n   *\n   * @type {State}\n   */\n  function escape(code) {\n    if (code === marker || code === 92) {\n      effects.consume(code)\n      return inside\n    }\n    return inside(code)\n  }\n}\n","/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\nimport { factoryDestination } from 'micromark-factory-destination';\nimport { factoryLabel } from 'micromark-factory-label';\nimport { factorySpace } from 'micromark-factory-space';\nimport { factoryTitle } from 'micromark-factory-title';\nimport { factoryWhitespace } from 'micromark-factory-whitespace';\nimport { markdownLineEnding, markdownLineEndingOrSpace, markdownSpace } from 'micromark-util-character';\nimport { normalizeIdentifier } from 'micromark-util-normalize-identifier';\n/** @type {Construct} */\nexport const definition = {\n  name: 'definition',\n  tokenize: tokenizeDefinition\n};\n\n/** @type {Construct} */\nconst titleBefore = {\n  tokenize: tokenizeTitleBefore,\n  partial: true\n};\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeDefinition(effects, ok, nok) {\n  const self = this;\n  /** @type {string} */\n  let identifier;\n  return start;\n\n  /**\n   * At start of a definition.\n   *\n   * ```markdown\n   * > | [a]: b \"c\"\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    // Do not interrupt paragraphs (but do follow definitions).\n    // To do: do `interrupt` the way `markdown-rs` does.\n    // To do: parse whitespace the way `markdown-rs` does.\n    effects.enter(\"definition\");\n    return before(code);\n  }\n\n  /**\n   * After optional whitespace, at `[`.\n   *\n   * ```markdown\n   * > | [a]: b \"c\"\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function before(code) {\n    // To do: parse whitespace the way `markdown-rs` does.\n\n    return factoryLabel.call(self, effects, labelAfter,\n    // Note: we don’t need to reset the way `markdown-rs` does.\n    nok, \"definitionLabel\", \"definitionLabelMarker\", \"definitionLabelString\")(code);\n  }\n\n  /**\n   * After label.\n   *\n   * ```markdown\n   * > | [a]: b \"c\"\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function labelAfter(code) {\n    identifier = normalizeIdentifier(self.sliceSerialize(self.events[self.events.length - 1][1]).slice(1, -1));\n    if (code === 58) {\n      effects.enter(\"definitionMarker\");\n      effects.consume(code);\n      effects.exit(\"definitionMarker\");\n      return markerAfter;\n    }\n    return nok(code);\n  }\n\n  /**\n   * After marker.\n   *\n   * ```markdown\n   * > | [a]: b \"c\"\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function markerAfter(code) {\n    // Note: whitespace is optional.\n    return markdownLineEndingOrSpace(code) ? factoryWhitespace(effects, destinationBefore)(code) : destinationBefore(code);\n  }\n\n  /**\n   * Before destination.\n   *\n   * ```markdown\n   * > | [a]: b \"c\"\n   *          ^\n   * ```\n   *\n   * @type {State}\n   */\n  function destinationBefore(code) {\n    return factoryDestination(effects, destinationAfter,\n    // Note: we don’t need to reset the way `markdown-rs` does.\n    nok, \"definitionDestination\", \"definitionDestinationLiteral\", \"definitionDestinationLiteralMarker\", \"definitionDestinationRaw\", \"definitionDestinationString\")(code);\n  }\n\n  /**\n   * After destination.\n   *\n   * ```markdown\n   * > | [a]: b \"c\"\n   *           ^\n   * ```\n   *\n   * @type {State}\n   */\n  function destinationAfter(code) {\n    return effects.attempt(titleBefore, after, after)(code);\n  }\n\n  /**\n   * After definition.\n   *\n   * ```markdown\n   * > | [a]: b\n   *           ^\n   * > | [a]: b \"c\"\n   *               ^\n   * ```\n   *\n   * @type {State}\n   */\n  function after(code) {\n    return markdownSpace(code) ? factorySpace(effects, afterWhitespace, \"whitespace\")(code) : afterWhitespace(code);\n  }\n\n  /**\n   * After definition, after optional whitespace.\n   *\n   * ```markdown\n   * > | [a]: b\n   *           ^\n   * > | [a]: b \"c\"\n   *               ^\n   * ```\n   *\n   * @type {State}\n   */\n  function afterWhitespace(code) {\n    if (code === null || markdownLineEnding(code)) {\n      effects.exit(\"definition\");\n\n      // Note: we don’t care about uniqueness.\n      // It’s likely that that doesn’t happen very frequently.\n      // It is more likely that it wastes precious time.\n      self.parser.defined.push(identifier);\n\n      // To do: `markdown-rs` interrupt.\n      // // You’d be interrupting.\n      // tokenizer.interrupt = true\n      return ok(code);\n    }\n    return nok(code);\n  }\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeTitleBefore(effects, ok, nok) {\n  return titleBefore;\n\n  /**\n   * After destination, at whitespace.\n   *\n   * ```markdown\n   * > | [a]: b\n   *           ^\n   * > | [a]: b \"c\"\n   *           ^\n   * ```\n   *\n   * @type {State}\n   */\n  function titleBefore(code) {\n    return markdownLineEndingOrSpace(code) ? factoryWhitespace(effects, beforeMarker)(code) : nok(code);\n  }\n\n  /**\n   * At title.\n   *\n   * ```markdown\n   *   | [a]: b\n   * > | \"c\"\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function beforeMarker(code) {\n    return factoryTitle(effects, titleAfter, nok, \"definitionTitle\", \"definitionTitleMarker\", \"definitionTitleString\")(code);\n  }\n\n  /**\n   * After title.\n   *\n   * ```markdown\n   * > | [a]: b \"c\"\n   *               ^\n   * ```\n   *\n   * @type {State}\n   */\n  function titleAfter(code) {\n    return markdownSpace(code) ? factorySpace(effects, titleAfterOptionalWhitespace, \"whitespace\")(code) : titleAfterOptionalWhitespace(code);\n  }\n\n  /**\n   * After title, after optional whitespace.\n   *\n   * ```markdown\n   * > | [a]: b \"c\"\n   *               ^\n   * ```\n   *\n   * @type {State}\n   */\n  function titleAfterOptionalWhitespace(code) {\n    return code === null || markdownLineEnding(code) ? ok(code) : nok(code);\n  }\n}","/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\nimport { markdownLineEnding } from 'micromark-util-character';\n/** @type {Construct} */\nexport const hardBreakEscape = {\n  name: 'hardBreakEscape',\n  tokenize: tokenizeHardBreakEscape\n};\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeHardBreakEscape(effects, ok, nok) {\n  return start;\n\n  /**\n   * Start of a hard break (escape).\n   *\n   * ```markdown\n   * > | a\\\n   *      ^\n   *   | b\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    effects.enter(\"hardBreakEscape\");\n    effects.consume(code);\n    return after;\n  }\n\n  /**\n   * After `\\`, at eol.\n   *\n   * ```markdown\n   * > | a\\\n   *       ^\n   *   | b\n   * ```\n   *\n   *  @type {State}\n   */\n  function after(code) {\n    if (markdownLineEnding(code)) {\n      effects.exit(\"hardBreakEscape\");\n      return ok(code);\n    }\n    return nok(code);\n  }\n}","/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').Resolver} Resolver\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').Token} Token\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\nimport { factorySpace } from 'micromark-factory-space';\nimport { markdownLineEnding, markdownLineEndingOrSpace, markdownSpace } from 'micromark-util-character';\nimport { splice } from 'micromark-util-chunked';\n/** @type {Construct} */\nexport const headingAtx = {\n  name: 'headingAtx',\n  tokenize: tokenizeHeadingAtx,\n  resolve: resolveHeadingAtx\n};\n\n/** @type {Resolver} */\nfunction resolveHeadingAtx(events, context) {\n  let contentEnd = events.length - 2;\n  let contentStart = 3;\n  /** @type {Token} */\n  let content;\n  /** @type {Token} */\n  let text;\n\n  // Prefix whitespace, part of the opening.\n  if (events[contentStart][1].type === \"whitespace\") {\n    contentStart += 2;\n  }\n\n  // Suffix whitespace, part of the closing.\n  if (contentEnd - 2 > contentStart && events[contentEnd][1].type === \"whitespace\") {\n    contentEnd -= 2;\n  }\n  if (events[contentEnd][1].type === \"atxHeadingSequence\" && (contentStart === contentEnd - 1 || contentEnd - 4 > contentStart && events[contentEnd - 2][1].type === \"whitespace\")) {\n    contentEnd -= contentStart + 1 === contentEnd ? 2 : 4;\n  }\n  if (contentEnd > contentStart) {\n    content = {\n      type: \"atxHeadingText\",\n      start: events[contentStart][1].start,\n      end: events[contentEnd][1].end\n    };\n    text = {\n      type: \"chunkText\",\n      start: events[contentStart][1].start,\n      end: events[contentEnd][1].end,\n      contentType: \"text\"\n    };\n    splice(events, contentStart, contentEnd - contentStart + 1, [['enter', content, context], ['enter', text, context], ['exit', text, context], ['exit', content, context]]);\n  }\n  return events;\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeHeadingAtx(effects, ok, nok) {\n  let size = 0;\n  return start;\n\n  /**\n   * Start of a heading (atx).\n   *\n   * ```markdown\n   * > | ## aa\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    // To do: parse indent like `markdown-rs`.\n    effects.enter(\"atxHeading\");\n    return before(code);\n  }\n\n  /**\n   * After optional whitespace, at `#`.\n   *\n   * ```markdown\n   * > | ## aa\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function before(code) {\n    effects.enter(\"atxHeadingSequence\");\n    return sequenceOpen(code);\n  }\n\n  /**\n   * In opening sequence.\n   *\n   * ```markdown\n   * > | ## aa\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function sequenceOpen(code) {\n    if (code === 35 && size++ < 6) {\n      effects.consume(code);\n      return sequenceOpen;\n    }\n\n    // Always at least one `#`.\n    if (code === null || markdownLineEndingOrSpace(code)) {\n      effects.exit(\"atxHeadingSequence\");\n      return atBreak(code);\n    }\n    return nok(code);\n  }\n\n  /**\n   * After something, before something else.\n   *\n   * ```markdown\n   * > | ## aa\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function atBreak(code) {\n    if (code === 35) {\n      effects.enter(\"atxHeadingSequence\");\n      return sequenceFurther(code);\n    }\n    if (code === null || markdownLineEnding(code)) {\n      effects.exit(\"atxHeading\");\n      // To do: interrupt like `markdown-rs`.\n      // // Feel free to interrupt.\n      // tokenizer.interrupt = false\n      return ok(code);\n    }\n    if (markdownSpace(code)) {\n      return factorySpace(effects, atBreak, \"whitespace\")(code);\n    }\n\n    // To do: generate `data` tokens, add the `text` token later.\n    // Needs edit map, see: `markdown.rs`.\n    effects.enter(\"atxHeadingText\");\n    return data(code);\n  }\n\n  /**\n   * In further sequence (after whitespace).\n   *\n   * Could be normal “visible” hashes in the heading or a final sequence.\n   *\n   * ```markdown\n   * > | ## aa ##\n   *           ^\n   * ```\n   *\n   * @type {State}\n   */\n  function sequenceFurther(code) {\n    if (code === 35) {\n      effects.consume(code);\n      return sequenceFurther;\n    }\n    effects.exit(\"atxHeadingSequence\");\n    return atBreak(code);\n  }\n\n  /**\n   * In text.\n   *\n   * ```markdown\n   * > | ## aa\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function data(code) {\n    if (code === null || code === 35 || markdownLineEndingOrSpace(code)) {\n      effects.exit(\"atxHeadingText\");\n      return atBreak(code);\n    }\n    effects.consume(code);\n    return data;\n  }\n}","/**\n * List of lowercase HTML “block” tag names.\n *\n * The list, when parsing HTML (flow), results in more relaxed rules (condition\n * 6).\n * Because they are known blocks, the HTML-like syntax doesn’t have to be\n * strictly parsed.\n * For tag names not in this list, a more strict algorithm (condition 7) is used\n * to detect whether the HTML-like syntax is seen as HTML (flow) or not.\n *\n * This is copied from:\n * <https://spec.commonmark.org/0.30/#html-blocks>.\n *\n * > 👉 **Note**: `search` was added in `CommonMark@0.31`.\n */\nexport const htmlBlockNames = [\n  'address',\n  'article',\n  'aside',\n  'base',\n  'basefont',\n  'blockquote',\n  'body',\n  'caption',\n  'center',\n  'col',\n  'colgroup',\n  'dd',\n  'details',\n  'dialog',\n  'dir',\n  'div',\n  'dl',\n  'dt',\n  'fieldset',\n  'figcaption',\n  'figure',\n  'footer',\n  'form',\n  'frame',\n  'frameset',\n  'h1',\n  'h2',\n  'h3',\n  'h4',\n  'h5',\n  'h6',\n  'head',\n  'header',\n  'hr',\n  'html',\n  'iframe',\n  'legend',\n  'li',\n  'link',\n  'main',\n  'menu',\n  'menuitem',\n  'nav',\n  'noframes',\n  'ol',\n  'optgroup',\n  'option',\n  'p',\n  'param',\n  'search',\n  'section',\n  'summary',\n  'table',\n  'tbody',\n  'td',\n  'tfoot',\n  'th',\n  'thead',\n  'title',\n  'tr',\n  'track',\n  'ul'\n]\n\n/**\n * List of lowercase HTML “raw” tag names.\n *\n * The list, when parsing HTML (flow), results in HTML that can include lines\n * without exiting, until a closing tag also in this list is found (condition\n * 1).\n *\n * This module is copied from:\n * <https://spec.commonmark.org/0.30/#html-blocks>.\n *\n * > 👉 **Note**: `textarea` was added in `CommonMark@0.30`.\n */\nexport const htmlRawNames = ['pre', 'script', 'style', 'textarea']\n","/**\n * @typedef {import('micromark-util-types').Code} Code\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').Resolver} Resolver\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\nimport { asciiAlpha, asciiAlphanumeric, markdownLineEnding, markdownLineEndingOrSpace, markdownSpace } from 'micromark-util-character';\nimport { htmlBlockNames, htmlRawNames } from 'micromark-util-html-tag-name';\nimport { blankLine } from './blank-line.js';\n\n/** @type {Construct} */\nexport const htmlFlow = {\n  name: 'htmlFlow',\n  tokenize: tokenizeHtmlFlow,\n  resolveTo: resolveToHtmlFlow,\n  concrete: true\n};\n\n/** @type {Construct} */\nconst blankLineBefore = {\n  tokenize: tokenizeBlankLineBefore,\n  partial: true\n};\nconst nonLazyContinuationStart = {\n  tokenize: tokenizeNonLazyContinuationStart,\n  partial: true\n};\n\n/** @type {Resolver} */\nfunction resolveToHtmlFlow(events) {\n  let index = events.length;\n  while (index--) {\n    if (events[index][0] === 'enter' && events[index][1].type === \"htmlFlow\") {\n      break;\n    }\n  }\n  if (index > 1 && events[index - 2][1].type === \"linePrefix\") {\n    // Add the prefix start to the HTML token.\n    events[index][1].start = events[index - 2][1].start;\n    // Add the prefix start to the HTML line token.\n    events[index + 1][1].start = events[index - 2][1].start;\n    // Remove the line prefix.\n    events.splice(index - 2, 2);\n  }\n  return events;\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeHtmlFlow(effects, ok, nok) {\n  const self = this;\n  /** @type {number} */\n  let marker;\n  /** @type {boolean} */\n  let closingTag;\n  /** @type {string} */\n  let buffer;\n  /** @type {number} */\n  let index;\n  /** @type {Code} */\n  let markerB;\n  return start;\n\n  /**\n   * Start of HTML (flow).\n   *\n   * ```markdown\n   * > | <x />\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    // To do: parse indent like `markdown-rs`.\n    return before(code);\n  }\n\n  /**\n   * At `<`, after optional whitespace.\n   *\n   * ```markdown\n   * > | <x />\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function before(code) {\n    effects.enter(\"htmlFlow\");\n    effects.enter(\"htmlFlowData\");\n    effects.consume(code);\n    return open;\n  }\n\n  /**\n   * After `<`, at tag name or other stuff.\n   *\n   * ```markdown\n   * > | <x />\n   *      ^\n   * > | <!doctype>\n   *      ^\n   * > | <!--xxx-->\n   *      ^\n   * ```\n   *\n   * @type {State}\n   */\n  function open(code) {\n    if (code === 33) {\n      effects.consume(code);\n      return declarationOpen;\n    }\n    if (code === 47) {\n      effects.consume(code);\n      closingTag = true;\n      return tagCloseStart;\n    }\n    if (code === 63) {\n      effects.consume(code);\n      marker = 3;\n      // To do:\n      // tokenizer.concrete = true\n      // To do: use `markdown-rs` style interrupt.\n      // While we’re in an instruction instead of a declaration, we’re on a `?`\n      // right now, so we do need to search for `>`, similar to declarations.\n      return self.interrupt ? ok : continuationDeclarationInside;\n    }\n\n    // ASCII alphabetical.\n    if (asciiAlpha(code)) {\n      effects.consume(code);\n      // @ts-expect-error: not null.\n      buffer = String.fromCharCode(code);\n      return tagName;\n    }\n    return nok(code);\n  }\n\n  /**\n   * After `<!`, at declaration, comment, or CDATA.\n   *\n   * ```markdown\n   * > | <!doctype>\n   *       ^\n   * > | <!--xxx-->\n   *       ^\n   * > | <![CDATA[>&<]]>\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function declarationOpen(code) {\n    if (code === 45) {\n      effects.consume(code);\n      marker = 2;\n      return commentOpenInside;\n    }\n    if (code === 91) {\n      effects.consume(code);\n      marker = 5;\n      index = 0;\n      return cdataOpenInside;\n    }\n\n    // ASCII alphabetical.\n    if (asciiAlpha(code)) {\n      effects.consume(code);\n      marker = 4;\n      // // Do not form containers.\n      // tokenizer.concrete = true\n      return self.interrupt ? ok : continuationDeclarationInside;\n    }\n    return nok(code);\n  }\n\n  /**\n   * After `<!-`, inside a comment, at another `-`.\n   *\n   * ```markdown\n   * > | <!--xxx-->\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function commentOpenInside(code) {\n    if (code === 45) {\n      effects.consume(code);\n      // // Do not form containers.\n      // tokenizer.concrete = true\n      return self.interrupt ? ok : continuationDeclarationInside;\n    }\n    return nok(code);\n  }\n\n  /**\n   * After `<![`, inside CDATA, expecting `CDATA[`.\n   *\n   * ```markdown\n   * > | <![CDATA[>&<]]>\n   *        ^^^^^^\n   * ```\n   *\n   * @type {State}\n   */\n  function cdataOpenInside(code) {\n    const value = \"CDATA[\";\n    if (code === value.charCodeAt(index++)) {\n      effects.consume(code);\n      if (index === value.length) {\n        // // Do not form containers.\n        // tokenizer.concrete = true\n        return self.interrupt ? ok : continuation;\n      }\n      return cdataOpenInside;\n    }\n    return nok(code);\n  }\n\n  /**\n   * After `</`, in closing tag, at tag name.\n   *\n   * ```markdown\n   * > | </x>\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function tagCloseStart(code) {\n    if (asciiAlpha(code)) {\n      effects.consume(code);\n      // @ts-expect-error: not null.\n      buffer = String.fromCharCode(code);\n      return tagName;\n    }\n    return nok(code);\n  }\n\n  /**\n   * In tag name.\n   *\n   * ```markdown\n   * > | <ab>\n   *      ^^\n   * > | </ab>\n   *       ^^\n   * ```\n   *\n   * @type {State}\n   */\n  function tagName(code) {\n    if (code === null || code === 47 || code === 62 || markdownLineEndingOrSpace(code)) {\n      const slash = code === 47;\n      const name = buffer.toLowerCase();\n      if (!slash && !closingTag && htmlRawNames.includes(name)) {\n        marker = 1;\n        // // Do not form containers.\n        // tokenizer.concrete = true\n        return self.interrupt ? ok(code) : continuation(code);\n      }\n      if (htmlBlockNames.includes(buffer.toLowerCase())) {\n        marker = 6;\n        if (slash) {\n          effects.consume(code);\n          return basicSelfClosing;\n        }\n\n        // // Do not form containers.\n        // tokenizer.concrete = true\n        return self.interrupt ? ok(code) : continuation(code);\n      }\n      marker = 7;\n      // Do not support complete HTML when interrupting.\n      return self.interrupt && !self.parser.lazy[self.now().line] ? nok(code) : closingTag ? completeClosingTagAfter(code) : completeAttributeNameBefore(code);\n    }\n\n    // ASCII alphanumerical and `-`.\n    if (code === 45 || asciiAlphanumeric(code)) {\n      effects.consume(code);\n      buffer += String.fromCharCode(code);\n      return tagName;\n    }\n    return nok(code);\n  }\n\n  /**\n   * After closing slash of a basic tag name.\n   *\n   * ```markdown\n   * > | <div/>\n   *          ^\n   * ```\n   *\n   * @type {State}\n   */\n  function basicSelfClosing(code) {\n    if (code === 62) {\n      effects.consume(code);\n      // // Do not form containers.\n      // tokenizer.concrete = true\n      return self.interrupt ? ok : continuation;\n    }\n    return nok(code);\n  }\n\n  /**\n   * After closing slash of a complete tag name.\n   *\n   * ```markdown\n   * > | <x/>\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function completeClosingTagAfter(code) {\n    if (markdownSpace(code)) {\n      effects.consume(code);\n      return completeClosingTagAfter;\n    }\n    return completeEnd(code);\n  }\n\n  /**\n   * At an attribute name.\n   *\n   * At first, this state is used after a complete tag name, after whitespace,\n   * where it expects optional attributes or the end of the tag.\n   * It is also reused after attributes, when expecting more optional\n   * attributes.\n   *\n   * ```markdown\n   * > | <a />\n   *        ^\n   * > | <a :b>\n   *        ^\n   * > | <a _b>\n   *        ^\n   * > | <a b>\n   *        ^\n   * > | <a >\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function completeAttributeNameBefore(code) {\n    if (code === 47) {\n      effects.consume(code);\n      return completeEnd;\n    }\n\n    // ASCII alphanumerical and `:` and `_`.\n    if (code === 58 || code === 95 || asciiAlpha(code)) {\n      effects.consume(code);\n      return completeAttributeName;\n    }\n    if (markdownSpace(code)) {\n      effects.consume(code);\n      return completeAttributeNameBefore;\n    }\n    return completeEnd(code);\n  }\n\n  /**\n   * In attribute name.\n   *\n   * ```markdown\n   * > | <a :b>\n   *         ^\n   * > | <a _b>\n   *         ^\n   * > | <a b>\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function completeAttributeName(code) {\n    // ASCII alphanumerical and `-`, `.`, `:`, and `_`.\n    if (code === 45 || code === 46 || code === 58 || code === 95 || asciiAlphanumeric(code)) {\n      effects.consume(code);\n      return completeAttributeName;\n    }\n    return completeAttributeNameAfter(code);\n  }\n\n  /**\n   * After attribute name, at an optional initializer, the end of the tag, or\n   * whitespace.\n   *\n   * ```markdown\n   * > | <a b>\n   *         ^\n   * > | <a b=c>\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function completeAttributeNameAfter(code) {\n    if (code === 61) {\n      effects.consume(code);\n      return completeAttributeValueBefore;\n    }\n    if (markdownSpace(code)) {\n      effects.consume(code);\n      return completeAttributeNameAfter;\n    }\n    return completeAttributeNameBefore(code);\n  }\n\n  /**\n   * Before unquoted, double quoted, or single quoted attribute value, allowing\n   * whitespace.\n   *\n   * ```markdown\n   * > | <a b=c>\n   *          ^\n   * > | <a b=\"c\">\n   *          ^\n   * ```\n   *\n   * @type {State}\n   */\n  function completeAttributeValueBefore(code) {\n    if (code === null || code === 60 || code === 61 || code === 62 || code === 96) {\n      return nok(code);\n    }\n    if (code === 34 || code === 39) {\n      effects.consume(code);\n      markerB = code;\n      return completeAttributeValueQuoted;\n    }\n    if (markdownSpace(code)) {\n      effects.consume(code);\n      return completeAttributeValueBefore;\n    }\n    return completeAttributeValueUnquoted(code);\n  }\n\n  /**\n   * In double or single quoted attribute value.\n   *\n   * ```markdown\n   * > | <a b=\"c\">\n   *           ^\n   * > | <a b='c'>\n   *           ^\n   * ```\n   *\n   * @type {State}\n   */\n  function completeAttributeValueQuoted(code) {\n    if (code === markerB) {\n      effects.consume(code);\n      markerB = null;\n      return completeAttributeValueQuotedAfter;\n    }\n    if (code === null || markdownLineEnding(code)) {\n      return nok(code);\n    }\n    effects.consume(code);\n    return completeAttributeValueQuoted;\n  }\n\n  /**\n   * In unquoted attribute value.\n   *\n   * ```markdown\n   * > | <a b=c>\n   *          ^\n   * ```\n   *\n   * @type {State}\n   */\n  function completeAttributeValueUnquoted(code) {\n    if (code === null || code === 34 || code === 39 || code === 47 || code === 60 || code === 61 || code === 62 || code === 96 || markdownLineEndingOrSpace(code)) {\n      return completeAttributeNameAfter(code);\n    }\n    effects.consume(code);\n    return completeAttributeValueUnquoted;\n  }\n\n  /**\n   * After double or single quoted attribute value, before whitespace or the\n   * end of the tag.\n   *\n   * ```markdown\n   * > | <a b=\"c\">\n   *            ^\n   * ```\n   *\n   * @type {State}\n   */\n  function completeAttributeValueQuotedAfter(code) {\n    if (code === 47 || code === 62 || markdownSpace(code)) {\n      return completeAttributeNameBefore(code);\n    }\n    return nok(code);\n  }\n\n  /**\n   * In certain circumstances of a complete tag where only an `>` is allowed.\n   *\n   * ```markdown\n   * > | <a b=\"c\">\n   *             ^\n   * ```\n   *\n   * @type {State}\n   */\n  function completeEnd(code) {\n    if (code === 62) {\n      effects.consume(code);\n      return completeAfter;\n    }\n    return nok(code);\n  }\n\n  /**\n   * After `>` in a complete tag.\n   *\n   * ```markdown\n   * > | <x>\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function completeAfter(code) {\n    if (code === null || markdownLineEnding(code)) {\n      // // Do not form containers.\n      // tokenizer.concrete = true\n      return continuation(code);\n    }\n    if (markdownSpace(code)) {\n      effects.consume(code);\n      return completeAfter;\n    }\n    return nok(code);\n  }\n\n  /**\n   * In continuation of any HTML kind.\n   *\n   * ```markdown\n   * > | <!--xxx-->\n   *          ^\n   * ```\n   *\n   * @type {State}\n   */\n  function continuation(code) {\n    if (code === 45 && marker === 2) {\n      effects.consume(code);\n      return continuationCommentInside;\n    }\n    if (code === 60 && marker === 1) {\n      effects.consume(code);\n      return continuationRawTagOpen;\n    }\n    if (code === 62 && marker === 4) {\n      effects.consume(code);\n      return continuationClose;\n    }\n    if (code === 63 && marker === 3) {\n      effects.consume(code);\n      return continuationDeclarationInside;\n    }\n    if (code === 93 && marker === 5) {\n      effects.consume(code);\n      return continuationCdataInside;\n    }\n    if (markdownLineEnding(code) && (marker === 6 || marker === 7)) {\n      effects.exit(\"htmlFlowData\");\n      return effects.check(blankLineBefore, continuationAfter, continuationStart)(code);\n    }\n    if (code === null || markdownLineEnding(code)) {\n      effects.exit(\"htmlFlowData\");\n      return continuationStart(code);\n    }\n    effects.consume(code);\n    return continuation;\n  }\n\n  /**\n   * In continuation, at eol.\n   *\n   * ```markdown\n   * > | <x>\n   *        ^\n   *   | asd\n   * ```\n   *\n   * @type {State}\n   */\n  function continuationStart(code) {\n    return effects.check(nonLazyContinuationStart, continuationStartNonLazy, continuationAfter)(code);\n  }\n\n  /**\n   * In continuation, at eol, before non-lazy content.\n   *\n   * ```markdown\n   * > | <x>\n   *        ^\n   *   | asd\n   * ```\n   *\n   * @type {State}\n   */\n  function continuationStartNonLazy(code) {\n    effects.enter(\"lineEnding\");\n    effects.consume(code);\n    effects.exit(\"lineEnding\");\n    return continuationBefore;\n  }\n\n  /**\n   * In continuation, before non-lazy content.\n   *\n   * ```markdown\n   *   | <x>\n   * > | asd\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function continuationBefore(code) {\n    if (code === null || markdownLineEnding(code)) {\n      return continuationStart(code);\n    }\n    effects.enter(\"htmlFlowData\");\n    return continuation(code);\n  }\n\n  /**\n   * In comment continuation, after one `-`, expecting another.\n   *\n   * ```markdown\n   * > | <!--xxx-->\n   *             ^\n   * ```\n   *\n   * @type {State}\n   */\n  function continuationCommentInside(code) {\n    if (code === 45) {\n      effects.consume(code);\n      return continuationDeclarationInside;\n    }\n    return continuation(code);\n  }\n\n  /**\n   * In raw continuation, after `<`, at `/`.\n   *\n   * ```markdown\n   * > | <script>console.log(1)</script>\n   *                            ^\n   * ```\n   *\n   * @type {State}\n   */\n  function continuationRawTagOpen(code) {\n    if (code === 47) {\n      effects.consume(code);\n      buffer = '';\n      return continuationRawEndTag;\n    }\n    return continuation(code);\n  }\n\n  /**\n   * In raw continuation, after `</`, in a raw tag name.\n   *\n   * ```markdown\n   * > | <script>console.log(1)</script>\n   *                             ^^^^^^\n   * ```\n   *\n   * @type {State}\n   */\n  function continuationRawEndTag(code) {\n    if (code === 62) {\n      const name = buffer.toLowerCase();\n      if (htmlRawNames.includes(name)) {\n        effects.consume(code);\n        return continuationClose;\n      }\n      return continuation(code);\n    }\n    if (asciiAlpha(code) && buffer.length < 8) {\n      effects.consume(code);\n      // @ts-expect-error: not null.\n      buffer += String.fromCharCode(code);\n      return continuationRawEndTag;\n    }\n    return continuation(code);\n  }\n\n  /**\n   * In cdata continuation, after `]`, expecting `]>`.\n   *\n   * ```markdown\n   * > | <![CDATA[>&<]]>\n   *                  ^\n   * ```\n   *\n   * @type {State}\n   */\n  function continuationCdataInside(code) {\n    if (code === 93) {\n      effects.consume(code);\n      return continuationDeclarationInside;\n    }\n    return continuation(code);\n  }\n\n  /**\n   * In declaration or instruction continuation, at `>`.\n   *\n   * ```markdown\n   * > | <!-->\n   *         ^\n   * > | <?>\n   *       ^\n   * > | <!q>\n   *        ^\n   * > | <!--ab-->\n   *             ^\n   * > | <![CDATA[>&<]]>\n   *                   ^\n   * ```\n   *\n   * @type {State}\n   */\n  function continuationDeclarationInside(code) {\n    if (code === 62) {\n      effects.consume(code);\n      return continuationClose;\n    }\n\n    // More dashes.\n    if (code === 45 && marker === 2) {\n      effects.consume(code);\n      return continuationDeclarationInside;\n    }\n    return continuation(code);\n  }\n\n  /**\n   * In closed continuation: everything we get until the eol/eof is part of it.\n   *\n   * ```markdown\n   * > | <!doctype>\n   *               ^\n   * ```\n   *\n   * @type {State}\n   */\n  function continuationClose(code) {\n    if (code === null || markdownLineEnding(code)) {\n      effects.exit(\"htmlFlowData\");\n      return continuationAfter(code);\n    }\n    effects.consume(code);\n    return continuationClose;\n  }\n\n  /**\n   * Done.\n   *\n   * ```markdown\n   * > | <!doctype>\n   *               ^\n   * ```\n   *\n   * @type {State}\n   */\n  function continuationAfter(code) {\n    effects.exit(\"htmlFlow\");\n    // // Feel free to interrupt.\n    // tokenizer.interrupt = false\n    // // No longer concrete.\n    // tokenizer.concrete = false\n    return ok(code);\n  }\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeNonLazyContinuationStart(effects, ok, nok) {\n  const self = this;\n  return start;\n\n  /**\n   * At eol, before continuation.\n   *\n   * ```markdown\n   * > | * ```js\n   *            ^\n   *   | b\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    if (markdownLineEnding(code)) {\n      effects.enter(\"lineEnding\");\n      effects.consume(code);\n      effects.exit(\"lineEnding\");\n      return after;\n    }\n    return nok(code);\n  }\n\n  /**\n   * A continuation.\n   *\n   * ```markdown\n   *   | * ```js\n   * > | b\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function after(code) {\n    return self.parser.lazy[self.now().line] ? nok(code) : ok(code);\n  }\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeBlankLineBefore(effects, ok, nok) {\n  return start;\n\n  /**\n   * Before eol, expecting blank line.\n   *\n   * ```markdown\n   * > | <div>\n   *          ^\n   *   |\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    effects.enter(\"lineEnding\");\n    effects.consume(code);\n    effects.exit(\"lineEnding\");\n    return effects.attempt(blankLine, ok, nok);\n  }\n}","/**\n * @typedef {import('micromark-util-types').Code} Code\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\nimport { factorySpace } from 'micromark-factory-space';\nimport { asciiAlpha, asciiAlphanumeric, markdownLineEnding, markdownLineEndingOrSpace, markdownSpace } from 'micromark-util-character';\n/** @type {Construct} */\nexport const htmlText = {\n  name: 'htmlText',\n  tokenize: tokenizeHtmlText\n};\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeHtmlText(effects, ok, nok) {\n  const self = this;\n  /** @type {NonNullable<Code> | undefined} */\n  let marker;\n  /** @type {number} */\n  let index;\n  /** @type {State} */\n  let returnState;\n  return start;\n\n  /**\n   * Start of HTML (text).\n   *\n   * ```markdown\n   * > | a <b> c\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    effects.enter(\"htmlText\");\n    effects.enter(\"htmlTextData\");\n    effects.consume(code);\n    return open;\n  }\n\n  /**\n   * After `<`, at tag name or other stuff.\n   *\n   * ```markdown\n   * > | a <b> c\n   *        ^\n   * > | a <!doctype> c\n   *        ^\n   * > | a <!--b--> c\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function open(code) {\n    if (code === 33) {\n      effects.consume(code);\n      return declarationOpen;\n    }\n    if (code === 47) {\n      effects.consume(code);\n      return tagCloseStart;\n    }\n    if (code === 63) {\n      effects.consume(code);\n      return instruction;\n    }\n\n    // ASCII alphabetical.\n    if (asciiAlpha(code)) {\n      effects.consume(code);\n      return tagOpen;\n    }\n    return nok(code);\n  }\n\n  /**\n   * After `<!`, at declaration, comment, or CDATA.\n   *\n   * ```markdown\n   * > | a <!doctype> c\n   *         ^\n   * > | a <!--b--> c\n   *         ^\n   * > | a <![CDATA[>&<]]> c\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function declarationOpen(code) {\n    if (code === 45) {\n      effects.consume(code);\n      return commentOpenInside;\n    }\n    if (code === 91) {\n      effects.consume(code);\n      index = 0;\n      return cdataOpenInside;\n    }\n    if (asciiAlpha(code)) {\n      effects.consume(code);\n      return declaration;\n    }\n    return nok(code);\n  }\n\n  /**\n   * In a comment, after `<!-`, at another `-`.\n   *\n   * ```markdown\n   * > | a <!--b--> c\n   *          ^\n   * ```\n   *\n   * @type {State}\n   */\n  function commentOpenInside(code) {\n    if (code === 45) {\n      effects.consume(code);\n      return commentEnd;\n    }\n    return nok(code);\n  }\n\n  /**\n   * In comment.\n   *\n   * ```markdown\n   * > | a <!--b--> c\n   *           ^\n   * ```\n   *\n   * @type {State}\n   */\n  function comment(code) {\n    if (code === null) {\n      return nok(code);\n    }\n    if (code === 45) {\n      effects.consume(code);\n      return commentClose;\n    }\n    if (markdownLineEnding(code)) {\n      returnState = comment;\n      return lineEndingBefore(code);\n    }\n    effects.consume(code);\n    return comment;\n  }\n\n  /**\n   * In comment, after `-`.\n   *\n   * ```markdown\n   * > | a <!--b--> c\n   *             ^\n   * ```\n   *\n   * @type {State}\n   */\n  function commentClose(code) {\n    if (code === 45) {\n      effects.consume(code);\n      return commentEnd;\n    }\n    return comment(code);\n  }\n\n  /**\n   * In comment, after `--`.\n   *\n   * ```markdown\n   * > | a <!--b--> c\n   *              ^\n   * ```\n   *\n   * @type {State}\n   */\n  function commentEnd(code) {\n    return code === 62 ? end(code) : code === 45 ? commentClose(code) : comment(code);\n  }\n\n  /**\n   * After `<![`, in CDATA, expecting `CDATA[`.\n   *\n   * ```markdown\n   * > | a <![CDATA[>&<]]> b\n   *          ^^^^^^\n   * ```\n   *\n   * @type {State}\n   */\n  function cdataOpenInside(code) {\n    const value = \"CDATA[\";\n    if (code === value.charCodeAt(index++)) {\n      effects.consume(code);\n      return index === value.length ? cdata : cdataOpenInside;\n    }\n    return nok(code);\n  }\n\n  /**\n   * In CDATA.\n   *\n   * ```markdown\n   * > | a <![CDATA[>&<]]> b\n   *                ^^^\n   * ```\n   *\n   * @type {State}\n   */\n  function cdata(code) {\n    if (code === null) {\n      return nok(code);\n    }\n    if (code === 93) {\n      effects.consume(code);\n      return cdataClose;\n    }\n    if (markdownLineEnding(code)) {\n      returnState = cdata;\n      return lineEndingBefore(code);\n    }\n    effects.consume(code);\n    return cdata;\n  }\n\n  /**\n   * In CDATA, after `]`, at another `]`.\n   *\n   * ```markdown\n   * > | a <![CDATA[>&<]]> b\n   *                    ^\n   * ```\n   *\n   * @type {State}\n   */\n  function cdataClose(code) {\n    if (code === 93) {\n      effects.consume(code);\n      return cdataEnd;\n    }\n    return cdata(code);\n  }\n\n  /**\n   * In CDATA, after `]]`, at `>`.\n   *\n   * ```markdown\n   * > | a <![CDATA[>&<]]> b\n   *                     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function cdataEnd(code) {\n    if (code === 62) {\n      return end(code);\n    }\n    if (code === 93) {\n      effects.consume(code);\n      return cdataEnd;\n    }\n    return cdata(code);\n  }\n\n  /**\n   * In declaration.\n   *\n   * ```markdown\n   * > | a <!b> c\n   *          ^\n   * ```\n   *\n   * @type {State}\n   */\n  function declaration(code) {\n    if (code === null || code === 62) {\n      return end(code);\n    }\n    if (markdownLineEnding(code)) {\n      returnState = declaration;\n      return lineEndingBefore(code);\n    }\n    effects.consume(code);\n    return declaration;\n  }\n\n  /**\n   * In instruction.\n   *\n   * ```markdown\n   * > | a <?b?> c\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function instruction(code) {\n    if (code === null) {\n      return nok(code);\n    }\n    if (code === 63) {\n      effects.consume(code);\n      return instructionClose;\n    }\n    if (markdownLineEnding(code)) {\n      returnState = instruction;\n      return lineEndingBefore(code);\n    }\n    effects.consume(code);\n    return instruction;\n  }\n\n  /**\n   * In instruction, after `?`, at `>`.\n   *\n   * ```markdown\n   * > | a <?b?> c\n   *           ^\n   * ```\n   *\n   * @type {State}\n   */\n  function instructionClose(code) {\n    return code === 62 ? end(code) : instruction(code);\n  }\n\n  /**\n   * After `</`, in closing tag, at tag name.\n   *\n   * ```markdown\n   * > | a </b> c\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function tagCloseStart(code) {\n    // ASCII alphabetical.\n    if (asciiAlpha(code)) {\n      effects.consume(code);\n      return tagClose;\n    }\n    return nok(code);\n  }\n\n  /**\n   * After `</x`, in a tag name.\n   *\n   * ```markdown\n   * > | a </b> c\n   *          ^\n   * ```\n   *\n   * @type {State}\n   */\n  function tagClose(code) {\n    // ASCII alphanumerical and `-`.\n    if (code === 45 || asciiAlphanumeric(code)) {\n      effects.consume(code);\n      return tagClose;\n    }\n    return tagCloseBetween(code);\n  }\n\n  /**\n   * In closing tag, after tag name.\n   *\n   * ```markdown\n   * > | a </b> c\n   *          ^\n   * ```\n   *\n   * @type {State}\n   */\n  function tagCloseBetween(code) {\n    if (markdownLineEnding(code)) {\n      returnState = tagCloseBetween;\n      return lineEndingBefore(code);\n    }\n    if (markdownSpace(code)) {\n      effects.consume(code);\n      return tagCloseBetween;\n    }\n    return end(code);\n  }\n\n  /**\n   * After `<x`, in opening tag name.\n   *\n   * ```markdown\n   * > | a <b> c\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function tagOpen(code) {\n    // ASCII alphanumerical and `-`.\n    if (code === 45 || asciiAlphanumeric(code)) {\n      effects.consume(code);\n      return tagOpen;\n    }\n    if (code === 47 || code === 62 || markdownLineEndingOrSpace(code)) {\n      return tagOpenBetween(code);\n    }\n    return nok(code);\n  }\n\n  /**\n   * In opening tag, after tag name.\n   *\n   * ```markdown\n   * > | a <b> c\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function tagOpenBetween(code) {\n    if (code === 47) {\n      effects.consume(code);\n      return end;\n    }\n\n    // ASCII alphabetical and `:` and `_`.\n    if (code === 58 || code === 95 || asciiAlpha(code)) {\n      effects.consume(code);\n      return tagOpenAttributeName;\n    }\n    if (markdownLineEnding(code)) {\n      returnState = tagOpenBetween;\n      return lineEndingBefore(code);\n    }\n    if (markdownSpace(code)) {\n      effects.consume(code);\n      return tagOpenBetween;\n    }\n    return end(code);\n  }\n\n  /**\n   * In attribute name.\n   *\n   * ```markdown\n   * > | a <b c> d\n   *          ^\n   * ```\n   *\n   * @type {State}\n   */\n  function tagOpenAttributeName(code) {\n    // ASCII alphabetical and `-`, `.`, `:`, and `_`.\n    if (code === 45 || code === 46 || code === 58 || code === 95 || asciiAlphanumeric(code)) {\n      effects.consume(code);\n      return tagOpenAttributeName;\n    }\n    return tagOpenAttributeNameAfter(code);\n  }\n\n  /**\n   * After attribute name, before initializer, the end of the tag, or\n   * whitespace.\n   *\n   * ```markdown\n   * > | a <b c> d\n   *           ^\n   * ```\n   *\n   * @type {State}\n   */\n  function tagOpenAttributeNameAfter(code) {\n    if (code === 61) {\n      effects.consume(code);\n      return tagOpenAttributeValueBefore;\n    }\n    if (markdownLineEnding(code)) {\n      returnState = tagOpenAttributeNameAfter;\n      return lineEndingBefore(code);\n    }\n    if (markdownSpace(code)) {\n      effects.consume(code);\n      return tagOpenAttributeNameAfter;\n    }\n    return tagOpenBetween(code);\n  }\n\n  /**\n   * Before unquoted, double quoted, or single quoted attribute value, allowing\n   * whitespace.\n   *\n   * ```markdown\n   * > | a <b c=d> e\n   *            ^\n   * ```\n   *\n   * @type {State}\n   */\n  function tagOpenAttributeValueBefore(code) {\n    if (code === null || code === 60 || code === 61 || code === 62 || code === 96) {\n      return nok(code);\n    }\n    if (code === 34 || code === 39) {\n      effects.consume(code);\n      marker = code;\n      return tagOpenAttributeValueQuoted;\n    }\n    if (markdownLineEnding(code)) {\n      returnState = tagOpenAttributeValueBefore;\n      return lineEndingBefore(code);\n    }\n    if (markdownSpace(code)) {\n      effects.consume(code);\n      return tagOpenAttributeValueBefore;\n    }\n    effects.consume(code);\n    return tagOpenAttributeValueUnquoted;\n  }\n\n  /**\n   * In double or single quoted attribute value.\n   *\n   * ```markdown\n   * > | a <b c=\"d\"> e\n   *             ^\n   * ```\n   *\n   * @type {State}\n   */\n  function tagOpenAttributeValueQuoted(code) {\n    if (code === marker) {\n      effects.consume(code);\n      marker = undefined;\n      return tagOpenAttributeValueQuotedAfter;\n    }\n    if (code === null) {\n      return nok(code);\n    }\n    if (markdownLineEnding(code)) {\n      returnState = tagOpenAttributeValueQuoted;\n      return lineEndingBefore(code);\n    }\n    effects.consume(code);\n    return tagOpenAttributeValueQuoted;\n  }\n\n  /**\n   * In unquoted attribute value.\n   *\n   * ```markdown\n   * > | a <b c=d> e\n   *            ^\n   * ```\n   *\n   * @type {State}\n   */\n  function tagOpenAttributeValueUnquoted(code) {\n    if (code === null || code === 34 || code === 39 || code === 60 || code === 61 || code === 96) {\n      return nok(code);\n    }\n    if (code === 47 || code === 62 || markdownLineEndingOrSpace(code)) {\n      return tagOpenBetween(code);\n    }\n    effects.consume(code);\n    return tagOpenAttributeValueUnquoted;\n  }\n\n  /**\n   * After double or single quoted attribute value, before whitespace or the end\n   * of the tag.\n   *\n   * ```markdown\n   * > | a <b c=\"d\"> e\n   *               ^\n   * ```\n   *\n   * @type {State}\n   */\n  function tagOpenAttributeValueQuotedAfter(code) {\n    if (code === 47 || code === 62 || markdownLineEndingOrSpace(code)) {\n      return tagOpenBetween(code);\n    }\n    return nok(code);\n  }\n\n  /**\n   * In certain circumstances of a tag where only an `>` is allowed.\n   *\n   * ```markdown\n   * > | a <b c=\"d\"> e\n   *               ^\n   * ```\n   *\n   * @type {State}\n   */\n  function end(code) {\n    if (code === 62) {\n      effects.consume(code);\n      effects.exit(\"htmlTextData\");\n      effects.exit(\"htmlText\");\n      return ok;\n    }\n    return nok(code);\n  }\n\n  /**\n   * At eol.\n   *\n   * > 👉 **Note**: we can’t have blank lines in text, so no need to worry about\n   * > empty tokens.\n   *\n   * ```markdown\n   * > | a <!--a\n   *            ^\n   *   | b-->\n   * ```\n   *\n   * @type {State}\n   */\n  function lineEndingBefore(code) {\n    effects.exit(\"htmlTextData\");\n    effects.enter(\"lineEnding\");\n    effects.consume(code);\n    effects.exit(\"lineEnding\");\n    return lineEndingAfter;\n  }\n\n  /**\n   * After eol, at optional whitespace.\n   *\n   * > 👉 **Note**: we can’t have blank lines in text, so no need to worry about\n   * > empty tokens.\n   *\n   * ```markdown\n   *   | a <!--a\n   * > | b-->\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function lineEndingAfter(code) {\n    // Always populated by defaults.\n\n    return markdownSpace(code) ? factorySpace(effects, lineEndingAfterPrefix, \"linePrefix\", self.parser.constructs.disable.null.includes('codeIndented') ? undefined : 4)(code) : lineEndingAfterPrefix(code);\n  }\n\n  /**\n   * After eol, after optional whitespace.\n   *\n   * > 👉 **Note**: we can’t have blank lines in text, so no need to worry about\n   * > empty tokens.\n   *\n   * ```markdown\n   *   | a <!--a\n   * > | b-->\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function lineEndingAfterPrefix(code) {\n    effects.enter(\"htmlTextData\");\n    return returnState(code);\n  }\n}","/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').Event} Event\n * @typedef {import('micromark-util-types').Resolver} Resolver\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').Token} Token\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\nimport { factoryDestination } from 'micromark-factory-destination';\nimport { factoryLabel } from 'micromark-factory-label';\nimport { factoryTitle } from 'micromark-factory-title';\nimport { factoryWhitespace } from 'micromark-factory-whitespace';\nimport { markdownLineEndingOrSpace } from 'micromark-util-character';\nimport { push, splice } from 'micromark-util-chunked';\nimport { normalizeIdentifier } from 'micromark-util-normalize-identifier';\nimport { resolveAll } from 'micromark-util-resolve-all';\n/** @type {Construct} */\nexport const labelEnd = {\n  name: 'labelEnd',\n  tokenize: tokenizeLabelEnd,\n  resolveTo: resolveToLabelEnd,\n  resolveAll: resolveAllLabelEnd\n};\n\n/** @type {Construct} */\nconst resourceConstruct = {\n  tokenize: tokenizeResource\n};\n/** @type {Construct} */\nconst referenceFullConstruct = {\n  tokenize: tokenizeReferenceFull\n};\n/** @type {Construct} */\nconst referenceCollapsedConstruct = {\n  tokenize: tokenizeReferenceCollapsed\n};\n\n/** @type {Resolver} */\nfunction resolveAllLabelEnd(events) {\n  let index = -1;\n  while (++index < events.length) {\n    const token = events[index][1];\n    if (token.type === \"labelImage\" || token.type === \"labelLink\" || token.type === \"labelEnd\") {\n      // Remove the marker.\n      events.splice(index + 1, token.type === \"labelImage\" ? 4 : 2);\n      token.type = \"data\";\n      index++;\n    }\n  }\n  return events;\n}\n\n/** @type {Resolver} */\nfunction resolveToLabelEnd(events, context) {\n  let index = events.length;\n  let offset = 0;\n  /** @type {Token} */\n  let token;\n  /** @type {number | undefined} */\n  let open;\n  /** @type {number | undefined} */\n  let close;\n  /** @type {Array<Event>} */\n  let media;\n\n  // Find an opening.\n  while (index--) {\n    token = events[index][1];\n    if (open) {\n      // If we see another link, or inactive link label, we’ve been here before.\n      if (token.type === \"link\" || token.type === \"labelLink\" && token._inactive) {\n        break;\n      }\n\n      // Mark other link openings as inactive, as we can’t have links in\n      // links.\n      if (events[index][0] === 'enter' && token.type === \"labelLink\") {\n        token._inactive = true;\n      }\n    } else if (close) {\n      if (events[index][0] === 'enter' && (token.type === \"labelImage\" || token.type === \"labelLink\") && !token._balanced) {\n        open = index;\n        if (token.type !== \"labelLink\") {\n          offset = 2;\n          break;\n        }\n      }\n    } else if (token.type === \"labelEnd\") {\n      close = index;\n    }\n  }\n  const group = {\n    type: events[open][1].type === \"labelLink\" ? \"link\" : \"image\",\n    start: Object.assign({}, events[open][1].start),\n    end: Object.assign({}, events[events.length - 1][1].end)\n  };\n  const label = {\n    type: \"label\",\n    start: Object.assign({}, events[open][1].start),\n    end: Object.assign({}, events[close][1].end)\n  };\n  const text = {\n    type: \"labelText\",\n    start: Object.assign({}, events[open + offset + 2][1].end),\n    end: Object.assign({}, events[close - 2][1].start)\n  };\n  media = [['enter', group, context], ['enter', label, context]];\n\n  // Opening marker.\n  media = push(media, events.slice(open + 1, open + offset + 3));\n\n  // Text open.\n  media = push(media, [['enter', text, context]]);\n\n  // Always populated by defaults.\n\n  // Between.\n  media = push(media, resolveAll(context.parser.constructs.insideSpan.null, events.slice(open + offset + 4, close - 3), context));\n\n  // Text close, marker close, label close.\n  media = push(media, [['exit', text, context], events[close - 2], events[close - 1], ['exit', label, context]]);\n\n  // Reference, resource, or so.\n  media = push(media, events.slice(close + 1));\n\n  // Media close.\n  media = push(media, [['exit', group, context]]);\n  splice(events, open, events.length, media);\n  return events;\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeLabelEnd(effects, ok, nok) {\n  const self = this;\n  let index = self.events.length;\n  /** @type {Token} */\n  let labelStart;\n  /** @type {boolean} */\n  let defined;\n\n  // Find an opening.\n  while (index--) {\n    if ((self.events[index][1].type === \"labelImage\" || self.events[index][1].type === \"labelLink\") && !self.events[index][1]._balanced) {\n      labelStart = self.events[index][1];\n      break;\n    }\n  }\n  return start;\n\n  /**\n   * Start of label end.\n   *\n   * ```markdown\n   * > | [a](b) c\n   *       ^\n   * > | [a][b] c\n   *       ^\n   * > | [a][] b\n   *       ^\n   * > | [a] b\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    // If there is not an okay opening.\n    if (!labelStart) {\n      return nok(code);\n    }\n\n    // If the corresponding label (link) start is marked as inactive,\n    // it means we’d be wrapping a link, like this:\n    //\n    // ```markdown\n    // > | a [b [c](d) e](f) g.\n    //                  ^\n    // ```\n    //\n    // We can’t have that, so it’s just balanced brackets.\n    if (labelStart._inactive) {\n      return labelEndNok(code);\n    }\n    defined = self.parser.defined.includes(normalizeIdentifier(self.sliceSerialize({\n      start: labelStart.end,\n      end: self.now()\n    })));\n    effects.enter(\"labelEnd\");\n    effects.enter(\"labelMarker\");\n    effects.consume(code);\n    effects.exit(\"labelMarker\");\n    effects.exit(\"labelEnd\");\n    return after;\n  }\n\n  /**\n   * After `]`.\n   *\n   * ```markdown\n   * > | [a](b) c\n   *       ^\n   * > | [a][b] c\n   *       ^\n   * > | [a][] b\n   *       ^\n   * > | [a] b\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function after(code) {\n    // Note: `markdown-rs` also parses GFM footnotes here, which for us is in\n    // an extension.\n\n    // Resource (`[asd](fgh)`)?\n    if (code === 40) {\n      return effects.attempt(resourceConstruct, labelEndOk, defined ? labelEndOk : labelEndNok)(code);\n    }\n\n    // Full (`[asd][fgh]`) or collapsed (`[asd][]`) reference?\n    if (code === 91) {\n      return effects.attempt(referenceFullConstruct, labelEndOk, defined ? referenceNotFull : labelEndNok)(code);\n    }\n\n    // Shortcut (`[asd]`) reference?\n    return defined ? labelEndOk(code) : labelEndNok(code);\n  }\n\n  /**\n   * After `]`, at `[`, but not at a full reference.\n   *\n   * > 👉 **Note**: we only get here if the label is defined.\n   *\n   * ```markdown\n   * > | [a][] b\n   *        ^\n   * > | [a] b\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function referenceNotFull(code) {\n    return effects.attempt(referenceCollapsedConstruct, labelEndOk, labelEndNok)(code);\n  }\n\n  /**\n   * Done, we found something.\n   *\n   * ```markdown\n   * > | [a](b) c\n   *           ^\n   * > | [a][b] c\n   *           ^\n   * > | [a][] b\n   *          ^\n   * > | [a] b\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function labelEndOk(code) {\n    // Note: `markdown-rs` does a bunch of stuff here.\n    return ok(code);\n  }\n\n  /**\n   * Done, it’s nothing.\n   *\n   * There was an okay opening, but we didn’t match anything.\n   *\n   * ```markdown\n   * > | [a](b c\n   *        ^\n   * > | [a][b c\n   *        ^\n   * > | [a] b\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function labelEndNok(code) {\n    labelStart._balanced = true;\n    return nok(code);\n  }\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeResource(effects, ok, nok) {\n  return resourceStart;\n\n  /**\n   * At a resource.\n   *\n   * ```markdown\n   * > | [a](b) c\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function resourceStart(code) {\n    effects.enter(\"resource\");\n    effects.enter(\"resourceMarker\");\n    effects.consume(code);\n    effects.exit(\"resourceMarker\");\n    return resourceBefore;\n  }\n\n  /**\n   * In resource, after `(`, at optional whitespace.\n   *\n   * ```markdown\n   * > | [a](b) c\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function resourceBefore(code) {\n    return markdownLineEndingOrSpace(code) ? factoryWhitespace(effects, resourceOpen)(code) : resourceOpen(code);\n  }\n\n  /**\n   * In resource, after optional whitespace, at `)` or a destination.\n   *\n   * ```markdown\n   * > | [a](b) c\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function resourceOpen(code) {\n    if (code === 41) {\n      return resourceEnd(code);\n    }\n    return factoryDestination(effects, resourceDestinationAfter, resourceDestinationMissing, \"resourceDestination\", \"resourceDestinationLiteral\", \"resourceDestinationLiteralMarker\", \"resourceDestinationRaw\", \"resourceDestinationString\", 32)(code);\n  }\n\n  /**\n   * In resource, after destination, at optional whitespace.\n   *\n   * ```markdown\n   * > | [a](b) c\n   *          ^\n   * ```\n   *\n   * @type {State}\n   */\n  function resourceDestinationAfter(code) {\n    return markdownLineEndingOrSpace(code) ? factoryWhitespace(effects, resourceBetween)(code) : resourceEnd(code);\n  }\n\n  /**\n   * At invalid destination.\n   *\n   * ```markdown\n   * > | [a](<<) b\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function resourceDestinationMissing(code) {\n    return nok(code);\n  }\n\n  /**\n   * In resource, after destination and whitespace, at `(` or title.\n   *\n   * ```markdown\n   * > | [a](b ) c\n   *           ^\n   * ```\n   *\n   * @type {State}\n   */\n  function resourceBetween(code) {\n    if (code === 34 || code === 39 || code === 40) {\n      return factoryTitle(effects, resourceTitleAfter, nok, \"resourceTitle\", \"resourceTitleMarker\", \"resourceTitleString\")(code);\n    }\n    return resourceEnd(code);\n  }\n\n  /**\n   * In resource, after title, at optional whitespace.\n   *\n   * ```markdown\n   * > | [a](b \"c\") d\n   *              ^\n   * ```\n   *\n   * @type {State}\n   */\n  function resourceTitleAfter(code) {\n    return markdownLineEndingOrSpace(code) ? factoryWhitespace(effects, resourceEnd)(code) : resourceEnd(code);\n  }\n\n  /**\n   * In resource, at `)`.\n   *\n   * ```markdown\n   * > | [a](b) d\n   *          ^\n   * ```\n   *\n   * @type {State}\n   */\n  function resourceEnd(code) {\n    if (code === 41) {\n      effects.enter(\"resourceMarker\");\n      effects.consume(code);\n      effects.exit(\"resourceMarker\");\n      effects.exit(\"resource\");\n      return ok;\n    }\n    return nok(code);\n  }\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeReferenceFull(effects, ok, nok) {\n  const self = this;\n  return referenceFull;\n\n  /**\n   * In a reference (full), at the `[`.\n   *\n   * ```markdown\n   * > | [a][b] d\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function referenceFull(code) {\n    return factoryLabel.call(self, effects, referenceFullAfter, referenceFullMissing, \"reference\", \"referenceMarker\", \"referenceString\")(code);\n  }\n\n  /**\n   * In a reference (full), after `]`.\n   *\n   * ```markdown\n   * > | [a][b] d\n   *          ^\n   * ```\n   *\n   * @type {State}\n   */\n  function referenceFullAfter(code) {\n    return self.parser.defined.includes(normalizeIdentifier(self.sliceSerialize(self.events[self.events.length - 1][1]).slice(1, -1))) ? ok(code) : nok(code);\n  }\n\n  /**\n   * In reference (full) that was missing.\n   *\n   * ```markdown\n   * > | [a][b d\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function referenceFullMissing(code) {\n    return nok(code);\n  }\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeReferenceCollapsed(effects, ok, nok) {\n  return referenceCollapsedStart;\n\n  /**\n   * In reference (collapsed), at `[`.\n   *\n   * > 👉 **Note**: we only get here if the label is defined.\n   *\n   * ```markdown\n   * > | [a][] d\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function referenceCollapsedStart(code) {\n    // We only attempt a collapsed label if there’s a `[`.\n\n    effects.enter(\"reference\");\n    effects.enter(\"referenceMarker\");\n    effects.consume(code);\n    effects.exit(\"referenceMarker\");\n    return referenceCollapsedOpen;\n  }\n\n  /**\n   * In reference (collapsed), at `]`.\n   *\n   * > 👉 **Note**: we only get here if the label is defined.\n   *\n   * ```markdown\n   * > | [a][] d\n   *         ^\n   * ```\n   *\n   *  @type {State}\n   */\n  function referenceCollapsedOpen(code) {\n    if (code === 93) {\n      effects.enter(\"referenceMarker\");\n      effects.consume(code);\n      effects.exit(\"referenceMarker\");\n      effects.exit(\"reference\");\n      return ok;\n    }\n    return nok(code);\n  }\n}","/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\nimport { labelEnd } from './label-end.js';\n\n/** @type {Construct} */\nexport const labelStartImage = {\n  name: 'labelStartImage',\n  tokenize: tokenizeLabelStartImage,\n  resolveAll: labelEnd.resolveAll\n};\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeLabelStartImage(effects, ok, nok) {\n  const self = this;\n  return start;\n\n  /**\n   * Start of label (image) start.\n   *\n   * ```markdown\n   * > | a ![b] c\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    effects.enter(\"labelImage\");\n    effects.enter(\"labelImageMarker\");\n    effects.consume(code);\n    effects.exit(\"labelImageMarker\");\n    return open;\n  }\n\n  /**\n   * After `!`, at `[`.\n   *\n   * ```markdown\n   * > | a ![b] c\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function open(code) {\n    if (code === 91) {\n      effects.enter(\"labelMarker\");\n      effects.consume(code);\n      effects.exit(\"labelMarker\");\n      effects.exit(\"labelImage\");\n      return after;\n    }\n    return nok(code);\n  }\n\n  /**\n   * After `![`.\n   *\n   * ```markdown\n   * > | a ![b] c\n   *         ^\n   * ```\n   *\n   * This is needed in because, when GFM footnotes are enabled, images never\n   * form when started with a `^`.\n   * Instead, links form:\n   *\n   * ```markdown\n   * ![^a](b)\n   *\n   * ![^a][b]\n   *\n   * [b]: c\n   * ```\n   *\n   * ```html\n   * <p>!<a href=\\\"b\\\">^a</a></p>\n   * <p>!<a href=\\\"c\\\">^a</a></p>\n   * ```\n   *\n   * @type {State}\n   */\n  function after(code) {\n    // To do: use a new field to do this, this is still needed for\n    // `micromark-extension-gfm-footnote`, but the `label-start-link`\n    // behavior isn’t.\n    // Hidden footnotes hook.\n    /* c8 ignore next 3 */\n    return code === 94 && '_hiddenFootnoteSupport' in self.parser.constructs ? nok(code) : ok(code);\n  }\n}","/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\nimport { labelEnd } from './label-end.js';\n\n/** @type {Construct} */\nexport const labelStartLink = {\n  name: 'labelStartLink',\n  tokenize: tokenizeLabelStartLink,\n  resolveAll: labelEnd.resolveAll\n};\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeLabelStartLink(effects, ok, nok) {\n  const self = this;\n  return start;\n\n  /**\n   * Start of label (link) start.\n   *\n   * ```markdown\n   * > | a [b] c\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    effects.enter(\"labelLink\");\n    effects.enter(\"labelMarker\");\n    effects.consume(code);\n    effects.exit(\"labelMarker\");\n    effects.exit(\"labelLink\");\n    return after;\n  }\n\n  /** @type {State} */\n  function after(code) {\n    // To do: this isn’t needed in `micromark-extension-gfm-footnote`,\n    // remove.\n    // Hidden footnotes hook.\n    /* c8 ignore next 3 */\n    return code === 94 && '_hiddenFootnoteSupport' in self.parser.constructs ? nok(code) : ok(code);\n  }\n}","/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\nimport { factorySpace } from 'micromark-factory-space';\nimport { markdownLineEnding } from 'micromark-util-character';\n/** @type {Construct} */\nexport const lineEnding = {\n  name: 'lineEnding',\n  tokenize: tokenizeLineEnding\n};\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeLineEnding(effects, ok) {\n  return start;\n\n  /** @type {State} */\n  function start(code) {\n    effects.enter(\"lineEnding\");\n    effects.consume(code);\n    effects.exit(\"lineEnding\");\n    return factorySpace(effects, ok, \"linePrefix\");\n  }\n}","/**\n * @typedef {import('micromark-util-types').Code} Code\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\nimport { factorySpace } from 'micromark-factory-space';\nimport { markdownLineEnding, markdownSpace } from 'micromark-util-character';\n/** @type {Construct} */\nexport const thematicBreak = {\n  name: 'thematicBreak',\n  tokenize: tokenizeThematicBreak\n};\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeThematicBreak(effects, ok, nok) {\n  let size = 0;\n  /** @type {NonNullable<Code>} */\n  let marker;\n  return start;\n\n  /**\n   * Start of thematic break.\n   *\n   * ```markdown\n   * > | ***\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    effects.enter(\"thematicBreak\");\n    // To do: parse indent like `markdown-rs`.\n    return before(code);\n  }\n\n  /**\n   * After optional whitespace, at marker.\n   *\n   * ```markdown\n   * > | ***\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function before(code) {\n    marker = code;\n    return atBreak(code);\n  }\n\n  /**\n   * After something, before something else.\n   *\n   * ```markdown\n   * > | ***\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function atBreak(code) {\n    if (code === marker) {\n      effects.enter(\"thematicBreakSequence\");\n      return sequence(code);\n    }\n    if (size >= 3 && (code === null || markdownLineEnding(code))) {\n      effects.exit(\"thematicBreak\");\n      return ok(code);\n    }\n    return nok(code);\n  }\n\n  /**\n   * In sequence.\n   *\n   * ```markdown\n   * > | ***\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function sequence(code) {\n    if (code === marker) {\n      effects.consume(code);\n      size++;\n      return sequence;\n    }\n    effects.exit(\"thematicBreakSequence\");\n    return markdownSpace(code) ? factorySpace(effects, atBreak, \"whitespace\")(code) : atBreak(code);\n  }\n}","/**\n * @typedef {import('micromark-util-types').Code} Code\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').ContainerState} ContainerState\n * @typedef {import('micromark-util-types').Exiter} Exiter\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\nimport { factorySpace } from 'micromark-factory-space';\nimport { asciiDigit, markdownSpace } from 'micromark-util-character';\nimport { blankLine } from './blank-line.js';\nimport { thematicBreak } from './thematic-break.js';\n\n/** @type {Construct} */\nexport const list = {\n  name: 'list',\n  tokenize: tokenizeListStart,\n  continuation: {\n    tokenize: tokenizeListContinuation\n  },\n  exit: tokenizeListEnd\n};\n\n/** @type {Construct} */\nconst listItemPrefixWhitespaceConstruct = {\n  tokenize: tokenizeListItemPrefixWhitespace,\n  partial: true\n};\n\n/** @type {Construct} */\nconst indentConstruct = {\n  tokenize: tokenizeIndent,\n  partial: true\n};\n\n// To do: `markdown-rs` parses list items on their own and later stitches them\n// together.\n\n/**\n * @type {Tokenizer}\n * @this {TokenizeContext}\n */\nfunction tokenizeListStart(effects, ok, nok) {\n  const self = this;\n  const tail = self.events[self.events.length - 1];\n  let initialSize = tail && tail[1].type === \"linePrefix\" ? tail[2].sliceSerialize(tail[1], true).length : 0;\n  let size = 0;\n  return start;\n\n  /** @type {State} */\n  function start(code) {\n    const kind = self.containerState.type || (code === 42 || code === 43 || code === 45 ? \"listUnordered\" : \"listOrdered\");\n    if (kind === \"listUnordered\" ? !self.containerState.marker || code === self.containerState.marker : asciiDigit(code)) {\n      if (!self.containerState.type) {\n        self.containerState.type = kind;\n        effects.enter(kind, {\n          _container: true\n        });\n      }\n      if (kind === \"listUnordered\") {\n        effects.enter(\"listItemPrefix\");\n        return code === 42 || code === 45 ? effects.check(thematicBreak, nok, atMarker)(code) : atMarker(code);\n      }\n      if (!self.interrupt || code === 49) {\n        effects.enter(\"listItemPrefix\");\n        effects.enter(\"listItemValue\");\n        return inside(code);\n      }\n    }\n    return nok(code);\n  }\n\n  /** @type {State} */\n  function inside(code) {\n    if (asciiDigit(code) && ++size < 10) {\n      effects.consume(code);\n      return inside;\n    }\n    if ((!self.interrupt || size < 2) && (self.containerState.marker ? code === self.containerState.marker : code === 41 || code === 46)) {\n      effects.exit(\"listItemValue\");\n      return atMarker(code);\n    }\n    return nok(code);\n  }\n\n  /**\n   * @type {State}\n   **/\n  function atMarker(code) {\n    effects.enter(\"listItemMarker\");\n    effects.consume(code);\n    effects.exit(\"listItemMarker\");\n    self.containerState.marker = self.containerState.marker || code;\n    return effects.check(blankLine,\n    // Can’t be empty when interrupting.\n    self.interrupt ? nok : onBlank, effects.attempt(listItemPrefixWhitespaceConstruct, endOfPrefix, otherPrefix));\n  }\n\n  /** @type {State} */\n  function onBlank(code) {\n    self.containerState.initialBlankLine = true;\n    initialSize++;\n    return endOfPrefix(code);\n  }\n\n  /** @type {State} */\n  function otherPrefix(code) {\n    if (markdownSpace(code)) {\n      effects.enter(\"listItemPrefixWhitespace\");\n      effects.consume(code);\n      effects.exit(\"listItemPrefixWhitespace\");\n      return endOfPrefix;\n    }\n    return nok(code);\n  }\n\n  /** @type {State} */\n  function endOfPrefix(code) {\n    self.containerState.size = initialSize + self.sliceSerialize(effects.exit(\"listItemPrefix\"), true).length;\n    return ok(code);\n  }\n}\n\n/**\n * @type {Tokenizer}\n * @this {TokenizeContext}\n */\nfunction tokenizeListContinuation(effects, ok, nok) {\n  const self = this;\n  self.containerState._closeFlow = undefined;\n  return effects.check(blankLine, onBlank, notBlank);\n\n  /** @type {State} */\n  function onBlank(code) {\n    self.containerState.furtherBlankLines = self.containerState.furtherBlankLines || self.containerState.initialBlankLine;\n\n    // We have a blank line.\n    // Still, try to consume at most the items size.\n    return factorySpace(effects, ok, \"listItemIndent\", self.containerState.size + 1)(code);\n  }\n\n  /** @type {State} */\n  function notBlank(code) {\n    if (self.containerState.furtherBlankLines || !markdownSpace(code)) {\n      self.containerState.furtherBlankLines = undefined;\n      self.containerState.initialBlankLine = undefined;\n      return notInCurrentItem(code);\n    }\n    self.containerState.furtherBlankLines = undefined;\n    self.containerState.initialBlankLine = undefined;\n    return effects.attempt(indentConstruct, ok, notInCurrentItem)(code);\n  }\n\n  /** @type {State} */\n  function notInCurrentItem(code) {\n    // While we do continue, we signal that the flow should be closed.\n    self.containerState._closeFlow = true;\n    // As we’re closing flow, we’re no longer interrupting.\n    self.interrupt = undefined;\n    // Always populated by defaults.\n\n    return factorySpace(effects, effects.attempt(list, ok, nok), \"linePrefix\", self.parser.constructs.disable.null.includes('codeIndented') ? undefined : 4)(code);\n  }\n}\n\n/**\n * @type {Tokenizer}\n * @this {TokenizeContext}\n */\nfunction tokenizeIndent(effects, ok, nok) {\n  const self = this;\n  return factorySpace(effects, afterPrefix, \"listItemIndent\", self.containerState.size + 1);\n\n  /** @type {State} */\n  function afterPrefix(code) {\n    const tail = self.events[self.events.length - 1];\n    return tail && tail[1].type === \"listItemIndent\" && tail[2].sliceSerialize(tail[1], true).length === self.containerState.size ? ok(code) : nok(code);\n  }\n}\n\n/**\n * @type {Exiter}\n * @this {TokenizeContext}\n */\nfunction tokenizeListEnd(effects) {\n  effects.exit(this.containerState.type);\n}\n\n/**\n * @type {Tokenizer}\n * @this {TokenizeContext}\n */\nfunction tokenizeListItemPrefixWhitespace(effects, ok, nok) {\n  const self = this;\n\n  // Always populated by defaults.\n\n  return factorySpace(effects, afterPrefix, \"listItemPrefixWhitespace\", self.parser.constructs.disable.null.includes('codeIndented') ? undefined : 4 + 1);\n\n  /** @type {State} */\n  function afterPrefix(code) {\n    const tail = self.events[self.events.length - 1];\n    return !markdownSpace(code) && tail && tail[1].type === \"listItemPrefixWhitespace\" ? ok(code) : nok(code);\n  }\n}","/**\n * @typedef {import('micromark-util-types').Code} Code\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').Resolver} Resolver\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\nimport { factorySpace } from 'micromark-factory-space';\nimport { markdownLineEnding, markdownSpace } from 'micromark-util-character';\n/** @type {Construct} */\nexport const setextUnderline = {\n  name: 'setextUnderline',\n  tokenize: tokenizeSetextUnderline,\n  resolveTo: resolveToSetextUnderline\n};\n\n/** @type {Resolver} */\nfunction resolveToSetextUnderline(events, context) {\n  // To do: resolve like `markdown-rs`.\n  let index = events.length;\n  /** @type {number | undefined} */\n  let content;\n  /** @type {number | undefined} */\n  let text;\n  /** @type {number | undefined} */\n  let definition;\n\n  // Find the opening of the content.\n  // It’ll always exist: we don’t tokenize if it isn’t there.\n  while (index--) {\n    if (events[index][0] === 'enter') {\n      if (events[index][1].type === \"content\") {\n        content = index;\n        break;\n      }\n      if (events[index][1].type === \"paragraph\") {\n        text = index;\n      }\n    }\n    // Exit\n    else {\n      if (events[index][1].type === \"content\") {\n        // Remove the content end (if needed we’ll add it later)\n        events.splice(index, 1);\n      }\n      if (!definition && events[index][1].type === \"definition\") {\n        definition = index;\n      }\n    }\n  }\n  const heading = {\n    type: \"setextHeading\",\n    start: Object.assign({}, events[text][1].start),\n    end: Object.assign({}, events[events.length - 1][1].end)\n  };\n\n  // Change the paragraph to setext heading text.\n  events[text][1].type = \"setextHeadingText\";\n\n  // If we have definitions in the content, we’ll keep on having content,\n  // but we need move it.\n  if (definition) {\n    events.splice(text, 0, ['enter', heading, context]);\n    events.splice(definition + 1, 0, ['exit', events[content][1], context]);\n    events[content][1].end = Object.assign({}, events[definition][1].end);\n  } else {\n    events[content][1] = heading;\n  }\n\n  // Add the heading exit at the end.\n  events.push(['exit', heading, context]);\n  return events;\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeSetextUnderline(effects, ok, nok) {\n  const self = this;\n  /** @type {NonNullable<Code>} */\n  let marker;\n  return start;\n\n  /**\n   * At start of heading (setext) underline.\n   *\n   * ```markdown\n   *   | aa\n   * > | ==\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    let index = self.events.length;\n    /** @type {boolean | undefined} */\n    let paragraph;\n    // Find an opening.\n    while (index--) {\n      // Skip enter/exit of line ending, line prefix, and content.\n      // We can now either have a definition or a paragraph.\n      if (self.events[index][1].type !== \"lineEnding\" && self.events[index][1].type !== \"linePrefix\" && self.events[index][1].type !== \"content\") {\n        paragraph = self.events[index][1].type === \"paragraph\";\n        break;\n      }\n    }\n\n    // To do: handle lazy/pierce like `markdown-rs`.\n    // To do: parse indent like `markdown-rs`.\n    if (!self.parser.lazy[self.now().line] && (self.interrupt || paragraph)) {\n      effects.enter(\"setextHeadingLine\");\n      marker = code;\n      return before(code);\n    }\n    return nok(code);\n  }\n\n  /**\n   * After optional whitespace, at `-` or `=`.\n   *\n   * ```markdown\n   *   | aa\n   * > | ==\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function before(code) {\n    effects.enter(\"setextHeadingLineSequence\");\n    return inside(code);\n  }\n\n  /**\n   * In sequence.\n   *\n   * ```markdown\n   *   | aa\n   * > | ==\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function inside(code) {\n    if (code === marker) {\n      effects.consume(code);\n      return inside;\n    }\n    effects.exit(\"setextHeadingLineSequence\");\n    return markdownSpace(code) ? factorySpace(effects, after, \"lineSuffix\")(code) : after(code);\n  }\n\n  /**\n   * After sequence, after optional whitespace.\n   *\n   * ```markdown\n   *   | aa\n   * > | ==\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function after(code) {\n    if (code === null || markdownLineEnding(code)) {\n      effects.exit(\"setextHeadingLine\");\n      return ok(code);\n    }\n    return nok(code);\n  }\n}","/**\n * @import {Event, Exiter, Extension, Resolver, State, Token, TokenizeContext, Tokenizer} from 'micromark-util-types'\n */\n\nimport { blankLine } from 'micromark-core-commonmark';\nimport { factorySpace } from 'micromark-factory-space';\nimport { markdownLineEndingOrSpace } from 'micromark-util-character';\nimport { normalizeIdentifier } from 'micromark-util-normalize-identifier';\nconst indent = {\n  tokenize: tokenizeIndent,\n  partial: true\n};\n\n// To do: micromark should support a `_hiddenGfmFootnoteSupport`, which only\n// affects label start (image).\n// That will let us drop `tokenizePotentialGfmFootnote*`.\n// It currently has a `_hiddenFootnoteSupport`, which affects that and more.\n// That can be removed when `micromark-extension-footnote` is archived.\n\n/**\n * Create an extension for `micromark` to enable GFM footnote syntax.\n *\n * @returns {Extension}\n *   Extension for `micromark` that can be passed in `extensions` to\n *   enable GFM footnote syntax.\n */\nexport function gfmFootnote() {\n  /** @type {Extension} */\n  return {\n    document: {\n      [91]: {\n        name: 'gfmFootnoteDefinition',\n        tokenize: tokenizeDefinitionStart,\n        continuation: {\n          tokenize: tokenizeDefinitionContinuation\n        },\n        exit: gfmFootnoteDefinitionEnd\n      }\n    },\n    text: {\n      [91]: {\n        name: 'gfmFootnoteCall',\n        tokenize: tokenizeGfmFootnoteCall\n      },\n      [93]: {\n        name: 'gfmPotentialFootnoteCall',\n        add: 'after',\n        tokenize: tokenizePotentialGfmFootnoteCall,\n        resolveTo: resolveToPotentialGfmFootnoteCall\n      }\n    }\n  };\n}\n\n// To do: remove after micromark update.\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizePotentialGfmFootnoteCall(effects, ok, nok) {\n  const self = this;\n  let index = self.events.length;\n  const defined = self.parser.gfmFootnotes || (self.parser.gfmFootnotes = []);\n  /** @type {Token} */\n  let labelStart;\n\n  // Find an opening.\n  while (index--) {\n    const token = self.events[index][1];\n    if (token.type === \"labelImage\") {\n      labelStart = token;\n      break;\n    }\n\n    // Exit if we’ve walked far enough.\n    if (token.type === 'gfmFootnoteCall' || token.type === \"labelLink\" || token.type === \"label\" || token.type === \"image\" || token.type === \"link\") {\n      break;\n    }\n  }\n  return start;\n\n  /**\n   * @type {State}\n   */\n  function start(code) {\n    if (!labelStart || !labelStart._balanced) {\n      return nok(code);\n    }\n    const id = normalizeIdentifier(self.sliceSerialize({\n      start: labelStart.end,\n      end: self.now()\n    }));\n    if (id.codePointAt(0) !== 94 || !defined.includes(id.slice(1))) {\n      return nok(code);\n    }\n    effects.enter('gfmFootnoteCallLabelMarker');\n    effects.consume(code);\n    effects.exit('gfmFootnoteCallLabelMarker');\n    return ok(code);\n  }\n}\n\n// To do: remove after micromark update.\n/** @type {Resolver} */\nfunction resolveToPotentialGfmFootnoteCall(events, context) {\n  let index = events.length;\n  /** @type {Token | undefined} */\n  let labelStart;\n\n  // Find an opening.\n  while (index--) {\n    if (events[index][1].type === \"labelImage\" && events[index][0] === 'enter') {\n      labelStart = events[index][1];\n      break;\n    }\n  }\n  // Change the `labelImageMarker` to a `data`.\n  events[index + 1][1].type = \"data\";\n  events[index + 3][1].type = 'gfmFootnoteCallLabelMarker';\n\n  // The whole (without `!`):\n  /** @type {Token} */\n  const call = {\n    type: 'gfmFootnoteCall',\n    start: Object.assign({}, events[index + 3][1].start),\n    end: Object.assign({}, events[events.length - 1][1].end)\n  };\n  // The `^` marker\n  /** @type {Token} */\n  const marker = {\n    type: 'gfmFootnoteCallMarker',\n    start: Object.assign({}, events[index + 3][1].end),\n    end: Object.assign({}, events[index + 3][1].end)\n  };\n  // Increment the end 1 character.\n  marker.end.column++;\n  marker.end.offset++;\n  marker.end._bufferIndex++;\n  /** @type {Token} */\n  const string = {\n    type: 'gfmFootnoteCallString',\n    start: Object.assign({}, marker.end),\n    end: Object.assign({}, events[events.length - 1][1].start)\n  };\n  /** @type {Token} */\n  const chunk = {\n    type: \"chunkString\",\n    contentType: 'string',\n    start: Object.assign({}, string.start),\n    end: Object.assign({}, string.end)\n  };\n\n  /** @type {Array<Event>} */\n  const replacement = [\n  // Take the `labelImageMarker` (now `data`, the `!`)\n  events[index + 1], events[index + 2], ['enter', call, context],\n  // The `[`\n  events[index + 3], events[index + 4],\n  // The `^`.\n  ['enter', marker, context], ['exit', marker, context],\n  // Everything in between.\n  ['enter', string, context], ['enter', chunk, context], ['exit', chunk, context], ['exit', string, context],\n  // The ending (`]`, properly parsed and labelled).\n  events[events.length - 2], events[events.length - 1], ['exit', call, context]];\n  events.splice(index, events.length - index + 1, ...replacement);\n  return events;\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeGfmFootnoteCall(effects, ok, nok) {\n  const self = this;\n  const defined = self.parser.gfmFootnotes || (self.parser.gfmFootnotes = []);\n  let size = 0;\n  /** @type {boolean} */\n  let data;\n\n  // Note: the implementation of `markdown-rs` is different, because it houses\n  // core *and* extensions in one project.\n  // Therefore, it can include footnote logic inside `label-end`.\n  // We can’t do that, but luckily, we can parse footnotes in a simpler way than\n  // needed for labels.\n  return start;\n\n  /**\n   * Start of footnote label.\n   *\n   * ```markdown\n   * > | a [^b] c\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    effects.enter('gfmFootnoteCall');\n    effects.enter('gfmFootnoteCallLabelMarker');\n    effects.consume(code);\n    effects.exit('gfmFootnoteCallLabelMarker');\n    return callStart;\n  }\n\n  /**\n   * After `[`, at `^`.\n   *\n   * ```markdown\n   * > | a [^b] c\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function callStart(code) {\n    if (code !== 94) return nok(code);\n    effects.enter('gfmFootnoteCallMarker');\n    effects.consume(code);\n    effects.exit('gfmFootnoteCallMarker');\n    effects.enter('gfmFootnoteCallString');\n    effects.enter('chunkString').contentType = 'string';\n    return callData;\n  }\n\n  /**\n   * In label.\n   *\n   * ```markdown\n   * > | a [^b] c\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function callData(code) {\n    if (\n    // Too long.\n    size > 999 ||\n    // Closing brace with nothing.\n    code === 93 && !data ||\n    // Space or tab is not supported by GFM for some reason.\n    // `\\n` and `[` not being supported makes sense.\n    code === null || code === 91 || markdownLineEndingOrSpace(code)) {\n      return nok(code);\n    }\n    if (code === 93) {\n      effects.exit('chunkString');\n      const token = effects.exit('gfmFootnoteCallString');\n      if (!defined.includes(normalizeIdentifier(self.sliceSerialize(token)))) {\n        return nok(code);\n      }\n      effects.enter('gfmFootnoteCallLabelMarker');\n      effects.consume(code);\n      effects.exit('gfmFootnoteCallLabelMarker');\n      effects.exit('gfmFootnoteCall');\n      return ok;\n    }\n    if (!markdownLineEndingOrSpace(code)) {\n      data = true;\n    }\n    size++;\n    effects.consume(code);\n    return code === 92 ? callEscape : callData;\n  }\n\n  /**\n   * On character after escape.\n   *\n   * ```markdown\n   * > | a [^b\\c] d\n   *           ^\n   * ```\n   *\n   * @type {State}\n   */\n  function callEscape(code) {\n    if (code === 91 || code === 92 || code === 93) {\n      effects.consume(code);\n      size++;\n      return callData;\n    }\n    return callData(code);\n  }\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeDefinitionStart(effects, ok, nok) {\n  const self = this;\n  const defined = self.parser.gfmFootnotes || (self.parser.gfmFootnotes = []);\n  /** @type {string} */\n  let identifier;\n  let size = 0;\n  /** @type {boolean | undefined} */\n  let data;\n  return start;\n\n  /**\n   * Start of GFM footnote definition.\n   *\n   * ```markdown\n   * > | [^a]: b\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    effects.enter('gfmFootnoteDefinition')._container = true;\n    effects.enter('gfmFootnoteDefinitionLabel');\n    effects.enter('gfmFootnoteDefinitionLabelMarker');\n    effects.consume(code);\n    effects.exit('gfmFootnoteDefinitionLabelMarker');\n    return labelAtMarker;\n  }\n\n  /**\n   * In label, at caret.\n   *\n   * ```markdown\n   * > | [^a]: b\n   *      ^\n   * ```\n   *\n   * @type {State}\n   */\n  function labelAtMarker(code) {\n    if (code === 94) {\n      effects.enter('gfmFootnoteDefinitionMarker');\n      effects.consume(code);\n      effects.exit('gfmFootnoteDefinitionMarker');\n      effects.enter('gfmFootnoteDefinitionLabelString');\n      effects.enter('chunkString').contentType = 'string';\n      return labelInside;\n    }\n    return nok(code);\n  }\n\n  /**\n   * In label.\n   *\n   * > 👉 **Note**: `cmark-gfm` prevents whitespace from occurring in footnote\n   * > definition labels.\n   *\n   * ```markdown\n   * > | [^a]: b\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function labelInside(code) {\n    if (\n    // Too long.\n    size > 999 ||\n    // Closing brace with nothing.\n    code === 93 && !data ||\n    // Space or tab is not supported by GFM for some reason.\n    // `\\n` and `[` not being supported makes sense.\n    code === null || code === 91 || markdownLineEndingOrSpace(code)) {\n      return nok(code);\n    }\n    if (code === 93) {\n      effects.exit('chunkString');\n      const token = effects.exit('gfmFootnoteDefinitionLabelString');\n      identifier = normalizeIdentifier(self.sliceSerialize(token));\n      effects.enter('gfmFootnoteDefinitionLabelMarker');\n      effects.consume(code);\n      effects.exit('gfmFootnoteDefinitionLabelMarker');\n      effects.exit('gfmFootnoteDefinitionLabel');\n      return labelAfter;\n    }\n    if (!markdownLineEndingOrSpace(code)) {\n      data = true;\n    }\n    size++;\n    effects.consume(code);\n    return code === 92 ? labelEscape : labelInside;\n  }\n\n  /**\n   * After `\\`, at a special character.\n   *\n   * > 👉 **Note**: `cmark-gfm` currently does not support escaped brackets:\n   * > <https://github.com/github/cmark-gfm/issues/240>\n   *\n   * ```markdown\n   * > | [^a\\*b]: c\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function labelEscape(code) {\n    if (code === 91 || code === 92 || code === 93) {\n      effects.consume(code);\n      size++;\n      return labelInside;\n    }\n    return labelInside(code);\n  }\n\n  /**\n   * After definition label.\n   *\n   * ```markdown\n   * > | [^a]: b\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function labelAfter(code) {\n    if (code === 58) {\n      effects.enter('definitionMarker');\n      effects.consume(code);\n      effects.exit('definitionMarker');\n      if (!defined.includes(identifier)) {\n        defined.push(identifier);\n      }\n\n      // Any whitespace after the marker is eaten, forming indented code\n      // is not possible.\n      // No space is also fine, just like a block quote marker.\n      return factorySpace(effects, whitespaceAfter, 'gfmFootnoteDefinitionWhitespace');\n    }\n    return nok(code);\n  }\n\n  /**\n   * After definition prefix.\n   *\n   * ```markdown\n   * > | [^a]: b\n   *           ^\n   * ```\n   *\n   * @type {State}\n   */\n  function whitespaceAfter(code) {\n    // `markdown-rs` has a wrapping token for the prefix that is closed here.\n    return ok(code);\n  }\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeDefinitionContinuation(effects, ok, nok) {\n  /// Start of footnote definition continuation.\n  ///\n  /// ```markdown\n  ///   | [^a]: b\n  /// > |     c\n  ///     ^\n  /// ```\n  //\n  // Either a blank line, which is okay, or an indented thing.\n  return effects.check(blankLine, ok, effects.attempt(indent, ok, nok));\n}\n\n/** @type {Exiter} */\nfunction gfmFootnoteDefinitionEnd(effects) {\n  effects.exit('gfmFootnoteDefinition');\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeIndent(effects, ok, nok) {\n  const self = this;\n  return factorySpace(effects, afterPrefix, 'gfmFootnoteDefinitionIndent', 4 + 1);\n\n  /**\n   * @type {State}\n   */\n  function afterPrefix(code) {\n    const tail = self.events[self.events.length - 1];\n    return tail && tail[1].type === 'gfmFootnoteDefinitionIndent' && tail[2].sliceSerialize(tail[1], true).length === 4 ? ok(code) : nok(code);\n  }\n}","/**\n * @import {Options} from 'micromark-extension-gfm-strikethrough'\n * @import {Event, Extension, Resolver, State, Token, TokenizeContext, Tokenizer} from 'micromark-util-types'\n */\n\nimport { splice } from 'micromark-util-chunked';\nimport { classifyCharacter } from 'micromark-util-classify-character';\nimport { resolveAll } from 'micromark-util-resolve-all';\n/**\n * Create an extension for `micromark` to enable GFM strikethrough syntax.\n *\n * @param {Options | null | undefined} [options={}]\n *   Configuration.\n * @returns {Extension}\n *   Extension for `micromark` that can be passed in `extensions`, to\n *   enable GFM strikethrough syntax.\n */\nexport function gfmStrikethrough(options) {\n  const options_ = options || {};\n  let single = options_.singleTilde;\n  const tokenizer = {\n    name: 'strikethrough',\n    tokenize: tokenizeStrikethrough,\n    resolveAll: resolveAllStrikethrough\n  };\n  if (single === null || single === undefined) {\n    single = true;\n  }\n  return {\n    text: {\n      [126]: tokenizer\n    },\n    insideSpan: {\n      null: [tokenizer]\n    },\n    attentionMarkers: {\n      null: [126]\n    }\n  };\n\n  /**\n   * Take events and resolve strikethrough.\n   *\n   * @type {Resolver}\n   */\n  function resolveAllStrikethrough(events, context) {\n    let index = -1;\n\n    // Walk through all events.\n    while (++index < events.length) {\n      // Find a token that can close.\n      if (events[index][0] === 'enter' && events[index][1].type === 'strikethroughSequenceTemporary' && events[index][1]._close) {\n        let open = index;\n\n        // Now walk back to find an opener.\n        while (open--) {\n          // Find a token that can open the closer.\n          if (events[open][0] === 'exit' && events[open][1].type === 'strikethroughSequenceTemporary' && events[open][1]._open &&\n          // If the sizes are the same:\n          events[index][1].end.offset - events[index][1].start.offset === events[open][1].end.offset - events[open][1].start.offset) {\n            events[index][1].type = 'strikethroughSequence';\n            events[open][1].type = 'strikethroughSequence';\n\n            /** @type {Token} */\n            const strikethrough = {\n              type: 'strikethrough',\n              start: Object.assign({}, events[open][1].start),\n              end: Object.assign({}, events[index][1].end)\n            };\n\n            /** @type {Token} */\n            const text = {\n              type: 'strikethroughText',\n              start: Object.assign({}, events[open][1].end),\n              end: Object.assign({}, events[index][1].start)\n            };\n\n            // Opening.\n            /** @type {Array<Event>} */\n            const nextEvents = [['enter', strikethrough, context], ['enter', events[open][1], context], ['exit', events[open][1], context], ['enter', text, context]];\n            const insideSpan = context.parser.constructs.insideSpan.null;\n            if (insideSpan) {\n              // Between.\n              splice(nextEvents, nextEvents.length, 0, resolveAll(insideSpan, events.slice(open + 1, index), context));\n            }\n\n            // Closing.\n            splice(nextEvents, nextEvents.length, 0, [['exit', text, context], ['enter', events[index][1], context], ['exit', events[index][1], context], ['exit', strikethrough, context]]);\n            splice(events, open - 1, index - open + 3, nextEvents);\n            index = open + nextEvents.length - 2;\n            break;\n          }\n        }\n      }\n    }\n    index = -1;\n    while (++index < events.length) {\n      if (events[index][1].type === 'strikethroughSequenceTemporary') {\n        events[index][1].type = \"data\";\n      }\n    }\n    return events;\n  }\n\n  /**\n   * @this {TokenizeContext}\n   * @type {Tokenizer}\n   */\n  function tokenizeStrikethrough(effects, ok, nok) {\n    const previous = this.previous;\n    const events = this.events;\n    let size = 0;\n    return start;\n\n    /** @type {State} */\n    function start(code) {\n      if (previous === 126 && events[events.length - 1][1].type !== \"characterEscape\") {\n        return nok(code);\n      }\n      effects.enter('strikethroughSequenceTemporary');\n      return more(code);\n    }\n\n    /** @type {State} */\n    function more(code) {\n      const before = classifyCharacter(previous);\n      if (code === 126) {\n        // If this is the third marker, exit.\n        if (size > 1) return nok(code);\n        effects.consume(code);\n        size++;\n        return more;\n      }\n      if (size < 2 && !single) return nok(code);\n      const token = effects.exit('strikethroughSequenceTemporary');\n      const after = classifyCharacter(code);\n      token._open = !after || after === 2 && Boolean(before);\n      token._close = !before || before === 2 && Boolean(after);\n      return ok(code);\n    }\n  }\n}","/**\n * @import {Event} from 'micromark-util-types'\n */\n\n// Port of `edit_map.rs` from `markdown-rs`.\n// This should move to `markdown-js` later.\n\n// Deal with several changes in events, batching them together.\n//\n// Preferably, changes should be kept to a minimum.\n// Sometimes, it’s needed to change the list of events, because parsing can be\n// messy, and it helps to expose a cleaner interface of events to the compiler\n// and other users.\n// It can also help to merge many adjacent similar events.\n// And, in other cases, it’s needed to parse subcontent: pass some events\n// through another tokenizer and inject the result.\n\n/**\n * @typedef {[number, number, Array<Event>]} Change\n * @typedef {[number, number, number]} Jump\n */\n\n/**\n * Tracks a bunch of edits.\n */\nexport class EditMap {\n  /**\n   * Create a new edit map.\n   */\n  constructor() {\n    /**\n     * Record of changes.\n     *\n     * @type {Array<Change>}\n     */\n    this.map = [];\n  }\n\n  /**\n   * Create an edit: a remove and/or add at a certain place.\n   *\n   * @param {number} index\n   * @param {number} remove\n   * @param {Array<Event>} add\n   * @returns {undefined}\n   */\n  add(index, remove, add) {\n    addImplementation(this, index, remove, add);\n  }\n\n  // To do: add this when moving to `micromark`.\n  // /**\n  //  * Create an edit: but insert `add` before existing additions.\n  //  *\n  //  * @param {number} index\n  //  * @param {number} remove\n  //  * @param {Array<Event>} add\n  //  * @returns {undefined}\n  //  */\n  // addBefore(index, remove, add) {\n  //   addImplementation(this, index, remove, add, true)\n  // }\n\n  /**\n   * Done, change the events.\n   *\n   * @param {Array<Event>} events\n   * @returns {undefined}\n   */\n  consume(events) {\n    this.map.sort(function (a, b) {\n      return a[0] - b[0];\n    });\n\n    /* c8 ignore next 3 -- `resolve` is never called without tables, so without edits. */\n    if (this.map.length === 0) {\n      return;\n    }\n\n    // To do: if links are added in events, like they are in `markdown-rs`,\n    // this is needed.\n    // // Calculate jumps: where items in the current list move to.\n    // /** @type {Array<Jump>} */\n    // const jumps = []\n    // let index = 0\n    // let addAcc = 0\n    // let removeAcc = 0\n    // while (index < this.map.length) {\n    //   const [at, remove, add] = this.map[index]\n    //   removeAcc += remove\n    //   addAcc += add.length\n    //   jumps.push([at, removeAcc, addAcc])\n    //   index += 1\n    // }\n    //\n    // . shiftLinks(events, jumps)\n\n    let index = this.map.length;\n    /** @type {Array<Array<Event>>} */\n    const vecs = [];\n    while (index > 0) {\n      index -= 1;\n      vecs.push(events.slice(this.map[index][0] + this.map[index][1]), this.map[index][2]);\n\n      // Truncate rest.\n      events.length = this.map[index][0];\n    }\n    vecs.push([...events]);\n    events.length = 0;\n    let slice = vecs.pop();\n    while (slice) {\n      events.push(...slice);\n      slice = vecs.pop();\n    }\n\n    // Truncate everything.\n    this.map.length = 0;\n  }\n}\n\n/**\n * Create an edit.\n *\n * @param {EditMap} editMap\n * @param {number} at\n * @param {number} remove\n * @param {Array<Event>} add\n * @returns {undefined}\n */\nfunction addImplementation(editMap, at, remove, add) {\n  let index = 0;\n\n  /* c8 ignore next 3 -- `resolve` is never called without tables, so without edits. */\n  if (remove === 0 && add.length === 0) {\n    return;\n  }\n  while (index < editMap.map.length) {\n    if (editMap.map[index][0] === at) {\n      editMap.map[index][1] += remove;\n\n      // To do: before not used by tables, use when moving to micromark.\n      // if (before) {\n      //   add.push(...editMap.map[index][2])\n      //   editMap.map[index][2] = add\n      // } else {\n      editMap.map[index][2].push(...add);\n      // }\n\n      return;\n    }\n    index += 1;\n  }\n  editMap.map.push([at, remove, add]);\n}\n\n// /**\n//  * Shift `previous` and `next` links according to `jumps`.\n//  *\n//  * This fixes links in case there are events removed or added between them.\n//  *\n//  * @param {Array<Event>} events\n//  * @param {Array<Jump>} jumps\n//  */\n// function shiftLinks(events, jumps) {\n//   let jumpIndex = 0\n//   let index = 0\n//   let add = 0\n//   let rm = 0\n\n//   while (index < events.length) {\n//     const rmCurr = rm\n\n//     while (jumpIndex < jumps.length && jumps[jumpIndex][0] <= index) {\n//       add = jumps[jumpIndex][2]\n//       rm = jumps[jumpIndex][1]\n//       jumpIndex += 1\n//     }\n\n//     // Ignore items that will be removed.\n//     if (rm > rmCurr) {\n//       index += rm - rmCurr\n//     } else {\n//       // ?\n//       // if let Some(link) = &events[index].link {\n//       //     if let Some(next) = link.next {\n//       //         events[next].link.as_mut().unwrap().previous = Some(index + add - rm);\n//       //         while jumpIndex < jumps.len() && jumps[jumpIndex].0 <= next {\n//       //             add = jumps[jumpIndex].2;\n//       //             rm = jumps[jumpIndex].1;\n//       //             jumpIndex += 1;\n//       //         }\n//       //         events[index].link.as_mut().unwrap().next = Some(next + add - rm);\n//       //         index = next;\n//       //         continue;\n//       //     }\n//       // }\n//       index += 1\n//     }\n//   }\n// }","/**\n * @import {Event} from 'micromark-util-types'\n */\n\n/**\n * @typedef {'center' | 'left' | 'none' | 'right'} Align\n */\n\n/**\n * Figure out the alignment of a GFM table.\n *\n * @param {Readonly<Array<Event>>} events\n *   List of events.\n * @param {number} index\n *   Table enter event.\n * @returns {Array<Align>}\n *   List of aligns.\n */\nexport function gfmTableAlign(events, index) {\n  let inDelimiterRow = false;\n  /** @type {Array<Align>} */\n  const align = [];\n  while (index < events.length) {\n    const event = events[index];\n    if (inDelimiterRow) {\n      if (event[0] === 'enter') {\n        // Start of alignment value: set a new column.\n        // To do: `markdown-rs` uses `tableDelimiterCellValue`.\n        if (event[1].type === 'tableContent') {\n          align.push(events[index + 1][1].type === 'tableDelimiterMarker' ? 'left' : 'none');\n        }\n      }\n      // Exits:\n      // End of alignment value: change the column.\n      // To do: `markdown-rs` uses `tableDelimiterCellValue`.\n      else if (event[1].type === 'tableContent') {\n        if (events[index - 1][1].type === 'tableDelimiterMarker') {\n          const alignIndex = align.length - 1;\n          align[alignIndex] = align[alignIndex] === 'left' ? 'center' : 'right';\n        }\n      }\n      // Done!\n      else if (event[1].type === 'tableDelimiterRow') {\n        break;\n      }\n    } else if (event[0] === 'enter' && event[1].type === 'tableDelimiterRow') {\n      inDelimiterRow = true;\n    }\n    index += 1;\n  }\n  return align;\n}","/**\n * @import {Event, Extension, Point, Resolver, State, Token, TokenizeContext, Tokenizer} from 'micromark-util-types'\n */\n\n/**\n * @typedef {[number, number, number, number]} Range\n *   Cell info.\n *\n * @typedef {0 | 1 | 2 | 3} RowKind\n *   Where we are: `1` for head row, `2` for delimiter row, `3` for body row.\n */\n\nimport { factorySpace } from 'micromark-factory-space';\nimport { markdownLineEnding, markdownLineEndingOrSpace, markdownSpace } from 'micromark-util-character';\nimport { EditMap } from './edit-map.js';\nimport { gfmTableAlign } from './infer.js';\n\n/**\n * Create an HTML extension for `micromark` to support GitHub tables syntax.\n *\n * @returns {Extension}\n *   Extension for `micromark` that can be passed in `extensions` to enable GFM\n *   table syntax.\n */\nexport function gfmTable() {\n  return {\n    flow: {\n      null: {\n        name: 'table',\n        tokenize: tokenizeTable,\n        resolveAll: resolveTable\n      }\n    }\n  };\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeTable(effects, ok, nok) {\n  const self = this;\n  let size = 0;\n  let sizeB = 0;\n  /** @type {boolean | undefined} */\n  let seen;\n  return start;\n\n  /**\n   * Start of a GFM table.\n   *\n   * If there is a valid table row or table head before, then we try to parse\n   * another row.\n   * Otherwise, we try to parse a head.\n   *\n   * ```markdown\n   * > | | a |\n   *     ^\n   *   | | - |\n   * > | | b |\n   *     ^\n   * ```\n   * @type {State}\n   */\n  function start(code) {\n    let index = self.events.length - 1;\n    while (index > -1) {\n      const type = self.events[index][1].type;\n      if (type === \"lineEnding\" ||\n      // Note: markdown-rs uses `whitespace` instead of `linePrefix`\n      type === \"linePrefix\") index--;else break;\n    }\n    const tail = index > -1 ? self.events[index][1].type : null;\n    const next = tail === 'tableHead' || tail === 'tableRow' ? bodyRowStart : headRowBefore;\n\n    // Don’t allow lazy body rows.\n    if (next === bodyRowStart && self.parser.lazy[self.now().line]) {\n      return nok(code);\n    }\n    return next(code);\n  }\n\n  /**\n   * Before table head row.\n   *\n   * ```markdown\n   * > | | a |\n   *     ^\n   *   | | - |\n   *   | | b |\n   * ```\n   *\n   * @type {State}\n   */\n  function headRowBefore(code) {\n    effects.enter('tableHead');\n    effects.enter('tableRow');\n    return headRowStart(code);\n  }\n\n  /**\n   * Before table head row, after whitespace.\n   *\n   * ```markdown\n   * > | | a |\n   *     ^\n   *   | | - |\n   *   | | b |\n   * ```\n   *\n   * @type {State}\n   */\n  function headRowStart(code) {\n    if (code === 124) {\n      return headRowBreak(code);\n    }\n\n    // To do: micromark-js should let us parse our own whitespace in extensions,\n    // like `markdown-rs`:\n    //\n    // ```js\n    // // 4+ spaces.\n    // if (markdownSpace(code)) {\n    //   return nok(code)\n    // }\n    // ```\n\n    seen = true;\n    // Count the first character, that isn’t a pipe, double.\n    sizeB += 1;\n    return headRowBreak(code);\n  }\n\n  /**\n   * At break in table head row.\n   *\n   * ```markdown\n   * > | | a |\n   *     ^\n   *       ^\n   *         ^\n   *   | | - |\n   *   | | b |\n   * ```\n   *\n   * @type {State}\n   */\n  function headRowBreak(code) {\n    if (code === null) {\n      // Note: in `markdown-rs`, we need to reset, in `micromark-js` we don‘t.\n      return nok(code);\n    }\n    if (markdownLineEnding(code)) {\n      // If anything other than one pipe (ignoring whitespace) was used, it’s fine.\n      if (sizeB > 1) {\n        sizeB = 0;\n        // To do: check if this works.\n        // Feel free to interrupt:\n        self.interrupt = true;\n        effects.exit('tableRow');\n        effects.enter(\"lineEnding\");\n        effects.consume(code);\n        effects.exit(\"lineEnding\");\n        return headDelimiterStart;\n      }\n\n      // Note: in `markdown-rs`, we need to reset, in `micromark-js` we don‘t.\n      return nok(code);\n    }\n    if (markdownSpace(code)) {\n      // To do: check if this is fine.\n      // effects.attempt(State::Next(StateName::GfmTableHeadRowBreak), State::Nok)\n      // State::Retry(space_or_tab(tokenizer))\n      return factorySpace(effects, headRowBreak, \"whitespace\")(code);\n    }\n    sizeB += 1;\n    if (seen) {\n      seen = false;\n      // Header cell count.\n      size += 1;\n    }\n    if (code === 124) {\n      effects.enter('tableCellDivider');\n      effects.consume(code);\n      effects.exit('tableCellDivider');\n      // Whether a delimiter was seen.\n      seen = true;\n      return headRowBreak;\n    }\n\n    // Anything else is cell data.\n    effects.enter(\"data\");\n    return headRowData(code);\n  }\n\n  /**\n   * In table head row data.\n   *\n   * ```markdown\n   * > | | a |\n   *       ^\n   *   | | - |\n   *   | | b |\n   * ```\n   *\n   * @type {State}\n   */\n  function headRowData(code) {\n    if (code === null || code === 124 || markdownLineEndingOrSpace(code)) {\n      effects.exit(\"data\");\n      return headRowBreak(code);\n    }\n    effects.consume(code);\n    return code === 92 ? headRowEscape : headRowData;\n  }\n\n  /**\n   * In table head row escape.\n   *\n   * ```markdown\n   * > | | a\\-b |\n   *         ^\n   *   | | ---- |\n   *   | | c    |\n   * ```\n   *\n   * @type {State}\n   */\n  function headRowEscape(code) {\n    if (code === 92 || code === 124) {\n      effects.consume(code);\n      return headRowData;\n    }\n    return headRowData(code);\n  }\n\n  /**\n   * Before delimiter row.\n   *\n   * ```markdown\n   *   | | a |\n   * > | | - |\n   *     ^\n   *   | | b |\n   * ```\n   *\n   * @type {State}\n   */\n  function headDelimiterStart(code) {\n    // Reset `interrupt`.\n    self.interrupt = false;\n\n    // Note: in `markdown-rs`, we need to handle piercing here too.\n    if (self.parser.lazy[self.now().line]) {\n      return nok(code);\n    }\n    effects.enter('tableDelimiterRow');\n    // Track if we’ve seen a `:` or `|`.\n    seen = false;\n    if (markdownSpace(code)) {\n      return factorySpace(effects, headDelimiterBefore, \"linePrefix\", self.parser.constructs.disable.null.includes('codeIndented') ? undefined : 4)(code);\n    }\n    return headDelimiterBefore(code);\n  }\n\n  /**\n   * Before delimiter row, after optional whitespace.\n   *\n   * Reused when a `|` is found later, to parse another cell.\n   *\n   * ```markdown\n   *   | | a |\n   * > | | - |\n   *     ^\n   *   | | b |\n   * ```\n   *\n   * @type {State}\n   */\n  function headDelimiterBefore(code) {\n    if (code === 45 || code === 58) {\n      return headDelimiterValueBefore(code);\n    }\n    if (code === 124) {\n      seen = true;\n      // If we start with a pipe, we open a cell marker.\n      effects.enter('tableCellDivider');\n      effects.consume(code);\n      effects.exit('tableCellDivider');\n      return headDelimiterCellBefore;\n    }\n\n    // More whitespace / empty row not allowed at start.\n    return headDelimiterNok(code);\n  }\n\n  /**\n   * After `|`, before delimiter cell.\n   *\n   * ```markdown\n   *   | | a |\n   * > | | - |\n   *      ^\n   * ```\n   *\n   * @type {State}\n   */\n  function headDelimiterCellBefore(code) {\n    if (markdownSpace(code)) {\n      return factorySpace(effects, headDelimiterValueBefore, \"whitespace\")(code);\n    }\n    return headDelimiterValueBefore(code);\n  }\n\n  /**\n   * Before delimiter cell value.\n   *\n   * ```markdown\n   *   | | a |\n   * > | | - |\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function headDelimiterValueBefore(code) {\n    // Align: left.\n    if (code === 58) {\n      sizeB += 1;\n      seen = true;\n      effects.enter('tableDelimiterMarker');\n      effects.consume(code);\n      effects.exit('tableDelimiterMarker');\n      return headDelimiterLeftAlignmentAfter;\n    }\n\n    // Align: none.\n    if (code === 45) {\n      sizeB += 1;\n      // To do: seems weird that this *isn’t* left aligned, but that state is used?\n      return headDelimiterLeftAlignmentAfter(code);\n    }\n    if (code === null || markdownLineEnding(code)) {\n      return headDelimiterCellAfter(code);\n    }\n    return headDelimiterNok(code);\n  }\n\n  /**\n   * After delimiter cell left alignment marker.\n   *\n   * ```markdown\n   *   | | a  |\n   * > | | :- |\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function headDelimiterLeftAlignmentAfter(code) {\n    if (code === 45) {\n      effects.enter('tableDelimiterFiller');\n      return headDelimiterFiller(code);\n    }\n\n    // Anything else is not ok after the left-align colon.\n    return headDelimiterNok(code);\n  }\n\n  /**\n   * In delimiter cell filler.\n   *\n   * ```markdown\n   *   | | a |\n   * > | | - |\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function headDelimiterFiller(code) {\n    if (code === 45) {\n      effects.consume(code);\n      return headDelimiterFiller;\n    }\n\n    // Align is `center` if it was `left`, `right` otherwise.\n    if (code === 58) {\n      seen = true;\n      effects.exit('tableDelimiterFiller');\n      effects.enter('tableDelimiterMarker');\n      effects.consume(code);\n      effects.exit('tableDelimiterMarker');\n      return headDelimiterRightAlignmentAfter;\n    }\n    effects.exit('tableDelimiterFiller');\n    return headDelimiterRightAlignmentAfter(code);\n  }\n\n  /**\n   * After delimiter cell right alignment marker.\n   *\n   * ```markdown\n   *   | |  a |\n   * > | | -: |\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function headDelimiterRightAlignmentAfter(code) {\n    if (markdownSpace(code)) {\n      return factorySpace(effects, headDelimiterCellAfter, \"whitespace\")(code);\n    }\n    return headDelimiterCellAfter(code);\n  }\n\n  /**\n   * After delimiter cell.\n   *\n   * ```markdown\n   *   | |  a |\n   * > | | -: |\n   *          ^\n   * ```\n   *\n   * @type {State}\n   */\n  function headDelimiterCellAfter(code) {\n    if (code === 124) {\n      return headDelimiterBefore(code);\n    }\n    if (code === null || markdownLineEnding(code)) {\n      // Exit when:\n      // * there was no `:` or `|` at all (it’s a thematic break or setext\n      //   underline instead)\n      // * the header cell count is not the delimiter cell count\n      if (!seen || size !== sizeB) {\n        return headDelimiterNok(code);\n      }\n\n      // Note: in markdown-rs`, a reset is needed here.\n      effects.exit('tableDelimiterRow');\n      effects.exit('tableHead');\n      // To do: in `markdown-rs`, resolvers need to be registered manually.\n      // effects.register_resolver(ResolveName::GfmTable)\n      return ok(code);\n    }\n    return headDelimiterNok(code);\n  }\n\n  /**\n   * In delimiter row, at a disallowed byte.\n   *\n   * ```markdown\n   *   | | a |\n   * > | | x |\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function headDelimiterNok(code) {\n    // Note: in `markdown-rs`, we need to reset, in `micromark-js` we don‘t.\n    return nok(code);\n  }\n\n  /**\n   * Before table body row.\n   *\n   * ```markdown\n   *   | | a |\n   *   | | - |\n   * > | | b |\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function bodyRowStart(code) {\n    // Note: in `markdown-rs` we need to manually take care of a prefix,\n    // but in `micromark-js` that is done for us, so if we’re here, we’re\n    // never at whitespace.\n    effects.enter('tableRow');\n    return bodyRowBreak(code);\n  }\n\n  /**\n   * At break in table body row.\n   *\n   * ```markdown\n   *   | | a |\n   *   | | - |\n   * > | | b |\n   *     ^\n   *       ^\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function bodyRowBreak(code) {\n    if (code === 124) {\n      effects.enter('tableCellDivider');\n      effects.consume(code);\n      effects.exit('tableCellDivider');\n      return bodyRowBreak;\n    }\n    if (code === null || markdownLineEnding(code)) {\n      effects.exit('tableRow');\n      return ok(code);\n    }\n    if (markdownSpace(code)) {\n      return factorySpace(effects, bodyRowBreak, \"whitespace\")(code);\n    }\n\n    // Anything else is cell content.\n    effects.enter(\"data\");\n    return bodyRowData(code);\n  }\n\n  /**\n   * In table body row data.\n   *\n   * ```markdown\n   *   | | a |\n   *   | | - |\n   * > | | b |\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function bodyRowData(code) {\n    if (code === null || code === 124 || markdownLineEndingOrSpace(code)) {\n      effects.exit(\"data\");\n      return bodyRowBreak(code);\n    }\n    effects.consume(code);\n    return code === 92 ? bodyRowEscape : bodyRowData;\n  }\n\n  /**\n   * In table body row escape.\n   *\n   * ```markdown\n   *   | | a    |\n   *   | | ---- |\n   * > | | b\\-c |\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function bodyRowEscape(code) {\n    if (code === 92 || code === 124) {\n      effects.consume(code);\n      return bodyRowData;\n    }\n    return bodyRowData(code);\n  }\n}\n\n/** @type {Resolver} */\n\nfunction resolveTable(events, context) {\n  let index = -1;\n  let inFirstCellAwaitingPipe = true;\n  /** @type {RowKind} */\n  let rowKind = 0;\n  /** @type {Range} */\n  let lastCell = [0, 0, 0, 0];\n  /** @type {Range} */\n  let cell = [0, 0, 0, 0];\n  let afterHeadAwaitingFirstBodyRow = false;\n  let lastTableEnd = 0;\n  /** @type {Token | undefined} */\n  let currentTable;\n  /** @type {Token | undefined} */\n  let currentBody;\n  /** @type {Token | undefined} */\n  let currentCell;\n  const map = new EditMap();\n  while (++index < events.length) {\n    const event = events[index];\n    const token = event[1];\n    if (event[0] === 'enter') {\n      // Start of head.\n      if (token.type === 'tableHead') {\n        afterHeadAwaitingFirstBodyRow = false;\n\n        // Inject previous (body end and) table end.\n        if (lastTableEnd !== 0) {\n          flushTableEnd(map, context, lastTableEnd, currentTable, currentBody);\n          currentBody = undefined;\n          lastTableEnd = 0;\n        }\n\n        // Inject table start.\n        currentTable = {\n          type: 'table',\n          start: Object.assign({}, token.start),\n          // Note: correct end is set later.\n          end: Object.assign({}, token.end)\n        };\n        map.add(index, 0, [['enter', currentTable, context]]);\n      } else if (token.type === 'tableRow' || token.type === 'tableDelimiterRow') {\n        inFirstCellAwaitingPipe = true;\n        currentCell = undefined;\n        lastCell = [0, 0, 0, 0];\n        cell = [0, index + 1, 0, 0];\n\n        // Inject table body start.\n        if (afterHeadAwaitingFirstBodyRow) {\n          afterHeadAwaitingFirstBodyRow = false;\n          currentBody = {\n            type: 'tableBody',\n            start: Object.assign({}, token.start),\n            // Note: correct end is set later.\n            end: Object.assign({}, token.end)\n          };\n          map.add(index, 0, [['enter', currentBody, context]]);\n        }\n        rowKind = token.type === 'tableDelimiterRow' ? 2 : currentBody ? 3 : 1;\n      }\n      // Cell data.\n      else if (rowKind && (token.type === \"data\" || token.type === 'tableDelimiterMarker' || token.type === 'tableDelimiterFiller')) {\n        inFirstCellAwaitingPipe = false;\n\n        // First value in cell.\n        if (cell[2] === 0) {\n          if (lastCell[1] !== 0) {\n            cell[0] = cell[1];\n            currentCell = flushCell(map, context, lastCell, rowKind, undefined, currentCell);\n            lastCell = [0, 0, 0, 0];\n          }\n          cell[2] = index;\n        }\n      } else if (token.type === 'tableCellDivider') {\n        if (inFirstCellAwaitingPipe) {\n          inFirstCellAwaitingPipe = false;\n        } else {\n          if (lastCell[1] !== 0) {\n            cell[0] = cell[1];\n            currentCell = flushCell(map, context, lastCell, rowKind, undefined, currentCell);\n          }\n          lastCell = cell;\n          cell = [lastCell[1], index, 0, 0];\n        }\n      }\n    }\n    // Exit events.\n    else if (token.type === 'tableHead') {\n      afterHeadAwaitingFirstBodyRow = true;\n      lastTableEnd = index;\n    } else if (token.type === 'tableRow' || token.type === 'tableDelimiterRow') {\n      lastTableEnd = index;\n      if (lastCell[1] !== 0) {\n        cell[0] = cell[1];\n        currentCell = flushCell(map, context, lastCell, rowKind, index, currentCell);\n      } else if (cell[1] !== 0) {\n        currentCell = flushCell(map, context, cell, rowKind, index, currentCell);\n      }\n      rowKind = 0;\n    } else if (rowKind && (token.type === \"data\" || token.type === 'tableDelimiterMarker' || token.type === 'tableDelimiterFiller')) {\n      cell[3] = index;\n    }\n  }\n  if (lastTableEnd !== 0) {\n    flushTableEnd(map, context, lastTableEnd, currentTable, currentBody);\n  }\n  map.consume(context.events);\n\n  // To do: move this into `html`, when events are exposed there.\n  // That’s what `markdown-rs` does.\n  // That needs updates to `mdast-util-gfm-table`.\n  index = -1;\n  while (++index < context.events.length) {\n    const event = context.events[index];\n    if (event[0] === 'enter' && event[1].type === 'table') {\n      event[1]._align = gfmTableAlign(context.events, index);\n    }\n  }\n  return events;\n}\n\n/**\n * Generate a cell.\n *\n * @param {EditMap} map\n * @param {Readonly<TokenizeContext>} context\n * @param {Readonly<Range>} range\n * @param {RowKind} rowKind\n * @param {number | undefined} rowEnd\n * @param {Token | undefined} previousCell\n * @returns {Token | undefined}\n */\n// eslint-disable-next-line max-params\nfunction flushCell(map, context, range, rowKind, rowEnd, previousCell) {\n  // `markdown-rs` uses:\n  // rowKind === 2 ? 'tableDelimiterCell' : 'tableCell'\n  const groupName = rowKind === 1 ? 'tableHeader' : rowKind === 2 ? 'tableDelimiter' : 'tableData';\n  // `markdown-rs` uses:\n  // rowKind === 2 ? 'tableDelimiterCellValue' : 'tableCellText'\n  const valueName = 'tableContent';\n\n  // Insert an exit for the previous cell, if there is one.\n  //\n  // ```markdown\n  // > | | aa | bb | cc |\n  //          ^-- exit\n  //           ^^^^-- this cell\n  // ```\n  if (range[0] !== 0) {\n    previousCell.end = Object.assign({}, getPoint(context.events, range[0]));\n    map.add(range[0], 0, [['exit', previousCell, context]]);\n  }\n\n  // Insert enter of this cell.\n  //\n  // ```markdown\n  // > | | aa | bb | cc |\n  //           ^-- enter\n  //           ^^^^-- this cell\n  // ```\n  const now = getPoint(context.events, range[1]);\n  previousCell = {\n    type: groupName,\n    start: Object.assign({}, now),\n    // Note: correct end is set later.\n    end: Object.assign({}, now)\n  };\n  map.add(range[1], 0, [['enter', previousCell, context]]);\n\n  // Insert text start at first data start and end at last data end, and\n  // remove events between.\n  //\n  // ```markdown\n  // > | | aa | bb | cc |\n  //            ^-- enter\n  //             ^-- exit\n  //           ^^^^-- this cell\n  // ```\n  if (range[2] !== 0) {\n    const relatedStart = getPoint(context.events, range[2]);\n    const relatedEnd = getPoint(context.events, range[3]);\n    /** @type {Token} */\n    const valueToken = {\n      type: valueName,\n      start: Object.assign({}, relatedStart),\n      end: Object.assign({}, relatedEnd)\n    };\n    map.add(range[2], 0, [['enter', valueToken, context]]);\n    if (rowKind !== 2) {\n      // Fix positional info on remaining events\n      const start = context.events[range[2]];\n      const end = context.events[range[3]];\n      start[1].end = Object.assign({}, end[1].end);\n      start[1].type = \"chunkText\";\n      start[1].contentType = \"text\";\n\n      // Remove if needed.\n      if (range[3] > range[2] + 1) {\n        const a = range[2] + 1;\n        const b = range[3] - range[2] - 1;\n        map.add(a, b, []);\n      }\n    }\n    map.add(range[3] + 1, 0, [['exit', valueToken, context]]);\n  }\n\n  // Insert an exit for the last cell, if at the row end.\n  //\n  // ```markdown\n  // > | | aa | bb | cc |\n  //                    ^-- exit\n  //               ^^^^^^-- this cell (the last one contains two “between” parts)\n  // ```\n  if (rowEnd !== undefined) {\n    previousCell.end = Object.assign({}, getPoint(context.events, rowEnd));\n    map.add(rowEnd, 0, [['exit', previousCell, context]]);\n    previousCell = undefined;\n  }\n  return previousCell;\n}\n\n/**\n * Generate table end (and table body end).\n *\n * @param {Readonly<EditMap>} map\n * @param {Readonly<TokenizeContext>} context\n * @param {number} index\n * @param {Token} table\n * @param {Token | undefined} tableBody\n */\n// eslint-disable-next-line max-params\nfunction flushTableEnd(map, context, index, table, tableBody) {\n  /** @type {Array<Event>} */\n  const exits = [];\n  const related = getPoint(context.events, index);\n  if (tableBody) {\n    tableBody.end = Object.assign({}, related);\n    exits.push(['exit', tableBody, context]);\n  }\n  table.end = Object.assign({}, related);\n  exits.push(['exit', table, context]);\n  map.add(index + 1, 0, exits);\n}\n\n/**\n * @param {Readonly<Array<Event>>} events\n * @param {number} index\n * @returns {Readonly<Point>}\n */\nfunction getPoint(events, index) {\n  const event = events[index];\n  const side = event[0] === 'enter' ? 'start' : 'end';\n  return event[1][side];\n}","/**\n * @import {Extension, State, TokenizeContext, Tokenizer} from 'micromark-util-types'\n */\n\nimport { factorySpace } from 'micromark-factory-space';\nimport { markdownLineEnding, markdownLineEndingOrSpace, markdownSpace } from 'micromark-util-character';\nconst tasklistCheck = {\n  name: 'tasklistCheck',\n  tokenize: tokenizeTasklistCheck\n};\n\n/**\n * Create an HTML extension for `micromark` to support GFM task list items\n * syntax.\n *\n * @returns {Extension}\n *   Extension for `micromark` that can be passed in `htmlExtensions` to\n *   support GFM task list items when serializing to HTML.\n */\nexport function gfmTaskListItem() {\n  return {\n    text: {\n      [91]: tasklistCheck\n    }\n  };\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeTasklistCheck(effects, ok, nok) {\n  const self = this;\n  return open;\n\n  /**\n   * At start of task list item check.\n   *\n   * ```markdown\n   * > | * [x] y.\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function open(code) {\n    if (\n    // Exit if there’s stuff before.\n    self.previous !== null ||\n    // Exit if not in the first content that is the first child of a list\n    // item.\n    !self._gfmTasklistFirstContentOfListItem) {\n      return nok(code);\n    }\n    effects.enter('taskListCheck');\n    effects.enter('taskListCheckMarker');\n    effects.consume(code);\n    effects.exit('taskListCheckMarker');\n    return inside;\n  }\n\n  /**\n   * In task list item check.\n   *\n   * ```markdown\n   * > | * [x] y.\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function inside(code) {\n    // Currently we match how GH works in files.\n    // To match how GH works in comments, use `markdownSpace` (`[\\t ]`) instead\n    // of `markdownLineEndingOrSpace` (`[\\t\\n\\r ]`).\n    if (markdownLineEndingOrSpace(code)) {\n      effects.enter('taskListCheckValueUnchecked');\n      effects.consume(code);\n      effects.exit('taskListCheckValueUnchecked');\n      return close;\n    }\n    if (code === 88 || code === 120) {\n      effects.enter('taskListCheckValueChecked');\n      effects.consume(code);\n      effects.exit('taskListCheckValueChecked');\n      return close;\n    }\n    return nok(code);\n  }\n\n  /**\n   * At close of task list item check.\n   *\n   * ```markdown\n   * > | * [x] y.\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function close(code) {\n    if (code === 93) {\n      effects.enter('taskListCheckMarker');\n      effects.consume(code);\n      effects.exit('taskListCheckMarker');\n      effects.exit('taskListCheck');\n      return after;\n    }\n    return nok(code);\n  }\n\n  /**\n   * @type {State}\n   */\n  function after(code) {\n    // EOL in paragraph means there must be something else after it.\n    if (markdownLineEnding(code)) {\n      return ok(code);\n    }\n\n    // Space or tab?\n    // Check what comes after.\n    if (markdownSpace(code)) {\n      return effects.check({\n        tokenize: spaceThenNonSpace\n      }, ok, nok)(code);\n    }\n\n    // EOF, or non-whitespace, both wrong.\n    return nok(code);\n  }\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction spaceThenNonSpace(effects, ok, nok) {\n  return factorySpace(effects, after, \"whitespace\");\n\n  /**\n   * After whitespace, after task list item check.\n   *\n   * ```markdown\n   * > | * [x] y.\n   *           ^\n   * ```\n   *\n   * @type {State}\n   */\n  function after(code) {\n    // EOF means there was nothing, so bad.\n    // EOL means there’s content after it, so good.\n    // Impossible to have more spaces.\n    // Anything else is good.\n    return code === null ? nok(code) : ok(code);\n  }\n}","/**\n * @typedef {import('micromark-extension-gfm-footnote').HtmlOptions} HtmlOptions\n * @typedef {import('micromark-extension-gfm-strikethrough').Options} Options\n * @typedef {import('micromark-util-types').Extension} Extension\n * @typedef {import('micromark-util-types').HtmlExtension} HtmlExtension\n */\n\nimport {\n  combineExtensions,\n  combineHtmlExtensions\n} from 'micromark-util-combine-extensions'\nimport {\n  gfmAutolinkLiteral,\n  gfmAutolinkLiteralHtml\n} from 'micromark-extension-gfm-autolink-literal'\nimport {gfmFootnote, gfmFootnoteHtml} from 'micromark-extension-gfm-footnote'\nimport {\n  gfmStrikethrough,\n  gfmStrikethroughHtml\n} from 'micromark-extension-gfm-strikethrough'\nimport {gfmTable, gfmTableHtml} from 'micromark-extension-gfm-table'\nimport {gfmTagfilterHtml} from 'micromark-extension-gfm-tagfilter'\nimport {\n  gfmTaskListItem,\n  gfmTaskListItemHtml\n} from 'micromark-extension-gfm-task-list-item'\n\n/**\n * Create an extension for `micromark` to enable GFM syntax.\n *\n * @param {Options | null | undefined} [options]\n *   Configuration (optional).\n *\n *   Passed to `micromark-extens-gfm-strikethrough`.\n * @returns {Extension}\n *   Extension for `micromark` that can be passed in `extensions` to enable GFM\n *   syntax.\n */\nexport function gfm(options) {\n  return combineExtensions([\n    gfmAutolinkLiteral(),\n    gfmFootnote(),\n    gfmStrikethrough(options),\n    gfmTable(),\n    gfmTaskListItem()\n  ])\n}\n\n/**\n * Create an extension for `micromark` to support GFM when serializing to HTML.\n *\n * @param {HtmlOptions | null | undefined} [options]\n *   Configuration (optional).\n *\n *   Passed to `micromark-extens-gfm-footnote`.\n * @returns {HtmlExtension}\n *   Extension for `micromark` that can be passed in `htmlExtensions` to\n *   support GFM when serializing to HTML.\n */\nexport function gfmHtml(options) {\n  return combineHtmlExtensions([\n    gfmAutolinkLiteralHtml(),\n    gfmFootnoteHtml(options),\n    gfmStrikethroughHtml(),\n    gfmTableHtml(),\n    gfmTagfilterHtml(),\n    gfmTaskListItemHtml()\n  ])\n}\n","/// <reference types=\"remark-parse\" />\n/// <reference types=\"remark-stringify\" />\n\n/**\n * @typedef {import('mdast').Root} Root\n * @typedef {import('mdast-util-gfm').Options} MdastOptions\n * @typedef {import('micromark-extension-gfm').Options} MicromarkOptions\n * @typedef {import('unified').Processor<Root>} Processor\n */\n\n/**\n * @typedef {MicromarkOptions & MdastOptions} Options\n *   Configuration.\n */\n\nimport {gfmFromMarkdown, gfmToMarkdown} from 'mdast-util-gfm'\nimport {gfm} from 'micromark-extension-gfm'\n\n/** @type {Options} */\nconst emptyOptions = {}\n\n/**\n * Add support GFM (autolink literals, footnotes, strikethrough, tables,\n * tasklists).\n *\n * @param {Options | null | undefined} [options]\n *   Configuration (optional).\n * @returns {undefined}\n *   Nothing.\n */\nexport default function remarkGfm(options) {\n  // @ts-expect-error: TS is wrong about `this`.\n  // eslint-disable-next-line unicorn/no-this-assignment\n  const self = /** @type {Processor} */ (this)\n  const settings = options || emptyOptions\n  const data = self.data()\n\n  const micromarkExtensions =\n    data.micromarkExtensions || (data.micromarkExtensions = [])\n  const fromMarkdownExtensions =\n    data.fromMarkdownExtensions || (data.fromMarkdownExtensions = [])\n  const toMarkdownExtensions =\n    data.toMarkdownExtensions || (data.toMarkdownExtensions = [])\n\n  micromarkExtensions.push(gfm(settings))\n  fromMarkdownExtensions.push(gfmFromMarkdown())\n  toMarkdownExtensions.push(gfmToMarkdown(settings))\n}\n","/**\n * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct\n * @typedef {import('micromark-util-types').Initializer} Initializer\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').Token} Token\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n */\n\nimport {factorySpace} from 'micromark-factory-space'\nimport {markdownLineEnding} from 'micromark-util-character'\n/** @type {InitialConstruct} */\nexport const content = {\n  tokenize: initializeContent\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Initializer}\n */\nfunction initializeContent(effects) {\n  const contentStart = effects.attempt(\n    this.parser.constructs.contentInitial,\n    afterContentStartConstruct,\n    paragraphInitial\n  )\n  /** @type {Token} */\n  let previous\n  return contentStart\n\n  /** @type {State} */\n  function afterContentStartConstruct(code) {\n    if (code === null) {\n      effects.consume(code)\n      return\n    }\n    effects.enter('lineEnding')\n    effects.consume(code)\n    effects.exit('lineEnding')\n    return factorySpace(effects, contentStart, 'linePrefix')\n  }\n\n  /** @type {State} */\n  function paragraphInitial(code) {\n    effects.enter('paragraph')\n    return lineStart(code)\n  }\n\n  /** @type {State} */\n  function lineStart(code) {\n    const token = effects.enter('chunkText', {\n      contentType: 'text',\n      previous\n    })\n    if (previous) {\n      previous.next = token\n    }\n    previous = token\n    return data(code)\n  }\n\n  /** @type {State} */\n  function data(code) {\n    if (code === null) {\n      effects.exit('chunkText')\n      effects.exit('paragraph')\n      effects.consume(code)\n      return\n    }\n    if (markdownLineEnding(code)) {\n      effects.consume(code)\n      effects.exit('chunkText')\n      return lineStart\n    }\n\n    // Data.\n    effects.consume(code)\n    return data\n  }\n}\n","/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').ContainerState} ContainerState\n * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct\n * @typedef {import('micromark-util-types').Initializer} Initializer\n * @typedef {import('micromark-util-types').Point} Point\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').Token} Token\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\n/**\n * @typedef {[Construct, ContainerState]} StackItem\n */\n\nimport {factorySpace} from 'micromark-factory-space'\nimport {markdownLineEnding} from 'micromark-util-character'\nimport {splice} from 'micromark-util-chunked'\n/** @type {InitialConstruct} */\nexport const document = {\n  tokenize: initializeDocument\n}\n\n/** @type {Construct} */\nconst containerConstruct = {\n  tokenize: tokenizeContainer\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Initializer}\n */\nfunction initializeDocument(effects) {\n  const self = this\n  /** @type {Array<StackItem>} */\n  const stack = []\n  let continued = 0\n  /** @type {TokenizeContext | undefined} */\n  let childFlow\n  /** @type {Token | undefined} */\n  let childToken\n  /** @type {number} */\n  let lineStartOffset\n  return start\n\n  /** @type {State} */\n  function start(code) {\n    // First we iterate through the open blocks, starting with the root\n    // document, and descending through last children down to the last open\n    // block.\n    // Each block imposes a condition that the line must satisfy if the block is\n    // to remain open.\n    // For example, a block quote requires a `>` character.\n    // A paragraph requires a non-blank line.\n    // In this phase we may match all or just some of the open blocks.\n    // But we cannot close unmatched blocks yet, because we may have a lazy\n    // continuation line.\n    if (continued < stack.length) {\n      const item = stack[continued]\n      self.containerState = item[1]\n      return effects.attempt(\n        item[0].continuation,\n        documentContinue,\n        checkNewContainers\n      )(code)\n    }\n\n    // Done.\n    return checkNewContainers(code)\n  }\n\n  /** @type {State} */\n  function documentContinue(code) {\n    continued++\n\n    // Note: this field is called `_closeFlow` but it also closes containers.\n    // Perhaps a good idea to rename it but it’s already used in the wild by\n    // extensions.\n    if (self.containerState._closeFlow) {\n      self.containerState._closeFlow = undefined\n      if (childFlow) {\n        closeFlow()\n      }\n\n      // Note: this algorithm for moving events around is similar to the\n      // algorithm when dealing with lazy lines in `writeToChild`.\n      const indexBeforeExits = self.events.length\n      let indexBeforeFlow = indexBeforeExits\n      /** @type {Point | undefined} */\n      let point\n\n      // Find the flow chunk.\n      while (indexBeforeFlow--) {\n        if (\n          self.events[indexBeforeFlow][0] === 'exit' &&\n          self.events[indexBeforeFlow][1].type === 'chunkFlow'\n        ) {\n          point = self.events[indexBeforeFlow][1].end\n          break\n        }\n      }\n      exitContainers(continued)\n\n      // Fix positions.\n      let index = indexBeforeExits\n      while (index < self.events.length) {\n        self.events[index][1].end = Object.assign({}, point)\n        index++\n      }\n\n      // Inject the exits earlier (they’re still also at the end).\n      splice(\n        self.events,\n        indexBeforeFlow + 1,\n        0,\n        self.events.slice(indexBeforeExits)\n      )\n\n      // Discard the duplicate exits.\n      self.events.length = index\n      return checkNewContainers(code)\n    }\n    return start(code)\n  }\n\n  /** @type {State} */\n  function checkNewContainers(code) {\n    // Next, after consuming the continuation markers for existing blocks, we\n    // look for new block starts (e.g. `>` for a block quote).\n    // If we encounter a new block start, we close any blocks unmatched in\n    // step 1 before creating the new block as a child of the last matched\n    // block.\n    if (continued === stack.length) {\n      // No need to `check` whether there’s a container, of `exitContainers`\n      // would be moot.\n      // We can instead immediately `attempt` to parse one.\n      if (!childFlow) {\n        return documentContinued(code)\n      }\n\n      // If we have concrete content, such as block HTML or fenced code,\n      // we can’t have containers “pierce” into them, so we can immediately\n      // start.\n      if (childFlow.currentConstruct && childFlow.currentConstruct.concrete) {\n        return flowStart(code)\n      }\n\n      // If we do have flow, it could still be a blank line,\n      // but we’d be interrupting it w/ a new container if there’s a current\n      // construct.\n      // To do: next major: remove `_gfmTableDynamicInterruptHack` (no longer\n      // needed in micromark-extension-gfm-table@1.0.6).\n      self.interrupt = Boolean(\n        childFlow.currentConstruct && !childFlow._gfmTableDynamicInterruptHack\n      )\n    }\n\n    // Check if there is a new container.\n    self.containerState = {}\n    return effects.check(\n      containerConstruct,\n      thereIsANewContainer,\n      thereIsNoNewContainer\n    )(code)\n  }\n\n  /** @type {State} */\n  function thereIsANewContainer(code) {\n    if (childFlow) closeFlow()\n    exitContainers(continued)\n    return documentContinued(code)\n  }\n\n  /** @type {State} */\n  function thereIsNoNewContainer(code) {\n    self.parser.lazy[self.now().line] = continued !== stack.length\n    lineStartOffset = self.now().offset\n    return flowStart(code)\n  }\n\n  /** @type {State} */\n  function documentContinued(code) {\n    // Try new containers.\n    self.containerState = {}\n    return effects.attempt(\n      containerConstruct,\n      containerContinue,\n      flowStart\n    )(code)\n  }\n\n  /** @type {State} */\n  function containerContinue(code) {\n    continued++\n    stack.push([self.currentConstruct, self.containerState])\n    // Try another.\n    return documentContinued(code)\n  }\n\n  /** @type {State} */\n  function flowStart(code) {\n    if (code === null) {\n      if (childFlow) closeFlow()\n      exitContainers(0)\n      effects.consume(code)\n      return\n    }\n    childFlow = childFlow || self.parser.flow(self.now())\n    effects.enter('chunkFlow', {\n      contentType: 'flow',\n      previous: childToken,\n      _tokenizer: childFlow\n    })\n    return flowContinue(code)\n  }\n\n  /** @type {State} */\n  function flowContinue(code) {\n    if (code === null) {\n      writeToChild(effects.exit('chunkFlow'), true)\n      exitContainers(0)\n      effects.consume(code)\n      return\n    }\n    if (markdownLineEnding(code)) {\n      effects.consume(code)\n      writeToChild(effects.exit('chunkFlow'))\n      // Get ready for the next line.\n      continued = 0\n      self.interrupt = undefined\n      return start\n    }\n    effects.consume(code)\n    return flowContinue\n  }\n\n  /**\n   * @param {Token} token\n   * @param {boolean | undefined} [eof]\n   * @returns {undefined}\n   */\n  function writeToChild(token, eof) {\n    const stream = self.sliceStream(token)\n    if (eof) stream.push(null)\n    token.previous = childToken\n    if (childToken) childToken.next = token\n    childToken = token\n    childFlow.defineSkip(token.start)\n    childFlow.write(stream)\n\n    // Alright, so we just added a lazy line:\n    //\n    // ```markdown\n    // > a\n    // b.\n    //\n    // Or:\n    //\n    // > ~~~c\n    // d\n    //\n    // Or:\n    //\n    // > | e |\n    // f\n    // ```\n    //\n    // The construct in the second example (fenced code) does not accept lazy\n    // lines, so it marked itself as done at the end of its first line, and\n    // then the content construct parses `d`.\n    // Most constructs in markdown match on the first line: if the first line\n    // forms a construct, a non-lazy line can’t “unmake” it.\n    //\n    // The construct in the third example is potentially a GFM table, and\n    // those are *weird*.\n    // It *could* be a table, from the first line, if the following line\n    // matches a condition.\n    // In this case, that second line is lazy, which “unmakes” the first line\n    // and turns the whole into one content block.\n    //\n    // We’ve now parsed the non-lazy and the lazy line, and can figure out\n    // whether the lazy line started a new flow block.\n    // If it did, we exit the current containers between the two flow blocks.\n    if (self.parser.lazy[token.start.line]) {\n      let index = childFlow.events.length\n      while (index--) {\n        if (\n          // The token starts before the line ending…\n          childFlow.events[index][1].start.offset < lineStartOffset &&\n          // …and either is not ended yet…\n          (!childFlow.events[index][1].end ||\n            // …or ends after it.\n            childFlow.events[index][1].end.offset > lineStartOffset)\n        ) {\n          // Exit: there’s still something open, which means it’s a lazy line\n          // part of something.\n          return\n        }\n      }\n\n      // Note: this algorithm for moving events around is similar to the\n      // algorithm when closing flow in `documentContinue`.\n      const indexBeforeExits = self.events.length\n      let indexBeforeFlow = indexBeforeExits\n      /** @type {boolean | undefined} */\n      let seen\n      /** @type {Point | undefined} */\n      let point\n\n      // Find the previous chunk (the one before the lazy line).\n      while (indexBeforeFlow--) {\n        if (\n          self.events[indexBeforeFlow][0] === 'exit' &&\n          self.events[indexBeforeFlow][1].type === 'chunkFlow'\n        ) {\n          if (seen) {\n            point = self.events[indexBeforeFlow][1].end\n            break\n          }\n          seen = true\n        }\n      }\n      exitContainers(continued)\n\n      // Fix positions.\n      index = indexBeforeExits\n      while (index < self.events.length) {\n        self.events[index][1].end = Object.assign({}, point)\n        index++\n      }\n\n      // Inject the exits earlier (they’re still also at the end).\n      splice(\n        self.events,\n        indexBeforeFlow + 1,\n        0,\n        self.events.slice(indexBeforeExits)\n      )\n\n      // Discard the duplicate exits.\n      self.events.length = index\n    }\n  }\n\n  /**\n   * @param {number} size\n   * @returns {undefined}\n   */\n  function exitContainers(size) {\n    let index = stack.length\n\n    // Exit open containers.\n    while (index-- > size) {\n      const entry = stack[index]\n      self.containerState = entry[1]\n      entry[0].exit.call(self, effects)\n    }\n    stack.length = size\n  }\n  function closeFlow() {\n    childFlow.write([null])\n    childToken = undefined\n    childFlow = undefined\n    self.containerState._closeFlow = undefined\n  }\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeContainer(effects, ok, nok) {\n  // Always populated by defaults.\n\n  return factorySpace(\n    effects,\n    effects.attempt(this.parser.constructs.document, ok, nok),\n    'linePrefix',\n    this.parser.constructs.disable.null.includes('codeIndented') ? undefined : 4\n  )\n}\n","/**\n * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct\n * @typedef {import('micromark-util-types').Initializer} Initializer\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n */\n\nimport {blankLine, content} from 'micromark-core-commonmark'\nimport {factorySpace} from 'micromark-factory-space'\nimport {markdownLineEnding} from 'micromark-util-character'\n/** @type {InitialConstruct} */\nexport const flow = {\n  tokenize: initializeFlow\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Initializer}\n */\nfunction initializeFlow(effects) {\n  const self = this\n  const initial = effects.attempt(\n    // Try to parse a blank line.\n    blankLine,\n    atBlankEnding,\n    // Try to parse initial flow (essentially, only code).\n    effects.attempt(\n      this.parser.constructs.flowInitial,\n      afterConstruct,\n      factorySpace(\n        effects,\n        effects.attempt(\n          this.parser.constructs.flow,\n          afterConstruct,\n          effects.attempt(content, afterConstruct)\n        ),\n        'linePrefix'\n      )\n    )\n  )\n  return initial\n\n  /** @type {State} */\n  function atBlankEnding(code) {\n    if (code === null) {\n      effects.consume(code)\n      return\n    }\n    effects.enter('lineEndingBlank')\n    effects.consume(code)\n    effects.exit('lineEndingBlank')\n    self.currentConstruct = undefined\n    return initial\n  }\n\n  /** @type {State} */\n  function afterConstruct(code) {\n    if (code === null) {\n      effects.consume(code)\n      return\n    }\n    effects.enter('lineEnding')\n    effects.consume(code)\n    effects.exit('lineEnding')\n    self.currentConstruct = undefined\n    return initial\n  }\n}\n","/**\n * @typedef {import('micromark-util-types').Code} Code\n * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct\n * @typedef {import('micromark-util-types').Initializer} Initializer\n * @typedef {import('micromark-util-types').Resolver} Resolver\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n */\n\nexport const resolver = {\n  resolveAll: createResolver()\n}\nexport const string = initializeFactory('string')\nexport const text = initializeFactory('text')\n\n/**\n * @param {'string' | 'text'} field\n * @returns {InitialConstruct}\n */\nfunction initializeFactory(field) {\n  return {\n    tokenize: initializeText,\n    resolveAll: createResolver(\n      field === 'text' ? resolveAllLineSuffixes : undefined\n    )\n  }\n\n  /**\n   * @this {TokenizeContext}\n   * @type {Initializer}\n   */\n  function initializeText(effects) {\n    const self = this\n    const constructs = this.parser.constructs[field]\n    const text = effects.attempt(constructs, start, notText)\n    return start\n\n    /** @type {State} */\n    function start(code) {\n      return atBreak(code) ? text(code) : notText(code)\n    }\n\n    /** @type {State} */\n    function notText(code) {\n      if (code === null) {\n        effects.consume(code)\n        return\n      }\n      effects.enter('data')\n      effects.consume(code)\n      return data\n    }\n\n    /** @type {State} */\n    function data(code) {\n      if (atBreak(code)) {\n        effects.exit('data')\n        return text(code)\n      }\n\n      // Data.\n      effects.consume(code)\n      return data\n    }\n\n    /**\n     * @param {Code} code\n     * @returns {boolean}\n     */\n    function atBreak(code) {\n      if (code === null) {\n        return true\n      }\n      const list = constructs[code]\n      let index = -1\n      if (list) {\n        // Always populated by defaults.\n\n        while (++index < list.length) {\n          const item = list[index]\n          if (!item.previous || item.previous.call(self, self.previous)) {\n            return true\n          }\n        }\n      }\n      return false\n    }\n  }\n}\n\n/**\n * @param {Resolver | undefined} [extraResolver]\n * @returns {Resolver}\n */\nfunction createResolver(extraResolver) {\n  return resolveAllText\n\n  /** @type {Resolver} */\n  function resolveAllText(events, context) {\n    let index = -1\n    /** @type {number | undefined} */\n    let enter\n\n    // A rather boring computation (to merge adjacent `data` events) which\n    // improves mm performance by 29%.\n    while (++index <= events.length) {\n      if (enter === undefined) {\n        if (events[index] && events[index][1].type === 'data') {\n          enter = index\n          index++\n        }\n      } else if (!events[index] || events[index][1].type !== 'data') {\n        // Don’t do anything if there is one data token.\n        if (index !== enter + 2) {\n          events[enter][1].end = events[index - 1][1].end\n          events.splice(enter + 2, index - enter - 2)\n          index = enter + 2\n        }\n        enter = undefined\n      }\n    }\n    return extraResolver ? extraResolver(events, context) : events\n  }\n}\n\n/**\n * A rather ugly set of instructions which again looks at chunks in the input\n * stream.\n * The reason to do this here is that it is *much* faster to parse in reverse.\n * And that we can’t hook into `null` to split the line suffix before an EOF.\n * To do: figure out if we can make this into a clean utility, or even in core.\n * As it will be useful for GFMs literal autolink extension (and maybe even\n * tables?)\n *\n * @type {Resolver}\n */\nfunction resolveAllLineSuffixes(events, context) {\n  let eventIndex = 0 // Skip first.\n\n  while (++eventIndex <= events.length) {\n    if (\n      (eventIndex === events.length ||\n        events[eventIndex][1].type === 'lineEnding') &&\n      events[eventIndex - 1][1].type === 'data'\n    ) {\n      const data = events[eventIndex - 1][1]\n      const chunks = context.sliceStream(data)\n      let index = chunks.length\n      let bufferIndex = -1\n      let size = 0\n      /** @type {boolean | undefined} */\n      let tabs\n      while (index--) {\n        const chunk = chunks[index]\n        if (typeof chunk === 'string') {\n          bufferIndex = chunk.length\n          while (chunk.charCodeAt(bufferIndex - 1) === 32) {\n            size++\n            bufferIndex--\n          }\n          if (bufferIndex) break\n          bufferIndex = -1\n        }\n        // Number\n        else if (chunk === -2) {\n          tabs = true\n          size++\n        } else if (chunk === -1) {\n          // Empty\n        } else {\n          // Replacement character, exit.\n          index++\n          break\n        }\n      }\n      if (size) {\n        const token = {\n          type:\n            eventIndex === events.length || tabs || size < 2\n              ? 'lineSuffix'\n              : 'hardBreakTrailing',\n          start: {\n            line: data.end.line,\n            column: data.end.column - size,\n            offset: data.end.offset - size,\n            _index: data.start._index + index,\n            _bufferIndex: index\n              ? bufferIndex\n              : data.start._bufferIndex + bufferIndex\n          },\n          end: Object.assign({}, data.end)\n        }\n        data.end = Object.assign({}, token.start)\n        if (data.start.offset === data.end.offset) {\n          Object.assign(data, token)\n        } else {\n          events.splice(\n            eventIndex,\n            0,\n            ['enter', token, context],\n            ['exit', token, context]\n          )\n          eventIndex += 2\n        }\n      }\n      eventIndex++\n    }\n  }\n  return events\n}\n","/**\n * @typedef {import('micromark-util-types').Chunk} Chunk\n * @typedef {import('micromark-util-types').Code} Code\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').ConstructRecord} ConstructRecord\n * @typedef {import('micromark-util-types').Effects} Effects\n * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct\n * @typedef {import('micromark-util-types').ParseContext} ParseContext\n * @typedef {import('micromark-util-types').Point} Point\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').Token} Token\n * @typedef {import('micromark-util-types').TokenType} TokenType\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n */\n\n/**\n * @callback Restore\n * @returns {undefined}\n *\n * @typedef Info\n * @property {Restore} restore\n * @property {number} from\n *\n * @callback ReturnHandle\n *   Handle a successful run.\n * @param {Construct} construct\n * @param {Info} info\n * @returns {undefined}\n */\n\nimport {markdownLineEnding} from 'micromark-util-character'\nimport {push, splice} from 'micromark-util-chunked'\nimport {resolveAll} from 'micromark-util-resolve-all'\n/**\n * Create a tokenizer.\n * Tokenizers deal with one type of data (e.g., containers, flow, text).\n * The parser is the object dealing with it all.\n * `initialize` works like other constructs, except that only its `tokenize`\n * function is used, in which case it doesn’t receive an `ok` or `nok`.\n * `from` can be given to set the point before the first character, although\n * when further lines are indented, they must be set with `defineSkip`.\n *\n * @param {ParseContext} parser\n * @param {InitialConstruct} initialize\n * @param {Omit<Point, '_bufferIndex' | '_index'> | undefined} [from]\n * @returns {TokenizeContext}\n */\nexport function createTokenizer(parser, initialize, from) {\n  /** @type {Point} */\n  let point = Object.assign(\n    from\n      ? Object.assign({}, from)\n      : {\n          line: 1,\n          column: 1,\n          offset: 0\n        },\n    {\n      _index: 0,\n      _bufferIndex: -1\n    }\n  )\n  /** @type {Record<string, number>} */\n  const columnStart = {}\n  /** @type {Array<Construct>} */\n  const resolveAllConstructs = []\n  /** @type {Array<Chunk>} */\n  let chunks = []\n  /** @type {Array<Token>} */\n  let stack = []\n  /** @type {boolean | undefined} */\n  let consumed = true\n\n  /**\n   * Tools used for tokenizing.\n   *\n   * @type {Effects}\n   */\n  const effects = {\n    consume,\n    enter,\n    exit,\n    attempt: constructFactory(onsuccessfulconstruct),\n    check: constructFactory(onsuccessfulcheck),\n    interrupt: constructFactory(onsuccessfulcheck, {\n      interrupt: true\n    })\n  }\n\n  /**\n   * State and tools for resolving and serializing.\n   *\n   * @type {TokenizeContext}\n   */\n  const context = {\n    previous: null,\n    code: null,\n    containerState: {},\n    events: [],\n    parser,\n    sliceStream,\n    sliceSerialize,\n    now,\n    defineSkip,\n    write\n  }\n\n  /**\n   * The state function.\n   *\n   * @type {State | undefined}\n   */\n  let state = initialize.tokenize.call(context, effects)\n\n  /**\n   * Track which character we expect to be consumed, to catch bugs.\n   *\n   * @type {Code}\n   */\n  let expectedCode\n  if (initialize.resolveAll) {\n    resolveAllConstructs.push(initialize)\n  }\n  return context\n\n  /** @type {TokenizeContext['write']} */\n  function write(slice) {\n    chunks = push(chunks, slice)\n    main()\n\n    // Exit if we’re not done, resolve might change stuff.\n    if (chunks[chunks.length - 1] !== null) {\n      return []\n    }\n    addResult(initialize, 0)\n\n    // Otherwise, resolve, and exit.\n    context.events = resolveAll(resolveAllConstructs, context.events, context)\n    return context.events\n  }\n\n  //\n  // Tools.\n  //\n\n  /** @type {TokenizeContext['sliceSerialize']} */\n  function sliceSerialize(token, expandTabs) {\n    return serializeChunks(sliceStream(token), expandTabs)\n  }\n\n  /** @type {TokenizeContext['sliceStream']} */\n  function sliceStream(token) {\n    return sliceChunks(chunks, token)\n  }\n\n  /** @type {TokenizeContext['now']} */\n  function now() {\n    // This is a hot path, so we clone manually instead of `Object.assign({}, point)`\n    const {line, column, offset, _index, _bufferIndex} = point\n    return {\n      line,\n      column,\n      offset,\n      _index,\n      _bufferIndex\n    }\n  }\n\n  /** @type {TokenizeContext['defineSkip']} */\n  function defineSkip(value) {\n    columnStart[value.line] = value.column\n    accountForPotentialSkip()\n  }\n\n  //\n  // State management.\n  //\n\n  /**\n   * Main loop (note that `_index` and `_bufferIndex` in `point` are modified by\n   * `consume`).\n   * Here is where we walk through the chunks, which either include strings of\n   * several characters, or numerical character codes.\n   * The reason to do this in a loop instead of a call is so the stack can\n   * drain.\n   *\n   * @returns {undefined}\n   */\n  function main() {\n    /** @type {number} */\n    let chunkIndex\n    while (point._index < chunks.length) {\n      const chunk = chunks[point._index]\n\n      // If we’re in a buffer chunk, loop through it.\n      if (typeof chunk === 'string') {\n        chunkIndex = point._index\n        if (point._bufferIndex < 0) {\n          point._bufferIndex = 0\n        }\n        while (\n          point._index === chunkIndex &&\n          point._bufferIndex < chunk.length\n        ) {\n          go(chunk.charCodeAt(point._bufferIndex))\n        }\n      } else {\n        go(chunk)\n      }\n    }\n  }\n\n  /**\n   * Deal with one code.\n   *\n   * @param {Code} code\n   * @returns {undefined}\n   */\n  function go(code) {\n    consumed = undefined\n    expectedCode = code\n    state = state(code)\n  }\n\n  /** @type {Effects['consume']} */\n  function consume(code) {\n    if (markdownLineEnding(code)) {\n      point.line++\n      point.column = 1\n      point.offset += code === -3 ? 2 : 1\n      accountForPotentialSkip()\n    } else if (code !== -1) {\n      point.column++\n      point.offset++\n    }\n\n    // Not in a string chunk.\n    if (point._bufferIndex < 0) {\n      point._index++\n    } else {\n      point._bufferIndex++\n\n      // At end of string chunk.\n      // @ts-expect-error Points w/ non-negative `_bufferIndex` reference\n      // strings.\n      if (point._bufferIndex === chunks[point._index].length) {\n        point._bufferIndex = -1\n        point._index++\n      }\n    }\n\n    // Expose the previous character.\n    context.previous = code\n\n    // Mark as consumed.\n    consumed = true\n  }\n\n  /** @type {Effects['enter']} */\n  function enter(type, fields) {\n    /** @type {Token} */\n    // @ts-expect-error Patch instead of assign required fields to help GC.\n    const token = fields || {}\n    token.type = type\n    token.start = now()\n    context.events.push(['enter', token, context])\n    stack.push(token)\n    return token\n  }\n\n  /** @type {Effects['exit']} */\n  function exit(type) {\n    const token = stack.pop()\n    token.end = now()\n    context.events.push(['exit', token, context])\n    return token\n  }\n\n  /**\n   * Use results.\n   *\n   * @type {ReturnHandle}\n   */\n  function onsuccessfulconstruct(construct, info) {\n    addResult(construct, info.from)\n  }\n\n  /**\n   * Discard results.\n   *\n   * @type {ReturnHandle}\n   */\n  function onsuccessfulcheck(_, info) {\n    info.restore()\n  }\n\n  /**\n   * Factory to attempt/check/interrupt.\n   *\n   * @param {ReturnHandle} onreturn\n   * @param {{interrupt?: boolean | undefined} | undefined} [fields]\n   */\n  function constructFactory(onreturn, fields) {\n    return hook\n\n    /**\n     * Handle either an object mapping codes to constructs, a list of\n     * constructs, or a single construct.\n     *\n     * @param {Array<Construct> | Construct | ConstructRecord} constructs\n     * @param {State} returnState\n     * @param {State | undefined} [bogusState]\n     * @returns {State}\n     */\n    function hook(constructs, returnState, bogusState) {\n      /** @type {Array<Construct>} */\n      let listOfConstructs\n      /** @type {number} */\n      let constructIndex\n      /** @type {Construct} */\n      let currentConstruct\n      /** @type {Info} */\n      let info\n      return Array.isArray(constructs) /* c8 ignore next 1 */\n        ? handleListOfConstructs(constructs)\n        : 'tokenize' in constructs\n        ? // @ts-expect-error Looks like a construct.\n          handleListOfConstructs([constructs])\n        : handleMapOfConstructs(constructs)\n\n      /**\n       * Handle a list of construct.\n       *\n       * @param {ConstructRecord} map\n       * @returns {State}\n       */\n      function handleMapOfConstructs(map) {\n        return start\n\n        /** @type {State} */\n        function start(code) {\n          const def = code !== null && map[code]\n          const all = code !== null && map.null\n          const list = [\n            // To do: add more extension tests.\n            /* c8 ignore next 2 */\n            ...(Array.isArray(def) ? def : def ? [def] : []),\n            ...(Array.isArray(all) ? all : all ? [all] : [])\n          ]\n          return handleListOfConstructs(list)(code)\n        }\n      }\n\n      /**\n       * Handle a list of construct.\n       *\n       * @param {Array<Construct>} list\n       * @returns {State}\n       */\n      function handleListOfConstructs(list) {\n        listOfConstructs = list\n        constructIndex = 0\n        if (list.length === 0) {\n          return bogusState\n        }\n        return handleConstruct(list[constructIndex])\n      }\n\n      /**\n       * Handle a single construct.\n       *\n       * @param {Construct} construct\n       * @returns {State}\n       */\n      function handleConstruct(construct) {\n        return start\n\n        /** @type {State} */\n        function start(code) {\n          // To do: not needed to store if there is no bogus state, probably?\n          // Currently doesn’t work because `inspect` in document does a check\n          // w/o a bogus, which doesn’t make sense. But it does seem to help perf\n          // by not storing.\n          info = store()\n          currentConstruct = construct\n          if (!construct.partial) {\n            context.currentConstruct = construct\n          }\n\n          // Always populated by defaults.\n\n          if (\n            construct.name &&\n            context.parser.constructs.disable.null.includes(construct.name)\n          ) {\n            return nok(code)\n          }\n          return construct.tokenize.call(\n            // If we do have fields, create an object w/ `context` as its\n            // prototype.\n            // This allows a “live binding”, which is needed for `interrupt`.\n            fields ? Object.assign(Object.create(context), fields) : context,\n            effects,\n            ok,\n            nok\n          )(code)\n        }\n      }\n\n      /** @type {State} */\n      function ok(code) {\n        consumed = true\n        onreturn(currentConstruct, info)\n        return returnState\n      }\n\n      /** @type {State} */\n      function nok(code) {\n        consumed = true\n        info.restore()\n        if (++constructIndex < listOfConstructs.length) {\n          return handleConstruct(listOfConstructs[constructIndex])\n        }\n        return bogusState\n      }\n    }\n  }\n\n  /**\n   * @param {Construct} construct\n   * @param {number} from\n   * @returns {undefined}\n   */\n  function addResult(construct, from) {\n    if (construct.resolveAll && !resolveAllConstructs.includes(construct)) {\n      resolveAllConstructs.push(construct)\n    }\n    if (construct.resolve) {\n      splice(\n        context.events,\n        from,\n        context.events.length - from,\n        construct.resolve(context.events.slice(from), context)\n      )\n    }\n    if (construct.resolveTo) {\n      context.events = construct.resolveTo(context.events, context)\n    }\n  }\n\n  /**\n   * Store state.\n   *\n   * @returns {Info}\n   */\n  function store() {\n    const startPoint = now()\n    const startPrevious = context.previous\n    const startCurrentConstruct = context.currentConstruct\n    const startEventsIndex = context.events.length\n    const startStack = Array.from(stack)\n    return {\n      restore,\n      from: startEventsIndex\n    }\n\n    /**\n     * Restore state.\n     *\n     * @returns {undefined}\n     */\n    function restore() {\n      point = startPoint\n      context.previous = startPrevious\n      context.currentConstruct = startCurrentConstruct\n      context.events.length = startEventsIndex\n      stack = startStack\n      accountForPotentialSkip()\n    }\n  }\n\n  /**\n   * Move the current point a bit forward in the line when it’s on a column\n   * skip.\n   *\n   * @returns {undefined}\n   */\n  function accountForPotentialSkip() {\n    if (point.line in columnStart && point.column < 2) {\n      point.column = columnStart[point.line]\n      point.offset += columnStart[point.line] - 1\n    }\n  }\n}\n\n/**\n * Get the chunks from a slice of chunks in the range of a token.\n *\n * @param {Array<Chunk>} chunks\n * @param {Pick<Token, 'end' | 'start'>} token\n * @returns {Array<Chunk>}\n */\nfunction sliceChunks(chunks, token) {\n  const startIndex = token.start._index\n  const startBufferIndex = token.start._bufferIndex\n  const endIndex = token.end._index\n  const endBufferIndex = token.end._bufferIndex\n  /** @type {Array<Chunk>} */\n  let view\n  if (startIndex === endIndex) {\n    // @ts-expect-error `_bufferIndex` is used on string chunks.\n    view = [chunks[startIndex].slice(startBufferIndex, endBufferIndex)]\n  } else {\n    view = chunks.slice(startIndex, endIndex)\n    if (startBufferIndex > -1) {\n      const head = view[0]\n      if (typeof head === 'string') {\n        view[0] = head.slice(startBufferIndex)\n      } else {\n        view.shift()\n      }\n    }\n    if (endBufferIndex > 0) {\n      // @ts-expect-error `_bufferIndex` is used on string chunks.\n      view.push(chunks[endIndex].slice(0, endBufferIndex))\n    }\n  }\n  return view\n}\n\n/**\n * Get the string value of a slice of chunks.\n *\n * @param {Array<Chunk>} chunks\n * @param {boolean | undefined} [expandTabs=false]\n * @returns {string}\n */\nfunction serializeChunks(chunks, expandTabs) {\n  let index = -1\n  /** @type {Array<string>} */\n  const result = []\n  /** @type {boolean | undefined} */\n  let atTab\n  while (++index < chunks.length) {\n    const chunk = chunks[index]\n    /** @type {string} */\n    let value\n    if (typeof chunk === 'string') {\n      value = chunk\n    } else\n      switch (chunk) {\n        case -5: {\n          value = '\\r'\n          break\n        }\n        case -4: {\n          value = '\\n'\n          break\n        }\n        case -3: {\n          value = '\\r' + '\\n'\n          break\n        }\n        case -2: {\n          value = expandTabs ? ' ' : '\\t'\n          break\n        }\n        case -1: {\n          if (!expandTabs && atTab) continue\n          value = ' '\n          break\n        }\n        default: {\n          // Currently only replacement character.\n          value = String.fromCharCode(chunk)\n        }\n      }\n    atTab = chunk === -2\n    result.push(value)\n  }\n  return result.join('')\n}\n","/**\n * @typedef {import('micromark-util-types').Extension} Extension\n */\n\nimport {\n  attention,\n  autolink,\n  blockQuote,\n  characterEscape,\n  characterReference,\n  codeFenced,\n  codeIndented,\n  codeText,\n  definition,\n  hardBreakEscape,\n  headingAtx,\n  htmlFlow,\n  htmlText,\n  labelEnd,\n  labelStartImage,\n  labelStartLink,\n  lineEnding,\n  list,\n  setextUnderline,\n  thematicBreak\n} from 'micromark-core-commonmark'\nimport {resolver as resolveText} from './initialize/text.js'\n\n/** @satisfies {Extension['document']} */\nexport const document = {\n  [42]: list,\n  [43]: list,\n  [45]: list,\n  [48]: list,\n  [49]: list,\n  [50]: list,\n  [51]: list,\n  [52]: list,\n  [53]: list,\n  [54]: list,\n  [55]: list,\n  [56]: list,\n  [57]: list,\n  [62]: blockQuote\n}\n\n/** @satisfies {Extension['contentInitial']} */\nexport const contentInitial = {\n  [91]: definition\n}\n\n/** @satisfies {Extension['flowInitial']} */\nexport const flowInitial = {\n  [-2]: codeIndented,\n  [-1]: codeIndented,\n  [32]: codeIndented\n}\n\n/** @satisfies {Extension['flow']} */\nexport const flow = {\n  [35]: headingAtx,\n  [42]: thematicBreak,\n  [45]: [setextUnderline, thematicBreak],\n  [60]: htmlFlow,\n  [61]: setextUnderline,\n  [95]: thematicBreak,\n  [96]: codeFenced,\n  [126]: codeFenced\n}\n\n/** @satisfies {Extension['string']} */\nexport const string = {\n  [38]: characterReference,\n  [92]: characterEscape\n}\n\n/** @satisfies {Extension['text']} */\nexport const text = {\n  [-5]: lineEnding,\n  [-4]: lineEnding,\n  [-3]: lineEnding,\n  [33]: labelStartImage,\n  [38]: characterReference,\n  [42]: attention,\n  [60]: [autolink, htmlText],\n  [91]: labelStartLink,\n  [92]: [hardBreakEscape, characterEscape],\n  [93]: labelEnd,\n  [95]: attention,\n  [96]: codeText\n}\n\n/** @satisfies {Extension['insideSpan']} */\nexport const insideSpan = {\n  null: [attention, resolveText]\n}\n\n/** @satisfies {Extension['attentionMarkers']} */\nexport const attentionMarkers = {\n  null: [42, 95]\n}\n\n/** @satisfies {Extension['disable']} */\nexport const disable = {\n  null: []\n}\n","/**\n * @typedef {import('micromark-util-types').Create} Create\n * @typedef {import('micromark-util-types').FullNormalizedExtension} FullNormalizedExtension\n * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct\n * @typedef {import('micromark-util-types').ParseContext} ParseContext\n * @typedef {import('micromark-util-types').ParseOptions} ParseOptions\n */\n\nimport {combineExtensions} from 'micromark-util-combine-extensions'\nimport {content} from './initialize/content.js'\nimport {document} from './initialize/document.js'\nimport {flow} from './initialize/flow.js'\nimport {string, text} from './initialize/text.js'\nimport {createTokenizer} from './create-tokenizer.js'\nimport * as defaultConstructs from './constructs.js'\n\n/**\n * @param {ParseOptions | null | undefined} [options]\n * @returns {ParseContext}\n */\nexport function parse(options) {\n  const settings = options || {}\n  const constructs =\n    /** @type {FullNormalizedExtension} */\n    combineExtensions([defaultConstructs, ...(settings.extensions || [])])\n\n  /** @type {ParseContext} */\n  const parser = {\n    defined: [],\n    lazy: {},\n    constructs,\n    content: create(content),\n    document: create(document),\n    flow: create(flow),\n    string: create(string),\n    text: create(text)\n  }\n  return parser\n\n  /**\n   * @param {InitialConstruct} initial\n   */\n  function create(initial) {\n    return creator\n    /** @type {Create} */\n    function creator(from) {\n      return createTokenizer(parser, initial, from)\n    }\n  }\n}\n","/**\n * @typedef {import('micromark-util-types').Event} Event\n */\n\nimport {subtokenize} from 'micromark-util-subtokenize'\n\n/**\n * @param {Array<Event>} events\n * @returns {Array<Event>}\n */\nexport function postprocess(events) {\n  while (!subtokenize(events)) {\n    // Empty\n  }\n  return events\n}\n","/**\n * @typedef {import('micromark-util-types').Chunk} Chunk\n * @typedef {import('micromark-util-types').Code} Code\n * @typedef {import('micromark-util-types').Encoding} Encoding\n * @typedef {import('micromark-util-types').Value} Value\n */\n\n/**\n * @callback Preprocessor\n * @param {Value} value\n * @param {Encoding | null | undefined} [encoding]\n * @param {boolean | null | undefined} [end=false]\n * @returns {Array<Chunk>}\n */\n\nconst search = /[\\0\\t\\n\\r]/g\n\n/**\n * @returns {Preprocessor}\n */\nexport function preprocess() {\n  let column = 1\n  let buffer = ''\n  /** @type {boolean | undefined} */\n  let start = true\n  /** @type {boolean | undefined} */\n  let atCarriageReturn\n  return preprocessor\n\n  /** @type {Preprocessor} */\n  // eslint-disable-next-line complexity\n  function preprocessor(value, encoding, end) {\n    /** @type {Array<Chunk>} */\n    const chunks = []\n    /** @type {RegExpMatchArray | null} */\n    let match\n    /** @type {number} */\n    let next\n    /** @type {number} */\n    let startPosition\n    /** @type {number} */\n    let endPosition\n    /** @type {Code} */\n    let code\n    value =\n      buffer +\n      (typeof value === 'string'\n        ? value.toString()\n        : new TextDecoder(encoding || undefined).decode(value))\n    startPosition = 0\n    buffer = ''\n    if (start) {\n      // To do: `markdown-rs` actually parses BOMs (byte order mark).\n      if (value.charCodeAt(0) === 65279) {\n        startPosition++\n      }\n      start = undefined\n    }\n    while (startPosition < value.length) {\n      search.lastIndex = startPosition\n      match = search.exec(value)\n      endPosition =\n        match && match.index !== undefined ? match.index : value.length\n      code = value.charCodeAt(endPosition)\n      if (!match) {\n        buffer = value.slice(startPosition)\n        break\n      }\n      if (code === 10 && startPosition === endPosition && atCarriageReturn) {\n        chunks.push(-3)\n        atCarriageReturn = undefined\n      } else {\n        if (atCarriageReturn) {\n          chunks.push(-5)\n          atCarriageReturn = undefined\n        }\n        if (startPosition < endPosition) {\n          chunks.push(value.slice(startPosition, endPosition))\n          column += endPosition - startPosition\n        }\n        switch (code) {\n          case 0: {\n            chunks.push(65533)\n            column++\n            break\n          }\n          case 9: {\n            next = Math.ceil(column / 4) * 4\n            chunks.push(-2)\n            while (column++ < next) chunks.push(-1)\n            break\n          }\n          case 10: {\n            chunks.push(-4)\n            column = 1\n            break\n          }\n          default: {\n            atCarriageReturn = true\n            column = 1\n          }\n        }\n      }\n      startPosition = endPosition + 1\n    }\n    if (end) {\n      if (atCarriageReturn) chunks.push(-5)\n      if (buffer) chunks.push(buffer)\n      chunks.push(null)\n    }\n    return chunks\n  }\n}\n","/**\n * @typedef {import('unist').Node} Node\n * @typedef {import('unist').Point} Point\n * @typedef {import('unist').Position} Position\n */\n\n/**\n * @typedef NodeLike\n * @property {string} type\n * @property {PositionLike | null | undefined} [position]\n *\n * @typedef PointLike\n * @property {number | null | undefined} [line]\n * @property {number | null | undefined} [column]\n * @property {number | null | undefined} [offset]\n *\n * @typedef PositionLike\n * @property {PointLike | null | undefined} [start]\n * @property {PointLike | null | undefined} [end]\n */\n\n/**\n * Serialize the positional info of a point, position (start and end points),\n * or node.\n *\n * @param {Node | NodeLike | Point | PointLike | Position | PositionLike | null | undefined} [value]\n *   Node, position, or point.\n * @returns {string}\n *   Pretty printed positional info of a node (`string`).\n *\n *   In the format of a range `ls:cs-le:ce` (when given `node` or `position`)\n *   or a point `l:c` (when given `point`), where `l` stands for line, `c` for\n *   column, `s` for `start`, and `e` for end.\n *   An empty string (`''`) is returned if the given value is neither `node`,\n *   `position`, nor `point`.\n */\nexport function stringifyPosition(value) {\n  // Nothing.\n  if (!value || typeof value !== 'object') {\n    return ''\n  }\n\n  // Node.\n  if ('position' in value || 'type' in value) {\n    return position(value.position)\n  }\n\n  // Position.\n  if ('start' in value || 'end' in value) {\n    return position(value)\n  }\n\n  // Point.\n  if ('line' in value || 'column' in value) {\n    return point(value)\n  }\n\n  // ?\n  return ''\n}\n\n/**\n * @param {Point | PointLike | null | undefined} point\n * @returns {string}\n */\nfunction point(point) {\n  return index(point && point.line) + ':' + index(point && point.column)\n}\n\n/**\n * @param {Position | PositionLike | null | undefined} pos\n * @returns {string}\n */\nfunction position(pos) {\n  return point(pos && pos.start) + '-' + point(pos && pos.end)\n}\n\n/**\n * @param {number | null | undefined} value\n * @returns {number}\n */\nfunction index(value) {\n  return value && typeof value === 'number' ? value : 1\n}\n","/**\n * @typedef {import('mdast').Break} Break\n * @typedef {import('mdast').Blockquote} Blockquote\n * @typedef {import('mdast').Code} Code\n * @typedef {import('mdast').Definition} Definition\n * @typedef {import('mdast').Emphasis} Emphasis\n * @typedef {import('mdast').Heading} Heading\n * @typedef {import('mdast').Html} Html\n * @typedef {import('mdast').Image} Image\n * @typedef {import('mdast').InlineCode} InlineCode\n * @typedef {import('mdast').Link} Link\n * @typedef {import('mdast').List} List\n * @typedef {import('mdast').ListItem} ListItem\n * @typedef {import('mdast').Nodes} Nodes\n * @typedef {import('mdast').Paragraph} Paragraph\n * @typedef {import('mdast').Parent} Parent\n * @typedef {import('mdast').PhrasingContent} PhrasingContent\n * @typedef {import('mdast').ReferenceType} ReferenceType\n * @typedef {import('mdast').Root} Root\n * @typedef {import('mdast').Strong} Strong\n * @typedef {import('mdast').Text} Text\n * @typedef {import('mdast').ThematicBreak} ThematicBreak\n *\n * @typedef {import('micromark-util-types').Encoding} Encoding\n * @typedef {import('micromark-util-types').Event} Event\n * @typedef {import('micromark-util-types').ParseOptions} ParseOptions\n * @typedef {import('micromark-util-types').Token} Token\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Value} Value\n *\n * @typedef {import('unist').Point} Point\n *\n * @typedef {import('../index.js').CompileData} CompileData\n */\n\n/**\n * @typedef {Omit<Parent, 'children' | 'type'> & {type: 'fragment', children: Array<PhrasingContent>}} Fragment\n */\n\n/**\n * @callback Transform\n *   Extra transform, to change the AST afterwards.\n * @param {Root} tree\n *   Tree to transform.\n * @returns {Root | null | undefined | void}\n *   New tree or nothing (in which case the current tree is used).\n *\n * @callback Handle\n *   Handle a token.\n * @param {CompileContext} this\n *   Context.\n * @param {Token} token\n *   Current token.\n * @returns {undefined | void}\n *   Nothing.\n *\n * @typedef {Record<string, Handle>} Handles\n *   Token types mapping to handles\n *\n * @callback OnEnterError\n *   Handle the case where the `right` token is open, but it is closed (by the\n *   `left` token) or because we reached the end of the document.\n * @param {Omit<CompileContext, 'sliceSerialize'>} this\n *   Context.\n * @param {Token | undefined} left\n *   Left token.\n * @param {Token} right\n *   Right token.\n * @returns {undefined}\n *   Nothing.\n *\n * @callback OnExitError\n *   Handle the case where the `right` token is open but it is closed by\n *   exiting the `left` token.\n * @param {Omit<CompileContext, 'sliceSerialize'>} this\n *   Context.\n * @param {Token} left\n *   Left token.\n * @param {Token} right\n *   Right token.\n * @returns {undefined}\n *   Nothing.\n *\n * @typedef {[Token, OnEnterError | undefined]} TokenTuple\n *   Open token on the stack, with an optional error handler for when\n *   that token isn’t closed properly.\n */\n\n/**\n * @typedef Config\n *   Configuration.\n *\n *   We have our defaults, but extensions will add more.\n * @property {Array<string>} canContainEols\n *   Token types where line endings are used.\n * @property {Handles} enter\n *   Opening handles.\n * @property {Handles} exit\n *   Closing handles.\n * @property {Array<Transform>} transforms\n *   Tree transforms.\n *\n * @typedef {Partial<Config>} Extension\n *   Change how markdown tokens from micromark are turned into mdast.\n *\n * @typedef CompileContext\n *   mdast compiler context.\n * @property {Array<Fragment | Nodes>} stack\n *   Stack of nodes.\n * @property {Array<TokenTuple>} tokenStack\n *   Stack of tokens.\n * @property {(this: CompileContext) => undefined} buffer\n *   Capture some of the output data.\n * @property {(this: CompileContext) => string} resume\n *   Stop capturing and access the output data.\n * @property {(this: CompileContext, node: Nodes, token: Token, onError?: OnEnterError) => undefined} enter\n *   Enter a node.\n * @property {(this: CompileContext, token: Token, onError?: OnExitError) => undefined} exit\n *   Exit a node.\n * @property {TokenizeContext['sliceSerialize']} sliceSerialize\n *   Get the string value of a token.\n * @property {Config} config\n *   Configuration.\n * @property {CompileData} data\n *   Info passed around; key/value store.\n *\n * @typedef FromMarkdownOptions\n *   Configuration for how to build mdast.\n * @property {Array<Extension | Array<Extension>> | null | undefined} [mdastExtensions]\n *   Extensions for this utility to change how tokens are turned into a tree.\n *\n * @typedef {ParseOptions & FromMarkdownOptions} Options\n *   Configuration.\n */\n\nimport { toString } from 'mdast-util-to-string';\nimport { parse, postprocess, preprocess } from 'micromark';\nimport { decodeNumericCharacterReference } from 'micromark-util-decode-numeric-character-reference';\nimport { decodeString } from 'micromark-util-decode-string';\nimport { normalizeIdentifier } from 'micromark-util-normalize-identifier';\nimport { decodeNamedCharacterReference } from 'decode-named-character-reference';\nimport { stringifyPosition } from 'unist-util-stringify-position';\nconst own = {}.hasOwnProperty;\n\n/**\n * Turn markdown into a syntax tree.\n *\n * @overload\n * @param {Value} value\n * @param {Encoding | null | undefined} [encoding]\n * @param {Options | null | undefined} [options]\n * @returns {Root}\n *\n * @overload\n * @param {Value} value\n * @param {Options | null | undefined} [options]\n * @returns {Root}\n *\n * @param {Value} value\n *   Markdown to parse.\n * @param {Encoding | Options | null | undefined} [encoding]\n *   Character encoding for when `value` is `Buffer`.\n * @param {Options | null | undefined} [options]\n *   Configuration.\n * @returns {Root}\n *   mdast tree.\n */\nexport function fromMarkdown(value, encoding, options) {\n  if (typeof encoding !== 'string') {\n    options = encoding;\n    encoding = undefined;\n  }\n  return compiler(options)(postprocess(parse(options).document().write(preprocess()(value, encoding, true))));\n}\n\n/**\n * Note this compiler only understand complete buffering, not streaming.\n *\n * @param {Options | null | undefined} [options]\n */\nfunction compiler(options) {\n  /** @type {Config} */\n  const config = {\n    transforms: [],\n    canContainEols: ['emphasis', 'fragment', 'heading', 'paragraph', 'strong'],\n    enter: {\n      autolink: opener(link),\n      autolinkProtocol: onenterdata,\n      autolinkEmail: onenterdata,\n      atxHeading: opener(heading),\n      blockQuote: opener(blockQuote),\n      characterEscape: onenterdata,\n      characterReference: onenterdata,\n      codeFenced: opener(codeFlow),\n      codeFencedFenceInfo: buffer,\n      codeFencedFenceMeta: buffer,\n      codeIndented: opener(codeFlow, buffer),\n      codeText: opener(codeText, buffer),\n      codeTextData: onenterdata,\n      data: onenterdata,\n      codeFlowValue: onenterdata,\n      definition: opener(definition),\n      definitionDestinationString: buffer,\n      definitionLabelString: buffer,\n      definitionTitleString: buffer,\n      emphasis: opener(emphasis),\n      hardBreakEscape: opener(hardBreak),\n      hardBreakTrailing: opener(hardBreak),\n      htmlFlow: opener(html, buffer),\n      htmlFlowData: onenterdata,\n      htmlText: opener(html, buffer),\n      htmlTextData: onenterdata,\n      image: opener(image),\n      label: buffer,\n      link: opener(link),\n      listItem: opener(listItem),\n      listItemValue: onenterlistitemvalue,\n      listOrdered: opener(list, onenterlistordered),\n      listUnordered: opener(list),\n      paragraph: opener(paragraph),\n      reference: onenterreference,\n      referenceString: buffer,\n      resourceDestinationString: buffer,\n      resourceTitleString: buffer,\n      setextHeading: opener(heading),\n      strong: opener(strong),\n      thematicBreak: opener(thematicBreak)\n    },\n    exit: {\n      atxHeading: closer(),\n      atxHeadingSequence: onexitatxheadingsequence,\n      autolink: closer(),\n      autolinkEmail: onexitautolinkemail,\n      autolinkProtocol: onexitautolinkprotocol,\n      blockQuote: closer(),\n      characterEscapeValue: onexitdata,\n      characterReferenceMarkerHexadecimal: onexitcharacterreferencemarker,\n      characterReferenceMarkerNumeric: onexitcharacterreferencemarker,\n      characterReferenceValue: onexitcharacterreferencevalue,\n      characterReference: onexitcharacterreference,\n      codeFenced: closer(onexitcodefenced),\n      codeFencedFence: onexitcodefencedfence,\n      codeFencedFenceInfo: onexitcodefencedfenceinfo,\n      codeFencedFenceMeta: onexitcodefencedfencemeta,\n      codeFlowValue: onexitdata,\n      codeIndented: closer(onexitcodeindented),\n      codeText: closer(onexitcodetext),\n      codeTextData: onexitdata,\n      data: onexitdata,\n      definition: closer(),\n      definitionDestinationString: onexitdefinitiondestinationstring,\n      definitionLabelString: onexitdefinitionlabelstring,\n      definitionTitleString: onexitdefinitiontitlestring,\n      emphasis: closer(),\n      hardBreakEscape: closer(onexithardbreak),\n      hardBreakTrailing: closer(onexithardbreak),\n      htmlFlow: closer(onexithtmlflow),\n      htmlFlowData: onexitdata,\n      htmlText: closer(onexithtmltext),\n      htmlTextData: onexitdata,\n      image: closer(onexitimage),\n      label: onexitlabel,\n      labelText: onexitlabeltext,\n      lineEnding: onexitlineending,\n      link: closer(onexitlink),\n      listItem: closer(),\n      listOrdered: closer(),\n      listUnordered: closer(),\n      paragraph: closer(),\n      referenceString: onexitreferencestring,\n      resourceDestinationString: onexitresourcedestinationstring,\n      resourceTitleString: onexitresourcetitlestring,\n      resource: onexitresource,\n      setextHeading: closer(onexitsetextheading),\n      setextHeadingLineSequence: onexitsetextheadinglinesequence,\n      setextHeadingText: onexitsetextheadingtext,\n      strong: closer(),\n      thematicBreak: closer()\n    }\n  };\n  configure(config, (options || {}).mdastExtensions || []);\n\n  /** @type {CompileData} */\n  const data = {};\n  return compile;\n\n  /**\n   * Turn micromark events into an mdast tree.\n   *\n   * @param {Array<Event>} events\n   *   Events.\n   * @returns {Root}\n   *   mdast tree.\n   */\n  function compile(events) {\n    /** @type {Root} */\n    let tree = {\n      type: 'root',\n      children: []\n    };\n    /** @type {Omit<CompileContext, 'sliceSerialize'>} */\n    const context = {\n      stack: [tree],\n      tokenStack: [],\n      config,\n      enter,\n      exit,\n      buffer,\n      resume,\n      data\n    };\n    /** @type {Array<number>} */\n    const listStack = [];\n    let index = -1;\n    while (++index < events.length) {\n      // We preprocess lists to add `listItem` tokens, and to infer whether\n      // items the list itself are spread out.\n      if (events[index][1].type === \"listOrdered\" || events[index][1].type === \"listUnordered\") {\n        if (events[index][0] === 'enter') {\n          listStack.push(index);\n        } else {\n          const tail = listStack.pop();\n          index = prepareList(events, tail, index);\n        }\n      }\n    }\n    index = -1;\n    while (++index < events.length) {\n      const handler = config[events[index][0]];\n      if (own.call(handler, events[index][1].type)) {\n        handler[events[index][1].type].call(Object.assign({\n          sliceSerialize: events[index][2].sliceSerialize\n        }, context), events[index][1]);\n      }\n    }\n\n    // Handle tokens still being open.\n    if (context.tokenStack.length > 0) {\n      const tail = context.tokenStack[context.tokenStack.length - 1];\n      const handler = tail[1] || defaultOnError;\n      handler.call(context, undefined, tail[0]);\n    }\n\n    // Figure out `root` position.\n    tree.position = {\n      start: point(events.length > 0 ? events[0][1].start : {\n        line: 1,\n        column: 1,\n        offset: 0\n      }),\n      end: point(events.length > 0 ? events[events.length - 2][1].end : {\n        line: 1,\n        column: 1,\n        offset: 0\n      })\n    };\n\n    // Call transforms.\n    index = -1;\n    while (++index < config.transforms.length) {\n      tree = config.transforms[index](tree) || tree;\n    }\n    return tree;\n  }\n\n  /**\n   * @param {Array<Event>} events\n   * @param {number} start\n   * @param {number} length\n   * @returns {number}\n   */\n  function prepareList(events, start, length) {\n    let index = start - 1;\n    let containerBalance = -1;\n    let listSpread = false;\n    /** @type {Token | undefined} */\n    let listItem;\n    /** @type {number | undefined} */\n    let lineIndex;\n    /** @type {number | undefined} */\n    let firstBlankLineIndex;\n    /** @type {boolean | undefined} */\n    let atMarker;\n    while (++index <= length) {\n      const event = events[index];\n      switch (event[1].type) {\n        case \"listUnordered\":\n        case \"listOrdered\":\n        case \"blockQuote\":\n          {\n            if (event[0] === 'enter') {\n              containerBalance++;\n            } else {\n              containerBalance--;\n            }\n            atMarker = undefined;\n            break;\n          }\n        case \"lineEndingBlank\":\n          {\n            if (event[0] === 'enter') {\n              if (listItem && !atMarker && !containerBalance && !firstBlankLineIndex) {\n                firstBlankLineIndex = index;\n              }\n              atMarker = undefined;\n            }\n            break;\n          }\n        case \"linePrefix\":\n        case \"listItemValue\":\n        case \"listItemMarker\":\n        case \"listItemPrefix\":\n        case \"listItemPrefixWhitespace\":\n          {\n            // Empty.\n\n            break;\n          }\n        default:\n          {\n            atMarker = undefined;\n          }\n      }\n      if (!containerBalance && event[0] === 'enter' && event[1].type === \"listItemPrefix\" || containerBalance === -1 && event[0] === 'exit' && (event[1].type === \"listUnordered\" || event[1].type === \"listOrdered\")) {\n        if (listItem) {\n          let tailIndex = index;\n          lineIndex = undefined;\n          while (tailIndex--) {\n            const tailEvent = events[tailIndex];\n            if (tailEvent[1].type === \"lineEnding\" || tailEvent[1].type === \"lineEndingBlank\") {\n              if (tailEvent[0] === 'exit') continue;\n              if (lineIndex) {\n                events[lineIndex][1].type = \"lineEndingBlank\";\n                listSpread = true;\n              }\n              tailEvent[1].type = \"lineEnding\";\n              lineIndex = tailIndex;\n            } else if (tailEvent[1].type === \"linePrefix\" || tailEvent[1].type === \"blockQuotePrefix\" || tailEvent[1].type === \"blockQuotePrefixWhitespace\" || tailEvent[1].type === \"blockQuoteMarker\" || tailEvent[1].type === \"listItemIndent\") {\n              // Empty\n            } else {\n              break;\n            }\n          }\n          if (firstBlankLineIndex && (!lineIndex || firstBlankLineIndex < lineIndex)) {\n            listItem._spread = true;\n          }\n\n          // Fix position.\n          listItem.end = Object.assign({}, lineIndex ? events[lineIndex][1].start : event[1].end);\n          events.splice(lineIndex || index, 0, ['exit', listItem, event[2]]);\n          index++;\n          length++;\n        }\n\n        // Create a new list item.\n        if (event[1].type === \"listItemPrefix\") {\n          /** @type {Token} */\n          const item = {\n            type: 'listItem',\n            _spread: false,\n            start: Object.assign({}, event[1].start),\n            // @ts-expect-error: we’ll add `end` in a second.\n            end: undefined\n          };\n          listItem = item;\n          events.splice(index, 0, ['enter', item, event[2]]);\n          index++;\n          length++;\n          firstBlankLineIndex = undefined;\n          atMarker = true;\n        }\n      }\n    }\n    events[start][1]._spread = listSpread;\n    return length;\n  }\n\n  /**\n   * Create an opener handle.\n   *\n   * @param {(token: Token) => Nodes} create\n   *   Create a node.\n   * @param {Handle | undefined} [and]\n   *   Optional function to also run.\n   * @returns {Handle}\n   *   Handle.\n   */\n  function opener(create, and) {\n    return open;\n\n    /**\n     * @this {CompileContext}\n     * @param {Token} token\n     * @returns {undefined}\n     */\n    function open(token) {\n      enter.call(this, create(token), token);\n      if (and) and.call(this, token);\n    }\n  }\n\n  /**\n   * @this {CompileContext}\n   * @returns {undefined}\n   */\n  function buffer() {\n    this.stack.push({\n      type: 'fragment',\n      children: []\n    });\n  }\n\n  /**\n   * @this {CompileContext}\n   *   Context.\n   * @param {Nodes} node\n   *   Node to enter.\n   * @param {Token} token\n   *   Corresponding token.\n   * @param {OnEnterError | undefined} [errorHandler]\n   *   Handle the case where this token is open, but it is closed by something else.\n   * @returns {undefined}\n   *   Nothing.\n   */\n  function enter(node, token, errorHandler) {\n    const parent = this.stack[this.stack.length - 1];\n    /** @type {Array<Nodes>} */\n    const siblings = parent.children;\n    siblings.push(node);\n    this.stack.push(node);\n    this.tokenStack.push([token, errorHandler]);\n    node.position = {\n      start: point(token.start),\n      // @ts-expect-error: `end` will be patched later.\n      end: undefined\n    };\n  }\n\n  /**\n   * Create a closer handle.\n   *\n   * @param {Handle | undefined} [and]\n   *   Optional function to also run.\n   * @returns {Handle}\n   *   Handle.\n   */\n  function closer(and) {\n    return close;\n\n    /**\n     * @this {CompileContext}\n     * @param {Token} token\n     * @returns {undefined}\n     */\n    function close(token) {\n      if (and) and.call(this, token);\n      exit.call(this, token);\n    }\n  }\n\n  /**\n   * @this {CompileContext}\n   *   Context.\n   * @param {Token} token\n   *   Corresponding token.\n   * @param {OnExitError | undefined} [onExitError]\n   *   Handle the case where another token is open.\n   * @returns {undefined}\n   *   Nothing.\n   */\n  function exit(token, onExitError) {\n    const node = this.stack.pop();\n    const open = this.tokenStack.pop();\n    if (!open) {\n      throw new Error('Cannot close `' + token.type + '` (' + stringifyPosition({\n        start: token.start,\n        end: token.end\n      }) + '): it’s not open');\n    } else if (open[0].type !== token.type) {\n      if (onExitError) {\n        onExitError.call(this, token, open[0]);\n      } else {\n        const handler = open[1] || defaultOnError;\n        handler.call(this, token, open[0]);\n      }\n    }\n    node.position.end = point(token.end);\n  }\n\n  /**\n   * @this {CompileContext}\n   * @returns {string}\n   */\n  function resume() {\n    return toString(this.stack.pop());\n  }\n\n  //\n  // Handlers.\n  //\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onenterlistordered() {\n    this.data.expectingFirstListItemValue = true;\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onenterlistitemvalue(token) {\n    if (this.data.expectingFirstListItemValue) {\n      const ancestor = this.stack[this.stack.length - 2];\n      ancestor.start = Number.parseInt(this.sliceSerialize(token), 10);\n      this.data.expectingFirstListItemValue = undefined;\n    }\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitcodefencedfenceinfo() {\n    const data = this.resume();\n    const node = this.stack[this.stack.length - 1];\n    node.lang = data;\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitcodefencedfencemeta() {\n    const data = this.resume();\n    const node = this.stack[this.stack.length - 1];\n    node.meta = data;\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitcodefencedfence() {\n    // Exit if this is the closing fence.\n    if (this.data.flowCodeInside) return;\n    this.buffer();\n    this.data.flowCodeInside = true;\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitcodefenced() {\n    const data = this.resume();\n    const node = this.stack[this.stack.length - 1];\n    node.value = data.replace(/^(\\r?\\n|\\r)|(\\r?\\n|\\r)$/g, '');\n    this.data.flowCodeInside = undefined;\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitcodeindented() {\n    const data = this.resume();\n    const node = this.stack[this.stack.length - 1];\n    node.value = data.replace(/(\\r?\\n|\\r)$/g, '');\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitdefinitionlabelstring(token) {\n    const label = this.resume();\n    const node = this.stack[this.stack.length - 1];\n    node.label = label;\n    node.identifier = normalizeIdentifier(this.sliceSerialize(token)).toLowerCase();\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitdefinitiontitlestring() {\n    const data = this.resume();\n    const node = this.stack[this.stack.length - 1];\n    node.title = data;\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitdefinitiondestinationstring() {\n    const data = this.resume();\n    const node = this.stack[this.stack.length - 1];\n    node.url = data;\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitatxheadingsequence(token) {\n    const node = this.stack[this.stack.length - 1];\n    if (!node.depth) {\n      const depth = this.sliceSerialize(token).length;\n      node.depth = depth;\n    }\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitsetextheadingtext() {\n    this.data.setextHeadingSlurpLineEnding = true;\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitsetextheadinglinesequence(token) {\n    const node = this.stack[this.stack.length - 1];\n    node.depth = this.sliceSerialize(token).codePointAt(0) === 61 ? 1 : 2;\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitsetextheading() {\n    this.data.setextHeadingSlurpLineEnding = undefined;\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onenterdata(token) {\n    const node = this.stack[this.stack.length - 1];\n    /** @type {Array<Nodes>} */\n    const siblings = node.children;\n    let tail = siblings[siblings.length - 1];\n    if (!tail || tail.type !== 'text') {\n      // Add a new text node.\n      tail = text();\n      tail.position = {\n        start: point(token.start),\n        // @ts-expect-error: we’ll add `end` later.\n        end: undefined\n      };\n      siblings.push(tail);\n    }\n    this.stack.push(tail);\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onexitdata(token) {\n    const tail = this.stack.pop();\n    tail.value += this.sliceSerialize(token);\n    tail.position.end = point(token.end);\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onexitlineending(token) {\n    const context = this.stack[this.stack.length - 1];\n    // If we’re at a hard break, include the line ending in there.\n    if (this.data.atHardBreak) {\n      const tail = context.children[context.children.length - 1];\n      tail.position.end = point(token.end);\n      this.data.atHardBreak = undefined;\n      return;\n    }\n    if (!this.data.setextHeadingSlurpLineEnding && config.canContainEols.includes(context.type)) {\n      onenterdata.call(this, token);\n      onexitdata.call(this, token);\n    }\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onexithardbreak() {\n    this.data.atHardBreak = true;\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onexithtmlflow() {\n    const data = this.resume();\n    const node = this.stack[this.stack.length - 1];\n    node.value = data;\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onexithtmltext() {\n    const data = this.resume();\n    const node = this.stack[this.stack.length - 1];\n    node.value = data;\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onexitcodetext() {\n    const data = this.resume();\n    const node = this.stack[this.stack.length - 1];\n    node.value = data;\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onexitlink() {\n    const node = this.stack[this.stack.length - 1];\n    // Note: there are also `identifier` and `label` fields on this link node!\n    // These are used / cleaned here.\n\n    // To do: clean.\n    if (this.data.inReference) {\n      /** @type {ReferenceType} */\n      const referenceType = this.data.referenceType || 'shortcut';\n      node.type += 'Reference';\n      // @ts-expect-error: mutate.\n      node.referenceType = referenceType;\n      // @ts-expect-error: mutate.\n      delete node.url;\n      delete node.title;\n    } else {\n      // @ts-expect-error: mutate.\n      delete node.identifier;\n      // @ts-expect-error: mutate.\n      delete node.label;\n    }\n    this.data.referenceType = undefined;\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onexitimage() {\n    const node = this.stack[this.stack.length - 1];\n    // Note: there are also `identifier` and `label` fields on this link node!\n    // These are used / cleaned here.\n\n    // To do: clean.\n    if (this.data.inReference) {\n      /** @type {ReferenceType} */\n      const referenceType = this.data.referenceType || 'shortcut';\n      node.type += 'Reference';\n      // @ts-expect-error: mutate.\n      node.referenceType = referenceType;\n      // @ts-expect-error: mutate.\n      delete node.url;\n      delete node.title;\n    } else {\n      // @ts-expect-error: mutate.\n      delete node.identifier;\n      // @ts-expect-error: mutate.\n      delete node.label;\n    }\n    this.data.referenceType = undefined;\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onexitlabeltext(token) {\n    const string = this.sliceSerialize(token);\n    const ancestor = this.stack[this.stack.length - 2];\n    // @ts-expect-error: stash this on the node, as it might become a reference\n    // later.\n    ancestor.label = decodeString(string);\n    // @ts-expect-error: same as above.\n    ancestor.identifier = normalizeIdentifier(string).toLowerCase();\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onexitlabel() {\n    const fragment = this.stack[this.stack.length - 1];\n    const value = this.resume();\n    const node = this.stack[this.stack.length - 1];\n    // Assume a reference.\n    this.data.inReference = true;\n    if (node.type === 'link') {\n      /** @type {Array<PhrasingContent>} */\n      const children = fragment.children;\n      node.children = children;\n    } else {\n      node.alt = value;\n    }\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onexitresourcedestinationstring() {\n    const data = this.resume();\n    const node = this.stack[this.stack.length - 1];\n    node.url = data;\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onexitresourcetitlestring() {\n    const data = this.resume();\n    const node = this.stack[this.stack.length - 1];\n    node.title = data;\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onexitresource() {\n    this.data.inReference = undefined;\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onenterreference() {\n    this.data.referenceType = 'collapsed';\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onexitreferencestring(token) {\n    const label = this.resume();\n    const node = this.stack[this.stack.length - 1];\n    // @ts-expect-error: stash this on the node, as it might become a reference\n    // later.\n    node.label = label;\n    // @ts-expect-error: same as above.\n    node.identifier = normalizeIdentifier(this.sliceSerialize(token)).toLowerCase();\n    this.data.referenceType = 'full';\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onexitcharacterreferencemarker(token) {\n    this.data.characterReferenceType = token.type;\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitcharacterreferencevalue(token) {\n    const data = this.sliceSerialize(token);\n    const type = this.data.characterReferenceType;\n    /** @type {string} */\n    let value;\n    if (type) {\n      value = decodeNumericCharacterReference(data, type === \"characterReferenceMarkerNumeric\" ? 10 : 16);\n      this.data.characterReferenceType = undefined;\n    } else {\n      const result = decodeNamedCharacterReference(data);\n      value = result;\n    }\n    const tail = this.stack[this.stack.length - 1];\n    tail.value += value;\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitcharacterreference(token) {\n    const tail = this.stack.pop();\n    tail.position.end = point(token.end);\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitautolinkprotocol(token) {\n    onexitdata.call(this, token);\n    const node = this.stack[this.stack.length - 1];\n    node.url = this.sliceSerialize(token);\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitautolinkemail(token) {\n    onexitdata.call(this, token);\n    const node = this.stack[this.stack.length - 1];\n    node.url = 'mailto:' + this.sliceSerialize(token);\n  }\n\n  //\n  // Creaters.\n  //\n\n  /** @returns {Blockquote} */\n  function blockQuote() {\n    return {\n      type: 'blockquote',\n      children: []\n    };\n  }\n\n  /** @returns {Code} */\n  function codeFlow() {\n    return {\n      type: 'code',\n      lang: null,\n      meta: null,\n      value: ''\n    };\n  }\n\n  /** @returns {InlineCode} */\n  function codeText() {\n    return {\n      type: 'inlineCode',\n      value: ''\n    };\n  }\n\n  /** @returns {Definition} */\n  function definition() {\n    return {\n      type: 'definition',\n      identifier: '',\n      label: null,\n      title: null,\n      url: ''\n    };\n  }\n\n  /** @returns {Emphasis} */\n  function emphasis() {\n    return {\n      type: 'emphasis',\n      children: []\n    };\n  }\n\n  /** @returns {Heading} */\n  function heading() {\n    return {\n      type: 'heading',\n      // @ts-expect-error `depth` will be set later.\n      depth: 0,\n      children: []\n    };\n  }\n\n  /** @returns {Break} */\n  function hardBreak() {\n    return {\n      type: 'break'\n    };\n  }\n\n  /** @returns {Html} */\n  function html() {\n    return {\n      type: 'html',\n      value: ''\n    };\n  }\n\n  /** @returns {Image} */\n  function image() {\n    return {\n      type: 'image',\n      title: null,\n      url: '',\n      alt: null\n    };\n  }\n\n  /** @returns {Link} */\n  function link() {\n    return {\n      type: 'link',\n      title: null,\n      url: '',\n      children: []\n    };\n  }\n\n  /**\n   * @param {Token} token\n   * @returns {List}\n   */\n  function list(token) {\n    return {\n      type: 'list',\n      ordered: token.type === 'listOrdered',\n      start: null,\n      spread: token._spread,\n      children: []\n    };\n  }\n\n  /**\n   * @param {Token} token\n   * @returns {ListItem}\n   */\n  function listItem(token) {\n    return {\n      type: 'listItem',\n      spread: token._spread,\n      checked: null,\n      children: []\n    };\n  }\n\n  /** @returns {Paragraph} */\n  function paragraph() {\n    return {\n      type: 'paragraph',\n      children: []\n    };\n  }\n\n  /** @returns {Strong} */\n  function strong() {\n    return {\n      type: 'strong',\n      children: []\n    };\n  }\n\n  /** @returns {Text} */\n  function text() {\n    return {\n      type: 'text',\n      value: ''\n    };\n  }\n\n  /** @returns {ThematicBreak} */\n  function thematicBreak() {\n    return {\n      type: 'thematicBreak'\n    };\n  }\n}\n\n/**\n * Copy a point-like value.\n *\n * @param {Point} d\n *   Point-like value.\n * @returns {Point}\n *   unist point.\n */\nfunction point(d) {\n  return {\n    line: d.line,\n    column: d.column,\n    offset: d.offset\n  };\n}\n\n/**\n * @param {Config} combined\n * @param {Array<Array<Extension> | Extension>} extensions\n * @returns {undefined}\n */\nfunction configure(combined, extensions) {\n  let index = -1;\n  while (++index < extensions.length) {\n    const value = extensions[index];\n    if (Array.isArray(value)) {\n      configure(combined, value);\n    } else {\n      extension(combined, value);\n    }\n  }\n}\n\n/**\n * @param {Config} combined\n * @param {Extension} extension\n * @returns {undefined}\n */\nfunction extension(combined, extension) {\n  /** @type {keyof Extension} */\n  let key;\n  for (key in extension) {\n    if (own.call(extension, key)) {\n      switch (key) {\n        case 'canContainEols':\n          {\n            const right = extension[key];\n            if (right) {\n              combined[key].push(...right);\n            }\n            break;\n          }\n        case 'transforms':\n          {\n            const right = extension[key];\n            if (right) {\n              combined[key].push(...right);\n            }\n            break;\n          }\n        case 'enter':\n        case 'exit':\n          {\n            const right = extension[key];\n            if (right) {\n              Object.assign(combined[key], right);\n            }\n            break;\n          }\n        // No default\n      }\n    }\n  }\n}\n\n/** @type {OnEnterError} */\nfunction defaultOnError(left, right) {\n  if (left) {\n    throw new Error('Cannot close `' + left.type + '` (' + stringifyPosition({\n      start: left.start,\n      end: left.end\n    }) + '): a different token (`' + right.type + '`, ' + stringifyPosition({\n      start: right.start,\n      end: right.end\n    }) + ') is open');\n  } else {\n    throw new Error('Cannot close document, a token (`' + right.type + '`, ' + stringifyPosition({\n      start: right.start,\n      end: right.end\n    }) + ') is still open');\n  }\n}","/**\n * @typedef {import('mdast').Root} Root\n * @typedef {import('mdast-util-from-markdown').Options} FromMarkdownOptions\n * @typedef {import('unified').Parser<Root>} Parser\n * @typedef {import('unified').Processor<Root>} Processor\n */\n\n/**\n * @typedef {Omit<FromMarkdownOptions, 'extensions' | 'mdastExtensions'>} Options\n */\n\nimport {fromMarkdown} from 'mdast-util-from-markdown'\n\n/**\n * Aadd support for parsing from markdown.\n *\n * @param {Readonly<Options> | null | undefined} [options]\n *   Configuration (optional).\n * @returns {undefined}\n *   Nothing.\n */\nexport default function remarkParse(options) {\n  /** @type {Processor} */\n  // @ts-expect-error: TS in JSDoc generates wrong types if `this` is typed regularly.\n  const self = this\n\n  self.parser = parser\n\n  /**\n   * @type {Parser}\n   */\n  function parser(doc) {\n    return fromMarkdown(doc, {\n      ...self.data('settings'),\n      ...options,\n      // Note: these options are not in the readme.\n      // The goal is for them to be set by plugins on `data` instead of being\n      // passed by users.\n      extensions: self.data('micromarkExtensions') || [],\n      mdastExtensions: self.data('fromMarkdownExtensions') || []\n    })\n  }\n}\n","/**\n * Throw a given error.\n *\n * @param {Error|null|undefined} [error]\n *   Maybe error.\n * @returns {asserts error is null|undefined}\n */\nexport function bail(error) {\n  if (error) {\n    throw error\n  }\n}\n","'use strict';\n\nvar hasOwn = Object.prototype.hasOwnProperty;\nvar toStr = Object.prototype.toString;\nvar defineProperty = Object.defineProperty;\nvar gOPD = Object.getOwnPropertyDescriptor;\n\nvar isArray = function isArray(arr) {\n\tif (typeof Array.isArray === 'function') {\n\t\treturn Array.isArray(arr);\n\t}\n\n\treturn toStr.call(arr) === '[object Array]';\n};\n\nvar isPlainObject = function isPlainObject(obj) {\n\tif (!obj || toStr.call(obj) !== '[object Object]') {\n\t\treturn false;\n\t}\n\n\tvar hasOwnConstructor = hasOwn.call(obj, 'constructor');\n\tvar hasIsPrototypeOf = obj.constructor && obj.constructor.prototype && hasOwn.call(obj.constructor.prototype, 'isPrototypeOf');\n\t// Not own constructor property must be Object\n\tif (obj.constructor && !hasOwnConstructor && !hasIsPrototypeOf) {\n\t\treturn false;\n\t}\n\n\t// Own properties are enumerated firstly, so to speed up,\n\t// if last one is own, then all properties are own.\n\tvar key;\n\tfor (key in obj) { /**/ }\n\n\treturn typeof key === 'undefined' || hasOwn.call(obj, key);\n};\n\n// If name is '__proto__', and Object.defineProperty is available, define __proto__ as an own property on target\nvar setProperty = function setProperty(target, options) {\n\tif (defineProperty && options.name === '__proto__') {\n\t\tdefineProperty(target, options.name, {\n\t\t\tenumerable: true,\n\t\t\tconfigurable: true,\n\t\t\tvalue: options.newValue,\n\t\t\twritable: true\n\t\t});\n\t} else {\n\t\ttarget[options.name] = options.newValue;\n\t}\n};\n\n// Return undefined instead of __proto__ if '__proto__' is not an own property\nvar getProperty = function getProperty(obj, name) {\n\tif (name === '__proto__') {\n\t\tif (!hasOwn.call(obj, name)) {\n\t\t\treturn void 0;\n\t\t} else if (gOPD) {\n\t\t\t// In early versions of node, obj['__proto__'] is buggy when obj has\n\t\t\t// __proto__ as an own property. Object.getOwnPropertyDescriptor() works.\n\t\t\treturn gOPD(obj, name).value;\n\t\t}\n\t}\n\n\treturn obj[name];\n};\n\nmodule.exports = function extend() {\n\tvar options, name, src, copy, copyIsArray, clone;\n\tvar target = arguments[0];\n\tvar i = 1;\n\tvar length = arguments.length;\n\tvar deep = false;\n\n\t// Handle a deep copy situation\n\tif (typeof target === 'boolean') {\n\t\tdeep = target;\n\t\ttarget = arguments[1] || {};\n\t\t// skip the boolean and the target\n\t\ti = 2;\n\t}\n\tif (target == null || (typeof target !== 'object' && typeof target !== 'function')) {\n\t\ttarget = {};\n\t}\n\n\tfor (; i < length; ++i) {\n\t\toptions = arguments[i];\n\t\t// Only deal with non-null/undefined values\n\t\tif (options != null) {\n\t\t\t// Extend the base object\n\t\t\tfor (name in options) {\n\t\t\t\tsrc = getProperty(target, name);\n\t\t\t\tcopy = getProperty(options, name);\n\n\t\t\t\t// Prevent never-ending loop\n\t\t\t\tif (target !== copy) {\n\t\t\t\t\t// Recurse if we're merging plain objects or arrays\n\t\t\t\t\tif (deep && copy && (isPlainObject(copy) || (copyIsArray = isArray(copy)))) {\n\t\t\t\t\t\tif (copyIsArray) {\n\t\t\t\t\t\t\tcopyIsArray = false;\n\t\t\t\t\t\t\tclone = src && isArray(src) ? src : [];\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tclone = src && isPlainObject(src) ? src : {};\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\t\tsetProperty(target, { name: name, newValue: extend(deep, clone, copy) });\n\n\t\t\t\t\t// Don't bring in undefined values\n\t\t\t\t\t} else if (typeof copy !== 'undefined') {\n\t\t\t\t\t\tsetProperty(target, { name: name, newValue: copy });\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Return the modified object\n\treturn target;\n};\n","export default function isPlainObject(value) {\n\tif (typeof value !== 'object' || value === null) {\n\t\treturn false;\n\t}\n\n\tconst prototype = Object.getPrototypeOf(value);\n\treturn (prototype === null || prototype === Object.prototype || Object.getPrototypeOf(prototype) === null) && !(Symbol.toStringTag in value) && !(Symbol.iterator in value);\n}\n","// To do: remove `void`s\n// To do: remove `null` from output of our APIs, allow it as user APIs.\n\n/**\n * @typedef {(error?: Error | null | undefined, ...output: Array<any>) => void} Callback\n *   Callback.\n *\n * @typedef {(...input: Array<any>) => any} Middleware\n *   Ware.\n *\n * @typedef Pipeline\n *   Pipeline.\n * @property {Run} run\n *   Run the pipeline.\n * @property {Use} use\n *   Add middleware.\n *\n * @typedef {(...input: Array<any>) => void} Run\n *   Call all middleware.\n *\n *   Calls `done` on completion with either an error or the output of the\n *   last middleware.\n *\n *   > 👉 **Note**: as the length of input defines whether async functions get a\n *   > `next` function,\n *   > it’s recommended to keep `input` at one value normally.\n\n *\n * @typedef {(fn: Middleware) => Pipeline} Use\n *   Add middleware.\n */\n\n/**\n * Create new middleware.\n *\n * @returns {Pipeline}\n *   Pipeline.\n */\nexport function trough() {\n  /** @type {Array<Middleware>} */\n  const fns = []\n  /** @type {Pipeline} */\n  const pipeline = {run, use}\n\n  return pipeline\n\n  /** @type {Run} */\n  function run(...values) {\n    let middlewareIndex = -1\n    /** @type {Callback} */\n    const callback = values.pop()\n\n    if (typeof callback !== 'function') {\n      throw new TypeError('Expected function as last argument, not ' + callback)\n    }\n\n    next(null, ...values)\n\n    /**\n     * Run the next `fn`, or we’re done.\n     *\n     * @param {Error | null | undefined} error\n     * @param {Array<any>} output\n     */\n    function next(error, ...output) {\n      const fn = fns[++middlewareIndex]\n      let index = -1\n\n      if (error) {\n        callback(error)\n        return\n      }\n\n      // Copy non-nullish input into values.\n      while (++index < values.length) {\n        if (output[index] === null || output[index] === undefined) {\n          output[index] = values[index]\n        }\n      }\n\n      // Save the newly created `output` for the next call.\n      values = output\n\n      // Next or done.\n      if (fn) {\n        wrap(fn, next)(...output)\n      } else {\n        callback(null, ...output)\n      }\n    }\n  }\n\n  /** @type {Use} */\n  function use(middelware) {\n    if (typeof middelware !== 'function') {\n      throw new TypeError(\n        'Expected `middelware` to be a function, not ' + middelware\n      )\n    }\n\n    fns.push(middelware)\n    return pipeline\n  }\n}\n\n/**\n * Wrap `middleware` into a uniform interface.\n *\n * You can pass all input to the resulting function.\n * `callback` is then called with the output of `middleware`.\n *\n * If `middleware` accepts more arguments than the later given in input,\n * an extra `done` function is passed to it after that input,\n * which must be called by `middleware`.\n *\n * The first value in `input` is the main input value.\n * All other input values are the rest input values.\n * The values given to `callback` are the input values,\n * merged with every non-nullish output value.\n *\n * * if `middleware` throws an error,\n *   returns a promise that is rejected,\n *   or calls the given `done` function with an error,\n *   `callback` is called with that error\n * * if `middleware` returns a value or returns a promise that is resolved,\n *   that value is the main output value\n * * if `middleware` calls `done`,\n *   all non-nullish values except for the first one (the error) overwrite the\n *   output values\n *\n * @param {Middleware} middleware\n *   Function to wrap.\n * @param {Callback} callback\n *   Callback called with the output of `middleware`.\n * @returns {Run}\n *   Wrapped middleware.\n */\nexport function wrap(middleware, callback) {\n  /** @type {boolean} */\n  let called\n\n  return wrapped\n\n  /**\n   * Call `middleware`.\n   * @this {any}\n   * @param {Array<any>} parameters\n   * @returns {void}\n   */\n  function wrapped(...parameters) {\n    const fnExpectsCallback = middleware.length > parameters.length\n    /** @type {any} */\n    let result\n\n    if (fnExpectsCallback) {\n      parameters.push(done)\n    }\n\n    try {\n      result = middleware.apply(this, parameters)\n    } catch (error) {\n      const exception = /** @type {Error} */ (error)\n\n      // Well, this is quite the pickle.\n      // `middleware` received a callback and called it synchronously, but that\n      // threw an error.\n      // The only thing left to do is to throw the thing instead.\n      if (fnExpectsCallback && called) {\n        throw exception\n      }\n\n      return done(exception)\n    }\n\n    if (!fnExpectsCallback) {\n      if (result && result.then && typeof result.then === 'function') {\n        result.then(then, done)\n      } else if (result instanceof Error) {\n        done(result)\n      } else {\n        then(result)\n      }\n    }\n  }\n\n  /**\n   * Call `callback`, only once.\n   *\n   * @type {Callback}\n   */\n  function done(error, ...output) {\n    if (!called) {\n      called = true\n      callback(error, ...output)\n    }\n  }\n\n  /**\n   * Call `done` with one value.\n   *\n   * @param {any} [value]\n   */\n  function then(value) {\n    done(null, value)\n  }\n}\n","/**\n * @typedef {import('unist').Node} Node\n * @typedef {import('unist').Point} Point\n * @typedef {import('unist').Position} Position\n */\n\n/**\n * @typedef {object & {type: string, position?: Position | undefined}} NodeLike\n *\n * @typedef Options\n *   Configuration.\n * @property {Array<Node> | null | undefined} [ancestors]\n *   Stack of (inclusive) ancestor nodes surrounding the message (optional).\n * @property {Error | null | undefined} [cause]\n *   Original error cause of the message (optional).\n * @property {Point | Position | null | undefined} [place]\n *   Place of message (optional).\n * @property {string | null | undefined} [ruleId]\n *   Category of message (optional, example: `'my-rule'`).\n * @property {string | null | undefined} [source]\n *   Namespace of who sent the message (optional, example: `'my-package'`).\n */\n\nimport {stringifyPosition} from 'unist-util-stringify-position'\n\n/**\n * Message.\n */\nexport class VFileMessage extends Error {\n  /**\n   * Create a message for `reason`.\n   *\n   * > 🪦 **Note**: also has obsolete signatures.\n   *\n   * @overload\n   * @param {string} reason\n   * @param {Options | null | undefined} [options]\n   * @returns\n   *\n   * @overload\n   * @param {string} reason\n   * @param {Node | NodeLike | null | undefined} parent\n   * @param {string | null | undefined} [origin]\n   * @returns\n   *\n   * @overload\n   * @param {string} reason\n   * @param {Point | Position | null | undefined} place\n   * @param {string | null | undefined} [origin]\n   * @returns\n   *\n   * @overload\n   * @param {string} reason\n   * @param {string | null | undefined} [origin]\n   * @returns\n   *\n   * @overload\n   * @param {Error | VFileMessage} cause\n   * @param {Node | NodeLike | null | undefined} parent\n   * @param {string | null | undefined} [origin]\n   * @returns\n   *\n   * @overload\n   * @param {Error | VFileMessage} cause\n   * @param {Point | Position | null | undefined} place\n   * @param {string | null | undefined} [origin]\n   * @returns\n   *\n   * @overload\n   * @param {Error | VFileMessage} cause\n   * @param {string | null | undefined} [origin]\n   * @returns\n   *\n   * @param {Error | VFileMessage | string} causeOrReason\n   *   Reason for message, should use markdown.\n   * @param {Node | NodeLike | Options | Point | Position | string | null | undefined} [optionsOrParentOrPlace]\n   *   Configuration (optional).\n   * @param {string | null | undefined} [origin]\n   *   Place in code where the message originates (example:\n   *   `'my-package:my-rule'` or `'my-rule'`).\n   * @returns\n   *   Instance of `VFileMessage`.\n   */\n  // eslint-disable-next-line complexity\n  constructor(causeOrReason, optionsOrParentOrPlace, origin) {\n    super()\n\n    if (typeof optionsOrParentOrPlace === 'string') {\n      origin = optionsOrParentOrPlace\n      optionsOrParentOrPlace = undefined\n    }\n\n    /** @type {string} */\n    let reason = ''\n    /** @type {Options} */\n    let options = {}\n    let legacyCause = false\n\n    if (optionsOrParentOrPlace) {\n      // Point.\n      if (\n        'line' in optionsOrParentOrPlace &&\n        'column' in optionsOrParentOrPlace\n      ) {\n        options = {place: optionsOrParentOrPlace}\n      }\n      // Position.\n      else if (\n        'start' in optionsOrParentOrPlace &&\n        'end' in optionsOrParentOrPlace\n      ) {\n        options = {place: optionsOrParentOrPlace}\n      }\n      // Node.\n      else if ('type' in optionsOrParentOrPlace) {\n        options = {\n          ancestors: [optionsOrParentOrPlace],\n          place: optionsOrParentOrPlace.position\n        }\n      }\n      // Options.\n      else {\n        options = {...optionsOrParentOrPlace}\n      }\n    }\n\n    if (typeof causeOrReason === 'string') {\n      reason = causeOrReason\n    }\n    // Error.\n    else if (!options.cause && causeOrReason) {\n      legacyCause = true\n      reason = causeOrReason.message\n      options.cause = causeOrReason\n    }\n\n    if (!options.ruleId && !options.source && typeof origin === 'string') {\n      const index = origin.indexOf(':')\n\n      if (index === -1) {\n        options.ruleId = origin\n      } else {\n        options.source = origin.slice(0, index)\n        options.ruleId = origin.slice(index + 1)\n      }\n    }\n\n    if (!options.place && options.ancestors && options.ancestors) {\n      const parent = options.ancestors[options.ancestors.length - 1]\n\n      if (parent) {\n        options.place = parent.position\n      }\n    }\n\n    const start =\n      options.place && 'start' in options.place\n        ? options.place.start\n        : options.place\n\n    /* eslint-disable no-unused-expressions */\n    /**\n     * Stack of ancestor nodes surrounding the message.\n     *\n     * @type {Array<Node> | undefined}\n     */\n    this.ancestors = options.ancestors || undefined\n\n    /**\n     * Original error cause of the message.\n     *\n     * @type {Error | undefined}\n     */\n    this.cause = options.cause || undefined\n\n    /**\n     * Starting column of message.\n     *\n     * @type {number | undefined}\n     */\n    this.column = start ? start.column : undefined\n\n    /**\n     * State of problem.\n     *\n     * * `true` — error, file not usable\n     * * `false` — warning, change may be needed\n     * * `undefined` — change likely not needed\n     *\n     * @type {boolean | null | undefined}\n     */\n    this.fatal = undefined\n\n    /**\n     * Path of a file (used throughout the `VFile` ecosystem).\n     *\n     * @type {string | undefined}\n     */\n    this.file\n\n    // Field from `Error`.\n    /**\n     * Reason for message.\n     *\n     * @type {string}\n     */\n    this.message = reason\n\n    /**\n     * Starting line of error.\n     *\n     * @type {number | undefined}\n     */\n    this.line = start ? start.line : undefined\n\n    // Field from `Error`.\n    /**\n     * Serialized positional info of message.\n     *\n     * On normal errors, this would be something like `ParseError`, buit in\n     * `VFile` messages we use this space to show where an error happened.\n     */\n    this.name = stringifyPosition(options.place) || '1:1'\n\n    /**\n     * Place of message.\n     *\n     * @type {Point | Position | undefined}\n     */\n    this.place = options.place || undefined\n\n    /**\n     * Reason for message, should use markdown.\n     *\n     * @type {string}\n     */\n    this.reason = this.message\n\n    /**\n     * Category of message (example: `'my-rule'`).\n     *\n     * @type {string | undefined}\n     */\n    this.ruleId = options.ruleId || undefined\n\n    /**\n     * Namespace of message (example: `'my-package'`).\n     *\n     * @type {string | undefined}\n     */\n    this.source = options.source || undefined\n\n    // Field from `Error`.\n    /**\n     * Stack of message.\n     *\n     * This is used by normal errors to show where something happened in\n     * programming code, irrelevant for `VFile` messages,\n     *\n     * @type {string}\n     */\n    this.stack =\n      legacyCause && options.cause && typeof options.cause.stack === 'string'\n        ? options.cause.stack\n        : ''\n\n    // The following fields are “well known”.\n    // Not standard.\n    // Feel free to add other non-standard fields to your messages.\n\n    /**\n     * Specify the source value that’s being reported, which is deemed\n     * incorrect.\n     *\n     * @type {string | undefined}\n     */\n    this.actual\n\n    /**\n     * Suggest acceptable values that can be used instead of `actual`.\n     *\n     * @type {Array<string> | undefined}\n     */\n    this.expected\n\n    /**\n     * Long form description of the message (you should use markdown).\n     *\n     * @type {string | undefined}\n     */\n    this.note\n\n    /**\n     * Link to docs for the message.\n     *\n     * > 👉 **Note**: this must be an absolute URL that can be passed as `x`\n     * > to `new URL(x)`.\n     *\n     * @type {string | undefined}\n     */\n    this.url\n    /* eslint-enable no-unused-expressions */\n  }\n}\n\nVFileMessage.prototype.file = ''\nVFileMessage.prototype.name = ''\nVFileMessage.prototype.reason = ''\nVFileMessage.prototype.message = ''\nVFileMessage.prototype.stack = ''\nVFileMessage.prototype.column = undefined\nVFileMessage.prototype.line = undefined\nVFileMessage.prototype.ancestors = undefined\nVFileMessage.prototype.cause = undefined\nVFileMessage.prototype.fatal = undefined\nVFileMessage.prototype.place = undefined\nVFileMessage.prototype.ruleId = undefined\nVFileMessage.prototype.source = undefined\n","// A derivative work based on:\n// <https://github.com/browserify/path-browserify>.\n// Which is licensed:\n//\n// MIT License\n//\n// Copyright (c) 2013 James Halliday\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy of\n// this software and associated documentation files (the \"Software\"), to deal in\n// the Software without restriction, including without limitation the rights to\n// use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\n// the Software, and to permit persons to whom the Software is furnished to do so,\n// subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in all\n// copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\n// FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\n// COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\n// IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\n// CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n// A derivative work based on:\n//\n// Parts of that are extracted from Node’s internal `path` module:\n// <https://github.com/nodejs/node/blob/master/lib/path.js>.\n// Which is licensed:\n//\n// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nexport const minpath = {basename, dirname, extname, join, sep: '/'}\n\n/* eslint-disable max-depth, complexity */\n\n/**\n * Get the basename from a path.\n *\n * @param {string} path\n *   File path.\n * @param {string | null | undefined} [extname]\n *   Extension to strip.\n * @returns {string}\n *   Stem or basename.\n */\nfunction basename(path, extname) {\n  if (extname !== undefined && typeof extname !== 'string') {\n    throw new TypeError('\"ext\" argument must be a string')\n  }\n\n  assertPath(path)\n  let start = 0\n  let end = -1\n  let index = path.length\n  /** @type {boolean | undefined} */\n  let seenNonSlash\n\n  if (\n    extname === undefined ||\n    extname.length === 0 ||\n    extname.length > path.length\n  ) {\n    while (index--) {\n      if (path.codePointAt(index) === 47 /* `/` */) {\n        // If we reached a path separator that was not part of a set of path\n        // separators at the end of the string, stop now.\n        if (seenNonSlash) {\n          start = index + 1\n          break\n        }\n      } else if (end < 0) {\n        // We saw the first non-path separator, mark this as the end of our\n        // path component.\n        seenNonSlash = true\n        end = index + 1\n      }\n    }\n\n    return end < 0 ? '' : path.slice(start, end)\n  }\n\n  if (extname === path) {\n    return ''\n  }\n\n  let firstNonSlashEnd = -1\n  let extnameIndex = extname.length - 1\n\n  while (index--) {\n    if (path.codePointAt(index) === 47 /* `/` */) {\n      // If we reached a path separator that was not part of a set of path\n      // separators at the end of the string, stop now.\n      if (seenNonSlash) {\n        start = index + 1\n        break\n      }\n    } else {\n      if (firstNonSlashEnd < 0) {\n        // We saw the first non-path separator, remember this index in case\n        // we need it if the extension ends up not matching.\n        seenNonSlash = true\n        firstNonSlashEnd = index + 1\n      }\n\n      if (extnameIndex > -1) {\n        // Try to match the explicit extension.\n        if (path.codePointAt(index) === extname.codePointAt(extnameIndex--)) {\n          if (extnameIndex < 0) {\n            // We matched the extension, so mark this as the end of our path\n            // component\n            end = index\n          }\n        } else {\n          // Extension does not match, so our result is the entire path\n          // component\n          extnameIndex = -1\n          end = firstNonSlashEnd\n        }\n      }\n    }\n  }\n\n  if (start === end) {\n    end = firstNonSlashEnd\n  } else if (end < 0) {\n    end = path.length\n  }\n\n  return path.slice(start, end)\n}\n\n/**\n * Get the dirname from a path.\n *\n * @param {string} path\n *   File path.\n * @returns {string}\n *   File path.\n */\nfunction dirname(path) {\n  assertPath(path)\n\n  if (path.length === 0) {\n    return '.'\n  }\n\n  let end = -1\n  let index = path.length\n  /** @type {boolean | undefined} */\n  let unmatchedSlash\n\n  // Prefix `--` is important to not run on `0`.\n  while (--index) {\n    if (path.codePointAt(index) === 47 /* `/` */) {\n      if (unmatchedSlash) {\n        end = index\n        break\n      }\n    } else if (!unmatchedSlash) {\n      // We saw the first non-path separator\n      unmatchedSlash = true\n    }\n  }\n\n  return end < 0\n    ? path.codePointAt(0) === 47 /* `/` */\n      ? '/'\n      : '.'\n    : end === 1 && path.codePointAt(0) === 47 /* `/` */\n      ? '//'\n      : path.slice(0, end)\n}\n\n/**\n * Get an extname from a path.\n *\n * @param {string} path\n *   File path.\n * @returns {string}\n *   Extname.\n */\nfunction extname(path) {\n  assertPath(path)\n\n  let index = path.length\n\n  let end = -1\n  let startPart = 0\n  let startDot = -1\n  // Track the state of characters (if any) we see before our first dot and\n  // after any path separator we find.\n  let preDotState = 0\n  /** @type {boolean | undefined} */\n  let unmatchedSlash\n\n  while (index--) {\n    const code = path.codePointAt(index)\n\n    if (code === 47 /* `/` */) {\n      // If we reached a path separator that was not part of a set of path\n      // separators at the end of the string, stop now.\n      if (unmatchedSlash) {\n        startPart = index + 1\n        break\n      }\n\n      continue\n    }\n\n    if (end < 0) {\n      // We saw the first non-path separator, mark this as the end of our\n      // extension.\n      unmatchedSlash = true\n      end = index + 1\n    }\n\n    if (code === 46 /* `.` */) {\n      // If this is our first dot, mark it as the start of our extension.\n      if (startDot < 0) {\n        startDot = index\n      } else if (preDotState !== 1) {\n        preDotState = 1\n      }\n    } else if (startDot > -1) {\n      // We saw a non-dot and non-path separator before our dot, so we should\n      // have a good chance at having a non-empty extension.\n      preDotState = -1\n    }\n  }\n\n  if (\n    startDot < 0 ||\n    end < 0 ||\n    // We saw a non-dot character immediately before the dot.\n    preDotState === 0 ||\n    // The (right-most) trimmed path component is exactly `..`.\n    (preDotState === 1 && startDot === end - 1 && startDot === startPart + 1)\n  ) {\n    return ''\n  }\n\n  return path.slice(startDot, end)\n}\n\n/**\n * Join segments from a path.\n *\n * @param {Array<string>} segments\n *   Path segments.\n * @returns {string}\n *   File path.\n */\nfunction join(...segments) {\n  let index = -1\n  /** @type {string | undefined} */\n  let joined\n\n  while (++index < segments.length) {\n    assertPath(segments[index])\n\n    if (segments[index]) {\n      joined =\n        joined === undefined ? segments[index] : joined + '/' + segments[index]\n    }\n  }\n\n  return joined === undefined ? '.' : normalize(joined)\n}\n\n/**\n * Normalize a basic file path.\n *\n * @param {string} path\n *   File path.\n * @returns {string}\n *   File path.\n */\n// Note: `normalize` is not exposed as `path.normalize`, so some code is\n// manually removed from it.\nfunction normalize(path) {\n  assertPath(path)\n\n  const absolute = path.codePointAt(0) === 47 /* `/` */\n\n  // Normalize the path according to POSIX rules.\n  let value = normalizeString(path, !absolute)\n\n  if (value.length === 0 && !absolute) {\n    value = '.'\n  }\n\n  if (value.length > 0 && path.codePointAt(path.length - 1) === 47 /* / */) {\n    value += '/'\n  }\n\n  return absolute ? '/' + value : value\n}\n\n/**\n * Resolve `.` and `..` elements in a path with directory names.\n *\n * @param {string} path\n *   File path.\n * @param {boolean} allowAboveRoot\n *   Whether `..` can move above root.\n * @returns {string}\n *   File path.\n */\nfunction normalizeString(path, allowAboveRoot) {\n  let result = ''\n  let lastSegmentLength = 0\n  let lastSlash = -1\n  let dots = 0\n  let index = -1\n  /** @type {number | undefined} */\n  let code\n  /** @type {number} */\n  let lastSlashIndex\n\n  while (++index <= path.length) {\n    if (index < path.length) {\n      code = path.codePointAt(index)\n    } else if (code === 47 /* `/` */) {\n      break\n    } else {\n      code = 47 /* `/` */\n    }\n\n    if (code === 47 /* `/` */) {\n      if (lastSlash === index - 1 || dots === 1) {\n        // Empty.\n      } else if (lastSlash !== index - 1 && dots === 2) {\n        if (\n          result.length < 2 ||\n          lastSegmentLength !== 2 ||\n          result.codePointAt(result.length - 1) !== 46 /* `.` */ ||\n          result.codePointAt(result.length - 2) !== 46 /* `.` */\n        ) {\n          if (result.length > 2) {\n            lastSlashIndex = result.lastIndexOf('/')\n\n            if (lastSlashIndex !== result.length - 1) {\n              if (lastSlashIndex < 0) {\n                result = ''\n                lastSegmentLength = 0\n              } else {\n                result = result.slice(0, lastSlashIndex)\n                lastSegmentLength = result.length - 1 - result.lastIndexOf('/')\n              }\n\n              lastSlash = index\n              dots = 0\n              continue\n            }\n          } else if (result.length > 0) {\n            result = ''\n            lastSegmentLength = 0\n            lastSlash = index\n            dots = 0\n            continue\n          }\n        }\n\n        if (allowAboveRoot) {\n          result = result.length > 0 ? result + '/..' : '..'\n          lastSegmentLength = 2\n        }\n      } else {\n        if (result.length > 0) {\n          result += '/' + path.slice(lastSlash + 1, index)\n        } else {\n          result = path.slice(lastSlash + 1, index)\n        }\n\n        lastSegmentLength = index - lastSlash - 1\n      }\n\n      lastSlash = index\n      dots = 0\n    } else if (code === 46 /* `.` */ && dots > -1) {\n      dots++\n    } else {\n      dots = -1\n    }\n  }\n\n  return result\n}\n\n/**\n * Make sure `path` is a string.\n *\n * @param {string} path\n *   File path.\n * @returns {asserts path is string}\n *   Nothing.\n */\nfunction assertPath(path) {\n  if (typeof path !== 'string') {\n    throw new TypeError(\n      'Path must be a string. Received ' + JSON.stringify(path)\n    )\n  }\n}\n\n/* eslint-enable max-depth, complexity */\n","// Somewhat based on:\n// <https://github.com/defunctzombie/node-process/blob/master/browser.js>.\n// But I don’t think one tiny line of code can be copyrighted. 😅\nexport const minproc = {cwd}\n\nfunction cwd() {\n  return '/'\n}\n","/**\n * Checks if a value has the shape of a WHATWG URL object.\n *\n * Using a symbol or instanceof would not be able to recognize URL objects\n * coming from other implementations (e.g. in Electron), so instead we are\n * checking some well known properties for a lack of a better test.\n *\n * We use `href` and `protocol` as they are the only properties that are\n * easy to retrieve and calculate due to the lazy nature of the getters.\n *\n * We check for auth attribute to distinguish legacy url instance with\n * WHATWG URL instance.\n *\n * @param {unknown} fileUrlOrPath\n *   File path or URL.\n * @returns {fileUrlOrPath is URL}\n *   Whether it’s a URL.\n */\n// From: <https://github.com/nodejs/node/blob/6a3403c/lib/internal/url.js#L720>\nexport function isUrl(fileUrlOrPath) {\n  return Boolean(\n    fileUrlOrPath !== null &&\n      typeof fileUrlOrPath === 'object' &&\n      'href' in fileUrlOrPath &&\n      fileUrlOrPath.href &&\n      'protocol' in fileUrlOrPath &&\n      fileUrlOrPath.protocol &&\n      // @ts-expect-error: indexing is fine.\n      fileUrlOrPath.auth === undefined\n  )\n}\n","import {isUrl} from './minurl.shared.js'\n\nexport {isUrl} from './minurl.shared.js'\n\n// See: <https://github.com/nodejs/node/blob/6a3403c/lib/internal/url.js>\n\n/**\n * @param {URL | string} path\n *   File URL.\n * @returns {string}\n *   File URL.\n */\nexport function urlToPath(path) {\n  if (typeof path === 'string') {\n    path = new URL(path)\n  } else if (!isUrl(path)) {\n    /** @type {NodeJS.ErrnoException} */\n    const error = new TypeError(\n      'The \"path\" argument must be of type string or an instance of URL. Received `' +\n        path +\n        '`'\n    )\n    error.code = 'ERR_INVALID_ARG_TYPE'\n    throw error\n  }\n\n  if (path.protocol !== 'file:') {\n    /** @type {NodeJS.ErrnoException} */\n    const error = new TypeError('The URL must be of scheme file')\n    error.code = 'ERR_INVALID_URL_SCHEME'\n    throw error\n  }\n\n  return getPathFromURLPosix(path)\n}\n\n/**\n * Get a path from a POSIX URL.\n *\n * @param {URL} url\n *   URL.\n * @returns {string}\n *   File path.\n */\nfunction getPathFromURLPosix(url) {\n  if (url.hostname !== '') {\n    /** @type {NodeJS.ErrnoException} */\n    const error = new TypeError(\n      'File URL host must be \"localhost\" or empty on darwin'\n    )\n    error.code = 'ERR_INVALID_FILE_URL_HOST'\n    throw error\n  }\n\n  const pathname = url.pathname\n  let index = -1\n\n  while (++index < pathname.length) {\n    if (\n      pathname.codePointAt(index) === 37 /* `%` */ &&\n      pathname.codePointAt(index + 1) === 50 /* `2` */\n    ) {\n      const third = pathname.codePointAt(index + 2)\n      if (third === 70 /* `F` */ || third === 102 /* `f` */) {\n        /** @type {NodeJS.ErrnoException} */\n        const error = new TypeError(\n          'File URL path must not include encoded / characters'\n        )\n        error.code = 'ERR_INVALID_FILE_URL_PATH'\n        throw error\n      }\n    }\n  }\n\n  return decodeURIComponent(pathname)\n}\n","/**\n * @import {Node, Point, Position} from 'unist'\n * @import {Options as MessageOptions} from 'vfile-message'\n * @import {Compatible, Data, Map, Options, Value} from 'vfile'\n */\n\n/**\n * @typedef {object & {type: string, position?: Position | undefined}} NodeLike\n */\n\nimport {VFileMessage} from 'vfile-message'\nimport {minpath} from '#minpath'\nimport {minproc} from '#minproc'\nimport {urlToPath, isUrl} from '#minurl'\n\n/**\n * Order of setting (least specific to most), we need this because otherwise\n * `{stem: 'a', path: '~/b.js'}` would throw, as a path is needed before a\n * stem can be set.\n */\nconst order = /** @type {const} */ ([\n  'history',\n  'path',\n  'basename',\n  'stem',\n  'extname',\n  'dirname'\n])\n\nexport class VFile {\n  /**\n   * Create a new virtual file.\n   *\n   * `options` is treated as:\n   *\n   * *   `string` or `Uint8Array` — `{value: options}`\n   * *   `URL` — `{path: options}`\n   * *   `VFile` — shallow copies its data over to the new file\n   * *   `object` — all fields are shallow copied over to the new file\n   *\n   * Path related fields are set in the following order (least specific to\n   * most specific): `history`, `path`, `basename`, `stem`, `extname`,\n   * `dirname`.\n   *\n   * You cannot set `dirname` or `extname` without setting either `history`,\n   * `path`, `basename`, or `stem` too.\n   *\n   * @param {Compatible | null | undefined} [value]\n   *   File value.\n   * @returns\n   *   New instance.\n   */\n  constructor(value) {\n    /** @type {Options | VFile} */\n    let options\n\n    if (!value) {\n      options = {}\n    } else if (isUrl(value)) {\n      options = {path: value}\n    } else if (typeof value === 'string' || isUint8Array(value)) {\n      options = {value}\n    } else {\n      options = value\n    }\n\n    /* eslint-disable no-unused-expressions */\n\n    /**\n     * Base of `path` (default: `process.cwd()` or `'/'` in browsers).\n     *\n     * @type {string}\n     */\n    // Prevent calling `cwd` (which could be expensive) if it’s not needed;\n    // the empty string will be overridden in the next block.\n    this.cwd = 'cwd' in options ? '' : minproc.cwd()\n\n    /**\n     * Place to store custom info (default: `{}`).\n     *\n     * It’s OK to store custom data directly on the file but moving it to\n     * `data` is recommended.\n     *\n     * @type {Data}\n     */\n    this.data = {}\n\n    /**\n     * List of file paths the file moved between.\n     *\n     * The first is the original path and the last is the current path.\n     *\n     * @type {Array<string>}\n     */\n    this.history = []\n\n    /**\n     * List of messages associated with the file.\n     *\n     * @type {Array<VFileMessage>}\n     */\n    this.messages = []\n\n    /**\n     * Raw value.\n     *\n     * @type {Value}\n     */\n    this.value\n\n    // The below are non-standard, they are “well-known”.\n    // As in, used in several tools.\n    /**\n     * Source map.\n     *\n     * This type is equivalent to the `RawSourceMap` type from the `source-map`\n     * module.\n     *\n     * @type {Map | null | undefined}\n     */\n    this.map\n\n    /**\n     * Custom, non-string, compiled, representation.\n     *\n     * This is used by unified to store non-string results.\n     * One example is when turning markdown into React nodes.\n     *\n     * @type {unknown}\n     */\n    this.result\n\n    /**\n     * Whether a file was saved to disk.\n     *\n     * This is used by vfile reporters.\n     *\n     * @type {boolean}\n     */\n    this.stored\n    /* eslint-enable no-unused-expressions */\n\n    // Set path related properties in the correct order.\n    let index = -1\n\n    while (++index < order.length) {\n      const field = order[index]\n\n      // Note: we specifically use `in` instead of `hasOwnProperty` to accept\n      // `vfile`s too.\n      if (\n        field in options &&\n        options[field] !== undefined &&\n        options[field] !== null\n      ) {\n        // @ts-expect-error: TS doesn’t understand basic reality.\n        this[field] = field === 'history' ? [...options[field]] : options[field]\n      }\n    }\n\n    /** @type {string} */\n    let field\n\n    // Set non-path related properties.\n    for (field in options) {\n      // @ts-expect-error: fine to set other things.\n      if (!order.includes(field)) {\n        // @ts-expect-error: fine to set other things.\n        this[field] = options[field]\n      }\n    }\n  }\n\n  /**\n   * Get the basename (including extname) (example: `'index.min.js'`).\n   *\n   * @returns {string | undefined}\n   *   Basename.\n   */\n  get basename() {\n    return typeof this.path === 'string'\n      ? minpath.basename(this.path)\n      : undefined\n  }\n\n  /**\n   * Set basename (including extname) (`'index.min.js'`).\n   *\n   * Cannot contain path separators (`'/'` on unix, macOS, and browsers, `'\\'`\n   * on windows).\n   * Cannot be nullified (use `file.path = file.dirname` instead).\n   *\n   * @param {string} basename\n   *   Basename.\n   * @returns {undefined}\n   *   Nothing.\n   */\n  set basename(basename) {\n    assertNonEmpty(basename, 'basename')\n    assertPart(basename, 'basename')\n    this.path = minpath.join(this.dirname || '', basename)\n  }\n\n  /**\n   * Get the parent path (example: `'~'`).\n   *\n   * @returns {string | undefined}\n   *   Dirname.\n   */\n  get dirname() {\n    return typeof this.path === 'string'\n      ? minpath.dirname(this.path)\n      : undefined\n  }\n\n  /**\n   * Set the parent path (example: `'~'`).\n   *\n   * Cannot be set if there’s no `path` yet.\n   *\n   * @param {string | undefined} dirname\n   *   Dirname.\n   * @returns {undefined}\n   *   Nothing.\n   */\n  set dirname(dirname) {\n    assertPath(this.basename, 'dirname')\n    this.path = minpath.join(dirname || '', this.basename)\n  }\n\n  /**\n   * Get the extname (including dot) (example: `'.js'`).\n   *\n   * @returns {string | undefined}\n   *   Extname.\n   */\n  get extname() {\n    return typeof this.path === 'string'\n      ? minpath.extname(this.path)\n      : undefined\n  }\n\n  /**\n   * Set the extname (including dot) (example: `'.js'`).\n   *\n   * Cannot contain path separators (`'/'` on unix, macOS, and browsers, `'\\'`\n   * on windows).\n   * Cannot be set if there’s no `path` yet.\n   *\n   * @param {string | undefined} extname\n   *   Extname.\n   * @returns {undefined}\n   *   Nothing.\n   */\n  set extname(extname) {\n    assertPart(extname, 'extname')\n    assertPath(this.dirname, 'extname')\n\n    if (extname) {\n      if (extname.codePointAt(0) !== 46 /* `.` */) {\n        throw new Error('`extname` must start with `.`')\n      }\n\n      if (extname.includes('.', 1)) {\n        throw new Error('`extname` cannot contain multiple dots')\n      }\n    }\n\n    this.path = minpath.join(this.dirname, this.stem + (extname || ''))\n  }\n\n  /**\n   * Get the full path (example: `'~/index.min.js'`).\n   *\n   * @returns {string}\n   *   Path.\n   */\n  get path() {\n    return this.history[this.history.length - 1]\n  }\n\n  /**\n   * Set the full path (example: `'~/index.min.js'`).\n   *\n   * Cannot be nullified.\n   * You can set a file URL (a `URL` object with a `file:` protocol) which will\n   * be turned into a path with `url.fileURLToPath`.\n   *\n   * @param {URL | string} path\n   *   Path.\n   * @returns {undefined}\n   *   Nothing.\n   */\n  set path(path) {\n    if (isUrl(path)) {\n      path = urlToPath(path)\n    }\n\n    assertNonEmpty(path, 'path')\n\n    if (this.path !== path) {\n      this.history.push(path)\n    }\n  }\n\n  /**\n   * Get the stem (basename w/o extname) (example: `'index.min'`).\n   *\n   * @returns {string | undefined}\n   *   Stem.\n   */\n  get stem() {\n    return typeof this.path === 'string'\n      ? minpath.basename(this.path, this.extname)\n      : undefined\n  }\n\n  /**\n   * Set the stem (basename w/o extname) (example: `'index.min'`).\n   *\n   * Cannot contain path separators (`'/'` on unix, macOS, and browsers, `'\\'`\n   * on windows).\n   * Cannot be nullified (use `file.path = file.dirname` instead).\n   *\n   * @param {string} stem\n   *   Stem.\n   * @returns {undefined}\n   *   Nothing.\n   */\n  set stem(stem) {\n    assertNonEmpty(stem, 'stem')\n    assertPart(stem, 'stem')\n    this.path = minpath.join(this.dirname || '', stem + (this.extname || ''))\n  }\n\n  // Normal prototypal methods.\n  /**\n   * Create a fatal message for `reason` associated with the file.\n   *\n   * The `fatal` field of the message is set to `true` (error; file not usable)\n   * and the `file` field is set to the current file path.\n   * The message is added to the `messages` field on `file`.\n   *\n   * > 🪦 **Note**: also has obsolete signatures.\n   *\n   * @overload\n   * @param {string} reason\n   * @param {MessageOptions | null | undefined} [options]\n   * @returns {never}\n   *\n   * @overload\n   * @param {string} reason\n   * @param {Node | NodeLike | null | undefined} parent\n   * @param {string | null | undefined} [origin]\n   * @returns {never}\n   *\n   * @overload\n   * @param {string} reason\n   * @param {Point | Position | null | undefined} place\n   * @param {string | null | undefined} [origin]\n   * @returns {never}\n   *\n   * @overload\n   * @param {string} reason\n   * @param {string | null | undefined} [origin]\n   * @returns {never}\n   *\n   * @overload\n   * @param {Error | VFileMessage} cause\n   * @param {Node | NodeLike | null | undefined} parent\n   * @param {string | null | undefined} [origin]\n   * @returns {never}\n   *\n   * @overload\n   * @param {Error | VFileMessage} cause\n   * @param {Point | Position | null | undefined} place\n   * @param {string | null | undefined} [origin]\n   * @returns {never}\n   *\n   * @overload\n   * @param {Error | VFileMessage} cause\n   * @param {string | null | undefined} [origin]\n   * @returns {never}\n   *\n   * @param {Error | VFileMessage | string} causeOrReason\n   *   Reason for message, should use markdown.\n   * @param {Node | NodeLike | MessageOptions | Point | Position | string | null | undefined} [optionsOrParentOrPlace]\n   *   Configuration (optional).\n   * @param {string | null | undefined} [origin]\n   *   Place in code where the message originates (example:\n   *   `'my-package:my-rule'` or `'my-rule'`).\n   * @returns {never}\n   *   Never.\n   * @throws {VFileMessage}\n   *   Message.\n   */\n  fail(causeOrReason, optionsOrParentOrPlace, origin) {\n    // @ts-expect-error: the overloads are fine.\n    const message = this.message(causeOrReason, optionsOrParentOrPlace, origin)\n\n    message.fatal = true\n\n    throw message\n  }\n\n  /**\n   * Create an info message for `reason` associated with the file.\n   *\n   * The `fatal` field of the message is set to `undefined` (info; change\n   * likely not needed) and the `file` field is set to the current file path.\n   * The message is added to the `messages` field on `file`.\n   *\n   * > 🪦 **Note**: also has obsolete signatures.\n   *\n   * @overload\n   * @param {string} reason\n   * @param {MessageOptions | null | undefined} [options]\n   * @returns {VFileMessage}\n   *\n   * @overload\n   * @param {string} reason\n   * @param {Node | NodeLike | null | undefined} parent\n   * @param {string | null | undefined} [origin]\n   * @returns {VFileMessage}\n   *\n   * @overload\n   * @param {string} reason\n   * @param {Point | Position | null | undefined} place\n   * @param {string | null | undefined} [origin]\n   * @returns {VFileMessage}\n   *\n   * @overload\n   * @param {string} reason\n   * @param {string | null | undefined} [origin]\n   * @returns {VFileMessage}\n   *\n   * @overload\n   * @param {Error | VFileMessage} cause\n   * @param {Node | NodeLike | null | undefined} parent\n   * @param {string | null | undefined} [origin]\n   * @returns {VFileMessage}\n   *\n   * @overload\n   * @param {Error | VFileMessage} cause\n   * @param {Point | Position | null | undefined} place\n   * @param {string | null | undefined} [origin]\n   * @returns {VFileMessage}\n   *\n   * @overload\n   * @param {Error | VFileMessage} cause\n   * @param {string | null | undefined} [origin]\n   * @returns {VFileMessage}\n   *\n   * @param {Error | VFileMessage | string} causeOrReason\n   *   Reason for message, should use markdown.\n   * @param {Node | NodeLike | MessageOptions | Point | Position | string | null | undefined} [optionsOrParentOrPlace]\n   *   Configuration (optional).\n   * @param {string | null | undefined} [origin]\n   *   Place in code where the message originates (example:\n   *   `'my-package:my-rule'` or `'my-rule'`).\n   * @returns {VFileMessage}\n   *   Message.\n   */\n  info(causeOrReason, optionsOrParentOrPlace, origin) {\n    // @ts-expect-error: the overloads are fine.\n    const message = this.message(causeOrReason, optionsOrParentOrPlace, origin)\n\n    message.fatal = undefined\n\n    return message\n  }\n\n  /**\n   * Create a message for `reason` associated with the file.\n   *\n   * The `fatal` field of the message is set to `false` (warning; change may be\n   * needed) and the `file` field is set to the current file path.\n   * The message is added to the `messages` field on `file`.\n   *\n   * > 🪦 **Note**: also has obsolete signatures.\n   *\n   * @overload\n   * @param {string} reason\n   * @param {MessageOptions | null | undefined} [options]\n   * @returns {VFileMessage}\n   *\n   * @overload\n   * @param {string} reason\n   * @param {Node | NodeLike | null | undefined} parent\n   * @param {string | null | undefined} [origin]\n   * @returns {VFileMessage}\n   *\n   * @overload\n   * @param {string} reason\n   * @param {Point | Position | null | undefined} place\n   * @param {string | null | undefined} [origin]\n   * @returns {VFileMessage}\n   *\n   * @overload\n   * @param {string} reason\n   * @param {string | null | undefined} [origin]\n   * @returns {VFileMessage}\n   *\n   * @overload\n   * @param {Error | VFileMessage} cause\n   * @param {Node | NodeLike | null | undefined} parent\n   * @param {string | null | undefined} [origin]\n   * @returns {VFileMessage}\n   *\n   * @overload\n   * @param {Error | VFileMessage} cause\n   * @param {Point | Position | null | undefined} place\n   * @param {string | null | undefined} [origin]\n   * @returns {VFileMessage}\n   *\n   * @overload\n   * @param {Error | VFileMessage} cause\n   * @param {string | null | undefined} [origin]\n   * @returns {VFileMessage}\n   *\n   * @param {Error | VFileMessage | string} causeOrReason\n   *   Reason for message, should use markdown.\n   * @param {Node | NodeLike | MessageOptions | Point | Position | string | null | undefined} [optionsOrParentOrPlace]\n   *   Configuration (optional).\n   * @param {string | null | undefined} [origin]\n   *   Place in code where the message originates (example:\n   *   `'my-package:my-rule'` or `'my-rule'`).\n   * @returns {VFileMessage}\n   *   Message.\n   */\n  message(causeOrReason, optionsOrParentOrPlace, origin) {\n    const message = new VFileMessage(\n      // @ts-expect-error: the overloads are fine.\n      causeOrReason,\n      optionsOrParentOrPlace,\n      origin\n    )\n\n    if (this.path) {\n      message.name = this.path + ':' + message.name\n      message.file = this.path\n    }\n\n    message.fatal = false\n\n    this.messages.push(message)\n\n    return message\n  }\n\n  /**\n   * Serialize the file.\n   *\n   * > **Note**: which encodings are supported depends on the engine.\n   * > For info on Node.js, see:\n   * > <https://nodejs.org/api/util.html#whatwg-supported-encodings>.\n   *\n   * @param {string | null | undefined} [encoding='utf8']\n   *   Character encoding to understand `value` as when it’s a `Uint8Array`\n   *   (default: `'utf-8'`).\n   * @returns {string}\n   *   Serialized file.\n   */\n  toString(encoding) {\n    if (this.value === undefined) {\n      return ''\n    }\n\n    if (typeof this.value === 'string') {\n      return this.value\n    }\n\n    const decoder = new TextDecoder(encoding || undefined)\n    return decoder.decode(this.value)\n  }\n}\n\n/**\n * Assert that `part` is not a path (as in, does not contain `path.sep`).\n *\n * @param {string | null | undefined} part\n *   File path part.\n * @param {string} name\n *   Part name.\n * @returns {undefined}\n *   Nothing.\n */\nfunction assertPart(part, name) {\n  if (part && part.includes(minpath.sep)) {\n    throw new Error(\n      '`' + name + '` cannot be a path: did not expect `' + minpath.sep + '`'\n    )\n  }\n}\n\n/**\n * Assert that `part` is not empty.\n *\n * @param {string | undefined} part\n *   Thing.\n * @param {string} name\n *   Part name.\n * @returns {asserts part is string}\n *   Nothing.\n */\nfunction assertNonEmpty(part, name) {\n  if (!part) {\n    throw new Error('`' + name + '` cannot be empty')\n  }\n}\n\n/**\n * Assert `path` exists.\n *\n * @param {string | undefined} path\n *   Path.\n * @param {string} name\n *   Dependency name.\n * @returns {asserts path is string}\n *   Nothing.\n */\nfunction assertPath(path, name) {\n  if (!path) {\n    throw new Error('Setting `' + name + '` requires `path` to be set too')\n  }\n}\n\n/**\n * Assert `value` is an `Uint8Array`.\n *\n * @param {unknown} value\n *   thing.\n * @returns {value is Uint8Array}\n *   Whether `value` is an `Uint8Array`.\n */\nfunction isUint8Array(value) {\n  return Boolean(\n    value &&\n      typeof value === 'object' &&\n      'byteLength' in value &&\n      'byteOffset' in value\n  )\n}\n","export const CallableInstance =\n  /**\n   * @type {new <Parameters extends Array<unknown>, Result>(property: string | symbol) => (...parameters: Parameters) => Result}\n   */\n  (\n    /** @type {unknown} */\n    (\n      /**\n       * @this {Function}\n       * @param {string | symbol} property\n       * @returns {(...parameters: Array<unknown>) => unknown}\n       */\n      function (property) {\n        const self = this\n        const constr = self.constructor\n        const proto = /** @type {Record<string | symbol, Function>} */ (\n          // Prototypes do exist.\n          // type-coverage:ignore-next-line\n          constr.prototype\n        )\n        const value = proto[property]\n        /** @type {(...parameters: Array<unknown>) => unknown} */\n        const apply = function () {\n          return value.apply(apply, arguments)\n        }\n\n        Object.setPrototypeOf(apply, proto)\n\n        // Not needed for us in `unified`: we only call this on the `copy`\n        // function,\n        // and we don't need to add its fields (`length`, `name`)\n        // over.\n        // See also: GH-246.\n        // const names = Object.getOwnPropertyNames(value)\n        //\n        // for (const p of names) {\n        //   const descriptor = Object.getOwnPropertyDescriptor(value, p)\n        //   if (descriptor) Object.defineProperty(apply, p, descriptor)\n        // }\n\n        return apply\n      }\n    )\n  )\n","/**\n * @typedef {import('trough').Pipeline} Pipeline\n *\n * @typedef {import('unist').Node} Node\n *\n * @typedef {import('vfile').Compatible} Compatible\n * @typedef {import('vfile').Value} Value\n *\n * @typedef {import('../index.js').CompileResultMap} CompileResultMap\n * @typedef {import('../index.js').Data} Data\n * @typedef {import('../index.js').Settings} Settings\n */\n\n/**\n * @typedef {CompileResultMap[keyof CompileResultMap]} CompileResults\n *   Acceptable results from compilers.\n *\n *   To register custom results, add them to\n *   {@linkcode CompileResultMap}.\n */\n\n/**\n * @template {Node} [Tree=Node]\n *   The node that the compiler receives (default: `Node`).\n * @template {CompileResults} [Result=CompileResults]\n *   The thing that the compiler yields (default: `CompileResults`).\n * @callback Compiler\n *   A **compiler** handles the compiling of a syntax tree to something else\n *   (in most cases, text) (TypeScript type).\n *\n *   It is used in the stringify phase and called with a {@linkcode Node}\n *   and {@linkcode VFile} representation of the document to compile.\n *   It should return the textual representation of the given tree (typically\n *   `string`).\n *\n *   > **Note**: unified typically compiles by serializing: most compilers\n *   > return `string` (or `Uint8Array`).\n *   > Some compilers, such as the one configured with\n *   > [`rehype-react`][rehype-react], return other values (in this case, a\n *   > React tree).\n *   > If you’re using a compiler that doesn’t serialize, expect different\n *   > result values.\n *   >\n *   > To register custom results in TypeScript, add them to\n *   > {@linkcode CompileResultMap}.\n *\n *   [rehype-react]: https://github.com/rehypejs/rehype-react\n * @param {Tree} tree\n *   Tree to compile.\n * @param {VFile} file\n *   File associated with `tree`.\n * @returns {Result}\n *   New content: compiled text (`string` or `Uint8Array`, for `file.value`) or\n *   something else (for `file.result`).\n */\n\n/**\n * @template {Node} [Tree=Node]\n *   The node that the parser yields (default: `Node`)\n * @callback Parser\n *   A **parser** handles the parsing of text to a syntax tree.\n *\n *   It is used in the parse phase and is called with a `string` and\n *   {@linkcode VFile} of the document to parse.\n *   It must return the syntax tree representation of the given file\n *   ({@linkcode Node}).\n * @param {string} document\n *   Document to parse.\n * @param {VFile} file\n *   File associated with `document`.\n * @returns {Tree}\n *   Node representing the given file.\n */\n\n/**\n * @typedef {(\n *   Plugin<Array<any>, any, any> |\n *   PluginTuple<Array<any>, any, any> |\n *   Preset\n * )} Pluggable\n *   Union of the different ways to add plugins and settings.\n */\n\n/**\n * @typedef {Array<Pluggable>} PluggableList\n *   List of plugins and presets.\n */\n\n// Note: we can’t use `callback` yet as it messes up `this`:\n//  <https://github.com/microsoft/TypeScript/issues/55197>.\n/**\n * @template {Array<unknown>} [PluginParameters=[]]\n *   Arguments passed to the plugin (default: `[]`, the empty tuple).\n * @template {Node | string | undefined} [Input=Node]\n *   Value that is expected as input (default: `Node`).\n *\n *   *   If the plugin returns a {@linkcode Transformer}, this\n *       should be the node it expects.\n *   *   If the plugin sets a {@linkcode Parser}, this should be\n *       `string`.\n *   *   If the plugin sets a {@linkcode Compiler}, this should be the\n *       node it expects.\n * @template [Output=Input]\n *   Value that is yielded as output (default: `Input`).\n *\n *   *   If the plugin returns a {@linkcode Transformer}, this\n *       should be the node that that yields.\n *   *   If the plugin sets a {@linkcode Parser}, this should be the\n *       node that it yields.\n *   *   If the plugin sets a {@linkcode Compiler}, this should be\n *       result it yields.\n * @typedef {(\n *   (this: Processor, ...parameters: PluginParameters) =>\n *     Input extends string ? // Parser.\n *        Output extends Node | undefined ? undefined | void : never :\n *     Output extends CompileResults ? // Compiler.\n *        Input extends Node | undefined ? undefined | void : never :\n *     Transformer<\n *       Input extends Node ? Input : Node,\n *       Output extends Node ? Output : Node\n *     > | undefined | void\n * )} Plugin\n *   Single plugin.\n *\n *   Plugins configure the processors they are applied on in the following\n *   ways:\n *\n *   *   they change the processor, such as the parser, the compiler, or by\n *       configuring data\n *   *   they specify how to handle trees and files\n *\n *   In practice, they are functions that can receive options and configure the\n *   processor (`this`).\n *\n *   > **Note**: plugins are called when the processor is *frozen*, not when\n *   > they are applied.\n */\n\n/**\n * Tuple of a plugin and its configuration.\n *\n * The first item is a plugin, the rest are its parameters.\n *\n * @template {Array<unknown>} [TupleParameters=[]]\n *   Arguments passed to the plugin (default: `[]`, the empty tuple).\n * @template {Node | string | undefined} [Input=undefined]\n *   Value that is expected as input (optional).\n *\n *   *   If the plugin returns a {@linkcode Transformer}, this\n *       should be the node it expects.\n *   *   If the plugin sets a {@linkcode Parser}, this should be\n *       `string`.\n *   *   If the plugin sets a {@linkcode Compiler}, this should be the\n *       node it expects.\n * @template [Output=undefined] (optional).\n *   Value that is yielded as output.\n *\n *   *   If the plugin returns a {@linkcode Transformer}, this\n *       should be the node that that yields.\n *   *   If the plugin sets a {@linkcode Parser}, this should be the\n *       node that it yields.\n *   *   If the plugin sets a {@linkcode Compiler}, this should be\n *       result it yields.\n * @typedef {(\n *   [\n *     plugin: Plugin<TupleParameters, Input, Output>,\n *     ...parameters: TupleParameters\n *   ]\n * )} PluginTuple\n */\n\n/**\n * @typedef Preset\n *   Sharable configuration.\n *\n *   They can contain plugins and settings.\n * @property {PluggableList | undefined} [plugins]\n *   List of plugins and presets (optional).\n * @property {Settings | undefined} [settings]\n *   Shared settings for parsers and compilers (optional).\n */\n\n/**\n * @template {VFile} [File=VFile]\n *   The file that the callback receives (default: `VFile`).\n * @callback ProcessCallback\n *   Callback called when the process is done.\n *\n *   Called with either an error or a result.\n * @param {Error | undefined} [error]\n *   Fatal error (optional).\n * @param {File | undefined} [file]\n *   Processed file (optional).\n * @returns {undefined}\n *   Nothing.\n */\n\n/**\n * @template {Node} [Tree=Node]\n *   The tree that the callback receives (default: `Node`).\n * @callback RunCallback\n *   Callback called when transformers are done.\n *\n *   Called with either an error or results.\n * @param {Error | undefined} [error]\n *   Fatal error (optional).\n * @param {Tree | undefined} [tree]\n *   Transformed tree (optional).\n * @param {VFile | undefined} [file]\n *   File (optional).\n * @returns {undefined}\n *   Nothing.\n */\n\n/**\n * @template {Node} [Output=Node]\n *   Node type that the transformer yields (default: `Node`).\n * @callback TransformCallback\n *   Callback passed to transforms.\n *\n *   If the signature of a `transformer` accepts a third argument, the\n *   transformer may perform asynchronous operations, and must call it.\n * @param {Error | undefined} [error]\n *   Fatal error to stop the process (optional).\n * @param {Output | undefined} [tree]\n *   New, changed, tree (optional).\n * @param {VFile | undefined} [file]\n *   New, changed, file (optional).\n * @returns {undefined}\n *   Nothing.\n */\n\n/**\n * @template {Node} [Input=Node]\n *   Node type that the transformer expects (default: `Node`).\n * @template {Node} [Output=Input]\n *   Node type that the transformer yields (default: `Input`).\n * @callback Transformer\n *   Transformers handle syntax trees and files.\n *\n *   They are functions that are called each time a syntax tree and file are\n *   passed through the run phase.\n *   When an error occurs in them (either because it’s thrown, returned,\n *   rejected, or passed to `next`), the process stops.\n *\n *   The run phase is handled by [`trough`][trough], see its documentation for\n *   the exact semantics of these functions.\n *\n *   > **Note**: you should likely ignore `next`: don’t accept it.\n *   > it supports callback-style async work.\n *   > But promises are likely easier to reason about.\n *\n *   [trough]: https://github.com/wooorm/trough#function-fninput-next\n * @param {Input} tree\n *   Tree to handle.\n * @param {VFile} file\n *   File to handle.\n * @param {TransformCallback<Output>} next\n *   Callback.\n * @returns {(\n *   Promise<Output | undefined | void> |\n *   Promise<never> | // For some reason this is needed separately.\n *   Output |\n *   Error |\n *   undefined |\n *   void\n * )}\n *   If you accept `next`, nothing.\n *   Otherwise:\n *\n *   *   `Error` — fatal error to stop the process\n *   *   `Promise<undefined>` or `undefined` — the next transformer keeps using\n *       same tree\n *   *   `Promise<Node>` or `Node` — new, changed, tree\n */\n\n/**\n * @template {Node | undefined} ParseTree\n *   Output of `parse`.\n * @template {Node | undefined} HeadTree\n *   Input for `run`.\n * @template {Node | undefined} TailTree\n *   Output for `run`.\n * @template {Node | undefined} CompileTree\n *   Input of `stringify`.\n * @template {CompileResults | undefined} CompileResult\n *   Output of `stringify`.\n * @template {Node | string | undefined} Input\n *   Input of plugin.\n * @template Output\n *   Output of plugin (optional).\n * @typedef {(\n *   Input extends string\n *     ? Output extends Node | undefined\n *       ? // Parser.\n *         Processor<\n *           Output extends undefined ? ParseTree : Output,\n *           HeadTree,\n *           TailTree,\n *           CompileTree,\n *           CompileResult\n *         >\n *       : // Unknown.\n *         Processor<ParseTree, HeadTree, TailTree, CompileTree, CompileResult>\n *     : Output extends CompileResults\n *     ? Input extends Node | undefined\n *       ? // Compiler.\n *         Processor<\n *           ParseTree,\n *           HeadTree,\n *           TailTree,\n *           Input extends undefined ? CompileTree : Input,\n *           Output extends undefined ? CompileResult : Output\n *         >\n *       : // Unknown.\n *         Processor<ParseTree, HeadTree, TailTree, CompileTree, CompileResult>\n *     : Input extends Node | undefined\n *     ? Output extends Node | undefined\n *       ? // Transform.\n *         Processor<\n *           ParseTree,\n *           HeadTree extends undefined ? Input : HeadTree,\n *           Output extends undefined ? TailTree : Output,\n *           CompileTree,\n *           CompileResult\n *         >\n *       : // Unknown.\n *         Processor<ParseTree, HeadTree, TailTree, CompileTree, CompileResult>\n *     : // Unknown.\n *       Processor<ParseTree, HeadTree, TailTree, CompileTree, CompileResult>\n * )} UsePlugin\n *   Create a processor based on the input/output of a {@link Plugin plugin}.\n */\n\n/**\n * @template {CompileResults | undefined} Result\n *   Node type that the transformer yields.\n * @typedef {(\n *   Result extends Value | undefined ?\n *     VFile :\n *     VFile & {result: Result}\n *   )} VFileWithOutput\n *   Type to generate a {@linkcode VFile} corresponding to a compiler result.\n *\n *   If a result that is not acceptable on a `VFile` is used, that will\n *   be stored on the `result` field of {@linkcode VFile}.\n */\n\nimport {bail} from 'bail'\nimport extend from 'extend'\nimport {ok as assert} from 'devlop'\nimport isPlainObj from 'is-plain-obj'\nimport {trough} from 'trough'\nimport {VFile} from 'vfile'\nimport {CallableInstance} from './callable-instance.js'\n\n// To do: next major: drop `Compiler`, `Parser`: prefer lowercase.\n\n// To do: we could start yielding `never` in TS when a parser is missing and\n// `parse` is called.\n// Currently, we allow directly setting `processor.parser`, which is untyped.\n\nconst own = {}.hasOwnProperty\n\n/**\n * @template {Node | undefined} [ParseTree=undefined]\n *   Output of `parse` (optional).\n * @template {Node | undefined} [HeadTree=undefined]\n *   Input for `run` (optional).\n * @template {Node | undefined} [TailTree=undefined]\n *   Output for `run` (optional).\n * @template {Node | undefined} [CompileTree=undefined]\n *   Input of `stringify` (optional).\n * @template {CompileResults | undefined} [CompileResult=undefined]\n *   Output of `stringify` (optional).\n * @extends {CallableInstance<[], Processor<ParseTree, HeadTree, TailTree, CompileTree, CompileResult>>}\n */\nexport class Processor extends CallableInstance {\n  /**\n   * Create a processor.\n   */\n  constructor() {\n    // If `Processor()` is called (w/o new), `copy` is called instead.\n    super('copy')\n\n    /**\n     * Compiler to use (deprecated).\n     *\n     * @deprecated\n     *   Use `compiler` instead.\n     * @type {(\n     *   Compiler<\n     *     CompileTree extends undefined ? Node : CompileTree,\n     *     CompileResult extends undefined ? CompileResults : CompileResult\n     *   > |\n     *   undefined\n     * )}\n     */\n    this.Compiler = undefined\n\n    /**\n     * Parser to use (deprecated).\n     *\n     * @deprecated\n     *   Use `parser` instead.\n     * @type {(\n     *   Parser<ParseTree extends undefined ? Node : ParseTree> |\n     *   undefined\n     * )}\n     */\n    this.Parser = undefined\n\n    // Note: the following fields are considered private.\n    // However, they are needed for tests, and TSC generates an untyped\n    // `private freezeIndex` field for, which trips `type-coverage` up.\n    // Instead, we use `@deprecated` to visualize that they shouldn’t be used.\n    /**\n     * Internal list of configured plugins.\n     *\n     * @deprecated\n     *   This is a private internal property and should not be used.\n     * @type {Array<PluginTuple<Array<unknown>>>}\n     */\n    this.attachers = []\n\n    /**\n     * Compiler to use.\n     *\n     * @type {(\n     *   Compiler<\n     *     CompileTree extends undefined ? Node : CompileTree,\n     *     CompileResult extends undefined ? CompileResults : CompileResult\n     *   > |\n     *   undefined\n     * )}\n     */\n    this.compiler = undefined\n\n    /**\n     * Internal state to track where we are while freezing.\n     *\n     * @deprecated\n     *   This is a private internal property and should not be used.\n     * @type {number}\n     */\n    this.freezeIndex = -1\n\n    /**\n     * Internal state to track whether we’re frozen.\n     *\n     * @deprecated\n     *   This is a private internal property and should not be used.\n     * @type {boolean | undefined}\n     */\n    this.frozen = undefined\n\n    /**\n     * Internal state.\n     *\n     * @deprecated\n     *   This is a private internal property and should not be used.\n     * @type {Data}\n     */\n    this.namespace = {}\n\n    /**\n     * Parser to use.\n     *\n     * @type {(\n     *   Parser<ParseTree extends undefined ? Node : ParseTree> |\n     *   undefined\n     * )}\n     */\n    this.parser = undefined\n\n    /**\n     * Internal list of configured transformers.\n     *\n     * @deprecated\n     *   This is a private internal property and should not be used.\n     * @type {Pipeline}\n     */\n    this.transformers = trough()\n  }\n\n  /**\n   * Copy a processor.\n   *\n   * @deprecated\n   *   This is a private internal method and should not be used.\n   * @returns {Processor<ParseTree, HeadTree, TailTree, CompileTree, CompileResult>}\n   *   New *unfrozen* processor ({@linkcode Processor}) that is\n   *   configured to work the same as its ancestor.\n   *   When the descendant processor is configured in the future it does not\n   *   affect the ancestral processor.\n   */\n  copy() {\n    // Cast as the type parameters will be the same after attaching.\n    const destination =\n      /** @type {Processor<ParseTree, HeadTree, TailTree, CompileTree, CompileResult>} */ (\n        new Processor()\n      )\n    let index = -1\n\n    while (++index < this.attachers.length) {\n      const attacher = this.attachers[index]\n      destination.use(...attacher)\n    }\n\n    destination.data(extend(true, {}, this.namespace))\n\n    return destination\n  }\n\n  /**\n   * Configure the processor with info available to all plugins.\n   * Information is stored in an object.\n   *\n   * Typically, options can be given to a specific plugin, but sometimes it\n   * makes sense to have information shared with several plugins.\n   * For example, a list of HTML elements that are self-closing, which is\n   * needed during all phases.\n   *\n   * > **Note**: setting information cannot occur on *frozen* processors.\n   * > Call the processor first to create a new unfrozen processor.\n   *\n   * > **Note**: to register custom data in TypeScript, augment the\n   * > {@linkcode Data} interface.\n   *\n   * @example\n   *   This example show how to get and set info:\n   *\n   *   ```js\n   *   import {unified} from 'unified'\n   *\n   *   const processor = unified().data('alpha', 'bravo')\n   *\n   *   processor.data('alpha') // => 'bravo'\n   *\n   *   processor.data() // => {alpha: 'bravo'}\n   *\n   *   processor.data({charlie: 'delta'})\n   *\n   *   processor.data() // => {charlie: 'delta'}\n   *   ```\n   *\n   * @template {keyof Data} Key\n   *\n   * @overload\n   * @returns {Data}\n   *\n   * @overload\n   * @param {Data} dataset\n   * @returns {Processor<ParseTree, HeadTree, TailTree, CompileTree, CompileResult>}\n   *\n   * @overload\n   * @param {Key} key\n   * @returns {Data[Key]}\n   *\n   * @overload\n   * @param {Key} key\n   * @param {Data[Key]} value\n   * @returns {Processor<ParseTree, HeadTree, TailTree, CompileTree, CompileResult>}\n   *\n   * @param {Data | Key} [key]\n   *   Key to get or set, or entire dataset to set, or nothing to get the\n   *   entire dataset (optional).\n   * @param {Data[Key]} [value]\n   *   Value to set (optional).\n   * @returns {unknown}\n   *   The current processor when setting, the value at `key` when getting, or\n   *   the entire dataset when getting without key.\n   */\n  data(key, value) {\n    if (typeof key === 'string') {\n      // Set `key`.\n      if (arguments.length === 2) {\n        assertUnfrozen('data', this.frozen)\n        this.namespace[key] = value\n        return this\n      }\n\n      // Get `key`.\n      return (own.call(this.namespace, key) && this.namespace[key]) || undefined\n    }\n\n    // Set space.\n    if (key) {\n      assertUnfrozen('data', this.frozen)\n      this.namespace = key\n      return this\n    }\n\n    // Get space.\n    return this.namespace\n  }\n\n  /**\n   * Freeze a processor.\n   *\n   * Frozen processors are meant to be extended and not to be configured\n   * directly.\n   *\n   * When a processor is frozen it cannot be unfrozen.\n   * New processors working the same way can be created by calling the\n   * processor.\n   *\n   * It’s possible to freeze processors explicitly by calling `.freeze()`.\n   * Processors freeze automatically when `.parse()`, `.run()`, `.runSync()`,\n   * `.stringify()`, `.process()`, or `.processSync()` are called.\n   *\n   * @returns {Processor<ParseTree, HeadTree, TailTree, CompileTree, CompileResult>}\n   *   The current processor.\n   */\n  freeze() {\n    if (this.frozen) {\n      return this\n    }\n\n    // Cast so that we can type plugins easier.\n    // Plugins are supposed to be usable on different processors, not just on\n    // this exact processor.\n    const self = /** @type {Processor} */ (/** @type {unknown} */ (this))\n\n    while (++this.freezeIndex < this.attachers.length) {\n      const [attacher, ...options] = this.attachers[this.freezeIndex]\n\n      if (options[0] === false) {\n        continue\n      }\n\n      if (options[0] === true) {\n        options[0] = undefined\n      }\n\n      const transformer = attacher.call(self, ...options)\n\n      if (typeof transformer === 'function') {\n        this.transformers.use(transformer)\n      }\n    }\n\n    this.frozen = true\n    this.freezeIndex = Number.POSITIVE_INFINITY\n\n    return this\n  }\n\n  /**\n   * Parse text to a syntax tree.\n   *\n   * > **Note**: `parse` freezes the processor if not already *frozen*.\n   *\n   * > **Note**: `parse` performs the parse phase, not the run phase or other\n   * > phases.\n   *\n   * @param {Compatible | undefined} [file]\n   *   file to parse (optional); typically `string` or `VFile`; any value\n   *   accepted as `x` in `new VFile(x)`.\n   * @returns {ParseTree extends undefined ? Node : ParseTree}\n   *   Syntax tree representing `file`.\n   */\n  parse(file) {\n    this.freeze()\n    const realFile = vfile(file)\n    const parser = this.parser || this.Parser\n    assertParser('parse', parser)\n    return parser(String(realFile), realFile)\n  }\n\n  /**\n   * Process the given file as configured on the processor.\n   *\n   * > **Note**: `process` freezes the processor if not already *frozen*.\n   *\n   * > **Note**: `process` performs the parse, run, and stringify phases.\n   *\n   * @overload\n   * @param {Compatible | undefined} file\n   * @param {ProcessCallback<VFileWithOutput<CompileResult>>} done\n   * @returns {undefined}\n   *\n   * @overload\n   * @param {Compatible | undefined} [file]\n   * @returns {Promise<VFileWithOutput<CompileResult>>}\n   *\n   * @param {Compatible | undefined} [file]\n   *   File (optional); typically `string` or `VFile`]; any value accepted as\n   *   `x` in `new VFile(x)`.\n   * @param {ProcessCallback<VFileWithOutput<CompileResult>> | undefined} [done]\n   *   Callback (optional).\n   * @returns {Promise<VFile> | undefined}\n   *   Nothing if `done` is given.\n   *   Otherwise a promise, rejected with a fatal error or resolved with the\n   *   processed file.\n   *\n   *   The parsed, transformed, and compiled value is available at\n   *   `file.value` (see note).\n   *\n   *   > **Note**: unified typically compiles by serializing: most\n   *   > compilers return `string` (or `Uint8Array`).\n   *   > Some compilers, such as the one configured with\n   *   > [`rehype-react`][rehype-react], return other values (in this case, a\n   *   > React tree).\n   *   > If you’re using a compiler that doesn’t serialize, expect different\n   *   > result values.\n   *   >\n   *   > To register custom results in TypeScript, add them to\n   *   > {@linkcode CompileResultMap}.\n   *\n   *   [rehype-react]: https://github.com/rehypejs/rehype-react\n   */\n  process(file, done) {\n    const self = this\n\n    this.freeze()\n    assertParser('process', this.parser || this.Parser)\n    assertCompiler('process', this.compiler || this.Compiler)\n\n    return done ? executor(undefined, done) : new Promise(executor)\n\n    // Note: `void`s needed for TS.\n    /**\n     * @param {((file: VFileWithOutput<CompileResult>) => undefined | void) | undefined} resolve\n     * @param {(error: Error | undefined) => undefined | void} reject\n     * @returns {undefined}\n     */\n    function executor(resolve, reject) {\n      const realFile = vfile(file)\n      // Assume `ParseTree` (the result of the parser) matches `HeadTree` (the\n      // input of the first transform).\n      const parseTree =\n        /** @type {HeadTree extends undefined ? Node : HeadTree} */ (\n          /** @type {unknown} */ (self.parse(realFile))\n        )\n\n      self.run(parseTree, realFile, function (error, tree, file) {\n        if (error || !tree || !file) {\n          return realDone(error)\n        }\n\n        // Assume `TailTree` (the output of the last transform) matches\n        // `CompileTree` (the input of the compiler).\n        const compileTree =\n          /** @type {CompileTree extends undefined ? Node : CompileTree} */ (\n            /** @type {unknown} */ (tree)\n          )\n\n        const compileResult = self.stringify(compileTree, file)\n\n        if (looksLikeAValue(compileResult)) {\n          file.value = compileResult\n        } else {\n          file.result = compileResult\n        }\n\n        realDone(error, /** @type {VFileWithOutput<CompileResult>} */ (file))\n      })\n\n      /**\n       * @param {Error | undefined} error\n       * @param {VFileWithOutput<CompileResult> | undefined} [file]\n       * @returns {undefined}\n       */\n      function realDone(error, file) {\n        if (error || !file) {\n          reject(error)\n        } else if (resolve) {\n          resolve(file)\n        } else {\n          assert(done, '`done` is defined if `resolve` is not')\n          done(undefined, file)\n        }\n      }\n    }\n  }\n\n  /**\n   * Process the given file as configured on the processor.\n   *\n   * An error is thrown if asynchronous transforms are configured.\n   *\n   * > **Note**: `processSync` freezes the processor if not already *frozen*.\n   *\n   * > **Note**: `processSync` performs the parse, run, and stringify phases.\n   *\n   * @param {Compatible | undefined} [file]\n   *   File (optional); typically `string` or `VFile`; any value accepted as\n   *   `x` in `new VFile(x)`.\n   * @returns {VFileWithOutput<CompileResult>}\n   *   The processed file.\n   *\n   *   The parsed, transformed, and compiled value is available at\n   *   `file.value` (see note).\n   *\n   *   > **Note**: unified typically compiles by serializing: most\n   *   > compilers return `string` (or `Uint8Array`).\n   *   > Some compilers, such as the one configured with\n   *   > [`rehype-react`][rehype-react], return other values (in this case, a\n   *   > React tree).\n   *   > If you’re using a compiler that doesn’t serialize, expect different\n   *   > result values.\n   *   >\n   *   > To register custom results in TypeScript, add them to\n   *   > {@linkcode CompileResultMap}.\n   *\n   *   [rehype-react]: https://github.com/rehypejs/rehype-react\n   */\n  processSync(file) {\n    /** @type {boolean} */\n    let complete = false\n    /** @type {VFileWithOutput<CompileResult> | undefined} */\n    let result\n\n    this.freeze()\n    assertParser('processSync', this.parser || this.Parser)\n    assertCompiler('processSync', this.compiler || this.Compiler)\n\n    this.process(file, realDone)\n    assertDone('processSync', 'process', complete)\n    assert(result, 'we either bailed on an error or have a tree')\n\n    return result\n\n    /**\n     * @type {ProcessCallback<VFileWithOutput<CompileResult>>}\n     */\n    function realDone(error, file) {\n      complete = true\n      bail(error)\n      result = file\n    }\n  }\n\n  /**\n   * Run *transformers* on a syntax tree.\n   *\n   * > **Note**: `run` freezes the processor if not already *frozen*.\n   *\n   * > **Note**: `run` performs the run phase, not other phases.\n   *\n   * @overload\n   * @param {HeadTree extends undefined ? Node : HeadTree} tree\n   * @param {RunCallback<TailTree extends undefined ? Node : TailTree>} done\n   * @returns {undefined}\n   *\n   * @overload\n   * @param {HeadTree extends undefined ? Node : HeadTree} tree\n   * @param {Compatible | undefined} file\n   * @param {RunCallback<TailTree extends undefined ? Node : TailTree>} done\n   * @returns {undefined}\n   *\n   * @overload\n   * @param {HeadTree extends undefined ? Node : HeadTree} tree\n   * @param {Compatible | undefined} [file]\n   * @returns {Promise<TailTree extends undefined ? Node : TailTree>}\n   *\n   * @param {HeadTree extends undefined ? Node : HeadTree} tree\n   *   Tree to transform and inspect.\n   * @param {(\n   *   RunCallback<TailTree extends undefined ? Node : TailTree> |\n   *   Compatible\n   * )} [file]\n   *   File associated with `node` (optional); any value accepted as `x` in\n   *   `new VFile(x)`.\n   * @param {RunCallback<TailTree extends undefined ? Node : TailTree>} [done]\n   *   Callback (optional).\n   * @returns {Promise<TailTree extends undefined ? Node : TailTree> | undefined}\n   *   Nothing if `done` is given.\n   *   Otherwise, a promise rejected with a fatal error or resolved with the\n   *   transformed tree.\n   */\n  run(tree, file, done) {\n    assertNode(tree)\n    this.freeze()\n\n    const transformers = this.transformers\n\n    if (!done && typeof file === 'function') {\n      done = file\n      file = undefined\n    }\n\n    return done ? executor(undefined, done) : new Promise(executor)\n\n    // Note: `void`s needed for TS.\n    /**\n     * @param {(\n     *   ((tree: TailTree extends undefined ? Node : TailTree) => undefined | void) |\n     *   undefined\n     * )} resolve\n     * @param {(error: Error) => undefined | void} reject\n     * @returns {undefined}\n     */\n    function executor(resolve, reject) {\n      assert(\n        typeof file !== 'function',\n        '`file` can’t be a `done` anymore, we checked'\n      )\n      const realFile = vfile(file)\n      transformers.run(tree, realFile, realDone)\n\n      /**\n       * @param {Error | undefined} error\n       * @param {Node} outputTree\n       * @param {VFile} file\n       * @returns {undefined}\n       */\n      function realDone(error, outputTree, file) {\n        const resultingTree =\n          /** @type {TailTree extends undefined ? Node : TailTree} */ (\n            outputTree || tree\n          )\n\n        if (error) {\n          reject(error)\n        } else if (resolve) {\n          resolve(resultingTree)\n        } else {\n          assert(done, '`done` is defined if `resolve` is not')\n          done(undefined, resultingTree, file)\n        }\n      }\n    }\n  }\n\n  /**\n   * Run *transformers* on a syntax tree.\n   *\n   * An error is thrown if asynchronous transforms are configured.\n   *\n   * > **Note**: `runSync` freezes the processor if not already *frozen*.\n   *\n   * > **Note**: `runSync` performs the run phase, not other phases.\n   *\n   * @param {HeadTree extends undefined ? Node : HeadTree} tree\n   *   Tree to transform and inspect.\n   * @param {Compatible | undefined} [file]\n   *   File associated with `node` (optional); any value accepted as `x` in\n   *   `new VFile(x)`.\n   * @returns {TailTree extends undefined ? Node : TailTree}\n   *   Transformed tree.\n   */\n  runSync(tree, file) {\n    /** @type {boolean} */\n    let complete = false\n    /** @type {(TailTree extends undefined ? Node : TailTree) | undefined} */\n    let result\n\n    this.run(tree, file, realDone)\n\n    assertDone('runSync', 'run', complete)\n    assert(result, 'we either bailed on an error or have a tree')\n    return result\n\n    /**\n     * @type {RunCallback<TailTree extends undefined ? Node : TailTree>}\n     */\n    function realDone(error, tree) {\n      bail(error)\n      result = tree\n      complete = true\n    }\n  }\n\n  /**\n   * Compile a syntax tree.\n   *\n   * > **Note**: `stringify` freezes the processor if not already *frozen*.\n   *\n   * > **Note**: `stringify` performs the stringify phase, not the run phase\n   * > or other phases.\n   *\n   * @param {CompileTree extends undefined ? Node : CompileTree} tree\n   *   Tree to compile.\n   * @param {Compatible | undefined} [file]\n   *   File associated with `node` (optional); any value accepted as `x` in\n   *   `new VFile(x)`.\n   * @returns {CompileResult extends undefined ? Value : CompileResult}\n   *   Textual representation of the tree (see note).\n   *\n   *   > **Note**: unified typically compiles by serializing: most compilers\n   *   > return `string` (or `Uint8Array`).\n   *   > Some compilers, such as the one configured with\n   *   > [`rehype-react`][rehype-react], return other values (in this case, a\n   *   > React tree).\n   *   > If you’re using a compiler that doesn’t serialize, expect different\n   *   > result values.\n   *   >\n   *   > To register custom results in TypeScript, add them to\n   *   > {@linkcode CompileResultMap}.\n   *\n   *   [rehype-react]: https://github.com/rehypejs/rehype-react\n   */\n  stringify(tree, file) {\n    this.freeze()\n    const realFile = vfile(file)\n    const compiler = this.compiler || this.Compiler\n    assertCompiler('stringify', compiler)\n    assertNode(tree)\n\n    return compiler(tree, realFile)\n  }\n\n  /**\n   * Configure the processor to use a plugin, a list of usable values, or a\n   * preset.\n   *\n   * If the processor is already using a plugin, the previous plugin\n   * configuration is changed based on the options that are passed in.\n   * In other words, the plugin is not added a second time.\n   *\n   * > **Note**: `use` cannot be called on *frozen* processors.\n   * > Call the processor first to create a new unfrozen processor.\n   *\n   * @example\n   *   There are many ways to pass plugins to `.use()`.\n   *   This example gives an overview:\n   *\n   *   ```js\n   *   import {unified} from 'unified'\n   *\n   *   unified()\n   *     // Plugin with options:\n   *     .use(pluginA, {x: true, y: true})\n   *     // Passing the same plugin again merges configuration (to `{x: true, y: false, z: true}`):\n   *     .use(pluginA, {y: false, z: true})\n   *     // Plugins:\n   *     .use([pluginB, pluginC])\n   *     // Two plugins, the second with options:\n   *     .use([pluginD, [pluginE, {}]])\n   *     // Preset with plugins and settings:\n   *     .use({plugins: [pluginF, [pluginG, {}]], settings: {position: false}})\n   *     // Settings only:\n   *     .use({settings: {position: false}})\n   *   ```\n   *\n   * @template {Array<unknown>} [Parameters=[]]\n   * @template {Node | string | undefined} [Input=undefined]\n   * @template [Output=Input]\n   *\n   * @overload\n   * @param {Preset | null | undefined} [preset]\n   * @returns {Processor<ParseTree, HeadTree, TailTree, CompileTree, CompileResult>}\n   *\n   * @overload\n   * @param {PluggableList} list\n   * @returns {Processor<ParseTree, HeadTree, TailTree, CompileTree, CompileResult>}\n   *\n   * @overload\n   * @param {Plugin<Parameters, Input, Output>} plugin\n   * @param {...(Parameters | [boolean])} parameters\n   * @returns {UsePlugin<ParseTree, HeadTree, TailTree, CompileTree, CompileResult, Input, Output>}\n   *\n   * @param {PluggableList | Plugin | Preset | null | undefined} value\n   *   Usable value.\n   * @param {...unknown} parameters\n   *   Parameters, when a plugin is given as a usable value.\n   * @returns {Processor<ParseTree, HeadTree, TailTree, CompileTree, CompileResult>}\n   *   Current processor.\n   */\n  use(value, ...parameters) {\n    const attachers = this.attachers\n    const namespace = this.namespace\n\n    assertUnfrozen('use', this.frozen)\n\n    if (value === null || value === undefined) {\n      // Empty.\n    } else if (typeof value === 'function') {\n      addPlugin(value, parameters)\n    } else if (typeof value === 'object') {\n      if (Array.isArray(value)) {\n        addList(value)\n      } else {\n        addPreset(value)\n      }\n    } else {\n      throw new TypeError('Expected usable value, not `' + value + '`')\n    }\n\n    return this\n\n    /**\n     * @param {Pluggable} value\n     * @returns {undefined}\n     */\n    function add(value) {\n      if (typeof value === 'function') {\n        addPlugin(value, [])\n      } else if (typeof value === 'object') {\n        if (Array.isArray(value)) {\n          const [plugin, ...parameters] =\n            /** @type {PluginTuple<Array<unknown>>} */ (value)\n          addPlugin(plugin, parameters)\n        } else {\n          addPreset(value)\n        }\n      } else {\n        throw new TypeError('Expected usable value, not `' + value + '`')\n      }\n    }\n\n    /**\n     * @param {Preset} result\n     * @returns {undefined}\n     */\n    function addPreset(result) {\n      if (!('plugins' in result) && !('settings' in result)) {\n        throw new Error(\n          'Expected usable value but received an empty preset, which is probably a mistake: presets typically come with `plugins` and sometimes with `settings`, but this has neither'\n        )\n      }\n\n      addList(result.plugins)\n\n      if (result.settings) {\n        namespace.settings = extend(true, namespace.settings, result.settings)\n      }\n    }\n\n    /**\n     * @param {PluggableList | null | undefined} plugins\n     * @returns {undefined}\n     */\n    function addList(plugins) {\n      let index = -1\n\n      if (plugins === null || plugins === undefined) {\n        // Empty.\n      } else if (Array.isArray(plugins)) {\n        while (++index < plugins.length) {\n          const thing = plugins[index]\n          add(thing)\n        }\n      } else {\n        throw new TypeError('Expected a list of plugins, not `' + plugins + '`')\n      }\n    }\n\n    /**\n     * @param {Plugin} plugin\n     * @param {Array<unknown>} parameters\n     * @returns {undefined}\n     */\n    function addPlugin(plugin, parameters) {\n      let index = -1\n      let entryIndex = -1\n\n      while (++index < attachers.length) {\n        if (attachers[index][0] === plugin) {\n          entryIndex = index\n          break\n        }\n      }\n\n      if (entryIndex === -1) {\n        attachers.push([plugin, ...parameters])\n      }\n      // Only set if there was at least a `primary` value, otherwise we’d change\n      // `arguments.length`.\n      else if (parameters.length > 0) {\n        let [primary, ...rest] = parameters\n        const currentPrimary = attachers[entryIndex][1]\n        if (isPlainObj(currentPrimary) && isPlainObj(primary)) {\n          primary = extend(true, currentPrimary, primary)\n        }\n\n        attachers[entryIndex] = [plugin, primary, ...rest]\n      }\n    }\n  }\n}\n\n// Note: this returns a *callable* instance.\n// That’s why it’s documented as a function.\n/**\n * Create a new processor.\n *\n * @example\n *   This example shows how a new processor can be created (from `remark`) and linked\n *   to **stdin**(4) and **stdout**(4).\n *\n *   ```js\n *   import process from 'node:process'\n *   import concatStream from 'concat-stream'\n *   import {remark} from 'remark'\n *\n *   process.stdin.pipe(\n *     concatStream(function (buf) {\n *       process.stdout.write(String(remark().processSync(buf)))\n *     })\n *   )\n *   ```\n *\n * @returns\n *   New *unfrozen* processor (`processor`).\n *\n *   This processor is configured to work the same as its ancestor.\n *   When the descendant processor is configured in the future it does not\n *   affect the ancestral processor.\n */\nexport const unified = new Processor().freeze()\n\n/**\n * Assert a parser is available.\n *\n * @param {string} name\n * @param {unknown} value\n * @returns {asserts value is Parser}\n */\nfunction assertParser(name, value) {\n  if (typeof value !== 'function') {\n    throw new TypeError('Cannot `' + name + '` without `parser`')\n  }\n}\n\n/**\n * Assert a compiler is available.\n *\n * @param {string} name\n * @param {unknown} value\n * @returns {asserts value is Compiler}\n */\nfunction assertCompiler(name, value) {\n  if (typeof value !== 'function') {\n    throw new TypeError('Cannot `' + name + '` without `compiler`')\n  }\n}\n\n/**\n * Assert the processor is not frozen.\n *\n * @param {string} name\n * @param {unknown} frozen\n * @returns {asserts frozen is false}\n */\nfunction assertUnfrozen(name, frozen) {\n  if (frozen) {\n    throw new Error(\n      'Cannot call `' +\n        name +\n        '` on a frozen processor.\\nCreate a new processor first, by calling it: use `processor()` instead of `processor`.'\n    )\n  }\n}\n\n/**\n * Assert `node` is a unist node.\n *\n * @param {unknown} node\n * @returns {asserts node is Node}\n */\nfunction assertNode(node) {\n  // `isPlainObj` unfortunately uses `any` instead of `unknown`.\n  // type-coverage:ignore-next-line\n  if (!isPlainObj(node) || typeof node.type !== 'string') {\n    throw new TypeError('Expected node, got `' + node + '`')\n    // Fine.\n  }\n}\n\n/**\n * Assert that `complete` is `true`.\n *\n * @param {string} name\n * @param {string} asyncName\n * @param {unknown} complete\n * @returns {asserts complete is true}\n */\nfunction assertDone(name, asyncName, complete) {\n  if (!complete) {\n    throw new Error(\n      '`' + name + '` finished async. Use `' + asyncName + '` instead'\n    )\n  }\n}\n\n/**\n * @param {Compatible | undefined} [value]\n * @returns {VFile}\n */\nfunction vfile(value) {\n  return looksLikeAVFile(value) ? value : new VFile(value)\n}\n\n/**\n * @param {Compatible | undefined} [value]\n * @returns {value is VFile}\n */\nfunction looksLikeAVFile(value) {\n  return Boolean(\n    value &&\n      typeof value === 'object' &&\n      'message' in value &&\n      'messages' in value\n  )\n}\n\n/**\n * @param {unknown} [value]\n * @returns {value is Value}\n */\nfunction looksLikeAValue(value) {\n  return typeof value === 'string' || isUint8Array(value)\n}\n\n/**\n * Assert `value` is an `Uint8Array`.\n *\n * @param {unknown} value\n *   thing.\n * @returns {value is Uint8Array}\n *   Whether `value` is an `Uint8Array`.\n */\nfunction isUint8Array(value) {\n  return Boolean(\n    value &&\n      typeof value === 'object' &&\n      'byteLength' in value &&\n      'byteOffset' in value\n  )\n}\n","const tab = 9 /* `\\t` */\nconst space = 32 /* ` ` */\n\n/**\n * Remove initial and final spaces and tabs at the line breaks in `value`.\n * Does not trim initial and final spaces and tabs of the value itself.\n *\n * @param {string} value\n *   Value to trim.\n * @returns {string}\n *   Trimmed value.\n */\nexport function trimLines(value) {\n  const source = String(value)\n  const search = /\\r?\\n|\\r/g\n  let match = search.exec(source)\n  let last = 0\n  /** @type {Array<string>} */\n  const lines = []\n\n  while (match) {\n    lines.push(\n      trimLine(source.slice(last, match.index), last > 0, true),\n      match[0]\n    )\n\n    last = match.index + match[0].length\n    match = search.exec(source)\n  }\n\n  lines.push(trimLine(source.slice(last), last > 0, false))\n\n  return lines.join('')\n}\n\n/**\n * @param {string} value\n *   Line to trim.\n * @param {boolean} start\n *   Whether to trim the start of the line.\n * @param {boolean} end\n *   Whether to trim the end of the line.\n * @returns {string}\n *   Trimmed line.\n */\nfunction trimLine(value, start, end) {\n  let startIndex = 0\n  let endIndex = value.length\n\n  if (start) {\n    let code = value.codePointAt(startIndex)\n\n    while (code === tab || code === space) {\n      startIndex++\n      code = value.codePointAt(startIndex)\n    }\n  }\n\n  if (end) {\n    let code = value.codePointAt(endIndex - 1)\n\n    while (code === tab || code === space) {\n      endIndex--\n      code = value.codePointAt(endIndex - 1)\n    }\n  }\n\n  return endIndex > startIndex ? value.slice(startIndex, endIndex) : ''\n}\n","import { defineAsyncComponent } from 'vue'\nimport type { PresetConfig } from '../types'\n\nexport const PRESETS: PresetConfig = {\n  text: defineAsyncComponent(() => import('./components/Text.vue')),\n  paragraph: 'p',\n  heading: defineAsyncComponent(() => import('./components/Heading.vue')),\n  delete: 'del',\n  blockquote: 'blockquote',\n  strong: 'strong',\n  emphasis: 'em',\n  link: defineAsyncComponent(() => import('./components/Link.vue')),\n  linkReference: defineAsyncComponent(() => import('./components/LinkReference.vue')),\n  thematicBreak: 'hr',\n  list: defineAsyncComponent(() => import('./components/List.vue')),\n  listItem: defineAsyncComponent(() => import('./components/ListItem.vue')),\n  code: defineAsyncComponent(() => import('./components/Code.vue')),\n  inlineCode: defineAsyncComponent(() => import('./components/InlineCode.vue')),\n  image: defineAsyncComponent(() => import('./components/Image.vue')),\n  imageReference: defineAsyncComponent(() => import('./components/ImageReference.vue')),\n  break: 'br',\n  footnoteReference: defineAsyncComponent(() => import('./components/FootnoteReference.vue')),\n  footnoteContainer: defineAsyncComponent(() => import('./components/FootnoteContainer.vue')),\n  table: defineAsyncComponent(() => import('./components/Table.vue')),\n  tableRow: defineAsyncComponent(() => import('./components/TableRow.vue')),\n  tableCell: defineAsyncComponent(() => import('./components/TableCell.vue')),\n}\n","import type { List, ListItem, Node, Parent, RootContent, Text } from 'mdast'\nimport type { CustomDirective } from '.'\n\nexport function isParent(node: Node): node is Parent {\n  return 'children' in node\n}\n\nexport function isCustomBlock(node: Node): node is CustomDirective {\n  return (\n    node.type === 'containerDirective'\n    || node.type === 'leafDirective'\n    || node.type === 'textDirective'\n  )\n}\n\nexport function isTextNode(node: Node): node is Text {\n  return node.type === 'text'\n}\n\nexport function getNodeTextContent(node: Node | Parent): string {\n  if (isParent(node)) {\n    return node.children.map(getNodeTextContent).join('')\n  }\n  if (isTextNode(node)) {\n    return node.value\n  }\n  return ''\n}\n\nexport function getRawTextFromNode(raw: string, node: RootContent): string {\n  if (!node.position) {\n    return ''\n  }\n  return raw.slice(node.position.start.offset, node.position.end.offset)\n}\n\nexport function listItemLoose(node: ListItem) {\n  const spread = node.spread\n\n  return spread === null || spread === undefined\n    ? node.children.length > 1\n    : spread\n}\n\nexport function listLoose(node: List) {\n  let loose = false\n  if (node.type === 'list') {\n    loose = node.spread || false\n    const children = node.children\n    let index = -1\n\n    while (!loose && ++index < children.length) {\n      loose = listItemLoose(children[index])\n    }\n  }\n\n  return loose\n}\n","import type { Definition, FootnoteDefinition, List, Root, RootContent, Text } from 'mdast'\nimport remarkDirective from 'remark-directive'\nimport remarkFrontmatter from 'remark-frontmatter'\nimport remarkGfm from 'remark-gfm'\nimport remarkParse from 'remark-parse'\nimport { unified } from 'unified'\nimport {\n  computed,\n  defineComponent,\n  h,\n  provide,\n  shallowRef,\n  toValue,\n  triggerRef,\n  watch,\n} from 'vue'\nimport type {\n  Component,\n  MaybeRefOrGetter,\n  ShallowRef,\n  VNode,\n} from 'vue'\nimport { trimLines } from 'trim-lines'\nimport { normalizeUri } from 'micromark-util-sanitize-uri'\nimport type {\n  CustomDirective,\n  FootnoteDefinitionMap,\n  PresetConfig,\n} from './types'\nimport { PRESETS } from './presets'\nimport { getNodeTextContent, isCustomBlock, isParent, listItemLoose, listLoose } from './utils'\n\nconst processor = unified()\n  .use(remarkParse)\n  .use(remarkFrontmatter)\n  .use(remarkGfm)\n  .use(remarkDirective)\n  .freeze()\n\nexport interface UseVueMarkOptions {\n  customPresets?: Partial<PresetConfig>\n  globalPrefix?: string\n  dealWithTextNodes?: boolean\n  debug?: boolean\n  slugify?: (text: string) => string\n}\n\nexport interface VueMarkToc {\n  /**\n   * Heading level\n   */\n  level: 1 | 2 | 3 | 4 | 5 | 6\n  /**\n   * Heading title\n   */\n  title: string\n  /**\n   * Heading slug\n   */\n  slug: string\n}\n\nexport interface UseVueMarkReturn {\n  toc: ShallowRef<VueMarkToc[]>\n  hasFootnote: ShallowRef<boolean>\n  frontmatter: ShallowRef<string>\n  VueMarkContent: Component\n  FootnoteContent: Component\n}\n\nexport function useVueMark(\n  value: MaybeRefOrGetter<string>,\n  options?: UseVueMarkOptions,\n): UseVueMarkReturn {\n  const {\n    customPresets = {},\n    globalPrefix = 'vuemark',\n    dealWithTextNodes = true,\n    debug = false,\n    slugify,\n  }\n    = options ?? {}\n\n  function debugPrintLn(...args: any[]) {\n    if (!debug) return\n    // eslint-disable-next-line no-console\n    console.log('%c VueMark ', 'color:white;background:#65B587;padding:3px 0;margin-bottom:5px;font-weight: bold;', ...args)\n  }\n\n  const _processStartTimes = new Map<string, number>()\n  function startTimeRecord(key: string) {\n    if (!debug) return\n    _processStartTimes.set(key, performance.now())\n  }\n\n  function endTimeRecord(key: string) {\n    if (!debug) return\n    const startTime = _processStartTimes.get(key)\n    if (startTime === undefined) {\n      return\n    }\n    const endTime = performance.now()\n    const duration = endTime - startTime\n    debugPrintLn(`${key} took ${duration}ms`)\n  }\n\n  const computedValue = computed(() => toValue(value))\n  const ast = computed(() => processor.parse(computedValue.value))\n\n  const frontmatter = shallowRef('')\n  const toc: ShallowRef<VueMarkToc[]> = shallowRef([])\n  const hasFootnote = shallowRef(false)\n\n  const tocSlugCountMap: Map<string, number> = new Map()\n  const definitions: Map<string, Definition> = new Map()\n  const footnoteDefinitions: ShallowRef<FootnoteDefinitionMap> = shallowRef(new Map())\n  let footnoteDefinitionCount = 0\n\n  const setDefinition = (node: Definition) => {\n    definitions.set(node.identifier, node)\n  }\n\n  const setFootnoteDefinition = (\n    node: FootnoteDefinition,\n    render: () => VNode | string | null | (VNode | string | null)[],\n  ) => {\n    footnoteDefinitions.value.set(node.identifier, {\n      node,\n      index: ++footnoteDefinitionCount,\n      render,\n    })\n  }\n\n  const getRootComponent = (\n    node: RootContent | CustomDirective,\n    index?: number,\n    inFootnote = false,\n    context?: any,\n  ): VNode | string | null => {\n    if (node.type === 'html') {\n      node = {\n        ...node,\n        type: 'text',\n      } as Text\n    }\n    if (node.type === 'text' && !dealWithTextNodes) {\n      return node.value\n    }\n\n    let element: string | Component | null\n\n    if (isCustomBlock(node)) {\n      element = customPresets[`directive_${node.name}`]\n      || PRESETS[`directive_${node.name}`]\n\n      if (element === undefined) {\n        console.error(new Error(`No component found for directive name: ${node.name}`))\n        return null\n      }\n    } else {\n      element = customPresets[<keyof PresetConfig>node.type]\n      || PRESETS[<keyof PresetConfig>node.type]\n\n      if (element === undefined) {\n        console.error(new Error(`No component found for node type: ${node.type}`))\n        return null\n      }\n    }\n\n    if (element === null) {\n      return null\n    }\n\n    if (typeof element === 'string') {\n      if (node.type === 'heading') {\n        const children = node.children.map((child, i) => getRootComponent(child, i, inFootnote))\n        const title = getNodeTextContent(node)\n        let slug = slugify ? slugify(title) : title\n        const count = tocSlugCountMap.get(slug) ?? 0\n        tocSlugCountMap.set(slug, count + 1)\n        if (count > 0) {\n          slug += `-${count}`\n        }\n        toc.value.push({ level: node.depth, title, slug })\n        return h(element, children)\n      }\n      if (isParent(node)) {\n        return h(\n          element,\n          node.children.map((child, i) => getRootComponent(child, i, inFootnote)),\n        )\n      }\n      return h(element)\n    }\n\n    switch (node.type) {\n      case 'yaml':\n      case 'definition':\n      case 'footnoteDefinition': {\n        return null\n      }\n      case 'paragraph':\n      case 'delete':\n      case 'blockquote':\n      case 'strong':\n      case 'emphasis': {\n        const children = node.children.map((child, i) => getRootComponent(child, i, inFootnote))\n        return h(element, () => children)\n      }\n      case 'break':\n      case 'thematicBreak': {\n        return h(element)\n      }\n      case 'text': {\n        return h(element, { content: trimLines(node.value) })\n      }\n      case 'inlineCode': {\n        return h(element, { code: node.value.replace(/\\r?\\n|\\r/g, ' ') })\n      }\n      case 'code': {\n        return h(element, { code: node.value ? `${node.value}\\n` : '', lang: node.lang ?? undefined, meta: node.meta ?? undefined })\n      }\n      case 'link': {\n        const children = node.children.map((child, i) => getRootComponent(child, i, inFootnote))\n        return h(element, { href: normalizeUri(node.url || ''), title: node.title ?? undefined }, () => children)\n      }\n      case 'list': {\n        const hasTaskItem = node.children.some(child => child.type === 'listItem' && typeof child.checked === 'boolean')\n        const children = node.children.map((child, i) => getRootComponent(child, i, inFootnote, node))\n        return h(element, { ordered: node.ordered ?? undefined, start: node.start ?? undefined, spread: node.spread ?? undefined, hasTaskItem }, () =>\n          children)\n      }\n      case 'listItem': {\n        const parent = context as List\n        const loose = parent ? listLoose(parent) : listItemLoose(node)\n        const childNodes: RootContent[] = []\n        node.children.forEach((child) => {\n          if (child.type === 'paragraph' && !loose) {\n            childNodes.push(...child.children)\n          } else {\n            childNodes.push(child)\n          }\n        })\n\n        const children = childNodes.map((child, i) => getRootComponent(child, i, inFootnote))\n\n        return h(element, {\n          checked: node.checked ?? undefined,\n          spread: node.spread ?? undefined,\n        }, () => children)\n      }\n      case 'image': {\n        return h(element, { src: normalizeUri(node.url || ''), alt: node.alt ?? undefined, title: node.title ?? undefined })\n      }\n      case 'imageReference': {\n        const def = definitions.get(node.identifier)\n        if (!def) {\n          console.error(new Error(`No definition found for identifier: ${node.identifier}`))\n          return null\n        }\n        return h(element, { src: normalizeUri(def.url || ''), title: def.title ?? undefined, alt: node.alt ?? undefined })\n      }\n      case 'linkReference': {\n        const def = definitions.get(node.identifier)\n        if (!def) {\n          console.error(new Error(`No definition found for identifier: ${node.identifier}`))\n          return null\n        }\n        const children = node.children.map((child, i) => getRootComponent(child, i, inFootnote))\n        return h(element, { href: normalizeUri(def.url || ''), title: def.title ?? undefined }, () => children)\n      }\n      case 'heading': {\n        const children = node.children.map((child, i) => getRootComponent(child, i, inFootnote))\n        const title = getNodeTextContent(node)\n        if (inFootnote) {\n          // 脚注内部的标题不提供 slug，不包含在 toc 中\n          return h(element, { level: node.depth }, () => children)\n        }\n        let slug = slugify ? slugify(title) : title\n        const count = tocSlugCountMap.get(slug) ?? 0\n        tocSlugCountMap.set(slug, count + 1)\n        if (count > 0) {\n          slug += `-${count}`\n        }\n        toc.value.push({ level: node.depth, title, slug })\n        return h(element, { level: node.depth, slug }, () => children)\n      }\n      case 'table': {\n        const aligns = node.align ?? []\n        const head = getRootComponent(node.children[0], 0, inFootnote, { aligns, isHead: true })\n        const body = node.children.slice(1).map((child, i) =>\n          getRootComponent(child, i + 1, inFootnote, { aligns, isHead: false }),\n        )\n        return h(\n          element,\n          null,\n          {\n            head: () => head,\n            body: () => body,\n          },\n        )\n      }\n      case 'tableRow': {\n        if (!context) return null\n        const { aligns, isHead } = context\n\n        const children = node.children.map((child, i) => getRootComponent(child, i, inFootnote, { align: aligns[i], isHead }))\n\n        return h(\n          element,\n          () => children,\n        )\n      }\n      case 'tableCell': {\n        if (!context) return null\n        const { align, isHead } = context\n\n        const children = node.children.map((child, i) => getRootComponent(child, i, inFootnote))\n\n        return h(element, { align, isHead }, () => children)\n      }\n      case 'footnoteReference': {\n        const def = footnoteDefinitions.value.get(node.identifier)\n        if (!def) {\n          console.error(new Error(`No footnote definition found for identifier: ${node.identifier}`))\n          return null\n        }\n        return h(element, { index: def.index })\n      }\n      default: {\n        if (isParent(node)) {\n          const children = node.children\n          return h(element, { item: node, index }, () => children.map((child, i) => getRootComponent(child, i, inFootnote)))\n        }\n        return h(element, { item: node, index })\n      }\n    }\n  }\n\n  const markVNodes = shallowRef(processMarkVNodes(ast.value))\n\n  function processMarkVNodes(root: Root) {\n    debugPrintLn('Start processing with root:', root)\n    startTimeRecord('processMarkVNodes')\n\n    toc.value.length = 0\n    definitions.clear()\n    tocSlugCountMap.clear()\n    footnoteDefinitionCount = 0\n    hasFootnote.value = false\n    frontmatter.value = ''\n    footnoteDefinitions.value.clear()\n\n    const tempMarkVNodes: (VNode | string | null)[] = []\n    const deferred: [RootContent, number][] = []\n\n    startTimeRecord('processMarkVNodes:collectReferences')\n    root.children.forEach((node, index) => {\n      if (node.type === 'yaml') {\n        frontmatter.value = node.value\n        return\n      }\n\n      if (node.type === 'definition') {\n        setDefinition(node)\n        return\n      }\n\n      if (node.type === 'footnoteDefinition') {\n        hasFootnote.value = true\n\n        setFootnoteDefinition(node, () => node.children.map((child, i) => getRootComponent(child, i, true)))\n        return\n      }\n\n      deferred.push([node, index])\n    })\n    endTimeRecord('processMarkVNodes:collectReferences')\n\n    startTimeRecord('processMarkVNodes:prepareVNodes')\n    deferred.forEach(([node, index]) => {\n      tempMarkVNodes.push(getRootComponent(node, index, false))\n    })\n    endTimeRecord('processMarkVNodes:prepareVNodes')\n\n    triggerRef(toc)\n    triggerRef(footnoteDefinitions)\n\n    debugPrintLn('toc:', toc.value, '\\nhasFootnote:', hasFootnote.value, '\\nfrontmatter:', frontmatter.value)\n\n    endTimeRecord('processMarkVNodes')\n    return tempMarkVNodes\n  }\n\n  watch(ast, (newValue) => {\n    markVNodes.value = processMarkVNodes(newValue)\n  })\n\n  const VueMarkContent: Component = defineComponent({\n    name: 'VueMarkContent',\n    setup() {\n      provide('globalPrefix', globalPrefix)\n      return () => h('div', markVNodes.value)\n    },\n  })\n\n  const FootnoteContent: Component = defineComponent({\n    name: 'FootnoteContent',\n    setup() {\n      provide('globalPrefix', globalPrefix)\n      return () => {\n        const element\n          = customPresets.footnoteContainer ?? PRESETS.footnoteContainer\n\n        if (element === null) {\n          return null\n        }\n\n        if (typeof element === 'string') {\n          return h(element, Object.values(footnoteDefinitions.value).map(item => item.render()))\n        }\n\n        return h(element, {\n          footnoteDefinitions,\n          globalPrefix,\n        })\n      }\n    },\n  })\n\n  return {\n    toc,\n    hasFootnote,\n    frontmatter,\n    VueMarkContent,\n    FootnoteContent,\n  }\n}\n","<script setup lang=\"ts\">\nimport { inject } from 'vue'\n\ndefineProps<{\n  level: 1 | 2 | 3 | 4 | 5 | 6\n  slug?: string\n}>()\n\nconst globalPrefix = inject<string>('globalPrefix')!\n</script>\n\n<template>\n  <component :is=\"`h${level}`\" :id=\"slug && `user-content-${globalPrefix}-${slug}`\">\n    <slot />\n  </component>\n</template>\n","<script setup lang=\"ts\">\nimport { inject } from 'vue'\n\ndefineProps<{\n  index: number\n}>()\n\nconst globalPrefix = inject<string>('globalPrefix')!\n</script>\n\n<template>\n  <sup>\n    <a\n      :id=\"`user-content-${globalPrefix}-fnref-${index}`\"\n      :href=\"`#user-content-${globalPrefix}-fn-${index}`\"\n      class=\"vuemark-footnote-ref\"\n      aria-describedby=\"footnote-label\"\n    >\n      {{ index }}\n    </a>\n  </sup>\n</template>\n","<template>\n  <table>\n    <thead>\n      <slot name=\"head\" />\n    </thead>\n    <tbody>\n      <slot name=\"body\" />\n    </tbody>\n  </table>\n</template>\n","<template>\n  <tr>\n    <slot />\n  </tr>\n</template>\n"],"names":["ok","characterEntitiesLegacy","characterReferenceInvalid","isDecimal","character","code","isHexadecimal","isAlphabetical","isAlphanumerical","element","decodeNamedCharacterReference","value","characterReference","char","fromCharCode","messages","parseEntities","options","additional","result","index","lines","queue","point","indent","line","column","previous","now","following","start","begin","end","type","characterReferenceCharacters","characters","test","terminated","namedReference","diff","reference","warning","reason","referenceCode","prohibited","output","disallowed","flush","next","offset","position","defaultSubsetRegex","surrogatePairsRegex","controlCharactersRegex","regexEscapeRegex","subsetToRegexCache","core","charactersToExpressionCached","basic","surrogate","pair","all","subset","cached","charactersToExpression","groups","formatBasic","stringifyEntitiesLight","convert","castFactory","anyFactory","propsFactory","typeFactory","tests","checks","any","parameters","check","checkAsRecord","node","nodeAsRecord","key","testFunction","parent","looksLikeANode","color","d","empty","CONTINUE","EXIT","SKIP","visitParents","tree","visitor","reverse","is","step","factory","parents","name","visit","subresult","grandparents","toResult","nodeAsParent","child","own","shortcut","handleDirective","peekDirective","directiveFromMarkdown","enterContainer","enterAttributes","enterContainerLabel","enterLeaf","enterText","exit","exitAttributeClassValue","exitAttributeIdValue","exitAttributeName","exitAttributeValue","exitAttributes","exitContainerLabel","exitName","directiveToMarkdown","token","enter","list","cleaned","attribute","_","state","info","tracker","sequence","fence","label","head","inlineDirectiveLabel","labelType","subexit","attributes","shallow","quote","attrs","values","classesFull","classes","id","quoted","classesFullList","classesList","size","nesting","asciiAlpha","regexCheck","asciiAlphanumeric","asciiAtext","asciiControl","asciiDigit","asciiHexDigit","asciiPunctuation","markdownLineEnding","markdownLineEndingOrSpace","markdownSpace","unicodePunctuation","unicodeWhitespace","regex","factorySpace","effects","max","limit","prefix","factoryWhitespace","seen","factoryAttributes","nok","attributesType","attributesMarkerType","attributeType","attributeIdType","attributeClassType","attributeNameType","attributeInitializerType","attributeValueLiteralType","attributeValueType","attributeValueMarker","attributeValueData","disallowEol","marker","between","shortcutStart","markerType","shortcutStartAfter","valueType","nameAfter","valueBefore","valueQuotedStart","valueUnquoted","valueQuotedAfter","valueQuotedBetween","valueQuoted","factoryLabel","stringType","balance","afterStart","lineStart","atClosingBrace","data","dataEscape","factoryName","self","directiveContainer","tokenizeDirectiveContainer","tokenizeLabel","tokenizeAttributes","nonLazyLine","tokenizeNonLazyLine","tail","initialSize","sizeOpen","sequenceOpen","afterName","afterLabel","afterAttributes","openAfter","afterOpening","contentStart","after","tokenizeClosingFence","chunkStart","contentContinue","t","nonLazyLineAfter","lineAfter","closingPrefixAfter","closingSequence","closingSequenceEnd","directiveLeaf","tokenizeDirectiveLeaf","inStart","directiveText","tokenizeDirectiveText","directive","remarkDirective","micromarkExtensions","fromMarkdownExtensions","toMarkdownExtensions","namespace","module","format","vsprintf","printf","fmt","replacements","argIndex","args","i","n","escaped","arg","tmp","leadingZero","precision","nextArg","slurpNumber","digits","fault","create","Constructor","FormattedError","formatter","markers","toMatters","presetsOrMatters","matter","option","frontmatter","matters","flow","construct","createConstruct","existing","anywhere","frontmatterType","fenceType","sequenceType","closingFenceConstruct","buffer","bufferIndex","tokenizeFrontmatter","openSequence","openSequenceWhitespace","contentEnd","contentInside","closeStart","closeSequence","closeSequenceWhitespace","closeAfter","prop","pick","schema","escapeStringRegexp","string","frontmatterFromMarkdown","opener","close","open","frontmatterToMarkdown","unsafe","handlers","handler","handle","emptyOptions","remarkFrontmatter","settings","ccount","source","count","findAndReplace","ignored","pairs","toPairs","pairIndex","grandparent","siblings","find","replace","change","nodes","match","matchObject","tupleOrList","tuple","toExpression","toFunction","escape","inConstruct","notInConstruct","gfmAutolinkLiteralFromMarkdown","transformGfmAutolinkLiterals","enterLiteralAutolink","enterLiteralAutolinkValue","exitLiteralAutolink","exitLiteralAutolinkEmail","exitLiteralAutolinkHttp","exitLiteralAutolinkWww","gfmAutolinkLiteralToMarkdown","findUrl","findEmail","protocol","domain","path","isCorrectDomain","parts","splitUrl","atext","url","trailExec","trail","closingParenIndex","openingParens","closingParens","email","normalizeIdentifier","footnoteReference","footnoteReferencePeek","gfmFootnoteFromMarkdown","enterFootnoteDefinition","enterFootnoteDefinitionLabelString","enterFootnoteCall","enterFootnoteCallString","exitFootnoteDefinition","exitFootnoteDefinitionLabelString","exitFootnoteCall","exitFootnoteCallString","gfmFootnoteToMarkdown","footnoteDefinition","map","blank","constructsWithoutStrikethrough","handleDelete","peekDelete","gfmStrikethroughFromMarkdown","enterStrikethrough","exitStrikethrough","gfmStrikethroughToMarkdown","markdownTable","table","align","stringLength","defaultStringLength","alignments","cellMatrix","sizeMatrix","longestCellByColumn","mostCellsPerRow","rowIndex","row","sizes","columnIndex","cell","serialize","toAlignment","before","blockquote","patternInScope","stack","pattern","listInScope","none","hardBreak","_1","longestStreak","substring","expected","formatCodeAsIndented","checkFence","raw","suffix","checkQuote","definition","checkEmphasis","emphasis","emphasisPeek","testOrVisitor","visitorOrReverse","maybeReverse","overload","toString","includeImageAlt","includeHtml","one","formatHeadingAsSetext","literalWithBreak","heading","rank","html","htmlPeek","image","imagePeek","imageReference","imageReferencePeek","alt","inlineCode","inlineCodePeek","expression","formatLinkAsAutolink","link","linkPeek","linkReference","linkReferencePeek","text","checkBullet","checkBulletOther","bullet","bulletOther","checkBulletOrdered","checkRule","bulletCurrent","useDifferentMarker","firstListItem","item","checkListItemIndent","style","listItem","listItemIndent","paragraph","phrasing","root","checkStrong","strong","strongPeek","checkRuleRepetition","repetition","thematicBreak","decodeNumericCharacterReference","base","characterEscapeOrReference","decodeString","decode","$0","$1","$2","hex","gfmTableFromMarkdown","enterTable","enterCell","enterRow","exitCodeText","exitTable","gfmTableToMarkdown","padding","alignDelimiters","around","inlineCodeWithTable","handleTable","handleTableCell","handleTableRow","serializeData","handleTableAsData","handleTableRowAsData","matrix","children","defaultHandlers","gfmTaskListItemFromMarkdown","exitCheck","exitParagraphWithTaskListItem","gfmTaskListItemToMarkdown","listItemWithTaskListItem","firstParaghraph","sibling","checkable","checkbox","gfmFromMarkdown","gfmToMarkdown","splice","remove","items","push","hasOwnProperty","combineExtensions","extensions","syntaxExtension","extension","hook","left","right","constructs","wwwPrefix","tokenizeWwwPrefix","tokenizeDomain","tokenizePath","tokenizeTrail","emailDomainDotTrail","tokenizeEmailDomainDotTrail","wwwAutolink","tokenizeWwwAutolink","previousWww","protocolAutolink","tokenizeProtocolAutolink","previousProtocol","emailAutolink","tokenizeEmailAutolink","previousEmail","gfmAutolinkLiteral","text$2","dot","gfmAtext","previousUnbalanced","emailDomain","emailDomainAfter","emailDomainDot","wwwStart","wwwAfter","protocolStart","protocolPrefixInside","protocolSlashesInside","afterProtocol","protocolAfter","wwwPrefixInside","wwwPrefixAfter","underscoreInLastSegment","underscoreInLastLastSegment","domainInside","domainAfter","domainAtPunctuation","sizeClose","pathInside","pathAtPunctuation","trailCharacterReferenceStart","trailBracketAfter","trailCharacterReferenceInside","events","normalizeUri","skip","classifyCharacter","resolveAll","context","called","resolve","attention","tokenizeAttention","resolveAllAttention","group","openingSequence","use","nextEvents","movePoint","attentionMarkers","inside","autolink","tokenizeAutolink","schemeOrEmailAtext","emailAtext","schemeInsideOrEmailAtext","urlInside","emailAtSignOrDot","emailLabel","emailValue","blankLine","tokenizeBlankLine","blockQuote","tokenizeBlockQuoteStart","tokenizeBlockQuoteContinuation","contStart","contBefore","characterEscape","tokenizeCharacterEscape","tokenizeCharacterReference","numeric","nonLazyContinuation","tokenizeNonLazyContinuation","codeFenced","tokenizeCodeFenced","tokenizeCloseStart","initialPrefix","beforeSequenceOpen","infoBefore","atNonLazyBreak","metaBefore","meta","contentBefore","beforeContentChunk","contentChunk","startBefore","beforeSequenceClose","sequenceClose","sequenceCloseAfter","codeIndented","tokenizeCodeIndented","furtherStart","tokenizeFurtherStart","afterPrefix","atBreak","codeText","tokenizeCodeText","resolveCodeText","tailExitIndex","headEnterIndex","SpliceBuffer","initial","stop","deleteCount","removed","chunkedPush","subtokenize","eventsArray","jumps","event","lineIndex","otherIndex","otherEvent","subevents","more","subcontent","eventIndex","startPosition","startPositions","tokenizer","childEvents","gaps","stream","current","adjust","breaks","slice","content","tokenizeContent","resolveContent","continuationConstruct","tokenizeContinuation","chunkInside","startLookahead","prefixed","factoryDestination","literalType","literalMarkerType","rawType","enclosedBefore","enclosed","enclosedEscape","rawEscape","labelInside","labelEscape","factoryTitle","tokenizeDefinition","titleBefore","tokenizeTitleBefore","identifier","labelAfter","markerAfter","destinationBefore","destinationAfter","afterWhitespace","beforeMarker","titleAfter","titleAfterOptionalWhitespace","hardBreakEscape","tokenizeHardBreakEscape","headingAtx","tokenizeHeadingAtx","resolveHeadingAtx","sequenceFurther","htmlBlockNames","htmlRawNames","htmlFlow","tokenizeHtmlFlow","resolveToHtmlFlow","blankLineBefore","tokenizeBlankLineBefore","nonLazyContinuationStart","tokenizeNonLazyContinuationStart","closingTag","markerB","declarationOpen","tagCloseStart","continuationDeclarationInside","tagName","commentOpenInside","cdataOpenInside","continuation","slash","basicSelfClosing","completeClosingTagAfter","completeAttributeNameBefore","completeEnd","completeAttributeName","completeAttributeNameAfter","completeAttributeValueBefore","completeAttributeValueQuoted","completeAttributeValueUnquoted","completeAttributeValueQuotedAfter","completeAfter","continuationCommentInside","continuationRawTagOpen","continuationClose","continuationCdataInside","continuationAfter","continuationStart","continuationStartNonLazy","continuationBefore","continuationRawEndTag","htmlText","tokenizeHtmlText","returnState","instruction","tagOpen","declaration","commentEnd","comment","commentClose","lineEndingBefore","cdata","cdataClose","cdataEnd","instructionClose","tagClose","tagCloseBetween","tagOpenBetween","tagOpenAttributeName","tagOpenAttributeNameAfter","tagOpenAttributeValueBefore","tagOpenAttributeValueQuoted","tagOpenAttributeValueUnquoted","tagOpenAttributeValueQuotedAfter","lineEndingAfter","lineEndingAfterPrefix","labelEnd","tokenizeLabelEnd","resolveToLabelEnd","resolveAllLabelEnd","resourceConstruct","tokenizeResource","referenceFullConstruct","tokenizeReferenceFull","referenceCollapsedConstruct","tokenizeReferenceCollapsed","media","labelStart","defined","labelEndNok","labelEndOk","referenceNotFull","resourceStart","resourceBefore","resourceOpen","resourceEnd","resourceDestinationAfter","resourceDestinationMissing","resourceBetween","resourceTitleAfter","referenceFull","referenceFullAfter","referenceFullMissing","referenceCollapsedStart","referenceCollapsedOpen","labelStartImage","tokenizeLabelStartImage","labelStartLink","tokenizeLabelStartLink","lineEnding","tokenizeLineEnding","tokenizeThematicBreak","tokenizeListStart","tokenizeListContinuation","tokenizeListEnd","listItemPrefixWhitespaceConstruct","tokenizeListItemPrefixWhitespace","indentConstruct","tokenizeIndent","kind","atMarker","onBlank","endOfPrefix","otherPrefix","notBlank","notInCurrentItem","setextUnderline","tokenizeSetextUnderline","resolveToSetextUnderline","gfmFootnote","tokenizeDefinitionStart","tokenizeDefinitionContinuation","gfmFootnoteDefinitionEnd","tokenizeGfmFootnoteCall","tokenizePotentialGfmFootnoteCall","resolveToPotentialGfmFootnoteCall","call","chunk","replacement","callStart","callData","callEscape","labelAtMarker","whitespaceAfter","gfmStrikethrough","single","tokenizeStrikethrough","resolveAllStrikethrough","strikethrough","insideSpan","EditMap","add","addImplementation","b","vecs","editMap","at","gfmTableAlign","inDelimiterRow","alignIndex","gfmTable","tokenizeTable","resolveTable","sizeB","bodyRowStart","headRowBefore","headRowStart","headRowBreak","headDelimiterStart","headRowData","headRowEscape","headDelimiterBefore","headDelimiterValueBefore","headDelimiterCellBefore","headDelimiterNok","headDelimiterLeftAlignmentAfter","headDelimiterCellAfter","headDelimiterFiller","headDelimiterRightAlignmentAfter","bodyRowBreak","bodyRowData","bodyRowEscape","inFirstCellAwaitingPipe","rowKind","lastCell","afterHeadAwaitingFirstBodyRow","lastTableEnd","currentTable","currentBody","currentCell","flushTableEnd","flushCell","range","rowEnd","previousCell","groupName","valueName","getPoint","relatedStart","relatedEnd","valueToken","a","tableBody","exits","related","side","tasklistCheck","tokenizeTasklistCheck","gfmTaskListItem","spaceThenNonSpace","gfm","remarkGfm","initializeContent","afterContentStartConstruct","paragraphInitial","document","initializeDocument","containerConstruct","tokenizeContainer","continued","childFlow","childToken","lineStartOffset","documentContinue","checkNewContainers","closeFlow","indexBeforeExits","indexBeforeFlow","exitContainers","documentContinued","flowStart","thereIsANewContainer","thereIsNoNewContainer","containerContinue","flowContinue","writeToChild","eof","entry","initializeFlow","atBlankEnding","afterConstruct","resolver","createResolver","initializeFactory","field","initializeText","resolveAllLineSuffixes","notText","extraResolver","resolveAllText","chunks","tabs","createTokenizer","parser","initialize","from","columnStart","resolveAllConstructs","consume","constructFactory","onsuccessfulconstruct","onsuccessfulcheck","sliceStream","sliceSerialize","defineSkip","write","main","addResult","expandTabs","serializeChunks","sliceChunks","_index","_bufferIndex","accountForPotentialSkip","chunkIndex","go","fields","onreturn","bogusState","listOfConstructs","constructIndex","currentConstruct","handleListOfConstructs","handleMapOfConstructs","def","handleConstruct","store","startPoint","startPrevious","startCurrentConstruct","startEventsIndex","startStack","restore","startIndex","startBufferIndex","endIndex","endBufferIndex","view","atTab","resolveText","parse","defaultConstructs","creator","postprocess","search","preprocess","atCarriageReturn","preprocessor","encoding","endPosition","stringifyPosition","pos","fromMarkdown","compiler","config","onenterdata","codeFlow","onenterlistitemvalue","onenterlistordered","onenterreference","closer","onexitatxheadingsequence","onexitautolinkemail","onexitautolinkprotocol","onexitdata","onexitcharacterreferencemarker","onexitcharacterreferencevalue","onexitcharacterreference","onexitcodefenced","onexitcodefencedfence","onexitcodefencedfenceinfo","onexitcodefencedfencemeta","onexitcodeindented","onexitcodetext","onexitdefinitiondestinationstring","onexitdefinitionlabelstring","onexitdefinitiontitlestring","onexithardbreak","onexithtmlflow","onexithtmltext","onexitimage","onexitlabel","onexitlabeltext","onexitlineending","onexitlink","onexitreferencestring","onexitresourcedestinationstring","onexitresourcetitlestring","onexitresource","onexitsetextheading","onexitsetextheadinglinesequence","onexitsetextheadingtext","configure","compile","resume","listStack","prepareList","defaultOnError","length","containerBalance","listSpread","firstBlankLineIndex","tailIndex","tailEvent","and","errorHandler","onExitError","ancestor","depth","referenceType","fragment","combined","remarkParse","doc","bail","error","hasOwn","toStr","defineProperty","gOPD","isArray","arr","isPlainObject","obj","hasOwnConstructor","hasIsPrototypeOf","setProperty","target","getProperty","extend","src","copy","copyIsArray","clone","deep","prototype","trough","fns","pipeline","run","middlewareIndex","callback","fn","wrap","middelware","middleware","wrapped","fnExpectsCallback","done","exception","then","VFileMessage","causeOrReason","optionsOrParentOrPlace","origin","legacyCause","minpath","basename","dirname","extname","join","assertPath","seenNonSlash","firstNonSlashEnd","extnameIndex","unmatchedSlash","startPart","startDot","preDotState","segments","joined","normalize","absolute","normalizeString","allowAboveRoot","lastSegmentLength","lastSlash","dots","lastSlashIndex","minproc","cwd","isUrl","fileUrlOrPath","urlToPath","getPathFromURLPosix","pathname","third","order","VFile","isUint8Array","assertNonEmpty","assertPart","stem","message","part","CallableInstance","property","proto","apply","Processor","destination","attacher","assertUnfrozen","transformer","file","realFile","vfile","assertParser","assertCompiler","executor","reject","parseTree","realDone","compileTree","compileResult","looksLikeAValue","complete","assertDone","assertNode","transformers","outputTree","resultingTree","attachers","addPlugin","addList","addPreset","plugin","plugins","thing","entryIndex","primary","rest","currentPrimary","isPlainObj","unified","frozen","asyncName","looksLikeAVFile","tab","space","trimLines","last","trimLine","PRESETS","defineAsyncComponent","isParent","isCustomBlock","isTextNode","getNodeTextContent","getRawTextFromNode","listItemLoose","spread","listLoose","loose","processor","useVueMark","customPresets","globalPrefix","dealWithTextNodes","debug","slugify","debugPrintLn","_processStartTimes","startTimeRecord","endTimeRecord","startTime","duration","computedValue","computed","toValue","ast","shallowRef","toc","hasFootnote","tocSlugCountMap","definitions","footnoteDefinitions","footnoteDefinitionCount","setDefinition","setFootnoteDefinition","render","getRootComponent","inFootnote","title","slug","h","hasTaskItem","childNodes","aligns","body","isHead","markVNodes","processMarkVNodes","tempMarkVNodes","deferred","triggerRef","watch","newValue","VueMarkContent","defineComponent","provide","FootnoteContent","inject","_cache","_openBlock","_createElementBlock"],"mappings":"4PAMO,SAASA,IAAK,CAAA,CCDd,MAAMC,GAA0B,CACrC,QACA,MACA,SACA,QACA,SACA,QACA,SACA,OACA,OACA,SACA,MACA,SACA,QACA,SACA,OACA,KACA,SACA,QACA,SACA,OACA,KACA,SACA,SACA,QACA,SACA,SACA,SACA,OACA,OACA,MACA,QACA,SACA,QACA,SACA,OACA,SACA,SACA,QACA,QACA,QACA,SACA,MACA,QACA,SACA,OACA,SACA,SACA,QACA,OACA,OACA,SACA,MACA,SACA,SACA,QACA,SACA,MACA,OACA,SACA,SACA,SACA,KACA,SACA,QACA,QACA,SACA,SACA,OACA,QACA,KACA,OACA,QACA,SACA,OACA,MACA,SACA,SACA,QACA,SACA,OACA,OACA,SACA,SACA,OACA,OACA,SACA,QACA,OACA,QACA,MACA,OACA,MACA,OACA,OACA,OACA,QACA,QACA,QACA,SACA,QACA,SACA,MACA,OACA,SACA,MACA,MACF,EC3GaC,GAA4B,CACvC,EAAG,IACH,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,GACP,EC3BO,SAASC,GAAUC,EAAW,CACnC,MAAMC,EACJ,OAAOD,GAAc,SAAWA,EAAU,WAAW,CAAC,EAAIA,EAE5D,OAAOC,GAAQ,IAAMA,GAAQ,EAC/B,CCLO,SAASC,GAAcF,EAAW,CACvC,MAAMC,EACJ,OAAOD,GAAc,SAAWA,EAAU,WAAW,CAAC,EAAIA,EAE5D,OACGC,GAAQ,IAAcA,GAAQ,KAC9BA,GAAQ,IAAcA,GAAQ,IAC9BA,GAAQ,IAAcA,GAAQ,EAEnC,CCTO,SAASE,GAAeH,EAAW,CACxC,MAAMC,EACJ,OAAOD,GAAc,SAAWA,E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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150]}