Struktura paketov

Struktura in pravila za WvdS Control/Component pakete - tako interne kot od tretjih ponudnikov.

Pregled

Paketi so distribucijski format za:

  • Kontrole - Elementi uporabniškega vmesnika (Button, TextBox, DateEdit, …)
  • Komponente - Nevizualne komponente (Timer, DataSource, …)
Paketi omogočajo namestitev kontrol brez spreminjanja WvdS jedra.

Struktura imenikov

Interni WvdS paketi

Pot: ~/packs/

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

Paketi tretjih ponudnikov

Pot: ~/vendor-packs/

~/vendor-packs/
├── index.json                          # Indeks namestitev
├── oss/                                 # Odprtokodni paketi
│   └── {vendor}/
│       └── {pack}/
│           ├── pack.wvds.json          # Manifest paketa (OBVEZNO)
│           ├── src/                    # Pascal enote
│           │   ├── Model.pas
│           │   └── Renderers/
│           │       ├── TUI.pas
│           │       ├── Desktop.pas
│           │       └── Web.pas
│           ├── vsix/                   # Viri za načrtovanje
│           ├── docs/                   # API dokumentacija
│           └── license/                # OSS licenca
│               └── LICENSE.txt
└── proprietary/                        # Lastniški paketi
    └── {vendor}/
        └── {pack}/
            ├── pack.wvds.json
            ├── src/ ali bin/          # Izvorna koda ali binarne datoteke
            ├── vsix/
            ├── docs/
            ├── license/
            │   ├── LICENSE.txt
            │   └── EULA.txt
            └── integrity/              # Preverjanje celovitosti
                ├── SHA256SUMS
                └── SIGNATURE.asc       # Opcijsko

Manifest paketa

Vsak paket potrebuje datoteko pack.wvds.json:

{
  "id": "dateedit",
  "vendor": "wvds",
  "version": "0.1.0",
  "license": "MIT",
  "description": "Polje za vnos datuma s pojavnim koledarjem",
 
  "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"
  }
}

Polja manifesta

Polje Obvezno Opis
id Da Enolični identifikator paketa
vendor Da ID ponudnika (npr. „wvds“, „dx“, „ms“)
version Da Semantična verzija
license Da Identifikator licence (SPDX)
xml.namespace Da PXAML imenski prostor
xml.tag Da PXAML ime oznake
model.unit Da Pascal enota za model
model.class Da Ime razreda modela
renderers Da Izrisovalnik za vsak cilj
targetCaps Ne Zahtevane/opcijske zmogljivosti
dependencies Ne Odvisnosti od drugih paketov
compatibility Ne Zahteva glede verzije WvdS

Indeks namestitev

Pot: ~/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 ukazi

Namestitev paketa

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

Odstranitev paketa

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

Izpis nameščenih paketov

wvds-build pack list

Izhod:

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

Konvencije poimenovanja

Paketi tretjih ponudnikov NE SMEJO uporabljati predpone TWvdS*!
Ponudnik Predpona razreda Primer
WvdS (interni) TWvdS* TWvdSDateEdit
DevExpress TDx* TDxDateEdit
Microsoft TMs* TMsFluentButton
JWorks TJw* TJwChartView

Preverjanje celovitosti

Lastniški paketi morajo podpirati preverjanje celovitosti:

SHA256SUMS:

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

Opcijski podpis:

# Ustvari podpis
gpg --armor --detach-sign SHA256SUMS
 
# Preveri podpis
gpg --verify SHA256SUMS.asc SHA256SUMS

Pomembna pravila

NOBENIH sprememb jedra WvdS med namestitvijo:
  ✗ ~/sources/common/WvdS/** se NE SME urejati
  ✗ Brez ročnih sprememb "uses" v jedrnih enotah

Izolacija paketov:
  ✓ Vsak paket je samostojen
  ✓ Odstranitev odstrani vse datoteke paketa
  ✓ Index.json se posodablja atomarno

Povratna združljivost:
  ✓ Format manifesta paketa je verzioniran
  ✓ Starejši paketi delujejo z novejšimi verzijami WvdS
  ✓ Prelomne spremembe so signalizirane z verzijo manifesta

Ustvarjanje paketa tretjega ponudnika

Korak 1: Ustvari ogrodje

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

Korak 2: Napiši manifest

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: Ustvari Pascal enote

  • Model enota v src/
  • Izrisovalne enote v src/Renderers/

Korak 4: Dodaj licenco

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

Korak 5: Registriraj

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

Glejte tudi

Zuletzt geändert: dne 29.01.2026 ob 22:23