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.
Files changed (37) hide show
  1. package/CHANGELOG.md +11 -0
  2. package/README.md +2 -1
  3. package/dist/application/MongoConverter.js +1 -1
  4. package/dist/application/MongoConverter.js.map +1 -1
  5. package/dist/application/MongoConverter.spec.js +136 -4
  6. package/dist/application/MongoConverter.spec.js.map +1 -1
  7. package/dist/cli/main.js +2 -11
  8. package/dist/cli/main.js.map +1 -1
  9. package/dist/index.js +1 -1
  10. package/dist/index.js.map +1 -1
  11. package/dist/infrastructure/converters/ConverterFactory.js +2 -0
  12. package/dist/infrastructure/converters/ConverterFactory.js.map +1 -1
  13. package/dist/infrastructure/converters/ConverterFactory.spec.js +51 -0
  14. package/dist/infrastructure/converters/ConverterFactory.spec.js.map +1 -0
  15. package/dist/infrastructure/converters/JoinConverter.js +49 -0
  16. package/dist/infrastructure/converters/JoinConverter.js.map +1 -0
  17. package/dist/infrastructure/converters/SelectConverter.js +7 -8
  18. package/dist/infrastructure/converters/SelectConverter.js.map +1 -1
  19. package/dist/infrastructure/utils/queryUtils.js +22 -6
  20. package/dist/infrastructure/utils/queryUtils.js.map +1 -1
  21. package/dist/infrastructure/utils/queryUtils.spec.js +261 -0
  22. package/dist/infrastructure/utils/queryUtils.spec.js.map +1 -0
  23. package/dist/types/application/MongoConverter.d.ts +2 -1
  24. package/dist/types/application/MongoConverter.d.ts.map +1 -1
  25. package/dist/types/index.d.ts +1 -1
  26. package/dist/types/index.d.ts.map +1 -1
  27. package/dist/types/infrastructure/converters/ConverterFactory.d.ts.map +1 -1
  28. package/dist/types/infrastructure/converters/ConverterFactory.spec.d.ts +2 -0
  29. package/dist/types/infrastructure/converters/ConverterFactory.spec.d.ts.map +1 -0
  30. package/dist/types/infrastructure/converters/JoinConverter.d.ts +7 -0
  31. package/dist/types/infrastructure/converters/JoinConverter.d.ts.map +1 -0
  32. package/dist/types/infrastructure/converters/SelectConverter.d.ts.map +1 -1
  33. package/dist/types/infrastructure/utils/queryUtils.d.ts +7 -2
  34. package/dist/types/infrastructure/utils/queryUtils.d.ts.map +1 -1
  35. package/dist/types/infrastructure/utils/queryUtils.spec.d.ts +2 -0
  36. package/dist/types/infrastructure/utils/queryUtils.spec.d.ts.map +1 -0
  37. 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
