@incremark/svelte 0.3.0 → 0.3.1
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.
|
@@ -23,17 +23,47 @@
|
|
|
23
23
|
showBlockStatus = false
|
|
24
24
|
}: IncremarkContentProps = $props()
|
|
25
25
|
|
|
26
|
-
//
|
|
27
|
-
// 使用 untrack 读取初始值,因为 useIncremark 只需初始化一次
|
|
28
|
-
// 后续的配置更新通过 typewriter.setOptions 在 $effect 中处理
|
|
26
|
+
// 创建 incremark 实例(只创建一次)
|
|
29
27
|
const incremarkInstance = untrack(() => useIncremark({
|
|
30
28
|
gfm: incremarkOptions?.gfm ?? true,
|
|
31
29
|
htmlTree: incremarkOptions?.htmlTree ?? true,
|
|
32
30
|
containers: incremarkOptions?.containers ?? true,
|
|
33
31
|
math: incremarkOptions?.math ?? true,
|
|
32
|
+
astBuilder: incremarkOptions?.astBuilder,
|
|
34
33
|
typewriter: incremarkOptions?.typewriter
|
|
35
34
|
}))
|
|
36
|
-
|
|
35
|
+
|
|
36
|
+
// 解构出需要的方法和状态
|
|
37
|
+
const { blocks, append, finalize, render, reset, updateOptions, isDisplayComplete, markdown, typewriter } = incremarkInstance
|
|
38
|
+
|
|
39
|
+
// 计算 parser 配置的稳定 key(用于检测变化)
|
|
40
|
+
// astBuilder 用名称标识,因为它是类不能 JSON.stringify
|
|
41
|
+
function getConfigKey() {
|
|
42
|
+
const { typewriter: _, astBuilder, ...parserOptions } = incremarkOptions ?? {}
|
|
43
|
+
return JSON.stringify(parserOptions) + '|' + (astBuilder?.name ?? 'default')
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
// 监听 parser 配置变化,使用 updateOptions 动态更新(不重建实例)
|
|
47
|
+
let prevConfigKey = getConfigKey()
|
|
48
|
+
let isFirstRender = true
|
|
49
|
+
$effect(() => {
|
|
50
|
+
const currentConfigKey = getConfigKey()
|
|
51
|
+
if (isFirstRender) {
|
|
52
|
+
isFirstRender = false
|
|
53
|
+
return
|
|
54
|
+
}
|
|
55
|
+
if (prevConfigKey !== currentConfigKey) {
|
|
56
|
+
prevConfigKey = currentConfigKey
|
|
57
|
+
// 使用 updateOptions 动态更新配置(包括引擎切换)
|
|
58
|
+
updateOptions({
|
|
59
|
+
gfm: incremarkOptions?.gfm ?? true,
|
|
60
|
+
htmlTree: incremarkOptions?.htmlTree ?? true,
|
|
61
|
+
containers: incremarkOptions?.containers ?? true,
|
|
62
|
+
math: incremarkOptions?.math ?? true,
|
|
63
|
+
astBuilder: incremarkOptions?.astBuilder
|
|
64
|
+
})
|
|
65
|
+
}
|
|
66
|
+
})
|
|
37
67
|
|
|
38
68
|
// 监听 incremarkOptions 的变化,更新 typewriter 配置
|
|
39
69
|
$effect(() => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IncremarkContent.svelte.d.ts","sourceRoot":"","sources":["../../src/components/IncremarkContent.svelte.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAA;
|
|
1
|
+
{"version":3,"file":"IncremarkContent.svelte.d.ts","sourceRoot":"","sources":["../../src/components/IncremarkContent.svelte.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAA;AA6IpD,QAAA,MAAM,gBAAgB,2DAAwC,CAAC;AAC/D,KAAK,gBAAgB,GAAG,UAAU,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAC5D,eAAe,gBAAgB,CAAC"}
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* @description Svelte 5 Store: Incremark 流式 Markdown 解析器
|
|
4
4
|
*/
|
|
5
5
|
import { type Writable, type Readable } from 'svelte/store';
|
|
6
|
-
import { createIncremarkParser, type
|
|
6
|
+
import { createIncremarkParser, type IncremarkParserOptions, type ParsedBlock, type IncrementalUpdate, type Root, type TransformerPlugin, type AnimationEffect } from '@incremark/core';
|
|
7
7
|
/**
|
|
8
8
|
* 打字机效果配置
|
|
9
9
|
*/
|
|
@@ -26,7 +26,7 @@ export interface TypewriterOptions {
|
|
|
26
26
|
/**
|
|
27
27
|
* useIncremark 选项
|
|
28
28
|
*/
|
|
29
|
-
export interface UseIncremarkOptions extends
|
|
29
|
+
export interface UseIncremarkOptions extends IncremarkParserOptions {
|
|
30
30
|
/** 打字机配置,传入即创建 transformer(可通过 enabled 控制是否启用) */
|
|
31
31
|
typewriter?: TypewriterOptions;
|
|
32
32
|
}
|
|
@@ -93,6 +93,8 @@ export interface UseIncremarkReturn {
|
|
|
93
93
|
reset: () => void;
|
|
94
94
|
/** 一次性渲染(reset + append + finalize) */
|
|
95
95
|
render: (content: string) => IncrementalUpdate;
|
|
96
|
+
/** 更新解析器配置(动态更新,不需要重建 parser 实例) */
|
|
97
|
+
updateOptions: (options: Partial<IncremarkParserOptions>) => void;
|
|
96
98
|
/** 解析器实例 */
|
|
97
99
|
parser: ReturnType<typeof createIncremarkParser>;
|
|
98
100
|
/** 打字机控制 */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useIncremark.d.ts","sourceRoot":"","sources":["../../src/stores/useIncremark.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAqB,KAAK,QAAQ,EAAE,KAAK,QAAQ,EAAE,MAAM,cAAc,CAAA;AAC9E,OAAO,EACL,qBAAqB,EACrB,KAAK,
|
|
1
|
+
{"version":3,"file":"useIncremark.d.ts","sourceRoot":"","sources":["../../src/stores/useIncremark.ts"],"names":[],"mappings":"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"}
|
|
@@ -168,6 +168,24 @@ export function useIncremark(options = {}) {
|
|
|
168
168
|
setFootnoteReferenceOrder(update.footnoteReferenceOrder);
|
|
169
169
|
return update;
|
|
170
170
|
}
|
|
171
|
+
/**
|
|
172
|
+
* 更新解析器配置(动态更新,不需要重建 parser 实例)
|
|
173
|
+
*
|
|
174
|
+
* 注意:更新配置后会自动重置状态
|
|
175
|
+
*
|
|
176
|
+
* @param newOptions - 部分配置选项(包括 astBuilder,可以动态切换引擎)
|
|
177
|
+
*/
|
|
178
|
+
function updateOptions(newOptions) {
|
|
179
|
+
parser.updateOptions(newOptions);
|
|
180
|
+
// 同步 Svelte 状态
|
|
181
|
+
completedBlocks.set([]);
|
|
182
|
+
pendingBlocks.set([]);
|
|
183
|
+
markdown.set('');
|
|
184
|
+
isLoading.set(false);
|
|
185
|
+
isFinalized.set(false);
|
|
186
|
+
footnoteReferenceOrder.set([]);
|
|
187
|
+
transformer?.reset();
|
|
188
|
+
}
|
|
171
189
|
return {
|
|
172
190
|
markdown,
|
|
173
191
|
completedBlocks,
|
|
@@ -183,6 +201,7 @@ export function useIncremark(options = {}) {
|
|
|
183
201
|
abort,
|
|
184
202
|
reset,
|
|
185
203
|
render,
|
|
204
|
+
updateOptions,
|
|
186
205
|
parser,
|
|
187
206
|
typewriter
|
|
188
207
|
};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@incremark/svelte",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.1",
|
|
4
4
|
"description": "High-performance streaming markdown renderer for Svelte 5 ecosystem.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"svelte": "./dist/index.js",
|
|
@@ -24,11 +24,11 @@
|
|
|
24
24
|
],
|
|
25
25
|
"dependencies": {
|
|
26
26
|
"shiki": "^3.20.0",
|
|
27
|
-
"@incremark/core": "0.3.
|
|
28
|
-
"@incremark/
|
|
29
|
-
"@incremark/
|
|
30
|
-
"@incremark/
|
|
31
|
-
"@incremark/theme": "0.3.
|
|
27
|
+
"@incremark/core": "0.3.1",
|
|
28
|
+
"@incremark/icons": "0.3.1",
|
|
29
|
+
"@incremark/shared": "0.3.1",
|
|
30
|
+
"@incremark/devtools": "0.3.1",
|
|
31
|
+
"@incremark/theme": "0.3.1"
|
|
32
32
|
},
|
|
33
33
|
"peerDependencies": {
|
|
34
34
|
"svelte": "^5.0.0",
|