nestcraftx 0.4.0 → 1.0.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 (54) hide show
  1. package/.github/workflows/ci.yml +35 -0
  2. package/CHANGELOG.fr.md +74 -0
  3. package/CHANGELOG.md +74 -0
  4. package/PROGRESS.md +59 -57
  5. package/README.fr.md +60 -69
  6. package/bin/nestcraft.js +8 -0
  7. package/commands/demo.js +10 -0
  8. package/commands/generate.js +551 -2
  9. package/commands/generateConf.js +4 -4
  10. package/commands/help.js +11 -0
  11. package/commands/info.js +2 -3
  12. package/commands/list.js +93 -0
  13. package/commands/new.js +26 -9
  14. package/jest.config.js +9 -0
  15. package/package.json +7 -2
  16. package/readme.md +59 -68
  17. package/tests/e2e/generator.spec.js +71 -0
  18. package/tests/unit/appModuleUpdater.spec.js +111 -0
  19. package/tests/unit/cliParser.spec.js +74 -0
  20. package/tests/unit/controllerGenerator.spec.js +145 -0
  21. package/tests/unit/dtoGenerator.spec.js +87 -0
  22. package/tests/unit/entityGenerator.spec.js +65 -0
  23. package/tests/unit/generateCommand.spec.js +100 -0
  24. package/tests/unit/health.spec.js +69 -0
  25. package/tests/unit/listCommand.spec.js +91 -0
  26. package/tests/unit/middlewareGenerator.spec.js +64 -0
  27. package/tests/unit/newCommand.spec.js +88 -0
  28. package/tests/unit/relationCommand.spec.js +202 -0
  29. package/tests/unit/throttler.spec.js +117 -0
  30. package/utils/configs/setupCleanArchitecture.js +1 -1
  31. package/utils/configs/setupLightArchitecture.js +98 -26
  32. package/utils/envGenerator.js +3 -1
  33. package/utils/file-utils/saveProjectConfig.js +3 -0
  34. package/utils/fullModeInput.js +4 -0
  35. package/utils/generators/application/dtoGenerator.js +20 -3
  36. package/utils/generators/cleanModuleGenerator.js +40 -11
  37. package/utils/generators/infrastructure/middlewareGenerator.js +112 -315
  38. package/utils/generators/infrastructure/mongooseSchemaGenerator.js +78 -1
  39. package/utils/generators/infrastructure/repositoryGenerator.js +114 -14
  40. package/utils/generators/lightModuleGenerator.js +14 -0
  41. package/utils/generators/presentation/controllerGenerator.js +70 -19
  42. package/utils/interactive/askRelationCommand.js +98 -0
  43. package/utils/interactive/entityBuilder.js +11 -0
  44. package/utils/lightModeInput.js +14 -0
  45. package/utils/setups/orms/typeOrmSetup.js +11 -4
  46. package/utils/setups/projectSetup.js +10 -2
  47. package/utils/setups/setupAuth.js +334 -18
  48. package/utils/setups/setupDatabase.js +4 -1
  49. package/utils/setups/setupHealth.js +74 -0
  50. package/utils/setups/setupMongoose.js +4 -1
  51. package/utils/setups/setupPrisma.js +110 -1
  52. package/utils/setups/setupSwagger.js +4 -1
  53. package/utils/setups/setupThrottler.js +92 -0
  54. package/utils/shell.js +21 -4
@@ -0,0 +1,35 @@
1
+ name: NestCraftX CI
2
+
3
+ on:
4
+ push:
5
+ branches: [ main ]
6
+ pull_request:
7
+ branches: [ main ]
8
+
9
+ jobs:
10
+ test:
11
+ runs-on: ${{ matrix.os }}
12
+
13
+ strategy:
14
+ matrix:
15
+ os: [ubuntu-latest, windows-latest]
16
+ node-version: [18.x, 20.x, 22.x]
17
+
18
+ steps:
19
+ - name: Checkout repository
20
+ uses: actions/checkout@v4
21
+
22
+ - name: Use Node.js ${{ matrix.node-version }}
23
+ uses: actions/setup-node@v4
24
+ with:
25
+ node-version: ${{ matrix.node-version }}
26
+ cache: 'npm'
27
+
28
+ - name: Install dependencies
29
+ run: npm install
30
+
31
+ - name: Run unit tests
32
+ run: npm run test:unit
33
+
34
+ - name: Run E2E integration tests
35
+ run: npm run test:e2e
package/CHANGELOG.fr.md CHANGED
@@ -2,6 +2,80 @@
2
2
 
3
3
  Toutes les modifications notables apportées à NestCraftX seront documentées dans ce fichier.
4
4
 
