FineVision / app /plugins /rehype /restore-at-in-code.mjs
thibaud frere
update template
d15ea6f
raw
history blame contribute delete
786 Bytes
// Rehype plugin to restore '@' inside code nodes after rehype-citation ran
export default function rehypeRestoreAtInCode() {
return (tree) => {
const restoreInNode = (node) => {
if (!node || typeof node !== 'object') return;
const isText = node.type === 'text';
if (isText && typeof node.value === 'string' && node.value.includes('__AT_SENTINEL__')) {
node.value = node.value.replace(/__AT_SENTINEL__/g, '@');
}
const isCodeEl = node.type === 'element' && node.tagName === 'code';
const children = Array.isArray(node.children) ? node.children : [];
if (isCodeEl && children.length) {
children.forEach(restoreInNode);
return;
}
children.forEach(restoreInNode);
};
restoreInNode(tree);
};
}