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:
+9
-13
@@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user