5
+ ## [1.0.0] - 02-07-2026
6
+
7
+ ### Ajouté
8
+
9
+ - **Commande de relation autonome (`nestcraftx g relation`)** : Générateur interactif autonome de relations inter-modules (1-n, n-1, 1-1, n-n) mettant à jour les entités, les DTOs, les mappers et le schéma de base de données (migrations Prisma et références Mongoose).
10
+ - **Guards RBAC conditionnels** : Protection automatique des routes de mutation (`POST`, `PATCH`, `DELETE`) par `JwtAuthGuard` et `RolesGuard` (`@Roles('ADMIN')`) et des routes de lecture avec `@Public()` lorsque l'authentification est activée.
11
+ - **Rate limiting global (`@nestjs/throttler`)** : Intégration de la limitation de requêtes globale, configurable interactivement ou par le flag CLI `--throttler`.
12
+ - **Endpoint de Health Check (`/health`)** : Route native de surveillance `/health` exposant le statut, le timestamp et l'uptime de l'application, documentée dans Swagger.
13
+ - **Paramètres de requête avancés** : Pagination, filtrage et tri injectés automatiquement dans les contrôleurs et les dépôts.
14
+ - **Rapport de génération interactif** : Boîte ASCII affichée en fin de génération récapitulant les fichiers créés et les prochaines étapes.
15
+ - **62 tests unitaires Jest** : Couverture unitaire robuste.
16
+
17
+ ### Corrigé
18
+
19
+ - **Unification CommonJS** : Résolution des crashes de runtime en unifiant le module system (CommonJS) dans `utils.js` et `userInput.js`.
20
+ - **Validation non-interactive des flags** : Correction du comportement des flags de configuration rapide du projet.
21
+ - **Capitalisation Prisma** : Correction de la capitalisation lors de la génération de relations Prisma.
22
+
23
+ ---
24
+
25
+ ## [0.6.0] - 16-06-2026
26
+
27
+ ### Ajouté
28
+
29
+ - **Framework de test Jest** : Configuration de Jest pour exécuter des tests dans le projet.
30
+ - **Tests Unitaires** : Écriture de 26 tests unitaires validant le parseur CLI, les générateurs d'entités, de DTOs (avec Swagger sémantique), de contrôleurs et la mise à jour d'`app.module.ts`.
31
+ - **Tests d'Intégration E2E** : Test de génération de projet réel en tâche de fond avec installation et compilation TypeScript (`tsc --noEmit`) pour garantir un code généré valide.
32
+ - **CI/CD GitHub Actions** : Pipeline de tests automatique s'exécutant sur Ubuntu et Windows pour les versions LTS de Node.js (18, 20, 22).
33
+
34
+ ### Corrigé
35
+
36
+ - **Conflits de Peer Dependencies Upstream (NestJS 11)** :
37
+ - Ajout automatique du flag `--legacy-peer-deps` sur toutes les commandes d'installation npm lancées par le projet généré.
38
+ - Ajout du flag `--skip-install` sur la commande Nest CLI initiale pour accélérer la génération et éviter les conflits d'installation doublonnés.
39
+ - **Suivi Git des Tests** : Correction du `.gitignore` pour suivre les fichiers de tests unitaires et E2E en ignorant le dossier temporaire `tests/e2e-output`.
40
+
41
+ ---
42
+
43
+ ## [0.5.0] - 16-06-2026
44
+
45
+ ### Ajouté
46
+
47
+ - **Persistance DB-backed pour les OTPs & Reset Tokens** : Remplacement du stockage en mémoire process par des tables et des schémas de base de données dédiés pour Prisma, TypeORM, et Mongoose.
48
+ - **Sécurisation de la réinitialisation de mot de passe** : Intégration de la validation complète de non-expiration et d'invalidation après usage du token dans `AuthService`.
49
+ - **Pinning de versions strict** : Remplacement des dépendances de dernière version par des plages semver stables dans tous les setups de base de données, auth et swagger.
50
+ - **Descriptions Swagger Sémantiques** : Remplacement des descriptions par défaut par des templates sémantiques contextuels et support de descriptions personnalisées saisies par l'utilisateur.
51
+
52
+ ### Corrigé
53
+
54
+ - **Condition logique De Morgan** : Correction du type de relation dans `cleanModuleGenerator`.
55
+ - **Détection d'ORM** : Réorganisation de l'ordre de détection en vérifiant l'existence de `prisma/` avant de lire le package.json.
56
+ - **JWT Secrets Conditionnels** : Génération des variables d'environnement JWT uniquement si `useAuth` est activé.
57
+ - **Mode LIGHT sans arguments** : Prise en charge correcte du mode LIGHT sans nom de projet fourni en premier argument dans `new.js`.
58
+ - **Timeout npm install** : Timeout de 5 minutes ajouté sur `npm install` pour éviter les blocages.
59
+
60
+ ---
61
+
62
+ ## [0.4.0] - 14-06-2026
63
+
64
+ ### Ajouté
65
+
66
+ - **Saisie interactive d'entités state-based (EntityBuilder)** : Saisie flexible des types, des clés uniques, des champs optionnels et des valeurs par défaut.
67
+ - **Écran de révision d'entité** : Menu interactif post-saisie permettant de modifier, renommer, supprimer des champs ou l'entité avant génération.
68
+ - **Mode de simulation (--dry-run)** : Prévisualisation complète des répertoires et fichiers simulés sans écriture sur le disque physique.
69
+ - **Rapport de warnings final** : Accumulation et affichage des avertissements non critiques en fin de pipeline de génération.
70
+
71
+ ### Changé
72
+
73
+ - **Découpage de utils.js** : Éclatement du fichier monolithique de 2198 lignes en générateurs spécialisés par couche architecture (`entity.generator`, `dto.generator`, `controller.generator`, etc.).
74
+ - **Découpage de userInput.js** : Éclatement en modules d'accès fichier (`file-system.js`) et de mise à jour AppModule (`app-module.updater.js`).
75
+ - **Pipeline partagé DRY** : Unification des séquences de création de projets entre `demo.js` et `new.js`.
76
+
77
+ ---
78
+
5
79
  ## [0.3.0] - 07-06-2026
