react-native-nitro-markdown 0.4.2 → 0.5.0

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.
Files changed (191) hide show
  1. package/README.md +605 -318
  2. package/android/src/main/java/com/margelo/nitro/com/nitromarkdown/HybridMarkdownSession.kt +27 -8
  3. package/cpp/bindings/HybridMarkdownParser.cpp +216 -66
  4. package/cpp/bindings/HybridMarkdownParser.hpp +2 -0
  5. package/ios/HybridMarkdownSession.swift +33 -7
  6. package/lib/commonjs/MarkdownContext.js +2 -1
  7. package/lib/commonjs/MarkdownContext.js.map +1 -1
  8. package/lib/commonjs/headless.js +41 -5
  9. package/lib/commonjs/headless.js.map +1 -1
  10. package/lib/commonjs/index.js.map +1 -1
  11. package/lib/commonjs/markdown-stream.js +109 -13
  12. package/lib/commonjs/markdown-stream.js.map +1 -1
  13. package/lib/commonjs/markdown.js +215 -44
  14. package/lib/commonjs/markdown.js.map +1 -1
  15. package/lib/commonjs/renderers/code.js +4 -3
  16. package/lib/commonjs/renderers/code.js.map +1 -1
  17. package/lib/commonjs/renderers/heading.js +1 -1
  18. package/lib/commonjs/renderers/heading.js.map +1 -1
  19. package/lib/commonjs/renderers/image.js +7 -5
  20. package/lib/commonjs/renderers/image.js.map +1 -1
  21. package/lib/commonjs/renderers/link.js +15 -3
  22. package/lib/commonjs/renderers/link.js.map +1 -1
  23. package/lib/commonjs/renderers/list.js +2 -2
  24. package/lib/commonjs/renderers/list.js.map +1 -1
  25. package/lib/commonjs/renderers/table.js +126 -21
  26. package/lib/commonjs/renderers/table.js.map +1 -1
  27. package/lib/commonjs/use-markdown-stream.js +16 -14
  28. package/lib/commonjs/use-markdown-stream.js.map +1 -1
  29. package/lib/commonjs/utils/incremental-ast.js +153 -0
  30. package/lib/commonjs/utils/incremental-ast.js.map +1 -0
  31. package/lib/commonjs/utils/link-security.js +21 -0
  32. package/lib/commonjs/utils/link-security.js.map +1 -0
  33. package/lib/commonjs/utils/stream-timeline.js +62 -0
  34. package/lib/commonjs/utils/stream-timeline.js.map +1 -0
  35. package/lib/module/MarkdownContext.js +2 -1
  36. package/lib/module/MarkdownContext.js.map +1 -1
  37. package/lib/module/headless.js +37 -4
  38. package/lib/module/headless.js.map +1 -1
  39. package/lib/module/index.js.map +1 -1
  40. package/lib/module/markdown-stream.js +110 -14
  41. package/lib/module/markdown-stream.js.map +1 -1
  42. package/lib/module/markdown.js +217 -46
  43. package/lib/module/markdown.js.map +1 -1
  44. package/lib/module/renderers/blockquote.js.map +1 -1
  45. package/lib/module/renderers/code.js +4 -3
  46. package/lib/module/renderers/code.js.map +1 -1
  47. package/lib/module/renderers/heading.js +1 -1
  48. package/lib/module/renderers/heading.js.map +1 -1
  49. package/lib/module/renderers/image.js +7 -5
  50. package/lib/module/renderers/image.js.map +1 -1
  51. package/lib/module/renderers/link.js +15 -3
  52. package/lib/module/renderers/link.js.map +1 -1
  53. package/lib/module/renderers/list.js +2 -2
  54. package/lib/module/renderers/list.js.map +1 -1
  55. package/lib/module/renderers/paragraph.js.map +1 -1
  56. package/lib/module/renderers/table.js +127 -22
  57. package/lib/module/renderers/table.js.map +1 -1
  58. package/lib/module/use-markdown-stream.js +16 -14
  59. package/lib/module/use-markdown-stream.js.map +1 -1
  60. package/lib/module/utils/incremental-ast.js +147 -0
  61. package/lib/module/utils/incremental-ast.js.map +1 -0
  62. package/lib/module/utils/link-security.js +15 -0
  63. package/lib/module/utils/link-security.js.map +1 -0
  64. package/lib/module/utils/stream-timeline.js +56 -0
  65. package/lib/module/utils/stream-timeline.js.map +1 -0
  66. package/lib/typescript/commonjs/Markdown.nitro.d.ts +5 -3
  67. package/lib/typescript/commonjs/Markdown.nitro.d.ts.map +1 -1
  68. package/lib/typescript/commonjs/MarkdownContext.d.ts +26 -25
  69. package/lib/typescript/commonjs/MarkdownContext.d.ts.map +1 -1
  70. package/lib/typescript/commonjs/headless.d.ts +15 -2
  71. package/lib/typescript/commonjs/headless.d.ts.map +1 -1
  72. package/lib/typescript/commonjs/index.d.ts +3 -1
  73. package/lib/typescript/commonjs/index.d.ts.map +1 -1
  74. package/lib/typescript/commonjs/markdown-stream.d.ts +7 -2
  75. package/lib/typescript/commonjs/markdown-stream.d.ts.map +1 -1
  76. package/lib/typescript/commonjs/markdown.d.ts +62 -5
  77. package/lib/typescript/commonjs/markdown.d.ts.map +1 -1
  78. package/lib/typescript/commonjs/renderers/blockquote.d.ts +3 -3
  79. package/lib/typescript/commonjs/renderers/blockquote.d.ts.map +1 -1
  80. package/lib/typescript/commonjs/renderers/code.d.ts +5 -5
  81. package/lib/typescript/commonjs/renderers/code.d.ts.map +1 -1
  82. package/lib/typescript/commonjs/renderers/heading.d.ts +3 -3
  83. package/lib/typescript/commonjs/renderers/heading.d.ts.map +1 -1
  84. package/lib/typescript/commonjs/renderers/horizontal-rule.d.ts +2 -2
  85. package/lib/typescript/commonjs/renderers/horizontal-rule.d.ts.map +1 -1
  86. package/lib/typescript/commonjs/renderers/image.d.ts +2 -2
  87. package/lib/typescript/commonjs/renderers/image.d.ts.map +1 -1
  88. package/lib/typescript/commonjs/renderers/link.d.ts +3 -3
  89. package/lib/typescript/commonjs/renderers/link.d.ts.map +1 -1
  90. package/lib/typescript/commonjs/renderers/list.d.ts +7 -7
  91. package/lib/typescript/commonjs/renderers/list.d.ts.map +1 -1
  92. package/lib/typescript/commonjs/renderers/math.d.ts +4 -4
  93. package/lib/typescript/commonjs/renderers/math.d.ts.map +1 -1
  94. package/lib/typescript/commonjs/renderers/paragraph.d.ts +3 -3
  95. package/lib/typescript/commonjs/renderers/paragraph.d.ts.map +1 -1
  96. package/lib/typescript/commonjs/renderers/table.d.ts +3 -3
  97. package/lib/typescript/commonjs/renderers/table.d.ts.map +1 -1
  98. package/lib/typescript/commonjs/specs/MarkdownSession.nitro.d.ts +5 -2
  99. package/lib/typescript/commonjs/specs/MarkdownSession.nitro.d.ts.map +1 -1
  100. package/lib/typescript/commonjs/theme.d.ts +2 -2
  101. package/lib/typescript/commonjs/theme.d.ts.map +1 -1
  102. package/lib/typescript/commonjs/use-markdown-stream.d.ts.map +1 -1
  103. package/lib/typescript/commonjs/utils/incremental-ast.d.ts +12 -0
  104. package/lib/typescript/commonjs/utils/incremental-ast.d.ts.map +1 -0
  105. package/lib/typescript/commonjs/utils/link-security.d.ts +3 -0
  106. package/lib/typescript/commonjs/utils/link-security.d.ts.map +1 -0
  107. package/lib/typescript/commonjs/utils/stream-timeline.d.ts +11 -0
  108. package/lib/typescript/commonjs/utils/stream-timeline.d.ts.map +1 -0
  109. package/lib/typescript/module/Markdown.nitro.d.ts +5 -3
  110. package/lib/typescript/module/Markdown.nitro.d.ts.map +1 -1
  111. package/lib/typescript/module/MarkdownContext.d.ts +26 -25
  112. package/lib/typescript/module/MarkdownContext.d.ts.map +1 -1
  113. package/lib/typescript/module/headless.d.ts +15 -2
  114. package/lib/typescript/module/headless.d.ts.map +1 -1
  115. package/lib/typescript/module/index.d.ts +3 -1
  116. package/lib/typescript/module/index.d.ts.map +1 -1
  117. package/lib/typescript/module/markdown-stream.d.ts +7 -2
  118. package/lib/typescript/module/markdown-stream.d.ts.map +1 -1
  119. package/lib/typescript/module/markdown.d.ts +62 -5
  120. package/lib/typescript/module/markdown.d.ts.map +1 -1
  121. package/lib/typescript/module/renderers/blockquote.d.ts +3 -3
  122. package/lib/typescript/module/renderers/blockquote.d.ts.map +1 -1
  123. package/lib/typescript/module/renderers/code.d.ts +5 -5
  124. package/lib/typescript/module/renderers/code.d.ts.map +1 -1
  125. package/lib/typescript/module/renderers/heading.d.ts +3 -3
  126. package/lib/typescript/module/renderers/heading.d.ts.map +1 -1
  127. package/lib/typescript/module/renderers/horizontal-rule.d.ts +2 -2
  128. package/lib/typescript/module/renderers/horizontal-rule.d.ts.map +1 -1
  129. package/lib/typescript/module/renderers/image.d.ts +2 -2
  130. package/lib/typescript/module/renderers/image.d.ts.map +1 -1
  131. package/lib/typescript/module/renderers/link.d.ts +3 -3
  132. package/lib/typescript/module/renderers/link.d.ts.map +1 -1
  133. package/lib/typescript/module/renderers/list.d.ts +7 -7
  134. package/lib/typescript/module/renderers/list.d.ts.map +1 -1
  135. package/lib/typescript/module/renderers/math.d.ts +4 -4
  136. package/lib/typescript/module/renderers/math.d.ts.map +1 -1
  137. package/lib/typescript/module/renderers/paragraph.d.ts +3 -3
  138. package/lib/typescript/module/renderers/paragraph.d.ts.map +1 -1
  139. package/lib/typescript/module/renderers/table.d.ts +3 -3
  140. package/lib/typescript/module/renderers/table.d.ts.map +1 -1
  141. package/lib/typescript/module/specs/MarkdownSession.nitro.d.ts +5 -2
  142. package/lib/typescript/module/specs/MarkdownSession.nitro.d.ts.map +1 -1
  143. package/lib/typescript/module/theme.d.ts +2 -2
  144. package/lib/typescript/module/theme.d.ts.map +1 -1
  145. package/lib/typescript/module/use-markdown-stream.d.ts.map +1 -1
  146. package/lib/typescript/module/utils/incremental-ast.d.ts +12 -0
  147. package/lib/typescript/module/utils/incremental-ast.d.ts.map +1 -0
  148. package/lib/typescript/module/utils/link-security.d.ts +3 -0
  149. package/lib/typescript/module/utils/link-security.d.ts.map +1 -0
  150. package/lib/typescript/module/utils/stream-timeline.d.ts +11 -0
  151. package/lib/typescript/module/utils/stream-timeline.d.ts.map +1 -0
  152. package/nitrogen/generated/android/NitroMarkdownOnLoad.cpp +2 -0
  153. package/nitrogen/generated/android/c++/JFunc_void_double_double.hpp +75 -0
  154. package/nitrogen/generated/android/c++/JHybridMarkdownSessionSpec.cpp +18 -6
  155. package/nitrogen/generated/android/c++/JHybridMarkdownSessionSpec.hpp +4 -2
  156. package/nitrogen/generated/android/kotlin/com/margelo/nitro/com/nitromarkdown/Func_void_double_double.kt +80 -0
  157. package/nitrogen/generated/android/kotlin/com/margelo/nitro/com/nitromarkdown/HybridMarkdownSessionSpec.kt +11 -3
  158. package/nitrogen/generated/ios/NitroMarkdown-Swift-Cxx-Bridge.cpp +8 -0
  159. package/nitrogen/generated/ios/NitroMarkdown-Swift-Cxx-Bridge.hpp +31 -0
  160. package/nitrogen/generated/ios/c++/HybridMarkdownSessionSpecSwift.hpp +20 -2
  161. package/nitrogen/generated/ios/swift/Func_void.swift +0 -1
  162. package/nitrogen/generated/ios/swift/Func_void_double_double.swift +46 -0
  163. package/nitrogen/generated/ios/swift/HybridMarkdownSessionSpec.swift +4 -3
  164. package/nitrogen/generated/ios/swift/HybridMarkdownSessionSpec_cxx.swift +34 -10
  165. package/nitrogen/generated/shared/c++/HybridMarkdownParserSpec.cpp +2 -0
  166. package/nitrogen/generated/shared/c++/HybridMarkdownParserSpec.hpp +2 -0
  167. package/nitrogen/generated/shared/c++/HybridMarkdownSessionSpec.cpp +2 -0
  168. package/nitrogen/generated/shared/c++/HybridMarkdownSessionSpec.hpp +4 -2
  169. package/package.json +7 -5
  170. package/src/Markdown.nitro.ts +7 -3
  171. package/src/MarkdownContext.ts +31 -25
  172. package/src/headless.ts +44 -6
  173. package/src/index.ts +8 -0
  174. package/src/markdown-stream.tsx +159 -15
  175. package/src/markdown.tsx +406 -50
  176. package/src/renderers/blockquote.tsx +4 -4
  177. package/src/renderers/code.tsx +16 -10
  178. package/src/renderers/heading.tsx +4 -4
  179. package/src/renderers/horizontal-rule.tsx +3 -3
  180. package/src/renderers/image.tsx +11 -9
  181. package/src/renderers/link.tsx +25 -7
  182. package/src/renderers/list.tsx +9 -12
  183. package/src/renderers/math.tsx +4 -4
  184. package/src/renderers/paragraph.tsx +3 -3
  185. package/src/renderers/table.tsx +270 -98
  186. package/src/specs/MarkdownSession.nitro.ts +6 -2
  187. package/src/theme.ts +3 -3
  188. package/src/use-markdown-stream.ts +22 -16
  189. package/src/utils/incremental-ast.ts +224 -0
  190. package/src/utils/link-security.ts +22 -0
  191. package/src/utils/stream-timeline.ts +72 -0
