# MarkdownRender (CLI `md-render`)

`MarkdownRender-nodejs` est un **outil en ligne de commande** indépendant de l'application
Tauri. Il convertit du Markdown en HTML et propose une prévisualisation live dans le
navigateur. Il est utile pour générer rapidement un `.html` ou prévisualiser un document sans
lancer Pena.

> C'est un utilitaire **annexe** ; le produit principal reste
> [Pena-tauri](../2-technique/2.1-Architecture.md).

## Installation

Prérequis : **Node.js** (avec `npm`).

Depuis `MarkdownRender-nodejs/` :
```bash
npm install
npm link   # rend la commande `md-render` disponible globalement
```

## Utilisation

```bash
# Conversion simple (génère un fichier .html à côté de l'entrée)
md-render README.md

# Conversion vers un fichier de sortie précis
md-render README.md -o documentation.html

# Mode preview — ouvre le navigateur sans créer de fichier
md-render README.md --preview

# Preview d'un dossier entier (avec barre latérale)
md-render mon-wiki/ --preview

# Mode watch — sert http://localhost:3000 avec rechargement automatique
md-render README.md --watch

# Sur un port personnalisé
md-render README.md --watch --port 8080
```

## Options

| Option | Alias | Description | Défaut |
|---|---|---|---|
| `--watch` | `-w` | Démarre un serveur avec rechargement automatique | — |
| `--preview` | `-v` | Ouvre dans le navigateur sans créer de fichier | — |
| `--port <port>` | `-p` | Port du serveur (watch ou preview) | `3000` |
| `--output <fichier>` | `-o` | Fichier HTML de sortie | `<entrée>.html` |
| `--help` | `-h` | Affiche l'aide | — |

## Modes

### Mode preview (`--preview`)
Le Markdown est converti **en mémoire** et affiché directement dans le navigateur — aucun
fichier HTML n'est écrit sur le disque. Le navigateur s'ouvre automatiquement.
`Ctrl+C` arrête le serveur. Fonctionne sur un fichier unique ou un dossier entier.

### Mode watch (`--watch`)
Un serveur HTTP local est démarré. À chaque sauvegarde du fichier, la page se recharge
automatiquement via **Server-Sent Events (SSE)**. Les assets relatifs (images…) placés dans
le même répertoire que le `.md` sont servis automatiquement.

## Fonctionnalités

- 🎨 Coloration syntaxique du code ([highlight.js](https://highlightjs.org/))
- 📄 Rendu de style « GitHub-like »
- 👁 Prévisualisation instantanée sans fichier (`--preview`)
- 🔄 Rechargement automatique en mode watch (SSE)
- 🖼 Serveur de fichiers statiques pour les images locales
- ⚡ Débounce intelligent pour éviter les rechargements en rafale
- 🛡 Protection contre le path traversal

## Dépendances principales

| Paquet | Rôle |
|---|---|
| [`marked`](https://marked.js.org/) | Conversion Markdown → HTML |
| `marked-highlight` + [`highlight.js`](https://highlightjs.org/) | Coloration syntaxique |
| [`chokidar`](https://github.com/paulmillr/chokidar) | Surveillance de fichiers (mode watch) |
| [`minimist`](https://github.com/minimistjs/minimist) | Analyse des arguments CLI |

## Différences avec Pena-tauri

| | `md-render` (CLI) | Pena-tauri (app) |
|---|---|---|
| Plateforme | Terminal + navigateur | Application de bureau |
| Rendu Markdown | `marked` (JS) | `comrak` (Rust) |
| Coloration | highlight.js | syntect |
| Live-reload | ✅ (SSE) | implémenté mais non branché |
| Thèmes / CSS éditable | — | ✅ |
| Sortie fichier HTML | ✅ | — |

## Voir aussi

- [Vue d'ensemble de Pena](../1-fonctionnel/1.1-Vue-d-ensemble.md)
- [README de la documentation](../README.md)