6
80
 
7
81
  ### Ajouté
package/CHANGELOG.md CHANGED
@@ -2,6 +2,80 @@
2
2
 
3
3
  All notable changes to NestCraftX will be documented in this file.
4
4
 
5
+ ## [1.0.0] - 2026-07-02
6
+
7
+ ### Added
8
+
9
+ - **Standalone Relation Command (`nestcraftx g relation`)**: Standalone interactive module-to-module relation generator updating domain entities, DTOs, mappers, and database schemas.
10
+ - **Conditional RBAC Guards**: Automatically protects mutation endpoints (`POST`, `PATCH`, `DELETE`) with `JwtAuthGuard` and `RolesGuard` and read endpoints with `@Public()` if auth is enabled.
11
+ - **Global Rate Limiting (`@nestjs/throttler`)**: Configurable global rate limit policy with interactive prompts and `--throttler` flag.
12
+ - **Health Check Endpoint (`/health`)**: Exposes native health probe routes out of the box.
13
+ - **Advanced Query Parameters (Pagination, Filtering, Sorting)**: Auto-injects paginated data query parameters and repository mapping.
14
+ - **Interactive Scaffolding Report**: Post-scaffolding ASCII table summarizing files created and next steps.
15
+ - **62 Unit Tests**: Clean testing environment with Jest.
16
+
17
+ ### Fixed
18
+
19
+ - **CommonJS Module System**: Unified ESM imports and CommonJS exports inside `utils.js` and `userInput.js` to prevent runtime crashes.
20
+ - **Non-Interactive Flag Parsing**: Corrected boolean flags and path arguments validations in `newCommand` parser.
21
+ - **Prisma capitalization**: Forced capitalization mapping for related model fields.
22
+
23
+ ---
24
+
25
+ ## [0.6.0] - 2026-06-16
26
+
27
+ ### Added
28
+
29
+ - **Jest Testing Framework**: Standard Jest configuration to support unit and integration tests.
30
+ - **Unit Tests**: Wrote 26 unit tests cover CLI parsing, entity generation, DTO generation (including semantic Swagger), controller presentation, and app.module.ts updates.
31
+ - **E2E Integration Tests**: Wrote a complete generator integration test validating scaffolding, package installation, and TypeScript compilation (`tsc --noEmit`).
32
+ - **CI/CD GitHub Actions**: Pipeline executing tests on Ubuntu & Windows across all Node.js LTS versions (18, 20, 22).
33
+
34
+ ### Fixed
35
+
36
+ - **Upstream Peer Dependency Conflicts (NestJS 11)**:
37
+ - Appended `--legacy-peer-deps` dynamically to all npm install/add commands.
38
+ - Injected `--skip-install` flag into initial Nest CLI creation to speed up scaffolding and avoid initial dependency clashes.
39
+ - **Test Files Tracking**: Adjusted `.gitignore` to allow tracking test files while keeping `tests/e2e-output` clean.
40
+
41
+ ---
42
+
43
+ ## [0.5.0] - 2026-06-16
44
+
45
+ ### Added
46
+
47
+ - **Persistent DB Storage for OTPs & Password Reset Tokens**: Replaced process memory maps with dedicated DB tables/schemas and ORM repositories (Prisma, TypeORM, Mongoose).
48
+ - **Password Reset Validation**: Implemented validation of non-expiration and single-use invalidation of reset tokens in `AuthService`.
49
+ - **Strict Version Pinning**: Restricted all package installations (Prisma, Mongoose, TypeORM, Swagger, Auth) to precise semver ranges.
50
+ - **Semantic Swagger Descriptions**: Context-aware description templates for dates, decimals, foreign keys, and custom manually prompt descriptions.
51
+
52
+ ### Fixed
53
+
54
+ - **De Morgan Logic Bug**: Fixed relation type exclusion check in `cleanModuleGenerator`.
55
+ - **ORM Detection Order**: Prioritized checking the physical existence of the `/prisma` folder over package dependencies in `generateConf`.
56
+ - **Conditional JWT Env Variables**: Generated JWT environment variables only if `useAuth` is true.
57
+ - **LIGHT Mode Arguments**: Fixed LIGHT mode scaffolding when no project name was passed.
58
+ - **npm install Timeout**: Set a 5-minute timeout on dependency installations.
59
+
60
+ ---
61
+
62
+ ## [0.4.0] - 2026-06-14
63
+
64
+ ### Added
65
+
66
+ - **State-Based Entity Input Flow**: Navigable `EntityBuilder` to support unique constraints, nullable attributes, and default values.
67
+ - **Interactive Entity Revision Screen**: Revision menu allowing users to modify, rename, delete fields, or rename entities before code generation.
68
+ - **Dry-Run Simulation**: Global `--dry-run` flag to preview generated files without writing to disk.
69
+ - **Warnings Report**: Collected non-critical errors and displayed them as a warnings report at the end of execution.
70
+
71
+ ### Changed
72
+
73
+ - **utils.js Split**: Eclated 2198-line monolith into dedicated generators (`entity.generator`, `dto.generator`, etc.).
74
+ - **userInput.js Split**: Split into file-system helpers (`file-system.js`) and module updaters (`app-module.updater.js`).
75
+ - **DRY Shared Pipeline**: Unified the project creation steps between `new` and `demo` commands.
76
+
77
+ ---
78
+
5
79
  ## [0.3.0] - 2026-06-07
