svem
Version:
Svelte in Markdown preprocessor
36 lines (35 loc) • 838 B
JavaScript
import { visit } from "unist-util-visit";
const remarkSvelteParse = () => {
return (tree) => {
visit(tree, "code", (node) => {
if (node.lang) return;
const patterns = ["{#", "{@"];
const isSvelte = patterns.some((pattern) => node.value?.startsWith(pattern));
if (isSvelte) {
node.type = "html";
}
});
};
};
const remarkSvelteEscape = () => {
return (tree) => {
visit(tree, "html-code", (node) => {
escapeCode(node);
});
visit(tree, "code", (node) => {
escapeCode(node);
});
visit(tree, "inlineCode", (node) => {
escapeCode(node);
});
};
};
const escapeCode = (node) => {
if (node.value?.startsWith("{@html")) return;
node.type = "html";
node.value = `{@html \`${node.value}\`}`;
};
export {
remarkSvelteEscape,
remarkSvelteParse
};