{
  "url": "https://unifast.dev/fr/docs/introduction/key-concepts/",
  "locale": "fr",
  "title": "Concepts clés",
  "description": "Comprenez le pipeline de compilation multi-étapes d'unifast, ses passes intégrées, ainsi que le fonctionnement des transformations MdAst et HAst.",
  "section": "introduction",
  "body": "unifast compile le Markdown au travers d'un pipeline multi-étapes. Comprendre ces étapes vous aide à configurer le compilateur et à choisir les bons plugins.\n\n### Pipeline de compilation\n\n```\nInput text\n  → Parse (Markdown or MDX)\n  → IR0: MdAst (Markdown structure)\n  → Normalize + Built-in MdAst passes\n  → Lower to IR1: HAst (HTML structure)\n  → HAst passes (sanitize, highlight, etc.)\n  → Emit (HTML string)\n```\n\nChaque étape transforme le document via une représentation intermédiaire (IR).\n\n### Représentations intermédiaires\n\n| IR | Nom | Rôle |\n|----|------|---------|\n| **IR0** | MdAst | Structure Markdown - titres, paragraphes, listes, blocs de code |\n| **IR1** | HAst | Structure HTML - éléments, attributs, nœuds texte |\n| **IR2** | JsAst | MDX uniquement - imports ESM et expressions JSX |\n\nLe parser produit du **MdAst**, qui est ensuite abaissé en **HAst** pour l'émission HTML. Les entrées MDX produisent en plus des nœuds **JsAst** pour la sortie JavaScript.\n\n### Passes\n\nLes passes sont des transformations appliquées à l'AST à des phases précises. unifast dispose de passes intégrées pour les tâches courantes :\n\n**Passes MdAst** (avant l'abaissement vers HTML) :\n\n- **Normalize** - Structure cohérente pour les passes suivantes\n- **Slug** - Génération d'identifiants de titres à partir du contenu textuel\n- **TOC** - Extraction de la table des matières à partir des titres\n- **Definition Resolution** - Résolution des définitions de références de liens et d'images\n\n**Passes HAst** (après l'abaissement vers HTML) :\n\n- **Sanitize** - Suppression des éléments et attributs HTML non autorisés\n- **Highlight** - Application de la coloration syntaxique aux blocs de code\n- **Cleanup** - Suppression des nœuds et espaces superflus\n\nLes passes sont ordonnées par phase - vous n'avez pas à vous soucier de l'ordre d'exécution.\n\n### Plugins\n\nLes plugins sont des paquets TypeScript qui configurent les passes intégrées. Ils n'exécutent pas de JavaScript arbitraire pendant la compilation - à la place, ils définissent des options qui contrôlent la façon dont le cœur Rust traite votre document.\n\n```ts\nimport { compile, gfm, sanitize } from \"@unifast/node\";\n\nconst result = compile(source, {\n  plugins: [gfm(), sanitize()],\n});\n```\n\nChaque plugin renvoie un objet de configuration qui est fusionné dans les options de compilation avant l'exécution du cœur Rust. Cela permet de garder entièrement le chemin critique en code natif.\n\n### Formats de sortie\n\nLe compilateur prend en charge plusieurs formats de sortie via l'option `outputKind` :\n\n| Format | Description |\n|--------|-------------|\n| `\"html\"` | Chaîne HTML (par défaut) |\n| `\"hast\"` | HAst JSON - l'AST HTML pour un rendu personnalisé |\n| `\"mdast\"` | MdAst JSON - l'AST Markdown pour l'analyse |\n| `\"mdx-js\"` | Chaîne de module JavaScript (MDX uniquement) |\n\n### Diagnostics\n\nLe compilateur signale les problèmes via le tableau `diagnostics` présent dans le résultat. Chaque diagnostic comporte un niveau de gravité, un message et, éventuellement, une étendue source permettant de localiser précisément l'erreur.\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"
    }
  ]
}
