micro-generate 1.3.10 → 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.
- package/README.md +83 -9
- package/dist/cli/generators/add-mongo-generator.d.ts +4 -0
- package/dist/cli/generators/add-mongo-generator.js +212 -0
- package/dist/cli/generators/add-mongo-generator.js.map +1 -0
- package/dist/cli/generators/add-mysql-generator.d.ts +4 -0
- package/dist/cli/generators/add-mysql-generator.js +221 -0
- package/dist/cli/generators/add-mysql-generator.js.map +1 -0
- package/dist/cli/generators/add-redis-generator.d.ts +1 -0
- package/dist/cli/generators/add-redis-generator.js +100 -0
- package/dist/cli/generators/add-redis-generator.js.map +1 -0
- package/dist/cli/generators/feature-generator.js +26 -338
- package/dist/cli/generators/feature-generator.js.map +1 -1
- package/dist/cli/generators/init-generator.js +31 -649
- package/dist/cli/generators/init-generator.js.map +1 -1
- package/dist/cli/generators/model-generator.d.ts +6 -0
- package/dist/cli/generators/model-generator.js +50 -0
- package/dist/cli/generators/model-generator.js.map +1 -0
- package/dist/cli/index.js +71 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/templates/feature/mongoModel.template.d.ts +6 -0
- package/dist/cli/templates/feature/mongoModel.template.js +57 -0
- package/dist/cli/templates/feature/mongoModel.template.js.map +1 -0
- package/dist/cli/templates/feature/mysqlModel.template.d.ts +6 -0
- package/dist/cli/templates/feature/mysqlModel.template.js +62 -0
- package/dist/cli/templates/feature/mysqlModel.template.js.map +1 -0
- package/dist/cli/templates/feature/resolvers.template.d.ts +1 -0
- package/dist/cli/templates/feature/resolvers.template.js +21 -0
- package/dist/cli/templates/feature/resolvers.template.js.map +1 -0
- package/dist/cli/templates/feature/service.template.d.ts +11 -0
- package/dist/cli/templates/feature/service.template.js +68 -0
- package/dist/cli/templates/feature/service.template.js.map +1 -0
- package/dist/cli/templates/feature/typeDefs.template.d.ts +1 -0
- package/dist/cli/templates/feature/typeDefs.template.js +24 -0
- package/dist/cli/templates/feature/typeDefs.template.js.map +1 -0
- package/dist/cli/templates/project/api.template.d.ts +1 -0
- package/dist/cli/templates/project/api.template.js +40 -0
- package/dist/cli/templates/project/api.template.js.map +1 -0
- package/dist/cli/templates/project/config.template.d.ts +1 -0
- package/dist/cli/templates/project/config.template.js +12 -0
- package/dist/cli/templates/project/config.template.js.map +1 -0
- package/dist/cli/templates/project/featuresIndex.template.d.ts +1 -0
- package/dist/cli/templates/project/featuresIndex.template.js +4 -0
- package/dist/cli/templates/project/featuresIndex.template.js.map +1 -0
- package/dist/cli/templates/project/index.template.d.ts +8 -0
- package/dist/cli/templates/project/index.template.js +104 -0
- package/dist/cli/templates/project/index.template.js.map +1 -0
- package/dist/cli/templates/project/mongo.template.d.ts +1 -0
- package/dist/cli/templates/project/mongo.template.js +51 -0
- package/dist/cli/templates/project/mongo.template.js.map +1 -0
- package/dist/cli/templates/project/mongoClient.template.d.ts +1 -0
- package/dist/cli/templates/project/mongoClient.template.js +21 -0
- package/dist/cli/templates/project/mongoClient.template.js.map +1 -0
- package/dist/cli/templates/project/mysqlClient.template.d.ts +1 -0
- package/dist/cli/templates/project/mysqlClient.template.js +18 -0
- package/dist/cli/templates/project/mysqlClient.template.js.map +1 -0
- package/dist/cli/templates/project/redis.template.d.ts +1 -0
- package/dist/cli/templates/project/redis.template.js +255 -0
- package/dist/cli/templates/project/redis.template.js.map +1 -0
- package/dist/cli/templates/project/sanitize.template.d.ts +1 -0
- package/dist/cli/templates/project/sanitize.template.js +11 -0
- package/dist/cli/templates/project/sanitize.template.js.map +1 -0
- package/dist/cli/templates/project/skill.template.d.ts +1 -0
- package/dist/cli/templates/project/skill.template.js +147 -0
- package/dist/cli/templates/project/skill.template.js.map +1 -0
- package/dist/cli/templates/project/tsconfig.template.d.ts +1 -0
- package/dist/cli/templates/project/tsconfig.template.js +17 -0
- package/dist/cli/templates/project/tsconfig.template.js.map +1 -0
- package/dist/core/MicroserviceServer.d.ts +4 -0
- package/dist/core/MicroserviceServer.js +13 -0
- package/dist/core/MicroserviceServer.js.map +1 -1
- package/dist/database/mysql.d.ts +23 -0
- package/dist/database/mysql.js +68 -0
- package/dist/database/mysql.js.map +1 -0
- package/dist/database/redis.d.ts +1 -1
- package/dist/database/redis.js +6 -8
- package/dist/database/redis.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- 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.
|
|
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
|
-
│ ├──
|
|
138
|
-
│ │ ├── mongo
|
|
139
|
-
│ │ ├──
|
|
140
|
-
│ │
|
|
141
|
-
│
|
|
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
|
-
│ ├──
|
|
148
|
-
│ └──
|
|
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,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,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>;
|