markdown-it で HTML コメントを除去したい

Blog3 では、公開用の markdown のレンダリングには markdown-it を使っている。

デフォルトでは HTML コメントが除去されないので、以下のようにして HTML コメントを除去するようにした。 これで、ネタバレとかを除外できるようになった。

const MarkdownIt = require('markdown-it');

const md = new MarkdownIt({
  html: true,
});

md.core.ruler.push('ignore_html_comments', (state) => {
  state.tokens = state.tokens.filter((token) => {
    if (token.type === 'html_block' || token.type === 'html_inline') {
      return !token.content.trim().startsWith('<!--');
    }
    return true;
  });
});

const markdownString = `
# Heading

<!-- This is a comment -->
Content here.

<div>This HTML block remains</div>
`;

console.log(md.render(markdownString));

Blog3 での実装は以下のようになった。 https://github.com/tokuhirom/blog3/pull/825/commits/0339b38cb70b8e793debf77dd4946c88faac141a


と、思ったけどいま RSS の description には markdown をそのままのせているので、おかしなことになる。 よって、HTML を text に戻したものを description に載せることにした。

html-to-text を使えば簡単にできた。

https://github.com/tokuhirom/blog3/pull/826