@lastbrain/app 2.0.21 → 2.0.24

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.
@@ -4,23 +4,23 @@
4
4
  * Mise à jour automatique lors de pnpm version:patch/minor/major
5
5
  */
6
6
  export const PACKAGE_VERSIONS = {
7
- "@lastbrain-labs/module-billing-pro": "^2.0.17",
8
- "@lastbrain-labs/module-cj-analyzer-pro": "^0.1.9",
9
- "@lastbrain-labs/module-core-cart-pro": "^2.0.17",
10
- "@lastbrain-labs/module-core-commerce-pro": "^2.0.17",
11
- "@lastbrain-labs/module-core-order-pro": "^2.0.17",
12
- "@lastbrain-labs/module-core-payment-pro": "^2.0.17",
13
- "@lastbrain-labs/module-core-product-pro": "^2.0.17",
14
- "@lastbrain-labs/module-recipes-pro": "^2.0.17",
15
- "@lastbrain-labs/module-shop-pro": "^0.1.9",
16
- "@lastbrain/app": "^2.0.20",
17
- "@lastbrain/core": "^2.0.18",
18
- "@lastbrain/module-ai": "^2.0.17",
19
- "@lastbrain/module-auth": "^2.0.18",
20
- "@lastbrain/module-legal": "^2.0.17",
21
- "@lastbrain/module-project-board": "^2.0.17",
22
- "@lastbrain/module-tasks": "^2.0.17",
23
- "@lastbrain/ui": "^2.0.18",
7
+ "@lastbrain-labs/module-billing-pro": "^2.0.18",
8
+ "@lastbrain-labs/module-cj-analyzer-pro": "^0.1.10",
9
+ "@lastbrain-labs/module-core-cart-pro": "^2.0.18",
10
+ "@lastbrain-labs/module-core-commerce-pro": "^2.0.18",
11
+ "@lastbrain-labs/module-core-order-pro": "^2.0.18",
12
+ "@lastbrain-labs/module-core-payment-pro": "^2.0.18",
13
+ "@lastbrain-labs/module-core-product-pro": "^2.0.18",
14
+ "@lastbrain-labs/module-recipes-pro": "^2.0.18",
15
+ "@lastbrain-labs/module-shop-pro": "^0.1.10",
16
+ "@lastbrain/app": "^2.0.21",
17
+ "@lastbrain/core": "^2.0.19",
18
+ "@lastbrain/module-ai": "^2.0.18",
19
+ "@lastbrain/module-auth": "^2.0.19",
20
+ "@lastbrain/module-legal": "^2.0.18",
21
+ "@lastbrain/module-project-board": "^2.0.18",
22
+ "@lastbrain/module-tasks": "^2.0.18",
23
+ "@lastbrain/ui": "^2.0.19",
24
24
  "apps/recipe": "^2.0.11",
25
- "lastbrain": "^2.0.11",
25
+ lastbrain: "^2.0.11",
26
26
  };
