micro-generate 1.3.11 → 1.3.12

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 (80) hide show
  1. package/README.md +83 -9
  2. package/dist/cli/generators/add-mongo-generator.d.ts +4 -0
  3. package/dist/cli/generators/add-mongo-generator.js +212 -0
  4. package/dist/cli/generators/add-mongo-generator.js.map +1 -0
  5. package/dist/cli/generators/add-mysql-generator.d.ts +4 -0
  6. package/dist/cli/generators/add-mysql-generator.js +221 -0
  7. package/dist/cli/generators/add-mysql-generator.js.map +1 -0
  8. package/dist/cli/generators/add-redis-generator.d.ts +1 -0
  9. package/dist/cli/generators/add-redis-generator.js +100 -0
  10. package/dist/cli/generators/add-redis-generator.js.map +1 -0
  11. package/dist/cli/generators/feature-generator.js +26 -338
  12. package/dist/cli/generators/feature-generator.js.map +1 -1
  13. package/dist/cli/generators/init-generator.js +31 -649
  14. package/dist/cli/generators/init-generator.js.map +1 -1
  15. package/dist/cli/generators/model-generator.d.ts +6 -0
  16. package/dist/cli/generators/model-generator.js +50 -0
  17. package/dist/cli/generators/model-generator.js.map +1 -0
  18. package/dist/cli/index.js +71 -0
  19. package/dist/cli/index.js.map +1 -1
  20. package/dist/cli/templates/feature/mongoModel.template.d.ts +6 -0
  21. package/dist/cli/templates/feature/mongoModel.template.js +57 -0
  22. package/dist/cli/templates/feature/mongoModel.template.js.map +1 -0
  23. package/dist/cli/templates/feature/mysqlModel.template.d.ts +6 -0
  24. package/dist/cli/templates/feature/mysqlModel.template.js +62 -0
  25. package/dist/cli/templates/feature/mysqlModel.template.js.map +1 -0
  26. package/dist/cli/templates/feature/resolvers.template.d.ts +1 -0
  27. package/dist/cli/templates/feature/resolvers.template.js +21 -0
  28. package/dist/cli/templates/feature/resolvers.template.js.map +1 -0
  29. package/dist/cli/templates/feature/service.template.d.ts +11 -0
  30. package/dist/cli/templates/feature/service.template.js +68 -0
  31. package/dist/cli/templates/feature/service.template.js.map +1 -0
  32. package/dist/cli/templates/feature/typeDefs.template.d.ts +1 -0
  33. package/dist/cli/templates/feature/typeDefs.template.js +24 -0
  34. package/dist/cli/templates/feature/typeDefs.template.js.map +1 -0
  35. package/dist/cli/templates/project/api.template.d.ts +1 -0
  36. package/dist/cli/templates/project/api.template.js +40 -0
  37. package/dist/cli/templates/project/api.template.js.map +1 -0
  38. package/dist/cli/templates/project/config.template.d.ts +1 -0
  39. package/dist/cli/templates/project/config.template.js +12 -0
  40. package/dist/cli/templates/project/config.template.js.map +1 -0
  41. package/dist/cli/templates/project/featuresIndex.template.d.ts +1 -0
  42. package/dist/cli/templates/project/featuresIndex.template.js +4 -0
  43. package/dist/cli/templates/project/featuresIndex.template.js.map +1 -0
  44. package/dist/cli/templates/project/index.template.d.ts +8 -0
  45. package/dist/cli/templates/project/index.template.js +104 -0
  46. package/dist/cli/templates/project/index.template.js.map +1 -0
  47. package/dist/cli/templates/project/mongo.template.d.ts +1 -0
  48. package/dist/cli/templates/project/mongo.template.js +51 -0
  49. package/dist/cli/templates/project/mongo.template.js.map +1 -0
  50. package/dist/cli/templates/project/mongoClient.template.d.ts +1 -0
  51. package/dist/cli/templates/project/mongoClient.template.js +21 -0
  52. package/dist/cli/templates/project/mongoClient.template.js.map +1 -0
  53. package/dist/cli/templates/project/mysqlClient.template.d.ts +1 -0
  54. package/dist/cli/templates/project/mysqlClient.template.js +18 -0
  55. package/dist/cli/templates/project/mysqlClient.template.js.map +1 -0
  56. package/dist/cli/templates/project/redis.template.d.ts +1 -0
  57. package/dist/cli/templates/project/redis.template.js +255 -0
  58. package/dist/cli/templates/project/redis.template.js.map +1 -0
  59. package/dist/cli/templates/project/sanitize.template.d.ts +1 -0
  60. package/dist/cli/templates/project/sanitize.template.js +11 -0
  61. package/dist/cli/templates/project/sanitize.template.js.map +1 -0
  62. package/dist/cli/templates/project/skill.template.d.ts +1 -0
  63. package/dist/cli/templates/project/skill.template.js +147 -0
  64. package/dist/cli/templates/project/skill.template.js.map +1 -0
  65. package/dist/cli/templates/project/tsconfig.template.d.ts +1 -0
  66. package/dist/cli/templates/project/tsconfig.template.js +17 -0
  67. package/dist/cli/templates/project/tsconfig.template.js.map +1 -0
  68. package/dist/core/MicroserviceServer.d.ts +4 -0
  69. package/dist/core/MicroserviceServer.js +13 -0
  70. package/dist/core/MicroserviceServer.js.map +1 -1
  71. package/dist/database/mysql.d.ts +23 -0
  72. package/dist/database/mysql.js +68 -0
  73. package/dist/database/mysql.js.map +1 -0
  74. package/dist/database/redis.d.ts +1 -1
  75. package/dist/database/redis.js +6 -8
  76. package/dist/database/redis.js.map +1 -1
  77. package/dist/index.d.ts +1 -0
  78. package/dist/index.js +1 -0
  79. package/dist/index.js.map +1 -1
  80. package/package.json +5 -1
