remark-rehype — это мост между двумя экосистемами обработки контента в Jav * aScript: Markdown и HTML. Библиотека Remark специализируется на анализе и трансформации Markdown в виде абстрактного синтаксического дерева (MDAST), тогда как Rehype работает с HTML-структурами через HAST (Hypertext Abstract Syntax Tree). Плагин remark-rehype обеспечивает конвертацию MDAST в HAST, сохраняя семантику документа и позволяя далее использовать мощные инструменты обработки HTML.
Преобразование структур Remark создает дерево MDAST, где каждый узел соответствует элементу Markdown: заголовки, списки, параграфы, ссылки, изображения. Remark-rehype преобразует эти узлы в эквивалентные HTML-узлы HAST. Например:
heading →
<h1>–<h6>paragraph → <p>list → <ul> или
<ol>listItem → <li>Сохранение метаданных В процессе конвертации плагин переносит свойства узлов, такие как:
id для заголовковalt для изображенийtitle для ссылок Эти данные важны для генерации
семантически корректного HTML.Настраиваемость через опции Remark-rehype поддерживает конфигурацию:
allowDangerousHtml — позволяет включать встроенный HTML
из Markdown без экранирования.handlers — кастомные функции для обработки
нестандартных узлов или специфических требований к HTML.unknownHandler — механизм обработки неизвестных типов
узлов, предотвращающий потерю контента.Анализ Markdown Markdown передается в Remark, который строит MDAST. Дерево хранит:
type)children)value)Проход по дереву MDAST Remark-rehype рекурсивно обходит каждый узел. Для каждого типа определен соответствующий обработчик:
handlersГенерация HAST В ходе обхода создается дерево HAST:
element для HTML-теговtext для текстового содержимогоcomment для HTML-комментариев Это дерево полностью
совместимо с Rehype-плагинами для последующей трансформации или
рендеринга.Поддержка встроенного HTML Markdown-документы
часто содержат raw HTML. Без специальной настройки Remark-rehype будет
экранировать HTML-теги, чтобы избежать их интерпретации. Включение опции
allowDangerousHtml сохраняет HTML без изменений.
Кастомные обработчики (handlers) Позволяют
расширять функциональность. Например, можно преобразовать нестандартный
блок :::note в <aside class="note">.
Handler получает узел MDAST и возвращает узел HAST.
Слияние с Rehype-плагинами После конвертации MDAST в HAST дерево становится доступным для всех Rehype-плагинов: минификация, добавление атрибутов, генерация таблицы содержания, преобразование в JSX и т.д.
MDAST (Markdown)
{
"type": "paragraph",
"children": [
{ "type": "text", "value": "Пример текста" },
{ "type": "link", "url": "https://example.com", "children": [{ "type": "text", "value": "ссылка" }] }
]
}
HAST (HTML)
{
"type": "element",
"tagName": "p",
"children": [
{ "type": "text", "value": "Пример текста" },
{ "type": "element", "tagName": "a", "properties": { "href": "https://example.com" }, "children": [{ "type": "text", "value": "ссылка" }] }
]
}
Remark → Remark-плагины → remark-rehype → Rehype-плагины → HTML/JSX Такая цепочка позволяет модульно расширять функциональность, разделяя этапы парсинга Markdown, трансформации дерева и финальной генерации HTML.
Сохранение семантики Плагин гарантирует, что каждый Markdown-элемент будет представлен в HTML максимально близко к исходной структуре и смыслу документа.
Оптимизация производительности Конвертация происходит рекурсивно и лениво: узлы обрабатываются по мере обхода дерева, что уменьшает нагрузку при больших документах.
Remark-rehype выступает не просто как конвертер, а как гибкая основа для построения цепочек обработки контента, обеспечивая полное взаимодействие между Markdown и HTML-экосистемами.