@@ -1 +1 @@
1
- {"version":3,"file":"module-build.d.ts","sourceRoot":"","sources":["../../src/scripts/module-build.ts"],"names":[],"mappings":"AAqxDA,wBAAsB,cAAc,kBA8GnC"}
1
+ {"version":3,"file":"module-build.d.ts","sourceRoot":"","sources":["../../src/scripts/module-build.ts"],"names":[],"mappings":"AAkyDA,wBAAsB,cAAc,kBA8GnC"}
@@ -255,6 +255,8 @@ export default function ${wrapperName}${hasDynamicParams ? "(props: Record<strin
255
255
  const dynamicParamNames = allSegments
256
256
  .filter((seg) => seg.startsWith("[") && seg.endsWith("]"))
257
257
  .map((seg) => seg.slice(1, -1)); // Enlève les []
258
+ // Détecter si le module path lui-même a des params dynamiques (pas seulement [lang])
259
+ const moduleHasDynamicParams = segments.some((seg) => seg.startsWith("[") && seg.endsWith("]"));
258
260
  // Générer le type des params si nécessaire
259
261
  const paramsType = dynamicParamNames.length > 0
260
262
  ? `{ ${dynamicParamNames.map((name) => `${name}: string`).join("; ")} }`
@@ -262,16 +264,20 @@ export default function ${wrapperName}${hasDynamicParams ? "(props: Record<strin
262
264
  const propsSignature = hasDynamicParams && paramsType
263
265
  ? `({\n params,\n}: {\n params: Promise<${paramsType}>;\n})`
264
266
  : "()";
265
- // Les composants utilisent useParams() en interne, on ne passe jamais params en props
266
- // On fait juste l'unwrap pour Next.js 15 si des params existent
267
- const awaitParams = hasDynamicParams
267
+ // Détecter si c'est un Server Component (entryPoint: "server")
268
+ const isServerComponent = page.entryPoint === "server";
269
+ // Les Server Components reçoivent params en props SEULEMENT si le module lui-même a des params
270
+ // Les Client Components utilisent useParams() en interne
271
+ const componentProps = isServerComponent && moduleHasDynamicParams ? "params={params}" : "";
272
+ // Si params existe mais n'est pas passé au composant, on doit le unwrap quand même
273
+ const awaitParams = hasDynamicParams && !componentProps
268
274
  ? "await params; // Unwrap params for Next.js 15\n "
269
275
  : "";
270
276
  content = `// GENERATED BY LASTBRAIN MODULE BUILD
271
277
  import { ${page.componentExport} } from "${importPath}";
272
278
  ${page.metadataExport ? `\nexport { ${page.metadataExport} as generateMetadata } from "${importPath}";\n` : ""}
273
279
  export default ${hasDynamicParams ? "async " : ""}function ${wrapperName}${propsSignature} {
274
- ${awaitParams}return <${page.componentExport} />;
280
+ ${awaitParams}return <${page.componentExport} ${componentProps} />;
275
281
  }
276
282
  `;
277
283
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lastbrain/app",
3
- "version": "2.0.21",
3
+ "version": "2.0.24",
4
4
  "description": "Framework modulaire Next.js avec CLI et système de modules",
5
5
  "private": false,
6
6
  "type": "module",
@@ -24,7 +24,8 @@
24
24
  "directory": "packages/app"
25
25
  },
26
26
  "publishConfig": {
27
- "access": "public"
27
+ "access": "public",
28
+ "registry": "https://registry.npmjs.org"
28
29
  },
29
30
  "bin": {
30
31
  "lastbrain": "./dist/cli.js"
@@ -50,9 +51,28 @@
50
51
  "default": "./dist/i18n/server-lang.js"
51
52
  }
52
53
  },
