nestcraftx 0.2.6 → 0.4.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 (42) hide show
  1. package/AUDIT_ROADMAP.md +798 -0
  2. package/CHANGELOG.fr.md +22 -0
  3. package/CHANGELOG.md +22 -0
  4. package/PROGRESS.md +259 -0
  5. package/commands/demo.js +2 -42
  6. package/commands/generate.js +5 -4
  7. package/commands/help.js +29 -2
  8. package/commands/new.js +6 -49
  9. package/package.json +1 -1
  10. package/utils/app-module.updater.js +102 -0
  11. package/utils/cliParser.js +0 -45
  12. package/utils/configs/setupCleanArchitecture.js +2 -2
  13. package/utils/envGenerator.js +6 -0
  14. package/utils/file-system.js +90 -0
  15. package/utils/file-utils/packageJsonUtils.js +6 -0
  16. package/utils/file-utils/saveProjectConfig.js +6 -0
  17. package/utils/fullModeInput.js +8 -229
  18. package/utils/generators/application/dtoGenerator.js +252 -0
  19. package/utils/generators/application/dtoUpdater.js +5 -0
  20. package/utils/generators/database/setupDatabase.js +32 -14
  21. package/utils/generators/domain/entityGenerator.js +126 -0
  22. package/utils/generators/domain/entityUpdater.js +5 -0
  23. package/utils/generators/infrastructure/mapperGenerator.js +114 -0
  24. package/utils/generators/infrastructure/mapperUpdater.js +5 -0
  25. package/utils/generators/infrastructure/middlewareGenerator.js +645 -0
  26. package/utils/generators/infrastructure/mongooseSchemaGenerator.js +229 -0
  27. package/utils/generators/infrastructure/repositoryGenerator.js +334 -0
  28. package/utils/generators/presentation/controllerGenerator.js +142 -0
  29. package/utils/helpers.js +115 -0
  30. package/utils/interactive/askEntityInputs.js +5 -68
  31. package/utils/interactive/entityBuilder.js +400 -0
  32. package/utils/lightModeInput.js +13 -246
  33. package/utils/setups/orms/typeOrmSetup.js +31 -4
  34. package/utils/setups/projectSetup.js +78 -8
  35. package/utils/setups/setupAuth.js +6 -7
  36. package/utils/setups/setupDatabase.js +2 -1
  37. package/utils/setups/setupMongoose.js +96 -30
  38. package/utils/setups/setupPrisma.js +118 -134
  39. package/utils/setups/setupSwagger.js +12 -8
  40. package/utils/shell.js +125 -10
  41. package/utils/userInput.js +37 -101
  42. package/utils/utils.js +29 -2164
