import { EXIT, asciiAlpha, asciiAlphanumeric, asciiControl, blankLine, classifyCharacter, codes, combineExtensions, constants, convert, factorySpace, markdownLineEnding, markdownLineEndingOrSpace, markdownSpace, normalizeIdentifier, ok, resolveAll, splice, toString, types, unicodePunctuation, unicodeWhitespace, visit, visitParents } from "./chunk-ZJALRI2F.js"; import "./chunk-2TUXWMP5.js"; // node_modules/ccount/index.js function ccount(value, character) { const source = String(value); if (typeof character !== "string") { throw new TypeError("Expected character"); } let count = 0; let index = source.indexOf(character); while (index !== -1) { count++; index = source.indexOf(character, index + character.length); } return count; } // node_modules/mdast-util-find-and-replace/node_modules/escape-string-regexp/index.js function escapeStringRegexp(string) { if (typeof string !== "string") { throw new TypeError("Expected a string"); } return string.replace(/[|\\{}()[\]^$+*?.]/g, "\\$&").replace(/-/g, "\\x2d"); } // node_modules/mdast-util-find-and-replace/lib/index.js function findAndReplace(tree, list2, options) { const settings = options || {}; const ignored = convert(settings.ignore || []); const pairs = toPairs(list2); let pairIndex = -1; while (++pairIndex < pairs.length) { visitParents(tree, "text", visitor); } function visitor(node, parents) { let index = -1; let grandparent; while (++index < parents.length) { const parent = parents[index]; const siblings = grandparent ? grandparent.children : void 0; if (ignored( parent, siblings ? siblings.indexOf(parent) : void 0, grandparent )) { return; } grandparent = parent; } if (grandparent) { return handler(node, parents); } } function handler(node, parents) { const parent = parents[parents.length - 1]; const find = pairs[pairIndex][0]; const replace2 = pairs[pairIndex][1]; let start = 0; const siblings = parent.children; const index = siblings.indexOf(node); let change = false; let nodes = []; find.lastIndex = 0; let match = find.exec(node.value); while (match) { const position = match.index; const matchObject = { index: match.index, input: match.input, stack: [...parents, node] }; let value = replace2(...match, matchObject); if (typeof value === "string") { value = value.length > 0 ? { type: "text", value } : void 0; } if (value === false) { find.lastIndex = position + 1; } else { if (start !== position) { nodes.push({ type: "text", value: node.value.slice(start, position) }); } if (Array.isArray(value)) { nodes.push(...value); } else if (value) { nodes.push(value); } start = position + match[0].length; change = true; } if (!find.global) { break; } match = find.exec(node.value); } if (change) { if (start < node.value.length) { nodes.push({ type: "text", value: node.value.slice(start) }); } parent.children.splice(index, 1, ...nodes); } else { nodes = [node]; } return index + nodes.length; } } function toPairs(tupleOrList) { const result = []; if (!Array.isArray(tupleOrList)) { throw new TypeError("Expected find and replace tuple or list of tuples"); } const list2 = !tupleOrList[0] || Array.isArray(tupleOrList[0]) ? tupleOrList : [tupleOrList]; let index = -1; while (++index < list2.length) { const tuple = list2[index]; result.push([toExpression(tuple[0]), toFunction(tuple[1])]); } return result; } function toExpression(find) { return typeof find === "string" ? new RegExp(escapeStringRegexp(find), "g") : find; } function toFunction(replace2) { return typeof replace2 === "function" ? replace2 : function() { return replace2; }; } // node_modules/mdast-util-gfm-autolink-literal/lib/index.js var inConstruct = "phrasing"; var notInConstruct = ["autolink", "link", "image", "label"]; function gfmAutolinkLiteralFromMarkdown() { return { transforms: [transformGfmAutolinkLiterals], enter: { literalAutolink: enterLiteralAutolink, literalAutolinkEmail: enterLiteralAutolinkValue, literalAutolinkHttp: enterLiteralAutolinkValue, literalAutolinkWww: enterLiteralAutolinkValue }, exit: { literalAutolink: exitLiteralAutolink, literalAutolinkEmail: exitLiteralAutolinkEmail, literalAutolinkHttp: exitLiteralAutolinkHttp, literalAutolinkWww: exitLiteralAutolinkWww } }; } function gfmAutolinkLiteralToMarkdown() { return { unsafe: [ { character: "@", before: "[+\\-.\\w]", after: "[\\-.\\w]", inConstruct, notInConstruct }, { character: ".", before: "[Ww]", after: "[\\-.\\w]", inConstruct, notInConstruct }, { character: ":", before: "[ps]", after: "\\/", inConstruct, notInConstruct } ] }; } function enterLiteralAutolink(token) { this.enter({ type: "link", title: null, url: "", children: [] }, token); } function enterLiteralAutolinkValue(token) { this.config.enter.autolinkProtocol.call(this, token); } function exitLiteralAutolinkHttp(token) { this.config.exit.autolinkProtocol.call(this, token); } function exitLiteralAutolinkWww(token) { this.config.exit.data.call(this, token); const node = this.stack[this.stack.length - 1]; ok(node.type === "link"); node.url = "http://" + this.sliceSerialize(token); } function exitLiteralAutolinkEmail(token) { this.config.exit.autolinkEmail.call(this, token); } function exitLiteralAutolink(token) { this.exit(token); } function transformGfmAutolinkLiterals(tree) { findAndReplace( tree, [ [/(https?:\/\/|www(?=\.))([-.\w]+)([^ \t\r\n]*)/gi, findUrl], [new RegExp("(?<=^|\\s|\\p{P}|\\p{S})([-.\\w+]+)@([-\\w]+(?:\\.[-\\w]+)+)", "gu"), findEmail] ], { ignore: ["link", "linkReference"] } ); } function findUrl(_, protocol, domain2, path2, match) { let prefix = ""; if (!previous(match)) { return false; } if (/^w/i.test(protocol)) { domain2 = protocol + domain2; protocol = ""; prefix = "http://"; } if (!isCorrectDomain(domain2)) { return false; } const parts = splitUrl(domain2 + path2); if (!parts[0]) return false; const result = { type: "link", title: null, url: prefix + protocol + parts[0], children: [{ type: "text", value: protocol + parts[0] }] }; if (parts[1]) { return [result, { type: "text", value: parts[1] }]; } return result; } function findEmail(_, atext, label, match) { if ( // Not an expected previous character. !previous(match, true) || // Label ends in not allowed character. /[-\d_]$/.test(label) ) { return false; } return { type: "link", title: null, url: "mailto:" + atext + "@" + label, children: [{ type: "text", value: atext + "@" + label }] }; } function isCorrectDomain(domain2) { const parts = domain2.split("."); if (parts.length < 2 || parts[parts.length - 1] && (/_/.test(parts[parts.length - 1]) || !/[a-zA-Z\d]/.test(parts[parts.length - 1])) || parts[parts.length - 2] && (/_/.test(parts[parts.length - 2]) || !/[a-zA-Z\d]/.test(parts[parts.length - 2]))) { return false; } return true; } function splitUrl(url) { const trailExec = /[!"&'),.:;<>?\]}]+$/.exec(url); if (!trailExec) { return [url, void 0]; } url = url.slice(0, trailExec.index); let trail2 = trailExec[0]; let closingParenIndex = trail2.indexOf(")"); const openingParens = ccount(url, "("); let closingParens = ccount(url, ")"); while (closingParenIndex !== -1 && openingParens > closingParens) { url += trail2.slice(0, closingParenIndex + 1); trail2 = trail2.slice(closingParenIndex + 1); closingParenIndex = trail2.indexOf(")"); closingParens++; } return [url, trail2]; } function previous(match, email) { const code3 = match.input.charCodeAt(match.index - 1); return (match.index === 0 || unicodeWhitespace(code3) || unicodePunctuation(code3)) && // If it’s an email, the previous character should not be a slash. (!email || code3 !== 47); } // node_modules/mdast-util-gfm-footnote/lib/index.js footnoteReference.peek = footnoteReferencePeek; function enterFootnoteCallString() { this.buffer(); } function enterFootnoteCall(token) { this.enter({ type: "footnoteReference", identifier: "", label: "" }, token); } function enterFootnoteDefinitionLabelString() { this.buffer(); } function enterFootnoteDefinition(token) { this.enter( { type: "footnoteDefinition", identifier: "", label: "", children: [] }, token ); } function exitFootnoteCallString(token) { const label = this.resume(); const node = this.stack[this.stack.length - 1]; ok(node.type === "footnoteReference"); node.identifier = normalizeIdentifier( this.sliceSerialize(token) ).toLowerCase(); node.label = label; } function exitFootnoteCall(token) { this.exit(token); } function exitFootnoteDefinitionLabelString(token) { const label = this.resume(); const node = this.stack[this.stack.length - 1]; ok(node.type === "footnoteDefinition"); node.identifier = normalizeIdentifier( this.sliceSerialize(token) ).toLowerCase(); node.label = label; } function exitFootnoteDefinition(token) { this.exit(token); } function footnoteReferencePeek() { return "["; } function footnoteReference(node, _, state, info) { const tracker = state.createTracker(info); let value = tracker.move("[^"); const exit2 = state.enter("footnoteReference"); const subexit = state.enter("reference"); value += tracker.move( state.safe(state.associationId(node), { after: "]", before: value }) ); subexit(); exit2(); value += tracker.move("]"); return value; } function gfmFootnoteFromMarkdown() { return { enter: { gfmFootnoteCallString: enterFootnoteCallString, gfmFootnoteCall: enterFootnoteCall, gfmFootnoteDefinitionLabelString: enterFootnoteDefinitionLabelString, gfmFootnoteDefinition: enterFootnoteDefinition }, exit: { gfmFootnoteCallString: exitFootnoteCallString, gfmFootnoteCall: exitFootnoteCall, gfmFootnoteDefinitionLabelString: exitFootnoteDefinitionLabelString, gfmFootnoteDefinition: exitFootnoteDefinition } }; } function gfmFootnoteToMarkdown(options) { let firstLineBlank = false; if (options && options.firstLineBlank) { firstLineBlank = true; } return { handlers: { footnoteDefinition, footnoteReference }, // This is on by default already. unsafe: [{ character: "[", inConstruct: ["label", "phrasing", "reference"] }] }; function footnoteDefinition(node, _, state, info) { const tracker = state.createTracker(info); let value = tracker.move("[^"); const exit2 = state.enter("footnoteDefinition"); const subexit = state.enter("label"); value += tracker.move( state.safe(state.associationId(node), { before: value, after: "]" }) ); subexit(); value += tracker.move("]:"); if (node.children && node.children.length > 0) { tracker.shift(4); value += tracker.move( (firstLineBlank ? "\n" : " ") + state.indentLines( state.containerFlow(node, tracker.current()), firstLineBlank ? mapAll : mapExceptFirst ) ); } exit2(); return value; } } function mapExceptFirst(line, index, blank) { return index === 0 ? line : mapAll(line, index, blank); } function mapAll(line, index, blank) { return (blank ? "" : " ") + line; } // node_modules/mdast-util-gfm-strikethrough/lib/index.js var constructsWithoutStrikethrough = [ "autolink", "destinationLiteral", "destinationRaw", "reference", "titleQuote", "titleApostrophe" ]; handleDelete.peek = peekDelete; function gfmStrikethroughFromMarkdown() { return { canContainEols: ["delete"], enter: { strikethrough: enterStrikethrough }, exit: { strikethrough: exitStrikethrough } }; } function gfmStrikethroughToMarkdown() { return { unsafe: [ { character: "~", inConstruct: "phrasing", notInConstruct: constructsWithoutStrikethrough } ], handlers: { delete: handleDelete } }; } function enterStrikethrough(token) { this.enter({ type: "delete", children: [] }, token); } function exitStrikethrough(token) { this.exit(token); } function handleDelete(node, _, state, info) { const tracker = state.createTracker(info); const exit2 = state.enter("strikethrough"); let value = tracker.move("~~"); value += state.containerPhrasing(node, { ...tracker.current(), before: value, after: "~" }); value += tracker.move("~~"); exit2(); return value; } function peekDelete() { return "~"; } // node_modules/markdown-table/index.js function defaultStringLength(value) { return value.length; } function markdownTable(table, options) { const settings = options || {}; const align = (settings.align || []).concat(); const stringLength = settings.stringLength || defaultStringLength; const alignments = []; const cellMatrix = []; const sizeMatrix = []; const longestCellByColumn = []; let mostCellsPerRow = 0; let rowIndex = -1; while (++rowIndex < table.length) { const row2 = []; const sizes2 = []; let columnIndex2 = -1; if (table[rowIndex].length > mostCellsPerRow) { mostCellsPerRow = table[rowIndex].length; } while (++columnIndex2 < table[rowIndex].length) { const cell = serialize(table[rowIndex][columnIndex2]); if (settings.alignDelimiters !== false) { const size = stringLength(cell); sizes2[columnIndex2] = size; if (longestCellByColumn[columnIndex2] === void 0 || size > longestCellByColumn[columnIndex2]) { longestCellByColumn[columnIndex2] = size; } } row2.push(cell); } cellMatrix[rowIndex] = row2; sizeMatrix[rowIndex] = sizes2; } let columnIndex = -1; if (typeof align === "object" && "length" in align) { while (++columnIndex < mostCellsPerRow) { alignments[columnIndex] = toAlignment(align[columnIndex]); } } else { const code3 = toAlignment(align); while (++columnIndex < mostCellsPerRow) { alignments[columnIndex] = code3; } } columnIndex = -1; const row = []; const sizes = []; while (++columnIndex < mostCellsPerRow) { const code3 = alignments[columnIndex]; let before = ""; let after = ""; if (code3 === 99) { before = ":"; after = ":"; } else if (code3 === 108) { before = ":"; } else if (code3 === 114) { after = ":"; } let size = settings.alignDelimiters === false ? 1 : Math.max( 1, longestCellByColumn[columnIndex] - before.length - after.length ); const cell = before + "-".repeat(size) + after; if (settings.alignDelimiters !== false) { size = before.length + size + after.length; if (size > longestCellByColumn[columnIndex]) { longestCellByColumn[columnIndex] = size; } sizes[columnIndex] = size; } row[columnIndex] = cell; } cellMatrix.splice(1, 0, row); sizeMatrix.splice(1, 0, sizes); rowIndex = -1; const lines = []; while (++rowIndex < cellMatrix.length) { const row2 = cellMatrix[rowIndex]; const sizes2 = sizeMatrix[rowIndex]; columnIndex = -1; const line = []; while (++columnIndex < mostCellsPerRow) { const cell = row2[columnIndex] || ""; let before = ""; let after = ""; if (settings.alignDelimiters !== false) { const size = longestCellByColumn[columnIndex] - (sizes2[columnIndex] || 0); const code3 = alignments[columnIndex]; if (code3 === 114) { before = " ".repeat(size); } else if (code3 === 99) { if (size % 2) { before = " ".repeat(size / 2 + 0.5); after = " ".repeat(size / 2 - 0.5); } else { before = " ".repeat(size / 2); after = before; } } else { after = " ".repeat(size); } } if (settings.delimiterStart !== false && !columnIndex) { line.push("|"); } if (settings.padding !== false && // Don’t add the opening space if we’re not aligning and the cell is // empty: there will be a closing space. !(settings.alignDelimiters === false && cell === "") && (settings.delimiterStart !== false || columnIndex)) { line.push(" "); } if (settings.alignDelimiters !== false) { line.push(before); } line.push(cell); if (settings.alignDelimiters !== false) { line.push(after); } if (settings.padding !== false) { line.push(" "); } if (settings.delimiterEnd !== false || columnIndex !== mostCellsPerRow - 1) { line.push("|"); } } lines.push( settings.delimiterEnd === false ? line.join("").replace(/ +$/, "") : line.join("") ); } return lines.join("\n"); } function serialize(value) { return value === null || value === void 0 ? "" : String(value); } function toAlignment(value) { const code3 = typeof value === "string" ? value.codePointAt(0) : 0; return code3 === 67 || code3 === 99 ? 99 : code3 === 76 || code3 === 108 ? 108 : code3 === 82 || code3 === 114 ? 114 : 0; } // node_modules/zwitch/index.js var own = {}.hasOwnProperty; // node_modules/mdast-util-to-markdown/lib/configure.js var own2 = {}.hasOwnProperty; // node_modules/mdast-util-to-markdown/lib/handle/blockquote.js function blockquote(node, _, state, info) { const exit2 = state.enter("blockquote"); const tracker = state.createTracker(info); tracker.move("> "); tracker.shift(2); const value = state.indentLines( state.containerFlow(node, tracker.current()), map ); exit2(); return value; } function map(line, _, blank) { return ">" + (blank ? "" : " ") + line; } // node_modules/mdast-util-to-markdown/lib/util/pattern-in-scope.js function patternInScope(stack, pattern) { return listInScope(stack, pattern.inConstruct, true) && !listInScope(stack, pattern.notInConstruct, false); } function listInScope(stack, list2, none) { if (typeof list2 === "string") { list2 = [list2]; } if (!list2 || list2.length === 0) { return none; } let index = -1; while (++index < list2.length) { if (stack.includes(list2[index])) { return true; } } return false; } // node_modules/mdast-util-to-markdown/lib/handle/break.js function hardBreak(_, _1, state, info) { let index = -1; while (++index < state.unsafe.length) { if (state.unsafe[index].character === "\n" && patternInScope(state.stack, state.unsafe[index])) { return /[ \t]/.test(info.before) ? "" : " "; } } return "\\\n"; } // node_modules/longest-streak/index.js function longestStreak(value, substring) { const source = String(value); let index = source.indexOf(substring); let expected = index; let count = 0; let max = 0; if (typeof substring !== "string") { throw new TypeError("Expected substring"); } while (index !== -1) { if (index === expected) { if (++count > max) { max = count; } } else { count = 1; } expected = index + substring.length; index = source.indexOf(substring, expected); } return max; } // node_modules/mdast-util-to-markdown/lib/util/format-code-as-indented.js function formatCodeAsIndented(node, state) { return Boolean( state.options.fences === false && node.value && // If there’s no info… !node.lang && // And there’s a non-whitespace character… /[^ \r\n]/.test(node.value) && // And the value doesn’t start or end in a blank… !/^[\t ]*(?:[\r\n]|$)|(?:^|[\r\n])[\t ]*$/.test(node.value) ); } // node_modules/mdast-util-to-markdown/lib/util/check-fence.js function checkFence(state) { const marker = state.options.fence || "`"; if (marker !== "`" && marker !== "~") { throw new Error( "Cannot serialize code with `" + marker + "` for `options.fence`, expected `` ` `` or `~`" ); } return marker; } // node_modules/mdast-util-to-markdown/lib/handle/code.js function code(node, _, state, info) { const marker = checkFence(state); const raw = node.value || ""; const suffix = marker === "`" ? "GraveAccent" : "Tilde"; if (formatCodeAsIndented(node, state)) { const exit3 = state.enter("codeIndented"); const value2 = state.indentLines(raw, map2); exit3(); return value2; } const tracker = state.createTracker(info); const sequence = marker.repeat(Math.max(longestStreak(raw, marker) + 1, 3)); const exit2 = state.enter("codeFenced"); let value = tracker.move(sequence); if (node.lang) { const subexit = state.enter(`codeFencedLang${suffix}`); value += tracker.move( state.safe(node.lang, { before: value, after: " ", encode: ["`"], ...tracker.current() }) ); subexit(); } if (node.lang && node.meta) { const subexit = state.enter(`codeFencedMeta${suffix}`); value += tracker.move(" "); value += tracker.move( state.safe(node.meta, { before: value, after: "\n", encode: ["`"], ...tracker.current() }) ); subexit(); } value += tracker.move("\n"); if (raw) { value += tracker.move(raw + "\n"); } value += tracker.move(sequence); exit2(); return value; } function map2(line, _, blank) { return (blank ? "" : " ") + line; } // node_modules/mdast-util-to-markdown/lib/util/check-quote.js function checkQuote(state) { const marker = state.options.quote || '"'; if (marker !== '"' && marker !== "'") { throw new Error( "Cannot serialize title with `" + marker + "` for `options.quote`, expected `\"`, or `'`" ); } return marker; } // node_modules/mdast-util-to-markdown/lib/handle/definition.js function definition(node, _, state, info) { const quote = checkQuote(state); const suffix = quote === '"' ? "Quote" : "Apostrophe"; const exit2 = state.enter("definition"); let subexit = state.enter("label"); const tracker = state.createTracker(info); let value = tracker.move("["); value += tracker.move( state.safe(state.associationId(node), { before: value, after: "]", ...tracker.current() }) ); value += tracker.move("]: "); subexit(); if ( // If there’s no url, or… !node.url || // If there are control characters or whitespace. /[\0- \u007F]/.test(node.url) ) { subexit = state.enter("destinationLiteral"); value += tracker.move("<"); value += tracker.move( state.safe(node.url, { before: value, after: ">", ...tracker.current() }) ); value += tracker.move(">"); } else { subexit = state.enter("destinationRaw"); value += tracker.move( state.safe(node.url, { before: value, after: node.title ? " " : "\n", ...tracker.current() }) ); } subexit(); if (node.title) { subexit = state.enter(`title${suffix}`); value += tracker.move(" " + quote); value += tracker.move( state.safe(node.title, { before: value, after: quote, ...tracker.current() }) ); value += tracker.move(quote); subexit(); } exit2(); return value; } // node_modules/mdast-util-to-markdown/lib/util/check-emphasis.js function checkEmphasis(state) { const marker = state.options.emphasis || "*"; if (marker !== "*" && marker !== "_") { throw new Error( "Cannot serialize emphasis with `" + marker + "` for `options.emphasis`, expected `*`, or `_`" ); } return marker; } // node_modules/mdast-util-to-markdown/lib/util/encode-character-reference.js function encodeCharacterReference(code3) { return "&#x" + code3.toString(16).toUpperCase() + ";"; } // node_modules/mdast-util-to-markdown/lib/util/encode-info.js function encodeInfo(outside, inside, marker) { const outsideKind = classifyCharacter(outside); const insideKind = classifyCharacter(inside); if (outsideKind === void 0) { return insideKind === void 0 ? ( // Letter inside: // we have to encode *both* letters for `_` as it is looser. // it already forms for `*` (and GFMs `~`). marker === "_" ? { inside: true, outside: true } : { inside: false, outside: false } ) : insideKind === 1 ? ( // Whitespace inside: encode both (letter, whitespace). { inside: true, outside: true } ) : ( // Punctuation inside: encode outer (letter) { inside: false, outside: true } ); } if (outsideKind === 1) { return insideKind === void 0 ? ( // Letter inside: already forms. { inside: false, outside: false } ) : insideKind === 1 ? ( // Whitespace inside: encode both (whitespace). { inside: true, outside: true } ) : ( // Punctuation inside: already forms. { inside: false, outside: false } ); } return insideKind === void 0 ? ( // Letter inside: already forms. { inside: false, outside: false } ) : insideKind === 1 ? ( // Whitespace inside: encode inner (whitespace). { inside: true, outside: false } ) : ( // Punctuation inside: already forms. { inside: false, outside: false } ); } // node_modules/mdast-util-to-markdown/lib/handle/emphasis.js emphasis.peek = emphasisPeek; function emphasis(node, _, state, info) { const marker = checkEmphasis(state); const exit2 = state.enter("emphasis"); const tracker = state.createTracker(info); const before = tracker.move(marker); let between = tracker.move( state.containerPhrasing(node, { after: marker, before, ...tracker.current() }) ); const betweenHead = between.charCodeAt(0); const open = encodeInfo( info.before.charCodeAt(info.before.length - 1), betweenHead, marker ); if (open.inside) { between = encodeCharacterReference(betweenHead) + between.slice(1); } const betweenTail = between.charCodeAt(between.length - 1); const close = encodeInfo(info.after.charCodeAt(0), betweenTail, marker); if (close.inside) { between = between.slice(0, -1) + encodeCharacterReference(betweenTail); } const after = tracker.move(marker); exit2(); state.attentionEncodeSurroundingInfo = { after: close.outside, before: open.outside }; return before + between + after; } function emphasisPeek(_, _1, state) { return state.options.emphasis || "*"; } // node_modules/mdast-util-to-markdown/lib/util/format-heading-as-setext.js function formatHeadingAsSetext(node, state) { let literalWithBreak = false; visit(node, function(node2) { if ("value" in node2 && /\r?\n|\r/.test(node2.value) || node2.type === "break") { literalWithBreak = true; return EXIT; } }); return Boolean( (!node.depth || node.depth < 3) && toString(node) && (state.options.setext || literalWithBreak) ); } // node_modules/mdast-util-to-markdown/lib/handle/heading.js function heading(node, _, state, info) { const rank = Math.max(Math.min(6, node.depth || 1), 1); const tracker = state.createTracker(info); if (formatHeadingAsSetext(node, state)) { const exit3 = state.enter("headingSetext"); const subexit2 = state.enter("phrasing"); const value2 = state.containerPhrasing(node, { ...tracker.current(), before: "\n", after: "\n" }); subexit2(); exit3(); return value2 + "\n" + (rank === 1 ? "=" : "-").repeat( // The whole size… value2.length - // Minus the position of the character after the last EOL (or // 0 if there is none)… (Math.max(value2.lastIndexOf("\r"), value2.lastIndexOf("\n")) + 1) ); } const sequence = "#".repeat(rank); const exit2 = state.enter("headingAtx"); const subexit = state.enter("phrasing"); tracker.move(sequence + " "); let value = state.containerPhrasing(node, { before: "# ", after: "\n", ...tracker.current() }); if (/^[\t ]/.test(value)) { value = encodeCharacterReference(value.charCodeAt(0)) + value.slice(1); } value = value ? sequence + " " + value : sequence; if (state.options.closeAtx) { value += " " + sequence; } subexit(); exit2(); return value; } // node_modules/mdast-util-to-markdown/lib/handle/html.js html.peek = htmlPeek; function html(node) { return node.value || ""; } function htmlPeek() { return "<"; } // node_modules/mdast-util-to-markdown/lib/handle/image.js image.peek = imagePeek; function image(node, _, state, info) { const quote = checkQuote(state); const suffix = quote === '"' ? "Quote" : "Apostrophe"; const exit2 = state.enter("image"); let subexit = state.enter("label"); const tracker = state.createTracker(info); let value = tracker.move("!["); value += tracker.move( state.safe(node.alt, { before: value, after: "]", ...tracker.current() }) ); value += tracker.move("]("); subexit(); if ( // If there’s no url but there is a title… !node.url && node.title || // If there are control characters or whitespace. /[\0- \u007F]/.test(node.url) ) { subexit = state.enter("destinationLiteral"); value += tracker.move("<"); value += tracker.move( state.safe(node.url, { before: value, after: ">", ...tracker.current() }) ); value += tracker.move(">"); } else { subexit = state.enter("destinationRaw"); value += tracker.move( state.safe(node.url, { before: value, after: node.title ? " " : ")", ...tracker.current() }) ); } subexit(); if (node.title) { subexit = state.enter(`title${suffix}`); value += tracker.move(" " + quote); value += tracker.move( state.safe(node.title, { before: value, after: quote, ...tracker.current() }) ); value += tracker.move(quote); subexit(); } value += tracker.move(")"); exit2(); return value; } function imagePeek() { return "!"; } // node_modules/mdast-util-to-markdown/lib/handle/image-reference.js imageReference.peek = imageReferencePeek; function imageReference(node, _, state, info) { const type = node.referenceType; const exit2 = state.enter("imageReference"); let subexit = state.enter("label"); const tracker = state.createTracker(info); let value = tracker.move("!["); const alt = state.safe(node.alt, { before: value, after: "]", ...tracker.current() }); value += tracker.move(alt + "]["); subexit(); const stack = state.stack; state.stack = []; subexit = state.enter("reference"); const reference = state.safe(state.associationId(node), { before: value, after: "]", ...tracker.current() }); subexit(); state.stack = stack; exit2(); if (type === "full" || !alt || alt !== reference) { value += tracker.move(reference + "]"); } else if (type === "shortcut") { value = value.slice(0, -1); } else { value += tracker.move("]"); } return value; } function imageReferencePeek() { return "!"; } // node_modules/mdast-util-to-markdown/lib/handle/inline-code.js inlineCode.peek = inlineCodePeek; function inlineCode(node, _, state) { let value = node.value || ""; let sequence = "`"; let index = -1; while (new RegExp("(^|[^`])" + sequence + "([^`]|$)").test(value)) { sequence += "`"; } if (/[^ \r\n]/.test(value) && (/^[ \r\n]/.test(value) && /[ \r\n]$/.test(value) || /^`|`$/.test(value))) { value = " " + value + " "; } while (++index < state.unsafe.length) { const pattern = state.unsafe[index]; const expression = state.compilePattern(pattern); let match; if (!pattern.atBreak) continue; while (match = expression.exec(value)) { let position = match.index; if (value.charCodeAt(position) === 10 && value.charCodeAt(position - 1) === 13) { position--; } value = value.slice(0, position) + " " + value.slice(match.index + 1); } } return sequence + value + sequence; } function inlineCodePeek() { return "`"; } // node_modules/mdast-util-to-markdown/lib/util/format-link-as-autolink.js function formatLinkAsAutolink(node, state) { const raw = toString(node); return Boolean( !state.options.resourceLink && // If there’s a url… node.url && // And there’s a no title… !node.title && // And the content of `node` is a single text node… node.children && node.children.length === 1 && node.children[0].type === "text" && // And if the url is the same as the content… (raw === node.url || "mailto:" + raw === node.url) && // And that starts w/ a protocol… /^[a-z][a-z+.-]+:/i.test(node.url) && // And that doesn’t contain ASCII control codes (character escapes and // references don’t work), space, or angle brackets… !/[\0- <>\u007F]/.test(node.url) ); } // node_modules/mdast-util-to-markdown/lib/handle/link.js link.peek = linkPeek; function link(node, _, state, info) { const quote = checkQuote(state); const suffix = quote === '"' ? "Quote" : "Apostrophe"; const tracker = state.createTracker(info); let exit2; let subexit; if (formatLinkAsAutolink(node, state)) { const stack = state.stack; state.stack = []; exit2 = state.enter("autolink"); let value2 = tracker.move("<"); value2 += tracker.move( state.containerPhrasing(node, { before: value2, after: ">", ...tracker.current() }) ); value2 += tracker.move(">"); exit2(); state.stack = stack; return value2; } exit2 = state.enter("link"); subexit = state.enter("label"); let value = tracker.move("["); value += tracker.move( state.containerPhrasing(node, { before: value, after: "](", ...tracker.current() }) ); value += tracker.move("]("); subexit(); if ( // If there’s no url but there is a title… !node.url && node.title || // If there are control characters or whitespace. /[\0- \u007F]/.test(node.url) ) { subexit = state.enter("destinationLiteral"); value += tracker.move("<"); value += tracker.move( state.safe(node.url, { before: value, after: ">", ...tracker.current() }) ); value += tracker.move(">"); } else { subexit = state.enter("destinationRaw"); value += tracker.move( state.safe(node.url, { before: value, after: node.title ? " " : ")", ...tracker.current() }) ); } subexit(); if (node.title) { subexit = state.enter(`title${suffix}`); value += tracker.move(" " + quote); value += tracker.move( state.safe(node.title, { before: value, after: quote, ...tracker.current() }) ); value += tracker.move(quote); subexit(); } value += tracker.move(")"); exit2(); return value; } function linkPeek(node, _, state) { return formatLinkAsAutolink(node, state) ? "<" : "["; } // node_modules/mdast-util-to-markdown/lib/handle/link-reference.js linkReference.peek = linkReferencePeek; function linkReference(node, _, state, info) { const type = node.referenceType; const exit2 = state.enter("linkReference"); let subexit = state.enter("label"); const tracker = state.createTracker(info); let value = tracker.move("["); const text3 = state.containerPhrasing(node, { before: value, after: "]", ...tracker.current() }); value += tracker.move(text3 + "]["); subexit(); const stack = state.stack; state.stack = []; subexit = state.enter("reference"); const reference = state.safe(state.associationId(node), { before: value, after: "]", ...tracker.current() }); subexit(); state.stack = stack; exit2(); if (type === "full" || !text3 || text3 !== reference) { value += tracker.move(reference + "]"); } else if (type === "shortcut") { value = value.slice(0, -1); } else { value += tracker.move("]"); } return value; } function linkReferencePeek() { return "["; } // node_modules/mdast-util-to-markdown/lib/util/check-bullet.js function checkBullet(state) { const marker = state.options.bullet || "*"; if (marker !== "*" && marker !== "+" && marker !== "-") { throw new Error( "Cannot serialize items with `" + marker + "` for `options.bullet`, expected `*`, `+`, or `-`" ); } return marker; } // node_modules/mdast-util-to-markdown/lib/util/check-bullet-other.js function checkBulletOther(state) { const bullet = checkBullet(state); const bulletOther = state.options.bulletOther; if (!bulletOther) { return bullet === "*" ? "-" : "*"; } if (bulletOther !== "*" && bulletOther !== "+" && bulletOther !== "-") { throw new Error( "Cannot serialize items with `" + bulletOther + "` for `options.bulletOther`, expected `*`, `+`, or `-`" ); } if (bulletOther === bullet) { throw new Error( "Expected `bullet` (`" + bullet + "`) and `bulletOther` (`" + bulletOther + "`) to be different" ); } return bulletOther; } // node_modules/mdast-util-to-markdown/lib/util/check-bullet-ordered.js function checkBulletOrdered(state) { const marker = state.options.bulletOrdered || "."; if (marker !== "." && marker !== ")") { throw new Error( "Cannot serialize items with `" + marker + "` for `options.bulletOrdered`, expected `.` or `)`" ); } return marker; } // node_modules/mdast-util-to-markdown/lib/util/check-rule.js function checkRule(state) { const marker = state.options.rule || "*"; if (marker !== "*" && marker !== "-" && marker !== "_") { throw new Error( "Cannot serialize rules with `" + marker + "` for `options.rule`, expected `*`, `-`, or `_`" ); } return marker; } // node_modules/mdast-util-to-markdown/lib/handle/list.js function list(node, parent, state, info) { const exit2 = state.enter("list"); const bulletCurrent = state.bulletCurrent; let bullet = node.ordered ? checkBulletOrdered(state) : checkBullet(state); const bulletOther = node.ordered ? bullet === "." ? ")" : "." : checkBulletOther(state); let useDifferentMarker = parent && state.bulletLastUsed ? bullet === state.bulletLastUsed : false; if (!node.ordered) { const firstListItem = node.children ? node.children[0] : void 0; if ( // Bullet could be used as a thematic break marker: (bullet === "*" || bullet === "-") && // Empty first list item: firstListItem && (!firstListItem.children || !firstListItem.children[0]) && // Directly in two other list items: state.stack[state.stack.length - 1] === "list" && state.stack[state.stack.length - 2] === "listItem" && state.stack[state.stack.length - 3] === "list" && state.stack[state.stack.length - 4] === "listItem" && // That are each the first child. state.indexStack[state.indexStack.length - 1] === 0 && state.indexStack[state.indexStack.length - 2] === 0 && state.indexStack[state.indexStack.length - 3] === 0 ) { useDifferentMarker = true; } if (checkRule(state) === bullet && firstListItem) { let index = -1; while (++index < node.children.length) { const item = node.children[index]; if (item && item.type === "listItem" && item.children && item.children[0] && item.children[0].type === "thematicBreak") { useDifferentMarker = true; break; } } } } if (useDifferentMarker) { bullet = bulletOther; } state.bulletCurrent = bullet; const value = state.containerFlow(node, info); state.bulletLastUsed = bullet; state.bulletCurrent = bulletCurrent; exit2(); return value; } // node_modules/mdast-util-to-markdown/lib/util/check-list-item-indent.js function checkListItemIndent(state) { const style = state.options.listItemIndent || "one"; if (style !== "tab" && style !== "one" && style !== "mixed") { throw new Error( "Cannot serialize items with `" + style + "` for `options.listItemIndent`, expected `tab`, `one`, or `mixed`" ); } return style; } // node_modules/mdast-util-to-markdown/lib/handle/list-item.js function listItem(node, parent, state, info) { const listItemIndent = checkListItemIndent(state); let bullet = state.bulletCurrent || checkBullet(state); if (parent && parent.type === "list" && parent.ordered) { bullet = (typeof parent.start === "number" && parent.start > -1 ? parent.start : 1) + (state.options.incrementListMarker === false ? 0 : parent.children.indexOf(node)) + bullet; } let size = bullet.length + 1; if (listItemIndent === "tab" || listItemIndent === "mixed" && (parent && parent.type === "list" && parent.spread || node.spread)) { size = Math.ceil(size / 4) * 4; } const tracker = state.createTracker(info); tracker.move(bullet + " ".repeat(size - bullet.length)); tracker.shift(size); const exit2 = state.enter("listItem"); const value = state.indentLines( state.containerFlow(node, tracker.current()), map3 ); exit2(); return value; function map3(line, index, blank) { if (index) { return (blank ? "" : " ".repeat(size)) + line; } return (blank ? bullet : bullet + " ".repeat(size - bullet.length)) + line; } } // node_modules/mdast-util-to-markdown/lib/handle/paragraph.js function paragraph(node, _, state, info) { const exit2 = state.enter("paragraph"); const subexit = state.enter("phrasing"); const value = state.containerPhrasing(node, info); subexit(); exit2(); return value; } // node_modules/mdast-util-phrasing/lib/index.js var phrasing = ( /** @type {(node?: unknown) => node is Exclude} */ convert([ "break", "delete", "emphasis", // To do: next major: removed since footnotes were added to GFM. "footnote", "footnoteReference", "image", "imageReference", "inlineCode", // Enabled by `mdast-util-math`: "inlineMath", "link", "linkReference", // Enabled by `mdast-util-mdx`: "mdxJsxTextElement", // Enabled by `mdast-util-mdx`: "mdxTextExpression", "strong", "text", // Enabled by `mdast-util-directive`: "textDirective" ]) ); // node_modules/mdast-util-to-markdown/lib/handle/root.js function root(node, _, state, info) { const hasPhrasing = node.children.some(function(d) { return phrasing(d); }); const container = hasPhrasing ? state.containerPhrasing : state.containerFlow; return container.call(state, node, info); } // node_modules/mdast-util-to-markdown/lib/util/check-strong.js function checkStrong(state) { const marker = state.options.strong || "*"; if (marker !== "*" && marker !== "_") { throw new Error( "Cannot serialize strong with `" + marker + "` for `options.strong`, expected `*`, or `_`" ); } return marker; } // node_modules/mdast-util-to-markdown/lib/handle/strong.js strong.peek = strongPeek; function strong(node, _, state, info) { const marker = checkStrong(state); const exit2 = state.enter("strong"); const tracker = state.createTracker(info); const before = tracker.move(marker + marker); let between = tracker.move( state.containerPhrasing(node, { after: marker, before, ...tracker.current() }) ); const betweenHead = between.charCodeAt(0); const open = encodeInfo( info.before.charCodeAt(info.before.length - 1), betweenHead, marker ); if (open.inside) { between = encodeCharacterReference(betweenHead) + between.slice(1); } const betweenTail = between.charCodeAt(between.length - 1); const close = encodeInfo(info.after.charCodeAt(0), betweenTail, marker); if (close.inside) { between = between.slice(0, -1) + encodeCharacterReference(betweenTail); } const after = tracker.move(marker + marker); exit2(); state.attentionEncodeSurroundingInfo = { after: close.outside, before: open.outside }; return before + between + after; } function strongPeek(_, _1, state) { return state.options.strong || "*"; } // node_modules/mdast-util-to-markdown/lib/handle/text.js function text(node, _, state, info) { return state.safe(node.value, info); } // node_modules/mdast-util-to-markdown/lib/util/check-rule-repetition.js function checkRuleRepetition(state) { const repetition = state.options.ruleRepetition || 3; if (repetition < 3) { throw new Error( "Cannot serialize rules with repetition `" + repetition + "` for `options.ruleRepetition`, expected `3` or more" ); } return repetition; } // node_modules/mdast-util-to-markdown/lib/handle/thematic-break.js function thematicBreak(_, _1, state) { const value = (checkRule(state) + (state.options.ruleSpaces ? " " : "")).repeat(checkRuleRepetition(state)); return state.options.ruleSpaces ? value.slice(0, -1) : value; } // node_modules/mdast-util-to-markdown/lib/handle/index.js var handle = { blockquote, break: hardBreak, code, definition, emphasis, hardBreak, heading, html, image, imageReference, inlineCode, link, linkReference, list, listItem, paragraph, root, strong, text, thematicBreak }; // node_modules/mdast-util-gfm-table/lib/index.js function gfmTableFromMarkdown() { return { enter: { table: enterTable, tableData: enterCell, tableHeader: enterCell, tableRow: enterRow }, exit: { codeText: exitCodeText, table: exitTable, tableData: exit, tableHeader: exit, tableRow: exit } }; } function enterTable(token) { const align = token._align; ok(align, "expected `_align` on table"); this.enter( { type: "table", align: align.map(function(d) { return d === "none" ? null : d; }), children: [] }, token ); this.data.inTable = true; } function exitTable(token) { this.exit(token); this.data.inTable = void 0; } function enterRow(token) { this.enter({ type: "tableRow", children: [] }, token); } function exit(token) { this.exit(token); } function enterCell(token) { this.enter({ type: "tableCell", children: [] }, token); } function exitCodeText(token) { let value = this.resume(); if (this.data.inTable) { value = value.replace(/\\([\\|])/g, replace); } const node = this.stack[this.stack.length - 1]; ok(node.type === "inlineCode"); node.value = value; this.exit(token); } function replace($0, $1) { return $1 === "|" ? $1 : $0; } function gfmTableToMarkdown(options) { const settings = options || {}; const padding = settings.tableCellPadding; const alignDelimiters = settings.tablePipeAlign; const stringLength = settings.stringLength; const around = padding ? " " : "|"; return { unsafe: [ { character: "\r", inConstruct: "tableCell" }, { character: "\n", inConstruct: "tableCell" }, // A pipe, when followed by a tab or space (padding), or a dash or colon // (unpadded delimiter row), could result in a table. { atBreak: true, character: "|", after: "[ :-]" }, // A pipe in a cell must be encoded. { character: "|", inConstruct: "tableCell" }, // A colon must be followed by a dash, in which case it could start a // delimiter row. { atBreak: true, character: ":", after: "-" }, // A delimiter row can also start with a dash, when followed by more // dashes, a colon, or a pipe. // This is a stricter version than the built in check for lists, thematic // breaks, and setex heading underlines though: // { atBreak: true, character: "-", after: "[:|-]" } ], handlers: { inlineCode: inlineCodeWithTable, table: handleTable, tableCell: handleTableCell, tableRow: handleTableRow } }; function handleTable(node, _, state, info) { return serializeData(handleTableAsData(node, state, info), node.align); } function handleTableRow(node, _, state, info) { const row = handleTableRowAsData(node, state, info); const value = serializeData([row]); return value.slice(0, value.indexOf("\n")); } function handleTableCell(node, _, state, info) { const exit2 = state.enter("tableCell"); const subexit = state.enter("phrasing"); const value = state.containerPhrasing(node, { ...info, before: around, after: around }); subexit(); exit2(); return value; } function serializeData(matrix, align) { return markdownTable(matrix, { align, // @ts-expect-error: `markdown-table` types should support `null`. alignDelimiters, // @ts-expect-error: `markdown-table` types should support `null`. padding, // @ts-expect-error: `markdown-table` types should support `null`. stringLength }); } function handleTableAsData(node, state, info) { const children = node.children; let index = -1; const result = []; const subexit = state.enter("table"); while (++index < children.length) { result[index] = handleTableRowAsData(children[index], state, info); } subexit(); return result; } function handleTableRowAsData(node, state, info) { const children = node.children; let index = -1; const result = []; const subexit = state.enter("tableRow"); while (++index < children.length) { result[index] = handleTableCell(children[index], node, state, info); } subexit(); return result; } function inlineCodeWithTable(node, parent, state) { let value = handle.inlineCode(node, parent, state); if (state.stack.includes("tableCell")) { value = value.replace(/\|/g, "\\$&"); } return value; } } // node_modules/mdast-util-gfm-task-list-item/lib/index.js function gfmTaskListItemFromMarkdown() { return { exit: { taskListCheckValueChecked: exitCheck, taskListCheckValueUnchecked: exitCheck, paragraph: exitParagraphWithTaskListItem } }; } function gfmTaskListItemToMarkdown() { return { unsafe: [{ atBreak: true, character: "-", after: "[:|-]" }], handlers: { listItem: listItemWithTaskListItem } }; } function exitCheck(token) { const node = this.stack[this.stack.length - 2]; ok(node.type === "listItem"); node.checked = token.type === "taskListCheckValueChecked"; } function exitParagraphWithTaskListItem(token) { const parent = this.stack[this.stack.length - 2]; if (parent && parent.type === "listItem" && typeof parent.checked === "boolean") { const node = this.stack[this.stack.length - 1]; ok(node.type === "paragraph"); const head = node.children[0]; if (head && head.type === "text") { const siblings = parent.children; let index = -1; let firstParaghraph; while (++index < siblings.length) { const sibling = siblings[index]; if (sibling.type === "paragraph") { firstParaghraph = sibling; break; } } if (firstParaghraph === node) { head.value = head.value.slice(1); if (head.value.length === 0) { node.children.shift(); } else if (node.position && head.position && typeof head.position.start.offset === "number") { head.position.start.column++; head.position.start.offset++; node.position.start = Object.assign({}, head.position.start); } } } } this.exit(token); } function listItemWithTaskListItem(node, parent, state, info) { const head = node.children[0]; const checkable = typeof node.checked === "boolean" && head && head.type === "paragraph"; const checkbox = "[" + (node.checked ? "x" : " ") + "] "; const tracker = state.createTracker(info); if (checkable) { tracker.move(checkbox); } let value = handle.listItem(node, parent, state, { ...info, ...tracker.current() }); if (checkable) { value = value.replace(/^(?:[*+-]|\d+\.)([\r\n]| {1,3})/, check); } return value; function check($0) { return $0 + checkbox; } } // node_modules/mdast-util-gfm/lib/index.js function gfmFromMarkdown() { return [ gfmAutolinkLiteralFromMarkdown(), gfmFootnoteFromMarkdown(), gfmStrikethroughFromMarkdown(), gfmTableFromMarkdown(), gfmTaskListItemFromMarkdown() ]; } function gfmToMarkdown(options) { return { extensions: [ gfmAutolinkLiteralToMarkdown(), gfmFootnoteToMarkdown(options), gfmStrikethroughToMarkdown(), gfmTableToMarkdown(options), gfmTaskListItemToMarkdown() ] }; } // node_modules/micromark-extension-gfm-autolink-literal/dev/lib/syntax.js var wwwPrefix = { tokenize: tokenizeWwwPrefix, partial: true }; var domain = { tokenize: tokenizeDomain, partial: true }; var path = { tokenize: tokenizePath, partial: true }; var trail = { tokenize: tokenizeTrail, partial: true }; var emailDomainDotTrail = { tokenize: tokenizeEmailDomainDotTrail, partial: true }; var wwwAutolink = { name: "wwwAutolink", tokenize: tokenizeWwwAutolink, previous: previousWww }; var protocolAutolink = { name: "protocolAutolink", tokenize: tokenizeProtocolAutolink, previous: previousProtocol }; var emailAutolink = { name: "emailAutolink", tokenize: tokenizeEmailAutolink, previous: previousEmail }; var text2 = {}; function gfmAutolinkLiteral() { return { text: text2 }; } var code2 = codes.digit0; while (code2 < codes.leftCurlyBrace) { text2[code2] = emailAutolink; code2++; if (code2 === codes.colon) code2 = codes.uppercaseA; else if (code2 === codes.leftSquareBracket) code2 = codes.lowercaseA; } text2[codes.plusSign] = emailAutolink; text2[codes.dash] = emailAutolink; text2[codes.dot] = emailAutolink; text2[codes.underscore] = emailAutolink; text2[codes.uppercaseH] = [emailAutolink, protocolAutolink]; text2[codes.lowercaseH] = [emailAutolink, protocolAutolink]; text2[codes.uppercaseW] = [emailAutolink, wwwAutolink]; text2[codes.lowercaseW] = [emailAutolink, wwwAutolink]; function tokenizeEmailAutolink(effects, ok2, nok) { const self = this; let dot; let data; return start; function start(code3) { if (!gfmAtext(code3) || !previousEmail.call(self, self.previous) || previousUnbalanced(self.events)) { return nok(code3); } effects.enter("literalAutolink"); effects.enter("literalAutolinkEmail"); return atext(code3); } function atext(code3) { if (gfmAtext(code3)) { effects.consume(code3); return atext; } if (code3 === codes.atSign) { effects.consume(code3); return emailDomain; } return nok(code3); } function emailDomain(code3) { if (code3 === codes.dot) { return effects.check( emailDomainDotTrail, emailDomainAfter, emailDomainDot )(code3); } if (code3 === codes.dash || code3 === codes.underscore || asciiAlphanumeric(code3)) { data = true; effects.consume(code3); return emailDomain; } return emailDomainAfter(code3); } function emailDomainDot(code3) { effects.consume(code3); dot = true; return emailDomain; } function emailDomainAfter(code3) { if (data && dot && asciiAlpha(self.previous)) { effects.exit("literalAutolinkEmail"); effects.exit("literalAutolink"); return ok2(code3); } return nok(code3); } } function tokenizeWwwAutolink(effects, ok2, nok) { const self = this; return wwwStart; function wwwStart(code3) { if (code3 !== codes.uppercaseW && code3 !== codes.lowercaseW || !previousWww.call(self, self.previous) || previousUnbalanced(self.events)) { return nok(code3); } effects.enter("literalAutolink"); effects.enter("literalAutolinkWww"); return effects.check( wwwPrefix, effects.attempt(domain, effects.attempt(path, wwwAfter), nok), nok )(code3); } function wwwAfter(code3) { effects.exit("literalAutolinkWww"); effects.exit("literalAutolink"); return ok2(code3); } } function tokenizeProtocolAutolink(effects, ok2, nok) { const self = this; let buffer = ""; let seen = false; return protocolStart; function protocolStart(code3) { if ((code3 === codes.uppercaseH || code3 === codes.lowercaseH) && previousProtocol.call(self, self.previous) && !previousUnbalanced(self.events)) { effects.enter("literalAutolink"); effects.enter("literalAutolinkHttp"); buffer += String.fromCodePoint(code3); effects.consume(code3); return protocolPrefixInside; } return nok(code3); } function protocolPrefixInside(code3) { if (asciiAlpha(code3) && buffer.length < 5) { buffer += String.fromCodePoint(code3); effects.consume(code3); return protocolPrefixInside; } if (code3 === codes.colon) { const protocol = buffer.toLowerCase(); if (protocol === "http" || protocol === "https") { effects.consume(code3); return protocolSlashesInside; } } return nok(code3); } function protocolSlashesInside(code3) { if (code3 === codes.slash) { effects.consume(code3); if (seen) { return afterProtocol; } seen = true; return protocolSlashesInside; } return nok(code3); } function afterProtocol(code3) { return code3 === codes.eof || asciiControl(code3) || markdownLineEndingOrSpace(code3) || unicodeWhitespace(code3) || unicodePunctuation(code3) ? nok(code3) : effects.attempt(domain, effects.attempt(path, protocolAfter), nok)(code3); } function protocolAfter(code3) { effects.exit("literalAutolinkHttp"); effects.exit("literalAutolink"); return ok2(code3); } } function tokenizeWwwPrefix(effects, ok2, nok) { let size = 0; return wwwPrefixInside; function wwwPrefixInside(code3) { if ((code3 === codes.uppercaseW || code3 === codes.lowercaseW) && size < 3) { size++; effects.consume(code3); return wwwPrefixInside; } if (code3 === codes.dot && size === 3) { effects.consume(code3); return wwwPrefixAfter; } return nok(code3); } function wwwPrefixAfter(code3) { return code3 === codes.eof ? nok(code3) : ok2(code3); } } function tokenizeDomain(effects, ok2, nok) { let underscoreInLastSegment; let underscoreInLastLastSegment; let seen; return domainInside; function domainInside(code3) { if (code3 === codes.dot || code3 === codes.underscore) { return effects.check(trail, domainAfter, domainAtPunctuation)(code3); } if (code3 === codes.eof || markdownLineEndingOrSpace(code3) || unicodeWhitespace(code3) || code3 !== codes.dash && unicodePunctuation(code3)) { return domainAfter(code3); } seen = true; effects.consume(code3); return domainInside; } function domainAtPunctuation(code3) { if (code3 === codes.underscore) { underscoreInLastSegment = true; } else { underscoreInLastLastSegment = underscoreInLastSegment; underscoreInLastSegment = void 0; } effects.consume(code3); return domainInside; } function domainAfter(code3) { if (underscoreInLastLastSegment || underscoreInLastSegment || !seen) { return nok(code3); } return ok2(code3); } } function tokenizePath(effects, ok2) { let sizeOpen = 0; let sizeClose = 0; return pathInside; function pathInside(code3) { if (code3 === codes.leftParenthesis) { sizeOpen++; effects.consume(code3); return pathInside; } if (code3 === codes.rightParenthesis && sizeClose < sizeOpen) { return pathAtPunctuation(code3); } if (code3 === codes.exclamationMark || code3 === codes.quotationMark || code3 === codes.ampersand || code3 === codes.apostrophe || code3 === codes.rightParenthesis || code3 === codes.asterisk || code3 === codes.comma || code3 === codes.dot || code3 === codes.colon || code3 === codes.semicolon || code3 === codes.lessThan || code3 === codes.questionMark || code3 === codes.rightSquareBracket || code3 === codes.underscore || code3 === codes.tilde) { return effects.check(trail, ok2, pathAtPunctuation)(code3); } if (code3 === codes.eof || markdownLineEndingOrSpace(code3) || unicodeWhitespace(code3)) { return ok2(code3); } effects.consume(code3); return pathInside; } function pathAtPunctuation(code3) { if (code3 === codes.rightParenthesis) { sizeClose++; } effects.consume(code3); return pathInside; } } function tokenizeTrail(effects, ok2, nok) { return trail2; function trail2(code3) { if (code3 === codes.exclamationMark || code3 === codes.quotationMark || code3 === codes.apostrophe || code3 === codes.rightParenthesis || code3 === codes.asterisk || code3 === codes.comma || code3 === codes.dot || code3 === codes.colon || code3 === codes.semicolon || code3 === codes.questionMark || code3 === codes.underscore || code3 === codes.tilde) { effects.consume(code3); return trail2; } if (code3 === codes.ampersand) { effects.consume(code3); return trailCharacterReferenceStart; } if (code3 === codes.rightSquareBracket) { effects.consume(code3); return trailBracketAfter; } if ( // `<` is an end. code3 === codes.lessThan || // So is whitespace. code3 === codes.eof || markdownLineEndingOrSpace(code3) || unicodeWhitespace(code3) ) { return ok2(code3); } return nok(code3); } function trailBracketAfter(code3) { if (code3 === codes.eof || code3 === codes.leftParenthesis || code3 === codes.leftSquareBracket || markdownLineEndingOrSpace(code3) || unicodeWhitespace(code3)) { return ok2(code3); } return trail2(code3); } function trailCharacterReferenceStart(code3) { return asciiAlpha(code3) ? trailCharacterReferenceInside(code3) : nok(code3); } function trailCharacterReferenceInside(code3) { if (code3 === codes.semicolon) { effects.consume(code3); return trail2; } if (asciiAlpha(code3)) { effects.consume(code3); return trailCharacterReferenceInside; } return nok(code3); } } function tokenizeEmailDomainDotTrail(effects, ok2, nok) { return start; function start(code3) { effects.consume(code3); return after; } function after(code3) { return asciiAlphanumeric(code3) ? nok(code3) : ok2(code3); } } function previousWww(code3) { return code3 === codes.eof || code3 === codes.leftParenthesis || code3 === codes.asterisk || code3 === codes.underscore || code3 === codes.leftSquareBracket || code3 === codes.rightSquareBracket || code3 === codes.tilde || markdownLineEndingOrSpace(code3); } function previousProtocol(code3) { return !asciiAlpha(code3); } function previousEmail(code3) { return !(code3 === codes.slash || gfmAtext(code3)); } function gfmAtext(code3) { return code3 === codes.plusSign || code3 === codes.dash || code3 === codes.dot || code3 === codes.underscore || asciiAlphanumeric(code3); } function previousUnbalanced(events) { let index = events.length; let result = false; while (index--) { const token = events[index][1]; if ((token.type === "labelLink" || token.type === "labelImage") && !token._balanced) { result = true; break; } if (token._gfmAutolinkLiteralWalkedInto) { result = false; break; } } if (events.length > 0 && !result) { events[events.length - 1][1]._gfmAutolinkLiteralWalkedInto = true; } return result; } // node_modules/micromark-extension-gfm-footnote/dev/lib/syntax.js var indent = { tokenize: tokenizeIndent, partial: true }; function gfmFootnote() { return { document: { [codes.leftSquareBracket]: { name: "gfmFootnoteDefinition", tokenize: tokenizeDefinitionStart, continuation: { tokenize: tokenizeDefinitionContinuation }, exit: gfmFootnoteDefinitionEnd } }, text: { [codes.leftSquareBracket]: { name: "gfmFootnoteCall", tokenize: tokenizeGfmFootnoteCall }, [codes.rightSquareBracket]: { name: "gfmPotentialFootnoteCall", add: "after", tokenize: tokenizePotentialGfmFootnoteCall, resolveTo: resolveToPotentialGfmFootnoteCall } } }; } function tokenizePotentialGfmFootnoteCall(effects, ok2, nok) { const self = this; let index = self.events.length; const defined = self.parser.gfmFootnotes || (self.parser.gfmFootnotes = []); let labelStart; while (index--) { const token = self.events[index][1]; if (token.type === types.labelImage) { labelStart = token; break; } if (token.type === "gfmFootnoteCall" || token.type === types.labelLink || token.type === types.label || token.type === types.image || token.type === types.link) { break; } } return start; function start(code3) { ok(code3 === codes.rightSquareBracket, "expected `]`"); if (!labelStart || !labelStart._balanced) { return nok(code3); } const id = normalizeIdentifier( self.sliceSerialize({ start: labelStart.end, end: self.now() }) ); if (id.codePointAt(0) !== codes.caret || !defined.includes(id.slice(1))) { return nok(code3); } effects.enter("gfmFootnoteCallLabelMarker"); effects.consume(code3); effects.exit("gfmFootnoteCallLabelMarker"); return ok2(code3); } } function resolveToPotentialGfmFootnoteCall(events, context) { let index = events.length; let labelStart; while (index--) { if (events[index][1].type === types.labelImage && events[index][0] === "enter") { labelStart = events[index][1]; break; } } ok(labelStart, "expected `labelStart` to resolve"); events[index + 1][1].type = types.data; events[index + 3][1].type = "gfmFootnoteCallLabelMarker"; const call = { type: "gfmFootnoteCall", start: Object.assign({}, events[index + 3][1].start), end: Object.assign({}, events[events.length - 1][1].end) }; const marker = { type: "gfmFootnoteCallMarker", start: Object.assign({}, events[index + 3][1].end), end: Object.assign({}, events[index + 3][1].end) }; marker.end.column++; marker.end.offset++; marker.end._bufferIndex++; const string = { type: "gfmFootnoteCallString", start: Object.assign({}, marker.end), end: Object.assign({}, events[events.length - 1][1].start) }; const chunk = { type: types.chunkString, contentType: "string", start: Object.assign({}, string.start), end: Object.assign({}, string.end) }; const replacement = [ // Take the `labelImageMarker` (now `data`, the `!`) events[index + 1], events[index + 2], ["enter", call, context], // The `[` events[index + 3], events[index + 4], // The `^`. ["enter", marker, context], ["exit", marker, context], // Everything in between. ["enter", string, context], ["enter", chunk, context], ["exit", chunk, context], ["exit", string, context], // The ending (`]`, properly parsed and labelled). events[events.length - 2], events[events.length - 1], ["exit", call, context] ]; events.splice(index, events.length - index + 1, ...replacement); return events; } function tokenizeGfmFootnoteCall(effects, ok2, nok) { const self = this; const defined = self.parser.gfmFootnotes || (self.parser.gfmFootnotes = []); let size = 0; let data; return start; function start(code3) { ok(code3 === codes.leftSquareBracket, "expected `[`"); effects.enter("gfmFootnoteCall"); effects.enter("gfmFootnoteCallLabelMarker"); effects.consume(code3); effects.exit("gfmFootnoteCallLabelMarker"); return callStart; } function callStart(code3) { if (code3 !== codes.caret) return nok(code3); effects.enter("gfmFootnoteCallMarker"); effects.consume(code3); effects.exit("gfmFootnoteCallMarker"); effects.enter("gfmFootnoteCallString"); effects.enter("chunkString").contentType = "string"; return callData; } function callData(code3) { if ( // Too long. size > constants.linkReferenceSizeMax || // Closing brace with nothing. code3 === codes.rightSquareBracket && !data || // Space or tab is not supported by GFM for some reason. // `\n` and `[` not being supported makes sense. code3 === codes.eof || code3 === codes.leftSquareBracket || markdownLineEndingOrSpace(code3) ) { return nok(code3); } if (code3 === codes.rightSquareBracket) { effects.exit("chunkString"); const token = effects.exit("gfmFootnoteCallString"); if (!defined.includes(normalizeIdentifier(self.sliceSerialize(token)))) { return nok(code3); } effects.enter("gfmFootnoteCallLabelMarker"); effects.consume(code3); effects.exit("gfmFootnoteCallLabelMarker"); effects.exit("gfmFootnoteCall"); return ok2; } if (!markdownLineEndingOrSpace(code3)) { data = true; } size++; effects.consume(code3); return code3 === codes.backslash ? callEscape : callData; } function callEscape(code3) { if (code3 === codes.leftSquareBracket || code3 === codes.backslash || code3 === codes.rightSquareBracket) { effects.consume(code3); size++; return callData; } return callData(code3); } } function tokenizeDefinitionStart(effects, ok2, nok) { const self = this; const defined = self.parser.gfmFootnotes || (self.parser.gfmFootnotes = []); let identifier; let size = 0; let data; return start; function start(code3) { ok(code3 === codes.leftSquareBracket, "expected `[`"); effects.enter("gfmFootnoteDefinition")._container = true; effects.enter("gfmFootnoteDefinitionLabel"); effects.enter("gfmFootnoteDefinitionLabelMarker"); effects.consume(code3); effects.exit("gfmFootnoteDefinitionLabelMarker"); return labelAtMarker; } function labelAtMarker(code3) { if (code3 === codes.caret) { effects.enter("gfmFootnoteDefinitionMarker"); effects.consume(code3); effects.exit("gfmFootnoteDefinitionMarker"); effects.enter("gfmFootnoteDefinitionLabelString"); effects.enter("chunkString").contentType = "string"; return labelInside; } return nok(code3); } function labelInside(code3) { if ( // Too long. size > constants.linkReferenceSizeMax || // Closing brace with nothing. code3 === codes.rightSquareBracket && !data || // Space or tab is not supported by GFM for some reason. // `\n` and `[` not being supported makes sense. code3 === codes.eof || code3 === codes.leftSquareBracket || markdownLineEndingOrSpace(code3) ) { return nok(code3); } if (code3 === codes.rightSquareBracket) { effects.exit("chunkString"); const token = effects.exit("gfmFootnoteDefinitionLabelString"); identifier = normalizeIdentifier(self.sliceSerialize(token)); effects.enter("gfmFootnoteDefinitionLabelMarker"); effects.consume(code3); effects.exit("gfmFootnoteDefinitionLabelMarker"); effects.exit("gfmFootnoteDefinitionLabel"); return labelAfter; } if (!markdownLineEndingOrSpace(code3)) { data = true; } size++; effects.consume(code3); return code3 === codes.backslash ? labelEscape : labelInside; } function labelEscape(code3) { if (code3 === codes.leftSquareBracket || code3 === codes.backslash || code3 === codes.rightSquareBracket) { effects.consume(code3); size++; return labelInside; } return labelInside(code3); } function labelAfter(code3) { if (code3 === codes.colon) { effects.enter("definitionMarker"); effects.consume(code3); effects.exit("definitionMarker"); if (!defined.includes(identifier)) { defined.push(identifier); } return factorySpace( effects, whitespaceAfter, "gfmFootnoteDefinitionWhitespace" ); } return nok(code3); } function whitespaceAfter(code3) { return ok2(code3); } } function tokenizeDefinitionContinuation(effects, ok2, nok) { return effects.check(blankLine, ok2, effects.attempt(indent, ok2, nok)); } function gfmFootnoteDefinitionEnd(effects) { effects.exit("gfmFootnoteDefinition"); } function tokenizeIndent(effects, ok2, nok) { const self = this; return factorySpace( effects, afterPrefix, "gfmFootnoteDefinitionIndent", constants.tabSize + 1 ); function afterPrefix(code3) { const tail = self.events[self.events.length - 1]; return tail && tail[1].type === "gfmFootnoteDefinitionIndent" && tail[2].sliceSerialize(tail[1], true).length === constants.tabSize ? ok2(code3) : nok(code3); } } // node_modules/micromark-extension-gfm-footnote/dev/lib/html.js var own3 = {}.hasOwnProperty; // node_modules/micromark-extension-gfm-strikethrough/dev/lib/syntax.js function gfmStrikethrough(options) { const options_ = options || {}; let single = options_.singleTilde; const tokenizer = { name: "strikethrough", tokenize: tokenizeStrikethrough, resolveAll: resolveAllStrikethrough }; if (single === null || single === void 0) { single = true; } return { text: { [codes.tilde]: tokenizer }, insideSpan: { null: [tokenizer] }, attentionMarkers: { null: [codes.tilde] } }; function resolveAllStrikethrough(events, context) { let index = -1; while (++index < events.length) { if (events[index][0] === "enter" && events[index][1].type === "strikethroughSequenceTemporary" && events[index][1]._close) { let open = index; while (open--) { if (events[open][0] === "exit" && events[open][1].type === "strikethroughSequenceTemporary" && events[open][1]._open && // If the sizes are the same: events[index][1].end.offset - events[index][1].start.offset === events[open][1].end.offset - events[open][1].start.offset) { events[index][1].type = "strikethroughSequence"; events[open][1].type = "strikethroughSequence"; const strikethrough = { type: "strikethrough", start: Object.assign({}, events[open][1].start), end: Object.assign({}, events[index][1].end) }; const text3 = { type: "strikethroughText", start: Object.assign({}, events[open][1].end), end: Object.assign({}, events[index][1].start) }; const nextEvents = [ ["enter", strikethrough, context], ["enter", events[open][1], context], ["exit", events[open][1], context], ["enter", text3, context] ]; const insideSpan = context.parser.constructs.insideSpan.null; if (insideSpan) { splice( nextEvents, nextEvents.length, 0, resolveAll(insideSpan, events.slice(open + 1, index), context) ); } splice(nextEvents, nextEvents.length, 0, [ ["exit", text3, context], ["enter", events[index][1], context], ["exit", events[index][1], context], ["exit", strikethrough, context] ]); splice(events, open - 1, index - open + 3, nextEvents); index = open + nextEvents.length - 2; break; } } } } index = -1; while (++index < events.length) { if (events[index][1].type === "strikethroughSequenceTemporary") { events[index][1].type = types.data; } } return events; } function tokenizeStrikethrough(effects, ok2, nok) { const previous2 = this.previous; const events = this.events; let size = 0; return start; function start(code3) { ok(code3 === codes.tilde, "expected `~`"); if (previous2 === codes.tilde && events[events.length - 1][1].type !== types.characterEscape) { return nok(code3); } effects.enter("strikethroughSequenceTemporary"); return more(code3); } function more(code3) { const before = classifyCharacter(previous2); if (code3 === codes.tilde) { if (size > 1) return nok(code3); effects.consume(code3); size++; return more; } if (size < 2 && !single) return nok(code3); const token = effects.exit("strikethroughSequenceTemporary"); const after = classifyCharacter(code3); token._open = !after || after === constants.attentionSideAfter && Boolean(before); token._close = !before || before === constants.attentionSideAfter && Boolean(after); return ok2(code3); } } } // node_modules/micromark-extension-gfm-table/dev/lib/edit-map.js var EditMap = class { /** * Create a new edit map. */ constructor() { this.map = []; } /** * Create an edit: a remove and/or add at a certain place. * * @param {number} index * @param {number} remove * @param {Array} add * @returns {undefined} */ add(index, remove, add) { addImplementation(this, index, remove, add); } // To do: add this when moving to `micromark`. // /** // * Create an edit: but insert `add` before existing additions. // * // * @param {number} index // * @param {number} remove // * @param {Array} add // * @returns {undefined} // */ // addBefore(index, remove, add) { // addImplementation(this, index, remove, add, true) // } /** * Done, change the events. * * @param {Array} events * @returns {undefined} */ consume(events) { this.map.sort(function(a, b) { return a[0] - b[0]; }); if (this.map.length === 0) { return; } let index = this.map.length; const vecs = []; while (index > 0) { index -= 1; vecs.push( events.slice(this.map[index][0] + this.map[index][1]), this.map[index][2] ); events.length = this.map[index][0]; } vecs.push(events.slice()); events.length = 0; let slice = vecs.pop(); while (slice) { for (const element of slice) { events.push(element); } slice = vecs.pop(); } this.map.length = 0; } }; function addImplementation(editMap, at, remove, add) { let index = 0; if (remove === 0 && add.length === 0) { return; } while (index < editMap.map.length) { if (editMap.map[index][0] === at) { editMap.map[index][1] += remove; editMap.map[index][2].push(...add); return; } index += 1; } editMap.map.push([at, remove, add]); } // node_modules/micromark-extension-gfm-table/dev/lib/infer.js function gfmTableAlign(events, index) { ok(events[index][1].type === "table", "expected table"); let inDelimiterRow = false; const align = []; while (index < events.length) { const event = events[index]; if (inDelimiterRow) { if (event[0] === "enter") { if (event[1].type === "tableContent") { align.push( events[index + 1][1].type === "tableDelimiterMarker" ? "left" : "none" ); } } else if (event[1].type === "tableContent") { if (events[index - 1][1].type === "tableDelimiterMarker") { const alignIndex = align.length - 1; align[alignIndex] = align[alignIndex] === "left" ? "center" : "right"; } } else if (event[1].type === "tableDelimiterRow") { break; } } else if (event[0] === "enter" && event[1].type === "tableDelimiterRow") { inDelimiterRow = true; } index += 1; } return align; } // node_modules/micromark-extension-gfm-table/dev/lib/syntax.js function gfmTable() { return { flow: { null: { name: "table", tokenize: tokenizeTable, resolveAll: resolveTable } } }; } function tokenizeTable(effects, ok2, nok) { const self = this; let size = 0; let sizeB = 0; let seen; return start; function start(code3) { let index = self.events.length - 1; while (index > -1) { const type = self.events[index][1].type; if (type === types.lineEnding || // Note: markdown-rs uses `whitespace` instead of `linePrefix` type === types.linePrefix) index--; else break; } const tail = index > -1 ? self.events[index][1].type : null; const next = tail === "tableHead" || tail === "tableRow" ? bodyRowStart : headRowBefore; if (next === bodyRowStart && self.parser.lazy[self.now().line]) { return nok(code3); } return next(code3); } function headRowBefore(code3) { effects.enter("tableHead"); effects.enter("tableRow"); return headRowStart(code3); } function headRowStart(code3) { if (code3 === codes.verticalBar) { return headRowBreak(code3); } seen = true; sizeB += 1; return headRowBreak(code3); } function headRowBreak(code3) { if (code3 === codes.eof) { return nok(code3); } if (markdownLineEnding(code3)) { if (sizeB > 1) { sizeB = 0; self.interrupt = true; effects.exit("tableRow"); effects.enter(types.lineEnding); effects.consume(code3); effects.exit(types.lineEnding); return headDelimiterStart; } return nok(code3); } if (markdownSpace(code3)) { return factorySpace(effects, headRowBreak, types.whitespace)(code3); } sizeB += 1; if (seen) { seen = false; size += 1; } if (code3 === codes.verticalBar) { effects.enter("tableCellDivider"); effects.consume(code3); effects.exit("tableCellDivider"); seen = true; return headRowBreak; } effects.enter(types.data); return headRowData(code3); } function headRowData(code3) { if (code3 === codes.eof || code3 === codes.verticalBar || markdownLineEndingOrSpace(code3)) { effects.exit(types.data); return headRowBreak(code3); } effects.consume(code3); return code3 === codes.backslash ? headRowEscape : headRowData; } function headRowEscape(code3) { if (code3 === codes.backslash || code3 === codes.verticalBar) { effects.consume(code3); return headRowData; } return headRowData(code3); } function headDelimiterStart(code3) { self.interrupt = false; if (self.parser.lazy[self.now().line]) { return nok(code3); } effects.enter("tableDelimiterRow"); seen = false; if (markdownSpace(code3)) { ok(self.parser.constructs.disable.null, "expected `disabled.null`"); return factorySpace( effects, headDelimiterBefore, types.linePrefix, self.parser.constructs.disable.null.includes("codeIndented") ? void 0 : constants.tabSize )(code3); } return headDelimiterBefore(code3); } function headDelimiterBefore(code3) { if (code3 === codes.dash || code3 === codes.colon) { return headDelimiterValueBefore(code3); } if (code3 === codes.verticalBar) { seen = true; effects.enter("tableCellDivider"); effects.consume(code3); effects.exit("tableCellDivider"); return headDelimiterCellBefore; } return headDelimiterNok(code3); } function headDelimiterCellBefore(code3) { if (markdownSpace(code3)) { return factorySpace( effects, headDelimiterValueBefore, types.whitespace )(code3); } return headDelimiterValueBefore(code3); } function headDelimiterValueBefore(code3) { if (code3 === codes.colon) { sizeB += 1; seen = true; effects.enter("tableDelimiterMarker"); effects.consume(code3); effects.exit("tableDelimiterMarker"); return headDelimiterLeftAlignmentAfter; } if (code3 === codes.dash) { sizeB += 1; return headDelimiterLeftAlignmentAfter(code3); } if (code3 === codes.eof || markdownLineEnding(code3)) { return headDelimiterCellAfter(code3); } return headDelimiterNok(code3); } function headDelimiterLeftAlignmentAfter(code3) { if (code3 === codes.dash) { effects.enter("tableDelimiterFiller"); return headDelimiterFiller(code3); } return headDelimiterNok(code3); } function headDelimiterFiller(code3) { if (code3 === codes.dash) { effects.consume(code3); return headDelimiterFiller; } if (code3 === codes.colon) { seen = true; effects.exit("tableDelimiterFiller"); effects.enter("tableDelimiterMarker"); effects.consume(code3); effects.exit("tableDelimiterMarker"); return headDelimiterRightAlignmentAfter; } effects.exit("tableDelimiterFiller"); return headDelimiterRightAlignmentAfter(code3); } function headDelimiterRightAlignmentAfter(code3) { if (markdownSpace(code3)) { return factorySpace( effects, headDelimiterCellAfter, types.whitespace )(code3); } return headDelimiterCellAfter(code3); } function headDelimiterCellAfter(code3) { if (code3 === codes.verticalBar) { return headDelimiterBefore(code3); } if (code3 === codes.eof || markdownLineEnding(code3)) { if (!seen || size !== sizeB) { return headDelimiterNok(code3); } effects.exit("tableDelimiterRow"); effects.exit("tableHead"); return ok2(code3); } return headDelimiterNok(code3); } function headDelimiterNok(code3) { return nok(code3); } function bodyRowStart(code3) { effects.enter("tableRow"); return bodyRowBreak(code3); } function bodyRowBreak(code3) { if (code3 === codes.verticalBar) { effects.enter("tableCellDivider"); effects.consume(code3); effects.exit("tableCellDivider"); return bodyRowBreak; } if (code3 === codes.eof || markdownLineEnding(code3)) { effects.exit("tableRow"); return ok2(code3); } if (markdownSpace(code3)) { return factorySpace(effects, bodyRowBreak, types.whitespace)(code3); } effects.enter(types.data); return bodyRowData(code3); } function bodyRowData(code3) { if (code3 === codes.eof || code3 === codes.verticalBar || markdownLineEndingOrSpace(code3)) { effects.exit(types.data); return bodyRowBreak(code3); } effects.consume(code3); return code3 === codes.backslash ? bodyRowEscape : bodyRowData; } function bodyRowEscape(code3) { if (code3 === codes.backslash || code3 === codes.verticalBar) { effects.consume(code3); return bodyRowData; } return bodyRowData(code3); } } function resolveTable(events, context) { let index = -1; let inFirstCellAwaitingPipe = true; let rowKind = 0; let lastCell = [0, 0, 0, 0]; let cell = [0, 0, 0, 0]; let afterHeadAwaitingFirstBodyRow = false; let lastTableEnd = 0; let currentTable; let currentBody; let currentCell; const map3 = new EditMap(); while (++index < events.length) { const event = events[index]; const token = event[1]; if (event[0] === "enter") { if (token.type === "tableHead") { afterHeadAwaitingFirstBodyRow = false; if (lastTableEnd !== 0) { ok(currentTable, "there should be a table opening"); flushTableEnd(map3, context, lastTableEnd, currentTable, currentBody); currentBody = void 0; lastTableEnd = 0; } currentTable = { type: "table", start: Object.assign({}, token.start), // Note: correct end is set later. end: Object.assign({}, token.end) }; map3.add(index, 0, [["enter", currentTable, context]]); } else if (token.type === "tableRow" || token.type === "tableDelimiterRow") { inFirstCellAwaitingPipe = true; currentCell = void 0; lastCell = [0, 0, 0, 0]; cell = [0, index + 1, 0, 0]; if (afterHeadAwaitingFirstBodyRow) { afterHeadAwaitingFirstBodyRow = false; currentBody = { type: "tableBody", start: Object.assign({}, token.start), // Note: correct end is set later. end: Object.assign({}, token.end) }; map3.add(index, 0, [["enter", currentBody, context]]); } rowKind = token.type === "tableDelimiterRow" ? 2 : currentBody ? 3 : 1; } else if (rowKind && (token.type === types.data || token.type === "tableDelimiterMarker" || token.type === "tableDelimiterFiller")) { inFirstCellAwaitingPipe = false; if (cell[2] === 0) { if (lastCell[1] !== 0) { cell[0] = cell[1]; currentCell = flushCell( map3, context, lastCell, rowKind, void 0, currentCell ); lastCell = [0, 0, 0, 0]; } cell[2] = index; } } else if (token.type === "tableCellDivider") { if (inFirstCellAwaitingPipe) { inFirstCellAwaitingPipe = false; } else { if (lastCell[1] !== 0) { cell[0] = cell[1]; currentCell = flushCell( map3, context, lastCell, rowKind, void 0, currentCell ); } lastCell = cell; cell = [lastCell[1], index, 0, 0]; } } } else if (token.type === "tableHead") { afterHeadAwaitingFirstBodyRow = true; lastTableEnd = index; } else if (token.type === "tableRow" || token.type === "tableDelimiterRow") { lastTableEnd = index; if (lastCell[1] !== 0) { cell[0] = cell[1]; currentCell = flushCell( map3, context, lastCell, rowKind, index, currentCell ); } else if (cell[1] !== 0) { currentCell = flushCell(map3, context, cell, rowKind, index, currentCell); } rowKind = 0; } else if (rowKind && (token.type === types.data || token.type === "tableDelimiterMarker" || token.type === "tableDelimiterFiller")) { cell[3] = index; } } if (lastTableEnd !== 0) { ok(currentTable, "expected table opening"); flushTableEnd(map3, context, lastTableEnd, currentTable, currentBody); } map3.consume(context.events); index = -1; while (++index < context.events.length) { const event = context.events[index]; if (event[0] === "enter" && event[1].type === "table") { event[1]._align = gfmTableAlign(context.events, index); } } return events; } function flushCell(map3, context, range, rowKind, rowEnd, previousCell) { const groupName = rowKind === 1 ? "tableHeader" : rowKind === 2 ? "tableDelimiter" : "tableData"; const valueName = "tableContent"; if (range[0] !== 0) { ok(previousCell, "expected previous cell enter"); previousCell.end = Object.assign({}, getPoint(context.events, range[0])); map3.add(range[0], 0, [["exit", previousCell, context]]); } const now = getPoint(context.events, range[1]); previousCell = { type: groupName, start: Object.assign({}, now), // Note: correct end is set later. end: Object.assign({}, now) }; map3.add(range[1], 0, [["enter", previousCell, context]]); if (range[2] !== 0) { const relatedStart = getPoint(context.events, range[2]); const relatedEnd = getPoint(context.events, range[3]); const valueToken = { type: valueName, start: Object.assign({}, relatedStart), end: Object.assign({}, relatedEnd) }; map3.add(range[2], 0, [["enter", valueToken, context]]); ok(range[3] !== 0); if (rowKind !== 2) { const start = context.events[range[2]]; const end = context.events[range[3]]; start[1].end = Object.assign({}, end[1].end); start[1].type = types.chunkText; start[1].contentType = constants.contentTypeText; if (range[3] > range[2] + 1) { const a = range[2] + 1; const b = range[3] - range[2] - 1; map3.add(a, b, []); } } map3.add(range[3] + 1, 0, [["exit", valueToken, context]]); } if (rowEnd !== void 0) { previousCell.end = Object.assign({}, getPoint(context.events, rowEnd)); map3.add(rowEnd, 0, [["exit", previousCell, context]]); previousCell = void 0; } return previousCell; } function flushTableEnd(map3, context, index, table, tableBody) { const exits = []; const related = getPoint(context.events, index); if (tableBody) { tableBody.end = Object.assign({}, related); exits.push(["exit", tableBody, context]); } table.end = Object.assign({}, related); exits.push(["exit", table, context]); map3.add(index + 1, 0, exits); } function getPoint(events, index) { const event = events[index]; const side = event[0] === "enter" ? "start" : "end"; return event[1][side]; } // node_modules/micromark-extension-gfm-tagfilter/lib/index.js var reFlow = /<(\/?)(iframe|noembed|noframes|plaintext|script|style|title|textarea|xmp)(?=[\t\n\f\r />])/gi; var reText = new RegExp("^" + reFlow.source, "i"); // node_modules/micromark-extension-gfm-task-list-item/dev/lib/syntax.js var tasklistCheck = { name: "tasklistCheck", tokenize: tokenizeTasklistCheck }; function gfmTaskListItem() { return { text: { [codes.leftSquareBracket]: tasklistCheck } }; } function tokenizeTasklistCheck(effects, ok2, nok) { const self = this; return open; function open(code3) { ok(code3 === codes.leftSquareBracket, "expected `[`"); if ( // Exit if there’s stuff before. self.previous !== codes.eof || // Exit if not in the first content that is the first child of a list // item. !self._gfmTasklistFirstContentOfListItem ) { return nok(code3); } effects.enter("taskListCheck"); effects.enter("taskListCheckMarker"); effects.consume(code3); effects.exit("taskListCheckMarker"); return inside; } function inside(code3) { if (markdownLineEndingOrSpace(code3)) { effects.enter("taskListCheckValueUnchecked"); effects.consume(code3); effects.exit("taskListCheckValueUnchecked"); return close; } if (code3 === codes.uppercaseX || code3 === codes.lowercaseX) { effects.enter("taskListCheckValueChecked"); effects.consume(code3); effects.exit("taskListCheckValueChecked"); return close; } return nok(code3); } function close(code3) { if (code3 === codes.rightSquareBracket) { effects.enter("taskListCheckMarker"); effects.consume(code3); effects.exit("taskListCheckMarker"); effects.exit("taskListCheck"); return after; } return nok(code3); } function after(code3) { if (markdownLineEnding(code3)) { return ok2(code3); } if (markdownSpace(code3)) { return effects.check({ tokenize: spaceThenNonSpace }, ok2, nok)(code3); } return nok(code3); } } function spaceThenNonSpace(effects, ok2, nok) { return factorySpace(effects, after, types.whitespace); function after(code3) { return code3 === codes.eof ? nok(code3) : ok2(code3); } } // node_modules/micromark-extension-gfm/index.js function gfm(options) { return combineExtensions([ gfmAutolinkLiteral(), gfmFootnote(), gfmStrikethrough(options), gfmTable(), gfmTaskListItem() ]); } // node_modules/remark-gfm/lib/index.js var emptyOptions = {}; function remarkGfm(options) { const self = ( /** @type {Processor} */ this ); const settings = options || emptyOptions; const data = self.data(); const micromarkExtensions = data.micromarkExtensions || (data.micromarkExtensions = []); const fromMarkdownExtensions = data.fromMarkdownExtensions || (data.fromMarkdownExtensions = []); const toMarkdownExtensions = data.toMarkdownExtensions || (data.toMarkdownExtensions = []); micromarkExtensions.push(gfm(settings)); fromMarkdownExtensions.push(gfmFromMarkdown()); toMarkdownExtensions.push(gfmToMarkdown(settings)); } export { remarkGfm as default }; //# sourceMappingURL=remark-gfm.js.map