stream-markdown-parser 0.0.59-beta.1 → 0.0.59-beta.10
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 +20 -16
- package/README.zh-CN.md +20 -16
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +818 -171
- package/dist/index.js.map +1 -1
- package/package.json +13 -15
package/README.md
CHANGED
|
@@ -45,7 +45,7 @@ yarn add stream-markdown-parser
|
|
|
45
45
|
- `getMarkdown(msgId?, options?)` — create a `markdown-it-ts` instance with built-in plugins (task lists, sub/sup, math helpers, etc.). Also accepts `plugin`, `apply`, and `i18n` options.
|
|
46
46
|
- `registerMarkdownPlugin(plugin)` / `clearRegisteredMarkdownPlugins()` — add or remove global plugins that run for every `getMarkdown()` call (useful for feature flags or tests).
|
|
47
47
|
- `parseMarkdownToStructure(markdown, md, parseOptions)` — convert Markdown into the streaming-friendly AST consumed by `markstream-vue` and other renderers.
|
|
48
|
-
- `processTokens(tokens)` / `parseInlineTokens(children, content)` — low-level helpers if you want to bypass the built-in AST pipeline.
|
|
48
|
+
- `processTokens(tokens)` / `parseInlineTokens(children, content?, preToken?, options?)` — low-level helpers if you want to bypass the built-in AST pipeline.
|
|
49
49
|
- `applyMath`, `applyContainers`, `normalizeStandaloneBackslashT`, `findMatchingClose`, etc. — utilities for custom parsing or linting workflows.
|
|
50
50
|
|
|
51
51
|
## Usage
|
|
@@ -55,7 +55,7 @@ yarn add stream-markdown-parser
|
|
|
55
55
|
```
|
|
56
56
|
Markdown string
|
|
57
57
|
↓ getMarkdown() → markdown-it-ts instance with plugins
|
|
58
|
-
parseMarkdownToStructure() → AST (ParsedNode[])
|
|
58
|
+
parseMarkdownToStructure(markdown, md) → AST (ParsedNode[])
|
|
59
59
|
↓ feed into your renderer (markstream-vue, custom UI, workers)
|
|
60
60
|
```
|
|
61
61
|
|
|
@@ -210,13 +210,13 @@ interface GetMarkdownOptions {
|
|
|
210
210
|
}
|
|
211
211
|
```
|
|
212
212
|
|
|
213
|
-
#### `parseMarkdownToStructure(content, md
|
|
213
|
+
#### `parseMarkdownToStructure(content, md, options?)`
|
|
214
214
|
|
|
215
215
|
Parses markdown content into a structured node tree.
|
|
216
216
|
|
|
217
217
|
**Parameters:**
|
|
218
218
|
- `content` (string): The markdown content to parse
|
|
219
|
-
- `md` (MarkdownItCore
|
|
219
|
+
- `md` (MarkdownItCore): A markdown-it-ts instance created with `getMarkdown()`
|
|
220
220
|
- `options` (ParseOptions, optional): Parsing options with hooks
|
|
221
221
|
|
|
222
222
|
**Returns:** `ParsedNode[]` - An array of parsed nodes
|
|
@@ -225,9 +225,9 @@ Parses markdown content into a structured node tree.
|
|
|
225
225
|
|
|
226
226
|
Processes raw markdown-it tokens into a flat array.
|
|
227
227
|
|
|
228
|
-
#### `parseInlineTokens(tokens,
|
|
228
|
+
#### `parseInlineTokens(tokens, content?, preToken?, options?)`
|
|
229
229
|
|
|
230
|
-
Parses inline markdown-it-ts tokens.
|
|
230
|
+
Parses inline markdown-it-ts tokens into renderer nodes. Pass the inline token array plus the optional raw `content` string (from the parent token), an optional previous token, and inline parse options (`requireClosingStrong`, `customHtmlTags`).
|
|
231
231
|
|
|
232
232
|
### Configuration Functions
|
|
233
233
|
|
|
@@ -247,15 +247,18 @@ interface MathOptions {
|
|
|
247
247
|
|
|
248
248
|
### Parse hooks (fine-grained transforms)
|
|
249
249
|
|
|
250
|
-
|
|
250
|
+
ParseOptions supports the following hooks and flags:
|
|
251
251
|
|
|
252
252
|
```ts
|
|
253
253
|
interface ParseOptions {
|
|
254
254
|
preTransformTokens?: (tokens: Token[]) => Token[]
|
|
255
255
|
postTransformTokens?: (tokens: Token[]) => Token[]
|
|
256
|
-
postTransformNodes?: (nodes: ParsedNode[]) => ParsedNode[]
|
|
257
256
|
// Custom HTML-like tags to emit as custom nodes (e.g. ['thinking'])
|
|
258
257
|
customHtmlTags?: string[]
|
|
258
|
+
// When true, treats the input as complete (end-of-stream)
|
|
259
|
+
final?: boolean
|
|
260
|
+
// Require closing `**` for strong parsing (default: false)
|
|
261
|
+
requireClosingStrong?: boolean
|
|
259
262
|
}
|
|
260
263
|
```
|
|
261
264
|
|
|
@@ -263,21 +266,22 @@ Example — flag AI “thinking” blocks:
|
|
|
263
266
|
|
|
264
267
|
```ts
|
|
265
268
|
const parseOptions = {
|
|
266
|
-
|
|
267
|
-
return nodes.map(node =>
|
|
268
|
-
node.type === 'html_block' && /<thinking>/.test(node.value)
|
|
269
|
-
? { ...node, meta: { type: 'thinking' } }
|
|
270
|
-
: node,
|
|
271
|
-
)
|
|
272
|
-
},
|
|
269
|
+
customHtmlTags: ['thinking'],
|
|
273
270
|
}
|
|
271
|
+
|
|
272
|
+
const nodes = parseMarkdownToStructure(markdown, md, parseOptions)
|
|
273
|
+
const tagged = nodes.map(node =>
|
|
274
|
+
node.type === 'html_block' && /<thinking>/.test((node as any).content ?? '')
|
|
275
|
+
? { ...node, meta: { type: 'thinking' } }
|
|
276
|
+
: node,
|
|
277
|
+
)
|
|
274
278
|
```
|
|
275
279
|
|
|
276
280
|
Use the metadata in your renderer to show custom UI without mangling the original Markdown.
|
|
277
281
|
|
|
278
282
|
### Unknown HTML-like tags
|
|
279
283
|
|
|
280
|
-
By default, non-standard HTML-like tags (for example `<question>`) are rendered as **literal text**
|
|
284
|
+
By default, non-standard HTML-like tags (for example `<question>`) are rendered as raw HTML elements once they are complete; during streaming, partial tags are kept as **literal text** to avoid flicker. If you want them emitted as custom nodes (`type: 'question'` with parsed attrs/content), opt in via `customHtmlTags`.
|
|
281
285
|
|
|
282
286
|
### Utility Functions
|
|
283
287
|
|
package/README.zh-CN.md
CHANGED
|
@@ -45,7 +45,7 @@ yarn add stream-markdown-parser
|
|
|
45
45
|
- `getMarkdown(msgId?, options?)` — 返回一个预配置的 `markdown-it-ts` 实例;支持 `plugin`、`apply`、`i18n` 等选项(内置任务列表、上下标、数学等插件)。
|
|
46
46
|
- `registerMarkdownPlugin(plugin)` / `clearRegisteredMarkdownPlugins()` — 全局注册/清除插件,在所有 `getMarkdown()` 调用中生效(适合特性开关或测试环境)。
|
|
47
47
|
- `parseMarkdownToStructure(markdown, md, parseOptions)` — 将 Markdown 转换为可供 `markstream-vue` 等渲染器使用的 AST。
|
|
48
|
-
- `processTokens(tokens)` / `parseInlineTokens(children, content)` — 更底层的 token → 节点工具,方便自定义管线。
|
|
48
|
+
- `processTokens(tokens)` / `parseInlineTokens(children, content?, preToken?, options?)` — 更底层的 token → 节点工具,方便自定义管线。
|
|
49
49
|
- `applyMath`、`applyContainers`、`normalizeStandaloneBackslashT`、`findMatchingClose` 等 — 用于构建自定义解析、lint 或内容清洗流程。
|
|
50
50
|
|
|
51
51
|
## 使用
|
|
@@ -55,7 +55,7 @@ yarn add stream-markdown-parser
|
|
|
55
55
|
```
|
|
56
56
|
Markdown 字符串
|
|
57
57
|
↓ getMarkdown() → 带插件的 markdown-it-ts 实例
|
|
58
|
-
parseMarkdownToStructure() → AST (ParsedNode[])
|
|
58
|
+
parseMarkdownToStructure(markdown, md) → AST (ParsedNode[])
|
|
59
59
|
↓ 交给你的渲染器(markstream-vue、自定义 UI、Worker 等)
|
|
60
60
|
```
|
|
61
61
|
|
|
@@ -209,13 +209,13 @@ interface GetMarkdownOptions {
|
|
|
209
209
|
}
|
|
210
210
|
```
|
|
211
211
|
|
|
212
|
-
#### `parseMarkdownToStructure(content, md
|
|
212
|
+
#### `parseMarkdownToStructure(content, md, options?)`
|
|
213
213
|
|
|
214
214
|
将 Markdown 内容解析为结构化节点树。
|
|
215
215
|
|
|
216
216
|
**参数:**
|
|
217
217
|
- `content` (string): 要解析的 Markdown 内容
|
|
218
|
-
- `md` (MarkdownItCore
|
|
218
|
+
- `md` (MarkdownItCore): 由 `getMarkdown()` 创建的 markdown-it-ts 实例
|
|
219
219
|
- `options` (ParseOptions, 可选): 带有钩子的解析选项
|
|
220
220
|
|
|
221
221
|
**返回值:** `ParsedNode[]` - 解析后的节点数组
|
|
@@ -224,9 +224,9 @@ interface GetMarkdownOptions {
|
|
|
224
224
|
|
|
225
225
|
将原始 markdown-it tokens 处理为扁平数组。
|
|
226
226
|
|
|
227
|
-
#### `parseInlineTokens(tokens,
|
|
227
|
+
#### `parseInlineTokens(tokens, content?, preToken?, options?)`
|
|
228
228
|
|
|
229
|
-
解析内联 markdown-it-ts tokens
|
|
229
|
+
解析内联 markdown-it-ts tokens 并产出节点。可传入原始 `content`(来自父 token)、可选的前一个 token,以及 inline 解析选项(`requireClosingStrong`、`customHtmlTags`)。
|
|
230
230
|
|
|
231
231
|
### 配置函数
|
|
232
232
|
|
|
@@ -246,15 +246,18 @@ interface MathOptions {
|
|
|
246
246
|
|
|
247
247
|
### 解析钩子(精细化变换)
|
|
248
248
|
|
|
249
|
-
|
|
249
|
+
ParseOptions 支持以下钩子与标志:
|
|
250
250
|
|
|
251
251
|
```ts
|
|
252
252
|
interface ParseOptions {
|
|
253
253
|
preTransformTokens?: (tokens: Token[]) => Token[]
|
|
254
254
|
postTransformTokens?: (tokens: Token[]) => Token[]
|
|
255
|
-
postTransformNodes?: (nodes: ParsedNode[]) => ParsedNode[]
|
|
256
255
|
// 自定义 HTML 类标签,作为自定义节点输出(如 ['thinking'])
|
|
257
256
|
customHtmlTags?: string[]
|
|
257
|
+
// true 表示输入已结束(end-of-stream)
|
|
258
|
+
final?: boolean
|
|
259
|
+
// 解析 strong 时要求闭合 `**`(默认 false)
|
|
260
|
+
requireClosingStrong?: boolean
|
|
258
261
|
}
|
|
259
262
|
```
|
|
260
263
|
|
|
@@ -262,21 +265,22 @@ interface ParseOptions {
|
|
|
262
265
|
|
|
263
266
|
```ts
|
|
264
267
|
const parseOptions = {
|
|
265
|
-
|
|
266
|
-
return nodes.map(node =>
|
|
267
|
-
node.type === 'html_block' && /<thinking>/.test(node.value)
|
|
268
|
-
? { ...node, meta: { type: 'thinking' } }
|
|
269
|
-
: node,
|
|
270
|
-
)
|
|
271
|
-
},
|
|
268
|
+
customHtmlTags: ['thinking'],
|
|
272
269
|
}
|
|
270
|
+
|
|
271
|
+
const nodes = parseMarkdownToStructure(markdown, md, parseOptions)
|
|
272
|
+
const tagged = nodes.map(node =>
|
|
273
|
+
node.type === 'html_block' && /<thinking>/.test((node as any).content ?? '')
|
|
274
|
+
? { ...node, meta: { type: 'thinking' } }
|
|
275
|
+
: node,
|
|
276
|
+
)
|
|
273
277
|
```
|
|
274
278
|
|
|
275
279
|
在渲染器中读取 `node.meta` 即可渲染自定义 UI,而无需直接修改 Markdown 文本。
|
|
276
280
|
|
|
277
281
|
### 未知 HTML 类标签
|
|
278
282
|
|
|
279
|
-
默认情况下,非标准的 HTML 类标签(例如 `<question
|
|
283
|
+
默认情况下,非标准的 HTML 类标签(例如 `<question>`)在完整闭合时会按原生 HTML 渲染(作为自定义元素输出);流式场景下未闭合的片段会先按**纯文本**处理以避免闪烁。若希望它们作为自定义节点输出(`type: 'question'`,携带 attrs/content),需要在 `customHtmlTags` 中显式声明。
|
|
280
284
|
|
|
281
285
|
### 工具函数
|
|
282
286
|
|
package/dist/index.d.ts
CHANGED
|
@@ -252,10 +252,12 @@ interface HardBreakNode extends BaseNode {
|
|
|
252
252
|
interface MathInlineNode extends BaseNode {
|
|
253
253
|
type: 'math_inline';
|
|
254
254
|
content: string;
|
|
255
|
+
markup?: string;
|
|
255
256
|
}
|
|
256
257
|
interface MathBlockNode extends BaseNode {
|
|
257
258
|
type: 'math_block';
|
|
258
259
|
content: string;
|
|
260
|
+
markup?: string;
|
|
259
261
|
}
|
|
260
262
|
interface ReferenceNode extends BaseNode {
|
|
261
263
|
type: 'reference';
|
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,OAKd;AAGZ;AAOiB,UAjGA,UAAA,SAAmB,QAiGO,CAAQ;EAIlC,IAAA,EAAA,QAAA;EASL,QAAA,EA5GA,UA4Gc,EAAA;EAST,OAAA,CAAA,EAAA,MAAA;AAKjB;AAEU,UAxHO,QAAA,SAAiB,QAwHxB,CAAA;EACF,IAAA,EAAA,MAAA;EAH2B,OAAA,EAAA,OAAA;EAAQ,KAAA,CAAA,EAAA,MAAA;EAM1B,KAAA,EAvHR,YAuHqB,EAAA;AAK9B;AAOiB,UAhIA,YAAA,SAAqB,QAkI7B,CAAA;EAGQ,IAAA,EAAA,WAAA;EAET,QAAA,EArII,UAqIJ,EAAA;;AAFoC,UAhI3B,aAAA,SAAsB,QAgIK,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,UA1JA,aAAA,SAAsB,QA0JD,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,UAjLA,cAAA,SAAuB,QAiLM,CAAA;EAK7B,IAAA,EAAA,aAAA;EAKA,GAAA,CAAA,EAAA,MAAU;EAMV,OAAA,EAAA,MAAA;EAIA,QAAA,EAjML,UAiMoB,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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"}
|