nestcraftx 0.2.5 → 0.2.6
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.
- package/CLI_USAGE.fr.md +331 -331
- package/CLI_USAGE.md +364 -364
- package/LICENSE +21 -21
- package/bin/nestcraft.js +84 -64
- package/commands/demo.js +333 -330
- package/commands/generate.js +93 -0
- package/commands/generateConf.js +91 -0
- package/commands/info.js +48 -48
- package/commands/new.js +338 -335
- package/commands/start.js +19 -19
- package/commands/test.js +7 -7
- package/package.json +1 -1
- package/utils/cliParser.js +133 -76
- package/utils/colors.js +62 -62
- package/utils/configs/configureDocker.js +120 -120
- package/utils/configs/setupCleanArchitecture.js +15 -13
- package/utils/configs/setupLightArchitecture.js +15 -9
- package/utils/file-utils/saveProjectConfig.js +36 -0
- package/utils/fullModeInput.js +607 -607
- package/utils/generators/application/dtoUpdater.js +54 -0
- package/utils/generators/cleanModuleGenerator.js +475 -0
- package/utils/generators/database/setupDatabase.js +31 -0
- package/utils/generators/domain/entityUpdater.js +78 -0
- package/utils/generators/infrastructure/mapperUpdater.js +65 -0
- package/utils/generators/lightModuleGenerator.js +131 -0
- package/utils/generators/relation/relation.engine.js +64 -0
- package/utils/interactive/askEntityInputs.js +165 -0
- package/utils/loggers/logError.js +7 -7
- package/utils/loggers/logInfo.js +7 -7
- package/utils/loggers/logSuccess.js +7 -7
- package/utils/loggers/logWarning.js +7 -7
- package/utils/setups/orms/typeOrmSetup.js +630 -630
- package/utils/setups/setupAuth.js +28 -15
- package/utils/setups/setupDatabase.js +75 -75
- package/utils/setups/setupPrisma.js +802 -630
- package/utils/shell.js +32 -32
- package/utils/spinner.js +57 -57
- package/utils/systemCheck.js +124 -124
- package/utils/userInput.js +421 -421
- package/utils/utils.js +27 -27
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
const fs = require("fs");
|
|
2
|
+
const path = require("path");
|
|
3
|
+
const { logError } = require("../utils/loggers/logError");
|
|
4
|
+
const { logInfo } = require("../utils/loggers/logInfo");
|
|
5
|
+
const { logWarning } = require("../utils/loggers/logWarning");
|
|
6
|
+
const generateCleanModule = require("../utils/generators/cleanModuleGenerator");
|
|
7
|
+
const { askEntityInputs } = require("../utils/interactive/askEntityInputs");
|
|
8
|
+
const lightModuleGenerator = require("../utils/generators/lightModuleGenerator");
|
|
9
|
+
|
|
10
|
+
async function generate(subCommand, targetName, flags) {
|
|
11
|
+
// 1. Localisation of config file
|
|
12
|
+
const configPath = path.join(process.cwd(), ".nestcraftx", ".nestcraftxrc");
|
|
13
|
+
|
|
14
|
+
// 2. Existing Vérification
|
|
15
|
+
if (!fs.existsSync(configPath)) {
|
|
16
|
+
logError("Aucun fichier de configuration NestcraftX trouvé.");
|
|
17
|
+
logInfo(
|
|
18
|
+
"Assurez-vous d'être à la racine du projet ou lancez 'nestcraftx g-conf' ou 'nestcraftx generate-conf' pour le restaurer.",
|
|
19
|
+
);
|
|
20
|
+
return;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
// 3. Lecture et parsing de la configuration complète
|
|
24
|
+
let projectConfig;
|
|
25
|
+
try {
|
|
26
|
+
const rawData = fs.readFileSync(configPath, "utf8");
|
|
27
|
+
projectConfig = JSON.parse(rawData);
|
|
28
|
+
} catch (err) {
|
|
29
|
+
logError(
|
|
30
|
+
"Erreur lors de la lecture du fichier .nestcraftxrc. Le JSON est peut-être corrompu.\nlancez 'nestcraftx generate-conf' ou 'nestcraftx g-conf' pour le restaurer",
|
|
31
|
+
);
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
// 4. Extraction des infos clés pour les passer aux générateurs
|
|
36
|
+
const { mode, orm, auth, swagger, database } = projectConfig;
|
|
37
|
+
|
|
38
|
+
// 5. Dispatcher vers les implémentations
|
|
39
|
+
switch (subCommand) {
|
|
40
|
+
case "module":
|
|
41
|
+
if (!targetName) {
|
|
42
|
+
logWarning(
|
|
43
|
+
"⚠️ Veuillez préciser le nom du module (ex: nestcraftx g module Product)",
|
|
44
|
+
);
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
// Ici, on passera projectConfig complet pour avoir accès à swagger, auth, etc.
|
|
49
|
+
await handleModuleGeneration(targetName, projectConfig);
|
|
50
|
+
break;
|
|
51
|
+
|
|
52
|
+
case "auth":
|
|
53
|
+
if (auth) {
|
|
54
|
+
logWarning("L'authentification est déjà configurée dans ce projet.");
|
|
55
|
+
return;
|
|
56
|
+
}
|
|
57
|
+
// Logique pour ajouter l'auth après coup
|
|
58
|
+
await handleAuthGeneration(projectConfig);
|
|
59
|
+
break;
|
|
60
|
+
|
|
61
|
+
default:
|
|
62
|
+
logError(`Sous-commande inconnue : ${subCommand}`);
|
|
63
|
+
console.log("\nUtilisations possibles :");
|
|
64
|
+
console.log(" nestcraftx g module <name>");
|
|
65
|
+
console.log(" nestcraftx g auth");
|
|
66
|
+
break;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
// --- Fonctions de redirection (prochainement implémentées) ---
|
|
71
|
+
|
|
72
|
+
async function handleModuleGeneration(name, config) {
|
|
73
|
+
logInfo(
|
|
74
|
+
`🚀 Générating module '${name}' (${config.mode.toUpperCase()} | ${config.orm.toUpperCase()})...`,
|
|
75
|
+
);
|
|
76
|
+
// 1. Demander les champs de l'entité interactivement
|
|
77
|
+
const entityData = await askEntityInputs(name);
|
|
78
|
+
|
|
79
|
+
if (config.mode === "full") {
|
|
80
|
+
await generateCleanModule(name, config, entityData);
|
|
81
|
+
} else {
|
|
82
|
+
await lightModuleGenerator(entityData, config);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
async function handleAuthGeneration(config) {
|
|
87
|
+
// On réutilisera ton script setupAuth corrigé
|
|
88
|
+
// await require('../utils/setups/setupAuth')(config);
|
|
89
|
+
|
|
90
|
+
logInfo("🚀 Generating module auth...");
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
module.exports = generate;
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
const fs = require("fs");
|
|
2
|
+
const path = require("path");
|
|
3
|
+
const { logSuccess } = require("../utils/loggers/logSuccess");
|
|
4
|
+
const { logInfo } = require("../utils/loggers/logInfo");
|
|
5
|
+
const { logError } = require("../utils/loggers/logError");
|
|
6
|
+
|
|
7
|
+
async function generateConf() {
|
|
8
|
+
logInfo("🔍 Analyse du projet pour reconstruire la configuration...");
|
|
9
|
+
|
|
10
|
+
const root = process.cwd();
|
|
11
|
+
const pkgPath = path.join(root, "package.json");
|
|
12
|
+
|
|
13
|
+
if (!fs.existsSync(pkgPath)) {
|
|
14
|
+
logError(
|
|
15
|
+
"❌ Erreur : Aucun package.json trouvé. Es-tu à la racine d'un projet NestJS ?",
|
|
16
|
+
);
|
|
17
|
+
return;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
const pkg = JSON.parse(fs.readFileSync(pkgPath, "utf8"));
|
|
21
|
+
const deps = { ...pkg.dependencies, ...pkg.devDependencies };
|
|
22
|
+
|
|
23
|
+
// 1. Détecter le Mode (Architecture)
|
|
24
|
+
// On vérifie si la structure Clean Arch existe
|
|
25
|
+
const isFull =
|
|
26
|
+
fs.existsSync(path.join(root, "src", "auth", "application")) ||
|
|
27
|
+
fs.existsSync(path.join(root, "src", "common", "domain"));
|
|
28
|
+
const mode = isFull ? "full" : "light";
|
|
29
|
+
|
|
30
|
+
// 2. Détecter l'ORM
|
|
31
|
+
let orm = "prisma"; // par défaut
|
|
32
|
+
if (deps["@nestjs/mongoose"] || deps["mongoose"]) {
|
|
33
|
+
orm = "mongoose";
|
|
34
|
+
} else if (deps["@nestjs/typeorm"] || deps["typeorm"]) {
|
|
35
|
+
orm = "typeorm";
|
|
36
|
+
} else if (fs.existsSync(path.join(root, "prisma"))) {
|
|
37
|
+
orm = "prisma";
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
// 3. Détecter les options
|
|
41
|
+
const hasAuth = !!(
|
|
42
|
+
deps["@nestjs/passport"] || fs.existsSync(path.join(root, "src", "auth"))
|
|
43
|
+
);
|
|
44
|
+
const hasSwagger = !!deps["@nestjs/swagger"];
|
|
45
|
+
const hasDocker =
|
|
46
|
+
fs.existsSync(path.join(root, "Dockerfile")) ||
|
|
47
|
+
fs.existsSync(path.join(root, "docker-compose.yml"));
|
|
48
|
+
|
|
49
|
+
// 4. Déterminer le Gestionnaire de paquets
|
|
50
|
+
const packageManager = fs.existsSync(path.join(root, "yarn.lock"))
|
|
51
|
+
? "yarn"
|
|
52
|
+
: "npm";
|
|
53
|
+
|
|
54
|
+
// 5. Détecter la DB (Approximation basée sur l'ORM ou les drivers)
|
|
55
|
+
let selectedDB = "postgresql";
|
|
56
|
+
if (orm === "mongoose") selectedDB = "mongodb";
|
|
57
|
+
if (deps["mysql2"]) selectedDB = "mysql";
|
|
58
|
+
|
|
59
|
+
// Construction de l'objet de configuration
|
|
60
|
+
const configData = {
|
|
61
|
+
name: pkg.name || "restored-project",
|
|
62
|
+
mode: mode,
|
|
63
|
+
orm: orm,
|
|
64
|
+
database: selectedDB,
|
|
65
|
+
auth: hasAuth,
|
|
66
|
+
swagger: hasSwagger,
|
|
67
|
+
packageManager: packageManager,
|
|
68
|
+
docker: hasDocker,
|
|
69
|
+
restoredAt: new Date().toISOString(),
|
|
70
|
+
};
|
|
71
|
+
|
|
72
|
+
// 6. Sauvegarde du fichier
|
|
73
|
+
const configDir = path.join(root, ".nestcraftx");
|
|
74
|
+
const configFile = path.join(configDir, ".nestcraftxrc");
|
|
75
|
+
|
|
76
|
+
try {
|
|
77
|
+
if (!fs.existsSync(configDir)) {
|
|
78
|
+
fs.mkdirSync(configDir, { recursive: true });
|
|
79
|
+
}
|
|
80
|
+
fs.writeFileSync(configFile, JSON.stringify(configData, null, 2));
|
|
81
|
+
|
|
82
|
+
logSuccess("✅ Fichier .nestcraftxrc reconstruit avec succès !");
|
|
83
|
+
console.table(configData);
|
|
84
|
+
} catch (error) {
|
|
85
|
+
logError(
|
|
86
|
+
`❌ Impossible de sauvegarder la configuration : ${error.message}`,
|
|
87
|
+
);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
module.exports = generateConf;
|
package/commands/info.js
CHANGED
|
@@ -1,48 +1,48 @@
|
|
|
1
|
-
const packageJson = require("../package.json");
|
|
2
|
-
|
|
3
|
-
async function infoCommand() {
|
|
4
|
-
console.log("\n🧱 NestCraftX v" + packageJson.version);
|
|
5
|
-
console.log("Clean Architecture Generator for NestJS");
|
|
6
|
-
console.log("─".repeat(50));
|
|
7
|
-
|
|
8
|
-
console.log("\n✅ Supported ORMs:");
|
|
9
|
-
console.log(" • Prisma - Modern and type-safe ORM");
|
|
10
|
-
console.log(" • TypeORM - Full-featured ORM with decorators");
|
|
11
|
-
console.log(" • Mongoose - ODM for MongoDB");
|
|
12
|
-
|
|
13
|
-
console.log("\n✅ Available Modes:");
|
|
14
|
-
console.log(" • Light - Quick setup for POCs");
|
|
15
|
-
console.log(" • Full - Complete and customized configuration");
|
|
16
|
-
|
|
17
|
-
console.log("\n✅ Key Features:");
|
|
18
|
-
console.log(" • Clean Architecture with DDD");
|
|
19
|
-
console.log(" • Integrated JWT Auth");
|
|
20
|
-
console.log(" • Swagger Documentation");
|
|
21
|
-
console.log(" • Docker & Docker Compose");
|
|
22
|
-
console.log(" • Automatic Entity Generation");
|
|
23
|
-
console.log(" • Use Cases pattern");
|
|
24
|
-
console.log(" • Repository pattern");
|
|
25
|
-
|
|
26
|
-
console.log("\n📦 GitHub:");
|
|
27
|
-
console.log(" " + packageJson.repository.url);
|
|
28
|
-
|
|
29
|
-
console.log("\n📅 Upcoming:");
|
|
30
|
-
console.log(" • Custom Middlewares");
|
|
31
|
-
console.log(" • Microservices support");
|
|
32
|
-
console.log(" • CI/CD Templates");
|
|
33
|
-
console.log(" • GraphQL integration");
|
|
34
|
-
console.log(" • Automated Tests");
|
|
35
|
-
|
|
36
|
-
console.log("\n💡 Available Commands:");
|
|
37
|
-
console.log(" nestcraftx new <name> [options] Create a project");
|
|
38
|
-
console.log(" nestcraftx demo Generate a demo project");
|
|
39
|
-
console.log(" nestcraftx test Check environment status");
|
|
40
|
-
console.log(" nestcraftx info Display this information");
|
|
41
|
-
console.log(" nestcraftx --help Complete help guide");
|
|
42
|
-
|
|
43
|
-
console.log("\n👤 Author: " + packageJson.author);
|
|
44
|
-
console.log("📄 License: " + packageJson.license);
|
|
45
|
-
console.log("");
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
module.exports = infoCommand;
|
|
1
|
+
const packageJson = require("../package.json");
|
|
2
|
+
|
|
3
|
+
async function infoCommand() {
|
|
4
|
+
console.log("\n🧱 NestCraftX v" + packageJson.version);
|
|
5
|
+
console.log("Clean Architecture Generator for NestJS");
|
|
6
|
+
console.log("─".repeat(50));
|
|
7
|
+
|
|
8
|
+
console.log("\n✅ Supported ORMs:");
|
|
9
|
+
console.log(" • Prisma - Modern and type-safe ORM");
|
|
10
|
+
console.log(" • TypeORM - Full-featured ORM with decorators");
|
|
11
|
+
console.log(" • Mongoose - ODM for MongoDB");
|
|
12
|
+
|
|
13
|
+
console.log("\n✅ Available Modes:");
|
|
14
|
+
console.log(" • Light - Quick setup for POCs");
|
|
15
|
+
console.log(" • Full - Complete and customized configuration");
|
|
16
|
+
|
|
17
|
+
console.log("\n✅ Key Features:");
|
|
18
|
+
console.log(" • Clean Architecture with DDD");
|
|
19
|
+
console.log(" • Integrated JWT Auth");
|
|
20
|
+
console.log(" • Swagger Documentation");
|
|
21
|
+
console.log(" • Docker & Docker Compose");
|
|
22
|
+
console.log(" • Automatic Entity Generation");
|
|
23
|
+
console.log(" • Use Cases pattern");
|
|
24
|
+
console.log(" • Repository pattern");
|
|
25
|
+
|
|
26
|
+
console.log("\n📦 GitHub:");
|
|
27
|
+
console.log(" " + packageJson.repository.url);
|
|
28
|
+
|
|
29
|
+
console.log("\n📅 Upcoming:");
|
|
30
|
+
console.log(" • Custom Middlewares");
|
|
31
|
+
console.log(" • Microservices support");
|
|
32
|
+
console.log(" • CI/CD Templates");
|
|
33
|
+
console.log(" • GraphQL integration");
|
|
34
|
+
console.log(" • Automated Tests");
|
|
35
|
+
|
|
36
|
+
console.log("\n💡 Available Commands:");
|
|
37
|
+
console.log(" nestcraftx new <name> [options] Create a project");
|
|
38
|
+
console.log(" nestcraftx demo Generate a demo project");
|
|
39
|
+
console.log(" nestcraftx test Check environment status");
|
|
40
|
+
console.log(" nestcraftx info Display this information");
|
|
41
|
+
console.log(" nestcraftx --help Complete help guide");
|
|
42
|
+
|
|
43
|
+
console.log("\n👤 Author: " + packageJson.author);
|
|
44
|
+
console.log("📄 License: " + packageJson.license);
|
|
45
|
+
console.log("");
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
module.exports = infoCommand;
|