@lastbrain/app 0.1.24 → 0.1.26
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/dist/__tests__/module-registry.test.d.ts +2 -0
- package/dist/__tests__/module-registry.test.d.ts.map +1 -0
- package/dist/__tests__/module-registry.test.js +64 -0
- package/dist/app-shell/(admin)/layout.d.ts +3 -2
- package/dist/app-shell/(admin)/layout.d.ts.map +1 -1
- package/dist/app-shell/(admin)/layout.js +1 -1
- package/dist/app-shell/(auth)/layout.d.ts +3 -2
- package/dist/app-shell/(auth)/layout.d.ts.map +1 -1
- package/dist/app-shell/(auth)/layout.js +1 -1
- package/dist/app-shell/(public)/page.d.ts.map +1 -1
- package/dist/cli.js +50 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -0
- package/dist/layouts/AdminLayout.d.ts +3 -2
- package/dist/layouts/AdminLayout.d.ts.map +1 -1
- package/dist/layouts/AdminLayoutWithSidebar.d.ts +8 -0
- package/dist/layouts/AdminLayoutWithSidebar.d.ts.map +1 -0
- package/dist/layouts/AdminLayoutWithSidebar.js +9 -0
- package/dist/layouts/AppProviders.d.ts +3 -2
- package/dist/layouts/AppProviders.d.ts.map +1 -1
- package/dist/layouts/AuthLayout.d.ts +3 -2
- package/dist/layouts/AuthLayout.d.ts.map +1 -1
- package/dist/layouts/AuthLayoutWithSidebar.d.ts +8 -0
- package/dist/layouts/AuthLayoutWithSidebar.d.ts.map +1 -0
- package/dist/layouts/AuthLayoutWithSidebar.js +9 -0
- package/dist/layouts/PublicLayout.d.ts +3 -2
- package/dist/layouts/PublicLayout.d.ts.map +1 -1
- package/dist/layouts/RootLayout.d.ts +3 -2
- package/dist/layouts/RootLayout.d.ts.map +1 -1
- package/dist/scripts/db-init.js +2 -2
- package/dist/scripts/db-migrations-sync.js +5 -5
- package/dist/scripts/dev-sync.js +21 -10
- package/dist/scripts/init-app.d.ts.map +1 -1
- package/dist/scripts/init-app.js +126 -21
- package/dist/scripts/module-add.d.ts.map +1 -1
- package/dist/scripts/module-add.js +20 -7
- package/dist/scripts/module-build.d.ts.map +1 -1
- package/dist/scripts/module-build.js +285 -30
- package/dist/scripts/module-create.d.ts.map +1 -1
- package/dist/scripts/module-create.js +25 -15
- package/dist/scripts/module-remove.d.ts.map +1 -1
- package/dist/scripts/module-remove.js +24 -11
- package/dist/scripts/script-runner.d.ts +5 -0
- package/dist/scripts/script-runner.d.ts.map +1 -0
- package/dist/scripts/script-runner.js +25 -0
- package/dist/styles.css +1 -1
- package/dist/templates/DefaultDoc.js +1 -7
- package/dist/templates/DocPage.d.ts.map +1 -1
- package/dist/templates/DocPage.js +14 -14
- package/dist/templates/components/AppAside.d.ts +6 -0
- package/dist/templates/components/AppAside.d.ts.map +1 -0
- package/dist/templates/components/AppAside.js +9 -0
- package/dist/templates/layouts/admin-layout.d.ts +4 -0
- package/dist/templates/layouts/admin-layout.d.ts.map +1 -0
- package/dist/templates/layouts/admin-layout.js +6 -0
- package/dist/templates/layouts/auth-layout.d.ts +4 -0
- package/dist/templates/layouts/auth-layout.d.ts.map +1 -0
- package/dist/templates/layouts/auth-layout.js +6 -0
- package/package.json +2 -1
- package/src/__tests__/module-registry.test.ts +74 -0
- package/src/app-shell/(admin)/layout.tsx +5 -3
- package/src/app-shell/(auth)/layout.tsx +5 -3
- package/src/app-shell/(public)/page.tsx +6 -2
- package/src/auth/useAuthSession.ts +1 -1
- package/src/cli.ts +51 -1
- package/src/index.ts +6 -0
- package/src/layouts/AdminLayout.tsx +1 -3
- package/src/layouts/AdminLayoutWithSidebar.tsx +35 -0
- package/src/layouts/AppProviders.tsx +3 -5
- package/src/layouts/AuthLayout.tsx +1 -3
- package/src/layouts/AuthLayoutWithSidebar.tsx +35 -0
- package/src/layouts/PublicLayout.tsx +1 -3
- package/src/layouts/RootLayout.tsx +1 -2
- package/src/scripts/db-init.ts +13 -8
- package/src/scripts/db-migrations-sync.ts +4 -4
- package/src/scripts/dev-sync.ts +49 -18
- package/src/scripts/init-app.ts +246 -73
- package/src/scripts/module-add.ts +49 -23
- package/src/scripts/module-build.ts +393 -88
- package/src/scripts/module-create.ts +85 -49
- package/src/scripts/module-remove.ts +116 -57
- package/src/scripts/readme-build.ts +2 -2
- package/src/scripts/script-runner.ts +28 -0
- package/src/templates/AuthGuidePage.tsx +1 -1
- package/src/templates/DefaultDoc.tsx +7 -7
- package/src/templates/DocPage.tsx +74 -46
package/dist/scripts/init-app.js
CHANGED
|
@@ -38,6 +38,12 @@ export async function initApp(options) {
|
|
|
38
38
|
withAuth = selectedModules.includes("auth");
|
|
39
39
|
console.log();
|
|
40
40
|
}
|
|
41
|
+
else if (!interactive) {
|
|
42
|
+
// En mode non-interactif, installer auth et ai par défaut
|
|
43
|
+
selectedModules.push("auth", "ai");
|
|
44
|
+
withAuth = true;
|
|
45
|
+
console.log(chalk.blue("📦 Modules installés par défaut : Authentication, AI Generation\n"));
|
|
46
|
+
}
|
|
41
47
|
// Créer le dossier s'il n'existe pas
|
|
42
48
|
await fs.ensureDir(targetDir);
|
|
43
49
|
// 1. Vérifier/créer package.json
|
|
@@ -58,7 +64,10 @@ export async function initApp(options) {
|
|
|
58
64
|
// 8. Ajouter les scripts NPM
|
|
59
65
|
await addScriptsToPackageJson(targetDir);
|
|
60
66
|
// 9. Enregistrer les modules sélectionnés
|
|
61
|
-
if (withAuth
|
|
67
|
+
if (withAuth && !selectedModules.includes("auth")) {
|
|
68
|
+
selectedModules.push("auth");
|
|
69
|
+
}
|
|
70
|
+
if (selectedModules.length > 0) {
|
|
62
71
|
await saveModulesConfig(targetDir, selectedModules, withAuth);
|
|
63
72
|
}
|
|
64
73
|
console.log(chalk.green("\n✅ Application LastBrain initialisée avec succès!\n"));
|
|
@@ -80,6 +89,14 @@ export async function initApp(options) {
|
|
|
80
89
|
console.log(chalk.yellow("🔧 Génération des routes des modules...\n"));
|
|
81
90
|
execSync("pnpm build:modules", { cwd: targetDir, stdio: "inherit" });
|
|
82
91
|
console.log(chalk.green("\n✓ Routes des modules générées\n"));
|
|
92
|
+
console.log(chalk.yellow("🗄️ Initialisation de la base de données...\n"));
|
|
93
|
+
try {
|
|
94
|
+
execSync("pnpm db:init", { cwd: targetDir, stdio: "inherit" });
|
|
95
|
+
console.log(chalk.green("\n✓ Base de données initialisée\n"));
|
|
96
|
+
}
|
|
97
|
+
catch (dbError) {
|
|
98
|
+
console.log(chalk.yellow("\n⚠️ Erreur d'initialisation de la DB (normal si Supabase pas configuré)\n"));
|
|
99
|
+
}
|
|
83
100
|
// Détecter le port (par défaut 3000 pour Next.js)
|
|
84
101
|
const port = 3000;
|
|
85
102
|
const url = `http://127.0.0.1:${port}`;
|
|
@@ -92,24 +109,29 @@ export async function initApp(options) {
|
|
|
92
109
|
console.log(chalk.white(" 4. Exécutez : pnpm db:init"));
|
|
93
110
|
console.log(chalk.white(" 5. Rechargez la page\n"));
|
|
94
111
|
// Ouvrir le navigateur
|
|
95
|
-
const openCommand = process.platform === "darwin"
|
|
112
|
+
const openCommand = process.platform === "darwin"
|
|
113
|
+
? "open"
|
|
114
|
+
: process.platform === "win32"
|
|
115
|
+
? "start"
|
|
116
|
+
: "xdg-open";
|
|
96
117
|
setTimeout(() => {
|
|
97
118
|
try {
|
|
98
119
|
execSync(`${openCommand} ${url}`, { stdio: "ignore" });
|
|
99
120
|
}
|
|
100
|
-
catch
|
|
121
|
+
catch {
|
|
101
122
|
// Ignorer les erreurs d'ouverture du navigateur
|
|
102
123
|
}
|
|
103
124
|
}, 2000);
|
|
104
125
|
// Lancer pnpm dev
|
|
105
126
|
execSync("pnpm dev", { cwd: targetDir, stdio: "inherit" });
|
|
106
127
|
}
|
|
107
|
-
catch
|
|
128
|
+
catch {
|
|
108
129
|
console.error(chalk.red("\n❌ Erreur lors du lancement\n"));
|
|
109
130
|
console.log(chalk.cyan("\nVous pouvez lancer manuellement avec :"));
|
|
110
131
|
console.log(chalk.white(` cd ${relativePath}`));
|
|
111
132
|
console.log(chalk.white(" pnpm install"));
|
|
112
133
|
console.log(chalk.white(" pnpm build:modules"));
|
|
134
|
+
console.log(chalk.white(" pnpm db:init"));
|
|
113
135
|
console.log(chalk.white(" pnpm dev\n"));
|
|
114
136
|
}
|
|
115
137
|
}
|
|
@@ -118,6 +140,8 @@ export async function initApp(options) {
|
|
|
118
140
|
console.log(chalk.white(" 1. cd " + relativePath));
|
|
119
141
|
console.log(chalk.white(" 2. pnpm install (installer les dépendances)"));
|
|
120
142
|
console.log(chalk.white(" 3. pnpm build:modules (générer les routes des modules)"));
|
|
143
|
+
console.log(chalk.white(" 4. pnpm db:init (initialiser la base de données)"));
|
|
144
|
+
console.log(chalk.white(" 5. pnpm dev (lancer le serveur)"));
|
|
121
145
|
console.log(chalk.white(" 4. pnpm db:init (initialiser Supabase)"));
|
|
122
146
|
console.log(chalk.white(" 5. pnpm dev (démarrer le serveur)\n"));
|
|
123
147
|
console.log(chalk.gray("Prérequis pour Supabase :"));
|
|
@@ -182,7 +206,7 @@ function getLastBrainVersions(targetDir) {
|
|
|
182
206
|
};
|
|
183
207
|
}
|
|
184
208
|
}
|
|
185
|
-
catch
|
|
209
|
+
catch {
|
|
186
210
|
console.warn(chalk.yellow("⚠️ Impossible de lire les versions locales, utilisation de 'latest'"));
|
|
187
211
|
}
|
|
188
212
|
// Fallback: utiliser "latest"
|
|
@@ -214,7 +238,7 @@ async function addDependencies(targetDir, useHeroUI, withAuth, selectedModules =
|
|
|
214
238
|
}
|
|
215
239
|
// Ajouter les autres modules sélectionnés
|
|
216
240
|
for (const moduleName of selectedModules) {
|
|
217
|
-
const moduleInfo = AVAILABLE_MODULES.find(m => m.name === moduleName);
|
|
241
|
+
const moduleInfo = AVAILABLE_MODULES.find((m) => m.name === moduleName);
|
|
218
242
|
if (moduleInfo && moduleInfo.package !== "@lastbrain/module-auth") {
|
|
219
243
|
// Pour les autres modules, utiliser "latest" ou la version depuis le package
|
|
220
244
|
requiredDeps[moduleInfo.package] = versions.app; // Utiliser la même version que app
|
|
@@ -223,6 +247,7 @@ async function addDependencies(targetDir, useHeroUI, withAuth, selectedModules =
|
|
|
223
247
|
// Ajouter les dépendances HeroUI si nécessaire
|
|
224
248
|
if (useHeroUI) {
|
|
225
249
|
// Tous les packages HeroUI nécessaires (car @lastbrain/ui les ré-exporte)
|
|
250
|
+
requiredDeps["@heroui/system"] = "^2.4.23";
|
|
226
251
|
requiredDeps["@heroui/theme"] = "^2.4.23";
|
|
227
252
|
requiredDeps["@heroui/accordion"] = "^2.2.24";
|
|
228
253
|
requiredDeps["@heroui/alert"] = "^2.2.27";
|
|
@@ -257,7 +282,6 @@ async function addDependencies(targetDir, useHeroUI, withAuth, selectedModules =
|
|
|
257
282
|
requiredDeps["@heroui/switch"] = "^2.2.24";
|
|
258
283
|
requiredDeps["@heroui/table"] = "^2.2.27";
|
|
259
284
|
requiredDeps["@heroui/tabs"] = "^2.2.24";
|
|
260
|
-
requiredDeps["@heroui/system"] = "^2.4.23"; // Ajout pour HeroUIProvider
|
|
261
285
|
requiredDeps["@heroui/toast"] = "^2.0.17";
|
|
262
286
|
requiredDeps["@heroui/tooltip"] = "^2.2.24";
|
|
263
287
|
requiredDeps["@heroui/user"] = "^2.2.22";
|
|
@@ -435,9 +459,12 @@ export default function NotFound() {
|
|
|
435
459
|
}
|
|
436
460
|
// Créer les routes avec leurs layouts
|
|
437
461
|
await createRoute(appDir, "admin", "admin", force);
|
|
462
|
+
await createRoute(appDir, "auth", "auth", force);
|
|
438
463
|
await createRoute(appDir, "docs", "public", force);
|
|
439
464
|
// Créer le composant AppHeader
|
|
440
465
|
await createAppHeader(targetDir, force);
|
|
466
|
+
// Créer le composant AppAside
|
|
467
|
+
await createAppAside(targetDir, force);
|
|
441
468
|
}
|
|
442
469
|
async function createRoute(appDir, routeName, layoutType, force) {
|
|
443
470
|
const routeDir = path.join(appDir, routeName);
|
|
@@ -445,11 +472,48 @@ async function createRoute(appDir, routeName, layoutType, force) {
|
|
|
445
472
|
// Layout pour la route
|
|
446
473
|
const layoutPath = path.join(routeDir, "layout.tsx");
|
|
447
474
|
if (!fs.existsSync(layoutPath) || force) {
|
|
448
|
-
|
|
449
|
-
|
|
475
|
+
let layoutContent = "";
|
|
476
|
+
if (routeName === "admin") {
|
|
477
|
+
// Layout admin avec sidebar
|
|
478
|
+
layoutContent = `import { AdminLayoutWithSidebar } from "@lastbrain/app";
|
|
479
|
+
import { menuConfig } from "../../config/menu";
|
|
480
|
+
|
|
481
|
+
export default function AdminLayout({
|
|
482
|
+
children,
|
|
483
|
+
}: {
|
|
484
|
+
children: React.ReactNode;
|
|
485
|
+
}) {
|
|
486
|
+
return (
|
|
487
|
+
<AdminLayoutWithSidebar menuConfig={menuConfig}>
|
|
488
|
+
{children}
|
|
489
|
+
</AdminLayoutWithSidebar>
|
|
490
|
+
);
|
|
491
|
+
}`;
|
|
492
|
+
}
|
|
493
|
+
else if (routeName === "auth") {
|
|
494
|
+
// Layout auth avec sidebar
|
|
495
|
+
layoutContent = `import { AuthLayoutWithSidebar } from "@lastbrain/app";
|
|
496
|
+
import { menuConfig } from "../../config/menu";
|
|
497
|
+
|
|
498
|
+
export default function AuthLayout({
|
|
499
|
+
children,
|
|
500
|
+
}: {
|
|
501
|
+
children: React.ReactNode;
|
|
502
|
+
}) {
|
|
503
|
+
return (
|
|
504
|
+
<AuthLayoutWithSidebar menuConfig={menuConfig}>
|
|
505
|
+
{children}
|
|
506
|
+
</AuthLayoutWithSidebar>
|
|
507
|
+
);
|
|
508
|
+
}`;
|
|
509
|
+
}
|
|
510
|
+
else {
|
|
511
|
+
// Layout standard pour les autres routes
|
|
512
|
+
const layoutComponent = layoutType.charAt(0).toUpperCase() + layoutType.slice(1) + "Layout";
|
|
513
|
+
layoutContent = `import { ${layoutComponent} } from "@lastbrain/app";
|
|
450
514
|
|
|
451
|
-
export default ${layoutComponent}
|
|
452
|
-
|
|
515
|
+
export default ${layoutComponent};`;
|
|
516
|
+
}
|
|
453
517
|
await fs.writeFile(layoutPath, layoutContent);
|
|
454
518
|
console.log(chalk.green(`✓ app/${routeName}/layout.tsx créé`));
|
|
455
519
|
}
|
|
@@ -544,6 +608,41 @@ export function AppHeader() {
|
|
|
544
608
|
console.log(chalk.gray(" components/AppHeader.tsx existe déjà (utilisez --force pour écraser)"));
|
|
545
609
|
}
|
|
546
610
|
}
|
|
611
|
+
async function createAppAside(targetDir, force) {
|
|
612
|
+
const componentsDir = path.join(targetDir, "components");
|
|
613
|
+
await fs.ensureDir(componentsDir);
|
|
614
|
+
const asidePath = path.join(componentsDir, "AppAside.tsx");
|
|
615
|
+
if (!fs.existsSync(asidePath) || force) {
|
|
616
|
+
const asideContent = `"use client";
|
|
617
|
+
|
|
618
|
+
import { AppAside as UIAppAside } from "@lastbrain/app";
|
|
619
|
+
import { useAuthSession } from "@lastbrain/app";
|
|
620
|
+
import { menuConfig } from "../config/menu";
|
|
621
|
+
|
|
622
|
+
interface AppAsideProps {
|
|
623
|
+
className?: string;
|
|
624
|
+
isVisible?: boolean;
|
|
625
|
+
}
|
|
626
|
+
|
|
627
|
+
export function AppAside({ className = "", isVisible = true }: AppAsideProps) {
|
|
628
|
+
const { isSuperAdmin } = useAuthSession();
|
|
629
|
+
|
|
630
|
+
return (
|
|
631
|
+
<UIAppAside
|
|
632
|
+
className={className}
|
|
633
|
+
menuConfig={menuConfig}
|
|
634
|
+
isSuperAdmin={isSuperAdmin}
|
|
635
|
+
isVisible={isVisible}
|
|
636
|
+
/>
|
|
637
|
+
);
|
|
638
|
+
}`;
|
|
639
|
+
await fs.writeFile(asidePath, asideContent);
|
|
640
|
+
console.log(chalk.green("✓ components/AppAside.tsx créé"));
|
|
641
|
+
}
|
|
642
|
+
else {
|
|
643
|
+
console.log(chalk.gray(" components/AppAside.tsx existe déjà (utilisez --force pour écraser)"));
|
|
644
|
+
}
|
|
645
|
+
}
|
|
547
646
|
async function createConfigFiles(targetDir, force, useHeroUI) {
|
|
548
647
|
console.log(chalk.yellow("\n⚙️ Création des fichiers de configuration..."));
|
|
549
648
|
// middleware.ts - Protection des routes /auth/* et /admin/*
|
|
@@ -903,21 +1002,26 @@ async function addScriptsToPackageJson(targetDir) {
|
|
|
903
1002
|
// Détecter si le projet cible est dans un workspace
|
|
904
1003
|
const targetIsInMonorepo = fs.existsSync(path.join(targetDir, "../../../packages/core/package.json")) ||
|
|
905
1004
|
fs.existsSync(path.join(targetDir, "../../packages/core/package.json"));
|
|
906
|
-
let scriptsPrefix = "
|
|
907
|
-
if (targetIsInMonorepo) {
|
|
908
|
-
//
|
|
909
|
-
scriptsPrefix = "
|
|
1005
|
+
let scriptsPrefix = "lastbrain";
|
|
1006
|
+
if (!targetIsInMonorepo) {
|
|
1007
|
+
// Hors monorepo, utiliser le chemin direct vers le CLI
|
|
1008
|
+
scriptsPrefix = "node node_modules/@lastbrain/app/dist/cli.js";
|
|
910
1009
|
}
|
|
911
1010
|
const scripts = {
|
|
1011
|
+
predev: targetIsInMonorepo
|
|
1012
|
+
? "pnpm --filter @lastbrain/core build && pnpm --filter @lastbrain/ui build && pnpm --filter @lastbrain/module-auth build && pnpm --filter @lastbrain/module-ai build"
|
|
1013
|
+
: "echo 'No prebuild needed outside monorepo'",
|
|
912
1014
|
dev: "next dev",
|
|
913
1015
|
build: "next build",
|
|
914
1016
|
start: "next start",
|
|
915
1017
|
lint: "next lint",
|
|
916
|
-
lastbrain:
|
|
917
|
-
|
|
918
|
-
|
|
919
|
-
"
|
|
920
|
-
"
|
|
1018
|
+
lastbrain: targetIsInMonorepo
|
|
1019
|
+
? "lastbrain"
|
|
1020
|
+
: "node node_modules/@lastbrain/app/dist/cli.js",
|
|
1021
|
+
"build:modules": `${scriptsPrefix} module:build`,
|
|
1022
|
+
"db:migrations:sync": `${scriptsPrefix} db:migrations:sync`,
|
|
1023
|
+
"db:init": `${scriptsPrefix} db:init`,
|
|
1024
|
+
"readme:create": `${scriptsPrefix} readme:create`,
|
|
921
1025
|
};
|
|
922
1026
|
pkg.scripts = { ...pkg.scripts, ...scripts };
|
|
923
1027
|
await fs.writeJson(pkgPath, pkg, { spaces: 2 });
|
|
@@ -929,7 +1033,8 @@ async function saveModulesConfig(targetDir, selectedModules, withAuth) {
|
|
|
929
1033
|
const modules = [];
|
|
930
1034
|
// Ajouter TOUS les modules disponibles
|
|
931
1035
|
for (const availableModule of AVAILABLE_MODULES) {
|
|
932
|
-
const isSelected = selectedModules.includes(availableModule.name) ||
|
|
1036
|
+
const isSelected = selectedModules.includes(availableModule.name) ||
|
|
1037
|
+
(withAuth && availableModule.name === "auth");
|
|
933
1038
|
// Vérifier si le module a des migrations
|
|
934
1039
|
const modulePath = path.join(targetDir, "node_modules", ...availableModule.package.split("/"));
|
|
935
1040
|
const migrationsDir = path.join(modulePath, "supabase", "migrations");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"module-add.d.ts","sourceRoot":"","sources":["../../src/scripts/module-add.ts"],"names":[],"mappings":"AAMA,UAAU,gBAAgB;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,OAAO,CAAC;IACvB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAGD,eAAO,MAAM,iBAAiB,EAAE,gBAAgB,
|
|
1
|
+
{"version":3,"file":"module-add.d.ts","sourceRoot":"","sources":["../../src/scripts/module-add.ts"],"names":[],"mappings":"AAMA,UAAU,gBAAgB;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,OAAO,CAAC;IACvB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAGD,eAAO,MAAM,iBAAiB,EAAE,gBAAgB,EAqB/C,CAAC;AAEF,wBAAsB,SAAS,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,iBAmOpE"}
|
|
@@ -58,12 +58,12 @@ export async function addModule(moduleName, targetDir) {
|
|
|
58
58
|
try {
|
|
59
59
|
execSync("pnpm install", { cwd: targetDir, stdio: "inherit" });
|
|
60
60
|
}
|
|
61
|
-
catch
|
|
61
|
+
catch {
|
|
62
62
|
console.error(chalk.red("❌ Erreur lors de l'installation"));
|
|
63
63
|
process.exit(1);
|
|
64
64
|
}
|
|
65
65
|
// 5. Copier les migrations du module
|
|
66
|
-
|
|
66
|
+
const copiedMigrationFiles = [];
|
|
67
67
|
if (module.hasMigrations) {
|
|
68
68
|
console.log(chalk.yellow("\n📋 Copie des migrations du module..."));
|
|
69
69
|
// Trouver le chemin du module installé
|
|
@@ -116,17 +116,20 @@ export async function addModule(moduleName, targetDir) {
|
|
|
116
116
|
execSync("supabase db reset", { cwd: targetDir, stdio: "inherit" });
|
|
117
117
|
console.log(chalk.green("✓ Base de données réinitialisée"));
|
|
118
118
|
}
|
|
119
|
-
catch
|
|
119
|
+
catch {
|
|
120
120
|
console.error(chalk.red("❌ Erreur lors du reset"));
|
|
121
121
|
}
|
|
122
122
|
}
|
|
123
123
|
else if (migrationAction === "push") {
|
|
124
124
|
console.log(chalk.yellow("\n⬆️ Application des nouvelles migrations..."));
|
|
125
125
|
try {
|
|
126
|
-
execSync("supabase migration up", {
|
|
126
|
+
execSync("supabase migration up", {
|
|
127
|
+
cwd: targetDir,
|
|
128
|
+
stdio: "inherit",
|
|
129
|
+
});
|
|
127
130
|
console.log(chalk.green("✓ Migrations appliquées"));
|
|
128
131
|
}
|
|
129
|
-
catch
|
|
132
|
+
catch {
|
|
130
133
|
console.error(chalk.red("❌ Erreur lors de l'application des migrations"));
|
|
131
134
|
}
|
|
132
135
|
}
|
|
@@ -147,7 +150,7 @@ export async function addModule(moduleName, targetDir) {
|
|
|
147
150
|
}
|
|
148
151
|
// Initialiser tous les modules disponibles s'ils n'existent pas
|
|
149
152
|
for (const availableModule of AVAILABLE_MODULES) {
|
|
150
|
-
const exists = modulesConfig.modules.find(m => m.package === availableModule.package);
|
|
153
|
+
const exists = modulesConfig.modules.find((m) => m.package === availableModule.package);
|
|
151
154
|
if (!exists) {
|
|
152
155
|
modulesConfig.modules.push({
|
|
153
156
|
package: availableModule.package,
|
|
@@ -174,5 +177,15 @@ export async function addModule(moduleName, targetDir) {
|
|
|
174
177
|
}
|
|
175
178
|
await fs.writeJson(modulesConfigPath, modulesConfig, { spaces: 2 });
|
|
176
179
|
console.log(chalk.green(`\n✅ Module ${module.displayName} ajouté avec succès!\n`));
|
|
177
|
-
|
|
180
|
+
// 7. Générer automatiquement les routes du module
|
|
181
|
+
console.log(chalk.yellow("🔧 Génération des routes du module..."));
|
|
182
|
+
try {
|
|
183
|
+
execSync("pnpm build:modules", { cwd: targetDir, stdio: "inherit" });
|
|
184
|
+
console.log(chalk.green("✓ Routes du module générées"));
|
|
185
|
+
}
|
|
186
|
+
catch (error) {
|
|
187
|
+
console.error(chalk.red("❌ Erreur lors de la génération des routes"));
|
|
188
|
+
console.error(chalk.gray("Vous pouvez les générer manuellement avec: pnpm build:modules"));
|
|
189
|
+
}
|
|
190
|
+
console.log(chalk.gray("\nLe serveur de développement redémarrera automatiquement.\n"));
|
|
178
191
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"module-build.d.ts","sourceRoot":"","sources":["../../src/scripts/module-build.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"module-build.d.ts","sourceRoot":"","sources":["../../src/scripts/module-build.ts"],"names":[],"mappings":"AA+vBA,wBAAsB,cAAc,kBAuCnC"}
|