{
  "url": "https://unifast.dev/ru/docs/introduction/key-concepts/",
  "locale": "ru",
  "title": "Ключевые концепции",
  "description": "Изучите многоступенчатый конвейер компиляции unifast, встроенные проходы и принципы работы преобразований MdAst и HAst.",
  "section": "introduction",
  "body": "unifast компилирует Markdown через многоступенчатый конвейер. Понимание этих этапов помогает настраивать компилятор и выбирать подходящие плагины.\n\n### Конвейер компиляции\n\n```\nВходной текст\n  → Парсинг (Markdown или MDX)\n  → IR0: MdAst (структура Markdown)\n  → Нормализация + встроенные проходы MdAst\n  → Понижение в IR1: HAst (структура HTML)\n  → Проходы HAst (sanitize, highlight и т. д.)\n  → Эмиссия (строка HTML)\n```\n\nКаждая стадия преобразует документ через промежуточное представление (IR).\n\n### Промежуточные представления\n\n| IR | Название | Назначение |\n|----|------|---------|\n| **IR0** | MdAst | Структура Markdown — заголовки, абзацы, списки, блоки кода |\n| **IR1** | HAst | Структура HTML — элементы, атрибуты, текстовые узлы |\n| **IR2** | JsAst | Только для MDX — ESM-импорты и JSX-выражения |\n\nПарсер создаёт **MdAst**, который затем понижается в **HAst** для эмиссии HTML. Входные данные MDX дополнительно порождают узлы **JsAst** для вывода JavaScript.\n\n### Проходы\n\nПроходы — это преобразования, применяемые к AST на определённых фазах. В unifast есть встроенные проходы для типичных задач:\n\n**Проходы MdAst** (до понижения в HTML):\n\n- **Normalize** — согласованная структура для последующих проходов\n- **Slug** — генерация ID заголовков из текстового содержимого\n- **TOC** — извлечение оглавления из заголовков\n- **Definition Resolution** — разрешение ссылочных определений для ссылок и изображений\n\n**Проходы HAst** (после понижения в HTML):\n\n- **Sanitize** — удаление запрещённых HTML-элементов и атрибутов\n- **Highlight** — применение подсветки синтаксиса к блокам кода\n- **Cleanup** — удаление ненужных узлов и пробелов\n\nПроходы упорядочены по фазам — вам не нужно беспокоиться о порядке выполнения.\n\n### Плагины\n\nПлагины — это TypeScript-пакеты, которые настраивают встроенные проходы. Они не исполняют произвольный JavaScript во время компиляции — вместо этого они задают параметры, управляющие тем, как ядро на Rust обрабатывает документ.\n\n```ts\nimport { compile, gfm, sanitize } from \"@unifast/node\";\n\nconst result = compile(source, {\n  plugins: [gfm(), sanitize()],\n});\n```\n\nКаждый плагин возвращает объект конфигурации, который сливается с параметрами компиляции до запуска ядра на Rust. Это сохраняет весь горячий путь исключительно в нативном коде.\n\n### Форматы вывода\n\nКомпилятор поддерживает несколько форматов вывода через параметр `outputKind`:\n\n| Формат | Описание |\n|--------|-------------|\n| `\"html\"` | Строка HTML (по умолчанию) |\n| `\"hast\"` | HAst JSON — HTML AST для пользовательского рендеринга |\n| `\"mdast\"` | MdAst JSON — Markdown AST для анализа |\n| `\"mdx-js\"` | Строка JavaScript-модуля (только MDX) |\n\n### Диагностика\n\nКомпилятор сообщает о проблемах через массив `diagnostics` в результате. Каждая диагностика содержит уровень серьёзности, сообщение и необязательный диапазон в исходном коде для точного указания местоположения ошибки.\n\n```ts\nconst result = compile(source);\n\nfor (const d of result.diagnostics) {\n  console.warn(`[${d.level}] ${d.message}`);\n}\n```",
  "alternates": [
    {
      "locale": "en",
      "url": "https://unifast.dev/docs/introduction/key-concepts/",
      "api": "https://unifast.dev//api/docs/introduction/key-concepts.json"
    },
    {
      "locale": "ja",
      "url": "https://unifast.dev/ja/docs/introduction/key-concepts/",
      "api": "https://unifast.dev//api/ja/docs/introduction/key-concepts.json"
    },
    {
      "locale": "zh-CN",
      "url": "https://unifast.dev/zh-CN/docs/introduction/key-concepts/",
      "api": "https://unifast.dev//api/zh-CN/docs/introduction/key-concepts.json"
    },
    {
      "locale": "zh-TW",
      "url": "https://unifast.dev/zh-TW/docs/introduction/key-concepts/",
      "api": "https://unifast.dev//api/zh-TW/docs/introduction/key-concepts.json"
    },
    {
      "locale": "ko",
      "url": "https://unifast.dev/ko/docs/introduction/key-concepts/",
      "api": "https://unifast.dev//api/ko/docs/introduction/key-concepts.json"
    },
    {
      "locale": "fr",
      "url": "https://unifast.dev/fr/docs/introduction/key-concepts/",
      "api": "https://unifast.dev//api/fr/docs/introduction/key-concepts.json"
    },
    {
      "locale": "it",
      "url": "https://unifast.dev/it/docs/introduction/key-concepts/",
      "api": "https://unifast.dev//api/it/docs/introduction/key-concepts.json"
    },
    {
      "locale": "es",
      "url": "https://unifast.dev/es/docs/introduction/key-concepts/",
      "api": "https://unifast.dev//api/es/docs/introduction/key-concepts.json"
    },
    {
      "locale": "pt-BR",
      "url": "https://unifast.dev/pt-BR/docs/introduction/key-concepts/",
      "api": "https://unifast.dev//api/pt-BR/docs/introduction/key-concepts.json"
    },
    {
      "locale": "de",
      "url": "https://unifast.dev/de/docs/introduction/key-concepts/",
      "api": "https://unifast.dev//api/de/docs/introduction/key-concepts.json"
    },
    {
      "locale": "ru",
      "url": "https://unifast.dev/ru/docs/introduction/key-concepts/",
      "api": "https://unifast.dev//api/ru/docs/introduction/key-concepts.json"
    },
    {
      "locale": "hi",
      "url": "https://unifast.dev/hi/docs/introduction/key-concepts/",
      "api": "https://unifast.dev//api/hi/docs/introduction/key-concepts.json"
    },
    {
      "locale": "id",
      "url": "https://unifast.dev/id/docs/introduction/key-concepts/",
      "api": "https://unifast.dev//api/id/docs/introduction/key-concepts.json"
    },
    {
      "locale": "tr",
      "url": "https://unifast.dev/tr/docs/introduction/key-concepts/",
      "api": "https://unifast.dev//api/tr/docs/introduction/key-concepts.json"
    },
    {
      "locale": "vi",
      "url": "https://unifast.dev/vi/docs/introduction/key-concepts/",
      "api": "https://unifast.dev//api/vi/docs/introduction/key-concepts.json"
    }
  ]
}
