@lastbrain/app 0.1.21 → 0.1.23

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.
@@ -146,34 +146,76 @@ async function ensurePackageJson(targetDir, projectName) {
146
146
  console.log(chalk.green("✓ package.json existe"));
147
147
  }
148
148
  }
149
+ /**
150
+ * Récupère les versions actuelles des packages LastBrain depuis npm ou le monorepo
151
+ */
152
+ function getLastBrainVersions(targetDir) {
153
+ const targetIsInMonorepo = fs.existsSync(path.join(targetDir, "../../../packages/core/package.json")) ||
154
+ fs.existsSync(path.join(targetDir, "../../packages/core/package.json"));
155
+ if (targetIsInMonorepo) {
156
+ // Dans le monorepo, utiliser workspace:*
157
+ return {
158
+ app: "workspace:*",
159
+ core: "workspace:*",
160
+ ui: "workspace:*",
161
+ moduleAuth: "workspace:*",
162
+ };
163
+ }
164
+ // Hors monorepo, lire les versions depuis les package.json locaux (plus fiable que "latest")
165
+ try {
166
+ // Essayer de lire depuis node_modules/@lastbrain (si init-app a été installé)
167
+ const appPkgPath = path.join(__dirname, "../../package.json");
168
+ if (fs.existsSync(appPkgPath)) {
169
+ const appPkg = JSON.parse(fs.readFileSync(appPkgPath, "utf-8"));
170
+ const appVersion = `^${appPkg.version}`;
171
+ // Lire les versions des dépendances de @lastbrain/app
172
+ const coreDep = appPkg.dependencies?.["@lastbrain/core"];
173
+ const uiDep = appPkg.dependencies?.["@lastbrain/ui"];
174
+ const authDep = appPkg.dependencies?.["@lastbrain/module-auth"];
175
+ return {
176
+ app: appVersion,
177
+ core: coreDep || appVersion,
178
+ ui: uiDep || appVersion,
179
+ moduleAuth: authDep || appVersion,
180
+ };
181
+ }
182
+ }
183
+ catch (error) {
184
+ console.warn(chalk.yellow("⚠️ Impossible de lire les versions locales, utilisation de 'latest'"));
185
+ }
186
+ // Fallback: utiliser "latest"
187
+ return {
188
+ app: "latest",
189
+ core: "latest",
190
+ ui: "latest",
191
+ moduleAuth: "latest",
192
+ };
193
+ }
149
194
  async function addDependencies(targetDir, useHeroUI, withAuth, selectedModules = []) {
150
195
  const pkgPath = path.join(targetDir, "package.json");
151
196
  const pkg = await fs.readJson(pkgPath);
152
197
  console.log(chalk.yellow("\n📦 Configuration des dépendances..."));
153
- // Détecter si on est dans le monorepo (développement local)
154
- // Vérifier si le projet cible est à l'intérieur du monorepo
155
- const targetIsInMonorepo = fs.existsSync(path.join(targetDir, "../../../packages/core/package.json")) ||
156
- fs.existsSync(path.join(targetDir, "../../packages/core/package.json"));
157
- const latestVersion = targetIsInMonorepo ? "workspace:*" : "latest";
198
+ const versions = getLastBrainVersions(targetDir);
158
199
  // Dependencies
159
200
  const requiredDeps = {
160
201
  next: "^15.0.3",
161
202
  react: "^18.3.1",
162
203
  "react-dom": "^18.3.1",
163
- "@lastbrain/app": latestVersion,
164
- "@lastbrain/core": latestVersion,
165
- "@lastbrain/ui": latestVersion,
204
+ "@lastbrain/app": versions.app,
205
+ "@lastbrain/core": versions.core,
206
+ "@lastbrain/ui": versions.ui,
166
207
  "next-themes": "^0.4.6",
167
208
  };
168
209
  // Ajouter module-auth si demandé
169
210
  if (withAuth) {
170
- requiredDeps["@lastbrain/module-auth"] = latestVersion;
211
+ requiredDeps["@lastbrain/module-auth"] = versions.moduleAuth;
171
212
  }
172
213
  // Ajouter les autres modules sélectionnés
173
214
  for (const moduleName of selectedModules) {
174
215
  const moduleInfo = AVAILABLE_MODULES.find(m => m.name === moduleName);
175
216
  if (moduleInfo && moduleInfo.package !== "@lastbrain/module-auth") {
176
- requiredDeps[moduleInfo.package] = latestVersion;
217
+ // Pour les autres modules, utiliser "latest" ou la version depuis le package
218
+ requiredDeps[moduleInfo.package] = versions.app; // Utiliser la même version que app
177
219
  }
178
220
  }
179
221
  // Ajouter les dépendances HeroUI si nécessaire
@@ -1 +1 @@
1
- {"version":3,"file":"module-create.d.ts","sourceRoot":"","sources":["../../src/scripts/module-create.ts"],"names":[],"mappings":"AAupBA;;GAEG;AACH,wBAAsB,YAAY,kBAsIjC"}
1
+ {"version":3,"file":"module-create.d.ts","sourceRoot":"","sources":["../../src/scripts/module-create.ts"],"names":[],"mappings":"AAirBA;;GAEG;AACH,wBAAsB,YAAY,kBAsIjC"}
@@ -26,10 +26,31 @@ function parseTablesList(input) {
26
26
  .map((t) => t.trim())
27
27
  .filter((t) => t.length > 0);
28
28
  }
29
+ /**
30
+ * Récupère les versions actuelles des packages LastBrain
31
+ */
32
+ function getLastBrainPackageVersions(rootDir) {
33
+ try {
34
+ const corePackageJson = JSON.parse(fs.readFileSync(path.join(rootDir, "packages", "core", "package.json"), "utf-8"));
35
+ const uiPackageJson = JSON.parse(fs.readFileSync(path.join(rootDir, "packages", "ui", "package.json"), "utf-8"));
36
+ return {
37
+ core: `^${corePackageJson.version}`,
38
+ ui: `^${uiPackageJson.version}`,
39
+ };
40
+ }
41
+ catch (error) {
42
+ console.warn(chalk.yellow("⚠️ Impossible de lire les versions des packages, utilisation des versions par défaut"));
43
+ return {
44
+ core: "^0.1.0",
45
+ ui: "^0.1.4",
46
+ };
47
+ }
48
+ }
29
49
  /**
30
50
  * Génère le contenu du package.json
31
51
  */
32
- function generatePackageJson(moduleName, slug) {
52
+ function generatePackageJson(moduleName, slug, rootDir) {
53
+ const versions = getLastBrainPackageVersions(rootDir);
33
54
  const buildConfigExport = `./${slug}.build.config`;
34
55
  return JSON.stringify({
35
56
  name: moduleName,
@@ -38,14 +59,14 @@ function generatePackageJson(moduleName, slug) {
38
59
  type: "module",
39
60
  main: "dist/index.js",
40
61
  types: "dist/index.d.ts",
41
- files: ["dist", "supabase"],
62
+ files: ["dist", "src", "supabase"],
42
63
  scripts: {
43
64
  build: "tsc -p tsconfig.json",
44
65
  dev: "tsc -p tsconfig.json --watch",
45
66
  },
46
67
  dependencies: {
47
- "@lastbrain/core": "workspace:0.1.0",
48
- "@lastbrain/ui": "workspace:0.1.0",
68
+ "@lastbrain/core": versions.core,
69
+ "@lastbrain/ui": versions.ui,
49
70
  react: "^19.0.0",
50
71
  "lucide-react": "^0.554.0",
51
72
  "react-dom": "^19.0.0",
@@ -503,7 +524,7 @@ async function createModuleStructure(config, rootDir) {
503
524
  await fs.ensureDir(path.join(moduleDir, "supabase", "migrations"));
504
525
  // Créer package.json
505
526
  console.log(chalk.yellow(" 📄 package.json"));
506
- await fs.writeFile(path.join(moduleDir, "package.json"), generatePackageJson(config.moduleName, config.slug));
527
+ await fs.writeFile(path.join(moduleDir, "package.json"), generatePackageJson(config.moduleName, config.slug, rootDir));
507
528
  // Créer tsconfig.json
508
529
  console.log(chalk.yellow(" 📄 tsconfig.json"));
509
530
  await fs.writeFile(path.join(moduleDir, "tsconfig.json"), generateTsConfig());
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lastbrain/app",
3
- "version": "0.1.21",
3
+ "version": "0.1.23",
4
4
  "description": "Framework modulaire Next.js avec CLI et système de modules",
5
5
  "private": false,
6
6
  "type": "module",
@@ -50,7 +50,7 @@
50
50
  },
51
51
  "dependencies": {
52
52
  "@lastbrain/core": "^0.1.0",
53
- "@lastbrain/module-auth": "^0.1.1",
53
+ "@lastbrain/module-auth": "^0.1.2",
54
54
  "@lastbrain/ui": "^0.1.4",
55
55
  "@supabase/supabase-js": "^2.36.0",
56
56
  "chalk": "^5.3.0",
@@ -192,6 +192,62 @@ async function ensurePackageJson(targetDir: string, projectName: string) {
192
192
  }
193
193
  }
194
194
 
195
+ /**
196
+ * Récupère les versions actuelles des packages LastBrain depuis npm ou le monorepo
197
+ */
198
+ function getLastBrainVersions(targetDir: string): {
199
+ app: string;
200
+ core: string;
201
+ ui: string;
202
+ moduleAuth: string;
203
+ } {
204
+ const targetIsInMonorepo = fs.existsSync(path.join(targetDir, "../../../packages/core/package.json")) ||
205
+ fs.existsSync(path.join(targetDir, "../../packages/core/package.json"));
206
+
207
+ if (targetIsInMonorepo) {
208
+ // Dans le monorepo, utiliser workspace:*
209
+ return {
210
+ app: "workspace:*",
211
+ core: "workspace:*",
212
+ ui: "workspace:*",
213
+ moduleAuth: "workspace:*",
214
+ };
215
+ }
216
+
217
+ // Hors monorepo, lire les versions depuis les package.json locaux (plus fiable que "latest")
218
+ try {
219
+ // Essayer de lire depuis node_modules/@lastbrain (si init-app a été installé)
220
+ const appPkgPath = path.join(__dirname, "../../package.json");
221
+
222
+ if (fs.existsSync(appPkgPath)) {
223
+ const appPkg = JSON.parse(fs.readFileSync(appPkgPath, "utf-8"));
224
+ const appVersion = `^${appPkg.version}`;
225
+
226
+ // Lire les versions des dépendances de @lastbrain/app
227
+ const coreDep = appPkg.dependencies?.["@lastbrain/core"];
228
+ const uiDep = appPkg.dependencies?.["@lastbrain/ui"];
229
+ const authDep = appPkg.dependencies?.["@lastbrain/module-auth"];
230
+
231
+ return {
232
+ app: appVersion,
233
+ core: coreDep || appVersion,
234
+ ui: uiDep || appVersion,
235
+ moduleAuth: authDep || appVersion,
236
+ };
237
+ }
238
+ } catch (error) {
239
+ console.warn(chalk.yellow("⚠️ Impossible de lire les versions locales, utilisation de 'latest'"));
240
+ }
241
+
242
+ // Fallback: utiliser "latest"
243
+ return {
244
+ app: "latest",
245
+ core: "latest",
246
+ ui: "latest",
247
+ moduleAuth: "latest",
248
+ };
249
+ }
250
+
195
251
  async function addDependencies(
196
252
  targetDir: string,
197
253
  useHeroUI: boolean,
@@ -203,33 +259,30 @@ async function addDependencies(
203
259
 
204
260
  console.log(chalk.yellow("\n📦 Configuration des dépendances..."));
205
261
 
206
- // Détecter si on est dans le monorepo (développement local)
207
- // Vérifier si le projet cible est à l'intérieur du monorepo
208
- const targetIsInMonorepo = fs.existsSync(path.join(targetDir, "../../../packages/core/package.json")) ||
209
- fs.existsSync(path.join(targetDir, "../../packages/core/package.json"));
210
- const latestVersion = targetIsInMonorepo ? "workspace:*" : "latest";
262
+ const versions = getLastBrainVersions(targetDir);
211
263
 
212
264
  // Dependencies
213
265
  const requiredDeps: Record<string, string> = {
214
266
  next: "^15.0.3",
215
267
  react: "^18.3.1",
216
268
  "react-dom": "^18.3.1",
217
- "@lastbrain/app": latestVersion,
218
- "@lastbrain/core": latestVersion,
219
- "@lastbrain/ui": latestVersion,
269
+ "@lastbrain/app": versions.app,
270
+ "@lastbrain/core": versions.core,
271
+ "@lastbrain/ui": versions.ui,
220
272
  "next-themes": "^0.4.6",
221
273
  };
222
274
 
223
275
  // Ajouter module-auth si demandé
224
276
  if (withAuth) {
225
- requiredDeps["@lastbrain/module-auth"] = latestVersion;
277
+ requiredDeps["@lastbrain/module-auth"] = versions.moduleAuth;
226
278
  }
227
279
 
228
280
  // Ajouter les autres modules sélectionnés
229
281
  for (const moduleName of selectedModules) {
230
282
  const moduleInfo = AVAILABLE_MODULES.find(m => m.name === moduleName);
231
283
  if (moduleInfo && moduleInfo.package !== "@lastbrain/module-auth") {
232
- requiredDeps[moduleInfo.package] = latestVersion;
284
+ // Pour les autres modules, utiliser "latest" ou la version depuis le package
285
+ requiredDeps[moduleInfo.package] = versions.app; // Utiliser la même version que app
233
286
  }
234
287
  }
235
288
 
@@ -45,10 +45,36 @@ function parseTablesList(input: string): string[] {
45
45
  .filter((t) => t.length > 0);
46
46
  }
47
47
 
48
+ /**
49
+ * Récupère les versions actuelles des packages LastBrain
50
+ */
51
+ function getLastBrainPackageVersions(rootDir: string): { core: string; ui: string } {
52
+ try {
53
+ const corePackageJson = JSON.parse(
54
+ fs.readFileSync(path.join(rootDir, "packages", "core", "package.json"), "utf-8")
55
+ );
56
+ const uiPackageJson = JSON.parse(
57
+ fs.readFileSync(path.join(rootDir, "packages", "ui", "package.json"), "utf-8")
58
+ );
59
+
60
+ return {
61
+ core: `^${corePackageJson.version}`,
62
+ ui: `^${uiPackageJson.version}`,
63
+ };
64
+ } catch (error) {
65
+ console.warn(chalk.yellow("⚠️ Impossible de lire les versions des packages, utilisation des versions par défaut"));
66
+ return {
67
+ core: "^0.1.0",
68
+ ui: "^0.1.4",
69
+ };
70
+ }
71
+ }
72
+
48
73
  /**
49
74
  * Génère le contenu du package.json
50
75
  */
51
- function generatePackageJson(moduleName: string, slug: string): string {
76
+ function generatePackageJson(moduleName: string, slug: string, rootDir: string): string {
77
+ const versions = getLastBrainPackageVersions(rootDir);
52
78
  const buildConfigExport = `./${slug}.build.config`;
53
79
  return JSON.stringify(
54
80
  {
@@ -58,14 +84,14 @@ function generatePackageJson(moduleName: string, slug: string): string {
58
84
  type: "module",
59
85
  main: "dist/index.js",
60
86
  types: "dist/index.d.ts",
61
- files: ["dist", "supabase"],
87
+ files: ["dist", "src", "supabase"],
62
88
  scripts: {
63
89
  build: "tsc -p tsconfig.json",
64
90
  dev: "tsc -p tsconfig.json --watch",
65
91
  },
66
92
  dependencies: {
67
- "@lastbrain/core": "workspace:0.1.0",
68
- "@lastbrain/ui": "workspace:0.1.0",
93
+ "@lastbrain/core": versions.core,
94
+ "@lastbrain/ui": versions.ui,
69
95
  react: "^19.0.0",
70
96
  "lucide-react": "^0.554.0",
71
97
  "react-dom": "^19.0.0",
@@ -560,7 +586,7 @@ async function createModuleStructure(config: ModuleConfig, rootDir: string) {
560
586
  console.log(chalk.yellow(" 📄 package.json"));
561
587
  await fs.writeFile(
562
588
  path.join(moduleDir, "package.json"),
563
- generatePackageJson(config.moduleName, config.slug)
589
+ generatePackageJson(config.moduleName, config.slug, rootDir)
564
590
  );
565
591
 
566
592
  // Créer tsconfig.json