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

Zuletzt geändert: il 29/01/2026 alle 22:37