34 lines
901 B
TypeScript
34 lines
901 B
TypeScript
/**
|
|
* Rehype plugin to enhance links with security attributes.
|
|
*
|
|
* Adds target="_blank" and rel="noopener noreferrer" to all anchor elements,
|
|
* ensuring external links open in new tabs safely.
|
|
*/
|
|
|
|
import type { Plugin } from 'unified';
|
|
import type { Root, Element } from 'hast';
|
|
import { visit } from 'unist-util-visit';
|
|
|
|
/**
|
|
* Rehype plugin that adds security attributes to all links.
|
|
* This plugin ensures external links open in new tabs safely by adding:
|
|
* - target="_blank"
|
|
* - rel="noopener noreferrer"
|
|
*/
|
|
export const rehypeEnhanceLinks: Plugin<[], Root> = () => {
|
|
return (tree: Root) => {
|
|
visit(tree, 'element', (node: Element) => {
|
|
if (node.tagName !== 'a') return;
|
|
|
|
const props = node.properties ?? {};
|
|
|
|
// Only modify if href exists
|
|
if (!props.href) return;
|
|
|
|
props.target = '_blank';
|
|
props.rel = 'noopener noreferrer';
|
|
node.properties = props;
|
|
});
|
|
};
|
|
};
|