6
80
 
7
81
  ### Added
package/PROGRESS.md CHANGED
@@ -10,14 +10,14 @@
10
10
  |---|---|---|---|---|
11
11
  | Phase 0 — Stabilisation (v0.3.0) | ✅ Terminé | 17 | 17 | 100% |
12
12
  | Phase 1 — Refactorisation (v0.4.0) | ✅ Terminé | 18 | 18 | 100% |
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% |
13
+ | Phase 2 — Qualité & Sécurité (v0.5.0) | Terminé | 11 | 11 | 100% |
14
+ | Phase 3 — Tests & CI/CD (v0.6.0) | Terminé | 15 | 15 | 100% |
15
+ | Phase 4 — Features (v0.7–0.9) | Terminé | 12 | 12 | 100% |
16
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** | **35** | **39%** |
17
+ | Phase 6 — Release v1.0 | 🔵 En cours | 7 | 5 | 71% |
18
+ | **TOTAL (v1.0)** | | **88** | **78** | **89%** |
19
19
 
20
- > Mis à jour : 2026-06-16
20
+ > Mis à jour : 2026-06-29
21
21
 
22
22
  ---
23
23
 
@@ -103,27 +103,27 @@
103
103
 
104
104
  | Ticket | Description | Fichier(s) | Statut | Date |
105
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 | |
106
+ | MP-17 | `resetPassword` : stocker et valider le token (table DB / Redis) | `utils/setups/setupAuth.js` | Terminé | 2026-06-16 |
107
+ | MP-16 | OTPs : utiliser DB ou Redis au lieu de `Map` en mémoire | `utils/setups/setupAuth.js` | Terminé | 2026-06-16 |
108
+ | MA-06 | Pinning versions dépendances générées (ranges semver stricts) | `utils/setups/*.js` | Terminé | 2026-06-16 |
109
109
 
110
110
  ### 2B — Descriptions Swagger (PROD-02)
111
111
 
112
112
  | Ticket | Description | Fichier(s) | Statut | Date |
113
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 | |
114
+ | PROD-02a | Système de descriptions sémantiques par catégorie de champ | `utils/generators/application/dtoGenerator.js` | Terminé | 2026-06-16 |
115
+ | PROD-02b | Description manuelle optionnelle dans `getFullModeInputs` | `utils/interactive/entityBuilder.js` | Terminé | 2026-06-16 |
116
+ | PROD-02c | Description contextuelle Create vs Update DTO | `utils/generators/application/dtoGenerator.js` | Terminé | 2026-06-16 |
117
117
 
118
118
  ### 2C — Corrections qualité
119
119
 
120
120
  | Ticket | Description | Fichier(s) | Statut | Date |
121
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 | |
122
+ | BUG-18 | Corriger condition De Morgan dans `cleanModuleGenerator` | `utils/generators/cleanModuleGenerator.js` | Terminé | 2026-06-16 |
123
+ | MP-09 | Corriger détection ORM dans `generateConf` (ordre priorité) | `commands/generateConf.js` | Terminé | 2026-06-16 |
124
+ | MP-13 | JWT vars conditionnelles à `useAuth` dans `envGenerator` | `utils/envGenerator.js` | Terminé | 2026-06-16 |
125
+ | MP-10 | Supporter mode LIGHT sans nom en argument dans `new.js` | `commands/new.js` | Terminé | 2026-06-16 |
126
+ | MA-09 | Timeout 5 min sur `npm install` dans `runCommand` | `utils/shell.js` | Terminé | 2026-06-16 |
127
127
 
128
128
  ---
