astro/packages/markdown/remark/src/rehype-escape.ts

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

18 lines
575 B
TypeScript
Raw Normal View History

2022-06-06 16:49:53 +00:00
import { visit } from 'unist-util-visit';
2021-11-10 23:34:31 +00:00
export default function rehypeEscape(): any {
return function (node: any): any {
return visit(node, 'element', (el) => {
if (el.tagName === 'code' || el.tagName === 'pre') {
el.properties['is:raw'] = true;
// Visit all raw children and escape HTML tags to prevent Markdown code
// like "This is a `<script>` tag" from actually opening a script tag
visit(el, 'raw', (raw) => {
raw.value = raw.value.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;');
});
2021-11-10 23:34:31 +00:00
}
return el;
});
};
}