nestcraftx 0.2.5 → 0.3.0

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.
Files changed (56) hide show
  1. package/AUDIT_ROADMAP.md +798 -0
  2. package/CHANGELOG.fr.md +22 -0
  3. package/CHANGELOG.md +22 -0
  4. package/CLI_USAGE.fr.md +331 -331
  5. package/CLI_USAGE.md +364 -364
  6. package/LICENSE +21 -21
  7. package/PROGRESS.md +258 -0
  8. package/bin/nestcraft.js +84 -64
  9. package/commands/demo.js +337 -330
  10. package/commands/generate.js +94 -0
  11. package/commands/generateConf.js +91 -0
  12. package/commands/help.js +29 -2
  13. package/commands/info.js +48 -48
  14. package/commands/new.js +340 -335
  15. package/commands/start.js +19 -19
  16. package/commands/test.js +7 -7
  17. package/package.json +1 -1
  18. package/utils/app-module.updater.js +96 -0
  19. package/utils/cliParser.js +88 -76
  20. package/utils/colors.js +62 -62
  21. package/utils/configs/configureDocker.js +120 -120
  22. package/utils/configs/setupCleanArchitecture.js +17 -15
  23. package/utils/configs/setupLightArchitecture.js +15 -9
  24. package/utils/file-system.js +75 -0
  25. package/utils/file-utils/saveProjectConfig.js +36 -0
  26. package/utils/fullModeInput.js +607 -607
  27. package/utils/generators/application/dtoGenerator.js +251 -0
  28. package/utils/generators/application/dtoUpdater.js +54 -0
  29. package/utils/generators/cleanModuleGenerator.js +475 -0
  30. package/utils/generators/database/setupDatabase.js +49 -0
  31. package/utils/generators/domain/entityGenerator.js +126 -0
  32. package/utils/generators/domain/entityUpdater.js +78 -0
  33. package/utils/generators/infrastructure/mapperGenerator.js +114 -0
  34. package/utils/generators/infrastructure/mapperUpdater.js +65 -0
  35. package/utils/generators/infrastructure/middlewareGenerator.js +645 -0
  36. package/utils/generators/infrastructure/mongooseSchemaGenerator.js +196 -0
  37. package/utils/generators/infrastructure/repositoryGenerator.js +334 -0
  38. package/utils/generators/lightModuleGenerator.js +131 -0
  39. package/utils/generators/presentation/controllerGenerator.js +142 -0
  40. package/utils/generators/relation/relation.engine.js +64 -0
  41. package/utils/helpers.js +109 -0
  42. package/utils/interactive/askEntityInputs.js +165 -0
  43. package/utils/loggers/logError.js +7 -7
  44. package/utils/loggers/logInfo.js +7 -7
  45. package/utils/loggers/logSuccess.js +7 -7
  46. package/utils/loggers/logWarning.js +7 -7
  47. package/utils/setups/orms/typeOrmSetup.js +630 -630
  48. package/utils/setups/setupAuth.js +33 -20
  49. package/utils/setups/setupDatabase.js +76 -75
  50. package/utils/setups/setupMongoose.js +22 -5
  51. package/utils/setups/setupPrisma.js +748 -630
  52. package/utils/shell.js +112 -32
  53. package/utils/spinner.js +57 -57
  54. package/utils/systemCheck.js +124 -124
  55. package/utils/userInput.js +357 -421
  56. package/utils/utils.js +29 -2164