@@ -1,8 +1,18 @@
1
- import * as readline from "readline-sync";
2
- import * as fs from "fs";
3
- import { logInfo } from "./loggers/logInfo.js";
4
-
5
- export async function getUserInputs2() {
1
+ const readline = require("readline-sync");
2
+ const fs = require("fs");
3
+ const { logInfo } = require("./loggers/logInfo");
4
+
5
+ // ── Modules extraits (Phase 1A) ────────────────────────────────────────────────
6
+ const {
7
+ createDirectory,
8
+ createFile,
9
+ updateFile,
10
+ } = require("./file-system");
11
+ const { safeUpdateAppModule } = require("./app-module.updater");
12
+ const { capitalize, decapitalize } = require("./helpers");
13
+ // ──────────────────────────────────────────────────────────────────────────────
14
+
15
+ async function getUserInputs2() {
6
16
  console.log("\n🔹🔹🔹 Configuration du projet 🔹🔹🔹\n");
7
17
 
8
18
  const dataBases = [
@@ -299,7 +309,7 @@ export async function getUserInputs2() {
299
309
  };
300
310
  }
301
311
 
302
- export function getUserInputsSwagger() {
312
+ function getUserInputsSwagger() {
303
313
  console.log("\n🔹 Configuration de Swagger 🔹");
304
314
 
305
315
  const title = readline.question("Titre de l'API ? (ex: Mon API) ", {
@@ -324,98 +334,24 @@ export function getUserInputsSwagger() {
324
334
  return { title, description, version, endpoint };
325
335
  }
326
336
 
327
- export async function createDirectory(directoryPath) {
328
- try {
329
- if (!fs.existsSync(directoryPath)) {
330
- fs.mkdirSync(directoryPath, { recursive: true });
331
- // console.log(`Dossier créé : ${directoryPath}`);
332
- }
333
- } catch (error) {
334
- console.error(
335
- `Erreur lors de la création du dossier ${directoryPath}:`,
336
- error,
337
- );
338
- }
339
- }
340
-
341
- export async function createFile(fileData) {
342
- try {
343
- if (!fs.existsSync(fileData.path)) {
344
- fs.writeFileSync(`${fileData.path}`, `${fileData.contente}`);
345
- } else {
346
- console.log(`Existing file : ${fileData.path}`);
347
- fs.writeFileSync(`${fileData.path}`, `${fileData.contente}`);
348
- }
349
- } catch (error) {
350
- console.error(`Erreur creating file ${fileData.path}:`, error);
351
- }
352
- }
353
-
354
- export async function updateFile({ path, pattern, replacement }) {
355
- try {
356
- let mainTs = fs.readFileSync(path, "utf8");
357
- const updatedContent = mainTs.replace(pattern, replacement);
358
- fs.writeFileSync(path, updatedContent, "utf-8");
359
- // console.log(` Updated file: ${path}`);
360
- } catch (error) {
361
- console.error(` Error updating file ${path}:`, error);
362
- }
363
- }
364
-
365
- export async function safeUpdateAppModule(entity) {
366
- const filePath = "src/app.module.ts";
367
- const moduleName = `${capitalize(entity)}Module`;
368
- const importLine = `import { ${moduleName} } from 'src/${entity}/${entity}.module';`;
369
-
370
- let content = fs.readFileSync(filePath, "utf-8");
371
-
372
- // Étape 1 : Ajout de l'import si nécessaire
373
- if (!content.includes(importLine)) {
374
- const importMarker = `import { ConfigModule } from '@nestjs/config';`;
375
-
376
- if (content.includes(importMarker)) {
377
- await updateFile({
378
- path: filePath,
379
- pattern: importMarker,
380
- replacement: `${importMarker}\n${importLine}`,
381
- });
382
- content = fs.readFileSync(filePath, "utf-8");
383
- } else {
384
- logInfo(
385
- " Impossible de trouver le point d'insertion de l'import (ConfigModule manquant)",
386
- );
387
- }
388
- }
389
-
390
- // Étape 2 : Vérifier le bloc des imports du @Module
391
- const importsBlockRegex = /imports:\s*\[((.|\n)*?)\]/m;
392
- const match = content.match(importsBlockRegex);
393
-
394
- if (!match) {
395
- logInfo(" Impossible de trouver le bloc 'imports' dans AppModule.");
396
- return;
397
- }
398
-
399
- const currentImportsBlock = match[1];
400
- const isAlreadyImportedInModule = currentImportsBlock.includes(moduleName);
401
-
402
- if (!isAlreadyImportedInModule) {
403
- const updatedBlock = currentImportsBlock.trim().endsWith(",")
404
- ? `${currentImportsBlock.trim()} ${moduleName},`
405
- : `${currentImportsBlock.trim()}, ${moduleName},`;
406
-
407
- const newContent = content.replace(
408
- importsBlockRegex,
409
- `imports: [${updatedBlock}]`,
410
- );
411
- fs.writeFileSync(filePath, newContent, "utf-8");
412
- }
413
- }
414
-
415
- export function capitalize(str) {
416
- return str.charAt(0).toUpperCase() + str.slice(1);
417
- }
418
-
419
- export function decapitalize(str) {
420
- return str.charAt(0).toLowerCase() + str.slice(1);
421
- }
337
+ // ── Fonctions déléguées aux modules extraits (Phase 1A) ───────────────────────
338
+ // createDirectory, createFile, updateFile → ./file-system.js
339
+ // safeUpdateAppModule → ./app-module.updater.js
340
+ // capitalize, decapitalize → ./helpers.js
341
+ //
342
+ // Les implémentations inline ont été supprimées. Toutes sont importées en haut
343
+ // du fichier et ré-exportées dans module.exports ci-dessous.
344
+ // ──────────────────────────────────────────────────────────────────────────────
345
+
346
+ module.exports = {
347
+ // Fonctions locales
348
+ getUserInputs2,
349
+ getUserInputsSwagger,
350
+ // Ré-exports des modules extraits (compatibilité ascendante 100%)
351
+ createDirectory,
352
+ createFile,
353
+ updateFile,
354
+ safeUpdateAppModule,
355
+ capitalize,
356
+ decapitalize,
357
+ };