54
+ "scripts": {
55
+ "dev": "tsc -p tsconfig.json --watch",
56
+ "build": "tsc -p tsconfig.json && npm run build:css && npm run copy:templates && chmod +x dist/cli.js 2>/dev/null || true",
57
+ "build:css": "NODE_ENV=production pnpm exec postcss ./src/styles.css -o ./dist/styles.css",
58
+ "copy:templates": "mkdir -p dist/templates/migrations dist/templates/env.example dist/templates/gitignore && (cp src/templates/migrations/* dist/templates/migrations/ 2>/dev/null || true) && (cp src/templates/env.example/.env.example dist/templates/env.example/ 2>/dev/null || true) && (cp src/templates/gitignore/.gitignore dist/templates/gitignore/ 2>/dev/null || true)",
59
+ "lint": "eslint .",
60
+ "prepublishOnly": "if [ -z \"$CI\" ]; then node ../../scripts/pre-publish.js && npm run build; fi",
61
+ "module:build": "node dist/scripts/module-build.js",
62
+ "module:create": "node dist/scripts/module-create.js",
63
+ "module:add": "node dist/scripts/module-add.js",
64
+ "module:remove": "node dist/scripts/module-remove.js",
65
+ "module:list": "node dist/scripts/module-list.js",
66
+ "build:modules": "node dist/scripts/module-build.js",
67
+ "db:migrations:sync": "node dist/scripts/db-migrations-sync.js",
68
+ "db:init": "node dist/scripts/db-init.js",
69
+ "readme:create": "node dist/scripts/readme-build.js",
70
+ "dev:shell": "next dev ./src/app-shell -p 3001",
71
+ "dev:sync": "node dist/scripts/dev-sync.js"
72
+ },
53
73
  "dependencies": {
54
- "@lastbrain/core": "^2.0.19",
55
- "@lastbrain/ui": "^2.0.19",
74
+ "@lastbrain/core": "^2.0.20",
75
+ "@lastbrain/ui": "^2.0.20",
56
76
  "@supabase/supabase-js": "^2.84.0",
57
77
  "chalk": "^5.3.0",
58
78
  "commander": "^14.0.2",
@@ -81,23 +101,5 @@
81
101
  "postcss-cli": "^11.0.0",
82
102
  "tailwindcss": "^4.1.17",
83
103
  "typescript": "^5.4.0"
84
- },
85
- "scripts": {
86
- "dev": "tsc -p tsconfig.json --watch",
87
- "build": "tsc -p tsconfig.json && npm run build:css && npm run copy:templates && chmod +x dist/cli.js 2>/dev/null || true",
88
- "build:css": "NODE_ENV=production pnpm exec postcss ./src/styles.css -o ./dist/styles.css",
89
- "copy:templates": "mkdir -p dist/templates/migrations dist/templates/env.example dist/templates/gitignore && (cp src/templates/migrations/* dist/templates/migrations/ 2>/dev/null || true) && (cp src/templates/env.example/.env.example dist/templates/env.example/ 2>/dev/null || true) && (cp src/templates/gitignore/.gitignore dist/templates/gitignore/ 2>/dev/null || true)",
90
- "lint": "eslint .",
91
- "module:build": "node dist/scripts/module-build.js",
92
- "module:create": "node dist/scripts/module-create.js",
93
- "module:add": "node dist/scripts/module-add.js",
94
- "module:remove": "node dist/scripts/module-remove.js",
95
- "module:list": "node dist/scripts/module-list.js",
96
- "build:modules": "node dist/scripts/module-build.js",
97
- "db:migrations:sync": "node dist/scripts/db-migrations-sync.js",
98
- "db:init": "node dist/scripts/db-init.js",
99
- "readme:create": "node dist/scripts/readme-build.js",
100
- "dev:shell": "next dev ./src/app-shell -p 3001",
101
- "dev:sync": "node dist/scripts/dev-sync.js"
102
104
  }
103
- }
105
+ }
@@ -5,23 +5,23 @@
5
5
  */
6
6
 
