@lastbrain/app 0.1.0 → 0.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +3 -6
- package/src/app-shell/(admin)/layout.tsx +0 -13
- package/src/app-shell/(auth)/layout.tsx +0 -13
- package/src/app-shell/(public)/page.tsx +0 -11
- package/src/app-shell/layout.tsx +0 -5
- package/src/app-shell/not-found.tsx +0 -28
- package/src/layouts/AdminLayout.tsx +0 -7
- package/src/layouts/AppProviders.tsx +0 -61
- package/src/layouts/AuthLayout.tsx +0 -7
- package/src/layouts/PublicLayout.tsx +0 -7
- package/src/layouts/RootLayout.tsx +0 -27
- package/src/scripts/README.md +0 -262
- package/src/scripts/db-init.ts +0 -338
- package/src/scripts/db-migrations-sync.ts +0 -86
- package/src/scripts/dev-sync.ts +0 -218
- package/src/scripts/init-app.ts +0 -1011
- package/src/scripts/module-add.ts +0 -242
- package/src/scripts/module-build.ts +0 -502
- package/src/scripts/module-create.ts +0 -809
- package/src/scripts/module-list.ts +0 -37
- package/src/scripts/module-remove.ts +0 -367
- package/src/scripts/readme-build.ts +0 -60
- package/src/templates/AuthGuidePage.tsx +0 -68
- package/src/templates/DefaultDoc.tsx +0 -462
- package/src/templates/DocPage.tsx +0 -381
- package/src/templates/DocsPageWithModules.tsx +0 -22
- package/src/templates/MigrationsGuidePage.tsx +0 -61
- package/src/templates/ModuleGuidePage.tsx +0 -71
- package/src/templates/SimpleDocPage.tsx +0 -587
- package/src/templates/SimpleHomePage.tsx +0 -385
- package/src/templates/env.example/.env.example +0 -6
- package/src/templates/migrations/20201010100000_app_base.sql +0 -228
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@lastbrain/app",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.2",
|
|
4
4
|
"description": "Framework modulaire Next.js avec CLI et système de modules",
|
|
5
5
|
"private": false,
|
|
6
6
|
"type": "module",
|
|
@@ -27,11 +27,7 @@
|
|
|
27
27
|
"lastbrain": "./dist/cli.js"
|
|
28
28
|
},
|
|
29
29
|
"files": [
|
|
30
|
-
"dist"
|
|
31
|
-
"src/app-shell",
|
|
32
|
-
"src/layouts",
|
|
33
|
-
"src/scripts",
|
|
34
|
-
"src/templates"
|
|
30
|
+
"dist"
|
|
35
31
|
],
|
|
36
32
|
"dependencies": {
|
|
37
33
|
"@lastbrain/core": "0.1.0",
|
|
@@ -41,6 +37,7 @@
|
|
|
41
37
|
"chalk": "^5.3.0",
|
|
42
38
|
"commander": "^12.1.0",
|
|
43
39
|
"fs-extra": "^11.2.0",
|
|
40
|
+
"inquirer": "^9.2.12",
|
|
44
41
|
"lucide-react": "^0.554.0",
|
|
45
42
|
"next-themes": "^0.4.6",
|
|
46
43
|
"react": "^19.0.0",
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
"use client";
|
|
2
|
-
|
|
3
|
-
import type { PropsWithChildren } from "react";
|
|
4
|
-
|
|
5
|
-
export default function AdminShellLayout({ children }: PropsWithChildren<{}>) {
|
|
6
|
-
return (
|
|
7
|
-
<div className="mx-auto max-w-5xl px-4 py-16">
|
|
8
|
-
<h1 className="text-3xl font-bold">Section Admin</h1>
|
|
9
|
-
<p className="text-slate-600">Gestion avancée des modules.</p>
|
|
10
|
-
{children}
|
|
11
|
-
</div>
|
|
12
|
-
);
|
|
13
|
-
}
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
"use client";
|
|
2
|
-
|
|
3
|
-
import type { PropsWithChildren } from "react";
|
|
4
|
-
|
|
5
|
-
export default function AuthLayout({ children }: PropsWithChildren<{}>) {
|
|
6
|
-
return (
|
|
7
|
-
<div className="mx-auto max-w-5xl px-4 py-16">
|
|
8
|
-
<h1 className="text-3xl font-bold">Section Auth</h1>
|
|
9
|
-
<p className="text-slate-600">Les pages authentifiées regroupées ici.</p>
|
|
10
|
-
{children}
|
|
11
|
-
</div>
|
|
12
|
-
);
|
|
13
|
-
}
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
"use client";
|
|
2
|
-
|
|
3
|
-
export default function PublicPage() {
|
|
4
|
-
return (
|
|
5
|
-
<div className="mx-auto max-w-3xl space-y-4 px-4 py-16 text-center">
|
|
6
|
-
<h1 className="text-3xl font-bold">Bienvenue sur LastBrain</h1>
|
|
7
|
-
<p className="text-slate-600">Cette coquille publique présente la structure par défaut.</p>
|
|
8
|
-
<button className="rounded-full bg-slate-900 px-5 py-2 text-white">Connexion</button>
|
|
9
|
-
</div>
|
|
10
|
-
);
|
|
11
|
-
}
|
package/src/app-shell/layout.tsx
DELETED
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
"use client";
|
|
2
|
-
import { Button } from "@lastbrain/ui";
|
|
3
|
-
import { useRouter } from "next/navigation";
|
|
4
|
-
|
|
5
|
-
export default function NotFound() {
|
|
6
|
-
const router = useRouter();
|
|
7
|
-
return (
|
|
8
|
-
<div className="flex min-h-screen items-center justify-center bg-background">
|
|
9
|
-
<div className="mx-auto max-w-md text-center">
|
|
10
|
-
<h1 className="mb-4 text-6xl font-bold text-foreground">404</h1>
|
|
11
|
-
<h2 className="mb-4 text-2xl font-semibold text-foreground">
|
|
12
|
-
Page non trouvée
|
|
13
|
-
</h2>
|
|
14
|
-
<p className="mb-8 text-muted-foreground">
|
|
15
|
-
La page que vous recherchez n'existe pas ou a été déplacée.
|
|
16
|
-
</p>
|
|
17
|
-
<Button
|
|
18
|
-
onPress={() => {
|
|
19
|
-
router.back();
|
|
20
|
-
}}
|
|
21
|
-
className="inline-flex items-center justify-center rounded-md bg-primary px-6 py-3 text-sm font-medium text-primary-foreground transition-colors hover:bg-primary/90"
|
|
22
|
-
>
|
|
23
|
-
Retour à l'accueil
|
|
24
|
-
</Button>
|
|
25
|
-
</div>
|
|
26
|
-
</div>
|
|
27
|
-
);
|
|
28
|
-
}
|
|
@@ -1,61 +0,0 @@
|
|
|
1
|
-
"use client";
|
|
2
|
-
|
|
3
|
-
import type { PropsWithChildren } from "react";
|
|
4
|
-
import { createContext, useContext, useMemo } from "react";
|
|
5
|
-
import { getModuleConfigs } from "../modules/module-loader.js";
|
|
6
|
-
import { Header, ToastProvider } from "@lastbrain/ui";
|
|
7
|
-
import { useAuthSession } from "../auth/useAuthSession.js";
|
|
8
|
-
import type { User } from "@supabase/supabase-js";
|
|
9
|
-
import { useRouter } from "next/navigation.js";
|
|
10
|
-
|
|
11
|
-
const ModuleContext = createContext(getModuleConfigs());
|
|
12
|
-
const NotificationContext = createContext({ messages: [] as string[] });
|
|
13
|
-
const AuthContext = createContext<{
|
|
14
|
-
user: User | null;
|
|
15
|
-
loading: boolean;
|
|
16
|
-
isSuperAdmin: boolean;
|
|
17
|
-
}>({
|
|
18
|
-
user: null,
|
|
19
|
-
loading: true,
|
|
20
|
-
isSuperAdmin: false,
|
|
21
|
-
});
|
|
22
|
-
|
|
23
|
-
export function useModules() {
|
|
24
|
-
return useContext(ModuleContext);
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
export function useNotifications() {
|
|
28
|
-
return useContext(NotificationContext);
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
export function useAuth() {
|
|
32
|
-
return useContext(AuthContext);
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
export function AppProviders({ children }: PropsWithChildren<{}>) {
|
|
36
|
-
const modules = useMemo(() => getModuleConfigs(), []);
|
|
37
|
-
const notifications = useMemo(() => ({ messages: [] as string[] }), []);
|
|
38
|
-
const { user, loading, isSuperAdmin } = useAuthSession();
|
|
39
|
-
// const router = useRouter();
|
|
40
|
-
const authValue = useMemo(
|
|
41
|
-
() => ({ user, loading, isSuperAdmin }),
|
|
42
|
-
[user, loading, isSuperAdmin]
|
|
43
|
-
);
|
|
44
|
-
|
|
45
|
-
// const handleLogout = async () => {
|
|
46
|
-
// const { signOut } = await import("../auth/authHelpers.js");
|
|
47
|
-
// await signOut();
|
|
48
|
-
// router.push("/auth/signin");
|
|
49
|
-
// };
|
|
50
|
-
|
|
51
|
-
return (
|
|
52
|
-
<AuthContext.Provider value={authValue}>
|
|
53
|
-
<ModuleContext.Provider value={modules}>
|
|
54
|
-
<NotificationContext.Provider value={notifications}>
|
|
55
|
-
{children}
|
|
56
|
-
<ToastProvider placement="top-right" toastOffset={75} />
|
|
57
|
-
</NotificationContext.Provider>
|
|
58
|
-
</ModuleContext.Provider>
|
|
59
|
-
</AuthContext.Provider>
|
|
60
|
-
);
|
|
61
|
-
}
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
"use client";
|
|
2
|
-
|
|
3
|
-
import type { PropsWithChildren } from "react";
|
|
4
|
-
import { ThemeProvider } from "next-themes";
|
|
5
|
-
import { AppProviders } from "./AppProviders.js";
|
|
6
|
-
|
|
7
|
-
// Note: L'app Next.js doit importer son propre globals.css dans son layout
|
|
8
|
-
export function RootLayout({ children }: PropsWithChildren<{}>) {
|
|
9
|
-
return (
|
|
10
|
-
<html lang="fr" suppressHydrationWarning>
|
|
11
|
-
<body className="min-h-screen">
|
|
12
|
-
<ThemeProvider
|
|
13
|
-
attribute="class"
|
|
14
|
-
defaultTheme="light"
|
|
15
|
-
enableSystem={false}
|
|
16
|
-
storageKey="lastbrain-theme"
|
|
17
|
-
>
|
|
18
|
-
<AppProviders>
|
|
19
|
-
<div className=" min-h-screen bg-slate-50 text-slate-900 dark:bg-slate-950 dark:text-white">
|
|
20
|
-
{children}
|
|
21
|
-
</div>
|
|
22
|
-
</AppProviders>
|
|
23
|
-
</ThemeProvider>
|
|
24
|
-
</body>
|
|
25
|
-
</html>
|
|
26
|
-
);
|
|
27
|
-
}
|
package/src/scripts/README.md
DELETED
|
@@ -1,262 +0,0 @@
|
|
|
1
|
-
# Scripts LastBrain
|
|
2
|
-
|
|
3
|
-
Ce répertoire contient tous les scripts utilitaires pour gérer les applications et modules LastBrain.
|
|
4
|
-
|
|
5
|
-
## Scripts disponibles
|
|
6
|
-
|
|
7
|
-
### `init-app.ts`
|
|
8
|
-
|
|
9
|
-
Initialise une nouvelle application Next.js LastBrain avec toute la structure nécessaire.
|
|
10
|
-
|
|
11
|
-
**Usage :**
|
|
12
|
-
|
|
13
|
-
```bash
|
|
14
|
-
pnpm lastbrain init [directory] [options]
|
|
15
|
-
```
|
|
16
|
-
|
|
17
|
-
**Options :**
|
|
18
|
-
|
|
19
|
-
- `--force` : Écrase les fichiers existants
|
|
20
|
-
- `--heroui` : Utilise HeroUI au lieu de NextUI
|
|
21
|
-
- `--with-auth` : Inclut le module d'authentification
|
|
22
|
-
- `--no-interactive` : Mode non-interactif
|
|
23
|
-
|
|
24
|
-
### `module-create.ts`
|
|
25
|
-
|
|
26
|
-
Crée un nouveau module dans `packages/module-{nom}` avec toute la structure nécessaire.
|
|
27
|
-
|
|
28
|
-
**Usage :**
|
|
29
|
-
|
|
30
|
-
```bash
|
|
31
|
-
pnpm lastbrain create-module
|
|
32
|
-
```
|
|
33
|
-
|
|
34
|
-
**Fonctionnalités :**
|
|
35
|
-
|
|
36
|
-
- Génération interactive du module
|
|
37
|
-
- Création des pages (public/auth/admin)
|
|
38
|
-
- Création des routes API CRUD
|
|
39
|
-
- Génération des migrations SQL
|
|
40
|
-
- Configuration complète (package.json, tsconfig.json, build.config.ts)
|
|
41
|
-
|
|
42
|
-
**Voir :** [MODULE_CREATION.md](../../../../docs/MODULE_CREATION.md)
|
|
43
|
-
|
|
44
|
-
### `module-add.ts`
|
|
45
|
-
|
|
46
|
-
Ajoute un module existant à l'application courante.
|
|
47
|
-
|
|
48
|
-
**Usage :**
|
|
49
|
-
|
|
50
|
-
```bash
|
|
51
|
-
pnpm lastbrain add-module <nom-du-module>
|
|
52
|
-
```
|
|
53
|
-
|
|
54
|
-
**Exemple :**
|
|
55
|
-
|
|
56
|
-
```bash
|
|
57
|
-
pnpm lastbrain add-module auth
|
|
58
|
-
```
|
|
59
|
-
|
|
60
|
-
**Actions effectuées :**
|
|
61
|
-
|
|
62
|
-
- Ajout de la dépendance au package.json
|
|
63
|
-
- Installation via pnpm
|
|
64
|
-
- Copie des migrations du module
|
|
65
|
-
- Application des migrations (avec choix reset/push/skip)
|
|
66
|
-
- Enregistrement dans `.lastbrain/modules.json`
|
|
67
|
-
|
|
68
|
-
### `module-remove.ts`
|
|
69
|
-
|
|
70
|
-
Supprime un module de l'application courante.
|
|
71
|
-
|
|
72
|
-
**Usage :**
|
|
73
|
-
|
|
74
|
-
```bash
|
|
75
|
-
pnpm lastbrain remove-module <nom-du-module>
|
|
76
|
-
```
|
|
77
|
-
|
|
78
|
-
**Actions effectuées :**
|
|
79
|
-
|
|
80
|
-
- Suppression de la dépendance du package.json
|
|
81
|
-
- Suppression du module de `.lastbrain/modules.json`
|
|
82
|
-
- Nettoyage via pnpm
|
|
83
|
-
|
|
84
|
-
**Note :** Les migrations ne sont pas automatiquement inversées.
|
|
85
|
-
|
|
86
|
-
### `module-list.ts`
|
|
87
|
-
|
|
88
|
-
Liste tous les modules disponibles et ceux installés dans l'application courante.
|
|
89
|
-
|
|
90
|
-
**Usage :**
|
|
91
|
-
|
|
92
|
-
```bash
|
|
93
|
-
pnpm lastbrain list-modules
|
|
94
|
-
```
|
|
95
|
-
|
|
96
|
-
**Affiche :**
|
|
97
|
-
|
|
98
|
-
- ✅ Modules installés
|
|
99
|
-
- 📦 Modules disponibles
|
|
100
|
-
|
|
101
|
-
### `module-build.ts`
|
|
102
|
-
|
|
103
|
-
Génère automatiquement les routes et pages de l'application à partir des modules installés.
|
|
104
|
-
|
|
105
|
-
**Usage :**
|
|
106
|
-
|
|
107
|
-
```bash
|
|
108
|
-
pnpm build:modules
|
|
109
|
-
```
|
|
110
|
-
|
|
111
|
-
**Actions effectuées :**
|
|
112
|
-
|
|
113
|
-
- Lecture des `build.config.ts` de tous les modules installés
|
|
114
|
-
- Génération de `app/navigation.generated.ts`
|
|
115
|
-
- Création des pages dans les sections appropriées (public/auth/admin)
|
|
116
|
-
- Création des routes API
|
|
117
|
-
|
|
118
|
-
**Note :** Utilisé par le script `dev:sync` en mode watch.
|
|
119
|
-
|
|
120
|
-
### `db-init.ts`
|
|
121
|
-
|
|
122
|
-
Initialise la base de données Supabase locale.
|
|
123
|
-
|
|
124
|
-
**Usage :**
|
|
125
|
-
|
|
126
|
-
```bash
|
|
127
|
-
pnpm db:init
|
|
128
|
-
```
|
|
129
|
-
|
|
130
|
-
**Actions effectuées :**
|
|
131
|
-
|
|
132
|
-
- Démarre Supabase local (si pas déjà démarré)
|
|
133
|
-
- Génère le fichier `.env.local` avec les clés Supabase
|
|
134
|
-
- Applique les migrations de base
|
|
135
|
-
- Reset de la base de données
|
|
136
|
-
|
|
137
|
-
### `db-migrations-sync.ts`
|
|
138
|
-
|
|
139
|
-
Synchronise les migrations de tous les modules avec la base de données.
|
|
140
|
-
|
|
141
|
-
**Usage :**
|
|
142
|
-
|
|
143
|
-
```bash
|
|
144
|
-
pnpm db:migrations:sync
|
|
145
|
-
```
|
|
146
|
-
|
|
147
|
-
**Actions effectuées :**
|
|
148
|
-
|
|
149
|
-
- Collecte toutes les migrations des modules installés
|
|
150
|
-
- Copie dans `supabase/migrations/`
|
|
151
|
-
- Applique les migrations (via `supabase db push` ou `supabase db reset`)
|
|
152
|
-
|
|
153
|
-
### `dev-sync.ts`
|
|
154
|
-
|
|
155
|
-
Lance le mode développement avec synchronisation automatique des modules.
|
|
156
|
-
|
|
157
|
-
**Usage :**
|
|
158
|
-
|
|
159
|
-
```bash
|
|
160
|
-
pnpm dev:sync
|
|
161
|
-
```
|
|
162
|
-
|
|
163
|
-
**Actions effectuées :**
|
|
164
|
-
|
|
165
|
-
- Watch des changements dans les modules
|
|
166
|
-
- Régénération automatique des routes
|
|
167
|
-
- Synchronisation des migrations
|
|
168
|
-
- Redémarrage automatique du serveur Next.js
|
|
169
|
-
|
|
170
|
-
### `readme-build.ts`
|
|
171
|
-
|
|
172
|
-
Génère la documentation README.md de l'application.
|
|
173
|
-
|
|
174
|
-
**Usage :**
|
|
175
|
-
|
|
176
|
-
```bash
|
|
177
|
-
pnpm readme:create
|
|
178
|
-
```
|
|
179
|
-
|
|
180
|
-
**Actions effectuées :**
|
|
181
|
-
|
|
182
|
-
- Analyse la structure de l'application
|
|
183
|
-
- Collecte les informations des modules installés
|
|
184
|
-
- Génère un README complet avec la documentation
|
|
185
|
-
|
|
186
|
-
## Architecture des scripts
|
|
187
|
-
|
|
188
|
-
### Dépendances communes
|
|
189
|
-
|
|
190
|
-
Tous les scripts utilisent :
|
|
191
|
-
|
|
192
|
-
- `fs-extra` : Gestion des fichiers
|
|
193
|
-
- `chalk` : Affichage coloré dans le terminal
|
|
194
|
-
- `inquirer` : Prompts interactifs (pour certains scripts)
|
|
195
|
-
- `commander` : Parsing des arguments CLI
|
|
196
|
-
|
|
197
|
-
### Structure type d'un script
|
|
198
|
-
|
|
199
|
-
```typescript
|
|
200
|
-
import fs from "fs-extra";
|
|
201
|
-
import path from "path";
|
|
202
|
-
import chalk from "chalk";
|
|
203
|
-
|
|
204
|
-
export async function monScript(targetDir: string, options?: any) {
|
|
205
|
-
console.log(chalk.blue("\n🚀 Début du script...\n"));
|
|
206
|
-
|
|
207
|
-
try {
|
|
208
|
-
// Logique du script
|
|
209
|
-
console.log(chalk.green("✅ Succès!"));
|
|
210
|
-
} catch (error) {
|
|
211
|
-
console.error(chalk.red("❌ Erreur:"), error);
|
|
212
|
-
process.exit(1);
|
|
213
|
-
}
|
|
214
|
-
}
|
|
215
|
-
```
|
|
216
|
-
|
|
217
|
-
## Ajouter un nouveau script
|
|
218
|
-
|
|
219
|
-
1. Créer le fichier TypeScript dans `src/scripts/`
|
|
220
|
-
2. Exporter une fonction principale
|
|
221
|
-
3. Ajouter la commande dans `src/cli.ts`
|
|
222
|
-
4. Ajouter éventuellement un script NPM dans `package.json`
|
|
223
|
-
5. Documenter ici et dans les docs principales
|
|
224
|
-
|
|
225
|
-
## Bonnes pratiques
|
|
226
|
-
|
|
227
|
-
1. **Messages clairs** : Utilisez `chalk` pour des messages colorés et informatifs
|
|
228
|
-
2. **Gestion d'erreurs** : Toujours catch les erreurs et donner un message explicite
|
|
229
|
-
3. **Confirmations** : Pour les opérations destructives, demander confirmation
|
|
230
|
-
4. **Idempotence** : Les scripts doivent pouvoir être exécutés plusieurs fois
|
|
231
|
-
5. **Logs** : Logger les actions importantes pour faciliter le debug
|
|
232
|
-
6. **Exit codes** : Utiliser `process.exit(1)` en cas d'erreur
|
|
233
|
-
|
|
234
|
-
## Tests
|
|
235
|
-
|
|
236
|
-
Pour tester un script :
|
|
237
|
-
|
|
238
|
-
```bash
|
|
239
|
-
# 1. Compiler le package
|
|
240
|
-
pnpm build
|
|
241
|
-
|
|
242
|
-
# 2. Exécuter la commande
|
|
243
|
-
pnpm lastbrain <commande> [args]
|
|
244
|
-
```
|
|
245
|
-
|
|
246
|
-
## Contribution
|
|
247
|
-
|
|
248
|
-
Pour contribuer un nouveau script :
|
|
249
|
-
|
|
250
|
-
1. Fork le projet
|
|
251
|
-
2. Créer une branche feature
|
|
252
|
-
3. Implémenter le script avec tests
|
|
253
|
-
4. Documenter dans ce README
|
|
254
|
-
5. Créer une Pull Request
|
|
255
|
-
|
|
256
|
-
## Support
|
|
257
|
-
|
|
258
|
-
Pour toute question ou problème :
|
|
259
|
-
|
|
260
|
-
- Ouvrir une issue sur GitHub
|
|
261
|
-
- Consulter la documentation dans `/docs`
|
|
262
|
-
- Rejoindre le Discord LastBrain
|