package/README.md CHANGED
@@ -68,7 +68,20 @@ npx micro-generate mutation
68
68
  ```
69
69
  * Similar a `query`, ideal para operaciones de creación, actualización o eliminación (CRUD).
70
70
 
71
- ### 5. 🤖 Referencia de Flags (Modo Headless)
71
+ ### 5. Agregar una Tecnología (`add`)
72
+ Permite conectar tecnologías de almacenamiento o base de datos a un proyecto que ya fue inicializado sin ellas, o bien añadir conexiones secundarias si la tecnología ya está presente.
73
+
74
+ ```bash
75
+ npx micro-generate add <redis | mongo | mysql>
76
+ ```
77
+ * **Interactivo:** Si se ejecuta sin flags, el CLI te guiará para ingresar la configuración (nombres de base de datos por defecto y secundarias).
78
+ * **Instalación automática:** Modifica `package.json` agregando las dependencias necesarias (`ioredis`, `mongoose` o `sequelize` y `mysql2`).
79
+ * **Inyección de Código:** Inyecta de forma segura los imports, declaraciones de conexión e inicializaciones dentro de `src/index.ts` y actualiza tus archivos `.env` y `.env.example`.
80
+ * **Incremental:** Si ejecutas `add mongo` o `add mysql` en un proyecto donde ya están configurados, el CLI detectará la presencia y te permitirá agregar únicamente bases de datos secundarias nuevas de manera transparente.
81
+
82
+ ---
83
+
84
+ ## 🤖 Referencia de Flags (Modo Headless)
72
85
  Todos los comandos pueden ejecutarse sin prompts interactivos usando los siguientes flags.
73
86
 
74
87
  #### `init` (Inicializar Proyecto)
@@ -81,6 +94,13 @@ Todos los comandos pueden ejecutarse sin prompts interactivos usando los siguien
81
94
  | `--mongo-dbs <lista>` | DBs adicionales Mongo (separadas por coma)| `--mongo-dbs "logs,users"` |
82
95
  | `--mysql-dbs <lista>` | DBs adicionales MySQL (separadas por coma)| `--mysql-dbs "archive,stats"` |
83
96
 
97
+ #### `add` (Agregar Tecnología)
98
+ | Flag | Descripción | Ejemplo |
99
+ |------|-------------|---------|
100
+ | `<technology>` | Tecnología a agregar (`redis`, `mongo`, `mysql`) | `mongo` |
101
+ | `-n, --name <nombre>` | Nombre de la base de datos por defecto (para Mongo/MySQL) | `-n billing_db` |
102
+ | `-s, --secondary <lista>`| Bases de datos secundarias (separadas por coma) | `-s "logs,archive"` |
103
+
84
104
  #### `feature` (Crear Feature)
85
105
  | Flag | Descripción | Ejemplo |
86
106
  |------|-------------|---------|
@@ -106,6 +126,55 @@ npx micro-generate feature --name "notifications" --mysql --redis --mysql-connec
106
126
 
107
127
  # Agregar Query a feature existente
108
128
  npx micro-generate query --feature "users" --name "getUserByEmail" --return-type "User"
129
+
130
+ # Agregar MongoDB con bases de datos secundarias
131
+ npx micro-generate add mongo --name "core_db" --secondary "analytics,reports"
132
+ ```
133
+
134
+ ---
135
+
136
+ ## 📊 Arquitectura y Flujo de Trabajo
137
+
138
+ ### Flujo de Comandos del CLI
139
+ ```mermaid
140
+ flowchart TD
141
+ CLI[npx micro-generate] --> Init[init]
142
+ CLI --> Add[add]
143
+ CLI --> Feature[feature]
144
+ CLI --> Query[query / mutation]
145
+
146
+ Init -->|Crea proyecto| Base[Estructura Base: src/index.ts, src/core...]
147
+
148
+ Add -->|Inyecta| Redis[Redis Connector: ioredis]
149
+ Add -->|Inyecta| Mongo[MongoDB Connector: Mongoose]
150
+ Add -->|Inyecta| MySQL[MySQL Connector: Sequelize]
151
+
152
+ Feature -->|Genera módulo| Mod[src/features/featureName: typeDefs, resolvers, service, model]
153
+
154
+ Query -->|Inyecta| QDef[Modifica typeDefs.ts & resolvers.ts]
155
+ ```
156
+
157
+ ### Ciclo de Inyección de Tecnologías (`add`)
158
+ ```mermaid
159
+ sequenceDiagram
160
+ actor Developer
161
+ participant CLI as CLI (micro-generate add)
162
+ participant FS as Filesystem (Project Root)
163
+ participant Index as src/index.ts
164
+
165
+ Developer->>CLI: micro-generate add mongo -s secondary_db
166
+ CLI->>FS: Check if src/index.ts exists
167
+ alt MongoDB ya configurado
168
+ CLI->>FS: Leer index.ts y .env actuales
169
+ CLI->>FS: Agregar variable de entorno (MONGODB_URI_SECONDARY_DB)
170
+ CLI->>Index: Inyectar nueva conexión en el objeto secondaryConnections
171
+ else MongoDB no configurado
172
+ CLI->>FS: Crear src/database/mongo.ts y client.ts
173
+ CLI->>FS: Añadir dependencia mongoose a package.json
174
+ CLI->>FS: Escribir variables de entorno en .env y .env.example
175
+ CLI->>Index: Inyectar imports, configuración y registro del conector
176
+ end
177
+ CLI-->>Developer: Confirmación de éxito
109
178
  ```
