---
title: Architecture du Moteur Central
description: Étude détaillée des modules TypeScript clés de VertiWiki : Router, Pipeline, MarkdownParser et Config.
tags: [vertiwiki, coeur, routeur, parseur, pipeline, config, typescript, francais]
---

# Architecture du Moteur Central

> For the complete documentation index and agent navigation, see [llms.txt](/llms.txt).

Le sous-système central de VertiWiki se situe dans `src/core/`. Il ne contient aucun code d'affichage d'interface graphique, se consacrant exclusivement à la normalisation des chemins, au chargement des ressources, aux middlewares, à l'analyse Markdown et à la sécurité.

---

## 🧭 1. Le Routeur (`src/core/router.ts`)

Le routeur gère les interactions de navigation, le décodage du hash d'URL, la normalisation des chemins et le changement de langue.

```typescript
export interface RouteInfo {
  filePath: string;
  anchor: string;
  isMarkdown: boolean;
  locale?: LocaleConfig;
}
```

### Missions Clés :
1. **Résolution Déterministe** :
   - `normalizePath(path: string): string` : Remplace les barres obliques inverses, supprime les slashes redondants et résout les segments `.` et `..`.
   - `getBaseDirectory(): string` : Détecte si l'instance tourne à la racine (`/`) ou dans un sous-dossier (`/docs/`), même sans slash final.
   - `resolveResourceUrl(relativePath: string): string` : Résout les requêtes de fichiers Markdown et de configuration par rapport au répertoire de base effectif.
2. **Routage Multilingue** :
   - Compare le premier segment d'URL avec les langues configurées dans `config.json`.
   - Oriente vers `ro/` ou `fr/` en présence de préfixe, et sert la langue par défaut sinon.
3. **Paramètres d'URL Rétrocompatibles** :
   - Intercepte `?page=`, `?p=` et `?doc=`, les redirigeant automatiquement vers des routes hash modernes (`#/chemin.md`).

---

## ⚙️ 2. Configuration & Démarrage (`src/core/config.ts`)

La configuration est régie par `config.json`. La fonction `loadConfig()` charge, valide et normalise les paramètres dans un objet typé `VertiWikiConfig` :

- **Résolution des Thèmes** : Télécharge de façon asynchrone les presets JSON définis dans `customThemes`.
- **Options de Marque** : Gère `brandDisplay` (`both`, `logo`, `title`), les logos et le favicon.
- **Valeurs par Défaut Défensives** : Préserve le fonctionnement en cas de fichier manquant ou invalide.

---

## 🔌 3. Le Pipeline de Middlewares (`src/core/pipeline.ts`)

VertiWiki s'articule autour d'un pipeline en trois temps, permettant aux extensions d'intervenir à chaque instant du traitement :

```typescript
export interface VertiWikiPlugin {
  name: string;
  beforeParse?: BeforeParseHook;
  afterParse?: AfterParseHook;
  afterRender?: AfterRenderHook;
}
```

### Étapes du Cycle :
1. **`beforeParse(markdown, context)`** : Agit sur le Markdown brut avant le compilateur `marked`. Utilisé par les wikilinks, callouts et onglets.
2. **`afterParse(html, context)`** : Modifie la chaîne HTML assainie avant son injection DOM.
3. **`afterRender(context)`** : Exécuté une fois le contenu monté dans `#verti-app`. Invoque Prism, Mermaid, KaTeX et MiniSearch.

---

## 📝 4. Analyseur Markdown & Assainisseur DOMPurify (`src/core/parser.ts`)

Convertit le Markdown en HTML sécurisé :

### Extraction du Frontmatter YAML
`parseFrontmatter(markdown)` sépare les métadonnées délimitées par `---` :
```yaml
---
title: Titre de la page
description: Description
tags: [tag1, tag2]
---
```

### Fermeture Automatique des Blocs de Code
`autoCloseFences(markdown)` protège l'affichage contre les balises de code non fermées (```` ``` ```` ou `~~~`).

### Sécurité Totale Zéro-XSS
Chaque fragment HTML passe par `DOMPurify.sanitize()` :
- Neutralisation des scripts malveillants.
- Autorisation contrôlée des balises SVG Mermaid (`<foreignObject>`, `<style>`).
- Préservation des balises MathML pour KaTeX.

---

## 🌲 5. Arbre d'Indexation Statique (Bot Crawl Tree) (`src/core/crawl-tree.ts`)

Pour éliminer la pénalité de non-indexation des SPA dans les moteurs de recherche, VertiWiki intègre :

- Un élément sémantique `<nav class="verti-crawl-tree">` contenant de vrais liens `<a href="...">` pour chaque document de `navigation.md`.
- Les robots découvrent immédiatement l'intégralité du site sans exécuter de JavaScript.

---

## 🔗 Prochaines Étapes

- Examinez la mise en page dans [Interface & Moteur de Thèmes](ui-and-theming.md).
- Découvrez les extensions dans [Plugins & Extensions](plugins-and-extensions.md).
- Consultez les signatures dans le [Catalogue API TypeScript](../reference/api.md).
