Initialisation
initializeLrvo, la racine de composition qui câble les features aux cores au boot du serveur.
initializeLrvo() est la racine de composition de la plateforme : le seul endroit qui connecte les features aux cores. C'est ce qui permet à core/api d'ignorer l'existence de features/auth tout en résolvant les sessions.
Elle est appelée une fois, au boot du serveur, depuis l'instrumentation.js du projet.
Import
import { initializeLrvo, resetLrvoInitialization } from '@lrvo/core';Module serveur. Un appel depuis le navigateur retourne immédiatement { skipped: true, reason: 'client-side' } sans rien enregistrer.
initializeLrvo(options?)
// instrumentation.js
export async function register() {
if (process.env.NEXT_RUNTIME === 'nodejs') {
const { initializeLrvo } = await import('@lrvo/core');
const { modules } = await import('./app/.lrvo/modules.generated.js');
const { default: theme } = await import('./theme.js');
await initializeLrvo({ modules, theme });
}
}| Option | Type | Rôle |
|---|---|---|
modules | Array<{ name, exports }> | Manifeste statique généré par lrvo-modules sync. Défaut : []. |
theme | résultat de defineTheme() | Thème du projet, exporté par son theme.js. Absent, l'apparence d'origine s'applique. Voir Thèmes. |
Ce qu'elle enchaîne, dans cet ordre :
- Enregistrement du thème, lu ensuite au rendu par
getTheme()etgetThemeValues(). - Injection du résolveur de session dans le routeur, par
configureRouter({ resolveSession: validateSession }). - Enregistrement des routes REST de la feature auth.
- Enregistrement des policies de stockage de la feature auth.
- Enregistrement des permissions du core.
- Enregistrement des modules du manifeste, avertissement sur chaque variable d'environnement requise absente, puis enregistrement des permissions déclarées dans leur
manifest. flushModulesReady(): exécution des callbacks posés par les modules viaonModulesReady(). Voir Enregistrement inter-modules.
Le register() de chaque module, lui, a déjà été exécuté : le manifeste généré l'appelle en top-level await au moment de son import, donc avant cette fonction. Ces register() tournent en parallèle et sans ordre garanti, d'où l'étape 7 : c'est le premier instant où un module peut observer de façon fiable ce que les autres ont enregistré.
Elle ne crée aucune table. Le schéma est la responsabilité de lrvo-db : un boot de serveur ne modifie jamais la base.
Valeur de retour
| Retour | Signification |
|---|---|
{} | Initialisation faite. |
{ skipped: true, reason: 'client-side' } | Appel côté navigateur. |
{ skipped: true, reason: 'already-initialized' } | Second appel dans le même processus. Un avertissement est journalisé. |
Le garde d'idempotence est posé sur globalThis via Symbol.for('__LRVO_INITIALIZED__'), donc il survit au rechargement de modules du développement. Voir Registres et singletons.
resetLrvoInitialization()
Remet le garde à false et vide les registres câblés ici : routeur, routes, configuration de stockage, permissions, modules, file onModulesReady, thème.
Destinée aux tests, pour repartir d'un état propre entre deux cas. L'appeler dans une application en cours d'exécution retire les routes et les policies sur lesquelles le processus s'appuie.
Notes
L'ordre d'import compte dans instrumentation.js. Les manifestes de blocs et de templates s'importent avant l'appel, pour être disponibles si un module les consulte pendant son boot. Voir Structure du projet.
Le garde NEXT_RUNTIME === 'nodejs' n'est pas décoratif. Sur le runtime Edge, ni pg ni le système de fichiers n'existent : l'initialisation échouerait au premier import.