- export class MongoConverter {
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,OAAO,cAAc;IACzB,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
+ {"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 verificar las conversiones SQL a MongoDB
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 "../application/MongoConverter.js";
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;;GAEG;AACH,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;AAElE,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE;IAC9B,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE;QAC9B,IAAI,CAAC,oCAAoC,EAAE,GAAG,EAAE;YAC9C,MAAM,GAAG,GAAG,+BAA+B,CAAC;YAC5C,MAAM,MAAM,GAAG,cAAc,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YAE3C,KAAK,CAAC,MAAM,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;YAClC,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,KAAU,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;QAC3D,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,yCAAyC,EAAE,GAAG,EAAE;YACnD,MAAM,GAAG,GAAG,kCAAkC,CAAC;YAC/C,MAAM,MAAM,GAAG,cAAc,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YAE3C,KAAK,CAAC,MAAM,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;YAClC,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,KAAU,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;QACzD,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,kCAAkC,EAAE,GAAG,EAAE;YAC5C,MAAM,GAAG,GAAG,oCAAoC,CAAC;YACjD,MAAM,MAAM,GAAG,cAAc,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YAE3C,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,KAAU,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,KAAK,EAAE,CAAC,CAAC,CAAC;QAChE,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE;QAC9B,IAAI,CAAC,6BAA6B,EAAE,GAAG,EAAE;YACvC,MAAM,GAAG,GACP,qEAAqE,CAAC;YACxE,MAAM,MAAM,GAAG,cAAc,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YAE3C,KAAK,CAAC,MAAM,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;YAClC,KAAK,CAAC,MAAM,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;QACvC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE;QAC9B,IAAI,CAAC,6BAA6B,EAAE,GAAG,EAAE;YACvC,MAAM,GAAG,GAAG,6CAA6C,CAAC;YAC1D,MAAM,MAAM,GAAG,cAAc,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YAE3C,KAAK,CAAC,MAAM,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;YAClC,KAAK,CAAC,MAAM,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;YACrC,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACzB,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE;QAC9B,IAAI,CAAC,6BAA6B,EAAE,GAAG,EAAE;YACvC,MAAM,GAAG,GAAG,gCAAgC,CAAC;YAC7C,MAAM,MAAM,GAAG,cAAc,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YAE3C,KAAK,CAAC,MAAM,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;YAClC,KAAK,CAAC,MAAM,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;QACvC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE;QAC9B,IAAI,CAAC,wCAAwC,EAAE,GAAG,EAAE;YAClD,MAAM,GAAG,GAAG,+BAA+B,CAAC;YAE5C,MAAM,CAAC,GAAG,EAAE,CAAC,cAAc,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,2BAA2B,CAAC,CAAC;QACzE,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
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
@@ -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;KACJ,IAAI,CAAC,YAAY,CAAC;KAClB,WAAW,CAAC,uCAAuC,CAAC;KACpD,OAAO,CAAC,OAAO,CAAC;KAChB,KAAK,CAAC,WAAW,CAAC,CAAC;AAEtB,OAAO;KACJ,OAAO,CAAC,aAAa,CAAC;KACtB,WAAW,CAAC,wBAAwB,CAAC;KACrC,MAAM,CAAC,GAAS,EAAE;IACjB,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;KACD,KAAK,CAAC,GAAG,CAAC,CAAC;AAEd,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC"}
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 { MongoConverter, mongoConverter, } from "./application/MongoConverter.js";
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,EACL,cAAc,EACd,cAAc,GACf,MAAM,iCAAiC,CAAC"}
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;AAEvD,MAAM,UAAU,GAAiB;IAC/B,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"}
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, _d, _e;
7
+ var _a, _b, _c;
8
8
  const { ast } = query;
9
9
  const { columns, from, where, limit } = ast;
10
- const fields = columns && ((_b = (_a = columns[0]) === null || _a === void 0 ? void 0 : _a.expr) === null || _b === void 0 ? void 0 : _b.column) !== "*"
11
- ? columns.map((col) => col.expr.column)
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: ((_e = from === null || from === void 0 ? void 0 : from[0]) === null || _e === void 0 ? void 0 : _e.table) || "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
- where && { $match: buildFilter(where) },
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,GACtB,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,GACV,OAAO,IAAI,CAAA,MAAA,MAAA,OAAO,CAAC,CAAC,CAAC,0CAAE,IAAI,0CAAE,MAAM,MAAK,GAAG;YACzC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAQ,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC;YAC5C,CAAC,CAAC,GAAG,CAAC;QAEV,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,QAAQ,EAAE;gBACR,KAAK,IAAI,EAAE,MAAM,EAAE,WAAW,CAAC,KAAK,CAAC,EAAE;gBACvC,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"}
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
- export const normalizeFieldName = (field) => {
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).map((f) => [f, 1]));
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 [">", "<", ">=", "<=", "!=", "<>", "like", "in"].includes(operator === null || operator === void 0 ? void 0 : operator.toLowerCase())
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":"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"}
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,5 +1,6 @@
1
- export declare class MongoConverter {
1
+ declare class MongoConverter {
2
2
  convert(sql: string): Record<string, any>;
3
3
  }
4
4
  export declare const mongoConverter: MongoConverter;
5
+ export {};
5
6
  //# sourceMappingURL=MongoConverter.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"MongoConverter.d.ts","sourceRoot":"","sources":["../../../src/application/MongoConverter.ts"],"names":[],"mappings":"AAUA,qBAAa,cAAc;IACzB,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAcxC;CACF;AAED,eAAO,MAAM,cAAc,gBAAuB,CAAC"}
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"}
@@ -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 { MongoConverter, mongoConverter, } from "./application/MongoConverter.ts";
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,EACL,cAAc,EACd,cAAc,GACf,MAAM,iCAAiC,CAAC;AACzC,YAAY,EAAE,UAAU,EAAE,MAAM,kCAAkC,CAAC"}
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;AAavE,eAAO,MAAM,YAAY,cAAe,MAAM,KAAG,UAAU,GAAG,IAE7D,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,2 @@
1
+ export {};
2
+ //# sourceMappingURL=ConverterFactory.spec.d.ts.map
@@ -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;AAOvE,eAAO,MAAM,eAAe,EAAE,UAyB7B,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
- export declare const removeUndefinedFields: (obj: Record<string, any>) => Record<string, any>;
2
- export declare const normalizeFieldName: (field: string) => string;
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":"AAMA,eAAO,MAAM,qBAAqB,QAC3B,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,KACvB,MAAM,CAAC,MAAM,EAAE,GAAG,CAEpB,CAAC;AAEF,eAAO,MAAM,kBAAkB,UAAW,MAAM,KAAG,MAElD,CAAC;AAMF,eAAO,MAAM,eAAe,WAClB,MAAM,EAAE,GAAG,GAAG,KACrB,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAGtB,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,CAsBR"}
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,2 @@
1
+ export {};
2
+ //# sourceMappingURL=queryUtils.spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"queryUtils.spec.d.ts","sourceRoot":"","sources":["../../../../src/infrastructure/utils/queryUtils.spec.ts"],"names":[],"mappings":""}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "querymongo",
3
3
  "type": "module",
4
- "version": "1.1.1",
4
+ "version": "1.3.0",
5
5
  "description": "SQL to MongoDB Query Converter CLI",
6
6
  "main": "dist/cli/main.js",
7
7
  "bin": "dist/cli/main.js",