Remark и Rehype представляют собой мощные инструменты для обработки текстового контента в экосистеме JavaScript, ориентированные на работу с Markdown и HTML. Они используют единый подход к парсингу и трансформации документов, позволяя создавать гибкие цепочки обработки данных.
Обе библиотеки построены на принципах плагинной архитектуры, что позволяет подключать различные обработчики для анализа, трансформации или генерации контента.
Дерево MDAST является промежуточным представлением документа Markdown. Основные элементы MDAST:
Каждый узел имеет тип (type) и свойства
(data, value, children), что
делает его удобным для программного анализа и модификации содержимого
Markdown.
HAST используется для представления HTML-документов. Основные элементы:
HAST позволяет проводить сложные преобразования HTML, включая добавление атрибутов, изменение структуры документа или интеграцию с другими инструментами.
Remark и Rehype поддерживают плагины, которые позволяют расширять функциональность без изменения основного кода библиотеки. Плагины бывают двух типов:
Принцип работы плагинов:
import { unified } from 'unified';
import remarkParse from 'remark-parse';
import remarkRehype from 'remark-rehype';
import rehypeStringify from 'rehype-stringify';
const processor = unified()
.use(remarkParse) // парсинг Markdown
.use(remarkRehype) // преобразование в HAST
.use(rehypeStringify); // генерация HTML
const markdown = '# Заголовок\n\nТекст параграфа';
const html = processor.processSync(markdown).toString();
Этот пример демонстрирует цепочку обработки: Markdown → AST → HTML.
Часто требуется объединять возможности обеих библиотек для комплексной обработки контента. Remark используется для работы с исходным Markdown, а Rehype — для манипуляций HTML после конверсии. Связка выглядит следующим образом:
remark-rehype.Такой подход позволяет создавать сложные преобразования, например, автогенерацию ссылок, добавление классов CSS к элементам или обогащение кода подсветкой синтаксиса.
Remark и Rehype являются стандартом де-факто для современных JavaScript-проектов, где требуется надежная и гибкая обработка Markdown и HTML. Их архитектура позволяет создавать кастомные пайплайны обработки контента, сохраняя при этом простоту подключения новых функциональностей через плагины.