Contenu public

Registre des résolveurs qui servent du contenu à la racine du site, par ordre de priorité.

core/public-content décide qui répond à une URL à la racine du site : /<slug>, /<postType>/<slug>. Le projet généré par @lrvo/start expose un seul catch-all (public)/[...slug]/page.js qui délègue à ce registre.

Chaque module CMS enregistre un résolveur qui sait reconnaître et rendre son propre contenu à partir des segments d'URL.

À ne pas confondre avec core/public-pages, qui sert le namespace réservé /lrvo/<module>/*. Ici c'est la racine du site, et l'ordre de priorité décide.

Import

import {
  registerPublicContentResolver,
  listPublicContentResolvers,
  resolvePublicContent,
  resolvePublicMetadata,
} from '@lrvo/core/public-content';

Module serveur.

API

registerPublicContentResolver({ name, priority, resolve, generateMetadata })

ChampTypeObligatoireRôle
namestringouiIdentifiant unique du résolveur.
prioritynumbernonOrdre décroissant : plus la valeur est haute, plus il est essayé tôt. Défaut : 0.
resolveasync (segments) => null | { Component, props }ouiRend le contenu, ou renonce.
generateMetadataasync (segments) => null | MetadatanonMétadonnées Next.js du même contenu.
import { registerPublicContentResolver } from '@lrvo/core/public-content';
import { resolvePostPublic, resolvePostMetadata } from './public/PostPublicView.server.js';

registerPublicContentResolver({
  name: 'posts',
  priority: 10,
  resolve: resolvePostPublic,
  generateMetadata: resolvePostMetadata,
});

Convention de priorités

PrioritéType de résolveurExemple
0Fallback hiérarchique, tente de matcher n'importe quel chemin.@lrvo/module-pages, qui descend la chaîne parent_id à partir des segments.
10 et plusPréfixe spécifique, ne matche qu'une forme d'URL connue.@lrvo/module-posts, qui ne matche qu'un premier segment correspondant à une clé de type déclarée.

Un résolveur doit retourner null quand il ne reconnaît pas le contenu, pour laisser le suivant tenter sa chance. Un résolveur qui rend une page 404 lui-même court-circuite toute la chaîne. À la fin, le catch-all du projet répond notFound().

listPublicContentResolvers()

Retourne les résolveurs triés par priorité décroissante.

resolvePublicContent(segments)

Itère les résolveurs et retourne le premier { Component, props } non nul, sinon null.

resolvePublicMetadata(segments)

Même parcours pour les métadonnées. Retourne le premier metadata non nul, ce qui garde le titre cohérent avec la page effectivement rendue.

Notes

Ne jamais self-fetcher en HTTP pour résoudre du contenu. Un résolveur tourne déjà sur le serveur : il lit la base directement, via les helpers ./public que chaque module de contenu expose. Voir Frontières serveur/client.

Stockage sur globalThis via Symbol.for pour survivre au hot-reload.

Sur cette page