@@ -0,0 +1,153 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.parseMarkdownAst = exports.getNextStreamAst = void 0;
7
+ var _headless = require("../headless.js");
8
+ const PLAIN_TEXT_APPEND_PATTERN = /[`*_~[\]#!<>()|$\n\r]/;
9
+ const FENCE_LINE_PATTERN = /^ {0,3}(```+|~~~+)/;
10
+ const parseAst = (text, options) => {
11
+ if (options) {
12
+ return (0, _headless.parseMarkdownWithOptions)(text, options);
13
+ }
14
+ return (0, _headless.parseMarkdown)(text);
15
+ };
16
+ const isInsideFencedCodeBlock = text => {
17
+ const lines = text.split(/\r?\n/);
18
+ let openFenceChar = null;
19
+ let openFenceLength = 0;
20
+ for (const line of lines) {
21
+ const fenceMatch = line.match(FENCE_LINE_PATTERN);
22
+ if (!fenceMatch) continue;
23
+ const marker = fenceMatch[1];
24
+ const markerChar = marker[0];
25
+ const markerLength = marker.length;
26
+ if (!openFenceChar) {
27
+ openFenceChar = markerChar;
28
+ openFenceLength = markerLength;
29
+ continue;
30
+ }
31
+ if (markerChar === openFenceChar && markerLength >= openFenceLength) {
32
+ openFenceChar = null;
33
+ openFenceLength = 0;
34
+ }
35
+ }
36
+ return openFenceChar !== null;
37
+ };
38
+ const containsFenceLine = text => {
39
+ return text.split(/\r?\n/).some(line => FENCE_LINE_PATTERN.test(line));
40
+ };
41
+ const getTrailingLine = text => {
42
+ const lastLineBreak = Math.max(text.lastIndexOf("\n"), text.lastIndexOf("\r"));
43
+ if (lastLineBreak === -1) return text;
44
+ return text.slice(lastLineBreak + 1);
45
+ };
46
+ const getLeadingLine = text => {
47
+ const newlineIndex = text.indexOf("\n");
48
+ const carriageReturnIndex = text.indexOf("\r");
49
+ const hasNewline = newlineIndex !== -1;
50
+ const hasCarriageReturn = carriageReturnIndex !== -1;
51
+ if (!hasNewline && !hasCarriageReturn) return text;
52
+ if (!hasNewline) return text.slice(0, carriageReturnIndex);
53
+ if (!hasCarriageReturn) return text.slice(0, newlineIndex);
54
+ return text.slice(0, Math.min(newlineIndex, carriageReturnIndex));
55
+ };
56
+ const hasSplitFenceBoundary = (previousText, appendedChunk) => {
57
+ if (appendedChunk.length === 0) return false;
58
+ const candidateLine = `${getTrailingLine(previousText)}${getLeadingLine(appendedChunk)}`;
59
+ if (candidateLine.length === 0) return false;
60
+ return FENCE_LINE_PATTERN.test(candidateLine);
61
+ };
62
+ const findTrailingLeafPath = (node, path = []) => {
63
+ const children = node.children;
64
+ if (!children || children.length === 0) {
65
+ return path;
66
+ }
67
+ const lastIndex = children.length - 1;
68
+ return findTrailingLeafPath(children[lastIndex], [...path, lastIndex]);
69
+ };
70
+ const getNodeAtPath = (node, path) => {
71
+ let current = node;
72
+ for (const index of path) {
73
+ const child = current.children?.[index];
74
+ if (!child) return null;
75
+ current = child;
76
+ }
77
+ return current;
78
+ };
79
+ const appendPlainTextToAst = (ast, appendedChunk, previousTextLength) => {
80
+ if (appendedChunk.length === 0) return ast;
81
+ const path = findTrailingLeafPath(ast);
82
+ const leaf = getNodeAtPath(ast, path);
83
+ if (leaf?.type !== "text") return null;
84
+ if (typeof leaf.end !== "number" || leaf.end !== previousTextLength) {
85
+ return null;
86
+ }
87
+ const delta = appendedChunk.length;
88
+ const update = (node, depth) => {
89
+ if (depth === path.length) {
90
+ return {
91
+ ...node,
92
+ content: (node.content ?? "") + appendedChunk,
93
+ end: typeof node.end === "number" ? node.end + delta : node.end
94
+ };
95
+ }
96
+ const childIndex = path[depth];
97
+ const children = node.children?.map((child, index) => index === childIndex ? update(child, depth + 1) : child);
98
+ return {
99
+ ...node,
100
+ end: typeof node.end === "number" ? node.end + delta : node.end,
101
+ children
102
+ };
103
+ };
104
+ return update(ast, 0);
105
+ };
106
+ const endsAtBlockBoundary = text => {
107
+ return text.endsWith("\n") || text.endsWith("\r");
108
+ };
109
+ const getNextStreamAst = ({
110
+ allowIncremental = true,
111
+ nextText,
112
+ options,
113
+ previousAst,
114
+ previousText
115
+ }) => {
116
+ if (!allowIncremental || !nextText.startsWith(previousText)) {
117
+ return parseAst(nextText, options);
118
+ }
119
+ const appendedChunk = nextText.slice(previousText.length);
120
+ if (appendedChunk.length === 0) {
121
+ return previousAst;
122
+ }
123
+ const insideFencedCodeBlock = isInsideFencedCodeBlock(previousText);
124
+ const hasFenceBoundary = containsFenceLine(appendedChunk) || hasSplitFenceBoundary(previousText, appendedChunk);
125
+ if (insideFencedCodeBlock && !hasFenceBoundary) {
126
+ const fencedTextAppendAst = appendPlainTextToAst(previousAst, appendedChunk, previousText.length);
127
+ if (fencedTextAppendAst) {
128
+ return fencedTextAppendAst;
129
+ }
130
+ }
131
+ if (!PLAIN_TEXT_APPEND_PATTERN.test(appendedChunk)) {
132
+ if (endsAtBlockBoundary(previousText)) {
133
+ return parseAst(nextText, options);
134
+ }
135
+ const textAppendedAst = appendPlainTextToAst(previousAst, appendedChunk, previousText.length);
136
+ if (textAppendedAst) {
137
+ return textAppendedAst;
138
+ }
139
+ }
140
+ if (insideFencedCodeBlock) {
141
+ return parseAst(nextText, options);
142
+ }
143
+
144
+ // Correctness-first fallback: full reparse for all non-trivial appends.
145
+ // Incremental append is only used for plain text chunks at the true trailing leaf.
146
+ return parseAst(nextText, options);
147
+ };
148
+ exports.getNextStreamAst = getNextStreamAst;
149
+ const parseMarkdownAst = (text, options) => {
150
+ return parseAst(text, options);
151
+ };
152
+ exports.parseMarkdownAst = parseMarkdownAst;
153
+ //# sourceMappingURL=incremental-ast.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_headless","require","PLAIN_TEXT_APPEND_PATTERN","FENCE_LINE_PATTERN","parseAst","text","options","parseMarkdownWithOptions","parseMarkdown","isInsideFencedCodeBlock","lines","split","openFenceChar","openFenceLength","line","fenceMatch","match","marker","markerChar","markerLength","length","containsFenceLine","some","test","getTrailingLine","lastLineBreak","Math","max","lastIndexOf","slice","getLeadingLine","newlineIndex","indexOf","carriageReturnIndex","hasNewline","hasCarriageReturn","min","hasSplitFenceBoundary","previousText","appendedChunk","candidateLine","findTrailingLeafPath","node","path","children","lastIndex","getNodeAtPath","current","index","child","appendPlainTextToAst","ast","previousTextLength","leaf","type","end","delta","update","depth","content","childIndex","map","endsAtBlockBoundary","endsWith","getNextStreamAst","allowIncremental","nextText","previousAst","startsWith","insideFencedCodeBlock","hasFenceBoundary","fencedTextAppendAst","textAppendedAst","exports","parseMarkdownAst"],"sourceRoot":"../../../src","sources":["utils/incremental-ast.ts"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.normalizeLinkHref = exports.getAllowedExternalHref = void 0;
7
+ const ALLOWED_LINK_PROTOCOLS = new Set(["http:", "https:", "mailto:", "tel:", "sms:"]);
8
+ const normalizeLinkHref = href => {
9
+ const normalizedHref = href.trim();
10
+ return normalizedHref.length > 0 ? normalizedHref : null;
11
+ };
12
+ exports.normalizeLinkHref = normalizeLinkHref;
13
+ const getAllowedExternalHref = href => {
14
+ const protocolMatch = href.match(/^([a-z][a-z0-9+.-]*):/i);
15
+ if (!protocolMatch) return null;
16
+ const protocol = `${protocolMatch[1].toLowerCase()}:`;
17
+ if (!ALLOWED_LINK_PROTOCOLS.has(protocol)) return null;
18
+ return href;
19
+ };
20
+ exports.getAllowedExternalHref = getAllowedExternalHref;
21
+ //# sourceMappingURL=link-security.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["ALLOWED_LINK_PROTOCOLS","Set","normalizeLinkHref","href","normalizedHref","trim","length","exports","getAllowedExternalHref","protocolMatch","match","protocol","toLowerCase","has"],"sourceRoot":"../../../src","sources":["utils/link-security.ts"],"mappings":";;;;;;AAAA,MAAMA,sBAAsB,GAAG,IAAIC,GAAG,CAAC,CACrC,OAAO,EACP,QAAQ,EACR,SAAS,EACT,MAAM,EACN,MAAM,CACP,CAAC;AAEK,MAAMC,iBAAiB,GAAIC,IAAY,IAAoB;EAChE,MAAMC,cAAc,GAAGD,IAAI,CAACE,IAAI,CAAC,CAAC;EAClC,OAAOD,cAAc,CAACE,MAAM,GAAG,CAAC,GAAGF,cAAc,GAAG,IAAI;AAC1D,CAAC;AAACG,OAAA,CAAAL,iBAAA,GAAAA,iBAAA;AAEK,MAAMM,sBAAsB,GAAIL,IAAY,IAAoB;EACrE,MAAMM,aAAa,GAAGN,IAAI,CAACO,KAAK,CAAC,wBAAwB,CAAC;EAC1D,IAAI,CAACD,aAAa,EAAE,OAAO,IAAI;EAE/B,MAAME,QAAQ,GAAG,GAAGF,aAAa,CAAC,CAAC,CAAC,CAACG,WAAW,CAAC,CAAC,GAAG;EACrD,IAAI,CAACZ,sBAAsB,CAACa,GAAG,CAACF,QAAQ,CAAC,EAAE,OAAO,IAAI;EAEtD,OAAOR,IAAI;AACb,CAAC;AAACI,OAAA,CAAAC,sBAAA,GAAAA,sBAAA","ignoreList":[]}
@@ -0,0 +1,62 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.resolveHighlightPosition = exports.createTimestampTimeline = void 0;
7
+ const createTimestampTimeline = timestamps => {
8
+ if (!timestamps) {
9
+ return {
10
+ entries: [],
11
+ monotonic: true
12
+ };
13
+ }
14
+ const entries = Object.keys(timestamps).map(Number).filter(index => Number.isFinite(index)).sort((a, b) => a - b).map(index => ({
15
+ index,
16
+ time: timestamps[index]
17
+ })).filter(entry => Number.isFinite(entry.time));
18
+ let monotonic = true;
19
+ for (let i = 1; i < entries.length; i += 1) {
20
+ if (entries[i].time < entries[i - 1].time) {
21
+ monotonic = false;
22
+ break;
23
+ }
24
+ }
25
+ return {
26
+ entries,
27
+ monotonic
28
+ };
29
+ };
30
+ exports.createTimestampTimeline = createTimestampTimeline;
31
+ const resolveHighlightPosition = (timeline, currentTimeMs) => {
32
+ const {
33
+ entries,
34
+ monotonic
35
+ } = timeline;
36
+ if (entries.length === 0) return 0;
37
+ if (!monotonic) {
38
+ let wordIndex = 0;
39
+ for (const entry of entries) {
40
+ if (currentTimeMs >= entry.time) {
41
+ wordIndex = entry.index + 1;
42
+ }
43
+ }
44
+ return wordIndex;
45
+ }
46
+ let left = 0;
47
+ let right = entries.length - 1;
48
+ let resolvedIndex = -1;
49
+ while (left <= right) {
50
+ const mid = left + right >> 1;
51
+ if (entries[mid].time <= currentTimeMs) {
52
+ resolvedIndex = mid;
53
+ left = mid + 1;
54
+ } else {
55
+ right = mid - 1;
56
+ }
57
+ }
58
+ if (resolvedIndex === -1) return 0;
59
+ return entries[resolvedIndex].index + 1;
60
+ };
61
+ exports.resolveHighlightPosition = resolveHighlightPosition;
62
+ //# sourceMappingURL=stream-timeline.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["createTimestampTimeline","timestamps","entries","monotonic","Object","keys","map","Number","filter","index","isFinite","sort","a","b","time","entry","i","length","exports","resolveHighlightPosition","timeline","currentTimeMs","wordIndex","left","right","resolvedIndex","mid"],"sourceRoot":"../../../src","sources":["utils/stream-timeline.ts"],"mappings":";;;;;;AAUO,MAAMA,uBAAuB,GAClCC,UAAmC,IACb;EACtB,IAAI,CAACA,UAAU,EAAE;IACf,OAAO;MAAEC,OAAO,EAAE,EAAE;MAAEC,SAAS,EAAE;IAAK,CAAC;EACzC;EAEA,MAAMD,OAAO,GAAGE,MAAM,CAACC,IAAI,CAACJ,UAAU,CAAC,CACpCK,GAAG,CAACC,MAAM,CAAC,CACXC,MAAM,CAAEC,KAAK,IAAKF,MAAM,CAACG,QAAQ,CAACD,KAAK,CAAC,CAAC,CACzCE,IAAI,CAAC,CAACC,CAAC,EAAEC,CAAC,KAAKD,CAAC,GAAGC,CAAC,CAAC,CACrBP,GAAG,CAAEG,KAAK,KAAM;IACfA,KAAK;IACLK,IAAI,EAAEb,UAAU,CAACQ,KAAK;EACxB,CAAC,CAAC,CAAC,CACFD,MAAM,CAAEO,KAAK,IAAKR,MAAM,CAACG,QAAQ,CAACK,KAAK,CAACD,IAAI,CAAC,CAAC;EAEjD,IAAIX,SAAS,GAAG,IAAI;EACpB,KAAK,IAAIa,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGd,OAAO,CAACe,MAAM,EAAED,CAAC,IAAI,CAAC,EAAE;IAC1C,IAAId,OAAO,CAACc,CAAC,CAAC,CAACF,IAAI,GAAGZ,OAAO,CAACc,CAAC,GAAG,CAAC,CAAC,CAACF,IAAI,EAAE;MACzCX,SAAS,GAAG,KAAK;MACjB;IACF;EACF;EAEA,OAAO;IAAED,OAAO;IAAEC;EAAU,CAAC;AAC/B,CAAC;AAACe,OAAA,CAAAlB,uBAAA,GAAAA,uBAAA;AAEK,MAAMmB,wBAAwB,GAAGA,CACtCC,QAA2B,EAC3BC,aAAqB,KACV;EACX,MAAM;IAAEnB,OAAO;IAAEC;EAAU,CAAC,GAAGiB,QAAQ;EACvC,IAAIlB,OAAO,CAACe,MAAM,KAAK,CAAC,EAAE,OAAO,CAAC;EAElC,IAAI,CAACd,SAAS,EAAE;IACd,IAAImB,SAAS,GAAG,CAAC;IACjB,KAAK,MAAMP,KAAK,IAAIb,OAAO,EAAE;MAC3B,IAAImB,aAAa,IAAIN,KAAK,CAACD,IAAI,EAAE;QAC/BQ,SAAS,GAAGP,KAAK,CAACN,KAAK,GAAG,CAAC;MAC7B;IACF;IACA,OAAOa,SAAS;EAClB;EAEA,IAAIC,IAAI,GAAG,CAAC;EACZ,IAAIC,KAAK,GAAGtB,OAAO,CAACe,MAAM,GAAG,CAAC;EAC9B,IAAIQ,aAAa,GAAG,CAAC,CAAC;EAEtB,OAAOF,IAAI,IAAIC,KAAK,EAAE;IACpB,MAAME,GAAG,GAAIH,IAAI,GAAGC,KAAK,IAAK,CAAC;IAC/B,IAAItB,OAAO,CAACwB,GAAG,CAAC,CAACZ,IAAI,IAAIO,aAAa,EAAE;MACtCI,aAAa,GAAGC,GAAG;MACnBH,IAAI,GAAGG,GAAG,GAAG,CAAC;IAChB,CAAC,MAAM;MACLF,KAAK,GAAGE,GAAG,GAAG,CAAC;IACjB;EACF;EAEA,IAAID,aAAa,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC;EAClC,OAAOvB,OAAO,CAACuB,aAAa,CAAC,CAAChB,KAAK,GAAG,CAAC;AACzC,CAAC;AAACS,OAAA,CAAAC,wBAAA,GAAAA,wBAAA","ignoreList":[]}
@@ -6,7 +6,8 @@ export const MarkdownContext = /*#__PURE__*/createContext({
6
6
  renderers: {},
7
7
  theme: defaultMarkdownTheme,
8
8
  styles: undefined,
9
- stylingStrategy: "opinionated"
9
+ stylingStrategy: "opinionated",
10
+ onLinkPress: undefined
10
11
  });