package/LICENSE CHANGED
@@ -1,21 +1,21 @@
1
- MIT License
2
-
3
- Copyright (c) 2025-2026 Augustin Selete
4
-
5
- Permission is hereby granted, free of charge, to any person obtaining a copy
6
- of this software and associated documentation files (the "Software"), to deal
7
- in the Software without restriction, including without limitation the rights
8
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- copies of the Software, and to permit persons to whom the Software is
10
- furnished to do so, subject to the following conditions:
11
-
12
- The above copyright notice and this permission notice shall be included in
13
- all copies or substantial portions of the Software.
14
-
15
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
- THE SOFTWARE.
1
+ MIT License
2
+
3
+ Copyright (c) 2025-2026 Augustin Selete
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in
13
+ all copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
+ THE SOFTWARE.
package/PROGRESS.md ADDED
@@ -0,0 +1,258 @@
1
+ # ✅ NestCraftX — Suivi de Progression vers v1.0
2
+ > Fichier de check indépendant — le roadmap complet est dans `AUDIT_ROADMAP.md`
3
+ > **Ne jamais modifier `AUDIT_ROADMAP.md`** — il est la référence figée de l'audit.
4
+
5
+ ---
6
+
7
+ ## 📊 Tableau de bord
8
+
9
+ | Phase | Statut | Tickets | Complétés | Progression |
10
+ |---|---|---|---|---|
11
+ | Phase 0 — Stabilisation (v0.3.0) | ✅ Terminé | 17 | 17 | 100% |
12
+ | Phase 1 — Refactorisation (v0.4.0) | 🔵 En cours | 18 | 9 | 50% |
13
+ | Phase 2 — Qualité & Sécurité (v0.5.0) | ⏸️ En attente | 10 | 0 | 0% |
14
+ | Phase 3 — Tests & CI/CD (v0.6.0) | ⏸️ En attente | 15 | 0 | 0% |
15
+ | Phase 4 — Features (v0.7–0.9) | ⏸️ En attente | 14 | 0 | 0% |
16
+ | Phase 5 — Documentation (v0.9.x) | ⏸️ En attente | 8 | 0 | 0% |
17
+ | Phase 6 — Release v1.0 | ⏸️ En attente | 7 | 0 | 0% |
18
+ | **TOTAL** | | **89** | **26** | **29%** |
19
+
20
+ > Mis à jour : 2026-06-07
21
+
22
+ ---
23
+
24
+ ## 🔴 PHASE 0 — Stabilisation d'urgence (v0.3.0)
25
+ > Objectif : Zéro crash, zéro bug bloquant
26
+
27
+ ### 0A — Crash & Stabilité _(priorité maximale)_
28
+
29
+ | Ticket | Description | Fichier(s) | Statut | Date |
30
+ |---|---|---|---|---|
31
+ | PROD-03 | Refactoriser `runCommand` : ajouter `{ critical: boolean }` | `utils/shell.js` | ✅ Terminé | 2026-06-05 |
32
+ | PROD-01a | Dégradation gracieuse si `prisma format` échoue | `utils/setups/setupPrisma.js` | ✅ Terminé | 2026-06-05 |
33
+ | PROD-01b | Capitalisation modèles Prisma (`capitalize(from/to)`) | `utils/setups/setupPrisma.js` | ✅ Terminé | 2026-06-05 |
34
+ | PROD-01c | Déduplication FK dans le 2e pass des relations | `utils/setups/setupPrisma.js` | ✅ Terminé | 2026-06-05 |
35
+ | BUG-09 | `forEach async` → `for...of` dans setupCleanArchitecture | `utils/configs/setupCleanArchitecture.js` | ✅ Terminé | 2026-06-05 |
36
+ | BUG-01 | Unifier module system ESM/CJS (`utils.js` + `userInput.js`) | `utils/utils.js`, `utils/userInput.js` | ✅ Terminé | 2026-06-06 |
37
+
38
+ ### 0B — Comportement incorrect
39
+
40
+ | Ticket | Description | Fichier(s) | Statut | Date |
41
+ |---|---|---|---|---|
42
+ | BUG-03 | Fixer logique `hasAllLightModeFlags` / `hasAllFullModeFlags` | `commands/new.js` | ✅ Terminé | 2026-06-06 |
43
+ | BUG-06 | `setupAuth` : utiliser `inputs.packageManager` (pas `npm` hardcodé) | `utils/setups/setupAuth.js` | ✅ Terminé | 2026-06-06 |
44
+ | BUG-07 | `setupMongoose` : ne plus écraser le `.env` complet | `utils/setups/setupMongoose.js` | ✅ Terminé | 2026-06-07 |
45
+ | BUG-04 | `createFile` : vraiment ne pas écraser quand `overwrite: false` | `utils/userInput.js` | ✅ Terminé | 2026-06-07 |
46
+ | BUG-08 | Corriger regex AppModule dans `safeUpdateAppModule` | `utils/userInput.js` | ✅ Terminé | 2026-06-07 |
47
+
48
+ ### 0C — Nettoyage immédiat
49
+
50
+ | Ticket | Description | Fichier(s) | Statut | Date |
51
+ |---|---|---|---|---|
52
+ | BUG-12 | `help.js` : version dynamique depuis `package.json` | `commands/help.js` | ✅ Terminé | 2026-06-07 |
53
+ | MP-07a | Supprimer code mort dans `cliParser.js` (45 lignes) | `utils/cliParser.js` | ✅ Terminé | 2026-06-07 |
54
+ | MP-07b | Supprimer code mort dans `setupPrisma.js` (44 lignes) | `utils/setups/setupPrisma.js` | ✅ Terminé | 2026-06-07 |
55
+ | BUG-02 | `handleAuthGeneration` : implémenter ou message clair | `commands/generate.js` | ✅ Terminé | 2026-06-07 |
56
+ | BUG-11 | Retirer `console.log` debug du `RolesGuard` généré | `utils/setups/setupAuth.js` | ✅ Terminé | 2026-06-07 |
57
+ | BUG-12b | Corriger commentaire `PostMapper` hardcodé dans mapper généré | `utils/utils.js` | ✅ Terminé | 2026-06-07 |
58
+
59
+ ---
60
+
61
+ ## 🟠 PHASE 1 — Refactorisation Architecture (v0.4.0)
62
+ > Objectif : Code maintenable, testable, sans duplication
63
+
64
+ ### 1A — Découpage des gros fichiers
65
+
66
+ | Ticket | Description | Fichier(s) | Statut | Date |
67
+ |---|---|---|---|---|
68
+ | MP-01a | Extraire `generators/entity.generator.js` depuis `utils.js` | `utils/utils.js` | ✅ Terminé | 2026-06-07 |
69
+ | MP-01b | Extraire `generators/dto.generator.js` depuis `utils.js` | `utils/utils.js` | ✅ Terminé | 2026-06-07 |
70
+ | MP-01c | Extraire `generators/controller.generator.js` depuis `utils.js` | `utils/utils.js` | ✅ Terminé | 2026-06-07 |
71
+ | MP-01d | Extraire `generators/mapper.generator.js` depuis `utils.js` | `utils/utils.js` | ✅ Terminé | 2026-06-07 |
72
+ | MP-01e | Extraire `generators/service.generator.js` depuis `utils.js` | `utils/utils.js` | ✅ Terminé | 2026-06-07 |
73
+ | MP-01f | Extraire `utils/helpers.js` (capitalize, decapitalize, pluralize) | `utils/utils.js` | ✅ Terminé | 2026-06-07 |
74
+ | MP-07c | Éclater `userInput.js` → `utils/file-system.js` | `utils/userInput.js` | ✅ Terminé | 2026-06-07 |
75
+ | MP-07d | Éclater `userInput.js` → `utils/app-module.updater.js` | `utils/userInput.js` | ✅ Terminé | 2026-06-07 |
76
+ | MP-03 | Supprimer `generateDtox` (doublon de `generateDto`) | `utils/utils.js` | ✅ Terminé | 2026-06-07 |
77
+
78
+ ### 1B — Refonte du flow d'input entités (PROD-04 + PROD-05)
79
+
80
+ | Ticket | Description | Fichier(s) | Statut | Date |
81
+ |---|---|---|---|---|
82
+ | PROD-04a | Étendre modèle de champ : `unique`, `nullable`, `default` | `utils/fullModeInput.js`, `utils/lightModeInput.js` | ⬜ À faire | — |
83
+ | PROD-05 | Écran de révision d'entité (modifier, supprimer, renommer) | `utils/fullModeInput.js`, `utils/lightModeInput.js` | ⬜ À faire | — |
84
+ | PROD-04b | Refonte state-based : `EntityBuilder` navigable | `utils/fullModeInput.js` | ⬜ À faire | — |
85
+ | MP-02 | Dédupliquer `addCustomEntities` et `addRelations` | `utils/fullModeInput.js`, `utils/lightModeInput.js` | ⬜ À faire | — |
86
+
87
+ ### 1C — Architecture générale
88
+
89
+ | Ticket | Description | Fichier(s) | Statut | Date |
90
+ |---|---|---|---|---|
91
+ | MA-05 | Extraire flow commun `demo.js` → partager avec `new.js` | `commands/demo.js`, `commands/new.js` | ⬜ À faire | — |
92
+ | MP-04 | Remplacer `execSync` par `execa` avec timeout | `utils/shell.js` | ⬜ À faire | — |
93
+ | MA-01 | Mécanisme de rapport final (accumuler warnings, afficher en bloc) | `utils/shell.js`, `commands/new.js` | ⬜ À faire | — |
94
+ | MA-02 | Isoler `process.chdir` — vérifier CWD avant chaque I/O | `utils/setups/projectSetup.js` | ⬜ À faire | — |
95
+ | DRY-01 | Ajouter `--dry-run` flag (simuler sans écrire) | `bin/nestcraft.js`, `commands/new.js` | ⬜ À faire | — |
96
+
97
+ ---
98
+
99
+ ## 🟠 PHASE 2 — Qualité & Sécurité (v0.5.0)
100
+ > Objectif : Code généré sécurisé et professionnel
101
+
102
+ ### 2A — Sécurité du code généré
103
+
104
+ | Ticket | Description | Fichier(s) | Statut | Date |
105
+ |---|---|---|---|---|
106
+ | MP-17 | `resetPassword` : stocker et valider le token (table DB / Redis) | `utils/setups/setupAuth.js` | ⬜ À faire | — |
107
+ | MP-16 | OTPs : utiliser DB ou Redis au lieu de `Map` en mémoire | `utils/setups/setupAuth.js` | ⬜ À faire | — |
108
+ | MA-06 | Pinning versions dépendances générées (ranges semver stricts) | `utils/setups/*.js` | ⬜ À faire | — |
109
+
110
+ ### 2B — Descriptions Swagger (PROD-02)
111
+
112
+ | Ticket | Description | Fichier(s) | Statut | Date |
113
+ |---|---|---|---|---|
114
+ | PROD-02a | Système de descriptions sémantiques par catégorie de champ | `utils/utils.js` (getFieldDescription) | ⬜ À faire | — |
115
+ | PROD-02b | Description manuelle optionnelle dans `getFullModeInputs` | `utils/fullModeInput.js` | ⬜ À faire | — |
116
+ | PROD-02c | Description contextuelle Create vs Update DTO | `utils/utils.js` (generateDto) | ⬜ À faire | — |
117
+
118
+ ### 2C — Corrections qualité
119
+
120
+ | Ticket | Description | Fichier(s) | Statut | Date |
121
+ |---|---|---|---|---|
122
+ | BUG-18 | Corriger condition De Morgan dans `cleanModuleGenerator` | `utils/generators/cleanModuleGenerator.js` | ⬜ À faire | — |
123
+ | MP-09 | Corriger détection ORM dans `generateConf` (ordre priorité) | `commands/generateConf.js` | ⬜ À faire | — |
124
+ | MP-13 | JWT vars conditionnelles à `useAuth` dans `envGenerator` | `utils/envGenerator.js` | ⬜ À faire | — |
125
+ | MP-10 | Supporter mode LIGHT sans nom en argument dans `new.js` | `commands/new.js` | ⬜ À faire | — |
126
+ | MA-09 | Timeout 5 min sur `npm install` dans `runCommand` | `utils/shell.js` | ⬜ À faire | — |
127
+
128
+ ---
129
+
130
+ ## 🟡 PHASE 3 — Tests & CI/CD (v0.6.0)
131
+ > Objectif : Zéro régression possible sur chaque PR
132
+
133
+ ### 3A — Tests unitaires (Jest)
134
+
135
+ | Ticket | Description | Statut | Date |
136
+ |---|---|---|---|
137
+ | TEST-01 | `generateDto()` — output TypeScript valide pour chaque ORM | ⬜ À faire | — |
138
+ | TEST-02 | `generateEntityFileContent()` — structure domaine correcte | ⬜ À faire | — |
139
+ | TEST-03 | `generateController()` — routes, guards, decorators | ⬜ À faire | — |
140
+ | TEST-04 | `mapTypeToPrisma()` — tous les types | ⬜ À faire | — |
141
+ | TEST-05 | `mapTypeToMongoose()` — tous les types | ⬜ À faire | — |
142
+ | TEST-06 | Schema Prisma relations 1-n (FK, inverse, capitalisation) | ⬜ À faire | — |
143
+ | TEST-07 | Schema Prisma relations n-n et 1-1 | ⬜ À faire | — |
144
+ | TEST-08 | CLI Parser — tous les cas de flags | ⬜ À faire | — |
145
+ | TEST-09 | `safeUpdateAppModule` — différents états `app.module.ts` | ⬜ À faire | — |
146
+
147
+ ### 3B — Tests d'intégration E2E
148
+
149
+ | Ticket | Description | Statut | Date |
150
+ |---|---|---|---|
151
+ | E2E-01 | Générer `test-full-prisma` → `tsc --noEmit` passe | ⬜ À faire | — |
152
+ | E2E-02 | Générer `test-full-typeorm` → `tsc --noEmit` passe | ⬜ À faire | — |
153
+ | E2E-03 | Générer `test-full-mongoose` → `tsc --noEmit` passe | ⬜ À faire | — |
154
+ | E2E-04 | Générer `test-light-prisma` → `tsc --noEmit` passe | ⬜ À faire | — |
155
+ | E2E-05 | Générer avec auth → `auth.module.ts` correctement câblé | ⬜ À faire | — |
156
+ | E2E-06 | Générer avec relations 1-n → schema Prisma valide | ⬜ À faire | — |
157
+ | E2E-07 | Test résilience PROD-03 : erreur migration → reste généré | ⬜ À faire | — |
158
+
159
+ ### 3C — CI/CD
160
+
161
+ | Ticket | Description | Statut | Date |
162
+ |---|---|---|---|
163
+ | CI-01 | ESLint sur chaque PR | ⬜ À faire | — |
164
+ | CI-02 | Tests Node 18, 20, 22 LTS (matrix) | ⬜ À faire | — |
165
+ | CI-03 | Génération sur Ubuntu + Windows (matrix) | ⬜ À faire | — |
166
+ | CI-04 | Semantic Release automatique | ⬜ À faire | — |
167
+ | CI-05 | Publish automatique sur npm | ⬜ À faire | — |
168
+
169
+ ---
170
+
171
+ ## 🟡 PHASE 4 — Features Manquantes (v0.7.0–v0.9.0)
172
+ > Objectif : Être feature-complete avant la v1.0
173
+
174
+ ### 4A — Features CLI
175
+
176
+ | Ticket | Description | Statut | Date |
177
+ |---|---|---|---|
178
+ | FEAT-01 | `nestcraftx g auth` — implémenter complètement | ⬜ À faire | — |
179
+ | FEAT-02 | Mode non-interactif complet (tous les flags) | ⬜ À faire | — |
180
+ | FEAT-03 | `nestcraftx update` — auto-update de la CLI | ⬜ À faire | — |
181
+ | FEAT-04 | `nestcraftx list` — lister entités depuis `.nestcraftxrc` | ⬜ À faire | — |
182
+ | FEAT-05 | Support `pnpm` | ⬜ À faire | — |
183
+
184
+ ### 4B — Qualité du code généré
185
+
186
+ | Ticket | Description | Statut | Date |
187
+ |---|---|---|---|
188
+ | FEAT-06 | Pagination GET all (`?page=1&limit=10`) | ⬜ À faire | — |
189
+ | FEAT-07 | Filtering & Sorting query params | ⬜ À faire | — |
190
+ | FEAT-08 | Rate limiting global (`@nestjs/throttler`) | ⬜ À faire | — |
191
+ | FEAT-09 | Health check endpoint (`/health`) | ⬜ À faire | — |
192
+ | FEAT-10 | Exception filter global typé | ⬜ À faire | — |
193
+ | FEAT-11 | Guards RBAC conditionnels sur endpoints | ⬜ À faire | — |
194
+ | FEAT-12 | Support MySQL/SQLite (Prisma/TypeORM) | ⬜ À faire | — |
195
+
196
+ ### 4C — Expérience développeur
197
+
198
+ | Ticket | Description | Statut | Date |
199
+ |---|---|---|---|
200
+ | FEAT-13 | Templates personnalisés depuis GitHub | ⬜ À faire | — |
201
+ | FEAT-14 | `nestcraftx g relation` — relation entre modules existants | ⬜ À faire | — |
202
+ | FEAT-15 | Rapport de génération en fin de commande | ⬜ À faire | — |
203
+
204
+ ---
205
+
206
+ ## 🟢 PHASE 5 — Documentation & Site Web (v0.9.x)
207
+ > Objectif : Site officiel avant la v1.0
208
+
209
+ | Ticket | Description | Statut | Date |
210
+ |---|---|---|---|
211
+ | DOC-01 | Créer site Docusaurus/VitePress (`nestcraftx.dev`) | ⬜ À faire | — |
212
+ | DOC-02 | Page Getting Started (5 minutes) | ⬜ À faire | — |
213
+ | DOC-03 | CLI Reference (toutes les commandes et flags) | ⬜ À faire | — |
214
+ | DOC-04 | Architecture Guide (Clean Arch générée) | ⬜ À faire | — |
215
+ | DOC-05 | ORM Guide (Prisma vs TypeORM vs Mongoose) | ⬜ À faire | — |
216
+ | DOC-06 | Auth Deep Dive (JWT, guards, roles) | ⬜ À faire | — |
217
+ | DOC-07 | Troubleshooting & Migration Guide (0.2.x → 1.0) | ⬜ À faire | — |
218
+ | DOC-08 | Playground interactif dans le navigateur | ⬜ À faire | — |
219
+
220
+ ---
221
+
222
+ ## 🟢 PHASE 6 — Release v1.0 stable
223
+
224
+ | Ticket | Description | Statut | Date |
225
+ |---|---|---|---|
226
+ | REL-01 | Audit de sécurité final | ⬜ À faire | — |
227
+ | REL-02 | Test complet Windows + macOS + Linux | ⬜ À faire | — |
228
+ | REL-03 | Revue de toutes les sorties CLI | ⬜ À faire | — |
229
+ | REL-04 | README mis à jour avec badges CI | ⬜ À faire | — |
230
+ | REL-05 | CHANGELOG complet depuis v0.2.6 | ⬜ À faire | — |
231
+ | REL-06 | Publication npm avec tag `@stable` | ⬜ À faire | — |
232
+ | REL-07 | Annonce GitHub Release avec notes détaillées | ⬜ À faire | — |
233
+
234
+ ---
235
+
236
+ ## 📝 Journal des changements
237
+
238
+ | 2026-06-05 | 0.2.6 | — | Audit initial + retours prod intégrés |
239
+ | 2026-06-05 | 0.3.0-wip | PROD-03, PROD-01a, PROD-01b, PROD-01c, BUG-09 | `runCommand` refactorisé (PROD-03). Prisma relations : capitalisation forcée des modèles et types, déduplication complète des clés étrangères (PROD-01a, b, c). Correction de la boucle asynchrone des use cases clean architecture (BUG-09). |
240
+ | 2026-06-06 | 0.3.0-wip | BUG-01, BUG-03, BUG-06 | Unification du module system en CommonJS (BUG-01). Validation non-interactive des flags (BUG-03). Utilisation de inputs.packageManager dynamique dans `setupAuth.js` au lieu de npm en dur (BUG-06). |
241
+ | 2026-06-07 | 0.3.0 | BUG-07, BUG-04, BUG-08, BUG-12, MP-07a, MP-07b, BUG-02, BUG-11, BUG-12b | Clôture de la Phase 0. Mongoose .env préservé. createFile supporte overwrite. safeUpdateAppModule robuste aux crochets imbriqués. help.js dynamic. Nettoyage de code mort et debug logs. |
242
+
243
+ ---
244
+
245
+ ## 🔑 Légende des statuts
246
+
247
+ | Icône | Signification |
248
+ |---|---|
249
+ | ⬜ À faire | Ticket non démarré |
250
+ | 🔵 En cours | Travail en cours |
251
+ | ✅ Terminé | Ticket complété et validé |
252
+ | ❌ Annulé | Ticket annulé (avec raison dans Notes) |
253
+ | ⏸️ Bloqué | En attente d'un autre ticket |
254
+
255
+ ---
256
+
257
+ *Ce fichier est mis à jour manuellement à chaque session de travail.*
258
+ *Pour le détail technique de chaque ticket, voir [AUDIT_ROADMAP.md](./AUDIT_ROADMAP.md)*
package/bin/nestcraft.js CHANGED
@@ -1,65 +1,85 @@
1
1
  #!/usr/bin/env node
