====== 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 =====
* [[.:control-entwicklung|Razvoj kontrol]]
* [[.:build-pipeline|Gradbeni cevovod]]
* [[.:architektur|Pregled arhitekture]]