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
* 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;
}