Inhaltsverzeichnis
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
Zuletzt geändert: den 29.01.2026 um 15:13