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
This commit is contained in:
2026-04-25 12:39:11 -04:00
parent de745cb924
commit 7f89c35969
+9 -13
View File
@@ -5,10 +5,11 @@
* - Modules externes : découverts via discoverModules() ; chaque module * - Modules externes : découverts via discoverModules() ; chaque module
* exporte ses propres createTables/dropTables. * exporte ses propres createTables/dropTables.
* *
* Les permissions ajoutées par les modules doivent être enregistrées AVANT * 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 * le seed de la BD pour qu'elles soient persistées et auto-attribuées au rôle
* rôle admin. C'est pour cela qu'on appelle register() de chaque module * admin. register() n'est PAS appelé ici — les enregistrements runtime (pages,
* avant initFeatures(). * 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'; import { createTables as authCreate, dropTables as authDrop } from './auth/db.js';
@@ -26,19 +27,14 @@ async function loadModules() {
const modules = getRegisteredModules(); const modules = getRegisteredModules();
validateModuleEnvVars(modules); validateModuleEnvVars(modules);
// Enregistre les permissions du module et exécute son register() pour que // Enregistre les permissions déclarées dans le manifest de chaque module.
// tous les hooks runtime soient en place avant le seed. // 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) { for (const mod of modules) {
if (Array.isArray(mod.manifest?.permissions)) { if (Array.isArray(mod.manifest?.permissions)) {
registerPermissions(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; return modules;
} }