pd-markdown 2.0.3 → 2.0.4-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 (65) hide show
  1. package/package.json +7 -2
  2. package/packages/parser/dist/index.cjs +1 -1
  3. package/packages/parser/dist/index.mjs +4 -184
  4. package/packages/parser/dist/index.mjs.map +1 -1
  5. package/packages/parser/dist/plugins/transform/heading.mjs +39 -0
  6. package/packages/parser/dist/plugins/transform/heading.mjs.map +1 -0
  7. package/packages/parser/dist/plugins/transform/list.mjs +21 -0
  8. package/packages/parser/dist/plugins/transform/list.mjs.map +1 -0
  9. package/packages/parser/dist/plugins/transform/table.mjs +40 -0
  10. package/packages/parser/dist/plugins/transform/table.mjs.map +1 -0
  11. package/packages/parser/dist/processor.mjs +100 -0
  12. package/packages/parser/dist/processor.mjs.map +1 -0
  13. package/packages/web/dist/MarkdownRenderer-CflS5zy_.js +43 -0
  14. package/packages/web/dist/MarkdownRenderer-CflS5zy_.js.map +1 -0
  15. package/packages/web/dist/NodeRenderer-DTR-8m1G.js +225 -0
  16. package/packages/web/dist/NodeRenderer-DTR-8m1G.js.map +1 -0
  17. package/packages/web/dist/client.cjs +16 -0
  18. package/packages/web/dist/client.cjs.map +1 -0
  19. package/packages/web/dist/client.mjs +5 -0
  20. package/packages/web/dist/client.mjs.map +1 -0
  21. package/packages/web/dist/components/MarkdownRenderer.mjs +41 -0
  22. package/packages/web/dist/components/MarkdownRenderer.mjs.map +1 -0
  23. package/packages/web/dist/components/NodeRenderer.mjs +131 -0
  24. package/packages/web/dist/components/NodeRenderer.mjs.map +1 -0
  25. package/packages/web/dist/components/StreamMarkdownRenderer.mjs +145 -0
  26. package/packages/web/dist/components/StreamMarkdownRenderer.mjs.map +1 -0
  27. package/packages/web/dist/components/context.mjs +17 -0
  28. package/packages/web/dist/components/context.mjs.map +1 -0
  29. package/packages/web/dist/components/defaults/Blockquote.mjs +8 -0
  30. package/packages/web/dist/components/defaults/Blockquote.mjs.map +1 -0
  31. package/packages/web/dist/components/defaults/Code.mjs +12 -0
  32. package/packages/web/dist/components/defaults/Code.mjs.map +1 -0
  33. package/packages/web/dist/components/defaults/Heading.mjs +10 -0
  34. package/packages/web/dist/components/defaults/Heading.mjs.map +1 -0
  35. package/packages/web/dist/components/defaults/Image.mjs +8 -0
  36. package/packages/web/dist/components/defaults/Image.mjs.map +1 -0
  37. package/packages/web/dist/components/defaults/Link.mjs +10 -0
  38. package/packages/web/dist/components/defaults/Link.mjs.map +1 -0
  39. package/packages/web/dist/components/defaults/List.mjs +17 -0
  40. package/packages/web/dist/components/defaults/List.mjs.map +1 -0
  41. package/packages/web/dist/components/defaults/Paragraph.mjs +8 -0
  42. package/packages/web/dist/components/defaults/Paragraph.mjs.map +1 -0
  43. package/packages/web/dist/components/defaults/Table.mjs +21 -0
  44. package/packages/web/dist/components/defaults/Table.mjs.map +1 -0
  45. package/packages/web/dist/components/defaults/index.mjs +29 -0
  46. package/packages/web/dist/components/defaults/index.mjs.map +1 -0
  47. package/packages/web/dist/context-DR5sJXYw.js +86 -0
  48. package/packages/web/dist/context-DR5sJXYw.js.map +1 -0
  49. package/packages/web/dist/hooks/useMarkdown.mjs +31 -0
  50. package/packages/web/dist/hooks/useMarkdown.mjs.map +1 -0
  51. package/packages/web/dist/hooks/useStreamMarkdown.mjs +274 -0
  52. package/packages/web/dist/hooks/useStreamMarkdown.mjs.map +1 -0
  53. package/packages/web/dist/index.cjs +29 -712
  54. package/packages/web/dist/index.cjs.map +1 -1
  55. package/packages/web/dist/index.d.ts +28 -26
  56. package/packages/web/dist/index.mjs +15 -693
  57. package/packages/web/dist/index.mjs.map +1 -1
  58. package/packages/web/dist/server.cjs +25 -0
  59. package/packages/web/dist/server.cjs.map +1 -0
  60. package/packages/web/dist/server.mjs +12 -0
  61. package/packages/web/dist/server.mjs.map +1 -0
  62. package/packages/web/dist/useStreamMarkdown-CXM4Hrzx.js +417 -0
  63. package/packages/web/dist/useStreamMarkdown-CXM4Hrzx.js.map +1 -0
  64. package/packages/web/dist/useStreamMarkdown-DEOfH8Ve.js +459 -0
  65. package/packages/web/dist/useStreamMarkdown-DEOfH8Ve.js.map +1 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pd-markdown",
