====== Struttura pack ======
Struttura e regole per i pack di controlli/componenti WvdS - sia interni che di terze parti.
===== Panoramica =====
I pack sono il formato di distribuzione per:
* **Controlli** - Elementi UI (Button, TextBox, DateEdit, ...)
* **Componenti** - Componenti non visivi (Timer, DataSource, ...)
I pack permettono di installare controlli **senza modificare il core WvdS**.
===== Struttura directory =====
==== Pack WvdS interni ====
**Percorso:** ''~/packs/''
~/packs/
├── controls/
│ ├── button/
│ │ └── pack.wvds.json
│ ├── textbox/
│ │ └── pack.wvds.json
│ └── dateedit/
│ └── pack.wvds.json
└── components/
├── timer/
│ └── pack.wvds.json
└── datasource/
└── pack.wvds.json
==== Pack di terze parti ====
**Percorso:** ''~/vendor-packs/''
~/vendor-packs/
├── index.json # Indice installazione
├── oss/ # Pack open-source
│ └── {vendor}/
│ └── {pack}/
│ ├── pack.wvds.json # Manifesto pack (OBBLIGATORIO)
│ ├── src/ # Unit Pascal
│ │ ├── Model.pas
│ │ └── Renderers/
│ │ ├── TUI.pas
│ │ ├── Desktop.pas
│ │ └── Web.pas
│ ├── vsix/ # Risorse design-time
│ ├── docs/ # Documentazione API
│ └── license/ # Licenza OSS
│ └── LICENSE.txt
└── proprietary/ # Pack proprietari
└── {vendor}/
└── {pack}/
├── pack.wvds.json
├── src/ o bin/ # Sorgenti o binari
├── vsix/
├── docs/
├── license/
│ ├── LICENSE.txt
│ └── EULA.txt
└── integrity/ # Verifica integrita
├── SHA256SUMS
└── SIGNATURE.asc # Opzionale
===== Manifesto pack =====
Ogni pack richiede un file ''pack.wvds.json'':
{
"id": "dateedit",
"vendor": "wvds",
"version": "0.1.0",
"license": "MIT",
"description": "Campo di input data con popup calendario",
"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"
}
}
==== Campi manifesto ====
^ Campo ^ Obbligatorio ^ Descrizione ^
| ''id'' | Si | Identificatore univoco del pack |
| ''vendor'' | Si | ID vendor (es. "wvds", "dx", "ms") |
| ''version'' | Si | Versione semantica |
| ''license'' | Si | Identificatore licenza (SPDX) |
| ''xml.namespace'' | Si | Namespace PXAML |
| ''xml.tag'' | Si | Nome tag PXAML |
| ''model.unit'' | Si | Unit Pascal per il model |
| ''model.class'' | Si | Nome classe del model |
| ''renderers'' | Si | Renderer per target |
| ''targetCaps'' | No | Capability richieste/opzionali |
| ''dependencies'' | No | Dipendenze da altri pack |
| ''compatibility'' | No | Requisito versione WvdS |
===== Indice installazione =====
**Percorso:** ''~/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"
}
]
}
===== Comandi CLI =====
==== Installare pack ====
wvds-build pack install \
--from /path/to/packdir \
--to ~/vendor-packs \
--enable tui,desktop,web
==== Disinstallare pack ====
wvds-build pack uninstall \
--vendor dx \
--pack dateedit-pro
==== Elencare pack installati ====
wvds-build pack list
Output:
Installed Packs:
dx/dateedit-pro 2.1.0 [desktop, web] proprietary
jw/charts 1.0.0 [desktop, web] oss
===== Convenzioni naming =====
I pack di terze parti NON possono usare il prefisso ''TWvdS*''!
^ Vendor ^ Prefisso classe ^ Esempio ^
| WvdS (interno) | ''TWvdS*'' | ''TWvdSDateEdit'' |
| DevExpress | ''TDx*'' | ''TDxDateEdit'' |
| Microsoft | ''TMs*'' | ''TMsFluentButton'' |
| JWorks | ''TJw*'' | ''TJwChartView'' |
===== Verifica integrita =====
I pack proprietari devono supportare la verifica di integrita:
**SHA256SUMS:**
a1b2c3d4... src/Model.pas
e5f6g7h8... src/Renderers/Desktop.pas
i9j0k1l2... src/Renderers/Web.pas
**Firma opzionale:**
# Creare firma
gpg --armor --detach-sign SHA256SUMS
# Verificare firma
gpg --verify SHA256SUMS.asc SHA256SUMS
===== Regole importanti =====
NESSUNA modifica al core WvdS durante l'installazione:
VIETATO ~/sources/common/WvdS/** NON deve essere modificato
VIETATO Nessuna modifica manuale "uses" nelle unit core
Isolamento pack:
OK Ogni pack e autonomo
OK La disinstallazione rimuove tutti i file del pack
OK Index.json viene aggiornato atomicamente
Compatibilita retroattiva:
OK Il formato manifesto pack e versionato
OK I pack piu vecchi funzionano con versioni WvdS piu nuove
OK I breaking change vengono segnalati dalla versione manifesto
===== Creare un pack di terze parti =====
==== Passaggio 1: Creare struttura ====
mkdir -p ~/vendor-packs/oss/myvendor/mycontrol/{src,docs,license}
==== Passaggio 2: Scrivere manifesto ====
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
==== Passaggio 3: Creare unit Pascal ====
* Unit model in ''src/''
* Unit renderer in ''src/Renderers/''
==== Passaggio 4: Aggiungere licenza ====
cp LICENSE.txt ~/vendor-packs/oss/myvendor/mycontrol/license/
==== Passaggio 5: Registrare ====
wvds-build pack install \
--from ~/vendor-packs/oss/myvendor/mycontrol \
--enable web
===== Vedi anche =====
* [[.:control-entwicklung|Sviluppo controlli]]
* [[.:build-pipeline|Pipeline di build]]
* [[.:architektur|Panoramica architettura]]