safe-mdx 0.3.1 → 1.0.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 +9 -28
- package/dist/HtmlToJsxConverter.d.ts +10 -0
- package/dist/HtmlToJsxConverter.d.ts.map +1 -0
- package/dist/HtmlToJsxConverter.js +22 -0
- package/dist/HtmlToJsxConverter.js.map +1 -0
- package/dist/parse.d.ts +3 -0
- package/dist/parse.d.ts.map +1 -0
- package/dist/parse.js +86 -0
- package/dist/parse.js.map +1 -0
- package/dist/safe-mdx.d.ts +11 -24
- package/dist/safe-mdx.d.ts.map +1 -1
- package/dist/safe-mdx.js +14 -113
- package/dist/safe-mdx.js.map +1 -1
- package/dist/safe-mdx.test.js +6 -6
- package/dist/safe-mdx.test.js.map +1 -1
- package/package.json +5 -1
- package/src/HtmlToJsxConverter.tsx +37 -0
- package/src/parse.ts +104 -0
- package/src/safe-mdx.test.tsx +6 -7
- package/src/safe-mdx.tsx +36 -141
package/README.md
CHANGED
|
@@ -39,6 +39,7 @@ npm i safe-mdx
|
|
|
39
39
|
|
|
40
40
|
```tsx
|
|
41
41
|
import { SafeMdxRenderer } from 'safe-mdx'
|
|
42
|
+
import { mdxParse } from 'safe-mdx/parse'
|
|
42
43
|
|
|
43
44
|
const code = `
|
|
44
45
|
# Hello world
|
|
@@ -49,9 +50,11 @@ This is a paragraph
|
|
|
49
50
|
`
|
|
50
51
|
|
|
51
52
|
export function Page() {
|
|
53
|
+
const ast = mdxParse(code)
|
|
52
54
|
return (
|
|
53
55
|
<SafeMdxRenderer
|
|
54
|
-
|
|
56
|
+
markdown={code}
|
|
57
|
+
mdast={ast}
|
|
55
58
|
components={{
|
|
56
59
|
// You can pass your own components here
|
|
57
60
|
Heading({ children }) {
|
|
@@ -107,7 +110,7 @@ const file = parser.processSync(code)
|
|
|
107
110
|
const mdast = file.data.ast as Root
|
|
108
111
|
|
|
109
112
|
export function Page() {
|
|
110
|
-
return <SafeMdxRenderer
|
|
113
|
+
return <SafeMdxRenderer markdown={code} mdast={mdast} />
|
|
111
114
|
}
|
|
112
115
|
```
|
|
113
116
|
|
|
@@ -143,7 +146,7 @@ export function Page() {
|
|
|
143
146
|
const parsedFrontmatter = yaml.load(yamlFrontmatter.value || '')
|
|
144
147
|
|
|
145
148
|
console.log(parsedFrontmatter)
|
|
146
|
-
return <SafeMdxRenderer
|
|
149
|
+
return <SafeMdxRenderer markdown={code} mdast={mdast} />
|
|
147
150
|
}
|
|
148
151
|
```
|
|
149
152
|
|
|
@@ -151,11 +154,11 @@ export function Page() {
|
|
|
151
154
|
|
|
152
155
|
It's not pratical to override the code block component using `code` as a component override, because it will also be used for inline code blocks. It also does not have access to meta string and language.
|
|
153
156
|
|
|
154
|
-
Instead you can use `
|
|
157
|
+
Instead you can use `renderNode` to return some jsx for a specific mdast node:
|
|
155
158
|
|
|
156
159
|
```tsx
|
|
157
160
|
<SafeMdxRenderer
|
|
158
|
-
|
|
161
|
+
renderNode={(node, transform) => {
|
|
159
162
|
if (node.type === 'code') {
|
|
160
163
|
const language = node.lang || ''
|
|
161
164
|
const meta = parseMetaString(node.meta)
|
|
@@ -180,7 +183,7 @@ Instead you can use `customTransformer` to return some jsx for a specific mdast
|
|
|
180
183
|
import { MdastToJsx } from 'safe-mdx'
|
|
181
184
|
|
|
182
185
|
export function Page() {
|
|
183
|
-
const visitor = new MdastToJsx({ code, mdast, components })
|
|
186
|
+
const visitor = new MdastToJsx({ markdown: code, mdast, components })
|
|
184
187
|
const jsx = visitor.run()
|
|
185
188
|
|
|
186
189
|
if (visitor.errors.length) {
|
|
@@ -191,28 +194,6 @@ export function Page() {
|
|
|
191
194
|
}
|
|
192
195
|
```
|
|
193
196
|
|
|
194
|
-
## Rendering streaming MDX from an LLM
|
|
195
|
-
|
|
196
|
-
Use `completeJsxTags` to make streaming invalid MDX render, this function will add missing closing tags
|
|
197
|
-
|
|
198
|
-
```tsx
|
|
199
|
-
import { SafeMdxRenderer } from 'safe-mdx'
|
|
200
|
-
|
|
201
|
-
export function Page() {
|
|
202
|
-
const { messages } = useChat()
|
|
203
|
-
return (
|
|
204
|
-
<>
|
|
205
|
-
{messages.map((message, i) => (
|
|
206
|
-
<SafeMdxRenderer
|
|
207
|
-
key={i}
|
|
208
|
-
code={completeJsxTags(message.content)}
|
|
209
|
-
/>
|
|
210
|
-
))}
|
|
211
|
-
</>
|
|
212
|
-
)
|
|
213
|
-
}
|
|
214
|
-
```
|
|
215
|
-
|
|
216
197
|
## Security
|
|
217
198
|
|
|
218
199
|
safe-mdx is designed to avoid server-side evaluation of untrusted MDX input.
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import type { MdastToJsx, MyRootContent } from './safe-mdx.js';
|
|
3
|
+
interface HtmlToJsxConverterProps {
|
|
4
|
+
htmlText: string;
|
|
5
|
+
instance: MdastToJsx;
|
|
6
|
+
node: MyRootContent;
|
|
7
|
+
}
|
|
8
|
+
export declare function HtmlToJsxConverter({ htmlText, instance, node, }: HtmlToJsxConverterProps): string | number | bigint | true | React.ReactElement<unknown, string | React.JSXElementConstructor<any>> | Iterable<React.ReactNode> | Promise<string | number | bigint | boolean | React.ReactPortal | React.ReactElement<unknown, string | React.JSXElementConstructor<any>> | Iterable<React.ReactNode>>;
|
|
9
|
+
export {};
|
|
10
|
+
//# sourceMappingURL=HtmlToJsxConverter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"HtmlToJsxConverter.d.ts","sourceRoot":"","sources":["../src/HtmlToJsxConverter.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,OAAO,KAAK,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA;AAI9D,UAAU,uBAAuB;IAC7B,QAAQ,EAAE,MAAM,CAAA;IAChB,QAAQ,EAAE,UAAU,CAAA;IACpB,IAAI,EAAE,aAAa,CAAA;CACtB;AAED,wBAAgB,kBAAkB,CAAC,EAC/B,QAAQ,EACR,QAAQ,EACR,IAAI,GACP,EAAE,uBAAuB,+SAoBzB"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { htmlToJsx } from 'html-to-jsx-transform';
|
|
3
|
+
React;
|
|
4
|
+
export function HtmlToJsxConverter({ htmlText, instance, node, }) {
|
|
5
|
+
try {
|
|
6
|
+
const jsx = htmlToJsx(htmlText);
|
|
7
|
+
const originalJsxStr = instance.jsxStr;
|
|
8
|
+
instance.jsxStr = jsx;
|
|
9
|
+
const result = instance.jsxTransformer(node);
|
|
10
|
+
instance.jsxStr = originalJsxStr;
|
|
11
|
+
if (Array.isArray(result)) {
|
|
12
|
+
console.log(`Unexpected array result`);
|
|
13
|
+
return null;
|
|
14
|
+
}
|
|
15
|
+
return result || null;
|
|
16
|
+
}
|
|
17
|
+
catch (error) {
|
|
18
|
+
console.error('Error converting HTML to JSX:', error);
|
|
19
|
+
return null;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=HtmlToJsxConverter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"HtmlToJsxConverter.js","sourceRoot":"","sources":["../src/HtmlToJsxConverter.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAA;AAGjD,KAAK,CAAA;AAQL,MAAM,UAAU,kBAAkB,CAAC,EAC/B,QAAQ,EACR,QAAQ,EACR,IAAI,GACkB;IACtB,IAAI;QACA,MAAM,GAAG,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAA;QAC/B,MAAM,cAAc,GAAG,QAAQ,CAAC,MAAM,CAAA;QACtC,QAAQ,CAAC,MAAM,GAAG,GAAG,CAAA;QAErB,MAAM,MAAM,GAAG,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,CAAA;QAE5C,QAAQ,CAAC,MAAM,GAAG,cAAc,CAAA;QAEhC,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;YACvB,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAA;YACtC,OAAO,IAAI,CAAA;SACd;QAED,OAAO,MAAM,IAAI,IAAI,CAAA;KACxB;IAAC,OAAO,KAAK,EAAE;QACZ,OAAO,CAAC,KAAK,CAAC,+BAA+B,EAAE,KAAK,CAAC,CAAA;QACrD,OAAO,IAAI,CAAA;KACd;AACL,CAAC"}
|
package/dist/parse.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parse.d.ts","sourceRoot":"","sources":["../src/parse.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,IAAI,EAAe,MAAM,OAAO,CAAA;AAKzC,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,QAGpC"}
|
package/dist/parse.js
ADDED
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import remarkFrontmatter from 'remark-frontmatter';
|
|
2
|
+
import { collapseWhiteSpace } from 'collapse-white-space';
|
|
3
|
+
import { visit } from 'unist-util-visit';
|
|
4
|
+
import { remark } from 'remark';
|
|
5
|
+
import remarkGfm from 'remark-gfm';
|
|
6
|
+
import remarkMdx from 'remark-mdx';
|
|
7
|
+
export function mdxParse(code) {
|
|
8
|
+
const file = mdxProcessor.processSync(code);
|
|
9
|
+
return file.data.ast;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* https://github.com/mdx-js/mdx/blob/b3351fadcb6f78833a72757b7135dcfb8ab646fe/packages/mdx/lib/plugin/remark-mark-and-unravel.js
|
|
13
|
+
* A tiny plugin that unravels `<p><h1>x</h1></p>` but also
|
|
14
|
+
* `<p><Component /></p>` (so it has no knowledge of "HTML").
|
|
15
|
+
*
|
|
16
|
+
* It also marks JSX as being explicitly JSX, so when a user passes a `h1`
|
|
17
|
+
* component, it is used for `# heading` but not for `<h1>heading</h1>`.
|
|
18
|
+
*
|
|
19
|
+
*/
|
|
20
|
+
function remarkMarkAndUnravel() {
|
|
21
|
+
return function (tree) {
|
|
22
|
+
visit(tree, function (node, index, parent) {
|
|
23
|
+
let offset = -1;
|
|
24
|
+
let all = true;
|
|
25
|
+
let oneOrMore = false;
|
|
26
|
+
if (parent &&
|
|
27
|
+
typeof index === 'number' &&
|
|
28
|
+
node.type === 'paragraph') {
|
|
29
|
+
const children = node.children;
|
|
30
|
+
while (++offset < children.length) {
|
|
31
|
+
const child = children[offset];
|
|
32
|
+
if (child.type === 'mdxJsxTextElement' ||
|
|
33
|
+
child.type === 'mdxTextExpression') {
|
|
34
|
+
oneOrMore = true;
|
|
35
|
+
}
|
|
36
|
+
else if (child.type === 'text' &&
|
|
37
|
+
collapseWhiteSpace(child.value, {
|
|
38
|
+
style: 'html',
|
|
39
|
+
trim: true,
|
|
40
|
+
}) === '') {
|
|
41
|
+
// Empty.
|
|
42
|
+
}
|
|
43
|
+
else {
|
|
44
|
+
all = false;
|
|
45
|
+
break;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
if (all && oneOrMore) {
|
|
49
|
+
offset = -1;
|
|
50
|
+
const newChildren = [];
|
|
51
|
+
while (++offset < children.length) {
|
|
52
|
+
const child = children[offset];
|
|
53
|
+
if (child.type === 'mdxJsxTextElement') {
|
|
54
|
+
// @ts-expect-error: mutate because it is faster; content model is fine.
|
|
55
|
+
child.type = 'mdxJsxFlowElement';
|
|
56
|
+
}
|
|
57
|
+
if (child.type === 'mdxTextExpression') {
|
|
58
|
+
// @ts-expect-error: mutate because it is faster; content model is fine.
|
|
59
|
+
child.type = 'mdxFlowExpression';
|
|
60
|
+
}
|
|
61
|
+
if (child.type === 'text' &&
|
|
62
|
+
/^[\t\r\n ]+$/.test(String(child.value))) {
|
|
63
|
+
// Empty.
|
|
64
|
+
}
|
|
65
|
+
else {
|
|
66
|
+
newChildren.push(child);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
parent.children.splice(index, 1, ...newChildren);
|
|
70
|
+
return index;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
});
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
const mdxProcessor = remark()
|
|
77
|
+
.use(remarkMdx)
|
|
78
|
+
.use(remarkFrontmatter, ['yaml', 'toml'])
|
|
79
|
+
.use(remarkGfm)
|
|
80
|
+
.use(remarkMarkAndUnravel)
|
|
81
|
+
.use(() => {
|
|
82
|
+
return (tree, file) => {
|
|
83
|
+
file.data.ast = tree;
|
|
84
|
+
};
|
|
85
|
+
});
|
|
86
|
+
//# sourceMappingURL=parse.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parse.js","sourceRoot":"","sources":["../src/parse.ts"],"names":[],"mappings":"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"}
|
package/dist/safe-mdx.d.ts
CHANGED
|
@@ -1,11 +1,8 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
-
import type { Node, Parent } from '
|
|
3
|
-
import {
|
|
4
|
-
import { MdxJsxFlowElement, MdxJsxTextElement } from 'mdast-util-mdx-jsx';
|
|
2
|
+
import type { Node, Parent, Root, RootContent } from 'mdast';
|
|
3
|
+
import type { MdxJsxFlowElement, MdxJsxTextElement } from 'mdast-util-mdx-jsx';
|
|
5
4
|
import { ReactNode } from 'react';
|
|
6
|
-
|
|
7
|
-
type MyRootContent = RootContent | Root;
|
|
8
|
-
export declare function mdxParse(code: string): Root;
|
|
5
|
+
export type MyRootContent = RootContent | Root;
|
|
9
6
|
declare module 'mdast' {
|
|
10
7
|
interface HProperties {
|
|
11
8
|
id?: string;
|
|
@@ -17,9 +14,9 @@ declare module 'mdast' {
|
|
|
17
14
|
export type CustomTransformer = (node: MyRootContent, transform: (node: MyRootContent) => ReactNode) => ReactNode | undefined;
|
|
18
15
|
export declare const SafeMdxRenderer: React.NamedExoticComponent<{
|
|
19
16
|
components?: ComponentsMap;
|
|
20
|
-
|
|
17
|
+
markdown?: string;
|
|
21
18
|
mdast?: MyRootContent;
|
|
22
|
-
|
|
19
|
+
renderNode?: CustomTransformer;
|
|
23
20
|
}>;
|
|
24
21
|
export declare class MdastToJsx {
|
|
25
22
|
mdast: MyRootContent;
|
|
@@ -29,12 +26,12 @@ export declare class MdastToJsx {
|
|
|
29
26
|
errors: {
|
|
30
27
|
message: string;
|
|
31
28
|
}[];
|
|
32
|
-
|
|
33
|
-
constructor({ code, mdast, components,
|
|
34
|
-
|
|
35
|
-
mdast
|
|
29
|
+
renderNode?: CustomTransformer;
|
|
30
|
+
constructor({ markdown: code, mdast, components, renderNode, }: {
|
|
31
|
+
markdown?: string;
|
|
32
|
+
mdast: MyRootContent;
|
|
36
33
|
components?: ComponentsMap;
|
|
37
|
-
|
|
34
|
+
renderNode?: (node: MyRootContent, transform: (node: MyRootContent) => ReactNode) => ReactNode | undefined;
|
|
38
35
|
});
|
|
39
36
|
mapMdastChildren(node: any): any;
|
|
40
37
|
mapJsxChildren(node: any): any;
|
|
@@ -52,15 +49,5 @@ type ComponentsMap = {
|
|
|
52
49
|
} & {
|
|
53
50
|
[key: string]: any;
|
|
54
51
|
};
|
|
55
|
-
|
|
56
|
-
* https://github.com/mdx-js/mdx/blob/b3351fadcb6f78833a72757b7135dcfb8ab646fe/packages/mdx/lib/plugin/remark-mark-and-unravel.js
|
|
57
|
-
* A tiny plugin that unravels `<p><h1>x</h1></p>` but also
|
|
58
|
-
* `<p><Component /></p>` (so it has no knowledge of "HTML").
|
|
59
|
-
*
|
|
60
|
-
* It also marks JSX as being explicitly JSX, so when a user passes a `h1`
|
|
61
|
-
* component, it is used for `# heading` but not for `<h1>heading</h1>`.
|
|
62
|
-
*
|
|
63
|
-
*/
|
|
64
|
-
export declare function remarkMarkAndUnravel(): (tree: Root) => void;
|
|
65
|
-
export { completeJsxTags };
|
|
52
|
+
export {};
|
|
66
53
|
//# sourceMappingURL=safe-mdx.d.ts.map
|
package/dist/safe-mdx.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"safe-mdx.d.ts","sourceRoot":"","sources":["../src/safe-mdx.tsx"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"safe-mdx.d.ts","sourceRoot":"","sources":["../src/safe-mdx.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAsC,MAAM,OAAO,CAAA;AAE1D,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,OAAO,CAAA;AAC5D,OAAO,KAAK,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAA;AAE9E,OAAO,EAAY,SAAS,EAAE,MAAM,OAAO,CAAA;AAS3C,MAAM,MAAM,aAAa,GAAG,WAAW,GAAG,IAAI,CAAA;AAE9C,OAAO,QAAQ,OAAO,CAAC;IACnB,UAAiB,WAAW;QACxB,EAAE,CAAC,EAAE,MAAM,CAAA;KACd;IACD,UAAiB,IAAI;QACjB,WAAW,CAAC,EAAE,WAAW,CAAA;KAC5B;CACJ;AAED,MAAM,MAAM,iBAAiB,GAAG,CAC5B,IAAI,EAAE,aAAa,EACnB,SAAS,EAAE,CAAC,IAAI,EAAE,aAAa,KAAK,SAAS,KAC5C,SAAS,GAAG,SAAS,CAAA;AAE1B,eAAO,MAAM,eAAe;iBAMX,aAAa;eACf,MAAM;YACT,aAAa;iBACR,iBAAiB;EAUhC,CAAA;AAEF,qBAAa,UAAU;IACnB,KAAK,EAAE,aAAa,CAAA;IACpB,GAAG,EAAE,MAAM,CAAA;IACX,MAAM,EAAE,MAAM,CAAK;IACnB,CAAC,EAAE,aAAa,CAAA;IAChB,MAAM,EAAE;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,EAAE,CAAK;IAClC,UAAU,CAAC,EAAE,iBAAiB,CAAA;gBAElB,EACR,QAAQ,EAAE,IAAS,EACnB,KAAwB,EACxB,UAAgC,EAChC,UAAU,GACb,EAAE;QACC,QAAQ,CAAC,EAAE,MAAM,CAAA;QACjB,KAAK,EAAE,aAAa,CAAA;QACpB,UAAU,CAAC,EAAE,aAAa,CAAA;QAC1B,UAAU,CAAC,EAAE,CACT,IAAI,EAAE,aAAa,EACnB,SAAS,EAAE,CAAC,IAAI,EAAE,aAAa,KAAK,SAAS,KAC5C,SAAS,GAAG,SAAS,CAAA;KAC7B;IAgBD,gBAAgB,CAAC,IAAI,EAAE,GAAG;IAiB1B,cAAc,CAAC,IAAI,EAAE,GAAG;IAiBxB,cAAc,CAAC,IAAI,EAAE,aAAa,GAAG,SAAS;IAsC9C,GAAG;IAQH,gBAAgB,CAAC,IAAI,EAAE,aAAa,GAAG,SAAS;CA0TnD;AAED,wBAAgB,WAAW,CACvB,IAAI,EAAE,iBAAiB,GAAG,iBAAiB,EAC3C,OAAO,GAAE,CAAC,GAAG,EAAE;IAAE,OAAO,EAAE,MAAM,CAAA;CAAE,KAAK,IAAoB,mBAmE9D;AAcD,wBAAgB,QAAQ,CACpB,IAAI,EAAE,MAAM,GAAG,IAAI,EACnB,EAAE,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM,KAAK,GAAG,SAiBpC;AAUD,QAAA,MAAM,UAAU,+eA6DN,CAAA;AA2RV,KAAK,aAAa,GAAG;KAAG,CAAC,IAAI,CAAC,OAAO,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,GAAG;CAAE,GAAG;IAChE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;CACrB,CAAA"}
|
package/dist/safe-mdx.js
CHANGED
|
@@ -1,24 +1,15 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
import React, { cloneElement } from 'react';
|
|
3
|
-
import { htmlToJsx } from 'html-to-jsx-transform';
|
|
4
|
-
import remarkFrontmatter from 'remark-frontmatter';
|
|
5
|
-
import { collapseWhiteSpace } from 'collapse-white-space';
|
|
6
|
-
import { visit } from 'unist-util-visit';
|
|
7
|
-
import { remark } from 'remark';
|
|
8
|
-
import remarkGfm from 'remark-gfm';
|
|
9
|
-
import remarkMdx from 'remark-mdx';
|
|
2
|
+
import React, { cloneElement, Suspense } from 'react';
|
|
10
3
|
import { Fragment } from 'react';
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
}
|
|
16
|
-
export const SafeMdxRenderer = React.memo(function SafeMdxRenderer({ components, code = '', mdast = null, customTransformer, }) {
|
|
4
|
+
const HtmlToJsxConverter = React.lazy(() => import('./HtmlToJsxConverter.js').then((module) => ({
|
|
5
|
+
default: module.HtmlToJsxConverter,
|
|
6
|
+
})));
|
|
7
|
+
export const SafeMdxRenderer = React.memo(function SafeMdxRenderer({ components, markdown = '', mdast = null, renderNode, }) {
|
|
17
8
|
const visitor = new MdastToJsx({
|
|
18
|
-
|
|
9
|
+
markdown,
|
|
19
10
|
mdast,
|
|
20
11
|
components,
|
|
21
|
-
|
|
12
|
+
renderNode,
|
|
22
13
|
});
|
|
23
14
|
const result = visitor.run();
|
|
24
15
|
return result;
|
|
@@ -29,11 +20,11 @@ export class MdastToJsx {
|
|
|
29
20
|
jsxStr = '';
|
|
30
21
|
c;
|
|
31
22
|
errors = [];
|
|
32
|
-
|
|
33
|
-
constructor({ code = '', mdast = undefined, components = {},
|
|
23
|
+
renderNode;
|
|
24
|
+
constructor({ markdown: code = '', mdast = undefined, components = {}, renderNode, }) {
|
|
34
25
|
this.str = code;
|
|
35
|
-
this.mdast = mdast
|
|
36
|
-
this.
|
|
26
|
+
this.mdast = mdast;
|
|
27
|
+
this.renderNode = renderNode;
|
|
37
28
|
this.c = {
|
|
38
29
|
...Object.fromEntries(nativeTags.map((tag) => {
|
|
39
30
|
return [tag, tag];
|
|
@@ -115,8 +106,8 @@ export class MdastToJsx {
|
|
|
115
106
|
return [];
|
|
116
107
|
}
|
|
117
108
|
// Check for custom transformer first, giving it higher priority
|
|
118
|
-
if (this.
|
|
119
|
-
const customResult = this.
|
|
109
|
+
if (this.renderNode) {
|
|
110
|
+
const customResult = this.renderNode(node, this.mdastTransformer.bind(this));
|
|
120
111
|
if (customResult !== undefined) {
|
|
121
112
|
return customResult;
|
|
122
113
|
}
|
|
@@ -289,21 +280,7 @@ export class MdastToJsx {
|
|
|
289
280
|
if (!text) {
|
|
290
281
|
return [];
|
|
291
282
|
}
|
|
292
|
-
|
|
293
|
-
try {
|
|
294
|
-
this.jsxStr = jsx;
|
|
295
|
-
const result = this.jsxTransformer(node);
|
|
296
|
-
if (Array.isArray(result)) {
|
|
297
|
-
console.log(`Unexpected array result`);
|
|
298
|
-
}
|
|
299
|
-
else if (result) {
|
|
300
|
-
return result;
|
|
301
|
-
}
|
|
302
|
-
}
|
|
303
|
-
finally {
|
|
304
|
-
this.jsxStr = '';
|
|
305
|
-
}
|
|
306
|
-
return [];
|
|
283
|
+
return (_jsx(Suspense, { fallback: null, children: _jsx(HtmlToJsxConverter, { htmlText: text, instance: this, node: node }) }));
|
|
307
284
|
}
|
|
308
285
|
case 'imageReference': {
|
|
309
286
|
return [];
|
|
@@ -758,80 +735,4 @@ const supportedLanguages = [
|
|
|
758
735
|
'zig',
|
|
759
736
|
];
|
|
760
737
|
const supportedLanguagesSet = new Set(supportedLanguages);
|
|
761
|
-
/**
|
|
762
|
-
* https://github.com/mdx-js/mdx/blob/b3351fadcb6f78833a72757b7135dcfb8ab646fe/packages/mdx/lib/plugin/remark-mark-and-unravel.js
|
|
763
|
-
* A tiny plugin that unravels `<p><h1>x</h1></p>` but also
|
|
764
|
-
* `<p><Component /></p>` (so it has no knowledge of "HTML").
|
|
765
|
-
*
|
|
766
|
-
* It also marks JSX as being explicitly JSX, so when a user passes a `h1`
|
|
767
|
-
* component, it is used for `# heading` but not for `<h1>heading</h1>`.
|
|
768
|
-
*
|
|
769
|
-
*/
|
|
770
|
-
export function remarkMarkAndUnravel() {
|
|
771
|
-
return function (tree) {
|
|
772
|
-
visit(tree, function (node, index, parent) {
|
|
773
|
-
let offset = -1;
|
|
774
|
-
let all = true;
|
|
775
|
-
let oneOrMore = false;
|
|
776
|
-
if (parent &&
|
|
777
|
-
typeof index === 'number' &&
|
|
778
|
-
node.type === 'paragraph') {
|
|
779
|
-
const children = node.children;
|
|
780
|
-
while (++offset < children.length) {
|
|
781
|
-
const child = children[offset];
|
|
782
|
-
if (child.type === 'mdxJsxTextElement' ||
|
|
783
|
-
child.type === 'mdxTextExpression') {
|
|
784
|
-
oneOrMore = true;
|
|
785
|
-
}
|
|
786
|
-
else if (child.type === 'text' &&
|
|
787
|
-
collapseWhiteSpace(child.value, {
|
|
788
|
-
style: 'html',
|
|
789
|
-
trim: true,
|
|
790
|
-
}) === '') {
|
|
791
|
-
// Empty.
|
|
792
|
-
}
|
|
793
|
-
else {
|
|
794
|
-
all = false;
|
|
795
|
-
break;
|
|
796
|
-
}
|
|
797
|
-
}
|
|
798
|
-
if (all && oneOrMore) {
|
|
799
|
-
offset = -1;
|
|
800
|
-
const newChildren = [];
|
|
801
|
-
while (++offset < children.length) {
|
|
802
|
-
const child = children[offset];
|
|
803
|
-
if (child.type === 'mdxJsxTextElement') {
|
|
804
|
-
// @ts-expect-error: mutate because it is faster; content model is fine.
|
|
805
|
-
child.type = 'mdxJsxFlowElement';
|
|
806
|
-
}
|
|
807
|
-
if (child.type === 'mdxTextExpression') {
|
|
808
|
-
// @ts-expect-error: mutate because it is faster; content model is fine.
|
|
809
|
-
child.type = 'mdxFlowExpression';
|
|
810
|
-
}
|
|
811
|
-
if (child.type === 'text' &&
|
|
812
|
-
/^[\t\r\n ]+$/.test(String(child.value))) {
|
|
813
|
-
// Empty.
|
|
814
|
-
}
|
|
815
|
-
else {
|
|
816
|
-
newChildren.push(child);
|
|
817
|
-
}
|
|
818
|
-
}
|
|
819
|
-
parent.children.splice(index, 1, ...newChildren);
|
|
820
|
-
return index;
|
|
821
|
-
}
|
|
822
|
-
}
|
|
823
|
-
});
|
|
824
|
-
};
|
|
825
|
-
}
|
|
826
|
-
const mdxProcessor = remark()
|
|
827
|
-
.use(remarkMdx)
|
|
828
|
-
.use(remarkFrontmatter, ['yaml', 'toml'])
|
|
829
|
-
.use(remarkGfm)
|
|
830
|
-
.use(remarkMarkAndUnravel)
|
|
831
|
-
.use(() => {
|
|
832
|
-
return (tree, file) => {
|
|
833
|
-
file.data.ast = tree;
|
|
834
|
-
};
|
|
835
|
-
});
|
|
836
|
-
export { completeJsxTags };
|
|
837
738
|
//# sourceMappingURL=safe-mdx.js.map
|
package/dist/safe-mdx.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"safe-mdx.js","sourceRoot":"","sources":["../src/safe-mdx.tsx"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"safe-mdx.js","sourceRoot":"","sources":["../src/safe-mdx.tsx"],"names":[],"mappings":"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"}
|
package/dist/safe-mdx.test.js
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
2
|
import dedent from 'dedent';
|
|
3
|
-
import
|
|
3
|
+
import { htmlToJsx } from 'html-to-jsx-transform';
|
|
4
4
|
import { renderToStaticMarkup } from 'react-dom/server';
|
|
5
5
|
import { expect, test } from 'vitest';
|
|
6
|
-
import {
|
|
7
|
-
|
|
6
|
+
import { mdxParse } from './parse.js';
|
|
7
|
+
import { MdastToJsx, mdastBfs } from './safe-mdx.js';
|
|
8
|
+
import { completeJsxTags } from './streaming.js';
|
|
8
9
|
const components = {
|
|
9
10
|
Heading({ level, children }) {
|
|
10
11
|
return _jsx("h1", { children: children });
|
|
@@ -14,14 +15,13 @@ const components = {
|
|
|
14
15
|
},
|
|
15
16
|
};
|
|
16
17
|
function render(code) {
|
|
17
|
-
const
|
|
18
|
+
const mdast = mdxParse(code);
|
|
19
|
+
const visitor = new MdastToJsx({ markdown: code, mdast, components });
|
|
18
20
|
const result = visitor.run();
|
|
19
21
|
const html = renderToStaticMarkup(result);
|
|
20
22
|
// console.log(JSON.stringify(result, null, 2))
|
|
21
23
|
return { result, errors: visitor.errors || [], html };
|
|
22
24
|
}
|
|
23
|
-
import { htmlToJsx } from 'html-to-jsx-transform';
|
|
24
|
-
import { completeJsxTags } from './streaming.js';
|
|
25
25
|
test('htmlToJsx', () => {
|
|
26
26
|
expect(htmlToJsx('<p x="y">')).toMatchInlineSnapshot(`"<p x="y" />"`);
|
|
27
27
|
expect(htmlToJsx('<p>text</p>')).toMatchInlineSnapshot(`"<p>text</p>"`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"safe-mdx.test.js","sourceRoot":"","sources":["../src/safe-mdx.test.tsx"],"names":[],"mappings":";AAAA,OAAO,MAAM,MAAM,QAAQ,CAAA;AAC3B,OAAO,
|
|
1
|
+
{"version":3,"file":"safe-mdx.test.js","sourceRoot":"","sources":["../src/safe-mdx.test.tsx"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "safe-mdx",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "1.0.0",
|
|
4
4
|
"private": false,
|
|
5
5
|
"description": "Render MDX in React without eval",
|
|
6
6
|
"repository": "https://github.com/holocron-hq/safe-mdx",
|
|
@@ -11,6 +11,10 @@
|
|
|
11
11
|
"types": "./dist/safe-mdx.d.ts",
|
|
12
12
|
"default": "./dist/safe-mdx.js"
|
|
13
13
|
},
|
|
14
|
+
"./parse": {
|
|
15
|
+
"types": "./dist/parse.d.ts",
|
|
16
|
+
"default": "./dist/parse.js"
|
|
17
|
+
},
|
|
14
18
|
"./src/*": "./src/*.tsx",
|
|
15
19
|
"./package.json": "./package.json"
|
|
16
20
|
},
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import React from 'react'
|
|
2
|
+
import { htmlToJsx } from 'html-to-jsx-transform'
|
|
3
|
+
import type { MdastToJsx, MyRootContent } from './safe-mdx.js'
|
|
4
|
+
|
|
5
|
+
React
|
|
6
|
+
|
|
7
|
+
interface HtmlToJsxConverterProps {
|
|
8
|
+
htmlText: string
|
|
9
|
+
instance: MdastToJsx
|
|
10
|
+
node: MyRootContent
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
export function HtmlToJsxConverter({
|
|
14
|
+
htmlText,
|
|
15
|
+
instance,
|
|
16
|
+
node,
|
|
17
|
+
}: HtmlToJsxConverterProps) {
|
|
18
|
+
try {
|
|
19
|
+
const jsx = htmlToJsx(htmlText)
|
|
20
|
+
const originalJsxStr = instance.jsxStr
|
|
21
|
+
instance.jsxStr = jsx
|
|
22
|
+
|
|
23
|
+
const result = instance.jsxTransformer(node)
|
|
24
|
+
|
|
25
|
+
instance.jsxStr = originalJsxStr
|
|
26
|
+
|
|
27
|
+
if (Array.isArray(result)) {
|
|
28
|
+
console.log(`Unexpected array result`)
|
|
29
|
+
return null
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
return result || null
|
|
33
|
+
} catch (error) {
|
|
34
|
+
console.error('Error converting HTML to JSX:', error)
|
|
35
|
+
return null
|
|
36
|
+
}
|
|
37
|
+
}
|
package/src/parse.ts
ADDED
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
import remarkFrontmatter from 'remark-frontmatter'
|
|
2
|
+
import { collapseWhiteSpace } from 'collapse-white-space'
|
|
3
|
+
import { visit } from 'unist-util-visit'
|
|
4
|
+
import { Root, RootContent } from 'mdast'
|
|
5
|
+
import { remark } from 'remark'
|
|
6
|
+
import remarkGfm from 'remark-gfm'
|
|
7
|
+
import remarkMdx from 'remark-mdx'
|
|
8
|
+
|
|
9
|
+
export function mdxParse(code: string) {
|
|
10
|
+
const file = mdxProcessor.processSync(code)
|
|
11
|
+
return file.data.ast as Root
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* https://github.com/mdx-js/mdx/blob/b3351fadcb6f78833a72757b7135dcfb8ab646fe/packages/mdx/lib/plugin/remark-mark-and-unravel.js
|
|
16
|
+
* A tiny plugin that unravels `<p><h1>x</h1></p>` but also
|
|
17
|
+
* `<p><Component /></p>` (so it has no knowledge of "HTML").
|
|
18
|
+
*
|
|
19
|
+
* It also marks JSX as being explicitly JSX, so when a user passes a `h1`
|
|
20
|
+
* component, it is used for `# heading` but not for `<h1>heading</h1>`.
|
|
21
|
+
*
|
|
22
|
+
*/
|
|
23
|
+
function remarkMarkAndUnravel() {
|
|
24
|
+
return function (tree: Root) {
|
|
25
|
+
visit(tree, function (node, index, parent) {
|
|
26
|
+
let offset = -1
|
|
27
|
+
let all = true
|
|
28
|
+
let oneOrMore = false
|
|
29
|
+
|
|
30
|
+
if (
|
|
31
|
+
parent &&
|
|
32
|
+
typeof index === 'number' &&
|
|
33
|
+
node.type === 'paragraph'
|
|
34
|
+
) {
|
|
35
|
+
const children = node.children
|
|
36
|
+
|
|
37
|
+
while (++offset < children.length) {
|
|
38
|
+
const child = children[offset]
|
|
39
|
+
|
|
40
|
+
if (
|
|
41
|
+
child.type === 'mdxJsxTextElement' ||
|
|
42
|
+
child.type === 'mdxTextExpression'
|
|
43
|
+
) {
|
|
44
|
+
oneOrMore = true
|
|
45
|
+
} else if (
|
|
46
|
+
child.type === 'text' &&
|
|
47
|
+
collapseWhiteSpace(child.value, {
|
|
48
|
+
style: 'html',
|
|
49
|
+
trim: true,
|
|
50
|
+
}) === ''
|
|
51
|
+
) {
|
|
52
|
+
// Empty.
|
|
53
|
+
} else {
|
|
54
|
+
all = false
|
|
55
|
+
break
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
if (all && oneOrMore) {
|
|
60
|
+
offset = -1
|
|
61
|
+
|
|
62
|
+
const newChildren: RootContent[] = []
|
|
63
|
+
|
|
64
|
+
while (++offset < children.length) {
|
|
65
|
+
const child = children[offset]
|
|
66
|
+
|
|
67
|
+
if (child.type === 'mdxJsxTextElement') {
|
|
68
|
+
// @ts-expect-error: mutate because it is faster; content model is fine.
|
|
69
|
+
child.type = 'mdxJsxFlowElement'
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
if (child.type === 'mdxTextExpression') {
|
|
73
|
+
// @ts-expect-error: mutate because it is faster; content model is fine.
|
|
74
|
+
child.type = 'mdxFlowExpression'
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
if (
|
|
78
|
+
child.type === 'text' &&
|
|
79
|
+
/^[\t\r\n ]+$/.test(String(child.value))
|
|
80
|
+
) {
|
|
81
|
+
// Empty.
|
|
82
|
+
} else {
|
|
83
|
+
newChildren.push(child)
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
parent.children.splice(index, 1, ...newChildren)
|
|
88
|
+
return index
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
})
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
const mdxProcessor = remark()
|
|
96
|
+
.use(remarkMdx)
|
|
97
|
+
.use(remarkFrontmatter, ['yaml', 'toml'])
|
|
98
|
+
.use(remarkGfm)
|
|
99
|
+
.use(remarkMarkAndUnravel)
|
|
100
|
+
.use(() => {
|
|
101
|
+
return (tree, file) => {
|
|
102
|
+
file.data.ast = tree
|
|
103
|
+
}
|
|
104
|
+
})
|
package/src/safe-mdx.test.tsx
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import dedent from 'dedent'
|
|
2
|
+
import { htmlToJsx } from 'html-to-jsx-transform'
|
|
2
3
|
import React from 'react'
|
|
3
4
|
import { renderToStaticMarkup } from 'react-dom/server'
|
|
4
5
|
import { expect, test } from 'vitest'
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import
|
|
8
|
-
void React
|
|
6
|
+
import { mdxParse } from './parse.js'
|
|
7
|
+
import { MdastToJsx, mdastBfs } from './safe-mdx.js'
|
|
8
|
+
import { completeJsxTags } from './streaming.js'
|
|
9
9
|
|
|
10
10
|
const components = {
|
|
11
11
|
Heading({ level, children }) {
|
|
@@ -17,14 +17,13 @@ const components = {
|
|
|
17
17
|
}
|
|
18
18
|
|
|
19
19
|
function render(code) {
|
|
20
|
-
const
|
|
20
|
+
const mdast = mdxParse(code)
|
|
21
|
+
const visitor = new MdastToJsx({ markdown: code, mdast, components })
|
|
21
22
|
const result = visitor.run()
|
|
22
23
|
const html = renderToStaticMarkup(result)
|
|
23
24
|
// console.log(JSON.stringify(result, null, 2))
|
|
24
25
|
return { result, errors: visitor.errors || [], html }
|
|
25
26
|
}
|
|
26
|
-
import { htmlToJsx } from 'html-to-jsx-transform'
|
|
27
|
-
import { completeJsxTags } from './streaming.js'
|
|
28
27
|
|
|
29
28
|
test('htmlToJsx', () => {
|
|
30
29
|
expect(htmlToJsx('<p x="y">')).toMatchInlineSnapshot(`"<p x="y" />"`)
|
package/src/safe-mdx.tsx
CHANGED
|
@@ -1,26 +1,18 @@
|
|
|
1
|
-
import React, { cloneElement } from 'react'
|
|
2
|
-
import { htmlToJsx } from 'html-to-jsx-transform'
|
|
3
|
-
import type { Node, Parent } from 'unist'
|
|
4
|
-
import remarkFrontmatter from 'remark-frontmatter'
|
|
1
|
+
import React, { use, cloneElement, Suspense } from 'react'
|
|
5
2
|
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
|
|
9
|
-
import { Root, RootContent, Yaml } from 'mdast'
|
|
10
|
-
import { MdxJsxFlowElement, MdxJsxTextElement } from 'mdast-util-mdx-jsx'
|
|
11
|
-
import { remark } from 'remark'
|
|
12
|
-
import remarkGfm from 'remark-gfm'
|
|
13
|
-
import remarkMdx from 'remark-mdx'
|
|
3
|
+
import type { Node, Parent, Root, RootContent } from 'mdast'
|
|
4
|
+
import type { MdxJsxFlowElement, MdxJsxTextElement } from 'mdast-util-mdx-jsx'
|
|
14
5
|
|
|
15
6
|
import { Fragment, ReactNode } from 'react'
|
|
16
7
|
import { completeJsxTags } from './streaming.js'
|
|
17
8
|
|
|
18
|
-
|
|
9
|
+
const HtmlToJsxConverter = React.lazy(() =>
|
|
10
|
+
import('./HtmlToJsxConverter.js').then((module) => ({
|
|
11
|
+
default: module.HtmlToJsxConverter,
|
|
12
|
+
})),
|
|
13
|
+
)
|
|
19
14
|
|
|
20
|
-
export
|
|
21
|
-
const file = mdxProcessor.processSync(code)
|
|
22
|
-
return file.data.ast as Root
|
|
23
|
-
}
|
|
15
|
+
export type MyRootContent = RootContent | Root
|
|
24
16
|
|
|
25
17
|
declare module 'mdast' {
|
|
26
18
|
export interface HProperties {
|
|
@@ -38,20 +30,20 @@ export type CustomTransformer = (
|
|
|
38
30
|
|
|
39
31
|
export const SafeMdxRenderer = React.memo(function SafeMdxRenderer({
|
|
40
32
|
components,
|
|
41
|
-
|
|
33
|
+
markdown = '',
|
|
42
34
|
mdast = null as any,
|
|
43
|
-
|
|
35
|
+
renderNode,
|
|
44
36
|
}: {
|
|
45
37
|
components?: ComponentsMap
|
|
46
|
-
|
|
38
|
+
markdown?: string
|
|
47
39
|
mdast?: MyRootContent
|
|
48
|
-
|
|
40
|
+
renderNode?: CustomTransformer
|
|
49
41
|
}) {
|
|
50
42
|
const visitor = new MdastToJsx({
|
|
51
|
-
|
|
43
|
+
markdown,
|
|
52
44
|
mdast,
|
|
53
45
|
components,
|
|
54
|
-
|
|
46
|
+
renderNode,
|
|
55
47
|
})
|
|
56
48
|
const result = visitor.run()
|
|
57
49
|
return result
|
|
@@ -63,25 +55,27 @@ export class MdastToJsx {
|
|
|
63
55
|
jsxStr: string = ''
|
|
64
56
|
c: ComponentsMap
|
|
65
57
|
errors: { message: string }[] = []
|
|
66
|
-
|
|
58
|
+
renderNode?: CustomTransformer
|
|
67
59
|
|
|
68
60
|
constructor({
|
|
69
|
-
code = '',
|
|
61
|
+
markdown: code = '',
|
|
70
62
|
mdast = undefined as any,
|
|
71
63
|
components = {} as ComponentsMap,
|
|
72
|
-
|
|
64
|
+
renderNode,
|
|
73
65
|
}: {
|
|
74
|
-
|
|
75
|
-
mdast
|
|
66
|
+
markdown?: string
|
|
67
|
+
mdast: MyRootContent
|
|
76
68
|
components?: ComponentsMap
|
|
77
|
-
|
|
69
|
+
renderNode?: (
|
|
78
70
|
node: MyRootContent,
|
|
79
71
|
transform: (node: MyRootContent) => ReactNode,
|
|
80
72
|
) => ReactNode | undefined
|
|
81
73
|
}) {
|
|
82
74
|
this.str = code
|
|
83
|
-
|
|
84
|
-
this.
|
|
75
|
+
|
|
76
|
+
this.mdast = mdast
|
|
77
|
+
|
|
78
|
+
this.renderNode = renderNode
|
|
85
79
|
|
|
86
80
|
this.c = {
|
|
87
81
|
...Object.fromEntries(
|
|
@@ -178,8 +172,8 @@ export class MdastToJsx {
|
|
|
178
172
|
}
|
|
179
173
|
|
|
180
174
|
// Check for custom transformer first, giving it higher priority
|
|
181
|
-
if (this.
|
|
182
|
-
const customResult = this.
|
|
175
|
+
if (this.renderNode) {
|
|
176
|
+
const customResult = this.renderNode(
|
|
183
177
|
node,
|
|
184
178
|
this.mdastTransformer.bind(this),
|
|
185
179
|
)
|
|
@@ -459,20 +453,15 @@ export class MdastToJsx {
|
|
|
459
453
|
return []
|
|
460
454
|
}
|
|
461
455
|
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
} finally {
|
|
472
|
-
this.jsxStr = ''
|
|
473
|
-
}
|
|
474
|
-
|
|
475
|
-
return []
|
|
456
|
+
return (
|
|
457
|
+
<Suspense fallback={null}>
|
|
458
|
+
<HtmlToJsxConverter
|
|
459
|
+
htmlText={text}
|
|
460
|
+
instance={this}
|
|
461
|
+
node={node}
|
|
462
|
+
/>
|
|
463
|
+
</Suspense>
|
|
464
|
+
)
|
|
476
465
|
}
|
|
477
466
|
case 'imageReference': {
|
|
478
467
|
return []
|
|
@@ -952,97 +941,3 @@ const supportedLanguagesSet = new Set(supportedLanguages)
|
|
|
952
941
|
type ComponentsMap = { [k in (typeof nativeTags)[number]]?: any } & {
|
|
953
942
|
[key: string]: any
|
|
954
943
|
}
|
|
955
|
-
|
|
956
|
-
/**
|
|
957
|
-
* https://github.com/mdx-js/mdx/blob/b3351fadcb6f78833a72757b7135dcfb8ab646fe/packages/mdx/lib/plugin/remark-mark-and-unravel.js
|
|
958
|
-
* A tiny plugin that unravels `<p><h1>x</h1></p>` but also
|
|
959
|
-
* `<p><Component /></p>` (so it has no knowledge of "HTML").
|
|
960
|
-
*
|
|
961
|
-
* It also marks JSX as being explicitly JSX, so when a user passes a `h1`
|
|
962
|
-
* component, it is used for `# heading` but not for `<h1>heading</h1>`.
|
|
963
|
-
*
|
|
964
|
-
*/
|
|
965
|
-
export function remarkMarkAndUnravel() {
|
|
966
|
-
return function (tree: Root) {
|
|
967
|
-
visit(tree, function (node, index, parent) {
|
|
968
|
-
let offset = -1
|
|
969
|
-
let all = true
|
|
970
|
-
let oneOrMore = false
|
|
971
|
-
|
|
972
|
-
if (
|
|
973
|
-
parent &&
|
|
974
|
-
typeof index === 'number' &&
|
|
975
|
-
node.type === 'paragraph'
|
|
976
|
-
) {
|
|
977
|
-
const children = node.children
|
|
978
|
-
|
|
979
|
-
while (++offset < children.length) {
|
|
980
|
-
const child = children[offset]
|
|
981
|
-
|
|
982
|
-
if (
|
|
983
|
-
child.type === 'mdxJsxTextElement' ||
|
|
984
|
-
child.type === 'mdxTextExpression'
|
|
985
|
-
) {
|
|
986
|
-
oneOrMore = true
|
|
987
|
-
} else if (
|
|
988
|
-
child.type === 'text' &&
|
|
989
|
-
collapseWhiteSpace(child.value, {
|
|
990
|
-
style: 'html',
|
|
991
|
-
trim: true,
|
|
992
|
-
}) === ''
|
|
993
|
-
) {
|
|
994
|
-
// Empty.
|
|
995
|
-
} else {
|
|
996
|
-
all = false
|
|
997
|
-
break
|
|
998
|
-
}
|
|
999
|
-
}
|
|
1000
|
-
|
|
1001
|
-
if (all && oneOrMore) {
|
|
1002
|
-
offset = -1
|
|
1003
|
-
|
|
1004
|
-
const newChildren: RootContent[] = []
|
|
1005
|
-
|
|
1006
|
-
while (++offset < children.length) {
|
|
1007
|
-
const child = children[offset]
|
|
1008
|
-
|
|
1009
|
-
if (child.type === 'mdxJsxTextElement') {
|
|
1010
|
-
// @ts-expect-error: mutate because it is faster; content model is fine.
|
|
1011
|
-
child.type = 'mdxJsxFlowElement'
|
|
1012
|
-
}
|
|
1013
|
-
|
|
1014
|
-
if (child.type === 'mdxTextExpression') {
|
|
1015
|
-
// @ts-expect-error: mutate because it is faster; content model is fine.
|
|
1016
|
-
child.type = 'mdxFlowExpression'
|
|
1017
|
-
}
|
|
1018
|
-
|
|
1019
|
-
if (
|
|
1020
|
-
child.type === 'text' &&
|
|
1021
|
-
/^[\t\r\n ]+$/.test(String(child.value))
|
|
1022
|
-
) {
|
|
1023
|
-
// Empty.
|
|
1024
|
-
} else {
|
|
1025
|
-
newChildren.push(child)
|
|
1026
|
-
}
|
|
1027
|
-
}
|
|
1028
|
-
|
|
1029
|
-
parent.children.splice(index, 1, ...newChildren)
|
|
1030
|
-
return index
|
|
1031
|
-
}
|
|
1032
|
-
}
|
|
1033
|
-
})
|
|
1034
|
-
}
|
|
1035
|
-
}
|
|
1036
|
-
|
|
1037
|
-
const mdxProcessor = remark()
|
|
1038
|
-
.use(remarkMdx)
|
|
1039
|
-
.use(remarkFrontmatter, ['yaml', 'toml'])
|
|
1040
|
-
.use(remarkGfm)
|
|
1041
|
-
.use(remarkMarkAndUnravel)
|
|
1042
|
-
.use(() => {
|
|
1043
|
-
return (tree, file) => {
|
|
1044
|
-
file.data.ast = tree
|
|
1045
|
-
}
|
|
1046
|
-
})
|
|
1047
|
-
|
|
1048
|
-
export { completeJsxTags }
|