3
- "version": "2.0.3",
3
+ "version": "2.0.4-0",
4
4
  "type": "module",
5
5
  "main": "./packages/web/dist/index.cjs",
6
6
  "module": "./packages/web/dist/index.mjs",
@@ -9,6 +9,7 @@
9
9
  "exports": {
10
10
  ".": {
11
11
  "types": "./packages/web/dist/index.d.ts",
12
+ "react-server": "./packages/web/dist/server.mjs",
12
13
  "import": "./packages/web/dist/index.mjs",
13
14
  "require": "./packages/web/dist/index.cjs"
14
15
  },
@@ -24,6 +25,7 @@
24
25
  },
25
26
  "./web": {
26
27
  "types": "./packages/web/dist/index.d.ts",
28
+ "react-server": "./packages/web/dist/server.mjs",
27
29
  "import": "./packages/web/dist/index.mjs",
28
30
  "require": "./packages/web/dist/index.cjs"
29
31
  }
@@ -65,7 +67,10 @@
65
67
  "remark-parse": "^11.0.0",
66
68
  "unified": "^11.0.5",
67
69
  "unist-util-visit": "^5.0.0",
68
- "yaml": "^2.7.0"
70
+ "yaml": "^2.7.0",
71
+ "pd-markdown-parser": "0.1.0",
72
+ "pd-markdown-utils": "0.1.0",
73
+ "pd-markdown-web": "0.1.0"
69
74
  },
