В экосистеме unified, к которой относятся библиотеки Remark и Rehype, ошибки обрабатываются строго и систематически. Ошибки могут возникать на разных этапах обработки данных: при разборе исходного текста, трансформациях AST (Abstract Syntax Tree), генерации выходного контента или при работе с плагинами. Важно понимать классификацию этих ошибок, их свойства и способы безопасной обработки.
ParseError)Описание: Парсер отвечает за преобразование исходного текста (Markdown, HTML) в AST. Ошибки парсинга возникают при нарушении синтаксиса исходного документа.
Признаки:
Свойства объекта ошибки:
message — описание ошибки.line, column — позиция в исходном
документе, где возникла ошибка.reason — краткое объяснение причины.source — имя парсера, который вызвал ошибку.Пример обработки:
import { unified } from 'unified';
import remarkParse from 'remark-parse';
try {
const tree = unified()
.use(remarkParse)
.parse('Некорректный [синтаксис');
} catch (error) {
console.error(`Ошибка парсинга на строке ${error.line}, колонка ${error.column}: ${error.reason}`);
}
TransformerError)Описание: После того как исходный документ разобран, он превращается в AST. Трансформеры (плагины) могут изменять структуру дерева. Ошибки трансформации возникают, если плагин получает неожиданный формат узла или не может корректно применить изменения.
Типичные ситуации:
Свойства объекта ошибки:
node — узел AST, на котором произошла ошибка.plugin — имя плагина, вызвавшего ошибку.reason — описание причины ошибки.Пример обработки:
import remark from 'remark';
import remarkHtml from 'remark-html';
const processor = remark().use(remarkHtml);
processor.process('Текст с нестандартным узлом')
.catch(error => {
console.error(`Ошибка плагина ${error.plugin}: ${error.reason}`);
});
CompilerError)Описание: На этапе генерации выходного формата (HTML, Markdown, другие форматы) могут возникнуть ошибки, если AST содержит недопустимые узлы или структура дерева не поддерживается генератором.
Примеры причин:
Свойства объекта ошибки:
node — узел, вызвавший ошибку генерации.reason — описание проблемы.filePath — путь исходного файла, если он известен.PluginError)Описание: Плагины являются самостоятельными модулями с собственными проверками и ограничениями. Они могут выбрасывать ошибки, если:
Свойства объекта ошибки:
plugin — имя плагина.options — переданные опции.reason — описание ошибки.node — опционально, узел AST, на котором произошла
ошибка.Рекомендации по работе с
PluginError:
try/catch.VFileMessage и VFileError)Описание: Библиотека vfile, используемая в unified, добавляет стандартизированную систему сообщений об ошибках и предупреждений. Она позволяет:
Основные поля VFileMessage:
message — текст ошибки.reason — причина.position — объект с start и
end (line, column, offset).source — имя плагина или парсера.Особенности:
VFileMessage может быть предупреждением
(fatal: false) или критической ошибкой
(fatal: true).fatal) — прерывают
обработку, требуют немедленного исправления.non-fatal) —
информируют о потенциальных проблемах, не мешают генерации
результата.Использование строгой типизации ошибок и систематическая обработка позволяет:
try/catch.VFile для хранения всех сообщений.