summaryrefslogtreecommitdiff
path: root/packages/markdown/remark/src/remark-jsx.ts
blob: 637bac9eeb5e99c1a713d78a3f581e45d01c24be (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
// Vite bug: dynamically import() modules needed for CJS. Cache in memory to keep side effects
let mdxJsx: any;
let mdxJsxFromMarkdown: any;
let mdxJsxToMarkdown: any;

export function remarkJsx(this: any, options: any) {
	let settings = options || {};
	let data = this.data();

	// TODO this seems to break adding slugs, no idea why add('micromarkExtensions', mdxJsx({}));
	add('fromMarkdownExtensions', mdxJsxFromMarkdown);
	add('toMarkdownExtensions', mdxJsxToMarkdown);

	function add(field: any, value: any) {
		/* istanbul ignore if - other extensions. */
		if (data[field]) data[field].push(value);
		else data[field] = [value];
	}
}

export async function loadRemarkJsx() {
	if (!mdxJsx) {
		const micromarkMdxJsx = await import('micromark-extension-mdx-jsx');
		mdxJsx = micromarkMdxJsx.mdxJsx;
	}
	if (!mdxJsxFromMarkdown || !mdxJsxToMarkdown) {
		const mdastUtilMdxJsx = await import('mdast-util-mdx-jsx');
		mdxJsxFromMarkdown = mdastUtilMdxJsx.mdxJsxFromMarkdown;
		mdxJsxToMarkdown = mdastUtilMdxJsx.mdxJsxToMarkdown;
	}
}