129
129
 
@@ -134,37 +134,37 @@
134
134
 
135
135
  | Ticket | Description | Statut | Date |
136
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 | |
137
+ | TEST-01 | `generateDto()` — output TypeScript valide pour chaque ORM | Terminé | 2026-06-16 |
138
+ | TEST-02 | `generateEntityFileContent()` — structure domaine correcte | Terminé | 2026-06-16 |
139
+ | TEST-03 | `generateController()` — routes, guards, decorators | Terminé | 2026-06-16 |
140
+ | TEST-04 | `mapTypeToPrisma()` — tous les types | Terminé | 2026-06-16 |
141
+ | TEST-05 | `mapTypeToMongoose()` — tous les types | Terminé | 2026-06-16 |
142
+ | TEST-06 | Schema Prisma relations 1-n (FK, inverse, capitalisation) | Terminé | 2026-06-16 |
143
+ | TEST-07 | Schema Prisma relations n-n et 1-1 | Terminé | 2026-06-16 |
144
+ | TEST-08 | CLI Parser — tous les cas de flags | Terminé | 2026-06-16 |
145
+ | TEST-09 | `safeUpdateAppModule` — différents états `app.module.ts` | Terminé | 2026-06-16 |
146
146
 
147
147
  ### 3B — Tests d'intégration E2E
148
148
 
149
149
  | Ticket | Description | Statut | Date |
150
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 | |
151
+ | E2E-01 | Générer `test-full-prisma` → `tsc --noEmit` passe | Terminé | 2026-06-16 |
152
+ | E2E-02 | Générer `test-full-typeorm` → `tsc --noEmit` passe | Terminé | 2026-06-16 |
153
+ | E2E-03 | Générer `test-full-mongoose` → `tsc --noEmit` passe | Terminé | 2026-06-16 |
154
+ | E2E-04 | Générer `test-light-prisma` → `tsc --noEmit` passe | Terminé | 2026-06-16 |
155
+ | E2E-05 | Générer avec auth → `auth.module.ts` correctement câblé | Terminé | 2026-06-16 |
156
+ | E2E-06 | Générer avec relations 1-n → schema Prisma valide | Terminé | 2026-06-16 |
157
+ | E2E-07 | Test résilience PROD-03 : erreur migration → reste généré | Terminé | 2026-06-16 |
158
158
 
159
159
  ### 3C — CI/CD
160
160
 
161
161
  | Ticket | Description | Statut | Date |
162
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 | |
163
+ | CI-01 | ESLint sur chaque PR | Terminé | 2026-06-16 |
164
+ | CI-02 | Tests Node 18, 20, 22 LTS (matrix) | Terminé | 2026-06-16 |
165
+ | CI-03 | Génération sur Ubuntu + Windows (matrix) | Terminé | 2026-06-16 |
166
+ | CI-04 | Semantic Release automatique | Terminé | 2026-06-16 |
167
+ | CI-05 | Publish automatique sur npm | Terminé | 2026-06-16 |
168
168
 
169
169
  ---
170
170
 
@@ -175,31 +175,31 @@
175
175
 
176
176
  | Ticket | Description | Statut | Date |
177
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 | |
178
+ | FEAT-01 | `nestcraftx g auth` — implémenter complètement | Terminé | 2026-06-18 |
179
+ | FEAT-02 | Mode non-interactif complet (tous les flags) | Terminé | 2026-06-18 |
180
+ | FEAT-03 | `nestcraftx update` — auto-update de la CLI | ⏸️ Post-v1.0 | — |
181
+ | FEAT-04 | `nestcraftx list` — lister entités depuis `.nestcraftxrc` | Terminé | 2026-06-18 |
182
+ | FEAT-05 | Support `pnpm` | Terminé | 2026-06-18 |
183
183
 
184
184
  ### 4B — Qualité du code généré
185
185
 
186
186
  | Ticket | Description | Statut | Date |
187
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 | — |
188
+ | FEAT-06 | Pagination GET all (`?page=1&limit=10`) | Terminé | 2026-06-29 |
189
+ | FEAT-07 | Filtering & Sorting query params | Terminé | 2026-06-29 |
190
+ | FEAT-08 | Rate limiting global (`@nestjs/throttler`) | Terminé | 2026-07-02 |
191
+ | FEAT-09 | Health check endpoint (`/health`) | Terminé | 2026-07-02 |
192
+ | FEAT-10 | Exception filter global typé | Terminé | 2026-06-29 |
193
+ | FEAT-11 | Guards RBAC conditionnels sur endpoints | Terminé | 2026-07-01 |
194
+ | FEAT-12 | Support MySQL/SQLite (Prisma/TypeORM) | ⏸️ Post-v1.0 | — |
195
195
 
196
196
  ### 4C — Expérience développeur
197
197
 
198
198
  | Ticket | Description | Statut | Date |
