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.
- package/.orasql.example +12 -0
- package/LICENSE +21 -0
- package/README.md +320 -0
- package/dist/commands/gen.d.ts +3 -0
- package/dist/commands/gen.d.ts.map +1 -0
- package/dist/commands/gen.js +281 -0
- package/dist/commands/gen.js.map +1 -0
- package/dist/commands/history.d.ts +3 -0
- package/dist/commands/history.d.ts.map +1 -0
- package/dist/commands/history.js +65 -0
- package/dist/commands/history.js.map +1 -0
- package/dist/commands/inspect.d.ts +3 -0
- package/dist/commands/inspect.d.ts.map +1 -0
- package/dist/commands/inspect.js +80 -0
- package/dist/commands/inspect.js.map +1 -0
- package/dist/commands/profile.d.ts +3 -0
- package/dist/commands/profile.d.ts.map +1 -0
- package/dist/commands/profile.js +86 -0
- package/dist/commands/profile.js.map +1 -0
- package/dist/commands/schemas.d.ts +3 -0
- package/dist/commands/schemas.d.ts.map +1 -0
- package/dist/commands/schemas.js +62 -0
- package/dist/commands/schemas.js.map +1 -0
- package/dist/core/connection.d.ts +6 -0
- package/dist/core/connection.d.ts.map +1 -0
- package/dist/core/connection.js +54 -0
- package/dist/core/connection.js.map +1 -0
- package/dist/core/inspector.d.ts +27 -0
- package/dist/core/inspector.d.ts.map +1 -0
- package/dist/core/inspector.js +135 -0
- package/dist/core/inspector.js.map +1 -0
- package/dist/generators/insert.d.ts +3 -0
- package/dist/generators/insert.d.ts.map +1 -0
- package/dist/generators/insert.js +51 -0
- package/dist/generators/insert.js.map +1 -0
- package/dist/generators/interactive.d.ts +3 -0
- package/dist/generators/interactive.d.ts.map +1 -0
- package/dist/generators/interactive.js +118 -0
- package/dist/generators/interactive.js.map +1 -0
- package/dist/generators/select.d.ts +3 -0
- package/dist/generators/select.d.ts.map +1 -0
- package/dist/generators/select.js +63 -0
- package/dist/generators/select.js.map +1 -0
- package/dist/generators/update.d.ts +3 -0
- package/dist/generators/update.d.ts.map +1 -0
- package/dist/generators/update.js +39 -0
- package/dist/generators/update.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +22 -0
- package/dist/index.js.map +1 -0
- package/dist/utils/clipboard.d.ts +2 -0
- package/dist/utils/clipboard.d.ts.map +1 -0
- package/dist/utils/clipboard.js +13 -0
- package/dist/utils/clipboard.js.map +1 -0
- package/dist/utils/config.d.ts +12 -0
- package/dist/utils/config.d.ts.map +1 -0
- package/dist/utils/config.js +42 -0
- package/dist/utils/config.js.map +1 -0
- package/dist/utils/history.d.ts +11 -0
- package/dist/utils/history.d.ts.map +1 -0
- package/dist/utils/history.js +51 -0
- package/dist/utils/history.js.map +1 -0
- package/dist/utils/profiles.d.ts +11 -0
- package/dist/utils/profiles.d.ts.map +1 -0
- package/dist/utils/profiles.js +47 -0
- package/dist/utils/profiles.js.map +1 -0
- package/dist/utils/topology.d.ts +8 -0
- package/dist/utils/topology.d.ts.map +1 -0
- package/dist/utils/topology.js +63 -0
- package/dist/utils/topology.js.map +1 -0
- package/package.json +61 -0
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.generateInsert = generateInsert;
|
|
4
|
+
const DATE_TYPES = new Set(['DATE', 'TIMESTAMP', 'TIMESTAMP WITH TIME ZONE', 'TIMESTAMP WITH LOCAL TIME ZONE']);
|
|
5
|
+
const NUMBER_TYPES = new Set(['NUMBER', 'INTEGER', 'FLOAT', 'BINARY_FLOAT', 'BINARY_DOUBLE']);
|
|
6
|
+
function generateInsert(table) {
|
|
7
|
+
const columns = table.columns.map((c) => c.name).join(',\n ');
|
|
8
|
+
const values = table.columns.map((c) => resolveValue(c)).join(',\n ');
|
|
9
|
+
return (`-- INSERT generado para ${table.schema}.${table.name}\n` +
|
|
10
|
+
`INSERT INTO ${table.schema}.${table.name} (\n` +
|
|
11
|
+
` ${columns}\n` +
|
|
12
|
+
`) VALUES (\n` +
|
|
13
|
+
` ${values}\n` +
|
|
14
|
+
`);\n`);
|
|
15
|
+
}
|
|
16
|
+
function resolveValue(col) {
|
|
17
|
+
// PK con secuencia → SEQ.NEXTVAL
|
|
18
|
+
if (col.isPrimaryKey && col.sequence) {
|
|
19
|
+
return `${col.sequence}.NEXTVAL -- PK`;
|
|
20
|
+
}
|
|
21
|
+
// FK → placeholder con referencia
|
|
22
|
+
if (col.isForeignKey) {
|
|
23
|
+
return `/* :${col.name} — FK → ${col.referencedTable}.${col.referencedColumn} */`;
|
|
24
|
+
}
|
|
25
|
+
// Valor por defecto del schema (ej. SYSDATE, 1, 'ACTIVO')
|
|
26
|
+
if (col.dataDefault) {
|
|
27
|
+
const def = col.dataDefault.trim().toUpperCase();
|
|
28
|
+
// Si el default ya es SYSDATE o similar, usarlo directamente
|
|
29
|
+
if (def === 'SYSDATE' || def.startsWith('SYSTIMESTAMP')) {
|
|
30
|
+
return `${col.dataDefault.trim()} -- default`;
|
|
31
|
+
}
|
|
32
|
+
// Otros defaults como números o strings
|
|
33
|
+
return `${col.dataDefault.trim()} -- default`;
|
|
34
|
+
}
|
|
35
|
+
// Columnas de fecha sin default → SYSDATE
|
|
36
|
+
if (DATE_TYPES.has(col.dataType)) {
|
|
37
|
+
return col.nullable ? `NULL -- fecha opcional` : `SYSDATE -- completar`;
|
|
38
|
+
}
|
|
39
|
+
// Nullable → NULL
|
|
40
|
+
if (col.nullable) {
|
|
41
|
+
return `NULL`;
|
|
42
|
+
}
|
|
43
|
+
// Número requerido
|
|
44
|
+
if (NUMBER_TYPES.has(col.dataType)) {
|
|
45
|
+
return `/* :${col.name} (${col.dataType}) */`;
|
|
46
|
+
}
|
|
47
|
+
// String requerido → placeholder con tipo y longitud
|
|
48
|
+
const lengthHint = col.dataLength ? `max ${col.dataLength}` : '';
|
|
49
|
+
return `/* ':${col.name}' (${col.dataType}${lengthHint ? ` ${lengthHint}` : ''}) */`;
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=insert.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"insert.js","sourceRoot":"","sources":["../../src/generators/insert.ts"],"names":[],"mappings":";;;AAEA,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,CAAC,MAAM,EAAE,WAAW,EAAE,0BAA0B,EAAE,gCAAgC,CAAC,CAAC,CAAC;AAChH,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,CAAC,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,cAAc,EAAE,eAAe,CAAC,CAAC,CAAC;AAE9F,wBAA+B,KAAgB;IAC7C,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC/D,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAEvE,OAAO,CACL,2BAA2B,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,IAAI,IAAI;QACzD,eAAe,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,IAAI,MAAM;QAC/C,KAAK,OAAO,IAAI;QAChB,cAAc;QACd,KAAK,MAAM,IAAI;QACf,MAAM,CACP,CAAC;AACJ,CAAC;AAED,SAAS,YAAY,CAAC,GAAe;IACnC,iCAAiC;IACjC,IAAI,GAAG,CAAC,YAAY,IAAI,GAAG,CAAC,QAAQ,EAAE,CAAC;QACrC,OAAO,GAAG,GAAG,CAAC,QAAQ,iBAAiB,CAAC;IAC1C,CAAC;IAED,kCAAkC;IAClC,IAAI,GAAG,CAAC,YAAY,EAAE,CAAC;QACrB,OAAO,OAAO,GAAG,CAAC,IAAI,WAAW,GAAG,CAAC,eAAe,IAAI,GAAG,CAAC,gBAAgB,KAAK,CAAC;IACpF,CAAC;IAED,0DAA0D;IAC1D,IAAI,GAAG,CAAC,WAAW,EAAE,CAAC;QACpB,MAAM,GAAG,GAAG,GAAG,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QACjD,6DAA6D;QAC7D,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,CAAC,UAAU,CAAC,cAAc,CAAC,EAAE,CAAC;YACxD,OAAO,GAAG,GAAG,CAAC,WAAW,CAAC,IAAI,EAAE,cAAc,CAAC;QACjD,CAAC;QACD,wCAAwC;QACxC,OAAO,GAAG,GAAG,CAAC,WAAW,CAAC,IAAI,EAAE,cAAc,CAAC;IACjD,CAAC;IAED,0CAA0C;IAC1C,IAAI,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;QACjC,OAAO,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC,uBAAuB,CAAC;IAC5E,CAAC;IAED,kBAAkB;IAClB,IAAI,GAAG,CAAC,QAAQ,EAAE,CAAC;QACjB,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,mBAAmB;IACnB,IAAI,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;QACnC,OAAO,OAAO,GAAG,CAAC,IAAI,KAAK,GAAG,CAAC,QAAQ,MAAM,CAAC;IAChD,CAAC;IAED,qDAAqD;IACrD,MAAM,UAAU,GAAG,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IACjE,OAAO,QAAQ,GAAG,CAAC,IAAI,MAAM,GAAG,CAAC,QAAQ,GAAG,UAAU,CAAC,CAAC,CAAC,IAAI,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC;AACvF,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interactive.d.ts","sourceRoot":"","sources":["../../src/generators/interactive.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAc,MAAM,mBAAmB,CAAC;AAK1D,wBAAsB,yBAAyB,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,CA2CjF"}
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
36
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
|
+
};
|
|
38
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
exports.generateInsertInteractive = generateInsertInteractive;
|
|
40
|
+
const readline = __importStar(require("readline"));
|
|
41
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
42
|
+
const DATE_TYPES = new Set(['DATE', 'TIMESTAMP', 'TIMESTAMP WITH TIME ZONE', 'TIMESTAMP WITH LOCAL TIME ZONE']);
|
|
43
|
+
const NUMBER_TYPES = new Set(['NUMBER', 'INTEGER', 'FLOAT', 'BINARY_FLOAT', 'BINARY_DOUBLE']);
|
|
44
|
+
async function generateInsertInteractive(table) {
|
|
45
|
+
const rl = readline.createInterface({ input: process.stdin, output: process.stdout });
|
|
46
|
+
const ask = (q) => new Promise((resolve) => rl.question(q, resolve));
|
|
47
|
+
console.log(chalk_1.default.bold.cyan(`\nModo interactivo — ${table.schema}.${table.name}`));
|
|
48
|
+
console.log(chalk_1.default.gray('Presiona Enter para aceptar el valor por defecto entre [ ]\n'));
|
|
49
|
+
const values = [];
|
|
50
|
+
const columnNames = table.columns.map((c) => c.name);
|
|
51
|
+
for (const col of table.columns) {
|
|
52
|
+
const defaultValue = getDefaultValue(col);
|
|
53
|
+
const typeHint = formatTypeHint(col);
|
|
54
|
+
const flagHint = buildFlagHint(col);
|
|
55
|
+
// Columnas automáticas no necesitan input
|
|
56
|
+
if (isAutomatic(col)) {
|
|
57
|
+
console.log(` ${chalk_1.default.gray(col.name.padEnd(25))} ${chalk_1.default.magenta(defaultValue)} ${chalk_1.default.gray('(automático)')}`);
|
|
58
|
+
values.push(defaultValue);
|
|
59
|
+
continue;
|
|
60
|
+
}
|
|
61
|
+
const prompt = ` ${chalk_1.default.white(col.name.padEnd(25))} ${chalk_1.default.gray(typeHint)} ${flagHint} [${chalk_1.default.yellow(defaultValue)}]: `;
|
|
62
|
+
const input = (await ask(prompt)).trim();
|
|
63
|
+
const finalValue = input === '' ? defaultValue : formatInput(input, col);
|
|
64
|
+
values.push(finalValue);
|
|
65
|
+
}
|
|
66
|
+
rl.close();
|
|
67
|
+
// Construir el INSERT con los valores ingresados
|
|
68
|
+
const columns = columnNames.join(',\n ');
|
|
69
|
+
const vals = values.join(',\n ');
|
|
70
|
+
return (`-- INSERT interactivo para ${table.schema}.${table.name}\n` +
|
|
71
|
+
`INSERT INTO ${table.schema}.${table.name} (\n` +
|
|
72
|
+
` ${columns}\n` +
|
|
73
|
+
`) VALUES (\n` +
|
|
74
|
+
` ${vals}\n` +
|
|
75
|
+
`);\n`);
|
|
76
|
+
}
|
|
77
|
+
function isAutomatic(col) {
|
|
78
|
+
return (col.isPrimaryKey && !!col.sequence) ||
|
|
79
|
+
(!!col.dataDefault && col.dataDefault.trim().toUpperCase().startsWith('SYS'));
|
|
80
|
+
}
|
|
81
|
+
function getDefaultValue(col) {
|
|
82
|
+
if (col.isPrimaryKey && col.sequence)
|
|
83
|
+
return `${col.sequence}.NEXTVAL`;
|
|
84
|
+
if (col.dataDefault)
|
|
85
|
+
return col.dataDefault.trim();
|
|
86
|
+
if (DATE_TYPES.has(col.dataType))
|
|
87
|
+
return col.nullable ? 'NULL' : 'SYSDATE';
|
|
88
|
+
if (col.nullable)
|
|
89
|
+
return 'NULL';
|
|
90
|
+
return '';
|
|
91
|
+
}
|
|
92
|
+
function formatTypeHint(col) {
|
|
93
|
+
if (col.dataType === 'NUMBER' && col.dataPrecision)
|
|
94
|
+
return `(NUMBER)`;
|
|
95
|
+
if (['VARCHAR2', 'CHAR'].includes(col.dataType))
|
|
96
|
+
return `(VARCHAR2)`;
|
|
97
|
+
return `(${col.dataType})`;
|
|
98
|
+
}
|
|
99
|
+
function buildFlagHint(col) {
|
|
100
|
+
const flags = [];
|
|
101
|
+
if (col.isForeignKey)
|
|
102
|
+
flags.push(chalk_1.default.blue(`FK→${col.referencedTable}`));
|
|
103
|
+
if (!col.nullable)
|
|
104
|
+
flags.push(chalk_1.default.red('requerido'));
|
|
105
|
+
return flags.join(' ');
|
|
106
|
+
}
|
|
107
|
+
function formatInput(input, col) {
|
|
108
|
+
if (input.toUpperCase() === 'NULL')
|
|
109
|
+
return 'NULL';
|
|
110
|
+
if (input.toUpperCase() === 'SYSDATE')
|
|
111
|
+
return 'SYSDATE';
|
|
112
|
+
// Si es número, no agregar comillas
|
|
113
|
+
if (NUMBER_TYPES.has(col.dataType) && !isNaN(Number(input)))
|
|
114
|
+
return input;
|
|
115
|
+
// Strings → agregar comillas simples
|
|
116
|
+
return `'${input.replace(/'/g, "''")}'`;
|
|
117
|
+
}
|
|
118
|
+
//# sourceMappingURL=interactive.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interactive.js","sourceRoot":"","sources":["../../src/generators/interactive.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"select.d.ts","sourceRoot":"","sources":["../../src/generators/select.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAE9C,wBAAgB,cAAc,CAAC,KAAK,EAAE,SAAS,EAAE,aAAa,GAAE,SAAS,EAAO,GAAG,MAAM,CAkDxF"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.generateSelect = generateSelect;
|
|
4
|
+
function generateSelect(table, relatedTables = []) {
|
|
5
|
+
const allTables = [table, ...relatedTables];
|
|
6
|
+
const alias = buildAliasMap(allTables);
|
|
7
|
+
const mainAlias = alias.get(table.name);
|
|
8
|
+
// Columnas: tabla principal + relacionadas
|
|
9
|
+
const columns = [];
|
|
10
|
+
for (const t of allTables) {
|
|
11
|
+
const a = alias.get(t.name);
|
|
12
|
+
for (const col of t.columns) {
|
|
13
|
+
columns.push(` ${a}.${col.name}`);
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
// JOINs: cada tabla relacionada se agrega con JOIN.
|
|
17
|
+
// La condición se determina por la FK que esa tabla tenga hacia alguna tabla del conjunto.
|
|
18
|
+
const joins = [];
|
|
19
|
+
for (const relTable of relatedTables) {
|
|
20
|
+
const relAlias = alias.get(relTable.name);
|
|
21
|
+
// Buscar FK en la tabla relacionada que apunte a alguna tabla del conjunto
|
|
22
|
+
const fkCol = relTable.columns.find((c) => c.isForeignKey && c.referencedTable && alias.has(c.referencedTable));
|
|
23
|
+
if (fkCol && fkCol.referencedTable && fkCol.referencedColumn) {
|
|
24
|
+
const refAlias = alias.get(fkCol.referencedTable);
|
|
25
|
+
joins.push(`JOIN ${relTable.schema}.${relTable.name} ${relAlias} ON ${relAlias}.${fkCol.name} = ${refAlias}.${fkCol.referencedColumn}`);
|
|
26
|
+
}
|
|
27
|
+
else {
|
|
28
|
+
// Sin FK detectada, agregar JOIN con placeholder
|
|
29
|
+
joins.push(`JOIN ${relTable.schema}.${relTable.name} ${relAlias} ON /* condición de join */`);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
// WHERE por PK de la tabla principal
|
|
33
|
+
const pkCol = table.columns.find((c) => c.isPrimaryKey);
|
|
34
|
+
const whereClause = pkCol
|
|
35
|
+
? `WHERE ${mainAlias}.${pkCol.name} = /* :${pkCol.name} */`
|
|
36
|
+
: `/* agregar filtros */`;
|
|
37
|
+
let sql = `-- SELECT generado para ${table.schema}.${table.name}\n`;
|
|
38
|
+
sql += `SELECT\n${columns.join(',\n')}\n`;
|
|
39
|
+
sql += `FROM ${table.schema}.${table.name} ${mainAlias}\n`;
|
|
40
|
+
if (joins.length > 0)
|
|
41
|
+
sql += joins.join('\n') + '\n';
|
|
42
|
+
sql += `${whereClause};\n`;
|
|
43
|
+
return sql;
|
|
44
|
+
}
|
|
45
|
+
function buildAliasMap(tables) {
|
|
46
|
+
const map = new Map();
|
|
47
|
+
const used = new Set();
|
|
48
|
+
for (const t of tables) {
|
|
49
|
+
// Usar primeras letras del nombre como alias (ej: USUARIO_ROL → UR)
|
|
50
|
+
const parts = t.name.split('_');
|
|
51
|
+
let alias = parts.map((p) => p[0]).join('').toLowerCase();
|
|
52
|
+
// Si el alias ya está en uso, agregar número
|
|
53
|
+
let candidate = alias;
|
|
54
|
+
let i = 2;
|
|
55
|
+
while (used.has(candidate)) {
|
|
56
|
+
candidate = alias + i++;
|
|
57
|
+
}
|
|
58
|
+
map.set(t.name, candidate);
|
|
59
|
+
used.add(candidate);
|
|
60
|
+
}
|
|
61
|
+
return map;
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=select.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"select.js","sourceRoot":"","sources":["../../src/generators/select.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../src/generators/update.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAc,MAAM,mBAAmB,CAAC;AAI1D,wBAAgB,cAAc,CAAC,KAAK,EAAE,SAAS,GAAG,MAAM,CAuBvD"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.generateUpdate = generateUpdate;
|
|
4
|
+
const DATE_TYPES = new Set(['DATE', 'TIMESTAMP', 'TIMESTAMP WITH TIME ZONE', 'TIMESTAMP WITH LOCAL TIME ZONE']);
|
|
5
|
+
function generateUpdate(table) {
|
|
6
|
+
const pkCols = table.columns.filter((c) => c.isPrimaryKey);
|
|
7
|
+
const updatableCols = table.columns.filter((c) => !c.isPrimaryKey);
|
|
8
|
+
if (updatableCols.length === 0) {
|
|
9
|
+
return `-- ADVERTENCIA: ${table.name} solo tiene columnas PK, no se puede generar UPDATE.\n`;
|
|
10
|
+
}
|
|
11
|
+
const setClauses = updatableCols
|
|
12
|
+
.map((c) => ` ${c.name} = ${resolveUpdateValue(c)}`)
|
|
13
|
+
.join(',\n');
|
|
14
|
+
const whereClauses = pkCols.length > 0
|
|
15
|
+
? pkCols.map((c) => `${c.name} = /* :${c.name} */`).join('\n AND ')
|
|
16
|
+
: '/* agregar condicion WHERE */';
|
|
17
|
+
return (`-- UPDATE generado para ${table.schema}.${table.name}\n` +
|
|
18
|
+
`UPDATE ${table.schema}.${table.name}\n` +
|
|
19
|
+
`SET\n${setClauses}\n` +
|
|
20
|
+
`WHERE ${whereClauses};\n`);
|
|
21
|
+
}
|
|
22
|
+
function resolveUpdateValue(col) {
|
|
23
|
+
if (col.isForeignKey) {
|
|
24
|
+
return `/* :${col.name} — FK → ${col.referencedTable}.${col.referencedColumn} */`;
|
|
25
|
+
}
|
|
26
|
+
if (col.dataDefault) {
|
|
27
|
+
const def = col.dataDefault.trim().toUpperCase();
|
|
28
|
+
if (def === 'SYSDATE' || def.startsWith('SYSTIMESTAMP')) {
|
|
29
|
+
return `${col.dataDefault.trim()} -- default`;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
if (DATE_TYPES.has(col.dataType)) {
|
|
33
|
+
return col.nullable ? `NULL -- o SYSDATE` : `SYSDATE -- completar`;
|
|
34
|
+
}
|
|
35
|
+
if (col.nullable)
|
|
36
|
+
return `NULL -- o ':${col.name}'`;
|
|
37
|
+
return `/* ':${col.name}' */`;
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=update.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update.js","sourceRoot":"","sources":["../../src/generators/update.ts"],"names":[],"mappings":";;;AAEA,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,CAAC,MAAM,EAAE,WAAW,EAAE,0BAA0B,EAAE,gCAAgC,CAAC,CAAC,CAAC;AAEhH,wBAA+B,KAAgB;IAC7C,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC;IAC3D,MAAM,aAAa,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC;IAEnE,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC/B,OAAO,mBAAmB,KAAK,CAAC,IAAI,wDAAwD,CAAC;IAC/F,CAAC;IAED,MAAM,UAAU,GAAG,aAAa;SAC7B,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,IAAI,MAAM,kBAAkB,CAAC,CAAC,CAAC,EAAE,CAAC;SACpD,IAAI,CAAC,KAAK,CAAC,CAAC;IAEf,MAAM,YAAY,GAChB,MAAM,CAAC,MAAM,GAAG,CAAC;QACf,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,UAAU,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC;QACpE,CAAC,CAAC,+BAA+B,CAAC;IAEtC,OAAO,CACL,2BAA2B,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,IAAI,IAAI;QACzD,UAAU,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,IAAI,IAAI;QACxC,QAAQ,UAAU,IAAI;QACtB,SAAS,YAAY,KAAK,CAC3B,CAAC;AACJ,CAAC;AAED,SAAS,kBAAkB,CAAC,GAAe;IACzC,IAAI,GAAG,CAAC,YAAY,EAAE,CAAC;QACrB,OAAO,OAAO,GAAG,CAAC,IAAI,WAAW,GAAG,CAAC,eAAe,IAAI,GAAG,CAAC,gBAAgB,KAAK,CAAC;IACpF,CAAC;IACD,IAAI,GAAG,CAAC,WAAW,EAAE,CAAC;QACpB,MAAM,GAAG,GAAG,GAAG,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QACjD,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,CAAC,UAAU,CAAC,cAAc,CAAC,EAAE,CAAC;YACxD,OAAO,GAAG,GAAG,CAAC,WAAW,CAAC,IAAI,EAAE,cAAc,CAAC;QACjD,CAAC;IACH,CAAC;IACD,IAAI,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;QACjC,OAAO,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,uBAAuB,CAAC;IACvE,CAAC;IACD,IAAI,GAAG,CAAC,QAAQ;QAAE,OAAO,gBAAgB,GAAG,CAAC,IAAI,GAAG,CAAC;IACrD,OAAO,QAAQ,GAAG,CAAC,IAAI,MAAM,CAAC;AAChC,CAAC"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
"use strict";
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
const commander_1 = require("commander");
|
|
5
|
+
const inspect_1 = require("./commands/inspect");
|
|
6
|
+
const gen_1 = require("./commands/gen");
|
|
7
|
+
const schemas_1 = require("./commands/schemas");
|
|
8
|
+
const history_1 = require("./commands/history");
|
|
9
|
+
const profile_1 = require("./commands/profile");
|
|
10
|
+
const program = new commander_1.Command();
|
|
11
|
+
program
|
|
12
|
+
.name('orasql-gen')
|
|
13
|
+
.description('CLI para generar sentencias SQL automáticamente a partir de tablas Oracle')
|
|
14
|
+
.version('0.1.0');
|
|
15
|
+
// Registrar comandos
|
|
16
|
+
(0, inspect_1.registerInspect)(program);
|
|
17
|
+
(0, gen_1.registerGen)(program);
|
|
18
|
+
(0, schemas_1.registerSchemas)(program);
|
|
19
|
+
(0, history_1.registerHistory)(program);
|
|
20
|
+
(0, profile_1.registerProfile)(program);
|
|
21
|
+
program.parse(process.argv);
|
|
22
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AACA,yCAAoC;AACpC,gDAAqD;AACrD,wCAA6C;AAC7C,gDAAqD;AACrD,gDAAqD;AACrD,gDAAqD;AAErD,MAAM,OAAO,GAAG,IAAI,mBAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,YAAY,CAAC;KAClB,WAAW,CAAC,2EAA2E,CAAC;KACxF,OAAO,CAAC,OAAO,CAAC,CAAC;AAEpB,qBAAqB;AACrB,IAAA,yBAAe,EAAC,OAAO,CAAC,CAAC;AACzB,IAAA,iBAAW,EAAC,OAAO,CAAC,CAAC;AACrB,IAAA,yBAAe,EAAC,OAAO,CAAC,CAAC;AACzB,IAAA,yBAAe,EAAC,OAAO,CAAC,CAAC;AACzB,IAAA,yBAAe,EAAC,OAAO,CAAC,CAAC;AAEzB,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"clipboard.d.ts","sourceRoot":"","sources":["../../src/utils/clipboard.ts"],"names":[],"mappings":"AAEA,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAMlD"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.copyToClipboard = copyToClipboard;
|
|
4
|
+
const child_process_1 = require("child_process");
|
|
5
|
+
function copyToClipboard(text) {
|
|
6
|
+
try {
|
|
7
|
+
(0, child_process_1.execSync)('pbcopy', { input: text });
|
|
8
|
+
}
|
|
9
|
+
catch {
|
|
10
|
+
throw new Error('No se pudo copiar al portapapeles. Asegúrate de estar en macOS.');
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=clipboard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"clipboard.js","sourceRoot":"","sources":["../../src/utils/clipboard.ts"],"names":[],"mappings":";;;AAAA,iDAAyC;AAEzC,yBAAgC,IAAY;IAC1C,IAAI,CAAC;QACH,IAAA,wBAAQ,EAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IACtC,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,KAAK,CAAC,iEAAiE,CAAC,CAAC;IACrF,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export interface OraConfig {
|
|
2
|
+
host: string;
|
|
3
|
+
port: number;
|
|
4
|
+
sid?: string;
|
|
5
|
+
serviceName?: string;
|
|
6
|
+
user: string;
|
|
7
|
+
password: string;
|
|
8
|
+
schema: string;
|
|
9
|
+
instantClientDir?: string;
|
|
10
|
+
}
|
|
11
|
+
export declare function loadConfig(): OraConfig;
|
|
12
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAID,wBAAgB,UAAU,IAAI,SAAS,CAqBtC"}
|
|
@@ -0,0 +1,42 @@
|
|
|
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.loadConfig = loadConfig;
|
|
7
|
+
const fs_1 = __importDefault(require("fs"));
|
|
8
|
+
const path_1 = __importDefault(require("path"));
|
|
9
|
+
const CONFIG_FILE = '.orasql';
|
|
10
|
+
function loadConfig() {
|
|
11
|
+
const configPath = path_1.default.resolve(process.cwd(), CONFIG_FILE);
|
|
12
|
+
if (!fs_1.default.existsSync(configPath)) {
|
|
13
|
+
throw new Error(`No se encontró el archivo de configuración "${CONFIG_FILE}".\n` +
|
|
14
|
+
`Copia ".orasql.example" a ".orasql" y completa tus credenciales.`);
|
|
15
|
+
}
|
|
16
|
+
try {
|
|
17
|
+
const raw = fs_1.default.readFileSync(configPath, 'utf-8');
|
|
18
|
+
const config = JSON.parse(raw);
|
|
19
|
+
validateConfig(config);
|
|
20
|
+
return config;
|
|
21
|
+
}
|
|
22
|
+
catch (err) {
|
|
23
|
+
if (err.message.includes('JSON')) {
|
|
24
|
+
throw new Error(`El archivo "${CONFIG_FILE}" tiene un formato JSON inválido.`);
|
|
25
|
+
}
|
|
26
|
+
throw err;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
function validateConfig(config) {
|
|
30
|
+
const required = ['host', 'port', 'user', 'password', 'schema'];
|
|
31
|
+
// sid o serviceName: al menos uno es requerido
|
|
32
|
+
if (!config.sid && !config.serviceName) {
|
|
33
|
+
throw new Error('Debes especificar "sid" o "serviceName" en el archivo de configuración.');
|
|
34
|
+
}
|
|
35
|
+
// instantClientDir es opcional
|
|
36
|
+
for (const field of required) {
|
|
37
|
+
if (!config[field]) {
|
|
38
|
+
throw new Error(`Falta el campo requerido "${field}" en el archivo de configuración.`);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":";;;;;;AAAA,4CAAoB;AACpB,gDAAwB;AAaxB,MAAM,WAAW,GAAG,SAAS,CAAC;AAE9B;IACE,MAAM,UAAU,GAAG,cAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,WAAW,CAAC,CAAC;IAE5D,IAAI,CAAC,YAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC/B,MAAM,IAAI,KAAK,CACb,+CAA+C,WAAW,MAAM;YAChE,kEAAkE,CACnE,CAAC;IACJ,CAAC;IAED,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,YAAE,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QACjD,MAAM,MAAM,GAAc,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC1C,cAAc,CAAC,MAAM,CAAC,CAAC;QACvB,OAAO,MAAM,CAAC;IAChB,CAAC;IAAC,OAAO,GAAQ,EAAE,CAAC;QAClB,IAAI,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;YACjC,MAAM,IAAI,KAAK,CAAC,eAAe,WAAW,mCAAmC,CAAC,CAAC;QACjF,CAAC;QACD,MAAM,GAAG,CAAC;IACZ,CAAC;AACH,CAAC;AAED,SAAS,cAAc,CAAC,MAAiB;IACvC,MAAM,QAAQ,GAAwB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC;IACrF,+CAA+C;IAC/C,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;QACvC,MAAM,IAAI,KAAK,CAAC,yEAAyE,CAAC,CAAC;IAC7F,CAAC;IACD,+BAA+B;IAC/B,KAAK,MAAM,KAAK,IAAI,QAAQ,EAAE,CAAC;QAC7B,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;YACnB,MAAM,IAAI,KAAK,CAAC,6BAA6B,KAAK,mCAAmC,CAAC,CAAC;QACzF,CAAC;IACH,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export interface HistoryEntry {
|
|
2
|
+
id: number;
|
|
3
|
+
timestamp: string;
|
|
4
|
+
command: string;
|
|
5
|
+
table: string;
|
|
6
|
+
sql: string;
|
|
7
|
+
}
|
|
8
|
+
export declare function readHistory(): HistoryEntry[];
|
|
9
|
+
export declare function saveToHistory(command: string, table: string, sql: string): void;
|
|
10
|
+
export declare function clearHistory(): void;
|
|
11
|
+
//# sourceMappingURL=history.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"history.d.ts","sourceRoot":"","sources":["../../src/utils/history.ts"],"names":[],"mappings":"AAQA,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;CACb;AAMD,wBAAgB,WAAW,IAAI,YAAY,EAAE,CAQ5C;AAED,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,CAc/E;AAED,wBAAgB,YAAY,IAAI,IAAI,CAGnC"}
|
|
@@ -0,0 +1,51 @@
|
|
|
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.readHistory = readHistory;
|
|
7
|
+
exports.saveToHistory = saveToHistory;
|
|
8
|
+
exports.clearHistory = clearHistory;
|
|
9
|
+
const fs_1 = __importDefault(require("fs"));
|
|
10
|
+
const path_1 = __importDefault(require("path"));
|
|
11
|
+
const os_1 = __importDefault(require("os"));
|
|
12
|
+
const HISTORY_DIR = path_1.default.join(os_1.default.homedir(), '.orasql-gen');
|
|
13
|
+
const HISTORY_FILE = path_1.default.join(HISTORY_DIR, 'history.json');
|
|
14
|
+
const MAX_HISTORY = 100;
|
|
15
|
+
function ensureDir() {
|
|
16
|
+
if (!fs_1.default.existsSync(HISTORY_DIR))
|
|
17
|
+
fs_1.default.mkdirSync(HISTORY_DIR, { recursive: true });
|
|
18
|
+
}
|
|
19
|
+
function readHistory() {
|
|
20
|
+
ensureDir();
|
|
21
|
+
if (!fs_1.default.existsSync(HISTORY_FILE))
|
|
22
|
+
return [];
|
|
23
|
+
try {
|
|
24
|
+
return JSON.parse(fs_1.default.readFileSync(HISTORY_FILE, 'utf-8'));
|
|
25
|
+
}
|
|
26
|
+
catch {
|
|
27
|
+
return [];
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
function saveToHistory(command, table, sql) {
|
|
31
|
+
var _a;
|
|
32
|
+
var _b;
|
|
33
|
+
ensureDir();
|
|
34
|
+
const entries = readHistory();
|
|
35
|
+
const newEntry = {
|
|
36
|
+
id: ((_b = (_a = entries[entries.length - 1]) === null || _a === void 0 ? void 0 : _a.id) !== null && _b !== void 0 ? _b : 0) + 1,
|
|
37
|
+
timestamp: new Date().toISOString(),
|
|
38
|
+
command,
|
|
39
|
+
table: table.toUpperCase(),
|
|
40
|
+
sql,
|
|
41
|
+
};
|
|
42
|
+
entries.push(newEntry);
|
|
43
|
+
// Mantener solo los últimos MAX_HISTORY
|
|
44
|
+
const trimmed = entries.slice(-MAX_HISTORY);
|
|
45
|
+
fs_1.default.writeFileSync(HISTORY_FILE, JSON.stringify(trimmed, null, 2), 'utf-8');
|
|
46
|
+
}
|
|
47
|
+
function clearHistory() {
|
|
48
|
+
ensureDir();
|
|
49
|
+
fs_1.default.writeFileSync(HISTORY_FILE, '[]', 'utf-8');
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=history.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"history.js","sourceRoot":"","sources":["../../src/utils/history.ts"],"names":[],"mappings":";;;;;;;;AAAA,4CAAoB;AACpB,gDAAwB;AACxB,4CAAoB;AAEpB,MAAM,WAAW,GAAG,cAAI,CAAC,IAAI,CAAC,YAAE,CAAC,OAAO,EAAE,EAAE,aAAa,CAAC,CAAC;AAC3D,MAAM,YAAY,GAAG,cAAI,CAAC,IAAI,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC;AAC5D,MAAM,WAAW,GAAG,GAAG,CAAC;AAUxB,SAAS,SAAS;IAChB,IAAI,CAAC,YAAE,CAAC,UAAU,CAAC,WAAW,CAAC;QAAE,YAAE,CAAC,SAAS,CAAC,WAAW,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;AAClF,CAAC;AAED;IACE,SAAS,EAAE,CAAC;IACZ,IAAI,CAAC,YAAE,CAAC,UAAU,CAAC,YAAY,CAAC;QAAE,OAAO,EAAE,CAAC;IAC5C,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,YAAE,CAAC,YAAY,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC,CAAC;IAC5D,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,uBAA8B,OAAe,EAAE,KAAa,EAAE,GAAW;;;IACvE,SAAS,EAAE,CAAC;IACZ,MAAM,OAAO,GAAG,WAAW,EAAE,CAAC;IAC9B,MAAM,QAAQ,GAAiB;QAC7B,EAAE,EAAE,OAAC,MAAA,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,0CAAE,EAAE,mCAAI,CAAC,CAAC,GAAG,CAAC;QAC9C,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACnC,OAAO;QACP,KAAK,EAAE,KAAK,CAAC,WAAW,EAAE;QAC1B,GAAG;KACJ,CAAC;IACF,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACvB,wCAAwC;IACxC,MAAM,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,WAAW,CAAC,CAAC;IAC5C,YAAE,CAAC,aAAa,CAAC,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;AAC5E,CAAC;AAED;IACE,SAAS,EAAE,CAAC;IACZ,YAAE,CAAC,aAAa,CAAC,YAAY,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;AAChD,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { OraConfig } from './config';
|
|
2
|
+
export interface Profile {
|
|
3
|
+
name: string;
|
|
4
|
+
savedAt: string;
|
|
5
|
+
config: OraConfig;
|
|
6
|
+
}
|
|
7
|
+
export declare function readProfiles(): Profile[];
|
|
8
|
+
export declare function saveProfile(name: string, config: OraConfig): void;
|
|
9
|
+
export declare function getProfile(name: string): Profile | undefined;
|
|
10
|
+
export declare function deleteProfile(name: string): boolean;
|
|
11
|
+
//# sourceMappingURL=profiles.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"profiles.d.ts","sourceRoot":"","sources":["../../src/utils/profiles.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAKrC,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,SAAS,CAAC;CACnB;AAMD,wBAAgB,YAAY,IAAI,OAAO,EAAE,CAQxC;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,GAAG,IAAI,CAKjE;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS,CAE5D;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAMnD"}
|
|
@@ -0,0 +1,47 @@
|
|
|
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.readProfiles = readProfiles;
|
|
7
|
+
exports.saveProfile = saveProfile;
|
|
8
|
+
exports.getProfile = getProfile;
|
|
9
|
+
exports.deleteProfile = deleteProfile;
|
|
10
|
+
const fs_1 = __importDefault(require("fs"));
|
|
11
|
+
const path_1 = __importDefault(require("path"));
|
|
12
|
+
const os_1 = __importDefault(require("os"));
|
|
13
|
+
const PROFILES_DIR = path_1.default.join(os_1.default.homedir(), '.orasql-gen');
|
|
14
|
+
const PROFILES_FILE = path_1.default.join(PROFILES_DIR, 'profiles.json');
|
|
15
|
+
function ensureDir() {
|
|
16
|
+
if (!fs_1.default.existsSync(PROFILES_DIR))
|
|
17
|
+
fs_1.default.mkdirSync(PROFILES_DIR, { recursive: true });
|
|
18
|
+
}
|
|
19
|
+
function readProfiles() {
|
|
20
|
+
ensureDir();
|
|
21
|
+
if (!fs_1.default.existsSync(PROFILES_FILE))
|
|
22
|
+
return [];
|
|
23
|
+
try {
|
|
24
|
+
return JSON.parse(fs_1.default.readFileSync(PROFILES_FILE, 'utf-8'));
|
|
25
|
+
}
|
|
26
|
+
catch {
|
|
27
|
+
return [];
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
function saveProfile(name, config) {
|
|
31
|
+
ensureDir();
|
|
32
|
+
const profiles = readProfiles().filter((p) => p.name !== name);
|
|
33
|
+
profiles.push({ name, savedAt: new Date().toISOString(), config });
|
|
34
|
+
fs_1.default.writeFileSync(PROFILES_FILE, JSON.stringify(profiles, null, 2), 'utf-8');
|
|
35
|
+
}
|
|
36
|
+
function getProfile(name) {
|
|
37
|
+
return readProfiles().find((p) => p.name === name);
|
|
38
|
+
}
|
|
39
|
+
function deleteProfile(name) {
|
|
40
|
+
const profiles = readProfiles();
|
|
41
|
+
const filtered = profiles.filter((p) => p.name !== name);
|
|
42
|
+
if (filtered.length === profiles.length)
|
|
43
|
+
return false;
|
|
44
|
+
fs_1.default.writeFileSync(PROFILES_FILE, JSON.stringify(filtered, null, 2), 'utf-8');
|
|
45
|
+
return true;
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=profiles.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"profiles.js","sourceRoot":"","sources":["../../src/utils/profiles.ts"],"names":[],"mappings":";;;;;;;;;AAAA,4CAAoB;AACpB,gDAAwB;AACxB,4CAAoB;AAGpB,MAAM,YAAY,GAAG,cAAI,CAAC,IAAI,CAAC,YAAE,CAAC,OAAO,EAAE,EAAE,aAAa,CAAC,CAAC;AAC5D,MAAM,aAAa,GAAG,cAAI,CAAC,IAAI,CAAC,YAAY,EAAE,eAAe,CAAC,CAAC;AAQ/D,SAAS,SAAS;IAChB,IAAI,CAAC,YAAE,CAAC,UAAU,CAAC,YAAY,CAAC;QAAE,YAAE,CAAC,SAAS,CAAC,YAAY,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;AACpF,CAAC;AAED;IACE,SAAS,EAAE,CAAC;IACZ,IAAI,CAAC,YAAE,CAAC,UAAU,CAAC,aAAa,CAAC;QAAE,OAAO,EAAE,CAAC;IAC7C,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,YAAE,CAAC,YAAY,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC,CAAC;IAC7D,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,qBAA4B,IAAY,EAAE,MAAiB;IACzD,SAAS,EAAE,CAAC;IACZ,MAAM,QAAQ,GAAG,YAAY,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;IAC/D,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;IACnE,YAAE,CAAC,aAAa,CAAC,aAAa,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;AAC9E,CAAC;AAED,oBAA2B,IAAY;IACrC,OAAO,YAAY,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;AACrD,CAAC;AAED,uBAA8B,IAAY;IACxC,MAAM,QAAQ,GAAG,YAAY,EAAE,CAAC;IAChC,MAAM,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;IACzD,IAAI,QAAQ,CAAC,MAAM,KAAK,QAAQ,CAAC,MAAM;QAAE,OAAO,KAAK,CAAC;IACtD,YAAE,CAAC,aAAa,CAAC,aAAa,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;IAC5E,OAAO,IAAI,CAAC;AACd,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { TableInfo } from '../core/inspector';
|
|
2
|
+
/**
|
|
3
|
+
* Ordena un conjunto de tablas respetando dependencias FK.
|
|
4
|
+
* Las tablas sin dependencias van primero; las que referencian a otras van después.
|
|
5
|
+
* Usa el algoritmo de Kahn (BFS topológico).
|
|
6
|
+
*/
|
|
7
|
+
export declare function sortByDependencies(tables: TableInfo[]): TableInfo[];
|
|
8
|
+
//# sourceMappingURL=topology.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"topology.d.ts","sourceRoot":"","sources":["../../src/utils/topology.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAE9C;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,SAAS,EAAE,CAqDnE"}
|