70
75
  "devDependencies": {
71
76
  "@rollup/plugin-commonjs": "^28.0.2",
@@ -6,7 +6,7 @@ var remarkGfm = require('remark-gfm');
6
6
  var remarkFrontmatter = require('remark-frontmatter');
7
7
  var unistUtilVisit = require('unist-util-visit');
8
8
  var yaml = require('yaml');
9
- var pdMarkdownUtils = require('pd-markdown/utils');
9
+ var pdMarkdownUtils = require('pd-markdown-utils');
10
10
 
11
11
  /**
12
12
  * Extract text content from phrasing content nodes
@@ -1,185 +1,5 @@
1
- import { unified } from 'unified';
2
- import remarkParse from 'remark-parse';
3
- import remarkGfm from 'remark-gfm';
4
- import remarkFrontmatter from 'remark-frontmatter';
5
- import { visit } from 'unist-util-visit';
6
- import { parse } from 'yaml';
7
- import { uniqueSlugify } from 'pd-markdown/utils';
8
-
9
- /**
10
- * Extract text content from phrasing content nodes
11
- */
12
- function extractText(nodes) {
13
- return nodes
14
- .map((node) => {
15
- if (node.type === 'text') {
16
- return node.value;
17
- }
18
- if ('children' in node) {
19
- return extractText(node.children);
20
- }
21
- return '';
22
- })
23
- .join('');
24
- }
25
- /**
26
- * Transform plugin that adds slug IDs to headings
27
- */
28
- function transformHeading(tree) {
29
- const slugs = new Set();
30
- visit(tree, 'heading', (node) => {
31
- const text = extractText(node.children);
32
- const slug = uniqueSlugify(text, slugs);
33
- // Add data.id to the heading node
34
- const data = (node.data || {});
35
- data.id = slug;
36
- const hProperties = (data.hProperties || {});
37
- hProperties.id = slug;
38
- data.hProperties = hProperties;
39
- node.data = data;
40
- });
41
- }
42
-
43
- /**
44
- * Transform plugin that adds index to list items
45
- */
46
- function transformList(tree) {
47
- visit(tree, 'list', (node) => {
48
- node.children.forEach((item, index) => {
49
- item.data = item.data || {};
50
- item.data.index = index;
51
- // For ordered lists, also store the actual number
52
- if (node.ordered) {
53
- const start = node.start ?? 1;
54
- item.data.index = start + index;
55
- }
56
- });
57
- });
58
- }
59
-
60
- /**
61
- * Transform plugin that enhances table structure
62
- * - Separates header and body rows
63
- * - Adds alignment and index info to cells
64
- */
65
- function transformTable(tree) {
66
- visit(tree, 'table', (node) => {
67
- if (node.children.length === 0)
68
- return;
69
- const [headerRow, ...bodyRows] = node.children;
70
- const align = node.align || [];
71
- // Mark header row and cells
72
- if (headerRow) {
73
- headerRow.children.forEach((cell, index) => {
74
- cell.data = cell.data || {};
75
- cell.data.isHeader = true;
76
- cell.data.align = align[index] || null;
77
- cell.data.columnIndex = index;
78
- });
79
- }
80
- // Mark body cells
81
- bodyRows.forEach((row) => {
82
- row.children.forEach((cell, index) => {
83
- cell.data = cell.data || {};
84
- cell.data.isHeader = false;
85
- cell.data.align = align[index] || null;
86
- cell.data.columnIndex = index;
87
- });
88
- });
89
- // Store structured data on table node
90
- node.data = node.data || {};
91
- node.data.header = headerRow;
92
- node.data.body = bodyRows;
93
- });
94
- }
95
-
96
- /**
97
- * Default parser options
98
- */
99
- const DEFAULT_OPTIONS = {
100
- gfm: true,
101
- frontmatter: true,
102
- };
103
- /**
104
- * Create frontmatter extraction plugin
105
- */
106
- function extractFrontmatter() {
107
- return (tree, file) => {
108
- visit(tree, 'yaml', (node) => {
109
- try {
110
- const data = parse(node.value);
111
- file.data.frontmatter = data;
112
- }
113
- catch {
114
- // Invalid YAML, ignore
115
- }
116
- });
117
- };
118
- }
119
- /**
120
- * Create a markdown parser with the specified options
121
- *
122
- * @param options - Parser configuration options
123
- * @returns Parser instance with parse method
124
- */
125
- function createParser(options = {}) {
126
- const opts = { ...DEFAULT_OPTIONS, ...options };
127
- const customPlugins = options.plugins || [];
128
- // Build processor (使用 any 绕过复杂的类型检查)
129
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
130
- let processor = unified().use(remarkParse);
131
- // Add GFM support
132
- if (opts.gfm) {
133
- processor = processor.use(remarkGfm);
134
- }
135
- // Add frontmatter support
136
- if (opts.frontmatter) {
137
- processor = processor.use(remarkFrontmatter, ['yaml']);
138
- }
139
- // Run custom "before" plugins
140
- const beforePlugins = customPlugins.filter((p) => p.phase === 'before');
141
- for (const plugin of beforePlugins) {
142
- processor = processor.use(() => plugin.transform);
143
- }
144
- // Add frontmatter extraction
145
- if (opts.frontmatter) {
146
- processor = processor.use(extractFrontmatter);
147
- }
148
- // Add built-in transform plugins
149
- processor = processor
150
- .use(() => transformHeading)
151
- .use(() => transformList)
152
- .use(() => transformTable);
153
- // Run custom "after" plugins
154
- const afterPlugins = customPlugins.filter((p) => p.phase === 'after');
155
- for (const plugin of afterPlugins) {
156
- processor = processor.use(() => plugin.transform);
157
- }
158
- // Freeze processor
159
- processor.freeze();
160
- return {
161
- parse(content) {
162
- // Parse markdown to AST
163
- const tree = processor.parse(content);
164
- // Run all transform plugins
165
- processor.runSync(tree);
166
- return tree;
167
- },
168
- };
169
- }
170
- /**
171
- * Type-safe helper to define a parser plugin
172
- *
173
- * @param config - Plugin configuration
174
- * @returns Parser plugin
175
- */
176
- function definePlugin(config, options) {
177
- return {
178
- name: config.name,
179
- phase: config.phase,
180
- transform: config.transform(options),
181
- };
182
- }
183
-
184
- export { createParser, definePlugin, transformHeading, transformList, transformTable };
1
+ export { createParser, definePlugin } from './processor.mjs';
2
+ export { transformHeading } from './plugins/transform/heading.mjs';
3
+ export { transformList } from './plugins/transform/list.mjs';
4
+ export { transformTable } from './plugins/transform/table.mjs';
185
5
  //# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sources":["../src/plugins/transform/heading.ts","../src/plugins/transform/list.ts","../src/plugins/transform/table.ts","../src/processor.ts"],"sourcesContent":[null,null,null,null],"names":["parseYaml"],"mappings":"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"}
1
+ {"version":3,"file":"index.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;"}
@@ -0,0 +1,39 @@
1
+ import { visit } from 'unist-util-visit';
2
+ import { uniqueSlugify } from 'pd-markdown-utils';
3
+
4
+ /**
5
+ * Extract text content from phrasing content nodes
6
+ */
7
+ function extractText(nodes) {
8
+ return nodes
9
+ .map((node) => {
10
+ if (node.type === 'text') {
11
+ return node.value;
12
+ }
13
+ if ('children' in node) {
14
+ return extractText(node.children);
15
+ }
16
+ return '';
17
+ })
18
+ .join('');
19
+ }
20
+ /**
21
+ * Transform plugin that adds slug IDs to headings
22
+ */
23
+ function transformHeading(tree) {
24
+ const slugs = new Set();
25
+ visit(tree, 'heading', (node) => {
26
+ const text = extractText(node.children);
27
+ const slug = uniqueSlugify(text, slugs);
28
+ // Add data.id to the heading node
29
+ const data = (node.data || {});
30
+ data.id = slug;
31
+ const hProperties = (data.hProperties || {});
32
+ hProperties.id = slug;
33
+ data.hProperties = hProperties;
34
+ node.data = data;
35
+ });
36
+ }
37
+
38
+ export { transformHeading };
39
+ //# sourceMappingURL=heading.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"heading.mjs","sources":["../../../src/plugins/transform/heading.ts"],"sourcesContent":[null],"names":[],"mappings":";;;AAIA;;AAEG;AACH,SAAS,WAAW,CAAC,KAAwB,EAAA;AAC3C,IAAA,OAAO;AACJ,SAAA,GAAG,CAAC,CAAC,IAAI,KAAI;AACZ,QAAA,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE;YACxB,OAAO,IAAI,CAAC,KAAK;QACnB;AACA,QAAA,IAAI,UAAU,IAAI,IAAI,EAAE;AACtB,YAAA,OAAO,WAAW,CAAC,IAAI,CAAC,QAA6B,CAAC;QACxD;AACA,QAAA,OAAO,EAAE;AACX,IAAA,CAAC;SACA,IAAI,CAAC,EAAE,CAAC;AACb;AAEA;;AAEG;AACG,SAAU,gBAAgB,CAAC,IAAU,EAAA;AACzC,IAAA,MAAM,KAAK,GAAG,IAAI,GAAG,EAAU;IAE/B,KAAK,CAAC,IAAI,EAAE,SAAS,EAAE,CAAC,IAAa,KAAI;QACvC,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC;QACvC,MAAM,IAAI,GAAG,aAAa,CAAC,IAAI,EAAE,KAAK,CAAC;;QAGvC,MAAM,IAAI,IAAI,IAAI,CAAC,IAAI,IAAI,EAAE,CAA4B;AACzD,QAAA,IAAI,CAAC,EAAE,GAAG,IAAI;QACd,MAAM,WAAW,IAAI,IAAI,CAAC,WAAW,IAAI,EAAE,CAA2B;AACtE,QAAA,WAAW,CAAC,EAAE,GAAG,IAAI;AACrB,QAAA,IAAI,CAAC,WAAW,GAAG,WAAW;AAC9B,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI;AAClB,IAAA,CAAC,CAAC;AACJ;;;;"}
@@ -0,0 +1,21 @@
1
+ import { visit } from 'unist-util-visit';
2
+
3
+ /**
4
+ * Transform plugin that adds index to list items
5
+ */
6
+ function transformList(tree) {
7
+ visit(tree, 'list', (node) => {
8
+ node.children.forEach((item, index) => {
9
+ item.data = item.data || {};
10
+ item.data.index = index;
11
+ // For ordered lists, also store the actual number
12
+ if (node.ordered) {
13
+ const start = node.start ?? 1;
14
+ item.data.index = start + index;
15
+ }
16
+ });
17
+ });
18
+ }
19
+
20
+ export { transformList };
21
+ //# sourceMappingURL=list.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.mjs","sources":["../../../src/plugins/transform/list.ts"],"sourcesContent":[null],"names":[],"mappings":";;AAYA;;AAEG;AACG,SAAU,aAAa,CAAC,IAAU,EAAA;IACtC,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,IAAU,KAAI;QACjC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,IAAc,EAAE,KAAa,KAAI;YACtD,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,EAAE;AAC3B,YAAA,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,KAAK;;AAGvB,YAAA,IAAI,IAAI,CAAC,OAAO,EAAE;AAChB,gBAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,CAAC;gBAC7B,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,KAAK,GAAG,KAAK;YACjC;AACF,QAAA,CAAC,CAAC;AACJ,IAAA,CAAC,CAAC;AACJ;;;;"}
@@ -0,0 +1,40 @@
1
+ import { visit } from 'unist-util-visit';
2
+
3
+ /**
4
+ * Transform plugin that enhances table structure
5
+ * - Separates header and body rows
6
+ * - Adds alignment and index info to cells
7
+ */
8
+ function transformTable(tree) {
9
+ visit(tree, 'table', (node) => {
10
+ if (node.children.length === 0)
11
+ return;
12
+ const [headerRow, ...bodyRows] = node.children;
13
+ const align = node.align || [];
14
+ // Mark header row and cells
15
+ if (headerRow) {
16
+ headerRow.children.forEach((cell, index) => {
17
+ cell.data = cell.data || {};
18
+ cell.data.isHeader = true;
19
+ cell.data.align = align[index] || null;
20
+ cell.data.columnIndex = index;
21
+ });
22
+ }
23
+ // Mark body cells
24
+ bodyRows.forEach((row) => {
25
+ row.children.forEach((cell, index) => {
26
+ cell.data = cell.data || {};
27
+ cell.data.isHeader = false;
28
+ cell.data.align = align[index] || null;
29
+ cell.data.columnIndex = index;
30
+ });
31
+ });
32
+ // Store structured data on table node
33
+ node.data = node.data || {};
34
+ node.data.header = headerRow;
35
+ node.data.body = bodyRows;
36
+ });
37
+ }
38
+
39
+ export { transformTable };
40
+ //# sourceMappingURL=table.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"table.mjs","sources":["../../../src/plugins/transform/table.ts"],"sourcesContent":[null],"names":[],"mappings":";;AAwBA;;;;AAIG;AACG,SAAU,cAAc,CAAC,IAAU,EAAA;IACvC,KAAK,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC,IAAW,KAAI;AACnC,QAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC;YAAE;QAEhC,MAAM,CAAC,SAAS,EAAE,GAAG,QAAQ,CAAC,GAAG,IAAI,CAAC,QAAQ;AAC9C,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,EAAE;;QAG9B,IAAI,SAAS,EAAE;YACb,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,IAAe,EAAE,KAAa,KAAI;gBAC5D,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,EAAE;AAC3B,gBAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,GAAG,IAAI;gBACzB,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,IAAI;AACtC,gBAAA,IAAI,CAAC,IAAI,CAAC,WAAW,GAAG,KAAK;AAC/B,YAAA,CAAC,CAAC;QACJ;;AAGA,QAAA,QAAQ,CAAC,OAAO,CAAC,CAAC,GAAG,KAAI;YACvB,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,IAAe,EAAE,KAAa,KAAI;gBACtD,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,EAAE;AAC3B,gBAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,GAAG,KAAK;gBAC1B,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,IAAI;AACtC,gBAAA,IAAI,CAAC,IAAI,CAAC,WAAW,GAAG,KAAK;AAC/B,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC,CAAC;;QAGF,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,EAAE;AAC3B,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,SAAS;AAC5B,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,QAAQ;AAC3B,IAAA,CAAC,CAAC;AACJ;;;;"}
@@ -0,0 +1,100 @@
1
+ import { unified } from 'unified';
2
+ import remarkParse from 'remark-parse';
3
+ import remarkGfm from 'remark-gfm';
4
+ import remarkFrontmatter from 'remark-frontmatter';
5
+ import { visit } from 'unist-util-visit';
6
+ import { parse } from 'yaml';
7
+ import { transformHeading } from './plugins/transform/heading.mjs';
8
+ import { transformList } from './plugins/transform/list.mjs';
9
+ import { transformTable } from './plugins/transform/table.mjs';
10
+
11
+ /**
12
+ * Default parser options
13
+ */
14
+ const DEFAULT_OPTIONS = {
15
+ gfm: true,
16
+ frontmatter: true,
17
+ };
18
+ /**
19
+ * Create frontmatter extraction plugin
20
+ */
21
+ function extractFrontmatter() {
22
+ return (tree, file) => {
23
+ visit(tree, 'yaml', (node) => {
24
+ try {
25
+ const data = parse(node.value);
26
+ file.data.frontmatter = data;
27
+ }
28
+ catch {
29
+ // Invalid YAML, ignore
30
+ }
31
+ });
32
+ };
33
+ }
34
+ /**
35
+ * Create a markdown parser with the specified options
36
+ *
37
+ * @param options - Parser configuration options
38
+ * @returns Parser instance with parse method
39
+ */
40
+ function createParser(options = {}) {
41
+ const opts = { ...DEFAULT_OPTIONS, ...options };
42
+ const customPlugins = options.plugins || [];
43
+ // Build processor (使用 any 绕过复杂的类型检查)
44
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
45
+ let processor = unified().use(remarkParse);
46
+ // Add GFM support
47
+ if (opts.gfm) {
48
+ processor = processor.use(remarkGfm);
49
+ }
50
+ // Add frontmatter support
51
+ if (opts.frontmatter) {
52
+ processor = processor.use(remarkFrontmatter, ['yaml']);
53
+ }
54
+ // Run custom "before" plugins
55
+ const beforePlugins = customPlugins.filter((p) => p.phase === 'before');
56
+ for (const plugin of beforePlugins) {
57
+ processor = processor.use(() => plugin.transform);
58
+ }
59
+ // Add frontmatter extraction
60
+ if (opts.frontmatter) {
61
+ processor = processor.use(extractFrontmatter);
62
+ }
63
+ // Add built-in transform plugins
64
+ processor = processor
65
+ .use(() => transformHeading)
66
+ .use(() => transformList)
67
+ .use(() => transformTable);
68
+ // Run custom "after" plugins
69
+ const afterPlugins = customPlugins.filter((p) => p.phase === 'after');
70
+ for (const plugin of afterPlugins) {
71
+ processor = processor.use(() => plugin.transform);
72
+ }
73
+ // Freeze processor
74
+ processor.freeze();
75
+ return {
76
+ parse(content) {
77
+ // Parse markdown to AST
78
+ const tree = processor.parse(content);
79
+ // Run all transform plugins
80
+ processor.runSync(tree);
81
+ return tree;
82
+ },
83
+ };
84
+ }
85
+ /**
86
+ * Type-safe helper to define a parser plugin
87
+ *
88
+ * @param config - Plugin configuration
89
+ * @returns Parser plugin
90
+ */
91
+ function definePlugin(config, options) {
92
+ return {
93
+ name: config.name,
94
+ phase: config.phase,
95
+ transform: config.transform(options),
96
+ };
97
+ }
98
+
99
+ export { createParser, definePlugin };
100
+ //# sourceMappingURL=processor.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"processor.mjs","sources":["../src/processor.ts"],"sourcesContent":[null],"names":["parseYaml"],"mappings":";;;;;;;;;;AAYA;;AAEG;AACH,MAAM,eAAe,GAA6C;AAChE,IAAA,GAAG,EAAE,IAAI;AACT,IAAA,WAAW,EAAE,IAAI;CAClB;AAED;;AAEG;AACH,SAAS,kBAAkB,GAAA;AACzB,IAAA,OAAO,CAAC,IAAU,EAAE,IAAW,KAAI;QACjC,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,IAAU,KAAI;AACjC,YAAA,IAAI;gBACF,MAAM,IAAI,GAAGA,KAAS,CAAC,IAAI,CAAC,KAAK,CAA4B;AAC3D,gBAAA,IAAI,CAAC,IAAiB,CAAC,WAAW,GAAG,IAAI;YAC7C;AAAE,YAAA,MAAM;;YAER;AACF,QAAA,CAAC,CAAC;AACJ,IAAA,CAAC;AACH;AAEA;;;;;AAKG;AACG,SAAU,YAAY,CAAC,OAAA,GAAyB,EAAE,EAAA;IACtD,MAAM,IAAI,GAAG,EAAE,GAAG,eAAe,EAAE,GAAG,OAAO,EAAE;AAC/C,IAAA,MAAM,aAAa,GAAG,OAAO,CAAC,OAAO,IAAI,EAAE;;;IAI3C,IAAI,SAAS,GAAQ,OAAO,EAAE,CAAC,GAAG,CAAC,WAAW,CAAC;;AAG/C,IAAA,IAAI,IAAI,CAAC,GAAG,EAAE;AACZ,QAAA,SAAS,GAAG,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC;IACtC;;AAGA,IAAA,IAAI,IAAI,CAAC,WAAW,EAAE;QACpB,SAAS,GAAG,SAAS,CAAC,GAAG,CAAC,iBAAiB,EAAE,CAAC,MAAM,CAAC,CAAC;IACxD;;AAGA,IAAA,MAAM,aAAa,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,KAAK,QAAQ,CAAC;AACvE,IAAA,KAAK,MAAM,MAAM,IAAI,aAAa,EAAE;AAClC,QAAA,SAAS,GAAG,SAAS,CAAC,GAAG,CAAC,MAAM,MAAM,CAAC,SAAS,CAAC;IACnD;;AAGA,IAAA,IAAI,IAAI,CAAC,WAAW,EAAE;AACpB,QAAA,SAAS,GAAG,SAAS,CAAC,GAAG,CAAC,kBAAkB,CAAC;IAC/C;;AAGA,IAAA,SAAS,GAAG;AACT,SAAA,GAAG,CAAC,MAAM,gBAAgB;AAC1B,SAAA,GAAG,CAAC,MAAM,aAAa;AACvB,SAAA,GAAG,CAAC,MAAM,cAAc,CAAC;;AAG5B,IAAA,MAAM,YAAY,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,KAAK,OAAO,CAAC;AACrE,IAAA,KAAK,MAAM,MAAM,IAAI,YAAY,EAAE;AACjC,QAAA,SAAS,GAAG,SAAS,CAAC,GAAG,CAAC,MAAM,MAAM,CAAC,SAAS,CAAC;IACnD;;IAGA,SAAS,CAAC,MAAM,EAAE;IAElB,OAAO;AACL,QAAA,KAAK,CAAC,OAAe,EAAA;;YAEnB,MAAM,IAAI,GAAG,SAAS,CAAC,KAAK,CAAC,OAAO,CAAS;;AAG7C,YAAA,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC;AAEvB,YAAA,OAAO,IAAI;QACb,CAAC;KACF;AACH;AAEA;;;;;AAKG;AACG,SAAU,YAAY,CAC1B,MAIC,EACD,OAAW,EAAA;IAEX,OAAO;QACL,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,KAAK,EAAE,MAAM,CAAC,KAAK;AACnB,QAAA,SAAS,EAAE,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC;KACrC;AACH;;;;"}
@@ -0,0 +1,43 @@
1
+ 'use strict';
2
+
3
+ var jsxRuntime = require('react/jsx-runtime');
4
+ var pdMarkdownParser = require('pd-markdown-parser');
5
+ var NodeRenderer = require('./NodeRenderer-DTR-8m1G.js');
6
+
7
+ // Singleton parser for client-side use
8
+ let defaultParser = null;
9
+ function getParser(options) {
10
+ if (options) {
11
+ return pdMarkdownParser.createParser(options);
12
+ }
13
+ if (!defaultParser) {
14
+ defaultParser = pdMarkdownParser.createParser();
15
+ }
16
+ return defaultParser;
17
+ }
18
+ /**
19
+ * Main markdown renderer component
20
+ *
21
+ * Supports both client-side and server-side rendering:
22
+ * - Pass `source` for automatic parsing
23
+ * - Pass `ast` for pre-parsed content (SSR optimization)
24
+ */
25
+ const MarkdownRenderer = ({ source, ast, components = {}, className, style, parserOptions, }) => {
26
+ // Use provided AST or parse source
27
+ let tree;
28
+ if (ast) {
29
+ tree = ast;
30
+ }
31
+ else if (source) {
32
+ const parser = getParser(parserOptions);
33
+ tree = parser.parse(source);
34
+ }
35
+ else {
36
+ // No content provided
37
+ return null;
38
+ }
39
+ return (jsxRuntime.jsx("div", { className: className, style: style, children: jsxRuntime.jsx(NodeRenderer.NodeRenderer, { node: tree, components: components }) }));
40
+ };
41
+
42
+ exports.MarkdownRenderer = MarkdownRenderer;
43
+ //# sourceMappingURL=MarkdownRenderer-CflS5zy_.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MarkdownRenderer-CflS5zy_.js","sources":["../src/components/MarkdownRenderer.tsx"],"sourcesContent":[null],"names":["createParser","_jsx","NodeRenderer"],"mappings":";;;;;;AAqBA;AACA,IAAI,aAAa,GAA2C,IAAI;AAEhE,SAAS,SAAS,CAAC,OAAuB,EAAA;IACxC,IAAI,OAAO,EAAE;AACX,QAAA,OAAOA,6BAAY,CAAC,OAAO,CAAC;IAC9B;IACA,IAAI,CAAC,aAAa,EAAE;QAClB,aAAa,GAAGA,6BAAY,EAAE;IAChC;AACA,IAAA,OAAO,aAAa;AACtB;AAEA;;;;;;AAMG;MACU,gBAAgB,GAA8B,CAAC,EAC1D,MAAM,EACN,GAAG,EACH,UAAU,GAAG,EAAE,EACf,SAAS,EACT,KAAK,EACL,aAAa,GACd,KAAI;;AAEH,IAAA,IAAI,IAAU;IACd,IAAI,GAAG,EAAE;QACP,IAAI,GAAG,GAAG;IACZ;SAAO,IAAI,MAAM,EAAE;AACjB,QAAA,MAAM,MAAM,GAAG,SAAS,CAAC,aAAa,CAAC;AACvC,QAAA,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC;IAC7B;SAAO;;AAEL,QAAA,OAAO,IAAI;IACb;IAEA,QACEC,wBAAK,SAAS,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,EAAA,QAAA,EACrCA,cAAA,CAACC,yBAAY,EAAA,EAAC,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,UAAU,EAAA,CAAI,EAAA,CAChD;AAEV;;;;"}