stream-markdown-parser 0.0.17 → 0.0.18

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 CHANGED
@@ -64,6 +64,7 @@ interface CodeBlockNode extends BaseNode {
64
64
  }
65
65
  interface HtmlBlockNode extends BaseNode {
66
66
  type: 'html_block';
67
+ attrs?: [string, string][] | null;
67
68
  tag: string;
68
69
  content: string;
69
70
  }
@@ -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":"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"}
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
@@ -602,6 +602,37 @@ function findMatchingClose(src, startIdx, open, close) {
602
602
  }
603
603
  var findMatchingClose_default = findMatchingClose;
604
604
 
605
+ //#endregion
606
+ //#region src/utils/lru.ts
607
+ var LRUCache = class {
608
+ constructor(max = 500) {
609
+ this.max = max;
610
+ this.map = /* @__PURE__ */ new Map();
611
+ }
612
+ get(key) {
613
+ if (!this.map.has(key)) return void 0;
614
+ const val = this.map.get(key);
615
+ this.map.delete(key);
616
+ this.map.set(key, val);
617
+ return val;
618
+ }
619
+ set(key, value) {
620
+ if (this.map.has(key)) this.map.delete(key);
621
+ this.map.set(key, value);
622
+ if (this.map.size > this.max) {
623
+ const firstKey = this.map.keys().next().value;
624
+ if (firstKey !== void 0) this.map.delete(firstKey);
625
+ }
626
+ }
627
+ getOrCreate(key, factory$1) {
628
+ const existing = this.get(key);
629
+ if (existing !== void 0) return existing;
630
+ const v = factory$1();
631
+ this.set(key, v);
632
+ return v;
633
+ }
634
+ };
635
+
605
636
  //#endregion
606
637
  //#region src/plugins/isMathLike.ts
