====== Pack-Struktur ====== Struktur und Regeln für WvdS Control/Component Packs - sowohl intern als auch von Drittanbietern. ===== Übersicht ===== Packs sind das Verteilungsformat für: * **Controls** - UI-Elemente (Button, TextBox, DateEdit, ...) * **Components** - Nicht-visuelle Komponenten (Timer, DataSource, ...) Packs ermöglichen es, Controls zu installieren **ohne den WvdS-Core zu modifizieren**. ===== Verzeichnisstruktur ===== ==== Interne WvdS Packs ==== **Pfad:** ''~/packs/'' ~/packs/ ├── controls/ │ ├── button/ │ │ └── pack.wvds.json │ ├── textbox/ │ │ └── pack.wvds.json │ └── dateedit/ │ └── pack.wvds.json └── components/ ├── timer/ │ └── pack.wvds.json └── datasource/ └── pack.wvds.json ==== Drittanbieter Packs ==== **Pfad:** ''~/vendor-packs/'' ~/vendor-packs/ ├── index.json # Installations-Index ├── oss/ # Open-Source Packs │ └── {vendor}/ │ └── {pack}/ │ ├── pack.wvds.json # Pack-Manifest (PFLICHT) │ ├── src/ # Pascal-Units │ │ ├── Model.pas │ │ └── Renderers/ │ │ ├── TUI.pas │ │ ├── Desktop.pas │ │ └── Web.pas │ ├── vsix/ # Design-Time Ressourcen │ ├── docs/ # API-Dokumentation │ └── license/ # OSS-Lizenz │ └── LICENSE.txt └── proprietary/ # Proprietäre Packs └── {vendor}/ └── {pack}/ ├── pack.wvds.json ├── src/ oder bin/ # Quellcode oder Binaries ├── vsix/ ├── docs/ ├── license/ │ ├── LICENSE.txt │ └── EULA.txt └── integrity/ # Integritätsprüfung ├── SHA256SUMS └── SIGNATURE.asc # Optional ===== Pack-Manifest ===== Jedes Pack benötigt eine ''pack.wvds.json'' Datei: { "id": "dateedit", "vendor": "wvds", "version": "0.1.0", "license": "MIT", "description": "Datums-Eingabefeld mit Kalender-Popup", "xml": { "namespace": "wvds", "tag": "DateEdit" }, "model": { "unit": "WvdS.UI.Controls.Editors.DateEdit", "class": "TWvdSDateEdit" }, "renderers": { "tui": { "unit": "WvdS.UI.TUI.Renderers.DateEdit", "class": "TWvdSTUIDateEditRenderer" }, "desktop": { "unit": "WvdS.UI.Desktop.Renderers.DateEdit", "class": "TWvdSDesktopDateEditRenderer" }, "web": { "unit": "WvdS.UI.Web.Renderers.DateEdit", "class": "TWvdSWebDateEditRenderer" } }, "targetCaps": { "requires": ["keyboard"], "optional": ["mouse", "popup", "touch"] }, "dependencies": [], "compatibility": { "wvds": ">=0.1.0" } } ==== Manifest-Felder ==== ^ Feld ^ Pflicht ^ Beschreibung ^ | ''id'' | Ja | Eindeutiger Pack-Identifier | | ''vendor'' | Ja | Vendor-ID (z.B. "wvds", "dx", "ms") | | ''version'' | Ja | Semantic Version | | ''license'' | Ja | Lizenz-Identifier (SPDX) | | ''xml.namespace'' | Ja | PXAML-Namespace | | ''xml.tag'' | Ja | PXAML-Tag-Name | | ''model.unit'' | Ja | Pascal-Unit für Model | | ''model.class'' | Ja | Klassenname des Models | | ''renderers'' | Ja | Renderer pro Target | | ''targetCaps'' | Nein | Erforderliche/optionale Capabilities | | ''dependencies'' | Nein | Abhängigkeiten zu anderen Packs | | ''compatibility'' | Nein | WvdS-Versionsanforderung | ===== Installations-Index ===== **Pfad:** ''~/vendor-packs/index.json'' { "version": "1.0", "installed": [ { "vendor": "dx", "pack": "dateedit-pro", "version": "2.1.0", "license": "proprietary", "location": "proprietary/dx/dateedit-pro", "enabledTargets": ["desktop", "web"], "installedAt": "2026-01-13T10:30:00Z", "integrity": { "sha256": "abc123..." } }, { "vendor": "jw", "pack": "charts", "version": "1.0.0", "license": "oss", "location": "oss/jw/charts", "enabledTargets": ["desktop", "web"], "installedAt": "2026-01-12T14:00:00Z" } ] } ===== CLI-Befehle ===== ==== Pack installieren ==== wvds-build pack install \ --from /path/to/packdir \ --to ~/vendor-packs \ --enable tui,desktop,web ==== Pack deinstallieren ==== wvds-build pack uninstall \ --vendor dx \ --pack dateedit-pro ==== Installierte Packs auflisten ==== wvds-build pack list Ausgabe: Installed Packs: dx/dateedit-pro 2.1.0 [desktop, web] proprietary jw/charts 1.0.0 [desktop, web] oss ===== Namenskonventionen ===== Drittanbieter-Packs dürfen NICHT das ''TWvdS*'' Präfix verwenden! ^ Vendor ^ Klassen-Präfix ^ Beispiel ^ | WvdS (intern) | ''TWvdS*'' | ''TWvdSDateEdit'' | | DevExpress | ''TDx*'' | ''TDxDateEdit'' | | Microsoft | ''TMs*'' | ''TMsFluentButton'' | | JWorks | ''TJw*'' | ''TJwChartView'' | ===== Integritätsprüfung ===== Proprietäre Packs müssen Integritätsprüfung unterstützen: **SHA256SUMS:** a1b2c3d4... src/Model.pas e5f6g7h8... src/Renderers/Desktop.pas i9j0k1l2... src/Renderers/Web.pas **Optionale Signatur:** # Signatur erstellen gpg --armor --detach-sign SHA256SUMS # Signatur prüfen gpg --verify SHA256SUMS.asc SHA256SUMS ===== Wichtige Regeln ===== KEINE Änderungen an WvdS-Core während Installation: ✗ ~/sources/common/WvdS/** darf NICHT editiert werden ✗ Keine manuellen "uses" Änderungen in Core-Units Pack-Isolation: ✓ Jedes Pack ist eigenständig ✓ Deinstallation entfernt alle Pack-Dateien ✓ Index.json wird atomar aktualisiert Backward Compatibility: ✓ Pack-Manifest-Format ist versioniert ✓ Ältere Packs funktionieren mit neueren WvdS-Versionen ✓ Breaking Changes werden durch Manifest-Version signalisiert ===== Drittanbieter-Pack erstellen ===== ==== Schritt 1: Skeleton erstellen ==== mkdir -p ~/vendor-packs/oss/myvendor/mycontrol/{src,docs,license} ==== Schritt 2: Manifest schreiben ==== cat > ~/vendor-packs/oss/myvendor/mycontrol/pack.wvds.json << 'EOF' { "id": "mycontrol", "vendor": "myvendor", "version": "1.0.0", "license": "MIT", "xml": { "namespace": "mv", "tag": "MyControl" }, "model": { "unit": "MyVendor.Controls.MyControl", "class": "TMvMyControl" }, "renderers": { "web": { "unit": "MyVendor.Web.Renderers.MyControl", "class": "TMvWebMyControlRenderer" } } } EOF ==== Schritt 3: Pascal-Units erstellen ==== * Model-Unit in ''src/'' * Renderer-Units in ''src/Renderers/'' ==== Schritt 4: Lizenz hinzufügen ==== cp LICENSE.txt ~/vendor-packs/oss/myvendor/mycontrol/license/ ==== Schritt 5: Registrieren ==== wvds-build pack install \ --from ~/vendor-packs/oss/myvendor/mycontrol \ --enable web ===== Siehe auch ===== * [[.:control-entwicklung|Control-Entwicklung]] * [[.:build-pipeline|Build-Pipeline]] * [[.:architektur|Architektur-Übersicht]]