react-native-nitro-markdown 0.7.2 → 0.8.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.
- package/README.md +66 -4
- package/ios/HybridMarkdownSession.swift +11 -4
- package/lib/commonjs/MarkdownContext.js +1 -3
- package/lib/commonjs/MarkdownContext.js.map +1 -1
- package/lib/commonjs/index.js +6 -0
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/markdown-stream.js +80 -29
- package/lib/commonjs/markdown-stream.js.map +1 -1
- package/lib/commonjs/markdown.js +94 -37
- package/lib/commonjs/markdown.js.map +1 -1
- package/lib/commonjs/renderers/image.js +2 -2
- package/lib/commonjs/renderers/image.js.map +1 -1
- package/lib/commonjs/renderers/math.js +6 -2
- package/lib/commonjs/renderers/math.js.map +1 -1
- package/lib/commonjs/renderers/table/index.js +4 -4
- package/lib/commonjs/renderers/table/index.js.map +1 -1
- package/lib/commonjs/renderers/table/table-utils.js +1 -1
- package/lib/commonjs/renderers/table/table-utils.js.map +1 -1
- package/lib/commonjs/utils/code-highlight.js +1 -1
- package/lib/commonjs/utils/code-highlight.js.map +1 -1
- package/lib/commonjs/utils/incremental-ast.js +24 -11
- package/lib/commonjs/utils/incremental-ast.js.map +1 -1
- package/lib/commonjs/utils/link-security.js +2 -2
- package/lib/commonjs/utils/link-security.js.map +1 -1
- package/lib/commonjs/utils/stream-timeline.js +13 -7
- package/lib/commonjs/utils/stream-timeline.js.map +1 -1
- package/lib/module/MarkdownContext.js +1 -3
- package/lib/module/MarkdownContext.js.map +1 -1
- package/lib/module/index.js +1 -1
- package/lib/module/index.js.map +1 -1
- package/lib/module/markdown-stream.js +79 -29
- package/lib/module/markdown-stream.js.map +1 -1
- package/lib/module/markdown.js +94 -37
- package/lib/module/markdown.js.map +1 -1
- package/lib/module/renderers/image.js +2 -2
- package/lib/module/renderers/image.js.map +1 -1
- package/lib/module/renderers/math.js +6 -2
- package/lib/module/renderers/math.js.map +1 -1
- package/lib/module/renderers/table/index.js +4 -4
- package/lib/module/renderers/table/index.js.map +1 -1
- package/lib/module/renderers/table/table-utils.js +1 -1
- package/lib/module/renderers/table/table-utils.js.map +1 -1
- package/lib/module/utils/code-highlight.js +1 -1
- package/lib/module/utils/code-highlight.js.map +1 -1
- package/lib/module/utils/incremental-ast.js +24 -11
- package/lib/module/utils/incremental-ast.js.map +1 -1
- package/lib/module/utils/link-security.js +2 -2
- package/lib/module/utils/link-security.js.map +1 -1
- package/lib/module/utils/stream-timeline.js +13 -7
- package/lib/module/utils/stream-timeline.js.map +1 -1
- package/lib/typescript/commonjs/MarkdownContext.d.ts.map +1 -1
- package/lib/typescript/commonjs/index.d.ts +2 -2
- package/lib/typescript/commonjs/index.d.ts.map +1 -1
- package/lib/typescript/commonjs/markdown-stream.d.ts +28 -7
- package/lib/typescript/commonjs/markdown-stream.d.ts.map +1 -1
- package/lib/typescript/commonjs/markdown.d.ts.map +1 -1
- package/lib/typescript/commonjs/utils/incremental-ast.d.ts.map +1 -1
- package/lib/typescript/commonjs/utils/stream-timeline.d.ts.map +1 -1
- package/lib/typescript/module/MarkdownContext.d.ts.map +1 -1
- package/lib/typescript/module/index.d.ts +2 -2
- package/lib/typescript/module/index.d.ts.map +1 -1
- package/lib/typescript/module/markdown-stream.d.ts +28 -7
- package/lib/typescript/module/markdown-stream.d.ts.map +1 -1
- package/lib/typescript/module/markdown.d.ts.map +1 -1
- package/lib/typescript/module/utils/incremental-ast.d.ts.map +1 -1
- package/lib/typescript/module/utils/stream-timeline.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/MarkdownContext.ts +0 -2
- package/src/index.ts +9 -2
- package/src/markdown-stream.tsx +107 -31
- package/src/markdown.tsx +75 -41
- package/src/renderers/image.tsx +2 -2
- package/src/renderers/math.tsx +2 -2
- package/src/renderers/table/index.tsx +4 -4
- package/src/renderers/table/table-utils.ts +1 -1
- package/src/utils/code-highlight.ts +1 -1
- package/src/utils/incremental-ast.ts +25 -9
- package/src/utils/link-security.ts +3 -3
- package/src/utils/stream-timeline.ts +10 -7
package/README.md
CHANGED
|
@@ -1,10 +1,13 @@
|
|
|
1
1
|
# react-native-nitro-markdown
|
|
2
2
|
|
|
3
3
|
[](https://www.npmjs.com/package/react-native-nitro-markdown)
|
|
4
|
+
[](https://www.npmjs.com/package/react-native-nitro-markdown)
|
|
5
|
+
[](https://github.com/JoaoPauloCMarra/react-native-nitro-markdown/actions/workflows/ci.yml)
|
|
4
6
|
[](https://github.com/JoaoPauloCMarra/react-native-nitro-markdown/blob/main/LICENSE)
|
|
5
7
|
[](https://reactnative.dev/)
|
|
6
|
-
[](https://expo.dev/)
|
|
7
|
-
[](https://
|
|
8
|
+
[](https://docs.expo.dev/versions/v56.0.0/)
|
|
9
|
+
[](https://www.npmjs.com/package/react-native-nitro-modules)
|
|
10
|
+
[](https://www.typescriptlang.org/)
|
|
8
11
|
|
|
9
12
|
Markdown parsing, rendering, streaming, and headless AST access for React
|
|
10
13
|
Native, powered by md4c and Nitro Modules.
|
|
@@ -23,6 +26,9 @@ AST access without building your own parser pipeline.
|
|
|
23
26
|
bun add react-native-nitro-markdown react-native-nitro-modules ratex-react-native
|
|
24
27
|
```
|
|
25
28
|
|
|
29
|
+
`react-native-nitro-modules` and `ratex-react-native` are peer dependencies
|
|
30
|
+
because parsing and math rendering use native code.
|
|
31
|
+
|
|
26
32
|
For Expo development builds:
|
|
27
33
|
|
|
28
34
|
```sh
|
|
@@ -100,6 +106,47 @@ run correctly. `MarkdownStream` accepts the controller returned by
|
|
|
100
106
|
`useMarkdownSession()`. Pass `session.getSession()` only when another API needs
|
|
101
107
|
direct access to the native session object.
|
|
102
108
|
|
|
109
|
+
### Custom stream rendering
|
|
110
|
+
|
|
111
|
+
Use `renderMarkdown` when you want `MarkdownStream` to keep the session
|
|
112
|
+
subscription, batching, and incremental AST updates while another component owns
|
|
113
|
+
the rendering. The callback receives the current text, the reusable source AST
|
|
114
|
+
when available, and `markdownProps` that match the built-in `Markdown`
|
|
115
|
+
component:
|
|
116
|
+
|
|
117
|
+
```tsx
|
|
118
|
+
<MarkdownStream
|
|
119
|
+
session={session}
|
|
120
|
+
renderMarkdown={({ text, sourceAst, markdownProps }) => (
|
|
121
|
+
<MyMarkdownRenderer
|
|
122
|
+
markdown={text}
|
|
123
|
+
ast={sourceAst}
|
|
124
|
+
fallbackProps={markdownProps}
|
|
125
|
+
/>
|
|
126
|
+
)}
|
|
127
|
+
/>
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
Use `useMarkdownStreamState` when you want the streaming state without the
|
|
131
|
+
`MarkdownStream` wrapper:
|
|
132
|
+
|
|
133
|
+
```tsx
|
|
134
|
+
const { text, sourceAst, sourceAstStatus } = useMarkdownStreamState({
|
|
135
|
+
session,
|
|
136
|
+
updateStrategy: "raf",
|
|
137
|
+
});
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
`sourceAst` is available when the stream can safely reuse Nitro's parsed AST.
|
|
141
|
+
When a `beforeParse` plugin is present, `sourceAstStatus` becomes `"disabled"`
|
|
142
|
+
and `sourceAstDisabledReason` is `"beforeParse-plugin"`. In that state,
|
|
143
|
+
`sourceAst` is omitted; render from `text` so the full plugin pipeline can run.
|
|
144
|
+
|
|
145
|
+
`MarkdownStream` avoids full-buffer reads on stable parent renders. It uses
|
|
146
|
+
native range reads for append-only updates, then falls back to a full session
|
|
147
|
+
read only for reset-like changes, replacements inside existing text, or native
|
|
148
|
+
range-read failures.
|
|
149
|
+
|
|
103
150
|
## Headless Parsing
|
|
104
151
|
|
|
105
152
|
```ts
|
|
@@ -151,6 +198,16 @@ already happened. `afterParse` plugins and `astTransform` still run.
|
|
|
151
198
|
| `highlightCode` | `false` | Enables built-in syntax highlighting. |
|
|
152
199
|
| `tableOptions` | Built-in defaults | Controls table measurement and minimum widths. |
|
|
153
200
|
|
|
201
|
+
## Compatibility
|
|
202
|
+
|
|
203
|
+
| Dependency | Supported range or baseline |
|
|
204
|
+
| ---------- | --------------------------- |
|
|
205
|
+
| [React Native](https://reactnative.dev/) | `>=0.75.0` |
|
|
206
|
+
| [Nitro Modules](https://www.npmjs.com/package/react-native-nitro-modules) | `>=0.35.7` |
|
|
207
|
+
| [RaTeX React Native](https://www.npmjs.com/package/ratex-react-native) | `>=0.1.4` |
|
|
208
|
+
| [Expo](https://docs.expo.dev/versions/v56.0.0/) | SDK 56 development builds |
|
|
209
|
+
| [TypeScript](https://www.typescriptlang.org/) | 6.0 in this package workspace |
|
|
210
|
+
|
|
154
211
|
## Custom Rendering
|
|
155
212
|
|
|
156
213
|
```tsx
|
|
@@ -249,13 +306,18 @@ Main export:
|
|
|
249
306
|
- `Markdown` for rendering complete markdown strings.
|
|
250
307
|
- `MarkdownStream` for incremental rendering.
|
|
251
308
|
- `MarkdownSession` and `useMarkdownSession()` for append/replace/reset flows.
|
|
309
|
+
- `useMarkdownStreamState()` for headless streaming text and AST state.
|
|
252
310
|
- `useStream()` for timestamped stream state.
|
|
253
311
|
- `defaultMarkdownTheme` and theme types.
|
|
254
312
|
- Renderer components such as `Paragraph`, `Heading`, `Link`, `CodeBlock`,
|
|
255
313
|
`List`, `Table`, and `Image`.
|
|
256
314
|
- Types including `MarkdownNode`, `MarkdownPlugin`, `CustomRenderers`,
|
|
257
315
|
`MarkdownRenderers`, `CustomRendererPropsByNode`, `ParserOptions`,
|
|
258
|
-
`MarkdownTheme`, `MarkdownSessionController`,
|
|
316
|
+
`MarkdownTheme`, `MarkdownSessionController`, `MarkdownStreamProps`,
|
|
317
|
+
`MarkdownStreamRenderProps`, `MarkdownStreamState`,
|
|
318
|
+
`MarkdownStreamSourceAstStatus`, `MarkdownStreamSourceAstDisabledReason`,
|
|
319
|
+
`UseMarkdownStreamStateOptions`, `CodeHighlighter`, `HighlightedToken`,
|
|
320
|
+
`TokenType`, and `UrlSafetyOptions`.
|
|
259
321
|
|
|
260
322
|
Headless export:
|
|
261
323
|
|
|
@@ -273,7 +335,7 @@ Headless export:
|
|
|
273
335
|
| iOS | Native parser through Nitro and md4c. |
|
|
274
336
|
| Android | Native parser through Nitro and md4c. |
|
|
275
337
|
| Expo | Development builds. |
|
|
276
|
-
| Web | Not
|
|
338
|
+
| Web | Not supported. The parser requires Nitro Modules (JSI); there is no web entrypoint and imports on web fail deterministically. |
|
|
277
339
|
|
|
278
340
|
## Troubleshooting
|
|
279
341
|
|
|
@@ -55,6 +55,13 @@ class HybridMarkdownSession: HybridMarkdownSessionSpec {
|
|
|
55
55
|
return (value as NSString).length
|
|
56
56
|
}
|
|
57
57
|
|
|
58
|
+
private func clampedIndex(_ value: Double, upperBound: Int) -> Int {
|
|
59
|
+
if value <= 0 { return 0 }
|
|
60
|
+
let upper = Double(upperBound)
|
|
61
|
+
if value >= upper { return upperBound }
|
|
62
|
+
return Int(value)
|
|
63
|
+
}
|
|
64
|
+
|
|
58
65
|
private func validateBufferSize(_ size: Int) throws {
|
|
59
66
|
if size > Self.maxBufferSize {
|
|
60
67
|
throw NSError(
|
|
@@ -120,8 +127,8 @@ class HybridMarkdownSession: HybridMarkdownSessionSpec {
|
|
|
120
127
|
|
|
121
128
|
let text = buffer as NSString
|
|
122
129
|
let length = text.length
|
|
123
|
-
let start =
|
|
124
|
-
let end = max(start,
|
|
130
|
+
let start = clampedIndex(from, upperBound: length)
|
|
131
|
+
let end = max(start, clampedIndex(to, upperBound: length))
|
|
125
132
|
return text.substring(with: NSRange(location: start, length: end - start))
|
|
126
133
|
}
|
|
127
134
|
|
|
@@ -179,8 +186,8 @@ class HybridMarkdownSession: HybridMarkdownSessionSpec {
|
|
|
179
186
|
}
|
|
180
187
|
let nsBuffer = NSMutableString(string: buffer)
|
|
181
188
|
let length = nsBuffer.length
|
|
182
|
-
start =
|
|
183
|
-
end = max(start,
|
|
189
|
+
start = clampedIndex(from, upperBound: length)
|
|
190
|
+
end = max(start, clampedIndex(to, upperBound: length))
|
|
184
191
|
try validateBufferSize(length - (end - start) + utf16Length(text))
|
|
185
192
|
nsBuffer.replaceCharacters(in: NSRange(location: start, length: end - start), with: text)
|
|
186
193
|
buffer = nsBuffer as String
|
|
@@ -9,9 +9,7 @@ var _theme = require("./theme.js");
|
|
|
9
9
|
const MarkdownContext = exports.MarkdownContext = /*#__PURE__*/(0, _react.createContext)({
|
|
10
10
|
renderers: {},
|
|
11
11
|
theme: _theme.defaultMarkdownTheme,
|
|
12
|
-
|
|
13
|
-
stylingStrategy: "opinionated",
|
|
14
|
-
onLinkPress: undefined
|
|
12
|
+
stylingStrategy: "opinionated"
|
|
15
13
|
});
|
|
16
14
|
const useMarkdownContext = () => (0, _react.useContext)(MarkdownContext);
|
|
17
15
|
exports.useMarkdownContext = useMarkdownContext;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_react","require","_theme","MarkdownContext","exports","createContext","renderers","theme","defaultMarkdownTheme","
|
|
1
|
+
{"version":3,"names":["_react","require","_theme","MarkdownContext","exports","createContext","renderers","theme","defaultMarkdownTheme","stylingStrategy","useMarkdownContext","useContext"],"sourceRoot":"../../src","sources":["MarkdownContext.ts"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;AAOA,IAAAC,MAAA,GAAAD,OAAA;AAwIO,MAAME,eAAe,GAAAC,OAAA,CAAAD,eAAA,gBAAG,IAAAE,oBAAa,EAAuB;EACjEC,SAAS,EAAE,CAAC,CAAC;EACbC,KAAK,EAAEC,2BAAoB;EAC3BC,eAAe,EAAE;AACnB,CAAC,CAAC;AAEK,MAAMC,kBAAkB,GAAGA,CAAA,KAAM,IAAAC,iBAAU,EAACR,eAAe,CAAC;AAACC,OAAA,CAAAM,kBAAA,GAAAA,kBAAA","ignoreList":[]}
|
package/lib/commonjs/index.js
CHANGED
|
@@ -195,6 +195,12 @@ Object.defineProperty(exports, "useMarkdownSession", {
|
|
|
195
195
|
return _useMarkdownStream.useMarkdownSession;
|
|
196
196
|
}
|
|
197
197
|
});
|
|
198
|
+
Object.defineProperty(exports, "useMarkdownStreamState", {
|
|
199
|
+
enumerable: true,
|
|
200
|
+
get: function () {
|
|
201
|
+
return _markdownStream.useMarkdownStreamState;
|
|
202
|
+
}
|
|
203
|
+
});
|
|
198
204
|
Object.defineProperty(exports, "useStream", {
|
|
199
205
|
enumerable: true,
|
|
200
206
|
get: function () {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_headless","require","_markdown","_markdownStream","_MarkdownContext","_theme","_heading","_paragraph","_link","_blockquote","_horizontalRule","_code","_list","_table","_image","_math","_MarkdownSession","_useMarkdownStream","_codeHighlight"],"sourceRoot":"../../src","sources":["index.ts"],"mappings":"
|
|
1
|
+
{"version":3,"names":["_headless","require","_markdown","_markdownStream","_MarkdownContext","_theme","_heading","_paragraph","_link","_blockquote","_horizontalRule","_code","_list","_table","_image","_math","_MarkdownSession","_useMarkdownStream","_codeHighlight"],"sourceRoot":"../../src","sources":["index.ts"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,IAAAA,SAAA,GAAAC,OAAA;AAmBA,IAAAC,SAAA,GAAAD,OAAA;AASA,IAAAE,eAAA,GAAAF,OAAA;AAUA,IAAAG,gBAAA,GAAAH,OAAA;AAuBA,IAAAI,MAAA,GAAAJ,OAAA;AAYA,IAAAK,QAAA,GAAAL,OAAA;AACA,IAAAM,UAAA,GAAAN,OAAA;AACA,IAAAO,KAAA,GAAAP,OAAA;AACA,IAAAQ,WAAA,GAAAR,OAAA;AACA,IAAAS,eAAA,GAAAT,OAAA;AACA,IAAAU,KAAA,GAAAV,OAAA;AACA,IAAAW,KAAA,GAAAX,OAAA;AACA,IAAAY,MAAA,GAAAZ,OAAA;AACA,IAAAa,MAAA,GAAAb,OAAA;AACA,IAAAc,KAAA,GAAAd,OAAA;AAEA,IAAAe,gBAAA,GAAAf,OAAA;AAEA,IAAAgB,kBAAA,GAAAhB,OAAA;AAQA,IAAAiB,cAAA,GAAAjB,OAAA","ignoreList":[]}
|
|
@@ -4,6 +4,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.MarkdownStream = void 0;
|
|
7
|
+
exports.useMarkdownStreamState = useMarkdownStreamState;
|
|
7
8
|
var _react = require("react");
|
|
8
9
|
var _markdown = require("./markdown.js");
|
|
9
10
|
var _useMarkdownStream = require("./use-markdown-stream.js");
|
|
@@ -22,11 +23,11 @@ const normalizeParserOptions = options => {
|
|
|
22
23
|
if (gfm === undefined && math === undefined && html === undefined) {
|
|
23
24
|
return undefined;
|
|
24
25
|
}
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
26
|
+
const normalized = {};
|
|
27
|
+
if (gfm !== undefined) normalized.gfm = gfm;
|
|
28
|
+
if (math !== undefined) normalized.math = math;
|
|
29
|
+
if (html !== undefined) normalized.html = html;
|
|
30
|
+
return normalized;
|
|
30
31
|
};
|
|
31
32
|
const resolveStreamText = ({
|
|
32
33
|
forceFullSync,
|
|
@@ -65,41 +66,41 @@ function warnStreamError(message, error) {
|
|
|
65
66
|
warn.call(console, message, error);
|
|
66
67
|
}
|
|
67
68
|
}
|
|
68
|
-
|
|
69
|
-
* A component that renders streaming Markdown from a MarkdownSession.
|
|
70
|
-
* It efficiently subscribes to session updates to minimize parent re-renders.
|
|
71
|
-
*/
|
|
72
|
-
const MarkdownStream = ({
|
|
69
|
+
function useMarkdownStreamState({
|
|
73
70
|
session,
|
|
74
71
|
updateIntervalMs = 50,
|
|
75
72
|
updateStrategy = "interval",
|
|
76
73
|
useTransitionUpdates = false,
|
|
77
74
|
incrementalParsing = true,
|
|
78
75
|
options,
|
|
79
|
-
plugins
|
|
80
|
-
|
|
81
|
-
}) => {
|
|
76
|
+
plugins
|
|
77
|
+
}) {
|
|
82
78
|
const activeSession = (0, _useMarkdownStream.resolveMarkdownSession)(session);
|
|
83
79
|
const parserOptionGfm = options?.gfm;
|
|
84
80
|
const parserOptionMath = options?.math;
|
|
85
81
|
const parserOptionHtml = options?.html;
|
|
86
|
-
const parserOptions = (0, _react.useMemo)(() => normalizeParserOptions({
|
|
87
|
-
gfm: parserOptionGfm
|
|
88
|
-
|
|
82
|
+
const parserOptions = (0, _react.useMemo)(() => normalizeParserOptions(Object.assign({}, parserOptionGfm === undefined ? null : {
|
|
83
|
+
gfm: parserOptionGfm
|
|
84
|
+
}, parserOptionMath === undefined ? null : {
|
|
85
|
+
math: parserOptionMath
|
|
86
|
+
}, parserOptionHtml === undefined ? null : {
|
|
89
87
|
html: parserOptionHtml
|
|
90
|
-
}), [parserOptionGfm, parserOptionMath, parserOptionHtml]);
|
|
88
|
+
})), [parserOptionGfm, parserOptionMath, parserOptionHtml]);
|
|
91
89
|
const parseText = (0, _react.useCallback)(text => (0, _incrementalAst.parseMarkdownAst)(text, parserOptions), [parserOptions]);
|
|
92
90
|
const createEmptyAst = () => ({
|
|
93
91
|
type: "document",
|
|
94
92
|
children: []
|
|
95
93
|
});
|
|
96
|
-
const initialText = activeSession.getAllText();
|
|
97
94
|
const hasBeforeParsePlugins = plugins?.some(plugin => typeof plugin.beforeParse === "function") ?? false;
|
|
98
|
-
const [renderState, setRenderState] = (0, _react.useState)(() =>
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
95
|
+
const [renderState, setRenderState] = (0, _react.useState)(() => {
|
|
96
|
+
const initialText = activeSession.getAllText();
|
|
97
|
+
return {
|
|
98
|
+
text: initialText,
|
|
99
|
+
ast: hasBeforeParsePlugins ? createEmptyAst() : parseText(initialText)
|
|
100
|
+
};
|
|
101
|
+
});
|
|
102
102
|
const renderStateRef = (0, _react.useRef)(renderState);
|
|
103
|
+
const didMountRef = (0, _react.useRef)(false);
|
|
103
104
|
const pendingUpdateRef = (0, _react.useRef)(false);
|
|
104
105
|
const pendingFromRef = (0, _react.useRef)(null);
|
|
105
106
|
const pendingToRef = (0, _react.useRef)(null);
|
|
@@ -118,6 +119,10 @@ const MarkdownStream = ({
|
|
|
118
119
|
};
|
|
119
120
|
}, []);
|
|
120
121
|
(0, _react.useEffect)(() => {
|
|
122
|
+
if (!didMountRef.current) {
|
|
123
|
+
didMountRef.current = true;
|
|
124
|
+
return;
|
|
125
|
+
}
|
|
121
126
|
const initialText = activeSession.getAllText();
|
|
122
127
|
const initialState = {
|
|
123
128
|
text: initialText,
|
|
@@ -163,9 +168,11 @@ const MarkdownStream = ({
|
|
|
163
168
|
const nextAst = hasBeforeParsePlugins ? previousState.ast : (0, _incrementalAst.getNextStreamAst)({
|
|
164
169
|
allowIncremental,
|
|
165
170
|
nextText: latest,
|
|
166
|
-
options: parserOptions,
|
|
167
171
|
previousAst: previousState.ast,
|
|
168
|
-
previousText: previousState.text
|
|
172
|
+
previousText: previousState.text,
|
|
173
|
+
...(parserOptions ? {
|
|
174
|
+
options: parserOptions
|
|
175
|
+
} : {})
|
|
169
176
|
});
|
|
170
177
|
const nextState = {
|
|
171
178
|
text: latest,
|
|
@@ -233,12 +240,56 @@ const MarkdownStream = ({
|
|
|
233
240
|
}
|
|
234
241
|
};
|
|
235
242
|
}, [allowIncremental, hasBeforeParsePlugins, parserOptions, activeSession, updateIntervalMs, updateStrategy, useTransitionUpdates]);
|
|
236
|
-
|
|
243
|
+
const streamState = {
|
|
244
|
+
text: renderState.text,
|
|
245
|
+
sourceAstStatus: hasBeforeParsePlugins ? "disabled" : "available"
|
|
246
|
+
};
|
|
247
|
+
if (hasBeforeParsePlugins) {
|
|
248
|
+
streamState.sourceAstDisabledReason = "beforeParse-plugin";
|
|
249
|
+
} else {
|
|
250
|
+
streamState.sourceAst = renderState.ast;
|
|
251
|
+
}
|
|
252
|
+
return streamState;
|
|
253
|
+
}
|
|
254
|
+
const MarkdownStream = ({
|
|
255
|
+
session,
|
|
256
|
+
updateIntervalMs = 50,
|
|
257
|
+
updateStrategy = "interval",
|
|
258
|
+
useTransitionUpdates = false,
|
|
259
|
+
incrementalParsing = true,
|
|
260
|
+
options,
|
|
261
|
+
plugins,
|
|
262
|
+
renderMarkdown,
|
|
263
|
+
...props
|
|
264
|
+
}) => {
|
|
265
|
+
const streamState = useMarkdownStreamState({
|
|
266
|
+
session,
|
|
267
|
+
updateIntervalMs,
|
|
268
|
+
updateStrategy,
|
|
269
|
+
useTransitionUpdates,
|
|
270
|
+
incrementalParsing,
|
|
271
|
+
...(options ? {
|
|
272
|
+
options
|
|
273
|
+
} : {}),
|
|
274
|
+
...(plugins ? {
|
|
275
|
+
plugins
|
|
276
|
+
} : {})
|
|
277
|
+
});
|
|
278
|
+
const markdownProps = {
|
|
237
279
|
...props,
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
280
|
+
children: streamState.text
|
|
281
|
+
};
|
|
282
|
+
if (options) markdownProps.options = options;
|
|
283
|
+
if (plugins) markdownProps.plugins = plugins;
|
|
284
|
+
if (streamState.sourceAst) markdownProps.sourceAst = streamState.sourceAst;
|
|
285
|
+
if (renderMarkdown) {
|
|
286
|
+
return renderMarkdown({
|
|
287
|
+
...streamState,
|
|
288
|
+
markdownProps
|
|
289
|
+
});
|
|
290
|
+
}
|
|
291
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_markdown.Markdown, {
|
|
292
|
+
...markdownProps
|
|
242
293
|
});
|
|
243
294
|
};
|
|
244
295
|
exports.MarkdownStream = MarkdownStream;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_react","require","_markdown","_useMarkdownStream","_incrementalAst","_jsxRuntime","normalizeOffset","value","Number","isFinite","Math","floor","normalizeParserOptions","options","undefined","gfm","math","html","resolveStreamText","forceFullSync","pendingFrom","pendingTo","previousText","session","getAllText","length","appendedChunk","getTextRange","warnStreamError","message","error","__DEV__","warn","Reflect","get","console","call","MarkdownStream","updateIntervalMs","updateStrategy","useTransitionUpdates","incrementalParsing","plugins","props","activeSession","resolveMarkdownSession","parserOptionGfm","parserOptionMath","parserOptionHtml","parserOptions","useMemo","parseText","useCallback","text","parseMarkdownAst","createEmptyAst","type","children","initialText","hasBeforeParsePlugins","some","plugin","beforeParse","renderState","setRenderState","useState","ast","renderStateRef","useRef","pendingUpdateRef","pendingFromRef","pendingToRef","forceFullSyncRef","updateTimerRef","rafRef","mountedRef","allowIncremental","useEffect","current","initialState","flushUpdate","cancelAnimationFrame","previousState","latest","nextAst","getNextStreamAst","nextText","previousAst","nextState","startTransition","scheduleFlush","requestAnimationFrame","setTimeout","unsubscribe","addListener","from","to","nextFrom","nextTo","currentFrom","currentTo","min","max","clearTimeout","jsx","Markdown","sourceAst","exports"],"sourceRoot":"../../src","sources":["markdown-stream.tsx"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["_react","require","_markdown","_useMarkdownStream","_incrementalAst","_jsxRuntime","normalizeOffset","value","Number","isFinite","Math","floor","normalizeParserOptions","options","undefined","gfm","math","html","normalized","resolveStreamText","forceFullSync","pendingFrom","pendingTo","previousText","session","getAllText","length","appendedChunk","getTextRange","warnStreamError","message","error","__DEV__","warn","Reflect","get","console","call","useMarkdownStreamState","updateIntervalMs","updateStrategy","useTransitionUpdates","incrementalParsing","plugins","activeSession","resolveMarkdownSession","parserOptionGfm","parserOptionMath","parserOptionHtml","parserOptions","useMemo","Object","assign","parseText","useCallback","text","parseMarkdownAst","createEmptyAst","type","children","hasBeforeParsePlugins","some","plugin","beforeParse","renderState","setRenderState","useState","initialText","ast","renderStateRef","useRef","didMountRef","pendingUpdateRef","pendingFromRef","pendingToRef","forceFullSyncRef","updateTimerRef","rafRef","mountedRef","allowIncremental","useEffect","current","initialState","flushUpdate","cancelAnimationFrame","previousState","latest","nextAst","getNextStreamAst","nextText","previousAst","nextState","startTransition","scheduleFlush","requestAnimationFrame","setTimeout","unsubscribe","addListener","from","to","nextFrom","nextTo","currentFrom","currentTo","min","max","clearTimeout","streamState","sourceAstStatus","sourceAstDisabledReason","sourceAst","MarkdownStream","renderMarkdown","props","markdownProps","jsx","Markdown","exports"],"sourceRoot":"../../src","sources":["markdown-stream.tsx"],"mappings":"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","ignoreList":[]}
|
package/lib/commonjs/markdown.js
CHANGED
|
@@ -65,9 +65,12 @@ const warnInDev = (message, error) => {
|
|
|
65
65
|
}
|
|
66
66
|
};
|
|
67
67
|
const cloneMarkdownNode = node => {
|
|
68
|
-
|
|
68
|
+
const children = node.children?.map(cloneMarkdownNode);
|
|
69
|
+
return children ? {
|
|
69
70
|
...node,
|
|
70
|
-
children
|
|
71
|
+
children
|
|
72
|
+
} : {
|
|
73
|
+
...node
|
|
71
74
|
};
|
|
72
75
|
};
|
|
73
76
|
const getParserOptionsKey = options => {
|
|
@@ -85,11 +88,11 @@ const normalizeParserOptions = options => {
|
|
|
85
88
|
if (gfm === undefined && math === undefined && html === undefined) {
|
|
86
89
|
return undefined;
|
|
87
90
|
}
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
91
|
+
const normalized = {};
|
|
92
|
+
if (gfm !== undefined) normalized.gfm = gfm;
|
|
93
|
+
if (math !== undefined) normalized.math = math;
|
|
94
|
+
if (html !== undefined) normalized.html = html;
|
|
95
|
+
return normalized;
|
|
93
96
|
};
|
|
94
97
|
const parseWithNativeParser = (text, options) => {
|
|
95
98
|
if (options) {
|
|
@@ -201,11 +204,13 @@ const Markdown = ({
|
|
|
201
204
|
try {
|
|
202
205
|
const sortedPlugins = sortPluginsByPriority(plugins);
|
|
203
206
|
const markdownToParse = sourceAst ? children : applyBeforeParsePlugins(children, sortedPlugins, onErrorRef.current);
|
|
204
|
-
const parserOptions = normalizeParserOptions({
|
|
205
|
-
gfm: parserOptionGfm
|
|
206
|
-
|
|
207
|
+
const parserOptions = normalizeParserOptions(Object.assign({}, parserOptionGfm === undefined ? null : {
|
|
208
|
+
gfm: parserOptionGfm
|
|
209
|
+
}, parserOptionMath === undefined ? null : {
|
|
210
|
+
math: parserOptionMath
|
|
211
|
+
}, parserOptionHtml === undefined ? null : {
|
|
207
212
|
html: parserOptionHtml
|
|
208
|
-
});
|
|
213
|
+
}));
|
|
209
214
|
const shouldCloneSourceAst = sourceAst && (Boolean(astTransform) || sortedPlugins?.some(plugin => plugin.afterParse) === true);
|
|
210
215
|
let parsedAst = sourceAst ? shouldCloneSourceAst ? cloneMarkdownNode(sourceAst) : sourceAst : parseCache ? getCachedParsedAst(markdownToParse, parserOptions) : parseWithNativeParser(markdownToParse, parserOptions);
|
|
211
216
|
parsedAst = applyAfterParsePlugins(parsedAst, sortedPlugins, onErrorRef.current);
|
|
@@ -252,12 +257,22 @@ const Markdown = ({
|
|
|
252
257
|
const contextValue = (0, _react.useMemo)(() => ({
|
|
253
258
|
renderers,
|
|
254
259
|
theme,
|
|
255
|
-
styles: nodeStyles,
|
|
256
260
|
stylingStrategy,
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
+
...(nodeStyles ? {
|
|
262
|
+
styles: nodeStyles
|
|
263
|
+
} : {}),
|
|
264
|
+
...(onLinkPress ? {
|
|
265
|
+
onLinkPress
|
|
266
|
+
} : {}),
|
|
267
|
+
...(tableOptions ? {
|
|
268
|
+
tableOptions
|
|
269
|
+
} : {}),
|
|
270
|
+
...(imageOptions ? {
|
|
271
|
+
imageOptions
|
|
272
|
+
} : {}),
|
|
273
|
+
...(highlightCode === undefined ? {} : {
|
|
274
|
+
highlightCode
|
|
275
|
+
})
|
|
261
276
|
}), [renderers, theme, nodeStyles, stylingStrategy, onLinkPress, tableOptions, imageOptions, highlightCode]);
|
|
262
277
|
const topLevelBlocks = parseResult.ast?.type === "document" ? parseResult.ast.children ?? [] : parseResult.ast ? [parseResult.ast] : [];
|
|
263
278
|
const shouldVirtualizeBySetting = virtualize === true || virtualize === "auto" && topLevelBlocks.length >= virtualizationMinBlocks;
|
|
@@ -396,16 +411,24 @@ const NodeRendererComponent = ({
|
|
|
396
411
|
}),
|
|
397
412
|
...(node.type === "link" && {
|
|
398
413
|
href: node.href ?? "",
|
|
399
|
-
|
|
414
|
+
...(node.title ? {
|
|
415
|
+
title: node.title
|
|
416
|
+
} : {})
|
|
400
417
|
}),
|
|
401
418
|
...(node.type === "image" && {
|
|
402
419
|
url: node.href ?? "",
|
|
403
|
-
|
|
404
|
-
|
|
420
|
+
...(node.alt ? {
|
|
421
|
+
alt: node.alt
|
|
422
|
+
} : {}),
|
|
423
|
+
...(node.title ? {
|
|
424
|
+
title: node.title
|
|
425
|
+
} : {})
|
|
405
426
|
}),
|
|
406
427
|
...(node.type === "code_block" && {
|
|
407
428
|
content: (0, _headless.getTextContent)(node),
|
|
408
|
-
|
|
429
|
+
...(node.language ? {
|
|
430
|
+
language: node.language
|
|
431
|
+
} : {})
|
|
409
432
|
}),
|
|
410
433
|
...(node.type === "code_inline" && {
|
|
411
434
|
content: node.content ?? ""
|
|
@@ -415,7 +438,9 @@ const NodeRendererComponent = ({
|
|
|
415
438
|
}),
|
|
416
439
|
...(node.type === "list" && {
|
|
417
440
|
ordered: node.ordered ?? false,
|
|
418
|
-
start:
|
|
441
|
+
...(node.start === undefined ? {} : {
|
|
442
|
+
start: node.start
|
|
443
|
+
})
|
|
419
444
|
}),
|
|
420
445
|
...(node.type === "task_list_item" && {
|
|
421
446
|
checked: node.checked ?? false
|
|
@@ -435,7 +460,9 @@ const NodeRendererComponent = ({
|
|
|
435
460
|
case "heading":
|
|
436
461
|
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_heading.Heading, {
|
|
437
462
|
level: node.level ?? 1,
|
|
438
|
-
|
|
463
|
+
...(nodeStyles?.heading ? {
|
|
464
|
+
style: nodeStyles.heading
|
|
465
|
+
} : {}),
|
|
439
466
|
children: renderChildren(node.children, inListItem, true)
|
|
440
467
|
});
|
|
441
468
|
case "paragraph":
|
|
@@ -472,36 +499,54 @@ const NodeRendererComponent = ({
|
|
|
472
499
|
case "link":
|
|
473
500
|
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_link.Link, {
|
|
474
501
|
href: node.href ?? "",
|
|
475
|
-
|
|
502
|
+
...(nodeStyles?.link ? {
|
|
503
|
+
style: nodeStyles.link
|
|
504
|
+
} : {}),
|
|
476
505
|
children: renderChildren(node.children, inListItem, true)
|
|
477
506
|
});
|
|
478
507
|
case "image":
|
|
479
508
|
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_image.Image, {
|
|
480
509
|
url: node.href ?? "",
|
|
481
|
-
title: node.title,
|
|
482
|
-
alt: node.alt,
|
|
483
510
|
Renderer: NodeRenderer,
|
|
484
|
-
|
|
511
|
+
...(node.title ? {
|
|
512
|
+
title: node.title
|
|
513
|
+
} : {}),
|
|
514
|
+
...(node.alt ? {
|
|
515
|
+
alt: node.alt
|
|
516
|
+
} : {}),
|
|
517
|
+
...(nodeStyles?.image ? {
|
|
518
|
+
style: nodeStyles.image
|
|
519
|
+
} : {})
|
|
485
520
|
});
|
|
486
521
|
case "code_inline":
|
|
487
522
|
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_code.InlineCode, {
|
|
488
|
-
|
|
523
|
+
...(nodeStyles?.code_inline ? {
|
|
524
|
+
style: nodeStyles.code_inline
|
|
525
|
+
} : {}),
|
|
489
526
|
children: node.content
|
|
490
527
|
});
|
|
491
528
|
case "code_block":
|
|
492
529
|
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_code.CodeBlock, {
|
|
493
|
-
language: node.language,
|
|
494
530
|
content: (0, _headless.getTextContent)(node),
|
|
495
|
-
|
|
531
|
+
...(node.language ? {
|
|
532
|
+
language: node.language
|
|
533
|
+
} : {}),
|
|
534
|
+
...(nodeStyles?.code_block ? {
|
|
535
|
+
style: nodeStyles.code_block
|
|
536
|
+
} : {})
|
|
496
537
|
});
|
|
497
538
|
case "blockquote":
|
|
498
539
|
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_blockquote.Blockquote, {
|
|
499
|
-
|
|
540
|
+
...(nodeStyles?.blockquote ? {
|
|
541
|
+
style: nodeStyles.blockquote
|
|
542
|
+
} : {}),
|
|
500
543
|
children: renderChildren(node.children, inListItem, false)
|
|
501
544
|
});
|
|
502
545
|
case "horizontal_rule":
|
|
503
546
|
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_horizontalRule.HorizontalRule, {
|
|
504
|
-
|
|
547
|
+
...(nodeStyles?.horizontal_rule ? {
|
|
548
|
+
style: nodeStyles.horizontal_rule
|
|
549
|
+
} : {})
|
|
505
550
|
});
|
|
506
551
|
case "line_break":
|
|
507
552
|
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
|
|
@@ -518,20 +563,28 @@ const NodeRendererComponent = ({
|
|
|
518
563
|
mathContent = mathContent.replace(/^\$+|\$+$/g, "").trim();
|
|
519
564
|
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_math.MathInline, {
|
|
520
565
|
content: mathContent,
|
|
521
|
-
|
|
566
|
+
...(nodeStyles?.math_inline ? {
|
|
567
|
+
style: nodeStyles.math_inline
|
|
568
|
+
} : {})
|
|
522
569
|
});
|
|
523
570
|
}
|
|
524
571
|
case "math_block":
|
|
525
572
|
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_math.MathBlock, {
|
|
526
573
|
content: (0, _headless.getTextContent)(node),
|
|
527
|
-
|
|
574
|
+
...(nodeStyles?.math_block ? {
|
|
575
|
+
style: nodeStyles.math_block
|
|
576
|
+
} : {})
|
|
528
577
|
});
|
|
529
578
|
case "list":
|
|
530
579
|
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_list.List, {
|
|
531
580
|
ordered: node.ordered ?? false,
|
|
532
|
-
start: node.start,
|
|
533
581
|
depth: depth,
|
|
534
|
-
|
|
582
|
+
...(node.start === undefined ? {} : {
|
|
583
|
+
start: node.start
|
|
584
|
+
}),
|
|
585
|
+
...(nodeStyles?.list ? {
|
|
586
|
+
style: nodeStyles.list
|
|
587
|
+
} : {}),
|
|
535
588
|
children: node.children?.map((child, index) => {
|
|
536
589
|
if (child.type === "task_list_item") {
|
|
537
590
|
return /*#__PURE__*/(0, _jsxRuntime.jsx)(NodeRenderer, {
|
|
@@ -561,14 +614,18 @@ const NodeRendererComponent = ({
|
|
|
561
614
|
case "task_list_item":
|
|
562
615
|
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_list.TaskListItem, {
|
|
563
616
|
checked: node.checked ?? false,
|
|
564
|
-
|
|
617
|
+
...(nodeStyles?.task_list_item ? {
|
|
618
|
+
style: nodeStyles.task_list_item
|
|
619
|
+
} : {}),
|
|
565
620
|
children: renderChildren(node.children, true, false)
|
|
566
621
|
});
|
|
567
622
|
case "table":
|
|
568
623
|
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_table.TableRenderer, {
|
|
569
624
|
node: node,
|
|
570
625
|
Renderer: NodeRenderer,
|
|
571
|
-
|
|
626
|
+
...(nodeStyles?.table ? {
|
|
627
|
+
style: nodeStyles.table
|
|
628
|
+
} : {})
|
|
572
629
|
});
|
|
573
630
|
case "table_head":
|
|
574
631
|
case "table_body":
|