Le module xcraft-core-etc est le gestionnaire de configuration centralisé de l'écosystème Xcraft. Il gère la création, la lecture, le chargement et la sauvegarde des configurations pour les différents modules du framework. Il prend en charge plusieurs niveaux de configuration (valeurs par défaut, persistantes et runtime) et assure le nettoyage automatique des fichiers temporaires des processus terminés.
- Structure du module
- Fonctionnement global
- Exemples d'utilisation
- Interactions avec d'autres modules
- Variables d'environnement
- Détails des sources
- Licence
- Classe
Etc: Classe principale qui gère les opérations de configuration (lecture, écriture, cache, runtime). - Fonction
EtcManager: Factory singleton qui garantit l'unicité de l'instanceEtcet exposeEtcManager.Etcpour les usages avancés.
Le module repose sur une organisation du système de fichiers bien définie :
etc/[module]/config.json— configuration persistante de chaque modulevar/run/xcraftd.[PID]— configuration runtime du processus courant
- Valeurs par défaut : définies dans les fichiers
config.jsde chaque module (format inquirer.js, seulsnameetdefaultsont exploités). - Configuration persistante : stockée dans
etc/[module]/config.json, écrite parcreateDefaultoucreateAll. - Configuration runtime : stockée dans
var/run/xcraftd.[PID], prioritaire sur la configuration persistante lors du chargement.
Les configurations sont mises en cache lors du premier load() pour optimiser les accès répétés. À l'initialisation, le constructeur scanne le dossier var/run/ et supprime les fichiers xcraftd.[PID] dont le processus correspondant n'est plus actif (via la bibliothèque is-running). Les fichiers des processus encore vivants sont fusionnés dans _confRun pour être appliqués par load().
À la fermeture du processus courant, le fichier runtime est automatiquement supprimé via un handler process.on('exit', ...) enregistré lors du premier appel à saveRun().
Dans les objets de surcharge (override), la valeur -0 est une convention permettant de forcer l'utilisation de la valeur par défaut du module en ignorant explicitement la surcharge. Elle est détectée via le test 1/0 !== 1/value (Infinity !== -Infinity).
// Via la variable d'environnement XCRAFT_ROOT
const xEtc = require('xcraft-core-etc')();
// Ou en fournissant explicitement le chemin racine
const xEtc = require('xcraft-core-etc')('/chemin/vers/racine');const config = [
{name: 'database.host', default: 'localhost'},
{name: 'database.port', default: 5432},
{name: 'database.ssl', default: false},
];
xEtc.createDefault(config, 'mon-module');
// Crée etc/mon-module/config.json avec les valeurs par défautconst config = xEtc.load('mon-module');
console.log(config.database.host); // 'localhost'
console.log(config.database.port); // 5432xEtc.saveRun('mon-module', {
database: {host: 'production-server', port: 5433},
sessionId: 'abc123',
});
// Les valeurs seront fusionnées lors du prochain load('mon-module')const overrides = {
'module-a': {'option.enabled': true},
'module-b': {'server.port': 8080},
};
xEtc.createAll('/path/to/modules', /^xcraft-/, overrides, 'myApp');const overrides = {
'mon-module': {
'option.port': -0, // Ignore la surcharge, utilise le défaut du config.js
},
};
xEtc.createDefault(config, 'mon-module', overrides);- xcraft-core-fs : Listage des fichiers de modules et création de répertoires.
- xcraft-core-utils : Fusion des surcharges de configuration via
mergeOverloads. - is-running : Vérification de l'état des processus pour le nettoyage des fichiers temporaires.
- fs-extra : Opérations avancées sur le système de fichiers (lecture/écriture JSON, troncature).
- lodash/merge : Fusion profonde d'objets de configuration.
- clear-module : Invalidation du cache Node.js pour recharger les fichiers
config.jsdes modules.
| Variable | Description | Exemple | Valeur par défaut |
|---|---|---|---|
XCRAFT_ROOT |
Chemin racine du projet Xcraft | /opt/xcraft |
— |
XCRAFT_LOG |
Niveau de log (0=verb, 1=info, 2=warn, 3=err) | 2 |
2 |
Ce fichier expose la classe Etc et la factory EtcManager.
-
constructor(root, resp)— Initialise le gestionnaire avec le chemin racine et un objet de réponse pour les logs. Sirespest absent, un logger minimal est créé à partir du niveauXCRAFT_LOG. Vérifie l'existence du dossieretc/, nettoie les fichiers de démon obsolètes dansvar/run/et fusionne les configurations runtime des processus encore actifs. -
createDefault(config, moduleName, override)— Crée le fichieretc/[moduleName]/config.jsonà partir d'un tableau de définitions inquirer.js. Les surcharges fournies dansoverridesont appliquées sauf si leur valeur est-0(convention pour forcer le défaut). -
createAll(modulePath, filterRegex, overriders, appId)— Parcourt les modules du cheminmodulePathcorrespondant àfilterRegex, charge leurconfig.jset appellecreateDefaultpour chacun. Les surcharges peuvent être un objet direct, un chemin vers un fichier JS ou un tableau de ceux-ci ; elles sont fusionnées viamergeOverloadset filtrées selonappIdsi fourni. -
configureAll(modulePath, filterRegex, wizCallback)— Configure interactivement tous les modules via un callback assistant (wizCallback). Charge les valeurs actuelles depuis les fichiers existants pour préremplir les valeurs par défaut, puis persiste les modifications si des changements sont détectés. -
read(packageName)— Lit et retourne directement le contenu deetc/[packageName]/config.jsonsans mise en cache. Retournenullsi le fichier est absent. -
load(packageName, pid = 0)— Charge la configuration d'un module avec mise en cache. Sipid > 0, lit le fichier runtimevar/run/xcraftd.[pid]et retourne la section correspondant àpackageName. Sinon, charge depuisetc/, met en cache, puis fusionne les éventuelles valeurs runtime présentes dans_confRun. Retournenullsi le fichier est absent. -
saveRun(packageName, config)— Sauvegarde une configuration runtime dansvar/run/xcraftd.[PID]. Crée le fichier au premier appel et enregistre un handlerprocess.on('exit')pour le supprimer à la fermeture. Chaque appel réécrit le fichier complet (troncature + réécriture) pour inclure toutes les sections runtime connues.
_writeConfigJSON(config, fileName)— Convertit un objet plat dont les clés utilisent la notation pointée (ex."database.host") en objet hiérarchique profond, puis l'écrit en JSON dansfileName.
Fonction factory qui implémente le pattern singleton : si une instance existe déjà, elle est retournée directement. Sinon, elle utilise root ou XCRAFT_ROOT comme chemin racine, crée une nouvelle instance Etc et la mémorise. Retourne null si aucun chemin racine n'est disponible.
EtcManager.Etc expose la classe Etc pour les cas nécessitant des instances indépendantes.
Ce module est distribué sous licence MIT.
Ce contenu a été généré par IA