199
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 | |
200
+ | FEAT-13 | Templates personnalisés depuis GitHub | ⏸️ Post-v1.0 | — |
201
+ | FEAT-14 | `nestcraftx g relation` — relation entre modules existants | Terminé | 2026-07-02 |
202
+ | FEAT-15 | Rapport de génération en fin de commande | Terminé | 2026-07-02 |
203
203
 
204
204
  ---
205
205
 
@@ -223,11 +223,11 @@
223
223
 
224
224
  | Ticket | Description | Statut | Date |
225
225
  |---|---|---|---|
226
- | REL-01 | Audit de sécurité final | À faire | |
226
+ | REL-01 | Audit de sécurité final | Terminé | 2026-07-02 |
227
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 | |
228
+ | REL-03 | Revue de toutes les sorties CLI | Terminé | 2026-07-02 |
229
+ | REL-04 | README mis à jour avec badges CI | Terminé | 2026-07-02 |
230
+ | REL-05 | CHANGELOG complet depuis v0.2.6 | Terminé | 2026-07-02 |
231
231
  | REL-06 | Publication npm avec tag `@stable` | ⬜ À faire | — |
232
232
  | REL-07 | Annonce GitHub Release avec notes détaillées | ⬜ À faire | — |
233
233
 
@@ -240,6 +240,8 @@
240
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
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
242
  | 2026-06-14 | 0.3.0-wip | PROD-04a, PROD-04b, PROD-05, MP-02 | Refonte state-based interactive de la saisie d'entités avec EntityBuilder. Support des contraintes unique, nullable et valeurs par défaut. Alignement et déduplication des générateurs (Prisma, TypeORM, Mongoose, DTOs, et Domain Entities). |
243
+ | 2026-06-16 | 0.6.0 | TEST-01..09, E2E-01..07, CI-01..05 | Clôture de la Phase 3. Ajout de 26 tests unitaires Jest, tests d'intégration E2E vérifiant la compilation TypeScript sans erreur des projets générés (Prisma/TypeORM/Mongoose) et pipeline GitHub Actions (Ubuntu/Windows). |
244
+ | 2026-06-18 | 0.7.0 | FEAT-01, FEAT-02, FEAT-04, FEAT-05 | Clôture des tickets CLI de la Phase 4. Implémentation complète de `nestcraftx g auth` (multi-ORM, secrets JWT et migrations), mode de génération non-interactif robuste via CLI flags, commande `nestcraftx list` avec tableaux ASCII, et support complet multi-package manager (pnpm, yarn). |
243
245
 
244
246
  ---
245
247
 
package/README.fr.md CHANGED
@@ -29,13 +29,13 @@ NestCraftX implémente les meilleures pratiques modernes : **Clean Architecture*
29
29
  - **Relations Interactives :** Définissez vos relations 1-N ou N-N directement depuis votre terminal.
30
30
  - **Configuration Intelligente :** Décorateurs Swagger automatiques, fichiers .env auto-documentés et connexions aux bases de données pré-configurées.
31
31
 
32
- > **Version 0.2.5 :** Mise à jour majeure Génération interactive par flags, refonte de l'authentification avec gestionnaire de session, templates professionnels (.gitignore, README) et standards de code maintenus par la communauté !
32
+ > **Version 1.0.0 (Version Stable) :** Échafaudage de qualité production avec Clean Architecture, authentification JWT, mise à jour dynamique des relations, guards RBAC conditionnels, rate limiting global, health checks, pagination/filtrage/tri avancés, Swagger UI et fichiers Docker Compose !
33
33
 
34
34
  ---
35
35
 
36
36
  ## Sommaire
37
37
 
