From 7f89c359697f23470f84d41d997bcd285e031c16 Mon Sep 17 00:00:00 2001 From: Hyko Date: Sat, 25 Apr 2026 12:39:11 -0400 Subject: [PATCH] refactor(init): skip module register() call during db init to avoid next.js imports - update comment to clarify that only manifest.permissions are registered before seed - remove register() invocation from loadModules() to prevent incompatible next.js imports in cli context --- src/features/init.js | 22 +++++++++------------- 1 file changed, 9 insertions(+), 13 deletions(-) diff --git a/src/features/init.js b/src/features/init.js index d7c411b..ca28e14 100644 --- a/src/features/init.js +++ b/src/features/init.js @@ -5,10 +5,11 @@ * - Modules externes : découverts via discoverModules() ; chaque module * exporte ses propres createTables/dropTables. * - * Les permissions ajoutées par les modules doivent être enregistrées AVANT - * le seed de la BD pour qu'elles soient persistées et auto-attribuées au - * rôle admin. C'est pour cela qu'on appelle register() de chaque module - * avant initFeatures(). + * Les permissions des modules (manifest.permissions) sont enregistrées AVANT + * le seed de la BD pour qu'elles soient persistées et auto-attribuées au rôle + * admin. register() n'est PAS appelé ici — les enregistrements runtime (pages, + * nav, routes) ne sont pas nécessaires pour l'init BD et tireraient des imports + * Next.js incompatibles avec le contexte CLI. */ import { createTables as authCreate, dropTables as authDrop } from './auth/db.js'; @@ -26,19 +27,14 @@ async function loadModules() { const modules = getRegisteredModules(); validateModuleEnvVars(modules); - // Enregistre les permissions du module et exécute son register() pour que - // tous les hooks runtime soient en place avant le seed. + // Enregistre les permissions déclarées dans le manifest de chaque module. + // register() n'est PAS appelé ici : les enregistrements runtime (pages, nav, + // routes, storage) ne servent à rien dans le contexte CLI et tireraient des + // imports Next.js (next/headers, JSX) qui ne sont pas disponibles en Node.js. for (const mod of modules) { if (Array.isArray(mod.manifest?.permissions)) { registerPermissions(mod.manifest.permissions); } - if (typeof mod.register === 'function') { - try { - await mod.register(); - } catch (error) { - fail(`zen-modules: ${mod.manifest.name} register() threw — ${error.message}`); - } - } } return modules; }