querymongo 1.1.1 → 1.3.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/CHANGELOG.md +11 -0
- package/README.md +2 -1
- package/dist/application/MongoConverter.js +1 -1
- package/dist/application/MongoConverter.js.map +1 -1
- package/dist/application/MongoConverter.spec.js +136 -4
- package/dist/application/MongoConverter.spec.js.map +1 -1
- package/dist/cli/main.js +2 -11
- package/dist/cli/main.js.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/infrastructure/converters/ConverterFactory.js +2 -0
- package/dist/infrastructure/converters/ConverterFactory.js.map +1 -1
- package/dist/infrastructure/converters/ConverterFactory.spec.js +51 -0
- package/dist/infrastructure/converters/ConverterFactory.spec.js.map +1 -0
- package/dist/infrastructure/converters/JoinConverter.js +49 -0
- package/dist/infrastructure/converters/JoinConverter.js.map +1 -0
- package/dist/infrastructure/converters/SelectConverter.js +7 -8
- package/dist/infrastructure/converters/SelectConverter.js.map +1 -1
- package/dist/infrastructure/utils/queryUtils.js +22 -6
- package/dist/infrastructure/utils/queryUtils.js.map +1 -1
- package/dist/infrastructure/utils/queryUtils.spec.js +261 -0
- package/dist/infrastructure/utils/queryUtils.spec.js.map +1 -0
- package/dist/types/application/MongoConverter.d.ts +2 -1
- package/dist/types/application/MongoConverter.d.ts.map +1 -1
- package/dist/types/index.d.ts +1 -1
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/infrastructure/converters/ConverterFactory.d.ts.map +1 -1
- package/dist/types/infrastructure/converters/ConverterFactory.spec.d.ts +2 -0
- package/dist/types/infrastructure/converters/ConverterFactory.spec.d.ts.map +1 -0
- package/dist/types/infrastructure/converters/JoinConverter.d.ts +7 -0
- package/dist/types/infrastructure/converters/JoinConverter.d.ts.map +1 -0
- package/dist/types/infrastructure/converters/SelectConverter.d.ts.map +1 -1
- package/dist/types/infrastructure/utils/queryUtils.d.ts +7 -2
- package/dist/types/infrastructure/utils/queryUtils.d.ts.map +1 -1
- package/dist/types/infrastructure/utils/queryUtils.spec.d.ts +2 -0
- package/dist/types/infrastructure/utils/queryUtils.spec.d.ts.map +1 -0
- package/package.json +1 -1
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
# [1.3.0](https://github.com/rubsuadav/querymongo/compare/v1.2.0...v1.3.0) (2026-09-20)
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
### Bug Fixes
|
|
5
|
+
|
|
6
|
+
* format with preetier ([d5f1f4e](https://github.com/rubsuadav/querymongo/commit/d5f1f4ef95323c030195ab32ca20ba9588daf413))
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
### Features
|
|
10
|
+
|
|
11
|
+
* expand examples with detailed SQL queries for SELECT, INSERT, UPDATE, DELETE, and JOIN operations ([6944402](https://github.com/rubsuadav/querymongo/commit/6944402b2f46ecb8ef58f48bcc2040a958037d63))
|
package/README.md
CHANGED
|
@@ -157,6 +157,8 @@ Cobertura: **100%** en líneas y funciones.
|
|
|
157
157
|
| `LIKE` | `$regex` |
|
|
158
158
|
| `IN` | `$in` |
|
|
159
159
|
| `NOT IN` | `$nin` |
|
|
160
|
+
| `AND` | `$and` |
|
|
161
|
+
| `OR` | `$or` |
|
|
160
162
|
|
|
161
163
|
## 📦 Dependencias
|
|
162
164
|
|
|
@@ -168,7 +170,6 @@ Cobertura: **100%** en líneas y funciones.
|
|
|
168
170
|
|
|
169
171
|
## 🎯 Próximas Mejoras
|
|
170
172
|
|
|
171
|
-
- [ ] Soporte para JOIN
|
|
172
173
|
- [ ] Soporte para GROUP BY
|
|
173
174
|
- [ ] Soporte para ORDER BY
|
|
174
175
|
- [ ] Transacciones multi-documento
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
*/
|
|
5
5
|
import { parseSqlQuery, normalizeQuery, } from "../infrastructure/parser/sqlParser.js";
|
|
6
6
|
import { getConverter } from "../infrastructure/converters/ConverterFactory.js";
|
|
7
|
-
|
|
7
|
+
class MongoConverter {
|
|
8
8
|
convert(sql) {
|
|
9
9
|
const normalized = normalizeQuery(sql);
|
|
10
10
|
const parsed = parseSqlQuery(normalized);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MongoConverter.js","sourceRoot":"","sources":["../../src/application/MongoConverter.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EACL,aAAa,EACb,cAAc,GACf,MAAM,uCAAuC,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,kDAAkD,CAAC;AAEhF,MAAM,
|
|
1
|
+
{"version":3,"file":"MongoConverter.js","sourceRoot":"","sources":["../../src/application/MongoConverter.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EACL,aAAa,EACb,cAAc,GACf,MAAM,uCAAuC,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,kDAAkD,CAAC;AAEhF,MAAM,cAAc;IAClB,OAAO,CAAC,GAAW;QACjB,MAAM,UAAU,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC;QACvC,MAAM,MAAM,GAAG,aAAa,CAAC,UAAU,CAAC,CAAC;QAEzC,MAAM,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;QAC7D,MAAM,SAAS,GAAG,YAAY,CAAC,UAAU,CAAC,CAAC;QAE3C,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CACb,8BAA8B,UAAU,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAC/D,CAAC;QACJ,CAAC;QAED,OAAO,SAAS,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IACtC,CAAC;CACF;AAED,MAAM,CAAC,MAAM,cAAc,GAAG,IAAI,cAAc,EAAE,CAAC"}
|
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Tests para
|
|
2
|
+
* Tests para MongoDB Converter
|
|
3
|
+
* Verifica las conversiones SQL a MongoDB para todos los tipos de queries
|
|
4
|
+
* Cubre: SELECT, INSERT, UPDATE, DELETE y JOIN queries
|
|
3
5
|
*/
|
|
4
6
|
import { test, describe } from "node:test";
|
|
5
|
-
import { equal, ok, throws } from "node:assert";
|
|
6
|
-
import { mongoConverter } from "
|
|
7
|
+
import { equal, ok, throws, deepEqual } from "node:assert";
|
|
8
|
+
import { mongoConverter } from "./MongoConverter.js";
|
|
7
9
|
describe("MongoConverter", () => {
|
|
8
10
|
describe("SELECT queries", () => {
|
|
9
11
|
test("should convert simple SELECT query", () => {
|
|
@@ -23,6 +25,37 @@ describe("MongoConverter", () => {
|
|
|
23
25
|
const result = mongoConverter.convert(sql);
|
|
24
26
|
ok(result.pipeline.some((stage) => stage.$limit === 10));
|
|
25
27
|
});
|
|
28
|
+
test("should convert SELECT with WHERE and LIMIT", () => {
|
|
29
|
+
const sql = "SELECT name, price FROM products WHERE price > 100 LIMIT 5";
|
|
30
|
+
const result = mongoConverter.convert(sql);
|
|
31
|
+
equal(result.collection, "products");
|
|
32
|
+
ok(result.pipeline.some((stage) => stage.$match));
|
|
33
|
+
ok(result.pipeline.some((stage) => stage.$limit === 5));
|
|
34
|
+
});
|
|
35
|
+
test("should convert SELECT with multiple WHERE conditions", () => {
|
|
36
|
+
var _a;
|
|
37
|
+
const sql = "SELECT * FROM users WHERE age > 18 AND status = 'active'";
|
|
38
|
+
const result = mongoConverter.convert(sql);
|
|
39
|
+
equal(result.collection, "users");
|
|
40
|
+
const matchStage = result.pipeline.find((s) => s.$match);
|
|
41
|
+
ok((_a = matchStage === null || matchStage === void 0 ? void 0 : matchStage.$match) === null || _a === void 0 ? void 0 : _a.$and);
|
|
42
|
+
});
|
|
43
|
+
test("should handle SELECT without explicit columns", () => {
|
|
44
|
+
const sql = "SELECT * FROM products";
|
|
45
|
+
const result = mongoConverter.convert(sql);
|
|
46
|
+
equal(result.collection, "products");
|
|
47
|
+
const projectStage = result.pipeline.find((s) => s.$project);
|
|
48
|
+
// When selecting *, $project should either not exist or be empty
|
|
49
|
+
ok(!projectStage || Object.keys(projectStage.$project).length === 0);
|
|
50
|
+
});
|
|
51
|
+
test("should handle SELECT with backtick-quoted columns", () => {
|
|
52
|
+
var _a, _b;
|
|
53
|
+
const sql = "SELECT `id`, `name` FROM users";
|
|
54
|
+
const result = mongoConverter.convert(sql);
|
|
55
|
+
equal(result.collection, "users");
|
|
56
|
+
const projectStage = result.pipeline.find((s) => s.$project);
|
|
57
|
+
ok(((_a = projectStage === null || projectStage === void 0 ? void 0 : projectStage.$project) === null || _a === void 0 ? void 0 : _a.id) || ((_b = projectStage === null || projectStage === void 0 ? void 0 : projectStage.$project) === null || _b === void 0 ? void 0 : _b.name));
|
|
58
|
+
});
|
|
26
59
|
});
|
|
27
60
|
describe("INSERT queries", () => {
|
|
28
61
|
test("should convert INSERT query", () => {
|
|
@@ -30,15 +63,53 @@ describe("MongoConverter", () => {
|
|
|
30
63
|
const result = mongoConverter.convert(sql);
|
|
31
64
|
equal(result.collection, "users");
|
|
32
65
|
equal(result.operation, "insertOne");
|
|
66
|
+
ok(result.documents);
|
|
67
|
+
});
|
|
68
|
+
test("should convert INSERT with multiple rows as insertMany", () => {
|
|
69
|
+
const sql = "INSERT INTO users (name, email) VALUES ('John', 'john@example.com'), ('Jane', 'jane@example.com')";
|
|
70
|
+
const result = mongoConverter.convert(sql);
|
|
71
|
+
equal(result.collection, "users");
|
|
72
|
+
equal(result.operation, "insertMany");
|
|
73
|
+
ok(Array.isArray(result.documents));
|
|
74
|
+
});
|
|
75
|
+
test("should convert INSERT with numeric values", () => {
|
|
76
|
+
const sql = "INSERT INTO products (name, price, stock) VALUES ('Widget', 29.99, 100)";
|
|
77
|
+
const result = mongoConverter.convert(sql);
|
|
78
|
+
equal(result.collection, "products");
|
|
79
|
+
equal(result.operation, "insertOne");
|
|
80
|
+
ok(result.documents);
|
|
33
81
|
});
|
|
34
82
|
});
|
|
35
83
|
describe("UPDATE queries", () => {
|
|
36
|
-
test("should convert UPDATE query", () => {
|
|
84
|
+
test("should convert UPDATE query with WHERE", () => {
|
|
37
85
|
const sql = 'UPDATE users SET name = "Jane" WHERE id = 1';
|
|
38
86
|
const result = mongoConverter.convert(sql);
|
|
39
87
|
equal(result.collection, "users");
|
|
40
88
|
equal(result.operation, "updateOne");
|
|
41
89
|
ok(result.update.$set);
|
|
90
|
+
ok(result.filter);
|
|
91
|
+
});
|
|
92
|
+
test("should convert UPDATE with multiple SET fields", () => {
|
|
93
|
+
const sql = 'UPDATE users SET name = "Jane", age = 30, status = "active" WHERE id = 1';
|
|
94
|
+
const result = mongoConverter.convert(sql);
|
|
95
|
+
equal(result.collection, "users");
|
|
96
|
+
equal(result.operation, "updateOne");
|
|
97
|
+
ok(result.update.$set.name);
|
|
98
|
+
ok(result.update.$set.age);
|
|
99
|
+
ok(result.update.$set.status);
|
|
100
|
+
});
|
|
101
|
+
test("should convert UPDATE with multiple WHERE conditions as updateMany", () => {
|
|
102
|
+
const sql = 'UPDATE users SET status = "inactive" WHERE age < 18 AND country = "US"';
|
|
103
|
+
const result = mongoConverter.convert(sql);
|
|
104
|
+
equal(result.collection, "users");
|
|
105
|
+
equal(result.operation, "updateMany");
|
|
106
|
+
ok(result.filter.$and);
|
|
107
|
+
});
|
|
108
|
+
test("should convert UPDATE without WHERE as updateMany", () => {
|
|
109
|
+
const sql = "UPDATE users SET verified = true";
|
|
110
|
+
const result = mongoConverter.convert(sql);
|
|
111
|
+
equal(result.operation, "updateMany");
|
|
112
|
+
deepEqual(result.filter, {});
|
|
42
113
|
});
|
|
43
114
|
});
|
|
44
115
|
describe("DELETE queries", () => {
|
|
@@ -48,12 +119,73 @@ describe("MongoConverter", () => {
|
|
|
48
119
|
equal(result.collection, "users");
|
|
49
120
|
equal(result.operation, "deleteOne");
|
|
50
121
|
});
|
|
122
|
+
test("should convert DELETE with multiple conditions as deleteMany", () => {
|
|
123
|
+
const sql = "DELETE FROM users WHERE age < 18 OR status = 'banned'";
|
|
124
|
+
const result = mongoConverter.convert(sql);
|
|
125
|
+
equal(result.collection, "users");
|
|
126
|
+
equal(result.operation, "deleteMany");
|
|
127
|
+
ok(result.filter.$or);
|
|
128
|
+
});
|
|
129
|
+
test("should convert DELETE without WHERE as deleteMany", () => {
|
|
130
|
+
const sql = "DELETE FROM logs";
|
|
131
|
+
const result = mongoConverter.convert(sql);
|
|
132
|
+
equal(result.operation, "deleteMany");
|
|
133
|
+
deepEqual(result.filter, {});
|
|
134
|
+
});
|
|
135
|
+
test("should convert DELETE with IN operator", () => {
|
|
136
|
+
var _a;
|
|
137
|
+
const sql = "DELETE FROM users WHERE id IN (1, 2, 3)";
|
|
138
|
+
const result = mongoConverter.convert(sql);
|
|
139
|
+
equal(result.collection, "users");
|
|
140
|
+
ok((_a = result.filter.id) === null || _a === void 0 ? void 0 : _a.$in);
|
|
141
|
+
});
|
|
142
|
+
});
|
|
143
|
+
describe("JOIN queries", () => {
|
|
144
|
+
test("should convert INNER JOIN query", () => {
|
|
145
|
+
const sql = "SELECT u.id, u.name, o.order_id FROM users u INNER JOIN orders o ON u.id = o.user_id";
|
|
146
|
+
const result = mongoConverter.convert(sql);
|
|
147
|
+
equal(result.collection, "users");
|
|
148
|
+
ok(result.pipeline.some((stage) => stage.$lookup));
|
|
149
|
+
ok(result.pipeline.some((stage) => stage.$unwind));
|
|
150
|
+
});
|
|
151
|
+
test("should convert LEFT JOIN query", () => {
|
|
152
|
+
var _a;
|
|
153
|
+
const sql = "SELECT u.name, o.order_id FROM users u LEFT JOIN orders o ON u.id = o.user_id";
|
|
154
|
+
const result = mongoConverter.convert(sql);
|
|
155
|
+
equal(result.collection, "users");
|
|
156
|
+
const unwindStage = result.pipeline.find((s) => s.$unwind);
|
|
157
|
+
ok((_a = unwindStage === null || unwindStage === void 0 ? void 0 : unwindStage.$unwind) === null || _a === void 0 ? void 0 : _a.preserveNullAndEmptyArrays);
|
|
158
|
+
});
|
|
159
|
+
test("should convert JOIN with WHERE clause", () => {
|
|
160
|
+
var _a;
|
|
161
|
+
const sql = "SELECT * FROM users u INNER JOIN orders o ON u.id = o.user_id WHERE o.status = 'completed'";
|
|
162
|
+
const result = mongoConverter.convert(sql);
|
|
163
|
+
ok(result.pipeline.some((stage) => stage.$match));
|
|
164
|
+
const matchStage = result.pipeline.find((s) => s.$match);
|
|
165
|
+
ok((_a = matchStage === null || matchStage === void 0 ? void 0 : matchStage.$match) === null || _a === void 0 ? void 0 : _a.status);
|
|
166
|
+
});
|
|
167
|
+
test("should convert JOIN with LIMIT", () => {
|
|
168
|
+
const sql = "SELECT * FROM users u INNER JOIN orders o ON u.id = o.user_id LIMIT 10";
|
|
169
|
+
const result = mongoConverter.convert(sql);
|
|
170
|
+
ok(result.pipeline.some((stage) => stage.$limit === 10));
|
|
171
|
+
});
|
|
172
|
+
test("should convert multiple JOINs", () => {
|
|
173
|
+
const sql = "SELECT u.name, o.id, p.name FROM users u INNER JOIN orders o ON u.id = o.user_id INNER JOIN products p ON o.product_id = p.id";
|
|
174
|
+
const result = mongoConverter.convert(sql);
|
|
175
|
+
const lookupStages = result.pipeline.filter((s) => s.$lookup);
|
|
176
|
+
ok(lookupStages.length >= 2);
|
|
177
|
+
});
|
|
51
178
|
});
|
|
52
179
|
describe("Error handling", () => {
|
|
53
180
|
test("should throw on unsupported query type", () => {
|
|
54
181
|
const sql = "GRANT SELECT ON users TO john";
|
|
55
182
|
throws(() => mongoConverter.convert(sql), /Unsupported SQL statement/);
|
|
56
183
|
});
|
|
184
|
+
test("should throw on unsupported REVOKE query", () => {
|
|
185
|
+
const sql = "REVOKE SELECT ON users FROM john";
|
|
186
|
+
// Parser may throw SyntaxError or our converter throws "Unsupported"
|
|
187
|
+
throws(() => mongoConverter.convert(sql));
|
|
188
|
+
});
|
|
57
189
|
});
|
|
58
190
|
});
|
|
59
191
|
//# sourceMappingURL=MongoConverter.spec.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MongoConverter.spec.js","sourceRoot":"","sources":["../../src/application/MongoConverter.spec.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"MongoConverter.spec.js","sourceRoot":"","sources":["../../src/application/MongoConverter.spec.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/main.js
CHANGED
|
@@ -16,15 +16,7 @@ import { Command } from "commander";
|
|
|
16
16
|
import chalk from "chalk";
|
|
17
17
|
import { mongoConverter } from "../application/MongoConverter.js";
|
|
18
18
|
const program = new Command();
|
|
19
|
-
program
|
|
20
|
-
.name("querymongo")
|
|
21
|
-
.description("Convert SQL queries to MongoDB format")
|
|
22
|
-
.version("1.0.0")
|
|
23
|
-
.usage("[command]");
|
|
24
|
-
program
|
|
25
|
-
.command("interactive")
|
|
26
|
-
.description("Start interactive mode")
|
|
27
|
-
.action(() => __awaiter(void 0, void 0, void 0, function* () {
|
|
19
|
+
program.name("querymongo").action(() => __awaiter(void 0, void 0, void 0, function* () {
|
|
28
20
|
const readline = yield import("readline");
|
|
29
21
|
const rl = readline.createInterface({
|
|
30
22
|
input: process.stdin,
|
|
@@ -53,7 +45,6 @@ program
|
|
|
53
45
|
console.error(chalk.red(`✗ Error: ${error instanceof Error ? error.message : "Unknown error"}\n`));
|
|
54
46
|
}
|
|
55
47
|
}
|
|
56
|
-
}))
|
|
57
|
-
.usage(" ");
|
|
48
|
+
}));
|
|
58
49
|
program.parse(process.argv);
|
|
59
50
|
//# sourceMappingURL=main.js.map
|
package/dist/cli/main.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"main.js","sourceRoot":"","sources":["../../src/cli/main.ts"],"names":[],"mappings":";;;;;;;;;;AAEA;;;GAGG;AACH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;AAElE,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO
|
|
1
|
+
{"version":3,"file":"main.js","sourceRoot":"","sources":["../../src/cli/main.ts"],"names":[],"mappings":";;;;;;;;;;AAEA;;;GAGG;AACH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;AAElE,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,MAAM,CAAC,GAAS,EAAE;IAC3C,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,CAAC;IAC1C,MAAM,EAAE,GAAG,QAAQ,CAAC,eAAe,CAAC;QAClC,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,MAAM,EAAE,OAAO,CAAC,MAAM;KACvB,CAAC,CAAC;IAEH,MAAM,QAAQ,GAAG,CAAC,MAAc,EAAmB,EAAE;QACnD,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,EAAE,CAAC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IAChE,CAAC,CAAC;IAEF,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,IAAI,CAAC,0DAA0D,CAAC,CACvE,CAAC;IACF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC,CAAC;IAEjD,OAAO,IAAI,EAAE,CAAC;QACZ,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC;QAEzD,IAAI,GAAG,CAAC,WAAW,EAAE,KAAK,MAAM,EAAE,CAAC;YACjC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC;YACzC,EAAE,CAAC,KAAK,EAAE,CAAC;YACX,MAAM;QACR,CAAC;QAED,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE;YAAE,SAAS;QAE1B,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,cAAc,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YAC3C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC,CAAC;YACjD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;QAClE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CACX,KAAK,CAAC,GAAG,CACP,YAAY,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,IAAI,CACzE,CACF,CAAC;QACJ,CAAC;IACH,CAAC;AACH,CAAC,CAAA,CAAC,CAAC;AAEH,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -2,5 +2,5 @@
|
|
|
2
2
|
* API pública del módulo
|
|
3
3
|
* Exporta las funcionalidades principales para uso como librería
|
|
4
4
|
*/
|
|
5
|
-
export {
|
|
5
|
+
export { mongoConverter } from "./application/MongoConverter.js";
|
|
6
6
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC"}
|
|
@@ -2,7 +2,9 @@ import { SelectConverter } from "./SelectConverter.js";
|
|
|
2
2
|
import { CreateConverter } from "./CreateConverter.js";
|
|
3
3
|
import { UpdateConverter } from "./UpdateConverter.js";
|
|
4
4
|
import { DeleteConverter } from "./DeleteConverter.js";
|
|
5
|
+
import { JoinConverter } from "./JoinConverter.js";
|
|
5
6
|
const CONVERTERS = [
|
|
7
|
+
JoinConverter,
|
|
6
8
|
SelectConverter,
|
|
7
9
|
CreateConverter,
|
|
8
10
|
UpdateConverter,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ConverterFactory.js","sourceRoot":"","sources":["../../../src/infrastructure/converters/ConverterFactory.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"ConverterFactory.js","sourceRoot":"","sources":["../../../src/infrastructure/converters/ConverterFactory.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAEnD,MAAM,UAAU,GAAiB;IAC/B,aAAa;IACb,eAAe;IACf,eAAe;IACf,eAAe;IACf,eAAe;CAChB,CAAC;AAEF,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,SAAiB,EAAqB,EAAE;IACnE,OAAO,UAAU,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,IAAI,IAAI,CAAC;AAC1E,CAAC,CAAC"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tests para ConverterFactory
|
|
3
|
+
* Verifica el routing correcto a los converters apropiados según el tipo de query
|
|
4
|
+
*/
|
|
5
|
+
import { test, describe } from "node:test";
|
|
6
|
+
import { equal, ok } from "node:assert";
|
|
7
|
+
import { getConverter } from "./ConverterFactory.js";
|
|
8
|
+
describe("ConverterFactory", () => {
|
|
9
|
+
test("should return SelectConverter for SELECT queries", () => {
|
|
10
|
+
const converter = getConverter("SELECT * FROM users");
|
|
11
|
+
ok(converter);
|
|
12
|
+
equal(converter === null || converter === void 0 ? void 0 : converter.can("SELECT * FROM users"), true);
|
|
13
|
+
});
|
|
14
|
+
test("should return CreateConverter for INSERT queries", () => {
|
|
15
|
+
const converter = getConverter("INSERT INTO users (name) VALUES ('John')");
|
|
16
|
+
ok(converter);
|
|
17
|
+
equal(converter === null || converter === void 0 ? void 0 : converter.can("INSERT INTO users (name) VALUES ('John')"), true);
|
|
18
|
+
});
|
|
19
|
+
test("should return UpdateConverter for UPDATE queries", () => {
|
|
20
|
+
const converter = getConverter('UPDATE users SET name = "Jane"');
|
|
21
|
+
ok(converter);
|
|
22
|
+
equal(converter === null || converter === void 0 ? void 0 : converter.can('UPDATE users SET name = "Jane"'), true);
|
|
23
|
+
});
|
|
24
|
+
test("should return DeleteConverter for DELETE queries", () => {
|
|
25
|
+
const converter = getConverter("DELETE FROM users WHERE id = 1");
|
|
26
|
+
ok(converter);
|
|
27
|
+
equal(converter === null || converter === void 0 ? void 0 : converter.can("DELETE FROM users WHERE id = 1"), true);
|
|
28
|
+
});
|
|
29
|
+
test("should return JoinConverter for SELECT with INNER JOIN", () => {
|
|
30
|
+
const converter = getConverter("SELECT * FROM users u INNER JOIN orders o ON u.id = o.user_id");
|
|
31
|
+
ok(converter);
|
|
32
|
+
});
|
|
33
|
+
test("should return JoinConverter for SELECT with LEFT JOIN", () => {
|
|
34
|
+
const converter = getConverter("SELECT * FROM users u LEFT JOIN orders o ON u.id = o.user_id");
|
|
35
|
+
ok(converter);
|
|
36
|
+
});
|
|
37
|
+
test("should return JoinConverter for SELECT with RIGHT JOIN", () => {
|
|
38
|
+
const converter = getConverter("SELECT * FROM users u RIGHT JOIN orders o ON u.id = o.user_id");
|
|
39
|
+
ok(converter);
|
|
40
|
+
});
|
|
41
|
+
test("should return null for unsupported query types", () => {
|
|
42
|
+
const converter = getConverter("GRANT SELECT ON users TO john");
|
|
43
|
+
equal(converter, null);
|
|
44
|
+
});
|
|
45
|
+
test("should prioritize JoinConverter over SelectConverter", () => {
|
|
46
|
+
const converter = getConverter("SELECT u.name FROM users u INNER JOIN orders o ON u.id = o.user_id");
|
|
47
|
+
// JoinConverter should be selected because it appears first in CONVERTERS array
|
|
48
|
+
ok(converter === null || converter === void 0 ? void 0 : converter.can("SELECT u.name FROM users u INNER JOIN orders o ON u.id = o.user_id"));
|
|
49
|
+
});
|
|
50
|
+
});
|
|
51
|
+
//# sourceMappingURL=ConverterFactory.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ConverterFactory.spec.js","sourceRoot":"","sources":["../../../src/infrastructure/converters/ConverterFactory.spec.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAErD,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE;IAChC,IAAI,CAAC,kDAAkD,EAAE,GAAG,EAAE;QAC5D,MAAM,SAAS,GAAG,YAAY,CAAC,qBAAqB,CAAC,CAAC;QACtD,EAAE,CAAC,SAAS,CAAC,CAAC;QACd,KAAK,CAAC,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,GAAG,CAAC,qBAAqB,CAAC,EAAE,IAAI,CAAC,CAAC;IACrD,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,kDAAkD,EAAE,GAAG,EAAE;QAC5D,MAAM,SAAS,GAAG,YAAY,CAAC,0CAA0C,CAAC,CAAC;QAC3E,EAAE,CAAC,SAAS,CAAC,CAAC;QACd,KAAK,CAAC,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,GAAG,CAAC,0CAA0C,CAAC,EAAE,IAAI,CAAC,CAAC;IAC1E,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,kDAAkD,EAAE,GAAG,EAAE;QAC5D,MAAM,SAAS,GAAG,YAAY,CAAC,gCAAgC,CAAC,CAAC;QACjE,EAAE,CAAC,SAAS,CAAC,CAAC;QACd,KAAK,CAAC,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,GAAG,CAAC,gCAAgC,CAAC,EAAE,IAAI,CAAC,CAAC;IAChE,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,kDAAkD,EAAE,GAAG,EAAE;QAC5D,MAAM,SAAS,GAAG,YAAY,CAAC,gCAAgC,CAAC,CAAC;QACjE,EAAE,CAAC,SAAS,CAAC,CAAC;QACd,KAAK,CAAC,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,GAAG,CAAC,gCAAgC,CAAC,EAAE,IAAI,CAAC,CAAC;IAChE,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,wDAAwD,EAAE,GAAG,EAAE;QAClE,MAAM,SAAS,GAAG,YAAY,CAC5B,+DAA+D,CAChE,CAAC;QACF,EAAE,CAAC,SAAS,CAAC,CAAC;IAChB,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,uDAAuD,EAAE,GAAG,EAAE;QACjE,MAAM,SAAS,GAAG,YAAY,CAC5B,8DAA8D,CAC/D,CAAC;QACF,EAAE,CAAC,SAAS,CAAC,CAAC;IAChB,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,wDAAwD,EAAE,GAAG,EAAE;QAClE,MAAM,SAAS,GAAG,YAAY,CAC5B,+DAA+D,CAChE,CAAC;QACF,EAAE,CAAC,SAAS,CAAC,CAAC;IAChB,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,gDAAgD,EAAE,GAAG,EAAE;QAC1D,MAAM,SAAS,GAAG,YAAY,CAAC,+BAA+B,CAAC,CAAC;QAChE,KAAK,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;IACzB,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,sDAAsD,EAAE,GAAG,EAAE;QAChE,MAAM,SAAS,GAAG,YAAY,CAC5B,oEAAoE,CACrE,CAAC;QACF,gFAAgF;QAChF,EAAE,CACA,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,GAAG,CACZ,oEAAoE,CACrE,CACF,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { buildProjection, buildFilter, removeUndefinedFields, extractSelectColumns, } from "../utils/queryUtils.js";
|
|
2
|
+
export const JoinConverter = {
|
|
3
|
+
can: (statement) => {
|
|
4
|
+
const regex = /\b(INNER\s+JOIN|LEFT\s+JOIN|RIGHT\s+JOIN)\b/i;
|
|
5
|
+
return (statement.toLowerCase().startsWith("select") && regex.test(statement));
|
|
6
|
+
},
|
|
7
|
+
convert: (query) => {
|
|
8
|
+
var _a, _b;
|
|
9
|
+
const { ast } = query;
|
|
10
|
+
const { from, columns, where, limit } = ast;
|
|
11
|
+
const mainTable = from[0].table;
|
|
12
|
+
const pipeline = [];
|
|
13
|
+
const columnNames = columns ? extractSelectColumns(columns) : ["*"];
|
|
14
|
+
const limitValue = ((_b = (_a = limit === null || limit === void 0 ? void 0 : limit.value) === null || _a === void 0 ? void 0 : _a[0]) === null || _b === void 0 ? void 0 : _b.value) || (limit === null || limit === void 0 ? void 0 : limit.value) || limit;
|
|
15
|
+
from.slice(1).forEach((join, index) => {
|
|
16
|
+
var _a, _b;
|
|
17
|
+
if (join.join) {
|
|
18
|
+
pipeline.push({
|
|
19
|
+
$lookup: {
|
|
20
|
+
from: join.table,
|
|
21
|
+
localField: join.on.left.column,
|
|
22
|
+
foreignField: join.on.right.column,
|
|
23
|
+
as: join.as || join.table,
|
|
24
|
+
},
|
|
25
|
+
});
|
|
26
|
+
const isLeftJoin = join.join.includes("LEFT");
|
|
27
|
+
const nextIsInnerJoin = (_b = (_a = from[index + 2]) === null || _a === void 0 ? void 0 : _a.join) === null || _b === void 0 ? void 0 : _b.includes("INNER");
|
|
28
|
+
if (isLeftJoin || !nextIsInnerJoin) {
|
|
29
|
+
pipeline.push({
|
|
30
|
+
$unwind: {
|
|
31
|
+
path: `$${join.as || join.table}`,
|
|
32
|
+
preserveNullAndEmptyArrays: isLeftJoin,
|
|
33
|
+
},
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
});
|
|
38
|
+
if (where)
|
|
39
|
+
pipeline.push({ $match: buildFilter(where) });
|
|
40
|
+
pipeline.push({ $project: buildProjection(columnNames) });
|
|
41
|
+
if (limitValue)
|
|
42
|
+
pipeline.push({ $limit: limitValue });
|
|
43
|
+
return removeUndefinedFields({
|
|
44
|
+
collection: mainTable,
|
|
45
|
+
pipeline,
|
|
46
|
+
});
|
|
47
|
+
},
|
|
48
|
+
};
|
|
49
|
+
//# sourceMappingURL=JoinConverter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"JoinConverter.js","sourceRoot":"","sources":["../../../src/infrastructure/converters/JoinConverter.ts"],"names":[],"mappings":"AAKA,OAAO,EACL,eAAe,EACf,WAAW,EACX,qBAAqB,EACrB,oBAAoB,GACrB,MAAM,wBAAwB,CAAC;AAEhC,MAAM,CAAC,MAAM,aAAa,GAAe;IACvC,GAAG,EAAE,CAAC,SAAiB,EAAW,EAAE;QAClC,MAAM,KAAK,GAAG,8CAA8C,CAAC;QAC7D,OAAO,CACL,SAAS,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CACtE,CAAC;IACJ,CAAC;IAED,OAAO,EAAE,CAAC,KAAU,EAAuB,EAAE;;QAC3C,MAAM,EAAE,GAAG,EAAE,GAAG,KAAK,CAAC;QACtB,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,GAAG,CAAC;QAE5C,MAAM,SAAS,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;QAChC,MAAM,QAAQ,GAAU,EAAE,CAAC;QAE3B,MAAM,WAAW,GAAG,OAAO,CAAC,CAAC,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QACpE,MAAM,UAAU,GAAG,CAAA,MAAA,MAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,KAAK,0CAAG,CAAC,CAAC,0CAAE,KAAK,MAAI,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,KAAK,CAAA,IAAI,KAAK,CAAC;QAErE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAS,EAAE,KAAa,EAAE,EAAE;;YACjD,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;gBACd,QAAQ,CAAC,IAAI,CAAC;oBACZ,OAAO,EAAE;wBACP,IAAI,EAAE,IAAI,CAAC,KAAK;wBAChB,UAAU,EAAE,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM;wBAC/B,YAAY,EAAE,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM;wBAClC,EAAE,EAAE,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,KAAK;qBAC1B;iBACF,CAAC,CAAC;gBAEH,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;gBAC9C,MAAM,eAAe,GAAG,MAAA,MAAA,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,0CAAE,IAAI,0CAAE,QAAQ,CAAC,OAAO,CAAC,CAAC;gBAEjE,IAAI,UAAU,IAAI,CAAC,eAAe,EAAE,CAAC;oBACnC,QAAQ,CAAC,IAAI,CAAC;wBACZ,OAAO,EAAE;4BACP,IAAI,EAAE,IAAI,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,KAAK,EAAE;4BACjC,0BAA0B,EAAE,UAAU;yBACvC;qBACF,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,IAAI,KAAK;YAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACzD,QAAQ,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,eAAe,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;QAC1D,IAAI,UAAU;YAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC,CAAC;QAEtD,OAAO,qBAAqB,CAAC;YAC3B,UAAU,EAAE,SAAS;YACrB,QAAQ;SACT,CAAC,CAAC;IACL,CAAC;CACF,CAAC"}
|
|
@@ -1,20 +1,19 @@
|
|
|
1
|
-
import { buildProjection, buildFilter, removeUndefinedFields, } from "../utils/queryUtils.js";
|
|
1
|
+
import { buildProjection, buildFilter, removeUndefinedFields, extractSelectColumns, } from "../utils/queryUtils.js";
|
|
2
2
|
export const SelectConverter = {
|
|
3
3
|
can: (statement) => {
|
|
4
4
|
return statement.toLowerCase().startsWith("select");
|
|
5
5
|
},
|
|
6
6
|
convert: (query) => {
|
|
7
|
-
var _a, _b, _c
|
|
7
|
+
var _a, _b, _c;
|
|
8
8
|
const { ast } = query;
|
|
9
9
|
const { columns, from, where, limit } = ast;
|
|
10
|
-
const fields = columns
|
|
11
|
-
|
|
12
|
-
: "*";
|
|
13
|
-
const limitValue = ((_d = (_c = limit === null || limit === void 0 ? void 0 : limit.value) === null || _c === void 0 ? void 0 : _c[0]) === null || _d === void 0 ? void 0 : _d.value) || (limit === null || limit === void 0 ? void 0 : limit.value) || limit;
|
|
10
|
+
const fields = columns ? extractSelectColumns(columns) : "*";
|
|
11
|
+
const limitValue = ((_b = (_a = limit === null || limit === void 0 ? void 0 : limit.value) === null || _a === void 0 ? void 0 : _a[0]) === null || _b === void 0 ? void 0 : _b.value) || (limit === null || limit === void 0 ? void 0 : limit.value) || limit;
|
|
14
12
|
return removeUndefinedFields({
|
|
15
|
-
collection: ((
|
|
13
|
+
collection: ((_c = from === null || from === void 0 ? void 0 : from[0]) === null || _c === void 0 ? void 0 : _c.table) || "collection",
|
|
14
|
+
queryType: where && fields !== "*" && limitValue ? "aggregation" : "find",
|
|
16
15
|
pipeline: [
|
|
17
|
-
|
|
16
|
+
{ $match: buildFilter(where) || {} },
|
|
18
17
|
fields !== "*" && { $project: buildProjection(fields) },
|
|
19
18
|
limitValue && { $limit: limitValue },
|
|
20
19
|
].filter(Boolean),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SelectConverter.js","sourceRoot":"","sources":["../../../src/infrastructure/converters/SelectConverter.ts"],"names":[],"mappings":"AAKA,OAAO,EACL,eAAe,EACf,WAAW,EACX,qBAAqB,
|
|
1
|
+
{"version":3,"file":"SelectConverter.js","sourceRoot":"","sources":["../../../src/infrastructure/converters/SelectConverter.ts"],"names":[],"mappings":"AAKA,OAAO,EACL,eAAe,EACf,WAAW,EACX,qBAAqB,EACrB,oBAAoB,GACrB,MAAM,wBAAwB,CAAC;AAEhC,MAAM,CAAC,MAAM,eAAe,GAAe;IACzC,GAAG,EAAE,CAAC,SAAiB,EAAW,EAAE;QAClC,OAAO,SAAS,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;IACtD,CAAC;IAED,OAAO,EAAE,CAAC,KAAU,EAAuB,EAAE;;QAC3C,MAAM,EAAE,GAAG,EAAE,GAAG,KAAK,CAAC;QACtB,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,GAAG,CAAC;QAE5C,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;QAE7D,MAAM,UAAU,GAAG,CAAA,MAAA,MAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,KAAK,0CAAG,CAAC,CAAC,0CAAE,KAAK,MAAI,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,KAAK,CAAA,IAAI,KAAK,CAAC;QAErE,OAAO,qBAAqB,CAAC;YAC3B,UAAU,EAAE,CAAA,MAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAG,CAAC,CAAC,0CAAE,KAAK,KAAI,YAAY;YAC5C,SAAS,EAAE,KAAK,IAAI,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,MAAM;YACzE,QAAQ,EAAE;gBACR,EAAE,MAAM,EAAE,WAAW,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE;gBACpC,MAAM,KAAK,GAAG,IAAI,EAAE,QAAQ,EAAE,eAAe,CAAC,MAAM,CAAC,EAAE;gBACvD,UAAU,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE;aACrC,CAAC,MAAM,CAAC,OAAO,CAAC;SAClB,CAAC,CAAC;IACL,CAAC;CACF,CAAC"}
|
|
@@ -6,16 +6,34 @@ import _ from "lodash";
|
|
|
6
6
|
export const removeUndefinedFields = (obj) => {
|
|
7
7
|
return _.omitBy(obj, _.isUndefined);
|
|
8
8
|
};
|
|
9
|
-
|
|
9
|
+
const normalizeFieldName = (field) => {
|
|
10
10
|
return field.trim().replace(/`|"/g, "");
|
|
11
11
|
};
|
|
12
12
|
const normalizeFieldNames = (fields) => {
|
|
13
13
|
return fields.map(normalizeFieldName);
|
|
14
14
|
};
|
|
15
|
+
const normalizeQualifiedField = (field) => {
|
|
16
|
+
const parts = field.split(".");
|
|
17
|
+
return parts.length > 1 ? parts[parts.length - 1] : field;
|
|
18
|
+
};
|
|
19
|
+
export const extractSelectColumns = (columns) => {
|
|
20
|
+
if (!columns)
|
|
21
|
+
return ["*"];
|
|
22
|
+
return columns.map((col) => {
|
|
23
|
+
if (typeof col === "object" && col.expr) {
|
|
24
|
+
return col.expr.column || col.expr.value || "*";
|
|
25
|
+
}
|
|
26
|
+
return col;
|
|
27
|
+
});
|
|
28
|
+
};
|
|
15
29
|
export const buildProjection = (fields) => {
|
|
30
|
+
if (Array.isArray(fields) && fields.length === 1 && fields[0] === "*")
|
|
31
|
+
return {};
|
|
16
32
|
if (fields === "*")
|
|
17
33
|
return {};
|
|
18
|
-
return Object.fromEntries(normalizeFieldNames(fields)
|
|
34
|
+
return Object.fromEntries(normalizeFieldNames(fields)
|
|
35
|
+
.map(normalizeQualifiedField) // Soporte para alias de tabla en campos cualificados
|
|
36
|
+
.map((f) => [f, 1]));
|
|
19
37
|
};
|
|
20
38
|
export const buildFilter = (condition) => {
|
|
21
39
|
if (!condition)
|
|
@@ -53,9 +71,9 @@ export const buildFilter = (condition) => {
|
|
|
53
71
|
export function determineOperation(where, operations) {
|
|
54
72
|
var _a;
|
|
55
73
|
const uniqueFields = ["id", "_id", "email", "username"];
|
|
56
|
-
const { operator, left } = where;
|
|
57
74
|
if (!where)
|
|
58
75
|
return operations.many;
|
|
76
|
+
const { operator, left } = where;
|
|
59
77
|
if (["and", "or"].includes(operator === null || operator === void 0 ? void 0 : operator.toLowerCase())) {
|
|
60
78
|
return operations.many;
|
|
61
79
|
}
|
|
@@ -64,8 +82,6 @@ export function determineOperation(where, operations) {
|
|
|
64
82
|
if (isUniqueField && operator === "=") {
|
|
65
83
|
return operations.one;
|
|
66
84
|
}
|
|
67
|
-
return
|
|
68
|
-
? operations.many
|
|
69
|
-
: operations.one;
|
|
85
|
+
return operations.many;
|
|
70
86
|
}
|
|
71
87
|
//# sourceMappingURL=queryUtils.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"queryUtils.js","sourceRoot":"","sources":["../../../src/infrastructure/utils/queryUtils.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,CAAC,MAAM,QAAQ,CAAC;AAEvB,MAAM,CAAC,MAAM,qBAAqB,GAAG,CACnC,
|
|
1
|
+
{"version":3,"file":"queryUtils.js","sourceRoot":"","sources":["../../../src/infrastructure/utils/queryUtils.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,261 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tests para Query Utilities
|
|
3
|
+
* Verifica las funciones auxiliares para construir filtros, proyecciones y operaciones
|
|
4
|
+
*/
|
|
5
|
+
import { test, describe } from "node:test";
|
|
6
|
+
import { equal, ok, deepEqual } from "node:assert";
|
|
7
|
+
import { buildFilter, buildProjection, removeUndefinedFields, extractSelectColumns, determineOperation, } from "../utils/queryUtils.js";
|
|
8
|
+
describe("Query Utilities - buildFilter", () => {
|
|
9
|
+
test("should handle simple equality filter", () => {
|
|
10
|
+
var _a;
|
|
11
|
+
const condition = {
|
|
12
|
+
operator: "=",
|
|
13
|
+
left: { column: "id" },
|
|
14
|
+
right: { value: 1 },
|
|
15
|
+
};
|
|
16
|
+
const filter = buildFilter(condition);
|
|
17
|
+
ok(((_a = filter.id) === null || _a === void 0 ? void 0 : _a.$eq) === 1 || filter.id === 1);
|
|
18
|
+
});
|
|
19
|
+
test("should handle inequality operators", () => {
|
|
20
|
+
const conditions = [
|
|
21
|
+
{ op: "!=", expected: "$ne" },
|
|
22
|
+
{ op: "<>", expected: "$ne" },
|
|
23
|
+
{ op: "<", expected: "$lt" },
|
|
24
|
+
{ op: ">", expected: "$gt" },
|
|
25
|
+
{ op: "<=", expected: "$lte" },
|
|
26
|
+
{ op: ">=", expected: "$gte" },
|
|
27
|
+
];
|
|
28
|
+
conditions.forEach(({ op, expected }) => {
|
|
29
|
+
var _a;
|
|
30
|
+
const condition = {
|
|
31
|
+
operator: op,
|
|
32
|
+
left: { column: "age" },
|
|
33
|
+
right: { value: 18 },
|
|
34
|
+
};
|
|
35
|
+
const filter = buildFilter(condition);
|
|
36
|
+
ok(((_a = filter.age) === null || _a === void 0 ? void 0 : _a[expected]) !== undefined);
|
|
37
|
+
});
|
|
38
|
+
});
|
|
39
|
+
test("should handle AND operator", () => {
|
|
40
|
+
const condition = {
|
|
41
|
+
operator: "AND",
|
|
42
|
+
left: { operator: "=", left: { column: "id" }, right: { value: 1 } },
|
|
43
|
+
right: {
|
|
44
|
+
operator: "=",
|
|
45
|
+
left: { column: "status" },
|
|
46
|
+
right: { value: "active" },
|
|
47
|
+
},
|
|
48
|
+
};
|
|
49
|
+
const filter = buildFilter(condition);
|
|
50
|
+
ok(filter.$and && Array.isArray(filter.$and));
|
|
51
|
+
equal(filter.$and.length, 2);
|
|
52
|
+
});
|
|
53
|
+
test("should handle OR operator", () => {
|
|
54
|
+
const condition = {
|
|
55
|
+
operator: "OR",
|
|
56
|
+
left: { operator: "=", left: { column: "id" }, right: { value: 1 } },
|
|
57
|
+
right: { operator: "=", left: { column: "id" }, right: { value: 2 } },
|
|
58
|
+
};
|
|
59
|
+
const filter = buildFilter(condition);
|
|
60
|
+
ok(filter.$or && Array.isArray(filter.$or));
|
|
61
|
+
equal(filter.$or.length, 2);
|
|
62
|
+
});
|
|
63
|
+
test("should handle IN operator", () => {
|
|
64
|
+
var _a;
|
|
65
|
+
const condition = {
|
|
66
|
+
operator: "in",
|
|
67
|
+
left: { column: "status" },
|
|
68
|
+
right: { value: [1, 2, 3] },
|
|
69
|
+
};
|
|
70
|
+
const filter = buildFilter(condition);
|
|
71
|
+
ok((_a = filter.status) === null || _a === void 0 ? void 0 : _a.$in);
|
|
72
|
+
});
|
|
73
|
+
test("should handle LIKE operator", () => {
|
|
74
|
+
var _a;
|
|
75
|
+
const condition = {
|
|
76
|
+
operator: "like",
|
|
77
|
+
left: { column: "name" },
|
|
78
|
+
right: { value: "%john%" },
|
|
79
|
+
};
|
|
80
|
+
const filter = buildFilter(condition);
|
|
81
|
+
ok((_a = filter.name) === null || _a === void 0 ? void 0 : _a.$regex);
|
|
82
|
+
});
|
|
83
|
+
test("should return empty filter for null condition", () => {
|
|
84
|
+
const filter = buildFilter(null);
|
|
85
|
+
deepEqual(filter, {});
|
|
86
|
+
});
|
|
87
|
+
test("should normalize field names (remove quotes)", () => {
|
|
88
|
+
const condition = {
|
|
89
|
+
operator: "=",
|
|
90
|
+
left: { column: '"email"' },
|
|
91
|
+
right: { value: "test@example.com" },
|
|
92
|
+
};
|
|
93
|
+
const filter = buildFilter(condition);
|
|
94
|
+
ok(filter.email !== undefined);
|
|
95
|
+
});
|
|
96
|
+
});
|
|
97
|
+
describe("Query Utilities - buildProjection", () => {
|
|
98
|
+
test("should return empty object for wildcard", () => {
|
|
99
|
+
const projection = buildProjection("*");
|
|
100
|
+
deepEqual(projection, {});
|
|
101
|
+
});
|
|
102
|
+
test("should build projection for specific columns", () => {
|
|
103
|
+
const projection = buildProjection(["id", "name", "email"]);
|
|
104
|
+
ok(projection.id === 1);
|
|
105
|
+
ok(projection.name === 1);
|
|
106
|
+
ok(projection.email === 1);
|
|
107
|
+
});
|
|
108
|
+
test("should normalize field names in projection", () => {
|
|
109
|
+
const projection = buildProjection(["`id`", '"name"', "email"]);
|
|
110
|
+
ok(projection.id === 1 || projection["`id`"]);
|
|
111
|
+
ok(projection.email === 1);
|
|
112
|
+
});
|
|
113
|
+
test("should handle qualified field names", () => {
|
|
114
|
+
const projection = buildProjection(["users.id", "users.name"]);
|
|
115
|
+
// Should extract the field part after the dot
|
|
116
|
+
ok(projection.id === 1 || projection.name === 1);
|
|
117
|
+
});
|
|
118
|
+
});
|
|
119
|
+
describe("Query Utilities - extractSelectColumns", () => {
|
|
120
|
+
test("should return wildcard if no columns provided", () => {
|
|
121
|
+
//@ts-expect-error null is not a valid argument for extractSelectColumns but is used here for testing purposes
|
|
122
|
+
const columns = extractSelectColumns(null);
|
|
123
|
+
deepEqual(columns, ["*"]);
|
|
124
|
+
});
|
|
125
|
+
test("should extract column names from array", () => {
|
|
126
|
+
const columns = [{ expr: { column: "id" } }, { expr: { column: "name" } }];
|
|
127
|
+
const result = extractSelectColumns(columns);
|
|
128
|
+
ok(result.includes("id"));
|
|
129
|
+
ok(result.includes("name"));
|
|
130
|
+
});
|
|
131
|
+
test("should handle object columns without expr property", () => {
|
|
132
|
+
const columns = ["id", "name", "email"];
|
|
133
|
+
const result = extractSelectColumns(columns);
|
|
134
|
+
equal(result.length, 3);
|
|
135
|
+
});
|
|
136
|
+
test("should handle mixed column formats", () => {
|
|
137
|
+
const columns = [
|
|
138
|
+
{ expr: { column: "id" } },
|
|
139
|
+
"name",
|
|
140
|
+
{ expr: { value: "email" } },
|
|
141
|
+
];
|
|
142
|
+
const result = extractSelectColumns(columns);
|
|
143
|
+
ok(result.length >= 2);
|
|
144
|
+
});
|
|
145
|
+
});
|
|
146
|
+
describe("Query Utilities - determineOperation", () => {
|
|
147
|
+
test("should return One operation for unique fields with equality", () => {
|
|
148
|
+
const where = {
|
|
149
|
+
operator: "=",
|
|
150
|
+
left: { column: "id" },
|
|
151
|
+
right: { value: 1 },
|
|
152
|
+
};
|
|
153
|
+
const result = determineOperation(where, {
|
|
154
|
+
one: "deleteOne",
|
|
155
|
+
many: "deleteMany",
|
|
156
|
+
});
|
|
157
|
+
equal(result, "deleteOne");
|
|
158
|
+
});
|
|
159
|
+
test("should return One operation for email with equality", () => {
|
|
160
|
+
const where = {
|
|
161
|
+
operator: "=",
|
|
162
|
+
left: { column: "email" },
|
|
163
|
+
right: { value: "test@example.com" },
|
|
164
|
+
};
|
|
165
|
+
const result = determineOperation(where, {
|
|
166
|
+
one: "updateOne",
|
|
167
|
+
many: "updateMany",
|
|
168
|
+
});
|
|
169
|
+
equal(result, "updateOne");
|
|
170
|
+
});
|
|
171
|
+
test("should return Many operation for non-unique fields with equality", () => {
|
|
172
|
+
const where = {
|
|
173
|
+
operator: "=",
|
|
174
|
+
left: { column: "status" },
|
|
175
|
+
right: { value: "active" },
|
|
176
|
+
};
|
|
177
|
+
const result = determineOperation(where, {
|
|
178
|
+
one: "deleteOne",
|
|
179
|
+
many: "deleteMany",
|
|
180
|
+
});
|
|
181
|
+
equal(result, "deleteMany");
|
|
182
|
+
});
|
|
183
|
+
test("should return Many operation for AND conditions", () => {
|
|
184
|
+
const where = {
|
|
185
|
+
operator: "AND",
|
|
186
|
+
left: { operator: "=", left: { column: "id" }, right: { value: 1 } },
|
|
187
|
+
right: {
|
|
188
|
+
operator: "=",
|
|
189
|
+
left: { column: "status" },
|
|
190
|
+
right: { value: "active" },
|
|
191
|
+
},
|
|
192
|
+
};
|
|
193
|
+
const result = determineOperation(where, {
|
|
194
|
+
one: "deleteOne",
|
|
195
|
+
many: "deleteMany",
|
|
196
|
+
});
|
|
197
|
+
equal(result, "deleteMany");
|
|
198
|
+
});
|
|
199
|
+
test("should return Many operation for comparison operators", () => {
|
|
200
|
+
const operators = [">", "<", ">=", "<=", "!=", "<>", "like"];
|
|
201
|
+
operators.forEach((op) => {
|
|
202
|
+
const where = {
|
|
203
|
+
operator: op,
|
|
204
|
+
left: { column: "age" },
|
|
205
|
+
right: { value: 18 },
|
|
206
|
+
};
|
|
207
|
+
const result = determineOperation(where, {
|
|
208
|
+
one: "updateOne",
|
|
209
|
+
many: "updateMany",
|
|
210
|
+
});
|
|
211
|
+
equal(result, "updateMany");
|
|
212
|
+
});
|
|
213
|
+
});
|
|
214
|
+
test("should return Many for null/no WHERE clause", () => {
|
|
215
|
+
const result1 = determineOperation(null, {
|
|
216
|
+
one: "deleteOne",
|
|
217
|
+
many: "deleteMany",
|
|
218
|
+
});
|
|
219
|
+
const result2 = determineOperation(undefined, {
|
|
220
|
+
one: "updateOne",
|
|
221
|
+
many: "updateMany",
|
|
222
|
+
});
|
|
223
|
+
equal(result1, "deleteMany");
|
|
224
|
+
equal(result2, "updateMany");
|
|
225
|
+
});
|
|
226
|
+
});
|
|
227
|
+
describe("Query Utilities - removeUndefinedFields", () => {
|
|
228
|
+
test("should remove undefined fields from object", () => {
|
|
229
|
+
const obj = {
|
|
230
|
+
name: "John",
|
|
231
|
+
email: undefined,
|
|
232
|
+
age: 30,
|
|
233
|
+
status: undefined,
|
|
234
|
+
};
|
|
235
|
+
const result = removeUndefinedFields(obj);
|
|
236
|
+
ok(result.name);
|
|
237
|
+
ok(result.age);
|
|
238
|
+
ok(!result.email);
|
|
239
|
+
ok(!result.status);
|
|
240
|
+
});
|
|
241
|
+
test("should preserve null and falsy values", () => {
|
|
242
|
+
const obj = {
|
|
243
|
+
name: "John",
|
|
244
|
+
verified: false,
|
|
245
|
+
count: 0,
|
|
246
|
+
notes: null,
|
|
247
|
+
empty: undefined,
|
|
248
|
+
};
|
|
249
|
+
const result = removeUndefinedFields(obj);
|
|
250
|
+
ok(result.verified === false);
|
|
251
|
+
ok(result.count === 0);
|
|
252
|
+
ok(result.notes === null);
|
|
253
|
+
ok(!result.empty);
|
|
254
|
+
});
|
|
255
|
+
test("should return empty object if all fields undefined", () => {
|
|
256
|
+
const obj = { a: undefined, b: undefined };
|
|
257
|
+
const result = removeUndefinedFields(obj);
|
|
258
|
+
deepEqual(result, {});
|
|
259
|
+
});
|
|
260
|
+
});
|
|
261
|
+
//# sourceMappingURL=queryUtils.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"queryUtils.spec.js","sourceRoot":"","sources":["../../../src/infrastructure/utils/queryUtils.spec.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MongoConverter.d.ts","sourceRoot":"","sources":["../../../src/application/MongoConverter.ts"],"names":[],"mappings":"AAUA,
|
|
1
|
+
{"version":3,"file":"MongoConverter.d.ts","sourceRoot":"","sources":["../../../src/application/MongoConverter.ts"],"names":[],"mappings":"AAUA,cAAM,cAAc;IAClB,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAcxC;CACF;AAED,eAAO,MAAM,cAAc,gBAAuB,CAAC"}
|
package/dist/types/index.d.ts
CHANGED
|
@@ -2,6 +2,6 @@
|
|
|
2
2
|
* API pública del módulo
|
|
3
3
|
* Exporta las funcionalidades principales para uso como librería
|
|
4
4
|
*/
|
|
5
|
-
export {
|
|
5
|
+
export { mongoConverter } from "./application/MongoConverter.ts";
|
|
6
6
|
export type { IConverter } from "./domain/interfaces/Converter.ts";
|
|
7
7
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AACjE,YAAY,EAAE,UAAU,EAAE,MAAM,kCAAkC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ConverterFactory.d.ts","sourceRoot":"","sources":["../../../../src/infrastructure/converters/ConverterFactory.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sCAAsC,CAAC;
|
|
1
|
+
{"version":3,"file":"ConverterFactory.d.ts","sourceRoot":"","sources":["../../../../src/infrastructure/converters/ConverterFactory.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sCAAsC,CAAC;AAevE,eAAO,MAAM,YAAY,cAAe,MAAM,KAAG,UAAU,GAAG,IAE7D,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ConverterFactory.spec.d.ts","sourceRoot":"","sources":["../../../../src/infrastructure/converters/ConverterFactory.spec.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Conversor para queries SELECT con JOIN
|
|
3
|
+
* Convierte queries SELECT con JOIN a aggregation pipeline de MongoDB
|
|
4
|
+
*/
|
|
5
|
+
import type { IConverter } from "../../domain/interfaces/Converter.ts";
|
|
6
|
+
export declare const JoinConverter: IConverter;
|
|
7
|
+
//# sourceMappingURL=JoinConverter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"JoinConverter.d.ts","sourceRoot":"","sources":["../../../../src/infrastructure/converters/JoinConverter.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sCAAsC,CAAC;AAQvE,eAAO,MAAM,aAAa,EAAE,UAoD3B,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SelectConverter.d.ts","sourceRoot":"","sources":["../../../../src/infrastructure/converters/SelectConverter.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sCAAsC,CAAC;
|
|
1
|
+
{"version":3,"file":"SelectConverter.d.ts","sourceRoot":"","sources":["../../../../src/infrastructure/converters/SelectConverter.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sCAAsC,CAAC;AAQvE,eAAO,MAAM,eAAe,EAAE,UAuB7B,CAAC"}
|
|
@@ -1,5 +1,10 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
/**
|
|
2
|
+
* Utilidades para conversión de queries SQL a MongoDB
|
|
3
|
+
* Centraliza lógica reutilizable siguiendo principio DRY
|
|
4
|
+
*/
|
|
5
|
+
import _ from "lodash";
|
|
6
|
+
export declare const removeUndefinedFields: (obj: _.Dictionary<any>) => _.Dictionary<any>;
|
|
7
|
+
export declare const extractSelectColumns: (columns: any[]) => string[];
|
|
3
8
|
export declare const buildProjection: (fields: string[] | "*") => Record<string, 1 | 0>;
|
|
4
9
|
export declare const buildFilter: (condition: any) => Record<string, any>;
|
|
5
10
|
export declare function determineOperation(where: any, operations: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"queryUtils.d.ts","sourceRoot":"","sources":["../../../../src/infrastructure/utils/queryUtils.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"queryUtils.d.ts","sourceRoot":"","sources":["../../../../src/infrastructure/utils/queryUtils.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,CAAC,MAAM,QAAQ,CAAC;AAEvB,eAAO,MAAM,qBAAqB,QAC3B,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,KACrB,CAAC,CAAC,UAAU,CAAC,GAAG,CAElB,CAAC;AAeF,eAAO,MAAM,oBAAoB,YAAa,GAAG,EAAE,KAAG,MAAM,EAS3D,CAAC;AAEF,eAAO,MAAM,eAAe,WAClB,MAAM,EAAE,GAAG,GAAG,KACrB,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAStB,CAAC;AAEF,eAAO,MAAM,WAAW,cAAe,GAAG,KAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAsC9D,CAAC;AAEF,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,GAAG,EACV,UAAU,EAAE;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GACxC,MAAM,CAmBR"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"queryUtils.spec.d.ts","sourceRoot":"","sources":["../../../../src/infrastructure/utils/queryUtils.spec.ts"],"names":[],"mappings":""}
|