110
179
 
111
180
  ---
@@ -134,18 +203,23 @@ my-service/
134
203
  ├── src/
135
204
  │ ├── config/ # Configuración de entorno y DBs
136
205
  │ ├── core/ # Servidor central (MicroserviceServer)
137
- │ ├── db/ # Clientes de base de datos
138
- │ │ ├── mongo/ # Cliente y modelos MongoDB
139
- │ │ ├── mysql/ # Cliente y modelos Sequelize
140
- │ │ └── redis/ # Cliente y repositorio Redis
141
- ├── features/ # Tu lógica de negocio aquí
206
+ │ ├── database/ # Conectores y clientes de bases de datos/cache
207
+ │ │ ├── mongo.ts # Cliente MongoDB principal
208
+ │ │ ├── redis.ts # Cliente y repositorio Redis
209
+ │ │ ├── mongo/ # Conectores y helpers de MongoDB
210
+ │ │ └── client.ts
211
+ │ │ └── mysql/ # Conectores y helpers de MySQL (Sequelize)
212
+ │ │ └── client.ts
213
+ │ ├── features/ # Tu lógica de negocio (módulos)
142
214
  │ │ ├── users/ # Ejemplo de Feature
143
215
  │ │ │ ├── typeDefs.ts
144
216
  │ │ │ ├── resolvers.ts
145
217
  │ │ │ └── service.ts
146
- │ │ └── index.ts # Auto-registro
147
- │ ├── utils/ # Loggers y helpers
148
- │ └── index.ts # Punto de entrada
218
+ │ │ └── index.ts # Auto-registro de features
219
+ │ ├── services/ # Servicios compartidos (ej: llamadas HTTP)
220
+ └── api.ts
221
+ │ ├── utils/ # Loggers y helpers de sanitización
222
+ │ └── index.ts # Punto de entrada de la aplicación
149
223
  ├── .env # Variables de entorno
150
224
  ├── package.json
151
225
  └── tsconfig.json
