Inhaltsverzeichnis

Pack-Struktura

Struktura i pravila za WvdS Control/Component Packove - i interne i od trećih strana.

Pregled

Packovi su distribucijski format za:

Packovi omogućuju instalaciju Controls bez modifikacije WvdS-Core.

Struktura direktorija

Interni WvdS Packovi

Putanja: ~/packs/

~/packs/
├── controls/
│   ├── button/
│   │   └── pack.wvds.json
│   ├── textbox/
│   │   └── pack.wvds.json
│   └── dateedit/
│       └── pack.wvds.json
└── components/
    ├── timer/
    │   └── pack.wvds.json
    └── datasource/
        └── pack.wvds.json

Packovi trećih strana

Putanja: ~/vendor-packs/

~/vendor-packs/
├── index.json                          # Instalacijski indeks
├── oss/                                 # Open-Source Packovi
│   └── {vendor}/
│       └── {pack}/
│           ├── pack.wvds.json          # Pack-Manifest (OBAVEZNO)
│           ├── src/                    # Pascal-Units
│           │   ├── Model.pas
│           │   └── Renderers/
│           │       ├── TUI.pas
│           │       ├── Desktop.pas
│           │       └── Web.pas
│           ├── vsix/                   # Design-Time Resursi
│           ├── docs/                   # API-Dokumentacija
│           └── license/                # OSS-Licenca
│               └── LICENSE.txt
└── proprietary/                        # Vlasnički Packovi
    └── {vendor}/
        └── {pack}/
            ├── pack.wvds.json
            ├── src/ ili bin/          # Izvorni kod ili Binaries
            ├── vsix/
            ├── docs/
            ├── license/
            │   ├── LICENSE.txt
            │   └── EULA.txt
            └── integrity/              # Provjera integriteta
                ├── SHA256SUMS
                └── SIGNATURE.asc       # Opcionalno

Pack-Manifest

Svaki Pack zahtijeva pack.wvds.json datoteku:

{
  "id": "dateedit",
  "vendor": "wvds",
  "version": "0.1.0",
  "license": "MIT",
  "description": "Polje za unos datuma s Kalender-Popupom",
 
  "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-Polja

Polje Obavezno Opis
id Da Jedinstveni Pack-Identifikator
vendor Da Vendor-ID (npr. „wvds“, „dx“, „ms“)
version Da Semantic Version
license Da Identifikator licence (SPDX)
xml.namespace Da PXAML-Namespace
xml.tag Da PXAML-Tag-Naziv
model.unit Da Pascal-Unit za Model
model.class Da Naziv klase Modela
renderers Da Renderer po Targetu
targetCaps Ne Potrebne/opcionalne Capabilities
dependencies Ne Ovisnosti o drugim Packovima
compatibility Ne WvdS-verzijski zahtjev

Instalacijski indeks

Putanja: ~/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-Naredbe

Instaliranje Packa

wvds-build pack install \
  --from /path/to/packdir \
  --to ~/vendor-packs \
  --enable tui,desktop,web

Deinstaliranje Packa

wvds-build pack uninstall \
  --vendor dx \
  --pack dateedit-pro

Popis instaliranih Packova

wvds-build pack list

Izlaz:

Installed Packs:
  dx/dateedit-pro  2.1.0  [desktop, web]  proprietary
  jw/charts        1.0.0  [desktop, web]  oss

Konvencije imenovanja

Packovi trećih strana NE SMIJU koristiti TWvdS* prefiks!
Vendor Prefiks klase Primjer
WvdS (interno) TWvdS* TWvdSDateEdit
DevExpress TDx* TDxDateEdit
Microsoft TMs* TMsFluentButton
JWorks TJw* TJwChartView

Provjera integriteta

Vlasnički Packovi moraju podržavati provjeru integriteta:

SHA256SUMS:

a1b2c3d4... src/Model.pas
e5f6g7h8... src/Renderers/Desktop.pas
i9j0k1l2... src/Renderers/Web.pas

Opcionalni potpis:

# Kreiranje potpisa
gpg --armor --detach-sign SHA256SUMS
 
# Provjera potpisa
gpg --verify SHA256SUMS.asc SHA256SUMS

Važna pravila

NIKAKVE promjene na WvdS-Core tijekom instalacije:
  ✗ ~/sources/common/WvdS/** NE SMIJE se uređivati
  ✗ Nikakve ručne "uses" promjene u Core-Units

Pack-Izolacija:
  ✓ Svaki Pack je samostalan
  ✓ Deinstalacija uklanja sve Pack-datoteke
  ✓ Index.json se atomski ažurira

Backward Compatibility:
  ✓ Pack-Manifest-Format je verzioniran
  ✓ Stariji Packovi funkcioniraju s novijim WvdS-verzijama
  ✓ Breaking Changes se signaliziraju Manifest-verzijom

Kreiranje Pack-a treće strane

Korak 1: Kreiranje Skeletona

mkdir -p ~/vendor-packs/oss/myvendor/mycontrol/{src,docs,license}

Korak 2: Pisanje Manifesta

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

Korak 3: Kreiranje Pascal-Units

Korak 4: Dodavanje licence

cp LICENSE.txt ~/vendor-packs/oss/myvendor/mycontrol/license/

Korak 5: Registracija

wvds-build pack install \
  --from ~/vendor-packs/oss/myvendor/mycontrol \
  --enable web

Vidi također