2
- const { execSync } = require("child_process");
3
- const { parseCliArgs } = require("../utils/cliParser");
4
-
5
- const args = parseCliArgs(process.argv);
6
- const command = args.command || "help";
7
-
8
- // 🔐 Forcer UTF-8 uniquement sur Windows
9
- if (process.platform === "win32") {
10
- try {
11
- execSync("chcp 65001", { stdio: "ignore" }); // Changer l'encodage de la console
12
- } catch (err) {
13
- const message = `⚠️ Impossible de forcer UTF-8 dans le terminal Windows: ${err}`;
14
- console.warn(message);
15
- }
16
- }
17
-
18
- switch (command) {
19
- case "new":
20
- require("../commands/new")(args.projectName, args.flags).catch((err) => {
21
- console.error("❌ Erreur:", err.message);
22
- process.exit(1);
23
- });
24
- break;
25
-
26
- case "start":
27
- require("../commands/start")();
28
- break;
29
-
30
- case "test":
31
- require("../commands/test")().catch((err) => {
32
- console.error("❌ Erreur:", err.message);
33
- process.exit(1);
34
- });
35
- break;
36
-
37
- case "info":
38
- require("../commands/info")().catch((err) => {
39
- console.error("❌ Erreur:", err.message);
40
- process.exit(1);
41
- });
42
- break;
43
-
44
- case "demo":
45
- // Passe tous les flags à la commande demo
46
- require("../commands/demo")(args.flags).catch((err) => {
47
- console.error("❌ Erreur:", err.message);
48
- process.exit(1);
49
- });
50
- break;
51
-
52
- case "--version":
53
- case "-v":
54
- case "version":
55
- const pkg = require("../package.json");
56
- console.log("NestCraftX v" + pkg.version);
57
- break;
58
-
59
- case "--help":
60
- case "-h":
61
- case "help":
62
- default:
63
- require("../commands/help")();
64
- break;
65
- }
2
+ const { execSync } = require("child_process");
3
+ const { parseCliArgs } = require("../utils/cliParser");
4
+
5
+ const args = parseCliArgs(process.argv);
6
+ const command = args.command || "help";
7
+
8
+ // 🔐 Forcer UTF-8 uniquement sur Windows
9
+ if (process.platform === "win32") {
10
+ try {
11
+ execSync("chcp 65001", { stdio: "ignore" }); // Changer l'encodage de la console
12
+ } catch (err) {
13
+ const message = `⚠️ Impossible de forcer UTF-8 dans le terminal Windows: ${err}`;
14
+ console.warn(message);
15
+ }
16
+ }
17
+
18
+ switch (command) {
19
+ case "new":
20
+ require("../commands/new")(args.projectName, args.flags).catch((err) => {
21
+ console.error("❌ Erreur:", err.message);
22
+ process.exit(1);
23
+ });
24
+ break;
25
+
26
+ case "generate":
27
+ case "g":
28
+ require("../commands/generate")(
29
+ args.subCommand,
30
+ args.targetName,
31
+ args.flags,
32
+ ).catch((err) => {
33
+ console.error("❌ Erreur de génération:", err);
34
+ process.exit(1);
35
+ });
36
+ break;
37
+
38
+ case "generate-conf":
39
+ case "g-conf":
40
+ require("../commands/generateConf")().catch((err) => {
41
+ console.error("❌ Erreur de récupération:", err.message);
42
+ process.exit(1);
43
+ });
44
+ break;
45
+
46
+ case "start":
47
+ require("../commands/start")();
48
+ break;
49
+
50
+ case "test":
51
+ require("../commands/test")().catch((err) => {
52
+ console.error("❌ Erreur:", err.message);
53
+ process.exit(1);
54
+ });
55
+ break;
56
+
57
+ case "info":
58
+ require("../commands/info")().catch((err) => {
59
+ console.error("❌ Erreur:", err.message);
60
+ process.exit(1);
61
+ });
62
+ break;
63
+
64
+ case "demo":
65
+ // Passe tous les flags à la commande demo
66
+ require("../commands/demo")(args.flags).catch((err) => {
67
+ console.error("❌ Erreur:", err.message);
68
+ process.exit(1);
69
+ });
70
+ break;
71
+
72
+ case "--version":
73
+ case "-v":
74
+ case "version":
75
+ const pkg = require("../package.json");
76
+ console.log("NestCraftX v" + pkg.version);
77
+ break;
78
+
79
+ case "--help":
80
+ case "-h":
81
+ case "help":
82
+ default:
83
+ require("../commands/help")();
84
+ break;
85
+ }