Estendere la configurazione
Il modulo di default non contiene nessuna configurazione. E' necessario estenderlo per aggiungere nuove opzioni. L'estensione viene implementata:
- A livello applicativo, per le configurazioni che sono
caso-specifiche. In questo caso, i metodi vengono chiamati direttamente nel
progetto finale, i.e.
arkeion
. - A livello di libreria, nel caso di pacchetti di
@favojs
che espongono una configurazione aggiuntiva, come@favojs/logger
che richiede unpath
in cui salvare i log.
In questo modo si ha un unico file di configurazione per più pacchetti, dato che la configurazione è centralizzata.
#
ProceduraPer estendere la configurazione, sono necessari i seguenti passaggi:
- Definire il validatore per la configurazione (basato su
@favojs/validation
) - Estendere l'interfaccia di configurazione di
IAppConfig
, con iltype
ottenuto dal validatore. - Registrare il validatore su
AppConfig
Struttura dei File
Per le librerire @favojs
, definire il validatore
e l'estensione dell'intefaccia in un unico file posizionato in src/config/<pkg>Config.ts
,
ad esempio src/config/LoggerConfig.ts
.
#
Definizione del validatoreE' necessario definire un validatore per la configurazione, con il duplice scopo di:
- Ottenere i
type
, per avere a disposizione l'IntelliSense e la validazione statica di TypeScript nell'uso delle variabili di configurazione - Assicurarsi che gli utenti delle librerie/software inseriscano i valori corretti.
Il validatore utilizzato è Yup, con le estensioni fornite da @favojs/validation.
#
Estensione dell'interfacciaL'estensione dell'interfaccia modifica IAppConfig
tramite la Module Augmentation di TypeScript.
E' necessario specificare la chiave sulla quale sarà disponibile la configurazione, che deve essere equivalente al tag XML. Ad esempio la seguente configurazione:
Richiederà un XML come il seguente:
AppConfig
#
Registrazione su Per permettere il caricamento da parte di AppConfig
della configurazione
appena creata, dobbiamo registrarla su AppConfig
, tramite il metodo
AppConfig.add
. Il metodo si occupa di definire una chiave (equivalente
al tag XML che verrà letto) con il suo validatore (per validare il
contenuto del tag).
Posizionamento della chiamata
La registrazione dovrebbe avvenire nel file del modulo (i.e. CustomModule.ts
).
- Se il modulo è dinamico, possiamo inserire la chiamata all'interno del
register()
che ritorna ilDynamicModule
. - Per un modulo statico, la registrazione può avvenire semplicemente all'inizio del file.