Files
core/src/core/public-pages/README.md
T
hykocx a3aff9fa49 feat(modules): add external module system with auto-discovery and public pages support
- add `src/core/modules/` with registry, discovery (server), and public index
- add `src/core/public-pages/` with registry, server component, and public index
- add `src/core/users/permissions-registry.js` for runtime permission registration
- expose `./modules`, `./public-pages`, and `./public-pages/server` package exports
- rename `registerFeatureRoutes` to `registerApiRoutes` with backward-compatible alias
- extend `seedDefaultRolesAndPermissions` to include module-registered permissions
- update `initializeZen` and shared init to wire module discovery and registration
- add `docs/MODULES.md` documenting the `@zen/module-*` authoring contract
- update `docs/DEV.md` with references to module system docs
2026-04-25 10:50:13 -04:00

1.2 KiB

Public Module Pages

Registre runtime pour les pages publiques /zen/<module>/<...> ajoutées par les modules externes.

Concept

Tout chemin /zen/<segment>/... (sauf /zen/api/... réservé aux routes API) est résolu vers le composant enregistré sous <segment>. Le module gère son routage interne.

API

import { registerPublicModulePage } from '@zen/core/public-pages';

registerPublicModulePage({
  moduleName: 'billing',
  Component: BillingRouter,
  title: 'Facturation',
});

Le composant reçoit { params, segments } :

Prop Type Description
params object Paramètres Next.js résolus (incluant path).
segments string[] Segments d'URL après /zen/<moduleName>/. Le module fait son propre routage.

Exemple : /zen/billing/invoice/abc-123segments = ['invoice', 'abc-123'].

Câblage côté projet consommateur

Le scaffolder @zen/start génère automatiquement app/zen/[...path]/page.js qui ré-exporte le composant serveur. Aucune action manuelle requise.

Restrictions

  • Le moduleName api est réservé et lève une exception à l'enregistrement.
  • Un seul composant par moduleName ; un appel ultérieur écrase le précédent.