11
12
  export const useMarkdownContext = () => useContext(MarkdownContext);
12
13
  //# sourceMappingURL=MarkdownContext.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["createContext","useContext","defaultMarkdownTheme","MarkdownContext","renderers","theme","styles","undefined","stylingStrategy","useMarkdownContext"],"sourceRoot":"../../src","sources":["MarkdownContext.ts"],"mappings":";;AAAA,SACEA,aAAa,EACbC,UAAU,QAGL,OAAO;AACd,SACEC,oBAAoB,QAIf,YAAS;AA+EhB,OAAO,MAAMC,eAAe,gBAAGH,aAAa,CAAuB;EACjEI,SAAS,EAAE,CAAC,CAAC;EACbC,KAAK,EAAEH,oBAAoB;EAC3BI,MAAM,EAAEC,SAAS;EACjBC,eAAe,EAAE;AACnB,CAAC,CAAC;AAEF,OAAO,MAAMC,kBAAkB,GAAGA,CAAA,KAAMR,UAAU,CAACE,eAAe,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["createContext","useContext","defaultMarkdownTheme","MarkdownContext","renderers","theme","styles","undefined","stylingStrategy","onLinkPress","useMarkdownContext"],"sourceRoot":"../../src","sources":["MarkdownContext.ts"],"mappings":";;AAAA,SACEA,aAAa,EACbC,UAAU,QAGL,OAAO;AAEd,SACEC,oBAAoB,QAIf,YAAS;AAmFhB,OAAO,MAAMC,eAAe,gBAAGH,aAAa,CAAuB;EACjEI,SAAS,EAAE,CAAC,CAAC;EACbC,KAAK,EAAEH,oBAAoB;EAC3BI,MAAM,EAAEC,SAAS;EACjBC,eAAe,EAAE,aAAa;EAC9BC,WAAW,EAAEF;AACf,CAAC,CAAC;AAEF,OAAO,MAAMG,kBAAkB,GAAGA,CAAA,KAAMT,UAAU,CAACE,eAAe,CAAC","ignoreList":[]}
