@lastbrain/app 0.1.16 → 0.1.18

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.
@@ -1 +1 @@
1
- {"version":3,"file":"init-app.d.ts","sourceRoot":"","sources":["../../src/scripts/init-app.ts"],"names":[],"mappings":"AAWA,UAAU,cAAc;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,OAAO,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,wBAAsB,OAAO,CAAC,OAAO,EAAE,cAAc,iBAsJpD"}
1
+ {"version":3,"file":"init-app.d.ts","sourceRoot":"","sources":["../../src/scripts/init-app.ts"],"names":[],"mappings":"AAWA,UAAU,cAAc;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,OAAO,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,wBAAsB,OAAO,CAAC,OAAO,EAAE,cAAc,iBAqJpD"}
@@ -114,15 +114,13 @@ export async function initApp(options) {
114
114
  else {
115
115
  console.log(chalk.cyan("\n📋 Prochaines étapes:"));
116
116
  console.log(chalk.white(" 1. cd " + relativePath));
117
- console.log(chalk.white(" 2. pnpm install"));
117
+ console.log(chalk.white(" 2. pnpm install (installer les dépendances)"));
118
118
  console.log(chalk.white(" 3. pnpm build:modules (générer les routes des modules)"));
119
- console.log(chalk.white(" 4. pnpm dev (démarrer le serveur de développement)"));
120
- console.log(chalk.white("\n Puis sur la page d'accueil :"));
121
- console.log(chalk.white(" 5. Cliquez sur 'Get Started'"));
122
- console.log(chalk.white(" 6. Lancez Docker Desktop"));
123
- console.log(chalk.white(" 7. Installez Supabase CLI : brew install supabase/tap/supabase"));
124
- console.log(chalk.white(" 8. Exécutez : pnpm db:init"));
125
- console.log(chalk.white(" 9. Rechargez la page\n"));
119
+ console.log(chalk.white(" 4. pnpm db:init (initialiser Supabase)"));
120
+ console.log(chalk.white(" 5. pnpm dev (démarrer le serveur)\n"));
121
+ console.log(chalk.gray("Prérequis pour Supabase :"));
122
+ console.log(chalk.white(" - Docker Desktop installé et lancé"));
123
+ console.log(chalk.white(" - Supabase CLI : brew install supabase/tap/supabase\n"));
126
124
  // Afficher la commande cd pour faciliter la copie
127
125
  console.log(chalk.gray("Pour vous déplacer dans le projet :"));
128
126
  console.log(chalk.cyan(` cd ${relativePath}\n`));
@@ -180,59 +178,9 @@ async function addDependencies(targetDir, useHeroUI, withAuth, selectedModules =
180
178
  }
181
179
  // Ajouter les dépendances HeroUI si nécessaire
182
180
  if (useHeroUI) {
183
- // Core
184
- requiredDeps["@heroui/system"] = "^2.4.23";
181
+ // Seulement le theme pour le plugin Tailwind
182
+ // Tous les composants sont déjà inclus dans @lastbrain/ui
185
183
  requiredDeps["@heroui/theme"] = "^2.4.23";
186
- requiredDeps["@heroui/react-utils"] = "^2.1.14";
187
- requiredDeps["@heroui/framer-utils"] = "^2.1.23";
188
- // Buttons & Actions
189
- requiredDeps["@heroui/button"] = "^2.2.27";
190
- requiredDeps["@heroui/link"] = "^2.2.23";
191
- // Forms
192
- requiredDeps["@heroui/input"] = "^2.4.28";
193
- requiredDeps["@heroui/checkbox"] = "^2.3.27";
194
- requiredDeps["@heroui/radio"] = "^2.3.27";
195
- requiredDeps["@heroui/select"] = "^2.4.28";
196
- requiredDeps["@heroui/switch"] = "^2.2.24";
197
- requiredDeps["@heroui/form"] = "^2.1.27";
198
- requiredDeps["@heroui/autocomplete"] = "^2.3.29";
199
- // Layout
200
- requiredDeps["@heroui/card"] = "^2.2.25";
201
- requiredDeps["@heroui/navbar"] = "^2.2.25";
202
- requiredDeps["@heroui/divider"] = "^2.2.20";
203
- requiredDeps["@heroui/spacer"] = "^2.2.21";
204
- // Navigation
205
- requiredDeps["@heroui/tabs"] = "^2.2.24";
206
- requiredDeps["@heroui/breadcrumbs"] = "^2.2.19";
207
- requiredDeps["@heroui/pagination"] = "^2.2.24";
208
- requiredDeps["@heroui/listbox"] = "^2.3.26";
209
- // Feedback
210
- requiredDeps["@heroui/spinner"] = "^2.2.24";
211
- requiredDeps["@heroui/progress"] = "^2.2.22";
212
- requiredDeps["@heroui/skeleton"] = "^2.2.17";
213
- requiredDeps["@heroui/alert"] = "^2.2.27";
214
- requiredDeps["@heroui/toast"] = "^2.0.17";
215
- // Overlays
216
- requiredDeps["@heroui/modal"] = "^2.2.24";
217
- requiredDeps["@heroui/tooltip"] = "^2.2.24";
218
- requiredDeps["@heroui/popover"] = "^2.3.27";
219
- requiredDeps["@heroui/dropdown"] = "^2.3.27";
220
- requiredDeps["@heroui/drawer"] = "^2.2.24";
221
- // Data Display
222
- requiredDeps["@heroui/avatar"] = "^2.2.22";
223
- requiredDeps["@heroui/badge"] = "^2.2.17";
224
- requiredDeps["@heroui/chip"] = "^2.2.22";
225
- requiredDeps["@heroui/code"] = "^2.2.21";
226
- requiredDeps["@heroui/image"] = "^2.2.17";
227
- requiredDeps["@heroui/kbd"] = "^2.2.22";
228
- requiredDeps["@heroui/snippet"] = "^2.2.28";
229
- requiredDeps["@heroui/table"] = "^2.2.27";
230
- requiredDeps["@heroui/user"] = "^2.2.22";
231
- requiredDeps["@heroui/accordion"] = "^2.2.24";
232
- // Utilities
233
- requiredDeps["@heroui/scroll-shadow"] = "^2.3.18";
234
- requiredDeps["@react-aria/ssr"] = "^3.9.10";
235
- requiredDeps["@react-aria/visually-hidden"] = "^3.8.28";
236
184
  // Dependencies
237
185
  requiredDeps["lucide-react"] = "^0.554.0";
238
186
  requiredDeps["framer-motion"] = "^11.18.2";
@@ -620,7 +568,12 @@ export default nextConfig;
620
568
  let tailwindConfig = "";
621
569
  if (useHeroUI) {
622
570
  // Configuration avec HeroUI
623
- tailwindConfig = `import {heroui} from "@heroui/theme"
571
+ tailwindConfig = `let heroui;
572
+ try {
573
+ heroui = require("@heroui/theme").heroui;
574
+ } catch (e) {
575
+ heroui = () => ({});
576
+ }
624
577
 
625
578
  /** @type {import('tailwindcss').Config} */
626
579
  const config = {
@@ -750,53 +703,76 @@ async function createGitIgnore(targetDir, force) {
750
703
  const gitignorePath = path.join(targetDir, ".gitignore");
751
704
  if (!fs.existsSync(gitignorePath) || force) {
752
705
  console.log(chalk.yellow("\n📝 Création de .gitignore..."));
753
- const gitignoreContent = `# Dependencies
754
- node_modules/
755
- .pnp
756
- .pnp.js
757
-
758
- # Testing
759
- coverage/
760
-
761
- # Next.js
762
- .next/
763
- out/
764
- build/
765
- dist/
766
-
767
- # Production
768
- *.log*
769
-
770
- # Misc
771
- .DS_Store
772
- *.pem
706
+ // Copier le fichier .gitignore depuis le template
707
+ const templateGitignorePath = path.join(__dirname, "../templates/gitignore/.gitignore");
708
+ if (fs.existsSync(templateGitignorePath)) {
709
+ await fs.copyFile(templateGitignorePath, gitignorePath);
710
+ }
711
+ else {
712
+ // Fallback si le template n'existe pas
713
+ const gitignoreContent = `# ===========================================
714
+ # GENERATED BY LASTBRAIN
715
+ # ===========================================
773
716
 
774
- # Debug
717
+ # Node
718
+ node_modules/
775
719
  npm-debug.log*
720
+ pnpm-debug.log*
776
721
  yarn-debug.log*
777
722
  yarn-error.log*
778
723
 
779
- # Local env files
724
+ # Environment
780
725
  .env
781
- .env*.local
782
- .env.production
783
-
784
- # Vercel
785
- .vercel
726
+ .env.*
727
+ !.env.example
786
728
 
787
- # Typescript
788
- *.tsbuildinfo
789
- next-env.d.ts
729
+ # Next.js
730
+ .next/
731
+ out/
732
+ dist/
733
+ build/
790
734
 
791
735
  # Supabase
792
736
  supabase/.temp/
737
+ supabase/functions/.netlify/
738
+ supabase/functions/node_modules/
793
739
  supabase/.branches/
794
740
 
795
- # LastBrain generated
796
- **/navigation.generated.ts
797
- **/routes.generated.ts
741
+ # Logs
742
+ logs
743
+ *.log
744
+ *.log.*
745
+
746
+ # OS / Editor
747
+ .DS_Store
748
+ Thumbs.db
749
+ .idea/
750
+ .vscode/
751
+ *.swp
752
+
753
+ # Local backups
754
+ *.sql
755
+ *.sql.zip
756
+ backup/
757
+ tmp/
758
+
759
+ # Coverage
760
+ coverage/
761
+ *.lcov
762
+
763
+ # Generated by module-build
764
+ app/navigation.generated.ts
765
+ app/routes.generated.ts
766
+ app/menu.generated.ts
767
+
768
+ # Generated app-shell overrides
769
+ app/(public)/
770
+ app/(auth)/
771
+ app/(admin)/
772
+ app/layout.tsx
798
773
  `;
799
- await fs.writeFile(gitignorePath, gitignoreContent);
774
+ await fs.writeFile(gitignorePath, gitignoreContent);
775
+ }
800
776
  console.log(chalk.green("✓ .gitignore créé"));
801
777
  }
802
778
  }
@@ -1 +1 @@
1
- {"version":3,"file":"DefaultDoc.d.ts","sourceRoot":"","sources":["../../src/templates/DefaultDoc.tsx"],"names":[],"mappings":"AAaA,wBAAgB,oBAAoB,4CAioBnC"}
1
+ {"version":3,"file":"DefaultDoc.d.ts","sourceRoot":"","sources":["../../src/templates/DefaultDoc.tsx"],"names":[],"mappings":"AAaA,wBAAgB,oBAAoB,4CAmoBnC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lastbrain/app",
3
- "version": "0.1.16",
3
+ "version": "0.1.18",
4
4
  "description": "Framework modulaire Next.js avec CLI et système de modules",
5
5
  "private": false,
6
6
  "type": "module",
@@ -154,15 +154,14 @@ export async function initApp(options: InitAppOptions) {
154
154
  } else {
155
155
  console.log(chalk.cyan("\n📋 Prochaines étapes:"));
156
156
  console.log(chalk.white(" 1. cd " + relativePath));
157
- console.log(chalk.white(" 2. pnpm install"));
157
+ console.log(chalk.white(" 2. pnpm install (installer les dépendances)"));
158
158
  console.log(chalk.white(" 3. pnpm build:modules (générer les routes des modules)"));
159
- console.log(chalk.white(" 4. pnpm dev (démarrer le serveur de développement)"));
160
- console.log(chalk.white("\n Puis sur la page d'accueil :"));
161
- console.log(chalk.white(" 5. Cliquez sur 'Get Started'"));
162
- console.log(chalk.white(" 6. Lancez Docker Desktop"));
163
- console.log(chalk.white(" 7. Installez Supabase CLI : brew install supabase/tap/supabase"));
164
- console.log(chalk.white(" 8. Exécutez : pnpm db:init"));
165
- console.log(chalk.white(" 9. Rechargez la page\n"));
159
+ console.log(chalk.white(" 4. pnpm db:init (initialiser Supabase)"));
160
+ console.log(chalk.white(" 5. pnpm dev (démarrer le serveur)\n"));
161
+
162
+ console.log(chalk.gray("Prérequis pour Supabase :"));
163
+ console.log(chalk.white(" - Docker Desktop installé et lancé"));
164
+ console.log(chalk.white(" - Supabase CLI : brew install supabase/tap/supabase\n"));
166
165
 
167
166
  // Afficher la commande cd pour faciliter la copie
168
167
  console.log(chalk.gray("Pour vous déplacer dans le projet :"));
@@ -236,67 +235,9 @@ async function addDependencies(
236
235
 
237
236
  // Ajouter les dépendances HeroUI si nécessaire
238
237
  if (useHeroUI) {
239
- // Core
240
- requiredDeps["@heroui/system"] = "^2.4.23";
238
+ // Seulement le theme pour le plugin Tailwind
239
+ // Tous les composants sont déjà inclus dans @lastbrain/ui
241
240
  requiredDeps["@heroui/theme"] = "^2.4.23";
242
- requiredDeps["@heroui/react-utils"] = "^2.1.14";
243
- requiredDeps["@heroui/framer-utils"] = "^2.1.23";
244
-
245
- // Buttons & Actions
246
- requiredDeps["@heroui/button"] = "^2.2.27";
247
- requiredDeps["@heroui/link"] = "^2.2.23";
248
-
249
- // Forms
250
- requiredDeps["@heroui/input"] = "^2.4.28";
251
- requiredDeps["@heroui/checkbox"] = "^2.3.27";
252
- requiredDeps["@heroui/radio"] = "^2.3.27";
253
- requiredDeps["@heroui/select"] = "^2.4.28";
254
- requiredDeps["@heroui/switch"] = "^2.2.24";
255
- requiredDeps["@heroui/form"] = "^2.1.27";
256
- requiredDeps["@heroui/autocomplete"] = "^2.3.29";
257
-
258
- // Layout
259
- requiredDeps["@heroui/card"] = "^2.2.25";
260
- requiredDeps["@heroui/navbar"] = "^2.2.25";
261
- requiredDeps["@heroui/divider"] = "^2.2.20";
262
- requiredDeps["@heroui/spacer"] = "^2.2.21";
263
-
264
- // Navigation
265
- requiredDeps["@heroui/tabs"] = "^2.2.24";
266
- requiredDeps["@heroui/breadcrumbs"] = "^2.2.19";
267
- requiredDeps["@heroui/pagination"] = "^2.2.24";
268
- requiredDeps["@heroui/listbox"] = "^2.3.26";
269
-
270
- // Feedback
271
- requiredDeps["@heroui/spinner"] = "^2.2.24";
272
- requiredDeps["@heroui/progress"] = "^2.2.22";
273
- requiredDeps["@heroui/skeleton"] = "^2.2.17";
274
- requiredDeps["@heroui/alert"] = "^2.2.27";
275
- requiredDeps["@heroui/toast"] = "^2.0.17";
276
-
277
- // Overlays
278
- requiredDeps["@heroui/modal"] = "^2.2.24";
279
- requiredDeps["@heroui/tooltip"] = "^2.2.24";
280
- requiredDeps["@heroui/popover"] = "^2.3.27";
281
- requiredDeps["@heroui/dropdown"] = "^2.3.27";
282
- requiredDeps["@heroui/drawer"] = "^2.2.24";
283
-
284
- // Data Display
285
- requiredDeps["@heroui/avatar"] = "^2.2.22";
286
- requiredDeps["@heroui/badge"] = "^2.2.17";
287
- requiredDeps["@heroui/chip"] = "^2.2.22";
288
- requiredDeps["@heroui/code"] = "^2.2.21";
289
- requiredDeps["@heroui/image"] = "^2.2.17";
290
- requiredDeps["@heroui/kbd"] = "^2.2.22";
291
- requiredDeps["@heroui/snippet"] = "^2.2.28";
292
- requiredDeps["@heroui/table"] = "^2.2.27";
293
- requiredDeps["@heroui/user"] = "^2.2.22";
294
- requiredDeps["@heroui/accordion"] = "^2.2.24";
295
-
296
- // Utilities
297
- requiredDeps["@heroui/scroll-shadow"] = "^2.3.18";
298
- requiredDeps["@react-aria/ssr"] = "^3.9.10";
299
- requiredDeps["@react-aria/visually-hidden"] = "^3.8.28";
300
241
 
301
242
  // Dependencies
302
243
  requiredDeps["lucide-react"] = "^0.554.0";
@@ -736,7 +677,12 @@ export default nextConfig;
736
677
 
737
678
  if (useHeroUI) {
738
679
  // Configuration avec HeroUI
739
- tailwindConfig = `import {heroui} from "@heroui/theme"
680
+ tailwindConfig = `let heroui;
681
+ try {
682
+ heroui = require("@heroui/theme").heroui;
683
+ } catch (e) {
684
+ heroui = () => ({});
685
+ }
740
686
 
741
687
  /** @type {import('tailwindcss').Config} */
742
688
  const config = {
@@ -872,53 +818,79 @@ async function createGitIgnore(targetDir: string, force: boolean) {
872
818
  if (!fs.existsSync(gitignorePath) || force) {
873
819
  console.log(chalk.yellow("\n📝 Création de .gitignore..."));
874
820
 
875
- const gitignoreContent = `# Dependencies
876
- node_modules/
877
- .pnp
878
- .pnp.js
879
-
880
- # Testing
881
- coverage/
882
-
883
- # Next.js
884
- .next/
885
- out/
886
- build/
887
- dist/
888
-
889
- # Production
890
- *.log*
821
+ // Copier le fichier .gitignore depuis le template
822
+ const templateGitignorePath = path.join(
823
+ __dirname,
824
+ "../templates/gitignore/.gitignore"
825
+ );
891
826
 
892
- # Misc
893
- .DS_Store
894
- *.pem
827
+ if (fs.existsSync(templateGitignorePath)) {
828
+ await fs.copyFile(templateGitignorePath, gitignorePath);
829
+ } else {
830
+ // Fallback si le template n'existe pas
831
+ const gitignoreContent = `# ===========================================
832
+ # GENERATED BY LASTBRAIN
833
+ # ===========================================
895
834
 
896
- # Debug
835
+ # Node
836
+ node_modules/
897
837
  npm-debug.log*
838
+ pnpm-debug.log*
898
839
  yarn-debug.log*
899
840
  yarn-error.log*
900
841
 
901
- # Local env files
842
+ # Environment
902
843
  .env
903
- .env*.local
904
- .env.production
905
-
906
- # Vercel
907
- .vercel
844
+ .env.*
845
+ !.env.example
908
846
 
909
- # Typescript
910
- *.tsbuildinfo
911
- next-env.d.ts
847
+ # Next.js
848
+ .next/
849
+ out/
850
+ dist/
851
+ build/
912
852
 
913
853
  # Supabase
914
854
  supabase/.temp/
855
+ supabase/functions/.netlify/
856
+ supabase/functions/node_modules/
915
857
  supabase/.branches/
916
858
 
917
- # LastBrain generated
918
- **/navigation.generated.ts
919
- **/routes.generated.ts
859
+ # Logs
860
+ logs
861
+ *.log
862
+ *.log.*
863
+
864
+ # OS / Editor
865
+ .DS_Store
866
+ Thumbs.db
867
+ .idea/
868
+ .vscode/
869
+ *.swp
870
+
871
+ # Local backups
872
+ *.sql
873
+ *.sql.zip
874
+ backup/
875
+ tmp/
876
+
877
+ # Coverage
878
+ coverage/
879
+ *.lcov
880
+
881
+ # Generated by module-build
882
+ app/navigation.generated.ts
883
+ app/routes.generated.ts
884
+ app/menu.generated.ts
885
+
886
+ # Generated app-shell overrides
887
+ app/(public)/
888
+ app/(auth)/
889
+ app/(admin)/
890
+ app/layout.tsx
920
891
  `;
921
- await fs.writeFile(gitignorePath, gitignoreContent);
892
+ await fs.writeFile(gitignorePath, gitignoreContent);
893
+ }
922
894
  console.log(chalk.green("✓ .gitignore créé"));
923
895
  }
924
896
  }
@@ -381,17 +381,13 @@ where email = 'votre@email.com';`}
381
381
  </Snippet>
382
382
  </div>
383
383
  <div>
384
- <h3 className="text-lg font-semibold mb-2">
385
- Build de production
386
- </h3>
384
+ <h3 className="text-lg font-semibold mb-2">Build de production</h3>
387
385
  <Snippet symbol="" hideSymbol className="text-sm">
388
386
  pnpm build
389
387
  </Snippet>
390
388
  </div>
391
389
  <div>
392
- <h3 className="text-lg font-semibold mb-2">
393
- Développer un module
394
- </h3>
390
+ <h3 className="text-lg font-semibold mb-2">Développer un module</h3>
395
391
  <Snippet symbol="" hideSymbol className="text-sm mb-2">
396
392
  cd packages/module-auth
397
393
  </Snippet>
@@ -449,7 +445,9 @@ where email = 'votre@email.com';`}
449
445
  </CardHeader>
450
446
  <CardBody className="space-y-4">
451
447
  <div>
452
- <h3 className="text-lg font-semibold mb-2">1. Modifier un module</h3>
448
+ <h3 className="text-lg font-semibold mb-2">
449
+ 1. Modifier un module
450
+ </h3>
453
451
  <p className="text-sm text-slate-600 dark:text-slate-400 mb-2">
454
452
  Éditez les fichiers dans{" "}
455
453
  <code className="px-2 py-1 bg-slate-100 dark:bg-slate-800 rounded">
@@ -458,7 +456,9 @@ where email = 'votre@email.com';`}
458
456
  </p>
459
457
  </div>
460
458
  <div>
461
- <h3 className="text-lg font-semibold mb-2">2. Compiler le module</h3>
459
+ <h3 className="text-lg font-semibold mb-2">
460
+ 2. Compiler le module
461
+ </h3>
462
462
  <Snippet symbol="" hideSymbol className="text-sm mb-2">
463
463
  cd packages/module-auth
464
464
  </Snippet>
@@ -467,7 +467,9 @@ where email = 'votre@email.com';`}
467
467
  </Snippet>
468
468
  </div>
469
469
  <div>
470
- <h3 className="text-lg font-semibold mb-2">3. Régénérer les pages</h3>
470
+ <h3 className="text-lg font-semibold mb-2">
471
+ 3. Régénérer les pages
472
+ </h3>
471
473
  <Snippet symbol="" hideSymbol className="text-sm mb-2">
472
474
  cd apps/my-app
473
475
  </Snippet>