Das docmd 0.7.9-Release führt inkrementelle Builds für eine nahezu verzögerungsfreie Entwicklung, das OpenAPI-Plugin und massive Performance-Optimierungen über eine parallele Plugin-Architektur ein. Es behebt zudem kritische Speicherlecks bei Konfigurationsdateien, verbessert die Genauigkeit des Git-Verlaufs in Monorepos, fügt Mitwirkenden-Avatare hinzu und implementiert einen smarten Sticky-Footer.

✨ Highlights

OpenAPI-Plugin

Das neue OpenAPI-Plugin rendert API-Referenzdokumentation direkt aus OpenAPI 3.x Spezifikationsdateien in Markdown-Seiten — zur Build-Zeit, ohne clientseitiges JavaScript und ohne Drittanbieter-UI-Bibliotheken (kein Swagger UI, kein Redoc).

Fügen Sie eine Spezifikationseinbettung in jedes Markdown ein:

```openapi
./api/openapi.json
```

Das Plugin liest die Spezifikation zur Build-Zeit und gibt statisches HTML aus: farbkodierte Methoden-Badges, Parameter-Tabellen, Request/Response-Schema-Tabellen und Status-Code-Beschreibungen. Unterstützt JSON- und YAML-Spezifikationen, löst interne $ref-Referenzen auf und verarbeitet oneOf/anyOf-Union-Typen.

Neu in 0.7.9: Option download: true hinzugefügt, um direkte Links zur rohen Spezifikationsdatei bereitzustellen — ideal für KI-Modelle (wie GPT-4 oder Claude), um Ihre API-Dokumentation programmatisch zu nutzen.

docmd add openapi

Weitere Details finden Sie in der OpenAPI-Plugin-Dokumentation.

Inkrementelle Builds (Instant Dev-Modus)

Der Entwicklungs-Server bietet nun ein System für gezielte Rebuilds. Zuvor löste jede Änderung an einer Markdown-Datei einen vollständigen Build der Website aus. Bei Websites mit hunderten Seiten konnte dies 10+ Sekunden dauern.

In 0.7.9 rendert docmd dev nur noch die spezifische Datei neu, die Sie geändert haben. Seiten-Reloads sind nun sofort (<1s) verfügbar, selbst bei riesigen Projekten. Das System erhält dabei alle Navigations-, Versions- und Asset-Kontexte korrekt aufrecht.

Parallele Plugin-Architektur (Multi-Threaded Performance)

Die Build-Engine wurde grundlegend überarbeitet, um die parallele Ausführung von Plugins zu unterstützen. Zuvor liefen Plugin-Hooks wie onBeforeRender sequenziell für jede Seite ab. Für Plugins, die I/O-Operationen durchführen oder Kindprozesse starten (wie das Git-Plugin), war dies ein erheblicher Flaschenhals.

In 0.7.9 verarbeitet die Engine das Seiten-Rendering nun in parallelen Batches. In Kombination mit dem neuen asynchronen Git-Plugin, das nicht-blockierende execFile-Aufrufe verwendet, sind die Build-Zeiten für große Websites mit hunderten von Seiten bis zu 3x schneller.

Wichtige Verbesserungen:

  • Batched Rendering: Phase 3 des Generators läuft jetzt in parallelen Batches von 64 Seiten.
  • Asynchrone Hooks: Alle Plugin-Hooks können jetzt async sein, und die Engine wartet parallel auf deren Abschluss.
  • Git-Plugin Überarbeitung: Synchrones execSync wurde durch asynchrones, nicht-blockierendes Prozess-Spawning ersetzt.

📝 Vollständiges Änderungsprotokoll

Fehlerbehebungen

  • Git-Plugin — Datei-spezifischer Commit-Verlauf in Multi-Projekt-Builds: Der Singleton-Zustand auf Modulebene wurde zu einem Pro-Verzeichnis-Cache behoben, sodass jede Datei immer in ihrem eigenen Repository-Kontext abgefragt wird. Korrekt in Einzel-Projekt-, Multi-Projekt-, versionierten und mehrsprachigen Konfigurationen.

  • Git-Plugin — SPA-Hydration: Behoben, um auf das docmd:page-mounted-Ereignis zu hören, sodass Zeitstempel nach SPA-Navigation korrekt formatiert werden.

Neue Funktionen

  • OpenAPI-Plugin (@docmd/plugin-openapi): Build-Zeit OpenAPI 3.x Spezifikations-Renderer, ohne clientseitige Abhängigkeiten.

  • Plugin-API — onBeforeRender-Hook: Wird vor dem Template-Rendering aufgerufen, empfängt den vollständigen PageContext mit sourcePath.

  • Plugin-API — PageContext-Typ: Formal typisiert und aus @docmd/api exportiert.

  • Git-Plugin — Mitwirkenden-Avatare: Commit-Verlauf-Tooltip zeigt jetzt Gravatar-Bilder an.

  • Git-Plugin — Konfigurierbares Datumsformat: Neue dateFormat-Option: relative (Standard), iso oder locale-aware.

    plugins: { git: { dateFormat: 'locale-aware' } }
    

Verbesserungen

  • Parallele Build-Pipeline: Der Generator parallelisiert nun die Phase des Template-Renderings. Plugins können nun zeitaufwändige Operationen (wie Git-Aufrufe oder OpenAPI-Parsing) gleichzeitig auf mehreren CPU-Kernen über Kindprozesse ausführen.

  • Asynchrones Git-Plugin: Das Git-Plugin ist nun vollständig asynchron. Es nutzt nicht-blockierende Kindprozesse und Pfad-Normalisierung, um hohe Performance und Genauigkeit auch in komplexen Monorepo-Strukturen zu gewährleisten.

  • Inkrementelles Build-System: Der Dev-Server führt nun gezielte Teil-Builds durch. Das Bearbeiten einer Datei rendert nur diese Datei neu und reduziert die Reload-Zeiten von 10s+ auf unter 300ms.

  • OpenAPI-Plugin — Download-Spezifikation: Neue download-Option bietet einen Link zur rohen JSON/YAML-Spezifikation im Seiten-Header für KI-Zugänglichkeit.

  • UI — Smarter Sticky-Footer: Der Footer ist jetzt immer mit Flex-Layout am unteren Rand des Viewports verankert. (Behoben).

Intern

  • Bearbeitungslink-Pfadauflösung: Wird vom Git-Repository-Root berechnet, nicht von config.src or process.cwd().

  • Config-Loader — Härtung: Obligatorische Bereinigung für verwaiste temporäre Konfigurationsdateien (docmd.config-*.js) implementiert und try-finally-Sicherheit hinzugefügt, um Lecks bei Syntaxfehlern zu verhindern.