====== 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]]