Plugin SDK frontend
Il frontend del Core carica il bundle ES di un plugin attivo da:
/plugins/{name}/frontend/bundle.js?v={version}Usa le dichiarazioni types-only @xiquil/plugin-sdk contenute in
sdk/typescript della release Core corrispondente. Non copiare localmente
PluginModule o la forma di window.__XQ__: i contract test Core tengono
allineati pacchetto pubblico e loader.
Modulo pubblico
Sezione intitolata “Modulo pubblico”import type { PluginContext, PluginModule } from "@xiquil/plugin-sdk";
export const setup: PluginModule["setup"] = (context: PluginContext) => { context.navigate("/plugins/xq_demo");};
export default function DemoPlugin() { return <section>Plugin Demo attivo</section>;}| Export | Uso |
|---|---|
default | Componente React renderizzato nella pagina host del plugin |
setup(context) | Hook opzionale eseguito al bootstrap frontend |
routes | Presente nel tipo ABI ma riservato: il loader attuale non registra route React da questo export |
PluginContext espone soltanto:
| Campo | Uso |
|---|---|
apiClient | Client HTTP fornito dal Core; il tipo v1 non promette internals Axios |
navigate | Navigazione verso un percorso del Core |
Librerie condivise
Sezione intitolata “Librerie condivise”Il bundle deve usare le librerie fornite dall’host:
const { React, ReactDOM, mui, muiStyles, muiIcons } = window.__XQ__;window.__XQ__ espone inoltre useFormValidation,
FormValidationSummary, SubmitButton e SegmentedActions. Non bundlare una
seconda copia di React, ReactDOM o MUI: copie multiple possono rompere hook,
context e tema.
Build e layout
Sezione intitolata “Build e layout”Il sorgente canonico può vivere in frontend/plugin.tsx, ma l’archivio deve
contenere il risultato eseguibile in frontend/bundle.js. Imposta
provides_frontend=true nel manifest tecnico soltanto quando il bundle è
presente.
Per un esempio minimo riproducibile consulta sdk/examples/frontend_only e
sdk/examples/full_stack nel Core. Entrambi renderizzano contenuto visibile;
il full-stack abbina anche la route backend /ping.
Limiti v1
Sezione intitolata “Limiti v1”- usa solo i simboli dichiarati nel pacchetto pubblico;
- tratta
apiClientcome opaco; - non dipendere da file sotto
frontend/src/del Core; - non usare
routesfinché il loader non ne documenta e testa il call site; - aggiorna la dipendenza SDK insieme alla versione minima Core richiesta.