stream-markdown-parser 0.0.66 → 0.0.68
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +68 -6
- package/dist/index.js.map +1 -1
- package/package.json +12 -14
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","names":[],"sources":["../src/factory.ts","../src/types.ts","../src/parser/inline-parsers/index.ts","../src/parser/index.ts","../src/config.ts","../src/findMatchingClose.ts","../src/parser/inline-parsers/fence-parser.ts","../src/plugins/containers.ts","../src/plugins/isMathLike.ts","../src/plugins/math.ts","../src/index.ts"],"sourcesContent":[],"mappings":";;;UAaiB,cAAA,SAAuB;sBAClB;;EADL,gBAAA,CAAe,EAAA,OAAA;;;;ECXf,CAAA;EAaL;AAEZ;AAMA;;EAKY,cAAA,CAAA,EAAA,SAAA,MAAA,EAAA;EALyB;;AAQrC;AAMA;EAMiB,0BAKR,CAAA,EAAA,OAAA;AAGT;;;UAjDiB,QAAA;;EDWA,GAAA,EAAA,MAAA;;;;ACXjB;AAaA;AAEA;AAMA;;;AAAqC,KARzB,WAAA,GAAc,QAQW,GARA,MAQA,CAAA,MAAA,EAAA,OAAA,CAAA;AAAQ,UAN5B,QAAA,SAAiB,QAMW,CAAA;EAQ5B,IAAA,EAAA,MAAA;EAMA,OAAA,EAAA,MAAW;EAMX,MAAA,CAAA,EAAA,OAAS;AAQ1B;AAKiB,UAjCA,WAAA,SAAoB,QAiCU,CAAA;EAiB9B,IAAA,EAAA,SAAA;EAOA,KAAA,EAAA,MAAA;EAYL,IAAA,EAAA,MAAA;EAYK,KAAA,CAAA,EA7EP,MA6EO,CAAA,MAAA,EAAoB,MAAA,GAAA,OAAA,CAAA;EAK3B,QAAA,EAjFE,UAiFF,EAAA;;AALmC,UAzE5B,aAAA,SAAsB,QAyEM,CAAA;EAAQ,IAAA,EAAA,WAAA;EAUpC,QAAA,EAjFL,UAiFoB,EAAA;EAKf,aAAS,CAAA,EAAA,OAMd;AAGZ;AAOiB,UAlGA,UAAA,SAAmB,QAkGO,CAAQ;EAIlC,IAAA,EAAA,QAAA;EASL,QAAA,EA7GA,UA6Gc,EAAA;EAST,OAAA,CAAA,EAAA,MAAA;AAKjB;AAEU,UAzHO,QAAA,SAAiB,QAyHxB,CAAA;EACF,IAAA,EAAA,MAAA;EAH2B,OAAA,EAAA,OAAA;EAAQ,KAAA,CAAA,EAAA,MAAA;EAM1B,KAAA,EAxHR,YAwHqB,EAAA;AAK9B;AAOiB,UAjIA,YAAA,SAAqB,QAmI7B,CAAA;EAGQ,IAAA,EAAA,WAAA;EAET,QAAA,EAtII,UAsIJ,EAAA;;AAFoC,UAjI3B,aAAA,SAAsB,QAiIK,CAAA;EAAQ,IAAA,EAAA,YAAA;EAMnC,QAAA,EAAA,MAAa;EAMb,IAAA,EAAA,MAAA;EAKA,SAAA,CAAA,EAAA,MAAA;EAKA,OAAA,CAAA,EAAA,MAAA;EAOA,OAAA,CAAA,EAAA,OAAA;EAKP,IAAA,CAAA,EAAA,OAAA;EACE,YAAA,CAAA,EAAA,MAAA;EAN8B,WAAA,CAAA,EAAA,MAAA;EAAQ,GAAA,EAAA,MAAA;AASlD;AAKiB,UA3JA,aAAA,SAAsB,QA2JD,CAAA;EAKrB,IAAA,EAAA,YAAA;EAKA,KAAA,CAAA,EAAA,CAAA,MAAA,EAAc,MAAA,CAAA,EAAA,GAEnB,IAAA;EAGK,GAAA,EAAA,MAAA;EAKA,OAAA,EAAA,MAAA;AAKjB;AAKiB,UAlLA,cAAA,SAAuB,QAkLM,CAAA;EAK7B,IAAA,EAAA,aAAA;EAKA,GAAA,CAAA,EAAA,MAAU;EAMV,OAAA,EAAA,MAAA;EAIA,QAAA,EAlML,UAkMoB,EAAA;EAMf;AAMjB;AAMA;AAkBA;EAEY,UAAA,CAAA,EAAU,OAAA;;AAEhB,KAlOM,oBAAA,GAkON,CAAA,MAAA,EAAA,MAAA,CAAA,EAAA,GAhOA,MAgOA,CAAA,MAAA,EAAA,MAAA,GAAA,OAAA,CAAA,GA/NA,KA+NA,CAAA;EACA,IAAA,EAAA,MAAA;EACA,KAAA,EAAA,MAAA,GAAA,OAAA;CACA,CAAA,GAAA,IAAA;;;;;;;AAOA,UAhOW,mBAAA,SAA4B,QAgOvC,CAAA;EACA;EACA,IAAA,EAAA,MAAA;EACA,GAAA,EAAA,MAAA;EACA,OAAA,EAAA,MAAA;EACA,KAAA,CAAA,EAhOI,oBAgOJ;EACA,QAAA,CAAA,EAhOO,UAgOP,EAAA;EACA,UAAA,CAAA,EAAA,OAAA;;AAEA,UA/NW,cAAA,SAAuB,QA+NlC,CAAA;EACA,IAAA,EAAA,aAAA;EACA,IAAA,EAAA,MAAA;;AAEA,UA9NW,QAAA,SAAiB,QA8N5B,CAAA;EACA,IAAA,EAAA,MAAA;EACA,IAAA,EAAA,MAAA;EACA,KAAA,EAAA,MAAA,GAAA,IAAA;EACA,IAAA,EAAA,MAAA;EACA,KAAA,CAAA,EAAA,CAAA,MAAA,EAAA,MAAA,CAAA,EAAA;EACA,QAAA,EA9NM,UA8NN,EAAA;;AAEA,UA7NW,SAAA,SAAkB,QA6N7B,CAAA;EACA,IAAA,EAAA,OAAA;EACA,GAAA,EAAA,MAAA;EACA,GAAA,EAAA,MAAA;EACA,KAAA,EAAA,MAAA,GAAA,IAAA;;AACW,UA3NA,iBAAA,SAA0B,QA2N1B,CAAA;EACA,IAAA,EAAA,gBAAgB;AAmCjC;AAEiB,UA7PA,gBAAA,CA8PM;EA6BX,IAAA,EAAA;;;;
|
|
1
|
+
{"version":3,"file":"index.d.ts","names":[],"sources":["../src/factory.ts","../src/types.ts","../src/parser/inline-parsers/index.ts","../src/parser/index.ts","../src/config.ts","../src/findMatchingClose.ts","../src/parser/inline-parsers/fence-parser.ts","../src/plugins/containers.ts","../src/plugins/isMathLike.ts","../src/plugins/math.ts","../src/index.ts"],"sourcesContent":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -10745,6 +10745,7 @@ function parseTextToken(token) {
|
|
|
10745
10745
|
const STRONG_PAIR_RE = /\*\*([\s\S]*?)\*\*/;
|
|
10746
10746
|
const STRIKETHROUGH_RE = /[^~]*~{2,}[^~]+/;
|
|
10747
10747
|
const HAS_STRONG_RE = /\*\*/;
|
|
10748
|
+
const ESCAPED_PUNCTUATION_RE = /\\([\\()[\]`$|*_\-!])/g;
|
|
10748
10749
|
function countUnescapedAsterisks(str) {
|
|
10749
10750
|
let count = 0;
|
|
10750
10751
|
let i = 0;
|
|
@@ -11095,6 +11096,17 @@ function parseInlineTokens(tokens, raw, pPreToken, options) {
|
|
|
11095
11096
|
result.push(currentTextNode);
|
|
11096
11097
|
}
|
|
11097
11098
|
}
|
|
11099
|
+
function hasEscapedMarkup(token, escapedPrefix) {
|
|
11100
|
+
return String(token.markup ?? "").startsWith(escapedPrefix);
|
|
11101
|
+
}
|
|
11102
|
+
function stripTrailingMidStateMarker(content, token) {
|
|
11103
|
+
let nextContent = content;
|
|
11104
|
+
const rawTokenContent = String(token.content ?? "");
|
|
11105
|
+
if (nextContent.endsWith("\\") && !hasEscapedMarkup(token, "\\\\") && !rawTokenContent.endsWith("\\\\")) nextContent = nextContent.slice(0, -1);
|
|
11106
|
+
if (nextContent.endsWith("(") && !hasEscapedMarkup(token, "\\(") && !rawTokenContent.endsWith("\\(")) nextContent = nextContent.slice(0, -1);
|
|
11107
|
+
if (/\*+$/.test(nextContent) && !hasEscapedMarkup(token, "\\*") && !rawTokenContent.endsWith("\\*")) nextContent = nextContent.replace(/\*+$/, "");
|
|
11108
|
+
return nextContent;
|
|
11109
|
+
}
|
|
11098
11110
|
while (i < tokens.length) {
|
|
11099
11111
|
const token = tokens[i];
|
|
11100
11112
|
handleToken(token);
|
|
@@ -11289,12 +11301,12 @@ function parseInlineTokens(tokens, raw, pPreToken, options) {
|
|
|
11289
11301
|
content
|
|
11290
11302
|
});
|
|
11291
11303
|
if (currentTextNode) {
|
|
11292
|
-
currentTextNode.content += textNode.content
|
|
11304
|
+
currentTextNode.content += stripTrailingMidStateMarker(textNode.content, token);
|
|
11293
11305
|
currentTextNode.raw += textNode.raw;
|
|
11294
11306
|
return;
|
|
11295
11307
|
}
|
|
11296
11308
|
const maybeMath = preToken?.tag === "br" && tokens[i - 2]?.content === "[";
|
|
11297
|
-
if (!nextToken) textNode.content = textNode.content
|
|
11309
|
+
if (!nextToken) textNode.content = stripTrailingMidStateMarker(textNode.content, token);
|
|
11298
11310
|
currentTextNode = textNode;
|
|
11299
11311
|
currentTextNode.center = maybeMath;
|
|
11300
11312
|
result.push(currentTextNode);
|
|
@@ -11302,8 +11314,7 @@ function parseInlineTokens(tokens, raw, pPreToken, options) {
|
|
|
11302
11314
|
function handleTextToken(token) {
|
|
11303
11315
|
let index = result.length - 1;
|
|
11304
11316
|
const rawContent = String(token.content ?? "");
|
|
11305
|
-
let content = rawContent;
|
|
11306
|
-
if (rawContent.includes("\\")) content = rawContent.replace(/\\/g, "");
|
|
11317
|
+
let content = rawContent.replace(ESCAPED_PUNCTUATION_RE, "$1");
|
|
11307
11318
|
if (token.content === "<" || content === "1" && tokens[i - 1]?.tag === "br") {
|
|
11308
11319
|
i++;
|
|
11309
11320
|
return;
|
|
@@ -11327,7 +11338,7 @@ function parseInlineTokens(tokens, raw, pPreToken, options) {
|
|
|
11327
11338
|
i++;
|
|
11328
11339
|
return;
|
|
11329
11340
|
}
|
|
11330
|
-
if (content === "`" || content === "|" || content === "$" || /^\*+$/.test(content)) {
|
|
11341
|
+
if ((content === "`" || content === "|" || content === "$") && !hasEscapedMarkup(token, `\\${content}`) || /^\*+$/.test(content) && !hasEscapedMarkup(token, "\\*")) {
|
|
11331
11342
|
i++;
|
|
11332
11343
|
return;
|
|
11333
11344
|
}
|
|
@@ -13035,6 +13046,18 @@ function ensureBlankLineBeforeCustomHtmlBlocks(markdown, tags) {
|
|
|
13035
13046
|
complete: false
|
|
13036
13047
|
};
|
|
13037
13048
|
};
|
|
13049
|
+
const parseStandaloneCompleteHtmlTagLine = (line) => {
|
|
13050
|
+
if (isIndentedCodeLine(line)) return null;
|
|
13051
|
+
const trimmed = trimStartIndentWs(line).replace(/[ \t]+$/, "");
|
|
13052
|
+
if (!trimmed.startsWith("<")) return null;
|
|
13053
|
+
if (/^<\s*(?:!--|!doctype\b|\?)/i.test(trimmed)) return null;
|
|
13054
|
+
const selfClosingMatch = trimmed.match(/^<\s*([A-Z][\w:-]*)\b[^>]*\/\s*>\s*$/i);
|
|
13055
|
+
if (selfClosingMatch?.[1]) return selfClosingMatch[1].toLowerCase();
|
|
13056
|
+
const fullMatch = trimmed.match(/^<\s*([A-Z][\w:-]*)\b[^>]*>[\s\S]*<\s*\/\s*([A-Z][\w:-]*)\s*>\s*$/i);
|
|
13057
|
+
if (!fullMatch?.[1] || !fullMatch[2]) return null;
|
|
13058
|
+
const openTag = fullMatch[1].toLowerCase();
|
|
13059
|
+
return openTag === fullMatch[2].toLowerCase() ? openTag : null;
|
|
13060
|
+
};
|
|
13038
13061
|
let inFence = false;
|
|
13039
13062
|
let fenceChar = "";
|
|
13040
13063
|
let fenceLen = 0;
|
|
@@ -13054,10 +13077,46 @@ function ensureBlankLineBeforeCustomHtmlBlocks(markdown, tags) {
|
|
|
13054
13077
|
};
|
|
13055
13078
|
};
|
|
13056
13079
|
const fenceMatchLine = (rawLine) => parseFenceMarker(rawLine);
|
|
13080
|
+
const lineStartsWithBlockMarker = (line) => {
|
|
13081
|
+
const trimmed = trimStartIndentWs(line);
|
|
13082
|
+
if (!trimmed) return false;
|
|
13083
|
+
if (isIndentedCodeLine(line)) return true;
|
|
13084
|
+
return /^(?:#{1,6}[ \t]+|>|[*+-][ \t]+|\d+[.)][ \t]+|`{3,}|~{3,}|\||\$\$|:{3,}|\[\^[^\]]+\]:|-{3,}|\*{3,}|_{3,})/.test(trimmed);
|
|
13085
|
+
};
|
|
13086
|
+
const currentCustomBlockNeedsBoundary = (lineStart, currentQuoteKey, tagName) => {
|
|
13087
|
+
let scanIdx = lineStart;
|
|
13088
|
+
let depth = 0;
|
|
13089
|
+
while (scanIdx < markdown.length) {
|
|
13090
|
+
const nl = markdown.indexOf("\n", scanIdx);
|
|
13091
|
+
const hasNl = nl !== -1;
|
|
13092
|
+
const isCrlf = hasNl && nl > scanIdx && markdown[nl - 1] === "\r";
|
|
13093
|
+
const lineEnd = hasNl ? isCrlf ? nl - 1 : nl : markdown.length;
|
|
13094
|
+
const rawLine = markdown.slice(scanIdx, lineEnd);
|
|
13095
|
+
const blockquote$1 = parseBlockquotePrefix(rawLine);
|
|
13096
|
+
const quoteKey = blockquote$1?.key ?? "";
|
|
13097
|
+
if (depth > 0 && currentQuoteKey && quoteKey !== currentQuoteKey) break;
|
|
13098
|
+
const contentLine = blockquote$1?.content ?? rawLine;
|
|
13099
|
+
const lineTag = parseLineStartCustomTag(contentLine);
|
|
13100
|
+
if (lineTag?.name === tagName) {
|
|
13101
|
+
if (lineTag.type === "open") {
|
|
13102
|
+
if (!lineTag.complete) depth++;
|
|
13103
|
+
} else if (depth > 0) {
|
|
13104
|
+
depth--;
|
|
13105
|
+
if (depth === 0) return false;
|
|
13106
|
+
}
|
|
13107
|
+
} else if (depth > 0) {
|
|
13108
|
+
if (lineIsBlank(contentLine) || lineStartsWithBlockMarker(contentLine)) return true;
|
|
13109
|
+
}
|
|
13110
|
+
if (hasNl) scanIdx = nl + 1;
|
|
13111
|
+
else break;
|
|
13112
|
+
}
|
|
13113
|
+
return false;
|
|
13114
|
+
};
|
|
13057
13115
|
let out = "";
|
|
13058
13116
|
let idx = 0;
|
|
13059
13117
|
let prevLineBlank = true;
|
|
13060
13118
|
let prevLineHtmlish = false;
|
|
13119
|
+
let prevLineStandaloneCompleteHtmlTag = false;
|
|
13061
13120
|
let lastNewline = "\n";
|
|
13062
13121
|
const customBlockStack = [];
|
|
13063
13122
|
let prevQuoteKey = "";
|
|
@@ -13087,7 +13146,9 @@ function ensureBlankLineBeforeCustomHtmlBlocks(markdown, tags) {
|
|
|
13087
13146
|
}
|
|
13088
13147
|
const insideCustomBlock = customBlockStack.length > 0;
|
|
13089
13148
|
if (!inFence && !insideCustomBlock) {
|
|
13090
|
-
|
|
13149
|
+
const opening = parseOpeningCustomTagName(contentLine);
|
|
13150
|
+
const needsBoundaryAfterStandaloneHtml = !!opening && !prevLineBlank && prevLineHtmlish && prevLineStandaloneCompleteHtmlTag && currentCustomBlockNeedsBoundary(idx, quoteKey, opening);
|
|
13151
|
+
if (opening && !prevLineBlank && (!prevLineHtmlish || needsBoundaryAfterStandaloneHtml)) {
|
|
13091
13152
|
if (quoteKey && prevQuoteKey && quoteKey === prevQuoteKey) out += `${quoteKey}${lastNewline}`;
|
|
13092
13153
|
else if (!quoteKey) out += lastNewline;
|
|
13093
13154
|
}
|
|
@@ -13109,6 +13170,7 @@ function ensureBlankLineBeforeCustomHtmlBlocks(markdown, tags) {
|
|
|
13109
13170
|
const blank = lineIsBlank(contentLine);
|
|
13110
13171
|
prevLineBlank = blank;
|
|
13111
13172
|
prevLineHtmlish = !blank && previousLineLooksHtmlish(contentLine);
|
|
13173
|
+
prevLineStandaloneCompleteHtmlTag = !blank && !!parseStandaloneCompleteHtmlTagLine(contentLine);
|
|
13112
13174
|
prevQuoteKey = quoteKey;
|
|
13113
13175
|
idx = hasNl ? nl + 1 : markdown.length;
|
|
13114
13176
|
}
|