Das docmd 0.7.1 Release führt eine wesentliche architektonische Verbesserung ein — das Plugin-System wurde in ein dediziertes @docmd/api-Paket ausgelagert. Dies bringt Plugin-Deskriptoren, Absturz-Isolation und die Durchsetzung von Fähigkeiten (Capability Enforcement) in das Ökosystem.

✨ Highlights

📦 @docmd/api — Dediziertes Plugin-Paket

Die Plugin-API — bestehend aus Hook-Registrierung, WebSocket-RPC-Dispatching und Werkzeugen zur Quelltextbearbeitung — befindet sich nun in einem eigenen Paket: @docmd/api.

Dies entkoppelt das Plugin-Ökosystem von der eigentlichen Build-Engine. Plugin-Entwickler können nun gegen einen leichtgewichtigen API-Vertrag entwickeln, ohne das gesamte @docmd/core-Paket einbinden zu müssen.

Abwärtskompatibel: Alle Exporte aus @docmd/api werden von @docmd/core re-exportiert. Bestehender Code funktioniert weiterhin ohne Änderungen.

🛡️ Plugin-Deskriptoren

Plugins können nun einen plugin-Deskriptor exportieren, der ihren Namen, ihre Version und ihre Fähigkeiten deklariert. Die Engine validiert diese Deskriptoren beim Laden.

Mibrations-Hinweis: Deskriptoren sind in 0.7.x optional. Ab Version 0.8.0 werden sie zwingend erforderlich sein.

🔒 Plugin-Isolation

Jeder Hook-Aufruf ist nun in eine Try/Catch-Grenze gehüllt. Ein fehlerhaftes Plugin kann den Build-Prozess nicht mehr zum Absturz bringen oder andere Plugins beeinträchtigen. Fehler werden gesammelt und am Ende des Builds in einer Zusammenfassung angezeigt.

🔑 Durchsetzung von Fähigkeiten (Capability Enforcement)

Plugins, die Fähigkeiten deklarieren, können sich nur noch für Hooks registrieren, die zu diesen Deklarationen passen. Wenn ein Plugin einen Hook exportiert, den es nicht deklariert hat, wird dieser von der Engine mit einer Warnung übersprungen.

📝 Vollständiger Changelog

📦 Architektur

  • Auslagerung von loadPlugins, createActionDispatcher, createSourceTools und allen Plugin/RPC-Typen in das Paket @docmd/api.
  • Bereinigung von totem Code in @docmd/core nach der Migration.

🔌 Plugin-System

  • Einführung des Plugin-Deskriptors (Export von plugin) mit Name, Version und Fähigkeiten.
  • Strikte Validierung für @docmd/plugin-*-Pakete.
  • Isolation: Sicherheits-Wrapper (safeCall) für alle Hooks.
  • Erweiterte Lebenszyklus-Hooks: Einführung von onConfigResolved, onDevServerReady, onBeforeParse, onAfterParse und onPageReady.
  • Zusammenfassung von Plugin-Fehlern am Ende des Builds.

🐛 Fehlerbehebungen (Bug Fixes)

  • Korrektur der Anzeige von Rohschlüsseln auf der 404-Seite bei fehlenden Übersetzungen.
  • Behebung eines Problems, bei dem clientseitiger i18n-Code im stringMode fälschlicherweise in noStyle-Seiten eingefügt wurde.
  • Fix der Plugin-Auflösung in pnpm-Workspaces.

⚠️ Breaking Changes

Plugin-API Import-Pfad

Der offizielle Ort für die Plugin-API ist nun @docmd/api. Plugin-Entwickler werden gebeten, ihre Importe von @docmd/core auf @docmd/api zu aktualisieren.

Threads-Plugin Peer-Dependency

Das Paket @docmd/plugin-threads hängt nun von @docmd/api ab (Peer-Dependency) statt von @docmd/core.

Migrationsleitfaden

Für Endbenutzer: Keine Änderungen erforderlich. npm install docmd@latest genügt.

Für Plugin-Entwickler:

  1. Fügen Sie Ihrem Standard-Export einen Plugin-Deskriptor hinzu.
  2. Aktualisieren Sie Ihre Importe von @docmd/core zu @docmd/api.
  3. Aktualisieren Sie die Peer-Dependencies in Ihrer package.json.