@@ -0,0 +1,4 @@
1
+ export declare const addMongo: (options?: {
2
+ defaultDb?: string;
3
+ secondaryDbs?: string[];
4
+ }) => Promise<void>;
@@ -0,0 +1,212 @@
1
+ import fs from 'fs-extra';
2
+ import path from 'path';
3
+ import chalk from 'chalk';
4
+ import inquirer from 'inquirer';
5
+ import { mongoTemplate } from '../templates/project/mongo.template.js';
6
+ import { mongoClientTemplate } from '../templates/project/mongoClient.template.js';
7
+ export const addMongo = async (options) => {
8
+ const projectRoot = process.cwd();
9
+ const indexPath = path.join(projectRoot, 'src', 'index.ts');
10
+ const packageJsonPath = path.join(projectRoot, 'package.json');
11
+ const projectName = path.basename(projectRoot);
12
+ // 1. Validation
13
+ if (!await fs.pathExists(indexPath)) {
14
+ console.error(chalk.red('❌ src/index.ts not found. Are you in the root of the project?'));
15
+ return;
16
+ }
17
+ const mongoClientPath = path.join(projectRoot, 'src', 'database', 'mongo', 'client.ts');
18
+ const isConfigured = await fs.pathExists(mongoClientPath);
19
+ let defaultDb = options?.defaultDb;
20
+ let secondaryDbs = options?.secondaryDbs;
21
+ if (!isConfigured) {
22
+ console.log(chalk.blue('Adding MongoDB support to your project...'));
23
+ // If options are not provided, run prompts
24
+ if (!defaultDb) {
25
+ const answers = await inquirer.prompt([
26
+ {
27
+ type: 'input',
28
+ name: 'defaultDb',
29
+ message: 'Enter the default MongoDB database name:',
30
+ default: projectName
31
+ },
32
+ {
33
+ type: 'input',
34
+ name: 'secondary',
35
+ message: 'Enter additional MongoDB database names (comma separated, leave empty if none):'
36
+ }
37
+ ]);
38
+ defaultDb = answers.defaultDb;
39
+ secondaryDbs = answers.secondary ? answers.secondary.split(',').map((s) => s.trim()).filter((s) => s.length > 0) : [];
40
+ }
41
+ try {
42
+ // 2. Create database files
43
+ const mongoConnectorPath = path.join(projectRoot, 'src', 'database', 'mongo.ts');
44
+ await fs.ensureDir(path.dirname(mongoConnectorPath));
45
+ await fs.writeFile(mongoConnectorPath, mongoTemplate);
46
+ console.log(chalk.green('✅ Created src/database/mongo.ts'));
47
+ await fs.ensureDir(path.dirname(mongoClientPath));
48
+ await fs.writeFile(mongoClientPath, mongoClientTemplate);
49
+ console.log(chalk.green('✅ Created src/database/mongo/client.ts'));
50
+ // 3. Add to package.json
51
+ if (await fs.pathExists(packageJsonPath)) {
52
+ const packageJson = await fs.readJson(packageJsonPath);
53
+ packageJson.dependencies = packageJson.dependencies || {};
54
+ if (!packageJson.dependencies.mongoose) {
55
+ packageJson.dependencies.mongoose = '^8.1.1';
56
+ await fs.writeJson(packageJsonPath, packageJson, { spaces: 2 });
57
+ console.log(chalk.green('✅ Added mongoose to package.json dependencies'));
58
+ }
59
+ }
60
+ // 4. Update env files
61
+ let envVars = `
62
+ # MongoDB Config
63
+ MONGO_URI=mongodb://localhost:27017/${defaultDb}
64
+ `;
65
+ if (secondaryDbs && secondaryDbs.length > 0) {
66
+ secondaryDbs.forEach(db => {
67
+ const envName = `MONGODB_URI_${db.toUpperCase().replace(/-/g, '_')}`;
68
+ envVars += `${envName}=mongodb://localhost:27017/${projectName}-${db}\n`;
69
+ });
70
+ }
71
+ const updateEnvFile = async (fileName) => {
72
+ const envPath = path.join(projectRoot, fileName);
73
+ if (await fs.pathExists(envPath)) {
74
+ let content = await fs.readFile(envPath, 'utf-8');
75
+ if (!content.includes('MONGO_URI')) {
76
+ content = content.trimEnd() + '\n' + envVars;
77
+ await fs.writeFile(envPath, content);
78
+ console.log(chalk.green(`✅ Added MongoDB variables to ${fileName}`));
79
+ }
80
+ }
81
+ };
82
+ await updateEnvFile('.env');
83
+ await updateEnvFile('.env.example');
84
+ // 5. Ingest into src/index.ts
85
+ let indexContent = await fs.readFile(indexPath, 'utf-8');
86
+ // Import
87
+ const importStatement = `import { setMongoDBConnector } from './database/mongo/client.js';\n`;
88
+ if (!indexContent.includes('setMongoDBConnector')) {
89
+ indexContent = importStatement + indexContent;
90
+ console.log(chalk.green('✅ Injected MongoDB import in src/index.ts'));
91
+ }
92
+ // Options inside MicroserviceServer constructor
93
+ if (!indexContent.includes('mongoUri:')) {
94
+ const serverConstructorOptionsRegex = /new\s+MicroserviceServer\s*\(\{/;
95
+ if (indexContent.match(serverConstructorOptionsRegex)) {
96
+ let injectStr = `\n mongoUri: process.env.MONGO_URI || '',`;
97
+ if (secondaryDbs && secondaryDbs.length > 0) {
98
+ const secConfig = secondaryDbs.map(name => {
99
+ const envVar = `MONGODB_URI_${name.toUpperCase().replace(/-/g, '_')}`;
100
+ return `${name}: process.env.${envVar} || ''`;
101
+ }).join(',\n ');
102
+ injectStr += `\n secondaryConnections: {\n ${secConfig}\n },`;
103
+ }
104
+ indexContent = indexContent.replace(serverConstructorOptionsRegex, (match) => `${match}${injectStr}`);
105
+ console.log(chalk.green('✅ Injected mongoUri into MicroserviceServer configuration'));
106
+ }
107
+ }
108
+ // Connector registration in server.start
109
+ if (!indexContent.includes('setMongoDBConnector(')) {
110
+ const startRegex = /server\.start\(\)\.then\(async\s*\(\)\s*=>\s*\{/;
111
+ if (indexContent.match(startRegex)) {
112
+ indexContent = indexContent.replace(startRegex, (match) => `${match}\n if (server.getMongoDBConnector()) {\n setMongoDBConnector(server.getMongoDBConnector()! as any);\n }`);
113
+ console.log(chalk.green('✅ Injected setMongoDBConnector registration in server.start'));
114
+ }
115
+ }
116
+ await fs.writeFile(indexPath, indexContent);
117
+ console.log(chalk.green('🎉 MongoDB support added successfully! Please run npm install to update your local dependencies.'));
118
+ }
119
+ catch (error) {
120
+ console.error(chalk.red('❌ An error occurred while adding MongoDB:'), error);
121
+ }
122
+ }
123
+ else {
124
+ console.log(chalk.blue('MongoDB is already configured.'));
125
+ // If secondaryDbs are not provided, run prompts
126
+ if (!secondaryDbs) {
127
+ const answers = await inquirer.prompt([
128
+ {
129
+ type: 'input',
130
+ name: 'secondary',
131
+ message: 'Enter additional MongoDB database names to add (comma separated):',
132
+ validate: (input) => input.trim() ? true : 'At least one database name is required'
133
+ }
134
+ ]);
135
+ secondaryDbs = answers.secondary.split(',').map((s) => s.trim()).filter((s) => s.length > 0);
136
+ }
137
+ const secDbs = secondaryDbs || [];
138
+ if (secDbs.length === 0) {
139
+ console.log(chalk.blue('No new secondary databases provided.'));
140
+ return;
141
+ }
142
+ try {
143
+ // Update env files with new secondary connections
144
+ let newEnvVars = '\n# Additional MongoDB Secondary Config\n';
145
+ secDbs.forEach(db => {
146
+ const envName = `MONGODB_URI_${db.toUpperCase().replace(/-/g, '_')}`;
147
+ newEnvVars += `${envName}=mongodb://localhost:27017/${projectName}-${db}\n`;
148
+ });
149
+ const updateEnvFile = async (fileName) => {
150
+ const envPath = path.join(projectRoot, fileName);
151
+ if (await fs.pathExists(envPath)) {
152
+ let content = await fs.readFile(envPath, 'utf-8');
153
+ // Add only the ones that don't exist
154
+ let addedAny = false;
155
+ secDbs.forEach(db => {
156
+ const envName = `MONGODB_URI_${db.toUpperCase().replace(/-/g, '_')}`;
157
+ if (!content.includes(envName)) {
158
+ content = content.trimEnd() + `\n${envName}=mongodb://localhost:27017/${projectName}-${db}`;
159
+ addedAny = true;
160
+ }
161
+ });
162
+ if (addedAny) {
163
+ await fs.writeFile(envPath, content + '\n');
164
+ console.log(chalk.green(`✅ Added new MongoDB secondary variables to ${fileName}`));
165
+ }
166
+ }
167
+ };
168
+ await updateEnvFile('.env');
169
+ await updateEnvFile('.env.example');
170
+ // Update src/index.ts
171
+ let indexContent = await fs.readFile(indexPath, 'utf-8');
172
+ const secondaryConnectionsRegex = /(secondaryConnections\s*:\s*\{)([^]*?)(\},)/;
173
+ const matchSecondary = indexContent.match(secondaryConnectionsRegex);
174
+ if (matchSecondary) {
175
+ // secondaryConnections already exists in index.ts, append to it
176
+ let currentEntries = matchSecondary[2];
177
+ let addedAny = false;
178
+ secDbs.forEach(db => {
179
+ if (!currentEntries.includes(`${db}:`)) {
180
+ const envVar = `MONGODB_URI_${db.toUpperCase().replace(/-/g, '_')}`;
181
+ currentEntries = currentEntries.trimEnd() + `,\n ${db}: process.env.${envVar} || '',`;
182
+ addedAny = true;
183
+ }
184
+ });
185
+ if (addedAny) {
186
+ indexContent = indexContent.replace(secondaryConnectionsRegex, (_, p1, p2, p3) => `${p1}${currentEntries}\n ${p3}`);
187
+ console.log(chalk.green('✅ Added secondary connection configurations to existing secondaryConnections block in src/index.ts'));
188
+ }
189
+ }
190
+ else {
191
+ // secondaryConnections doesn't exist, we must add it.
192
+ // Let's locate new MicroserviceServer({ and inject it
193
+ const serverConstructorOptionsRegex = /new\s+MicroserviceServer\s*\(\{/;
194
+ if (indexContent.match(serverConstructorOptionsRegex)) {
195
+ const secConfig = secDbs.map(name => {
196
+ const envVar = `MONGODB_URI_${name.toUpperCase().replace(/-/g, '_')}`;
197
+ return `${name}: process.env.${envVar} || ''`;
198
+ }).join(',\n ');
199
+ const injectStr = `\n secondaryConnections: {\n ${secConfig}\n },`;
200
+ indexContent = indexContent.replace(serverConstructorOptionsRegex, (match) => `${match}${injectStr}`);
201
+ console.log(chalk.green('✅ Injected new secondaryConnections block in src/index.ts'));
202
+ }
203
+ }
204
+ await fs.writeFile(indexPath, indexContent);
205
+ console.log(chalk.green('🎉 MongoDB secondary connections added successfully!'));
206
+ }
207
+ catch (error) {
208
+ console.error(chalk.red('❌ An error occurred while adding MongoDB secondary connections:'), error);
209
+ }
210
+ }
211
+ };
212
+ //# sourceMappingURL=add-mongo-generator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"add-mongo-generator.js","sourceRoot":"","sources":["../../../src/cli/generators/add-mongo-generator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export declare const addMySQL: (options?: {
2
+ defaultDb?: string;
3
+ secondaryDbs?: string[];
4
+ }) => Promise<void>;
@@ -0,0 +1,221 @@
1
+ import fs from 'fs-extra';
2
+ import path from 'path';
3
+ import chalk from 'chalk';
4
+ import inquirer from 'inquirer';
5
+ import { mysqlClientTemplate } from '../templates/project/mysqlClient.template.js';
6
+ export const addMySQL = async (options) => {
7
+ const projectRoot = process.cwd();
8
+ const indexPath = path.join(projectRoot, 'src', 'index.ts');
9
+ const packageJsonPath = path.join(projectRoot, 'package.json');
10
+ const projectName = path.basename(projectRoot);
11
+ // 1. Validation
12
+ if (!await fs.pathExists(indexPath)) {
13
+ console.error(chalk.red('❌ src/index.ts not found. Are you in the root of the project?'));
14
+ return;
15
+ }
16
+ const mysqlClientPath = path.join(projectRoot, 'src', 'database', 'mysql', 'client.ts');
17
+ const isConfigured = await fs.pathExists(mysqlClientPath);
18
+ let defaultDb = options?.defaultDb;
19
+ let secondaryDbs = options?.secondaryDbs;
20
+ if (!isConfigured) {
21
+ console.log(chalk.blue('Adding MySQL support to your project...'));
22
+ // If options are not provided, run prompts
23
+ if (!defaultDb) {
24
+ const answers = await inquirer.prompt([
25
+ {
26
+ type: 'input',
27
+ name: 'defaultDb',
28
+ message: 'Enter the default MySQL database name:',
29
+ default: projectName
30
+ },
31
+ {
32
+ type: 'input',
33
+ name: 'secondary',
34
+ message: 'Enter additional MySQL database names (comma separated, leave empty if none):'
35
+ }
36
+ ]);
37
+ defaultDb = answers.defaultDb;
38
+ secondaryDbs = answers.secondary ? answers.secondary.split(',').map((s) => s.trim()).filter((s) => s.length > 0) : [];
39
+ }
40
+ try {
41
+ // 2. Create client file
42
+ await fs.ensureDir(path.dirname(mysqlClientPath));
43
+ await fs.writeFile(mysqlClientPath, mysqlClientTemplate);
44
+ console.log(chalk.green('✅ Created src/database/mysql/client.ts'));
45
+ // 3. Add to package.json
46
+ if (await fs.pathExists(packageJsonPath)) {
47
+ const packageJson = await fs.readJson(packageJsonPath);
48
+ packageJson.dependencies = packageJson.dependencies || {};
49
+ let updated = false;
50
+ if (!packageJson.dependencies.sequelize) {
51
+ packageJson.dependencies.sequelize = '^6.37.8';
52
+ updated = true;
53
+ }
54
+ if (!packageJson.dependencies.mysql2) {
55
+ packageJson.dependencies.mysql2 = '^3.9.0';
56
+ updated = true;
57
+ }
58
+ if (updated) {
59
+ await fs.writeJson(packageJsonPath, packageJson, { spaces: 2 });
60
+ console.log(chalk.green('✅ Added sequelize and mysql2 to package.json dependencies'));
61
+ }
62
+ }
63
+ // 4. Update env files
64
+ let envVars = `
65
+ # MySQL Config
66
+ MYSQL_HOST=localhost
67
+ MYSQL_PORT=3306
68
+ MYSQL_USER=root
69
+ MYSQL_PASSWORD=
70
+ MYSQL_DB=${defaultDb}
71
+ `;
72
+ if (secondaryDbs && secondaryDbs.length > 0) {
73
+ secondaryDbs.forEach(db => {
74
+ const upper = db.toUpperCase().replace(/-/g, '_');
75
+ envVars += `
76
+ # MySQL ${db}
77
+ MYSQL_HOST_${upper}=localhost
78
+ MYSQL_PORT_${upper}=3306
79
+ MYSQL_USER_${upper}=root
80
+ MYSQL_PASSWORD_${upper}=
81
+ MYSQL_DB_${upper}=${projectName}_${db}
82
+ `;
83
+ });
84
+ }
85
+ const updateEnvFile = async (fileName) => {
86
+ const envPath = path.join(projectRoot, fileName);
87
+ if (await fs.pathExists(envPath)) {
88
+ let content = await fs.readFile(envPath, 'utf-8');
89
+ if (!content.includes('MYSQL_HOST')) {
90
+ content = content.trimEnd() + '\n' + envVars;
91
+ await fs.writeFile(envPath, content);
92
+ console.log(chalk.green(`✅ Added MySQL variables to ${fileName}`));
93
+ }
94
+ }
95
+ };
96
+ await updateEnvFile('.env');
97
+ await updateEnvFile('.env.example');
98
+ // 5. Ingest into src/index.ts
99
+ let indexContent = await fs.readFile(indexPath, 'utf-8');
100
+ // Import
101
+ const importStatement = `import { MySQLConnector, setMySQLConnector } from './database/mysql/client.js';\n`;
102
+ if (!indexContent.includes('setMySQLConnector')) {
103
+ indexContent = importStatement + indexContent;
104
+ console.log(chalk.green('✅ Injected MySQL import in src/index.ts'));
105
+ }
106
+ // mysqlConfigs array & instantiation
107
+ let mysqlInit = `\n// MySQL Configuration\nconst mysqlConfigs = [\n {\n name: 'default',\n database: process.env.MYSQL_DB || '',\n user: process.env.MYSQL_USER || '',\n password: process.env.MYSQL_PASSWORD,\n host: process.env.MYSQL_HOST || 'localhost',\n port: parseInt(process.env.MYSQL_PORT || '3306'),\n }`;
108
+ if (secondaryDbs && secondaryDbs.length > 0) {
109
+ secondaryDbs.forEach(db => {
110
+ const upper = db.toUpperCase().replace(/-/g, '_');
111
+ mysqlInit += `,\n {\n name: '${db}',\n database: process.env.MYSQL_DB_${upper} || '',\n user: process.env.MYSQL_USER_${upper} || '',\n password: process.env.MYSQL_PASSWORD_${upper},\n host: process.env.MYSQL_HOST_${upper} || 'localhost',\n port: parseInt(process.env.MYSQL_PORT_${upper} || '3306'),\n }`;
112
+ });
113
+ }
114
+ mysqlInit += `\n];\n\nconst mysqlConnector = new MySQLConnector(mysqlConfigs);\nsetMySQLConnector(mysqlConnector);\n\n`;
115
+ if (!indexContent.includes('const mysqlConfigs =')) {
116
+ const serverInstantiationRegex = /const\s+server\s*=\s*new\s+MicroserviceServer/;
117
+ if (indexContent.match(serverInstantiationRegex)) {
118
+ indexContent = indexContent.replace(serverInstantiationRegex, (match) => `${mysqlInit}${match}`);
119
+ console.log(chalk.green('✅ Injected mysqlConnector instantiation in src/index.ts'));
120
+ }
121
+ }
122
+ // Inject parameter inside MicroserviceServer constructor
123
+ if (!indexContent.includes('mysqlConnector:')) {
124
+ const serverConstructorOptionsRegex = /new\s+MicroserviceServer\s*\(\{/;
125
+ if (indexContent.match(serverConstructorOptionsRegex)) {
126
+ indexContent = indexContent.replace(serverConstructorOptionsRegex, (match) => `${match}\n mysqlConnector: mysqlConnector,`);
127
+ console.log(chalk.green('✅ Injected mysqlConnector into MicroserviceServer configuration in src/index.ts'));
128
+ }
129
+ }
130
+ await fs.writeFile(indexPath, indexContent);
131
+ console.log(chalk.green('🎉 MySQL support added successfully! Please run npm install to update your local dependencies.'));
132
+ }
133
+ catch (error) {
134
+ console.error(chalk.red('❌ An error occurred while adding MySQL:'), error);
135
+ }
136
+ }
137
+ else {
138
+ console.log(chalk.blue('MySQL is already configured.'));
139
+ // If secondaryDbs are not provided, run prompts
140
+ if (!secondaryDbs) {
141
+ const answers = await inquirer.prompt([
142
+ {
143
+ type: 'input',
144
+ name: 'secondary',
145
+ message: 'Enter additional MySQL database names to add (comma separated):',
146
+ validate: (input) => input.trim() ? true : 'At least one database name is required'
147
+ }
148
+ ]);
149
+ secondaryDbs = answers.secondary.split(',').map((s) => s.trim()).filter((s) => s.length > 0);
150
+ }
151
+ const secDbs = secondaryDbs || [];
152
+ if (secDbs.length === 0) {
153
+ console.log(chalk.blue('No new secondary databases provided.'));
154
+ return;
155
+ }
156
+ try {
157
+ // Update env files with new secondary connections
158
+ let newEnvVars = '\n# Additional MySQL Secondary Config\n';
159
+ secDbs.forEach(db => {
160
+ const upper = db.toUpperCase().replace(/-/g, '_');
161
+ newEnvVars += `
162
+ # MySQL ${db}
163
+ MYSQL_HOST_${upper}=localhost
164
+ MYSQL_PORT_${upper}=3306
165
+ MYSQL_USER_${upper}=root
166
+ MYSQL_PASSWORD_${upper}=
167
+ MYSQL_DB_${upper}=${projectName}_${db}
168
+ `;
169
+ });
170
+ const updateEnvFile = async (fileName) => {
171
+ const envPath = path.join(projectRoot, fileName);
172
+ if (await fs.pathExists(envPath)) {
173
+ let content = await fs.readFile(envPath, 'utf-8');
174
+ let addedAny = false;
175
+ secDbs.forEach(db => {
176
+ const upper = db.toUpperCase().replace(/-/g, '_');
177
+ const envName = `MYSQL_DB_${upper}`;
178
+ if (!content.includes(envName)) {
179
+ content = content.trimEnd() + `\n\n# MySQL ${db}\nMYSQL_HOST_${upper}=localhost\nMYSQL_PORT_${upper}=3306\nMYSQL_USER_${upper}=root\nMYSQL_PASSWORD_${upper}=\nMYSQL_DB_${upper}=${projectName}_${db}`;
180
+ addedAny = true;
181
+ }
182
+ });
183
+ if (addedAny) {
184
+ await fs.writeFile(envPath, content + '\n');
185
+ console.log(chalk.green(`✅ Added new MySQL secondary variables to ${fileName}`));
186
+ }
187
+ }
188
+ };
189
+ await updateEnvFile('.env');
190
+ await updateEnvFile('.env.example');
191
+ // Update src/index.ts
192
+ let indexContent = await fs.readFile(indexPath, 'utf-8');
193
+ const mysqlConfigsRegex = /(const\s+mysqlConfigs\s*=\s*\[)([^]*?)(\];)/;
194
+ const matchConfigs = indexContent.match(mysqlConfigsRegex);
195
+ if (matchConfigs) {
196
+ let currentEntries = matchConfigs[2];
197
+ let addedAny = false;
198
+ secDbs.forEach(db => {
199
+ if (!currentEntries.includes(`name: '${db}'`)) {
200
+ const upper = db.toUpperCase().replace(/-/g, '_');
201
+ currentEntries = currentEntries.trimEnd() + `,\n {\n name: '${db}',\n database: process.env.MYSQL_DB_${upper} || '',\n user: process.env.MYSQL_USER_${upper} || '',\n password: process.env.MYSQL_PASSWORD_${upper},\n host: process.env.MYSQL_HOST_${upper} || 'localhost',\n port: parseInt(process.env.MYSQL_PORT_${upper} || '3306'),\n }`;
202
+ addedAny = true;
203
+ }
204
+ });
205
+ if (addedAny) {
206
+ indexContent = indexContent.replace(mysqlConfigsRegex, (_, p1, p2, p3) => `${p1}${currentEntries}\n${p3}`);
207
+ console.log(chalk.green('✅ Added secondary connection configurations to mysqlConfigs in src/index.ts'));
208
+ }
209
+ }
210
+ else {
211
+ console.warn(chalk.yellow('⚠️ Could not find mysqlConfigs array in src/index.ts. You might need to manually add secondary connection configurations.'));
212
+ }
213
+ await fs.writeFile(indexPath, indexContent);
214
+ console.log(chalk.green('🎉 MySQL secondary connections added successfully!'));
215
+ }
216
+ catch (error) {
217
+ console.error(chalk.red('❌ An error occurred while adding MySQL secondary connections:'), error);
218
+ }
219
+ }
220
+ };
221
+ //# sourceMappingURL=add-mysql-generator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"add-mysql-generator.js","sourceRoot":"","sources":["../../../src/cli/generators/add-mysql-generator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export declare const addRedis: () => Promise<void>;