@@ -27,8 +27,14 @@ export const MarkdownParserModule = NitroModules.createHybridObject("MarkdownPar
27
27
  * @returns The root node of the parsed AST
28
28
  */
29
29
  export function parseMarkdown(text) {
30
- const jsonStr = MarkdownParserModule.parse(text);
31
- return JSON.parse(jsonStr);
30
+ if (typeof MarkdownParserModule.parse === "function") {
31
+ const jsonStr = MarkdownParserModule.parse(text);
32
+ return JSON.parse(jsonStr);
33
+ }
34
+ return {
35
+ type: "document",
36
+ children: []
37
+ };
32
38
  }
33
39
 
34
40
  /**
@@ -38,8 +44,35 @@ export function parseMarkdown(text) {
38
44
  * @returns The root node of the parsed AST
39
45
  */
40
46
  export function parseMarkdownWithOptions(text, options) {
41
- const jsonStr = MarkdownParserModule.parseWithOptions(text, options);
42
- return JSON.parse(jsonStr);
47
+ if (typeof MarkdownParserModule.parseWithOptions === "function") {
48
+ const jsonStr = MarkdownParserModule.parseWithOptions(text, options);
49
+ return JSON.parse(jsonStr);
50
+ }
51
+ return {
52
+ type: "document",
53
+ children: []
54
+ };
55
+ }
56
+
57
+ /**
58
+ * Parse markdown and return flattened plain text directly from native parser.
59
+ * Useful for search/indexing flows that don't need full AST rendering.
60
+ */
61
+ export function extractPlainText(text) {
62
+ if (typeof MarkdownParserModule.extractPlainText === "function") {
63
+ return MarkdownParserModule.extractPlainText(text);
64
+ }
65
+ return getFlattenedText(parseMarkdown(text));
66
+ }
67
+
68
+ /**
69
+ * Parse markdown with options and return flattened plain text from native parser.
70
+ */
71
+ export function extractPlainTextWithOptions(text, options) {
72
+ if (typeof MarkdownParserModule.extractPlainTextWithOptions === "function") {
73
+ return MarkdownParserModule.extractPlainTextWithOptions(text, options);
74
+ }
75
+ return getFlattenedText(parseMarkdownWithOptions(text, options));
43
76
  }
44
77
  /**
45
78
  * Extract text content from a markdown node recursively.
@@ -1 +1 @@
1
- {"version":3,"names":["NitroModules","MarkdownParserModule","createHybridObject","parseMarkdown","text","jsonStr","parse","JSON","parseMarkdownWithOptions","options","parseWithOptions","getTextContent","node","content","children","map","join","getFlattenedText","type","trim","alt","title","childrenText"],"sourceRoot":"../../src","sources":["headless.ts"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAASA,YAAY,QAAQ,4BAA4B;;AAKzD;AACA;AACA;AACA;;AAyDA,OAAO,MAAMC,oBAAoB,GAC/BD,YAAY,CAACE,kBAAkB,CAAiB,gBAAgB,CAAC;;AAEnE;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,aAAaA,CAACC,IAAY,EAAgB;EACxD,MAAMC,OAAO,GAAGJ,oBAAoB,CAACK,KAAK,CAACF,IAAI,CAAC;EAChD,OAAOG,IAAI,CAACD,KAAK,CAACD,OAAO,CAAC;AAC5B;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASG,wBAAwBA,CACtCJ,IAAY,EACZK,OAAsB,EACR;EACd,MAAMJ,OAAO,GAAGJ,oBAAoB,CAACS,gBAAgB,CAACN,IAAI,EAAEK,OAAO,CAAC;EACpE,OAAOF,IAAI,CAACD,KAAK,CAACD,OAAO,CAAC;AAC5B;AAIA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMM,cAAc,GAAIC,IAAkB,IAAa;EAC5D,IAAIA,IAAI,CAACC,OAAO,EAAE,OAAOD,IAAI,CAACC,OAAO;EACrC,OAAOD,IAAI,CAACE,QAAQ,EAAEC,GAAG,CAACJ,cAAc,CAAC,CAACK,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE;AAC1D,CAAC;;AAED;AACA;AACA;AACA,OAAO,MAAMC,gBAAgB,GAAIL,IAAkB,IAAa;EAC9D,IACEA,IAAI,CAACM,IAAI,KAAK,MAAM,IACpBN,IAAI,CAACM,IAAI,KAAK,aAAa,IAC3BN,IAAI,CAACM,IAAI,KAAK,aAAa,IAC3BN,IAAI,CAACM,IAAI,KAAK,aAAa,EAC3B;IACA,OAAON,IAAI,CAACC,OAAO,IAAI,EAAE;EAC3B;EAEA,IACED,IAAI,CAACM,IAAI,KAAK,YAAY,IAC1BN,IAAI,CAACM,IAAI,KAAK,YAAY,IAC1BN,IAAI,CAACM,IAAI,KAAK,YAAY,EAC1B;IACA,OAAO,CAACN,IAAI,CAACC,OAAO,IAAI,EAAE,EAAEM,IAAI,CAAC,CAAC,GAAG,MAAM;EAC7C;EAEA,IAAIP,IAAI,CAACM,IAAI,KAAK,YAAY,EAAE,OAAO,IAAI;EAC3C,IAAIN,IAAI,CAACM,IAAI,KAAK,YAAY,EAAE,OAAO,GAAG;EAC1C,IAAIN,IAAI,CAACM,IAAI,KAAK,iBAAiB,EAAE,OAAO,SAAS;EAErD,IAAIN,IAAI,CAACM,IAAI,KAAK,OAAO,EAAE;IACzB,OAAON,IAAI,CAACQ,GAAG,IAAIR,IAAI,CAACS,KAAK,IAAI,EAAE;EACrC;EAEA,MAAMC,YAAY,GAAGV,IAAI,CAACE,QAAQ,EAAEC,GAAG,CAACE,gBAAgB,CAAC,CAACD,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE;EAExE,QAAQJ,IAAI,CAACM,IAAI;IACf,KAAK,WAAW;IAChB,KAAK,SAAS;IACd,KAAK,YAAY;MACf,OAAOI,YAAY,CAACH,IAAI,CAAC,CAAC,GAAG,MAAM;IAErC,KAAK,WAAW;IAChB,KAAK,gBAAgB;MACnB,OAAOG,YAAY,CAACH,IAAI,CAAC,CAAC,GAAG,IAAI;IAEnC,KAAK,MAAM;MACT,OAAOG,YAAY,GAAG,IAAI;IAE5B,KAAK,WAAW;MACd,OAAOA,YAAY,GAAG,IAAI;IAE5B,KAAK,YAAY;MACf,OAAOA,YAAY,GAAG,KAAK;IAE7B;MACE,OAAOA,YAAY;EACvB;AACF,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["NitroModules","MarkdownParserModule","createHybridObject","parseMarkdown","text","parse","jsonStr","JSON","type","children","parseMarkdownWithOptions","options","parseWithOptions","extractPlainText","getFlattenedText","extractPlainTextWithOptions","getTextContent","node","content","map","join","trim","alt","title","childrenText"],"sourceRoot":"../../src","sources":["headless.ts"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"names":["Markdown","MarkdownStream","useMarkdownContext","MarkdownContext","defaultMarkdownTheme","minimalMarkdownTheme","mergeThemes","Heading","Paragraph","Link","Blockquote","HorizontalRule","CodeBlock","InlineCode","List","ListItem","TaskListItem","TableRenderer","Image","MathInline","MathBlock","createMarkdownSession","useMarkdownSession","useStream"],"sourceRoot":"../../src","sources":["index.ts"],"mappings":";;AAAA,cAAc,eAAY;AAE1B,SAASA,QAAQ,QAAQ,eAAY;AACrC,SAASC,cAAc,QAAQ,sBAAmB;AAElD,SAASC,kBAAkB,EAAEC,eAAe,QAAQ,sBAAmB;AAkBvE,SACEC,oBAAoB,EACpBC,oBAAoB,EACpBC,WAAW,QACN,YAAS;AAQhB,SAASC,OAAO,QAAQ,wBAAqB;AAC7C,SAASC,SAAS,QAAQ,0BAAuB;AACjD,SAASC,IAAI,QAAQ,qBAAkB;AACvC,SAASC,UAAU,QAAQ,2BAAwB;AACnD,SAASC,cAAc,QAAQ,gCAA6B;AAC5D,SAASC,SAAS,EAAEC,UAAU,QAAQ,qBAAkB;AACxD,SAASC,IAAI,EAAEC,QAAQ,EAAEC,YAAY,QAAQ,qBAAkB;AAC/D,SAASC,aAAa,QAAQ,sBAAmB;AACjD,SAASC,KAAK,QAAQ,sBAAmB;AACzC,SAASC,UAAU,EAAEC,SAAS,QAAQ,qBAAkB;AAExD,SAASC,qBAAqB,QAAQ,sBAAmB;AAEzD,SAASC,kBAAkB,EAAEC,SAAS,QAAQ,0BAAuB","ignoreList":[]}
1
+ {"version":3,"names":["Markdown","MarkdownStream","useMarkdownContext","MarkdownContext","defaultMarkdownTheme","minimalMarkdownTheme","mergeThemes","Heading","Paragraph","Link","Blockquote","HorizontalRule","CodeBlock","InlineCode","List","ListItem","TaskListItem","TableRenderer","Image","MathInline","MathBlock","createMarkdownSession","useMarkdownSession","useStream"],"sourceRoot":"../../src","sources":["index.ts"],"mappings":";;AAAA,cAAc,eAAY;AAE1B,SAASA,QAAQ,QAAQ,eAAY;AAOrC,SAASC,cAAc,QAAQ,sBAAmB;AAGlD,SAASC,kBAAkB,EAAEC,eAAe,QAAQ,sBAAmB;AAmBvE,SACEC,oBAAoB,EACpBC,oBAAoB,EACpBC,WAAW,QACN,YAAS;AAQhB,SAASC,OAAO,QAAQ,wBAAqB;AAC7C,SAASC,SAAS,QAAQ,0BAAuB;AACjD,SAASC,IAAI,QAAQ,qBAAkB;AACvC,SAASC,UAAU,QAAQ,2BAAwB;AACnD,SAASC,cAAc,QAAQ,gCAA6B;AAC5D,SAASC,SAAS,EAAEC,UAAU,QAAQ,qBAAkB;AACxD,SAASC,IAAI,EAAEC,QAAQ,EAAEC,YAAY,QAAQ,qBAAkB;AAC/D,SAASC,aAAa,QAAQ,sBAAmB;AACjD,SAASC,KAAK,QAAQ,sBAAmB;AACzC,SAASC,UAAU,EAAEC,SAAS,QAAQ,qBAAkB;AAExD,SAASC,qBAAqB,QAAQ,sBAAmB;AAEzD,SAASC,kBAAkB,EAAEC,SAAS,QAAQ,0BAAuB","ignoreList":[]}
@@ -1,8 +1,36 @@
1
1
  "use strict";
2
2
 
3
- import { useState, useEffect, useRef, startTransition } from "react";
3
+ import { useState, useEffect, useRef, useCallback, startTransition } from "react";
4
4
  import { Markdown } from "./markdown.js";
5
+ import { getNextStreamAst, parseMarkdownAst } from "./utils/incremental-ast.js";
5
6
  import { jsx as _jsx } from "react/jsx-runtime";
7
+ const normalizeOffset = value => {
8
+ if (!Number.isFinite(value)) return null;
9
+ if (value <= 0) return 0;
10
+ return Math.floor(value);
11
+ };
12
+ const resolveStreamText = ({
13
+ forceFullSync,
14
+ pendingFrom,
15
+ pendingTo,
16
+ previousText,
17
+ session
18
+ }) => {
19
+ if (forceFullSync || pendingFrom === null || pendingTo === null) {
20
+ return session.getAllText();
21
+ }
22
+ if (pendingTo < pendingFrom) {
23
+ return session.getAllText();
24
+ }
25
+ if (pendingFrom === previousText.length) {
26
+ const appendedChunk = session.getTextRange(pendingFrom, pendingTo);
27
+ return `${previousText}${appendedChunk}`;
28
+ }
29
+ if (pendingFrom === 0) {
30
+ return session.getTextRange(0, pendingTo);
31
+ }
32
+ return session.getAllText();
33
+ };
6
34
  /**
7
35
  * A component that renders streaming Markdown from a MarkdownSession.
8
36
  * It efficiently subscribes to session updates to minimize parent re-renders.
@@ -12,18 +40,47 @@ export const MarkdownStream = ({
12
40
  updateIntervalMs = 50,
13
41
  updateStrategy = "interval",
14
42
  useTransitionUpdates = false,
43
+ incrementalParsing = true,
44
+ options,
45
+ plugins,
15
46
  ...props
16
47
  }) => {
17
- const [text, setText] = useState(() => session.getAllText());
48
+ const parseText = useCallback(text => parseMarkdownAst(text, options), [options]);
49
+ const createEmptyAst = () => ({
50
+ type: "document",
51
+ children: []
52
+ });
53
+ const initialText = session.getAllText();
54
+ const hasBeforeParsePlugins = plugins?.some(plugin => typeof plugin.beforeParse === "function") ?? false;
55
+ const [renderState, setRenderState] = useState(() => ({
56
+ text: initialText,
57
+ ast: hasBeforeParsePlugins ? createEmptyAst() : parseText(initialText)
58
+ }));
59
+ const renderStateRef = useRef(renderState);
18
60
  const pendingUpdateRef = useRef(false);
61
+ const pendingFromRef = useRef(null);
62
+ const pendingToRef = useRef(null);
63
+ const forceFullSyncRef = useRef(false);
19
64
  const updateTimerRef = useRef(null);
20
65
  const rafRef = useRef(null);
21
- const lastEmittedRef = useRef(text);
66
+ const allowIncremental = incrementalParsing && !hasBeforeParsePlugins;
67
+ useEffect(() => {
68
+ renderStateRef.current = renderState;
69
+ }, [renderState]);
22
70
  useEffect(() => {
23
- // Ensure initial state is synced
24
71
  const initialText = session.getAllText();
25
- setText(initialText);
26
- lastEmittedRef.current = initialText;
72
+ const initialState = {
73
+ text: initialText,
74
+ ast: hasBeforeParsePlugins ? createEmptyAst() : parseText(initialText)
75
+ };
76
+ pendingUpdateRef.current = false;
77
+ pendingFromRef.current = null;
78
+ pendingToRef.current = null;
79
+ forceFullSyncRef.current = false;
80
+ renderStateRef.current = initialState;
81
+ setRenderState(initialState);
82
+ }, [hasBeforeParsePlugins, parseText, session]);
83
+ useEffect(() => {
27
84
  const flushUpdate = () => {
28
85
  updateTimerRef.current = null;
29
86
  if (rafRef.current !== null) {
@@ -32,13 +89,39 @@ export const MarkdownStream = ({
32
89
  }
33
90
  if (!pendingUpdateRef.current) return;
34
91
  pendingUpdateRef.current = false;
35
- const latest = session.getAllText();
36
- if (latest === lastEmittedRef.current) return;
37
- lastEmittedRef.current = latest;
92
+ const previousState = renderStateRef.current;
93
+ const pendingFrom = pendingFromRef.current;
94
+ const pendingTo = pendingToRef.current;
95
+ const forceFullSync = forceFullSyncRef.current;
96
+ pendingFromRef.current = null;
97
+ pendingToRef.current = null;
98
+ forceFullSyncRef.current = false;
99
+ const latest = resolveStreamText({
100
+ forceFullSync,
101
+ pendingFrom,
102
+ pendingTo,
103
+ previousText: previousState.text,
104
+ session
105
+ });
106
+ if (latest === previousState.text) return;
107
+ const nextAst = hasBeforeParsePlugins ? previousState.ast : getNextStreamAst({
108
+ allowIncremental,
109
+ nextText: latest,
110
+ options,
111
+ previousAst: previousState.ast,
112
+ previousText: previousState.text
113
+ });
114
+ const nextState = {
115
+ text: latest,
116
+ ast: nextAst
117
+ };
118
+ renderStateRef.current = nextState;
38
119
  if (useTransitionUpdates) {
39
- startTransition(() => setText(latest));
120
+ startTransition(() => {
121
+ setRenderState(nextState);
122
+ });
40
123
  } else {
41
- setText(latest);
124
+ setRenderState(nextState);
42
125
  }
43
126
  };
44
127
  const scheduleFlush = () => {
@@ -52,7 +135,17 @@ export const MarkdownStream = ({
52
135
  updateTimerRef.current = setTimeout(flushUpdate, updateIntervalMs);
53
136
  }
54
137
  };
55
- const unsubscribe = session.addListener(() => {
138
+ const unsubscribe = session.addListener((from, to) => {
139
+ const nextFrom = normalizeOffset(from);
140
+ const nextTo = normalizeOffset(to);
141
+ if (nextFrom === null || nextTo === null || nextTo < nextFrom) {
142
+ forceFullSyncRef.current = true;
143
+ } else {
144
+ const currentFrom = pendingFromRef.current;
145
+ const currentTo = pendingToRef.current;
146
+ pendingFromRef.current = currentFrom === null ? nextFrom : Math.min(currentFrom, nextFrom);
147
+ pendingToRef.current = currentTo === null ? nextTo : Math.max(currentTo, nextTo);
148
+ }
56
149
  pendingUpdateRef.current = true;
57
150
  scheduleFlush();
58
151
  });
@@ -67,10 +160,13 @@ export const MarkdownStream = ({
67
160
  rafRef.current = null;
68
161
  }
69
162
  };
70
- }, [session, updateIntervalMs, updateStrategy, useTransitionUpdates]);
163
+ }, [allowIncremental, hasBeforeParsePlugins, options, session, updateIntervalMs, updateStrategy, useTransitionUpdates]);
71
164
  return /*#__PURE__*/_jsx(Markdown, {
72
165
  ...props,
73
- children: text
166
+ options: options,
167
+ plugins: plugins,
168
+ sourceAst: hasBeforeParsePlugins ? undefined : renderState.ast,
169
+ children: renderState.text
74
170
  });
75
171
  };
