@gram-lang/modules
Le package @gram-lang/modules est le chef d’orchestre de la modularité dans Gram. Il prend en charge la résolution et la composition des directives d’import @use réparties sur plusieurs fichiers pour produire un AST unifié unique avant compilation.
C’est lui qui gère la traversée du graphe de dépendances, la détection des imports circulaires, l’isolation des variables intermédiaires (hygiène lexicale), le redimensionnement automatique des sous-bases en fonction de leur rendement réel, ainsi que le mode stock (--stock).
Comme tous les packages du cœur de Gram, @gram-lang/modules est 100 % pur et agnostique vis-à-vis de l’environnement : il s’appuie sur l’interface ModuleHost pour déléguer la lecture des fichiers et la résolution des chemins, sans jamais manipuler directement le disque.
loadModuleGraph
Section intitulée « loadModuleGraph »Explore et charge l’intégralité du graphe d’importation transitif en partant du document racine entryUri. L’analyse s’effectue en une seule passe en profondeur (DFS) :
- Déduplication : Chaque fichier
.gramn’est lu et parsé qu’une seule fois, même en cas de dépendances en diamant (ex : deux sauces partageant le même bouillon). - Tolérance aux pannes : Les cycles d’importation (
A → B → A) sont interceptés et consignés dans les diagnostics sous le code non fatalMODULE_CYCLEau lieu de faire planter le processus. - Contrôle de profondeur : Dépasser
maxDepth(fixé par défaut à32) émet une alerteMODULE_DEPTH_EXCEEDED. - Ordre topologique : Le tableau
orderclasse les modules feuilles en premier, garantissant que chaque sous-recette est mesurée et composée avant d’être injectée dans son importateur.
ModuleHost
Section intitulée « ModuleHost »Le contrat d’abstraction qui isole @gram-lang/modules de son environnement d’exécution (système de fichiers local, mémoire vive, tampons d’éditeur LSP ou bac à sable du Playground web).
createMemoryHost
Section intitulée « createMemoryHost »Instancie un ModuleHost virtuel en mémoire à partir d’un simple objet ou d’une Map associant des chemins de fichiers à leur contenu .gram. Gère nativement les chemins relatifs POSIX standards (./, ../) et la racine projet @/.... Indispensable pour exécuter Gram dans le navigateur ou dans vos suites de tests.
composeRecipe
Section intitulée « composeRecipe »Fusionne un ModuleGraph résolu en un unique RecipeAST prêt pour la cuisine :
- Parcours ordonné : Traite les modules dans l’ordre topologique
graph.order. - Identification des exports : Détecte les préparations intermédiaires exportées au niveau des sections (
computeExports). - Mesure du rendement : Évalue au préalable la masse physique produite par chaque sous-recette (
resolveYield) à l’aide de la baseoptions.db. - Mise à l’échelle (Scaling) : Calcule le coefficient multiplicateur (
computeScaleFactor) à appliquer à la sous-recette selon la quantité demandée par la recette hôte. - Hygiène de renommage : Préfixe les variables intermédiaires internes (
&pate→&crust$pate) pour éliminer tout risque de collision de noms entre fichiers distincts. - Gestion du Stock (
--stock) : Pour les modules signalés dansoptions.stock, retire les étapes de préparation de la chronologie tout en générant des ingrédients virtuels (syntheticIngredients) qui préservent la masse et les apports nutritionnels exacts de la base.
ComposeOptions
Section intitulée « ComposeOptions »ComposeResult
Section intitulée « ComposeResult »finalizeComposed
Section intitulée « finalizeComposed »Assure la liaison entre la sortie de composition et le résultat de compilation produit par @gram-lang/kitchen :
- Injecte la liste descriptive
modules: ModuleInfo[]à la racine de l’objet compilé. - Associe à chaque section injectée l’empreinte de son module d’origine (
section.module: { binding, uri, title, mode }). - Consolide et déduplique les avertissements et diagnostics issus des différentes phases.
Utilitaires & fonctions avancées
Section intitulée « Utilitaires & fonctions avancées »Extraction d’exports & calcul de proportions
Section intitulée « Extraction d’exports & calcul de proportions »computeExports: Analyse un AST pour en extraire les variables exportées via->&sur les en-têtes de section et désigne l’export par défaut.resolveYield: Calcule récursivement la masse physique totale (en grammes) produite par une section exportée et ses éventuelles dépendances amont.computeScaleFactor: Détermine le ratio entre la quantité réclamée par la recette hôte et le rendement calculé du sous-module.
Indexation des dépendances inverses
Section intitulée « Indexation des dépendances inverses »Fonctionnalité clé utilisée par gram watch et le serveur de langage (@gram-lang/language-server) pour mettre à jour les diagnostics de manière ciblée dès qu’un sous-fichier partagé est modifié.
Vocabulaire des diagnostics
Section intitulée « Vocabulaire des diagnostics »warningSeverityOf(code): Résout la sévérité d’un code ("error" | "warning" | "info") de manière unifiée sur l’ensemble des codes de@gram-lang/kitchenet@gram-lang/modules.allWarningInfo: Liste exhaustive des codes de diagnostic, sévérités et modèles de messages prêts pour l’affichage.