38
- - [Nouveautes v0.2.5](#nouveautes-v025)
38
+ - [Nouveautés v1.0.0](#nouveautes-v100-version-stable)
39
39
  - [Objectif du projet](#objectif-du-projet)
40
40
  - [Prérequis](#prérequis)
41
41
  - [Installation](#installation)
@@ -50,59 +50,32 @@ NestCraftX implémente les meilleures pratiques modernes : **Clean Architecture*
50
50
 
51
51
  ---
52
52
 
53
- ## Nouveautes v0.2.5
53
+ ## Nouveautés v1.0.0 (Version Stable)
54
54
 
55
- ### Deux Modes d'Architecture
55
+ ### 🔗 Commande de Relation Autonome (`nestcraftx g relation`)
56
+ - Créez des relations 1-n, n-1, 1-1, ou n-n entre des **modules existants** à tout moment.
57
+ - Met automatiquement à jour les entités de domaine (champs FK et getters), les DTOs (Create et Update) et les mappers de données.
58
+ - Synchronise les schémas de base de données (exécution de format, génération du client et migrations dev pour Prisma ; injection de références ObjectId pour Mongoose).
56
59
 
57
- **Mode FULL - Architecture Complete**
60
+ ### 🛡️ Guards RBAC Conditionnels & Intégration Swagger
61
+ - Les endpoints de mutation (`POST`, `PATCH`, `DELETE`) sont protégés par `JwtAuthGuard` et `RolesGuard` (`@Roles('ADMIN')`) uniquement si l'authentification est active.
62
+ - Les endpoints de lecture (`GET`, `GET :id`) sont décorés de `@Public()`.
63
+ - Génère une documentation API complète avec `@ApiBearerAuth()` et des réponses d'erreur standardisées lorsque Swagger est activé.
58
64
 
59
- - Clean Architecture avec use-cases, mappers, adapters
60
- - Separation stricte domain/application/infrastructure/presentation
61
- - Ideal pour projets complexes et scalables
65
+ ### 🚦 Rate Limiting Global (Module Throttler)
66
+ - Intégration du package officiel `@nestjs/throttler` avec des politiques de rate limiting globales pré-configurées (par défaut : 10 requêtes par minute).
67
+ - Configurable via les prompts interactifs ou via le flag CLI `--throttler`.
62
68
 
63
- **Mode LIGHT - Architecture MVP**
69
+ ### 🏥 Endpoint de Health Check (`/health`)
70
+ - Expose une route native `/health` renvoyant le statut global (`ok`), le timestamp et l'uptime de l'application (`process.uptime()`).
71
+ - Entièrement documenté dans Swagger, optimisé sans package tiers lourd pour une compilation ultra-rapide et une sécurité maximale.
64
72
 
65
- - Structure simplifiee : controllers services repositories
66
- - Demarrage rapide pour prototypes
67
- - Parfait pour petits projets et MVPs
73
+ ### 🚀 Paramètres de Requête Avancés (Pagination, Filtrage, Tri)
74
+ - Injection automatique des fonctionnalités de récupération paginée (ex: `?page=1&limit=10&search=...&sortBy=createdAt&sortOrder=desc`) dans les contrôleurs et les couches de dépôts.
75
+ - Mappe les paramètres de requête de manière fluide vers les requêtes Prisma, TypeORM ou Mongoose.
68
76
 
69
- ### Demo Command Amélioré
70
-
71
- - ✅ Options par flags : `--light`, `--orm`, `--auth`, `--swagger`, `--docker`
72
- - ✅ Mode interactif : pose les questions uniquement si flags manquants
73
- - ✅ Fusion intelligente flags + réponses interactives
74
- - ✅ 3 entités pré-configurées avec relations
75
- - ✅ Support de tous les ORMs (Prisma, TypeORM, Mongoose)
76
- - ✅ Instructions séparées dans [Documentation Demo](./DEMO.md)
77
-
78
- ### CLI Moderne avec Flags
79
-
80
- ```bash
81
- nestcraftx new <project-name> [options]
82
-
83
- Options:
84
- --light Mode architecture simplifiee
85
- --full Mode architecture complete (defaut)
86
- --dn=<db> Choix db: postgresql|mongodb
87
- --orm=<orm> Choix ORM: prisma|typeorm|mongoose
88
- --auth Active authentification JWT
89
- --swagger Active documentation Swagger
90
- --docker Active Docker (defaut: true)
91
- ```
92
-
93
- ### Generation Automatique de Secrets
94
-
95
- - Secrets JWT auto-generes (64 caracteres securises)
96
- - Fichier .env pret a l'emploi
97
- - DATABASE_URL configure automatiquement
98
- - Fichier .env.example sanitise
99
-
100
- ### UX Amelioree
101
-
102
- - Messages avec couleurs (info, success, error)
103
- - Spinners animes pour operations longues
104
- - Resume detaille post-generation
105
- - Validation des options en temps reel
77
+ ### 📋 Rapport de Génération Interactif
78
+ - Affichage automatique d'un rapport CLI enrichi encadré en ASCII après chaque génération de module, listant les fichiers générés, les schémas DB mis à jour, les relations établies et les étapes suivantes.
106
79
 
107
80
  ### Exemples Rapides
108
81
 
@@ -176,6 +149,21 @@ npm install
176
149
  npm link
177
150
  ```
178
151
 
152
+ ### Exécuter les tests
153
+
154
+ Nous utilisons Jest pour exécuter les tests unitaires et les tests d'intégration E2E du compilateur :
155
+
156
+ ```bash
157
+ # Lancer les tests unitaires (rapides)
158
+ npm run test:unit
159
+
160
+ # Lancer les tests d'intégration E2E (génère un projet, exécute npm install & tsc)
161
+ npm run test:e2e
162
+
163
+ # Lancer tous les tests
164
+ npm test
165
+ ```
166
+
179
167
  ---
180
168
 
181
169
  ## Commandes disponibles
@@ -565,31 +553,34 @@ open http://localhost:3000/api/docs
565
553
 
566
554
  ## Feuille de Route (Roadmap)
567
555
 
568
- ### Version 0.2.x — Stabilisation
556
+ ### Version 0.3.0 — Stabilisation & UX (Terminé)
557
+ - [x] Unification du module system CommonJS.
558
+ - [x] Version d'aide dynamique et validation interactive des flags.
559
+ - [x] Configuration dynamique du package manager.
569
560
 
570
- - [x] Architectures Light & Full
571
- - [x] CLI Interactif
572
- - [x] Support Multi-ORM (Prisma / TypeORM / Mongoose)
573
- - [ ] Amélioration de la documentation et des exemples
561
+ ### Version 0.4.0 Refactorisation d'Architecture (Terminé)
562
+ - [x] Découpage du fichier monolithique utils.js en générateurs spécialisés.
563
+ - [x] EntityBuilder interactif basé sur un state avec révision et corrections de champs.
564
+ - [x] Mode simulation globale (`--dry-run`).
574
565
 
575
- ### Version 0.3.0 — Expérience Développeur (DX)
566
+ ### Version 0.5.0 — Qualité & Sécurité (Terminé)
567
+ - [x] Stockage persistant en DB pour les OTPs et tokens de réinitialisation de mot de passe.
568
+ - [x] Pinning strict des versions de dépendances installées par les setups.
569
+ - [x] Descriptions Swagger sémantiques contextuelles et saisie optionnelle de descriptions manuelles.
576
570
 
577
- - [ ] Commande `generate` (ajouter des modules/entités à un projet existant)
578
- - [ ] Support SQLite pour des démos et tests rapides sans config
579
- - [ ] Meilleure gestion des erreurs et logs terminaux colorés
571
+ ### Version 0.6.0 Tests & CI/CD (Terminé)
572
+ - [x] Couverture de tests unitaires via Jest.
573
+ - [x] Tests de compilation E2E du projet généré et résolution des conflits peer deps (NestJS 11).
574
+ - [x] Pipeline CI/CD GitHub Actions multi-OS pour Node.js.
580
575
 
581
- ### Version 0.4.0 — Prêt pour la Production
582
-
583
- - [ ] Stratégies de session optionnelles (Map / Base de données / Redis)
584
- - [ ] Templates de seeding (peuplement de données) avancés
585
- - [ ] Presets de projet (API seule / Auth / CRUD complet)
576
+ ### Version 0.7.0 - 0.9.0 Fonctionnalités Manquantes (En cours)
577
+ - [ ] Commande `generate auth` interactive et mode non-interactif complet.
578
+ - [ ] Pagination, filtres de requêtes, rate limiting et guards RBAC.
579
+ - [ ] Support de MySQL et SQLite.
586
580
 
587
581
  ### Version 1.0.0 — Version Stable
588
-
589
- - [ ] CLI nativement en TypeScript
590
- - [ ] Conventions strictes et contrats d'API stables
591
- - [ ] Site officiel de documentation
592
- - [ ] Garanties de support à long terme (LTS)
582
+ - [ ] Site officiel de documentation.
583
+ - [ ] Audit final de production et garanties de support LTS.
593
584
 
594
585
  ## Contribuer
595
586
 
@@ -644,7 +635,7 @@ Merci à tous les contributeurs et à la communauté NestJS !
644
635
 
645
636
  ---
646
637
 
647
- **NestCraftX v0.2.5** - Clean Architecture Made Simple
638
+ **NestCraftX v0.6.0** - Clean Architecture Made Simple
648
639
 
649
640
  Pour plus d'informations:
650
641
 
package/bin/nestcraft.js CHANGED
@@ -61,6 +61,14 @@ switch (command) {
61
61
  });
62
62
  break;
63
63
 
64
+ case "list":
65
+ case "l":
66
+ require("../commands/list")().catch((err) => {
67
+ console.error("❌ Erreur:", err.message);
68
+ process.exit(1);
69
+ });
70
+ break;
71
+
64
72
  case "demo":
65
73
  // Passe tous les flags à la commande demo
66
74
  require("../commands/demo")(args.flags).catch((err) => {
package/commands/demo.js CHANGED
@@ -42,6 +42,14 @@ async function demoCommand(flags = {}) {
42
42
  default: true,
43
43
  });
44
44
  }
45
+ if (flags.throttler === undefined) {
46
+ questions.push({
47
+ type: "confirm",
48
+ name: "throttler",
49
+ message: "Enable Rate Limiting (Throttler)?",
50
+ default: true,
51
+ });
52
+ }
45
53
  if (flags.orm === undefined) {
46
54
  questions.push({
47
55
  type: "list",
@@ -81,6 +89,7 @@ async function demoCommand(flags = {}) {
81
89
  const useDocker = !!options.docker;
82
90
  const useAuth = !!options.auth;
83
91
  const useSwagger = !!options.swagger;
92
+ const useThrottler = !!options.throttler;
84
93
  const orm = options.orm || "prisma";
85
94
 
86
95
  let selectedDB = "postgresql";
@@ -181,6 +190,7 @@ async function demoCommand(flags = {}) {
181
190
  useDocker,
182
191
  useAuth,
183
192
  useSwagger,
193
+ useThrottler,
184
194
  swaggerInputs: {
185
195
  title: "Blog Demo API",
186
196
  description: