orasql-gen 0.1.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 (72) hide show
  1. package/.orasql.example +12 -0
  2. package/LICENSE +21 -0
  3. package/README.md +320 -0
  4. package/dist/commands/gen.d.ts +3 -0
  5. package/dist/commands/gen.d.ts.map +1 -0
  6. package/dist/commands/gen.js +281 -0
  7. package/dist/commands/gen.js.map +1 -0
  8. package/dist/commands/history.d.ts +3 -0
  9. package/dist/commands/history.d.ts.map +1 -0
  10. package/dist/commands/history.js +65 -0
  11. package/dist/commands/history.js.map +1 -0
  12. package/dist/commands/inspect.d.ts +3 -0
  13. package/dist/commands/inspect.d.ts.map +1 -0
  14. package/dist/commands/inspect.js +80 -0
  15. package/dist/commands/inspect.js.map +1 -0
  16. package/dist/commands/profile.d.ts +3 -0
  17. package/dist/commands/profile.d.ts.map +1 -0
  18. package/dist/commands/profile.js +86 -0
  19. package/dist/commands/profile.js.map +1 -0
  20. package/dist/commands/schemas.d.ts +3 -0
  21. package/dist/commands/schemas.d.ts.map +1 -0
  22. package/dist/commands/schemas.js +62 -0
  23. package/dist/commands/schemas.js.map +1 -0
  24. package/dist/core/connection.d.ts +6 -0
  25. package/dist/core/connection.d.ts.map +1 -0
  26. package/dist/core/connection.js +54 -0
  27. package/dist/core/connection.js.map +1 -0
  28. package/dist/core/inspector.d.ts +27 -0
  29. package/dist/core/inspector.d.ts.map +1 -0
  30. package/dist/core/inspector.js +135 -0
  31. package/dist/core/inspector.js.map +1 -0
  32. package/dist/generators/insert.d.ts +3 -0
  33. package/dist/generators/insert.d.ts.map +1 -0
  34. package/dist/generators/insert.js +51 -0
  35. package/dist/generators/insert.js.map +1 -0
  36. package/dist/generators/interactive.d.ts +3 -0
  37. package/dist/generators/interactive.d.ts.map +1 -0
  38. package/dist/generators/interactive.js +118 -0
  39. package/dist/generators/interactive.js.map +1 -0
  40. package/dist/generators/select.d.ts +3 -0
  41. package/dist/generators/select.d.ts.map +1 -0
  42. package/dist/generators/select.js +63 -0
  43. package/dist/generators/select.js.map +1 -0
  44. package/dist/generators/update.d.ts +3 -0
  45. package/dist/generators/update.d.ts.map +1 -0
  46. package/dist/generators/update.js +39 -0
  47. package/dist/generators/update.js.map +1 -0
  48. package/dist/index.d.ts +3 -0
  49. package/dist/index.d.ts.map +1 -0
  50. package/dist/index.js +22 -0
  51. package/dist/index.js.map +1 -0
  52. package/dist/utils/clipboard.d.ts +2 -0
  53. package/dist/utils/clipboard.d.ts.map +1 -0
  54. package/dist/utils/clipboard.js +13 -0
  55. package/dist/utils/clipboard.js.map +1 -0
  56. package/dist/utils/config.d.ts +12 -0
  57. package/dist/utils/config.d.ts.map +1 -0
  58. package/dist/utils/config.js +42 -0
  59. package/dist/utils/config.js.map +1 -0
  60. package/dist/utils/history.d.ts +11 -0
  61. package/dist/utils/history.d.ts.map +1 -0
  62. package/dist/utils/history.js +51 -0
  63. package/dist/utils/history.js.map +1 -0
  64. package/dist/utils/profiles.d.ts +11 -0
  65. package/dist/utils/profiles.d.ts.map +1 -0
  66. package/dist/utils/profiles.js +47 -0
  67. package/dist/utils/profiles.js.map +1 -0
  68. package/dist/utils/topology.d.ts +8 -0
  69. package/dist/utils/topology.d.ts.map +1 -0
  70. package/dist/utils/topology.js +63 -0
  71. package/dist/utils/topology.js.map +1 -0
  72. package/package.json +61 -0
@@ -0,0 +1,12 @@
1
+ {
2
+ "host": "localhost",
3
+ "port": 1521,
4
+ "sid": "ORCL",
5
+ "serviceName": "mi_servicio.dominio.com",
6
+ "user": "my_user",
7
+ "password": "my_password",
8
+ "schema": "MY_SCHEMA",
9
+ "instantClientDir": "/usr/local/lib/oracle/instantclient_18_1"
10
+ }
11
+
12
+ // Nota: usa "sid" o "serviceName", no ambos.
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Jaime De Leon
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,320 @@
1
+ # orasql-gen
2
+
3
+ CLI para generar sentencias SQL automáticamente a partir de tablas Oracle 12+.
4
+
5
+ Elimina el trabajo manual de escribir INSERTs, UPDATEs y SELECTs consultando la estructura de tus tablas directamente desde la base de datos.
6
+
7
+ ## Inicio rápido
8
+
9
+ > Tutorial paso a paso para empezar a usar `orasql-gen` en menos de 5 minutos.
10
+
11
+ ### Paso 1 — Instalar
12
+
13
+ ```bash
14
+ npm install -g orasql-gen
15
+ ```
16
+
17
+ ### Paso 2 — Instalar Oracle Instant Client (requerido para Oracle 12)
18
+
19
+ Descarga el paquete **Basic** desde la página oficial de Oracle según tu sistema operativo:
20
+
21
+ - **macOS Intel**: https://www.oracle.com/database/technologies/instant-client/macos-intel-x86-downloads.html
22
+ - **macOS Apple Silicon**: https://www.oracle.com/database/technologies/instant-client/macos-arm-mvme-downloads.html
23
+ - **Linux x64**: https://www.oracle.com/database/technologies/instant-client/linux-x86-64-downloads.html
24
+ - **Windows**: https://www.oracle.com/database/technologies/instant-client/winx64-64-downloads.html
25
+
26
+ Descomprímelo en una ruta fija, por ejemplo `/usr/local/lib/oracle/instantclient_19_8`.
27
+
28
+ > En macOS es necesario remover la cuarentena y re-firmar las librerías:
29
+ > ```bash
30
+ > sudo xattr -r -d com.apple.quarantine /usr/local/lib/oracle/instantclient_18_1/
31
+ > sudo find /usr/local/lib/oracle/instantclient_18_1/ -name "*.dylib" -exec codesign --force --sign - {} \;
32
+ > ```
33
+
34
+ ### Paso 3 — Crear el archivo de configuración
35
+
36
+ En el directorio de tu proyecto, crea un archivo `.orasql` con tus datos de conexión:
37
+
38
+ ```json
39
+ {
40
+ "host": "192.168.1.100",
41
+ "port": 1521,
42
+ "serviceName": "MISERVICIO",
43
+ "user": "mi_usuario",
44
+ "password": "mi_password",
45
+ "schema": "MI_SCHEMA",
46
+ "instantClientDir": "/usr/local/lib/oracle/instantclient_18_1"
47
+ }
48
+ ```
49
+
50
+ > Usa `"sid"` en lugar de `"serviceName"` si tu base de datos usa SID en vez de nombre de servicio.
51
+
52
+ ### Paso 4 — Verificar la conexión
53
+
54
+ Si no sabes cuál es tu schema, el siguiente comando lista todos los schemas accesibles con tu usuario:
55
+
56
+ ```bash
57
+ orasql-gen schemas
58
+ ```
59
+
60
+ Busca en qué schema está una tabla específica:
61
+
62
+ ```bash
63
+ orasql-gen schemas --tabla CLIENTES
64
+ # Tabla "CLIENTES" encontrada en:
65
+ # APP_SCHEMA (filas aprox: 5000)
66
+ ```
67
+
68
+ Actualiza `"schema"` en tu `.orasql` con el valor encontrado.
69
+
70
+ ### Paso 5 — Inspeccionar una tabla
71
+
72
+ ```bash
73
+ orasql-gen inspect CLIENTES
74
+ ```
75
+
76
+ Verás la estructura completa: columnas, tipos, si es nullable, PKs, FKs y secuencias detectadas automáticamente:
77
+
78
+ ```
79
+ Tabla: APP_SCHEMA.CLIENTES
80
+ ────────────────────────────────────────────────────────────────────────────
81
+ Columna Tipo Null Flags
82
+ ────────────────────────────────────────────────────────────────────────────
83
+ ID_CLIENTE NUMBER(10) NO [PK] [SEQ:SEQ_CLIENTES]
84
+ NOMBRE VARCHAR2(100) NO
85
+ EMAIL VARCHAR2(200) YES
86
+ FECHA_ALTA DATE NO [DEFAULT:SYSDATE]
87
+ ACTIVO NUMBER(1) NO [DEFAULT:1]
88
+ ────────────────────────────────────────────────────────────────────────────
89
+ Total: 5 columnas
90
+ ```
91
+
92
+ ### Paso 6 — Generar tu primer INSERT
93
+
94
+ ```bash
95
+ orasql-gen gen insert CLIENTES
96
+ ```
97
+
98
+ Resultado:
99
+
100
+ ```sql
101
+ -- INSERT generado para APP_SCHEMA.CLIENTES
102
+ INSERT INTO APP_SCHEMA.CLIENTES (
103
+ ID_CLIENTE,
104
+ NOMBRE,
105
+ EMAIL,
106
+ FECHA_ALTA,
107
+ ACTIVO
108
+ ) VALUES (
109
+ SEQ_CLIENTES.NEXTVAL, -- PK
110
+ /* ':NOMBRE' (VARCHAR2 max 100) */,
111
+ NULL,
112
+ SYSDATE -- default,
113
+ 1 -- default
114
+ );
115
+ ```
116
+
117
+ El resultado incluye:
118
+ - `SEQ_CLIENTES.NEXTVAL` detectado automáticamente para la PK
119
+ - `SYSDATE` y valores por defecto del schema aplicados
120
+ - Placeholders claros para cada campo requerido
121
+ - `NULL` en campos opcionales
122
+
123
+ ### Paso 7 — Generar INSERTs con tablas relacionadas
124
+
125
+ Cuando necesitas insertar en múltiples tablas relacionadas, usa `--related`. El CLI detecta las FKs y ordena los INSERTs automáticamente:
126
+
127
+ ```bash
128
+ orasql-gen gen insert CLIENTES --related PEDIDOS
129
+ ```
130
+
131
+ Salida:
132
+
133
+ ```sql
134
+ -- INSERT generado para APP_SCHEMA.CLIENTES
135
+ INSERT INTO APP_SCHEMA.CLIENTES (
136
+ ID_CLIENTE,
137
+ NOMBRE,
138
+ EMAIL,
139
+ FECHA_ALTA,
140
+ ACTIVO
141
+ ) VALUES (
142
+ SEQ_CLIENTES.NEXTVAL, -- PK
143
+ /* ':NOMBRE' (VARCHAR2 max 100) */,
144
+ NULL,
145
+ SYSDATE -- default,
146
+ 1 -- default
147
+ );
148
+
149
+ -- INSERT generado para APP_SCHEMA.PEDIDOS
150
+ INSERT INTO APP_SCHEMA.PEDIDOS (
151
+ ID_PEDIDO,
152
+ ID_CLIENTE,
153
+ FECHA_PEDIDO,
154
+ TOTAL
155
+ ) VALUES (
156
+ SEQ_PEDIDOS.NEXTVAL, -- PK
157
+ /* :ID_CLIENTE — FK → CLIENTES.ID_CLIENTE */,
158
+ SYSDATE -- default,
159
+ /* :TOTAL (NUMBER) */
160
+ );
161
+
162
+ -- Tablas en orden de inserción: CLIENTES → PEDIDOS
163
+ ```
164
+
165
+ ### Paso 8 — Copiar al portapapeles y pegar en tu cliente SQL
166
+
167
+ ```bash
168
+ orasql-gen gen insert CLIENTES --related PEDIDOS --clipboard
169
+ # ✓ SQL copiado al portapapeles.
170
+ ```
171
+
172
+ Pega directamente en SQL Developer, DBeaver, Toad o cualquier cliente SQL y reemplaza los placeholders.
173
+
174
+ ### Flujo de trabajo completo
175
+
176
+ ```bash
177
+ # 1. Ver la estructura de las tablas involucradas
178
+ orasql-gen inspect CLIENTES
179
+ orasql-gen inspect PEDIDOS
180
+
181
+ # 2. Generar el script completo (SELECT + INSERT + UPDATE)
182
+ orasql-gen gen script CLIENTES --related PEDIDOS --clipboard
183
+
184
+ # 3. Pegar en tu cliente SQL y completar los valores
185
+
186
+ # 4. Si necesitas repetirlo, recuperarlo del historial
187
+ orasql-gen history
188
+ orasql-gen history --clipboard 3
189
+ ```
190
+
191
+ ### Trabajar con múltiples ambientes (DEV / QA / PROD)
192
+
193
+ ```bash
194
+ # Guardar configuración actual como perfil DEV
195
+ orasql-gen profile save DEV
196
+
197
+ # Configurar conexión a QA en .orasql y guardarla
198
+ orasql-gen profile save QA
199
+
200
+ # Cambiar entre ambientes en segundos
201
+ orasql-gen profile use QA
202
+ orasql-gen gen insert CLIENTES --clipboard
203
+
204
+ orasql-gen profile use DEV
205
+ ```
206
+
207
+ ---
208
+
209
+ ## Instalación
210
+
211
+ ```bash
212
+ npm install -g orasql-gen
213
+ ```
214
+
215
+ ## Configuración
216
+
217
+ Copia el archivo de ejemplo y completa tus datos de conexión:
218
+
219
+ ```bash
220
+ cp .orasql.example .orasql
221
+ ```
222
+
223
+ ```json
224
+ {
225
+ "host": "tu_host",
226
+ "port": 1521,
227
+ "serviceName": "tu_servicio",
228
+ "user": "tu_usuario",
229
+ "password": "tu_password",
230
+ "schema": "TU_SCHEMA",
231
+ "instantClientDir": "/ruta/a/instantclient"
232
+ }
233
+ ```
234
+
235
+ > El archivo `.orasql` está en `.gitignore` — tus credenciales nunca se suben al repositorio.
236
+
237
+ ## Comandos
238
+
239
+ ### Inspeccionar estructura de una tabla
240
+ ```bash
241
+ orasql-gen inspect CLIENTES
242
+ ```
243
+
244
+ ### Generar INSERT
245
+ ```bash
246
+ # Template con placeholders
247
+ orasql-gen gen insert CLIENTES
248
+
249
+ # Con tablas relacionadas (ordenadas por FK automáticamente)
250
+ orasql-gen gen insert CLIENTES --related PEDIDOS
251
+ orasql-gen gen insert CLIENTES --related PEDIDOS,DETALLE_PEDIDO
252
+
253
+ # Modo interactivo (te pide el valor de cada campo)
254
+ orasql-gen gen insert CLIENTES --interactive
255
+
256
+ # Guardar en archivo
257
+ orasql-gen gen insert CLIENTES --output nuevo_cliente.sql
258
+
259
+ # Copiar directamente al portapapeles
260
+ orasql-gen gen insert CLIENTES --clipboard
261
+ orasql-gen gen insert CLIENTES --related PEDIDOS --clipboard
262
+ ```
263
+
264
+ ### Generar UPDATE
265
+ ```bash
266
+ orasql-gen gen update CLIENTES
267
+ orasql-gen gen update CLIENTES --output actualizar_cliente.sql
268
+ orasql-gen gen update CLIENTES --clipboard
269
+ ```
270
+
271
+ ### Generar SELECT con JOINs automáticos
272
+ ```bash
273
+ orasql-gen gen select CLIENTES --related PEDIDOS
274
+ orasql-gen gen select CLIENTES --related PEDIDOS --clipboard
275
+ orasql-gen gen select CLIENTES --related PEDIDOS --output consulta.sql
276
+ ```
277
+
278
+ ### Script completo (SELECT + INSERT + UPDATE)
279
+ ```bash
280
+ orasql-gen gen script CLIENTES
281
+ orasql-gen gen script CLIENTES --related PEDIDOS
282
+ orasql-gen gen script CLIENTES --related PEDIDOS --output script.sql
283
+ orasql-gen gen script CLIENTES --related PEDIDOS --clipboard
284
+ ```
285
+
286
+ > **Tip:** La opción `--clipboard` está disponible en todos los comandos de generación (`insert`, `update`, `select`, `script`) y copia el SQL directamente al portapapeles, listo para pegar en tu cliente SQL.
287
+
288
+ ### Descubrir schemas y tablas
289
+ ```bash
290
+ orasql-gen schemas
291
+ orasql-gen schemas --tabla CLIENTES
292
+ ```
293
+
294
+ ### Historial de queries generados
295
+ ```bash
296
+ orasql-gen history
297
+ orasql-gen history --last 20
298
+ orasql-gen history --get 5
299
+ orasql-gen history --clipboard 5
300
+ orasql-gen history --clear
301
+ ```
302
+
303
+ ### Perfiles de conexión (DEV / QA / PROD)
304
+ ```bash
305
+ orasql-gen profile save DEV
306
+ orasql-gen profile save PROD
307
+ orasql-gen profile list
308
+ orasql-gen profile use PROD
309
+ orasql-gen profile delete DEV
310
+ ```
311
+
312
+ ## Requisitos
313
+
314
+ - Node.js 18+
315
+ - Oracle Instant Client 18+ (para Thick mode con Oracle 12)
316
+ - Acceso a una base de datos Oracle 12+
317
+
318
+ ## Licencia
319
+
320
+ MIT
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function registerGen(program: Command): void;
3
+ //# sourceMappingURL=gen.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gen.d.ts","sourceRoot":"","sources":["../../src/commands/gen.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAepC,wBAAgB,WAAW,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA4QlD"}
@@ -0,0 +1,281 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.registerGen = registerGen;
7
+ const chalk_1 = __importDefault(require("chalk"));
8
+ const fs_1 = __importDefault(require("fs"));
9
+ const path_1 = __importDefault(require("path"));
10
+ const config_1 = require("../utils/config");
11
+ const connection_1 = require("../core/connection");
12
+ const inspector_1 = require("../core/inspector");
13
+ const insert_1 = require("../generators/insert");
14
+ const select_1 = require("../generators/select");
15
+ const update_1 = require("../generators/update");
16
+ const interactive_1 = require("../generators/interactive");
17
+ const topology_1 = require("../utils/topology");
18
+ const history_1 = require("../utils/history");
19
+ const clipboard_1 = require("../utils/clipboard");
20
+ function registerGen(program) {
21
+ const gen = program
22
+ .command('gen')
23
+ .description('Genera sentencias SQL para una tabla Oracle');
24
+ // gen insert <tabla>
25
+ gen
26
+ .command('insert <tabla>')
27
+ .description('Genera un template INSERT con todos los campos de la tabla')
28
+ .option('-s, --schema <schema>', 'Schema a usar (sobreescribe el del archivo .orasql)')
29
+ .option('-o, --output <archivo>', 'Guardar el resultado en un archivo .sql')
30
+ .option('-r, --related <tablas>', 'Tablas relacionadas separadas por coma (ej: USUARIOROL,OTRATABLA)')
31
+ .option('-i, --interactive', 'Modo interactivo: pide el valor de cada campo')
32
+ .option('--clipboard', 'Copiar el SQL al portapapeles')
33
+ .action(async (tabla, options) => {
34
+ var _a, _b, _c;
35
+ let connection;
36
+ try {
37
+ const config = (0, config_1.loadConfig)();
38
+ const schema = (_a = options.schema) !== null && _a !== void 0 ? _a : config.schema;
39
+ const sid = (_c = (_b = config.sid) !== null && _b !== void 0 ? _b : config.serviceName) !== null && _c !== void 0 ? _c : '';
40
+ console.log(chalk_1.default.cyan(`\nConectando a Oracle ${config.host}:${config.port}/${sid}...`));
41
+ connection = await (0, connection_1.getConnection)(config);
42
+ console.log(chalk_1.default.green('✓ Conectado\n'));
43
+ // Inspeccionar tabla principal
44
+ console.log(chalk_1.default.cyan(`Inspeccionando ${schema}.${tabla.toUpperCase()}...`));
45
+ const mainTable = await (0, inspector_1.inspectTable)(connection, tabla, schema);
46
+ // Inspeccionar tablas relacionadas
47
+ const relatedNames = options.related
48
+ ? options.related.split(',').map((t) => t.trim()).filter(Boolean)
49
+ : [];
50
+ const relatedTables = [];
51
+ for (const relName of relatedNames) {
52
+ console.log(chalk_1.default.cyan(`Inspeccionando ${schema}.${relName.toUpperCase()}...`));
53
+ relatedTables.push(await (0, inspector_1.inspectTable)(connection, relName, schema));
54
+ }
55
+ await (0, connection_1.closeConnection)(connection);
56
+ connection = undefined;
57
+ // Ordenar todas las tablas por dependencias FK
58
+ const allTables = [mainTable, ...relatedTables];
59
+ const ordered = relatedNames.length > 0 ? (0, topology_1.sortByDependencies)(allTables) : allTables;
60
+ let sql = '';
61
+ if (options.interactive) {
62
+ // Modo interactivo: pedir valores campo por campo
63
+ for (const t of ordered) {
64
+ sql += await (0, interactive_1.generateInsertInteractive)(t);
65
+ sql += '\n';
66
+ }
67
+ }
68
+ else {
69
+ // Modo template: generar con placeholders
70
+ for (const t of ordered) {
71
+ sql += (0, insert_1.generateInsert)(t);
72
+ sql += '\n';
73
+ }
74
+ }
75
+ // Guardar en historial
76
+ (0, history_1.saveToHistory)('gen insert', tabla, sql);
77
+ if (options.output) {
78
+ const outputPath = path_1.default.resolve(process.cwd(), options.output);
79
+ fs_1.default.writeFileSync(outputPath, sql, 'utf-8');
80
+ console.log(chalk_1.default.green(`\n✓ INSERT(s) guardado(s) en: ${outputPath}\n`));
81
+ }
82
+ else if (options.clipboard) {
83
+ (0, clipboard_1.copyToClipboard)(sql);
84
+ console.log(chalk_1.default.green('\n✓ SQL copiado al portapapeles.\n'));
85
+ }
86
+ else {
87
+ console.log(chalk_1.default.bold.white('\n-- SQL Generado:'));
88
+ console.log(chalk_1.default.gray('─'.repeat(80)));
89
+ console.log(chalk_1.default.yellow(sql));
90
+ console.log(chalk_1.default.gray('─'.repeat(80)));
91
+ if (relatedNames.length > 0) {
92
+ console.log(chalk_1.default.gray(`Tablas en orden de inserción: ${ordered.map((t) => t.name).join(' → ')}\n`));
93
+ }
94
+ console.log(chalk_1.default.gray('Tip: usa --output archivo.sql o --clipboard para otras opciones de salida\n'));
95
+ }
96
+ }
97
+ catch (err) {
98
+ console.error(chalk_1.default.red(`\n✗ Error: ${err.message}\n`));
99
+ process.exit(1);
100
+ }
101
+ finally {
102
+ if (connection)
103
+ await (0, connection_1.closeConnection)(connection);
104
+ }
105
+ });
106
+ // gen select <tabla>
107
+ gen
108
+ .command('select <tabla>')
109
+ .description('Genera un SELECT con JOINs automáticos basados en las FKs')
110
+ .option('-s, --schema <schema>', 'Schema a usar (sobreescribe el del archivo .orasql)')
111
+ .option('-o, --output <archivo>', 'Guardar el resultado en un archivo .sql')
112
+ .option('-r, --related <tablas>', 'Tablas adicionales para incluir en los JOINs')
113
+ .option('--clipboard', 'Copiar el SQL al portapapeles')
114
+ .action(async (tabla, options) => {
115
+ var _a, _b, _c;
116
+ let connection;
117
+ try {
118
+ const config = (0, config_1.loadConfig)();
119
+ const schema = (_a = options.schema) !== null && _a !== void 0 ? _a : config.schema;
120
+ const sid = (_c = (_b = config.sid) !== null && _b !== void 0 ? _b : config.serviceName) !== null && _c !== void 0 ? _c : '';
121
+ console.log(chalk_1.default.cyan(`\nConectando a Oracle ${config.host}:${config.port}/${sid}...`));
122
+ connection = await (0, connection_1.getConnection)(config);
123
+ console.log(chalk_1.default.green('✓ Conectado\n'));
124
+ console.log(chalk_1.default.cyan(`Inspeccionando ${schema}.${tabla.toUpperCase()}...`));
125
+ const mainTable = await (0, inspector_1.inspectTable)(connection, tabla, schema);
126
+ const relatedNames = options.related
127
+ ? options.related.split(',').map((t) => t.trim()).filter(Boolean)
128
+ : [];
129
+ const relatedTables = [];
130
+ for (const relName of relatedNames) {
131
+ console.log(chalk_1.default.cyan(`Inspeccionando ${schema}.${relName.toUpperCase()}...`));
132
+ relatedTables.push(await (0, inspector_1.inspectTable)(connection, relName, schema));
133
+ }
134
+ await (0, connection_1.closeConnection)(connection);
135
+ connection = undefined;
136
+ const sql = (0, select_1.generateSelect)(mainTable, relatedTables);
137
+ (0, history_1.saveToHistory)('gen select', tabla, sql);
138
+ if (options.output) {
139
+ const outputPath = path_1.default.resolve(process.cwd(), options.output);
140
+ fs_1.default.writeFileSync(outputPath, sql, 'utf-8');
141
+ console.log(chalk_1.default.green(`\n✓ SELECT guardado en: ${outputPath}\n`));
142
+ }
143
+ else if (options.clipboard) {
144
+ (0, clipboard_1.copyToClipboard)(sql);
145
+ console.log(chalk_1.default.green('\n✓ SQL copiado al portapapeles.\n'));
146
+ }
147
+ else {
148
+ console.log(chalk_1.default.bold.white('\n-- SQL Generado:'));
149
+ console.log(chalk_1.default.gray('─'.repeat(80)));
150
+ console.log(chalk_1.default.yellow(sql));
151
+ console.log(chalk_1.default.gray('─'.repeat(80) + '\n'));
152
+ }
153
+ }
154
+ catch (err) {
155
+ console.error(chalk_1.default.red(`\n✗ Error: ${err.message}\n`));
156
+ process.exit(1);
157
+ }
158
+ finally {
159
+ if (connection)
160
+ await (0, connection_1.closeConnection)(connection);
161
+ }
162
+ });
163
+ // gen update <tabla>
164
+ gen
165
+ .command('update <tabla>')
166
+ .description('Genera un template UPDATE por PK para la tabla')
167
+ .option('-s, --schema <schema>', 'Schema a usar')
168
+ .option('-o, --output <archivo>', 'Guardar en un archivo .sql')
169
+ .option('--clipboard', 'Copiar al portapapeles')
170
+ .action(async (tabla, options) => {
171
+ var _a, _b, _c;
172
+ let connection;
173
+ try {
174
+ const config = (0, config_1.loadConfig)();
175
+ const schema = (_a = options.schema) !== null && _a !== void 0 ? _a : config.schema;
176
+ const sid = (_c = (_b = config.sid) !== null && _b !== void 0 ? _b : config.serviceName) !== null && _c !== void 0 ? _c : '';
177
+ console.log(chalk_1.default.cyan(`\nConectando a Oracle ${config.host}:${config.port}/${sid}...`));
178
+ connection = await (0, connection_1.getConnection)(config);
179
+ console.log(chalk_1.default.green('✓ Conectado\n'));
180
+ console.log(chalk_1.default.cyan(`Inspeccionando ${schema}.${tabla.toUpperCase()}...`));
181
+ const tableInfo = await (0, inspector_1.inspectTable)(connection, tabla, schema);
182
+ await (0, connection_1.closeConnection)(connection);
183
+ connection = undefined;
184
+ const sql = (0, update_1.generateUpdate)(tableInfo);
185
+ (0, history_1.saveToHistory)('gen update', tabla, sql);
186
+ if (options.output) {
187
+ const outputPath = path_1.default.resolve(process.cwd(), options.output);
188
+ fs_1.default.writeFileSync(outputPath, sql, 'utf-8');
189
+ console.log(chalk_1.default.green(`\n✓ UPDATE guardado en: ${outputPath}\n`));
190
+ }
191
+ else if (options.clipboard) {
192
+ (0, clipboard_1.copyToClipboard)(sql);
193
+ console.log(chalk_1.default.green('\n✓ SQL copiado al portapapeles.\n'));
194
+ }
195
+ else {
196
+ console.log(chalk_1.default.bold.white('\n-- SQL Generado:'));
197
+ console.log(chalk_1.default.gray('─'.repeat(80)));
198
+ console.log(chalk_1.default.yellow(sql));
199
+ console.log(chalk_1.default.gray('─'.repeat(80) + '\n'));
200
+ }
201
+ }
202
+ catch (err) {
203
+ console.error(chalk_1.default.red(`\n✗ Error: ${err.message}\n`));
204
+ process.exit(1);
205
+ }
206
+ finally {
207
+ if (connection)
208
+ await (0, connection_1.closeConnection)(connection);
209
+ }
210
+ });
211
+ // gen script <tabla> — SELECT + INSERT + UPDATE juntos
212
+ gen
213
+ .command('script <tabla>')
214
+ .description('Genera el script completo (SELECT + INSERT + UPDATE) para una entidad')
215
+ .option('-s, --schema <schema>', 'Schema a usar')
216
+ .option('-r, --related <tablas>', 'Tablas relacionadas separadas por coma')
217
+ .option('-o, --output <archivo>', 'Guardar en un archivo .sql')
218
+ .option('--clipboard', 'Copiar al portapapeles')
219
+ .action(async (tabla, options) => {
220
+ var _a, _b, _c;
221
+ let connection;
222
+ try {
223
+ const config = (0, config_1.loadConfig)();
224
+ const schema = (_a = options.schema) !== null && _a !== void 0 ? _a : config.schema;
225
+ const sid = (_c = (_b = config.sid) !== null && _b !== void 0 ? _b : config.serviceName) !== null && _c !== void 0 ? _c : '';
226
+ console.log(chalk_1.default.cyan(`\nConectando a Oracle ${config.host}:${config.port}/${sid}...`));
227
+ connection = await (0, connection_1.getConnection)(config);
228
+ console.log(chalk_1.default.green('✓ Conectado\n'));
229
+ console.log(chalk_1.default.cyan(`Inspeccionando ${schema}.${tabla.toUpperCase()}...`));
230
+ const mainTable = await (0, inspector_1.inspectTable)(connection, tabla, schema);
231
+ const relatedNames = options.related
232
+ ? options.related.split(',').map((t) => t.trim()).filter(Boolean)
233
+ : [];
234
+ const relatedTables = [];
235
+ for (const relName of relatedNames) {
236
+ console.log(chalk_1.default.cyan(`Inspeccionando ${schema}.${relName.toUpperCase()}...`));
237
+ relatedTables.push(await (0, inspector_1.inspectTable)(connection, relName, schema));
238
+ }
239
+ await (0, connection_1.closeConnection)(connection);
240
+ connection = undefined;
241
+ const divider = (label) => `\n-- ${'─'.repeat(30)} ${label} ${'─'.repeat(30)}\n`;
242
+ const allTables = [mainTable, ...relatedTables];
243
+ const ordered = relatedNames.length > 0 ? (0, topology_1.sortByDependencies)(allTables) : allTables;
244
+ let sql = `-- SCRIPT COMPLETO: ${schema}.${mainTable.name}\n`;
245
+ sql += `-- Generado: ${new Date().toLocaleString('es-MX')}\n`;
246
+ sql += divider('SELECT');
247
+ sql += (0, select_1.generateSelect)(mainTable, relatedTables);
248
+ sql += divider('INSERT');
249
+ for (const t of ordered)
250
+ sql += (0, insert_1.generateInsert)(t) + '\n';
251
+ sql += divider('UPDATE');
252
+ for (const t of ordered)
253
+ sql += (0, update_1.generateUpdate)(t) + '\n';
254
+ (0, history_1.saveToHistory)('gen script', tabla, sql);
255
+ if (options.output) {
256
+ const outputPath = path_1.default.resolve(process.cwd(), options.output);
257
+ fs_1.default.writeFileSync(outputPath, sql, 'utf-8');
258
+ console.log(chalk_1.default.green(`\n✓ Script guardado en: ${outputPath}\n`));
259
+ }
260
+ else if (options.clipboard) {
261
+ (0, clipboard_1.copyToClipboard)(sql);
262
+ console.log(chalk_1.default.green('\n✓ Script copiado al portapapeles.\n'));
263
+ }
264
+ else {
265
+ console.log(chalk_1.default.bold.white('\n-- Script Completo:'));
266
+ console.log(chalk_1.default.gray('─'.repeat(80)));
267
+ console.log(chalk_1.default.yellow(sql));
268
+ console.log(chalk_1.default.gray('─'.repeat(80) + '\n'));
269
+ }
270
+ }
271
+ catch (err) {
272
+ console.error(chalk_1.default.red(`\n✗ Error: ${err.message}\n`));
273
+ process.exit(1);
274
+ }
275
+ finally {
276
+ if (connection)
277
+ await (0, connection_1.closeConnection)(connection);
278
+ }
279
+ });
280
+ }
281
+ //# sourceMappingURL=gen.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gen.js","sourceRoot":"","sources":["../../src/commands/gen.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function registerHistory(program: Command): void;
3
+ //# sourceMappingURL=history.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"history.d.ts","sourceRoot":"","sources":["../../src/commands/history.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKpC,wBAAgB,eAAe,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAkEtD"}