607
638
  const TEX_BRACE_COMMANDS = [
@@ -720,6 +751,13 @@ const CONTROL_MAP = {
720
751
  "\f": "f",
721
752
  "\v": "v"
722
753
  };
754
+ const DEFAULT_STANDALONE_BACKSLASH_T_RE = new RegExp(`${CONTROL_CHARS_CLASS}|(?<!\\\\|\\w)(${ESCAPED_KATEX_COMMANDS})\\b`, "g");
755
+ const DEFAULT_BRACE_CMD_RE = (() => {
756
+ const combined = [ESCAPED_TEX_BRACE_COMMANDS, ESCAPED_KATEX_COMMANDS].filter(Boolean).join("|");
757
+ return combined ? new RegExp(`(^|[^\\\\\\w])(${combined})\\s*\\{`, "g") : null;
758
+ })();
759
+ const commandsRegexCache = new LRUCache(500);
760
+ const braceCmdRegexCache = new LRUCache(500);
723
761
  function countUnescapedStrong(s) {
724
762
  const re = /(^|[^\\])(__|\*\*)/g;
725
763
  let c = 0;
@@ -731,11 +769,15 @@ function normalizeStandaloneBackslashT(s, opts) {
731
769
  const escapeExclamation = opts?.escapeExclamation ?? true;
732
770
  const useDefault = opts?.commands == null;
733
771
  let re;
734
- if (useDefault) re = new RegExp(`${CONTROL_CHARS_CLASS}|(?<!\\\\|\\w)(${ESCAPED_KATEX_COMMANDS})\\b`, "g");
772
+ if (useDefault) re = DEFAULT_STANDALONE_BACKSLASH_T_RE;
735
773
  else {
736
- const commandPattern = `(?:${commands.slice().sort((a, b) => b.length - a.length).map((c) => c.replace(/[.*+?^${}()|[\\]\\"\]/g, "\\$&")).join("|")})`;
737
- re = new RegExp(`${CONTROL_CHARS_CLASS}|(?<!\\\\|\\w)(${commandPattern})\\b`, "g");
774
+ const key = commands.slice().sort((a, b) => b.length - a.length).join("|");
775
+ re = commandsRegexCache.getOrCreate(key, () => {
776
+ const commandPattern = `(?:${commands.slice().sort((a, b) => b.length - a.length).map((c) => c.replace(/[.*+?^${}()|[\\]\\"\\\]/g, "\\$&")).join("|")})`;
777
+ return new RegExp(`${CONTROL_CHARS_CLASS}|(?<!\\\\|\\w)(${commandPattern})\\b`, "g");
778
+ });
738
779
  }
780
+ if (re && "lastIndex" in re) re.lastIndex = 0;
739
781
  let out = s.replace(re, (m, cmd) => {
740
782
  if (CONTROL_MAP[m] !== void 0) return `\\${CONTROL_MAP[m]}`;
741
783
  if (cmd && commands.includes(cmd)) return `\\${cmd}`;
@@ -745,8 +787,18 @@ function normalizeStandaloneBackslashT(s, opts) {
745
787
  const braceEscaped = useDefault ? [ESCAPED_TEX_BRACE_COMMANDS, ESCAPED_KATEX_COMMANDS].filter(Boolean).join("|") : [commands.map((c) => c.replace(/[.*+?^${}()|[\\]\\\]/g, "\\$&")).join("|"), ESCAPED_TEX_BRACE_COMMANDS].filter(Boolean).join("|");
746
788
  let result = out;
747
789
  if (braceEscaped) {
748
- const braceCmdRe = new RegExp(`(^|[^\\\\\\w])(${braceEscaped})\\s*\\{`, "g");
749
- result = result.replace(braceCmdRe, (_m, p1, p2) => `${p1}\\${p2}{`);
790
+ let braceCmdRe = null;
791
+ if (useDefault && DEFAULT_BRACE_CMD_RE) braceCmdRe = DEFAULT_BRACE_CMD_RE;
792
+ else {
793
+ const key = commands.slice().sort((a, b) => b.length - a.length).join("|");
794
+ const combined = [commands.map((c) => c.replace(/[.*+?^${}()|[\\]\\"\]/g, "\\$&")).join("|"), ESCAPED_TEX_BRACE_COMMANDS].filter(Boolean).join("|");
795
+ if (combined) braceCmdRe = braceCmdRegexCache.getOrCreate(key, () => new RegExp(`(^|[^\\\\\\w])(${combined})\\s*\\{`, "g"));
796
+ else braceCmdRe = null;
797
+ }
798
+ if (braceCmdRe) {
799
+ if ("lastIndex" in braceCmdRe) braceCmdRe.lastIndex = 0;
800
+ result = result.replace(braceCmdRe, (_m, p1, p2) => `${p1}\\${p2}{`);
801
+ }
750
802
  }
751
803
  result = result.replace(/span\{([^}]+)\}/, "span\\{$1\\}").replace(/\\operatorname\{span\}\{((?:[^{}]|\{[^}]*\})+)\}/, "\\operatorname{span}\\{$1\\}");
752
804
  result = result.replace(/(^|[^\\])\\\r?\n/g, "$1\\\\\n");
@@ -1500,6 +1552,12 @@ function isLikelyUrl(href) {
1500
1552
  if (!href) return false;
1501
1553
  return AUTOLINK_PROTOCOL_RE.test(href) || AUTOLINK_GENERIC_RE.test(href);
1502
1554
  }
1555
+ function escapeRegExp(str) {
1556
+ return str.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
1557
+ }
1558
+ const bracketRegexCache = new LRUCache(500);
1559
+ const parenHrefRegexCache = new LRUCache(500);
1560
+ const linkMatchRegexCache = new LRUCache(500);
1503
1561
  function parseInlineTokens(tokens, raw, pPreToken) {
1504
1562
  if (!tokens || tokens.length === 0) return [];
1505
1563
  const result = [];
@@ -1932,13 +1990,10 @@ function parseInlineTokens(tokens, raw, pPreToken) {
1932
1990
  function handleLinkOpen(token) {
1933
1991
  resetCurrentTextNode();
1934
1992
  const href = token.attrs?.find(([name]) => name === "href")?.[1];
1935
- function escapeRegExp(str) {
1936
- return str.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
1937
- }
1938
1993
  if (raw && tokens[i + 1].type === "text") {
1939
1994
  const text = String(tokens[i + 1]?.content ?? "");
1940
1995
  const escText = escapeRegExp(text);
1941
- if (!(/* @__PURE__ */ new RegExp(`\\[${escText}\\s*\\]`)).test(raw)) {
1996
+ if (!bracketRegexCache.getOrCreate(escText, () => /* @__PURE__ */ new RegExp(`\\[${escText}\\s*\\]`)).test(raw)) {
1942
1997
  const hrefAttr$1 = token.attrs?.find(([name]) => name === "href")?.[1] ?? "";
1943
1998
  if (!raw.includes("[") && isLikelyUrl(String(hrefAttr$1))) {
1944
1999
  resetCurrentTextNode();
@@ -1963,7 +2018,11 @@ function parseInlineTokens(tokens, raw, pPreToken) {
1963
2018
  }
1964
2019
  }
1965
2020
  if (raw && href) {
1966
- const loadingMath = /* @__PURE__ */ new RegExp(`\\(\\s*${escapeRegExp(href)}\\s*\\)`);
2021
+ const hrefStrLocal = String(href);
2022
+ const loadingMath = parenHrefRegexCache.getOrCreate(hrefStrLocal, () => {
2023
+ const escHref = escapeRegExp(hrefStrLocal);
2024
+ return /* @__PURE__ */ new RegExp(`\\(\\s*${escHref}\\s*\\)`);
2025
+ });
1967
2026
  const pre = result.length > 0 ? result[result.length - 1] : void 0;
1968
2027
  const loading = !loadingMath.test(raw);
1969
2028
  if (loading && pre) {
@@ -1973,7 +2032,7 @@ function parseInlineTokens(tokens, raw, pPreToken) {
1973
2032
  else if (pre.type === "text") preText = String(pre.content ?? "");
1974
2033
  else if (pre.content && typeof pre.content === "string") preText = String(pre.content ?? "").slice(1, -1);
1975
2034
  }
1976
- if ((/* @__PURE__ */ new RegExp(`\\[${escapeRegExp(preText)}\\s*\\]\\(`)).test(raw)) {
2035
+ if (linkMatchRegexCache.getOrCreate(preText, () => /* @__PURE__ */ new RegExp(`\\[${escapeRegExp(preText)}\\s*\\]\\(`)).test(raw)) {
1977
2036
  const text = String(preText ?? "");
1978
2037
  resetCurrentTextNode();
1979
2038
  const node$1 = {
@@ -2511,6 +2570,7 @@ function parseAdmonition(tokens, index, match) {
2511
2570
 
2512
2571
  //#endregion
2513
2572
  //#region src/parser/node-parsers/container-parser.ts
2573
+ const containerCloseTypeCache = new LRUCache(50);
2514
2574
  function parseContainer(tokens, index) {
2515
2575
  const openToken = tokens[index];
2516
2576
  let kind = "note";
@@ -2520,7 +2580,9 @@ function parseContainer(tokens, index) {
2520
2580
  kind = typeMatch[1];
2521
2581
  const info = String(openToken.info ?? "").trim();
2522
2582
  if (info && !info.startsWith(":::")) {
2523
- const maybe = info.replace(/* @__PURE__ */ new RegExp(`^${kind}`), "").trim();
2583
+ let maybe = info;
2584
+ if (maybe.startsWith(kind)) maybe = maybe.slice(kind.length).trim();
2585
+ maybe = maybe.trim();
2524
2586
  if (maybe) title = maybe;
2525
2587
  }
2526
2588
  } else {
@@ -2534,7 +2596,8 @@ function parseContainer(tokens, index) {
2534
2596
  if (!title) title = kind.charAt(0).toUpperCase() + kind.slice(1);
2535
2597
  const children = [];
2536
2598
  let j = index + 1;
2537
- const closeType = /* @__PURE__ */ new RegExp(`^container_${kind}_close$`);
2599
+ const key = kind;
2600
+ const closeType = containerCloseTypeCache.getOrCreate(key, () => /* @__PURE__ */ new RegExp(`^container_${kind}_close$`));
2538
2601
  while (j < tokens.length && tokens[j].type !== "container_close" && !closeType.test(tokens[j].type)) if (tokens[j].type === "paragraph_open") {
2539
2602
  const contentToken = tokens[j + 1];
2540
2603
  if (contentToken) {
@@ -2580,6 +2643,7 @@ function parseHardBreak() {
2580
2643
 
2581
2644
  //#endregion
2582
2645
  //#region src/parser/node-parsers/html-block-parser.ts
2646
+ const htmlCloseTagRegexCache = new LRUCache(200);
2583
2647
  function parseHtmlBlock(token) {
2584
2648
  const raw = String(token.content ?? "");
2585
2649
  if (/^\s*<!--/.test(raw) || /^\s*<!/.test(raw) || /^\s*<\?/.test(raw)) return {
@@ -2615,7 +2679,7 @@ function parseHtmlBlock(token) {
2615
2679
  ]);
2616
2680
  const selfClosing = /^\s*<[^>]*\/\s*>/.test(raw);
2617
2681
  const isVoid = VOID_TAGS.has(tag);
2618
- const hasClosing = new RegExp(`<\\/\\s*${tag}\\b`, "i").test(raw);
2682
+ const hasClosing = htmlCloseTagRegexCache.getOrCreate(tag, () => new RegExp(`<\\/\\s*${tag}\\b`, "i")).test(raw);
2619
2683
  const loading = !(isVoid || selfClosing || hasClosing);
2620
2684
  return {
2621
2685
  type: "html_block",