Compilation
Bien que Publicodes soit basé sur la syntaxe YAML, pour des raisons de
performances le moteur de
règles Publicodes attend en entrée un objet JSON regroupant l’ensemble des
règles à évaluer. Ainsi, les fichiers de règles (.publicodes
ou .yaml
)
doivent être compilés en un objet JSON avant d’être utilisés.
Par ailleurs, cette étape permet de résoudre les imports de règles depuis des paquets NPM via la macro importer!
.
Enfin, la compilation permet de générer des types TypeScript pour le modèle, facilitant ainsi son utilisation dans un projet TypeScript.
Cette étape de compilation peut être effectué via la ligne de commande ou via une fonction JavaScript.
Ligne de commande (recommandé)
La commande npx publicodes compile
du package @publicodes/tools
permet de compiler un ensemble de fichiers Publicodes.
Usage
npx publicodes compile <glob> [options]
Avec :
<glob>
: un ou plusieurs glob (ou chemins vers un dossier) listant les fichiers à compiler.Si le paramètre est un chemin vers un dossier,
<dossier>/**/*.publicodes
est utilisé par défaut.options
:--output
: le chemin du dossier de sortie (par défautpublicodes-build
)
Types TypeScript
La commande npx publicodes compile
génère également les types TypeScript associés au modèle compilé, dans un fichier index.d.ts
à la racine du dossier de sortie.
Situation
: le type de l’objet passé à engine.setSituationRuleValue
: unRecord
associant un nom de règle au type de son évaluation (valeurnodeValue
retournée parengine.evaluate
)RuleName
: tous les noms de règles
La commande génère également un fichier index.js
à la racine du dossier de sortie, exportant le modèle compilé. Ce dernier est typé avec le fichier index.d.ts
, ce qui permet de bénéficier de l’autocomplétion dans un projet TypeScript.
Exemple d’utilisation
npx publicodes compile data/ --output modele
import { Engine } from 'publicodes';
import modele from './modele';
const engine = new Engine(modele);
engine.getRule(...); // Auto-complétion disponible
Avec une fonction JavaScript
La fonction getModelFromSource
permet de compiler un ensemble de fichiers Publicodes en un seul objet JSON.
Usage
La fonction getModelFromSource
prend en paramètre :
- un glob (ou un chemin vers un dossier)
permettant de définir les fichiers à compiler.
Si le paramètre est un chemin vers un dossier,
<dossier>/**/*.publicodes
est utilisé par défaut. - un objet de configuration optionnel :
ignore
: un tableau de globs à ignorerverbose
: un booléen permettant d’afficher les logs de compilation
Elle retourne un objet JSON représentant le modèle compilé, utilisé pour instancier un moteur de règles Publicodes.
Exemple d’utilisation
import { writeFileSync } from 'fs';
import { getModelFromSource } from '@publicodes/tools/compilation';
const model = getModelFromSource('data', {
ignore: ['data/test/**'],
verbose: true
});
writeFileSync('dist/model.json', JSON.stringify(model, null, 2));