feat(core)!: introduce runtime extension registry and flat module conventions

BREAKING CHANGE: sup config now derives entries from package.json#exports and a server/client glob instead of manual lists; module structure follows flat + barrel convention with .server.js/.client.js runtime suffixes
This commit is contained in:
2026-04-22 14:13:30 -04:00
parent 61388f04a6
commit 0106bc4ea0
35 changed files with 917 additions and 528 deletions
+34 -8
View File
@@ -1,11 +1,37 @@
'use client';
/**
* Admin Pages Export for Next.js App Router
*
* This exports the admin client components.
* Users must create their own server component wrapper that uses protectAdmin.
*/
import { getPage } from './registry.js';
import './pages/index.client.js';
import './widgets/index.client.js';
export { default as AdminPagesClient } from './components/AdminPages.js';
export { default as AdminPagesLayout } from './components/AdminPagesLayout.js';
export default function AdminPageClient({ params, user, widgetData }) {
const parts = params?.admin || [];
const [first, second, third] = parts;
// Routes paramétrées — le registre stocke le composant sous un slug
// "namespace:form", le client y attache les bons props.
if (first === 'users' && second === 'edit' && third) {
const page = getPage('users:edit');
if (page) return <page.Component userId={third} user={user} />;
}
if (first === 'roles' && second === 'edit' && third) {
const page = getPage('roles:edit');
if (page) return <page.Component roleId={third} user={user} />;
}
if (first === 'roles' && second === 'new') {
const page = getPage('roles:edit');
if (page) return <page.Component roleId="new" user={user} />;
}
const slug = first || 'dashboard';
const page = getPage(slug) || getPage('dashboard');
if (!page) return null;
const { Component } = page;
// Le tableau de bord reçoit les données collectées côté serveur ; les
// autres pages ne connaissent pas le widget data.
if (slug === 'dashboard') {
return <Component user={user} stats={widgetData} />;
}
return <Component user={user} params={parts} />;
}