76
172
  //# sourceMappingURL=markdown-stream.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["useState","useEffect","useRef","startTransition","Markdown","jsx","_jsx","MarkdownStream","session","updateIntervalMs","updateStrategy","useTransitionUpdates","props","text","setText","getAllText","pendingUpdateRef","updateTimerRef","rafRef","lastEmittedRef","initialText","current","flushUpdate","cancelAnimationFrame","latest","scheduleFlush","requestAnimationFrame","setTimeout","unsubscribe","addListener","clearTimeout","children"],"sourceRoot":"../../src","sources":["markdown-stream.tsx"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["useState","useEffect","useRef","useCallback","startTransition","Markdown","getNextStreamAst","parseMarkdownAst","jsx","_jsx","normalizeOffset","value","Number","isFinite","Math","floor","resolveStreamText","forceFullSync","pendingFrom","pendingTo","previousText","session","getAllText","length","appendedChunk","getTextRange","MarkdownStream","updateIntervalMs","updateStrategy","useTransitionUpdates","incrementalParsing","options","plugins","props","parseText","text","createEmptyAst","type","children","initialText","hasBeforeParsePlugins","some","plugin","beforeParse","renderState","setRenderState","ast","renderStateRef","pendingUpdateRef","pendingFromRef","pendingToRef","forceFullSyncRef","updateTimerRef","rafRef","allowIncremental","current","initialState","flushUpdate","cancelAnimationFrame","previousState","latest","nextAst","nextText","previousAst","nextState","scheduleFlush","requestAnimationFrame","setTimeout","unsubscribe","addListener","from","to","nextFrom","nextTo","currentFrom","currentTo","min","max","clearTimeout","sourceAst","undefined"],"sourceRoot":"../../src","sources":["markdown-stream.tsx"],"mappings":"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","ignoreList":[]}