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