7
7
  export const PACKAGE_VERSIONS: Record<string, string> = {
8
- "@lastbrain-labs/module-billing-pro": "^2.0.17",
9
- "@lastbrain-labs/module-cj-analyzer-pro": "^0.1.9",
10
- "@lastbrain-labs/module-core-cart-pro": "^2.0.17",
11
- "@lastbrain-labs/module-core-commerce-pro": "^2.0.17",
12
- "@lastbrain-labs/module-core-order-pro": "^2.0.17",
13
- "@lastbrain-labs/module-core-payment-pro": "^2.0.17",
14
- "@lastbrain-labs/module-core-product-pro": "^2.0.17",
15
- "@lastbrain-labs/module-recipes-pro": "^2.0.17",
16
- "@lastbrain-labs/module-shop-pro": "^0.1.9",
17
- "@lastbrain/app": "^2.0.20",
18
- "@lastbrain/core": "^2.0.18",
19
- "@lastbrain/module-ai": "^2.0.17",
20
- "@lastbrain/module-auth": "^2.0.18",
21
- "@lastbrain/module-legal": "^2.0.17",
22
- "@lastbrain/module-project-board": "^2.0.17",
23
- "@lastbrain/module-tasks": "^2.0.17",
24
- "@lastbrain/ui": "^2.0.18",
8
+ "@lastbrain-labs/module-billing-pro": "^2.0.18",
9
+ "@lastbrain-labs/module-cj-analyzer-pro": "^0.1.10",
10
+ "@lastbrain-labs/module-core-cart-pro": "^2.0.18",
11
+ "@lastbrain-labs/module-core-commerce-pro": "^2.0.18",
12
+ "@lastbrain-labs/module-core-order-pro": "^2.0.18",
13
+ "@lastbrain-labs/module-core-payment-pro": "^2.0.18",
14
+ "@lastbrain-labs/module-core-product-pro": "^2.0.18",
15
+ "@lastbrain-labs/module-recipes-pro": "^2.0.18",
16
+ "@lastbrain-labs/module-shop-pro": "^0.1.10",
17
+ "@lastbrain/app": "^2.0.21",
18
+ "@lastbrain/core": "^2.0.19",
19
+ "@lastbrain/module-ai": "^2.0.18",
20
+ "@lastbrain/module-auth": "^2.0.19",
21
+ "@lastbrain/module-legal": "^2.0.18",
22
+ "@lastbrain/module-project-board": "^2.0.18",
23
+ "@lastbrain/module-tasks": "^2.0.18",
24
+ "@lastbrain/ui": "^2.0.19",
25
25
  "apps/recipe": "^2.0.11",
26
- "lastbrain": "^2.0.11",
26
+ lastbrain: "^2.0.11",
27
27
  };
@@ -319,6 +319,11 @@ export default function ${wrapperName}${hasDynamicParams ? "(props: Record<strin
319
319
  .filter((seg) => seg.startsWith("[") && seg.endsWith("]"))
320
320
  .map((seg) => seg.slice(1, -1)); // Enlève les []
321
321
 
322
+ // Détecter si le module path lui-même a des params dynamiques (pas seulement [lang])
323
+ const moduleHasDynamicParams = segments.some(
324
+ (seg) => seg.startsWith("[") && seg.endsWith("]")
325
+ );
326
+
322
327
  // Générer le type des params si nécessaire
323
328
  const paramsType =
324
329
  dynamicParamNames.length > 0
@@ -330,17 +335,25 @@ export default function ${wrapperName}${hasDynamicParams ? "(props: Record<strin
330
335
  ? `({\n params,\n}: {\n params: Promise<${paramsType}>;\n})`
331
336
  : "()";
332
337
 
333
- // Les composants utilisent useParams() en interne, on ne passe jamais params en props
334
- // On fait juste l'unwrap pour Next.js 15 si des params existent
335
- const awaitParams = hasDynamicParams
336
- ? "await params; // Unwrap params for Next.js 15\n "
337
- : "";
338
+ // Détecter si c'est un Server Component (entryPoint: "server")
339
+ const isServerComponent = page.entryPoint === "server";
340
+
341
+ // Les Server Components reçoivent params en props SEULEMENT si le module lui-même a des params
342
+ // Les Client Components utilisent useParams() en interne
343
+ const componentProps =
344
+ isServerComponent && moduleHasDynamicParams ? "params={params}" : "";
345
+
346
+ // Si params existe mais n'est pas passé au composant, on doit le unwrap quand même
347
+ const awaitParams =
348
+ hasDynamicParams && !componentProps
349
+ ? "await params; // Unwrap params for Next.js 15\n "
350
+ : "";
338
351
 
339
352
  content = `// GENERATED BY LASTBRAIN MODULE BUILD
340
353
  import { ${page.componentExport} } from "${importPath}";
341
354
  ${page.metadataExport ? `\nexport { ${page.metadataExport} as generateMetadata } from "${importPath}";\n` : ""}
342
355
  export default ${hasDynamicParams ? "async " : ""}function ${wrapperName}${propsSignature} {
343
- ${awaitParams}return <${page.componentExport} />;
356
+ ${awaitParams}return <${page.componentExport} ${componentProps} />;
344
357
  }
345
358
  `;
346
359
  }