Files
upgrading-ethereum-book/integrations/my_cleanup_html.js
2025-06-26 18:20:37 +01:00

53 lines
1.4 KiB
JavaScript

import { visit, CONTINUE, SKIP } from 'unist-util-visit';
// Clean up any weird HTML artefacts, especially those that fail validation
function cleanupHtml() {
return function (tree) {
visit(tree, undefined, (node, index, parent) => {
// Remove `is:raw=""` that's on `code` elements, probably from Prism
if (node.type === 'element' && node.tagName === 'code') {
delete node.properties['is:raw'];
return CONTINUE;
}
// Remove whitespace at the end of headings. This can be left behind by section markers.
if (
node.type === 'text' &&
parent.type === 'element' &&
['h1', 'h2', 'h3'].includes(parent.tagName)
) {
node.value = node.value.trim();
return CONTINUE;
}
// Huge numbers of newlines weirdly get inserted before tables - no idea why
if (node.type === 'text' && node.value.match(/^\n\n+$/) !== null) {
node.value = '\n';
return CONTINUE;
}
// Remove all comments
if (node.type === 'comment') {
parent.children.splice(index, 1);
return SKIP;
}
});
};
}
export default function () {
return {
name: 'myCleanupHtml',
hooks: {
'astro:config:setup': ({ updateConfig }) => {
updateConfig({
markdown: {
rehypePlugins: [cleanupHtml],
},
});
},
},
};
}