callman-core 1.10.0 → 1.11.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 (109) hide show
  1. package/dist/host/connections.d.ts +67 -0
  2. package/dist/host/connections.d.ts.map +1 -0
  3. package/dist/host/connections.js +156 -0
  4. package/dist/host/connections.js.map +1 -0
  5. package/dist/host/db/mongoAdapter.d.ts +7 -0
  6. package/dist/host/db/mongoAdapter.d.ts.map +1 -0
  7. package/dist/host/db/mongoAdapter.js +426 -0
  8. package/dist/host/db/mongoAdapter.js.map +1 -0
  9. package/dist/host/db/mysqlAdapter.d.ts +7 -0
  10. package/dist/host/db/mysqlAdapter.d.ts.map +1 -0
  11. package/dist/host/db/mysqlAdapter.js +68 -0
  12. package/dist/host/db/mysqlAdapter.js.map +1 -0
  13. package/dist/host/db/oracleAdapter.d.ts +7 -0
  14. package/dist/host/db/oracleAdapter.d.ts.map +1 -0
  15. package/dist/host/db/oracleAdapter.js +142 -0
  16. package/dist/host/db/oracleAdapter.js.map +1 -0
  17. package/dist/host/db/oracleConnectString.d.ts +10 -0
  18. package/dist/host/db/oracleConnectString.d.ts.map +1 -0
  19. package/dist/host/db/oracleConnectString.js +58 -0
  20. package/dist/host/db/oracleConnectString.js.map +1 -0
  21. package/dist/host/db/postgresAdapter.d.ts +7 -0
  22. package/dist/host/db/postgresAdapter.d.ts.map +1 -0
  23. package/dist/host/db/postgresAdapter.js +67 -0
  24. package/dist/host/db/postgresAdapter.js.map +1 -0
  25. package/dist/host/db/queryExecutor.d.ts +3 -0
  26. package/dist/host/db/queryExecutor.d.ts.map +1 -0
  27. package/dist/host/db/queryExecutor.js +97 -0
  28. package/dist/host/db/queryExecutor.js.map +1 -0
  29. package/dist/host/db/sqlNormalize.d.ts +3 -0
  30. package/dist/host/db/sqlNormalize.d.ts.map +1 -0
  31. package/dist/host/db/sqlNormalize.js +29 -0
  32. package/dist/host/db/sqlNormalize.js.map +1 -0
  33. package/dist/host/db/templateResolver.d.ts +3 -0
  34. package/dist/host/db/templateResolver.d.ts.map +1 -0
  35. package/dist/host/db/templateResolver.js +77 -0
  36. package/dist/host/db/templateResolver.js.map +1 -0
  37. package/dist/host/db/types.d.ts +59 -0
  38. package/dist/host/db/types.d.ts.map +1 -0
  39. package/dist/host/db/types.js +6 -0
  40. package/dist/host/db/types.js.map +1 -0
  41. package/dist/host/index.d.ts +6 -0
  42. package/dist/host/index.d.ts.map +1 -0
  43. package/dist/host/index.js +7 -0
  44. package/dist/host/index.js.map +1 -0
  45. package/dist/host/lazy.d.ts +3 -0
  46. package/dist/host/lazy.d.ts.map +1 -0
  47. package/dist/host/lazy.js +31 -0
  48. package/dist/host/lazy.js.map +1 -0
  49. package/dist/host/redis/redisService.d.ts +9 -0
  50. package/dist/host/redis/redisService.d.ts.map +1 -0
  51. package/dist/host/redis/redisService.js +264 -0
  52. package/dist/host/redis/redisService.js.map +1 -0
  53. package/dist/host/redis/types.d.ts +44 -0
  54. package/dist/host/redis/types.d.ts.map +1 -0
  55. package/dist/host/redis/types.js +4 -0
  56. package/dist/host/redis/types.js.map +1 -0
  57. package/dist/index.d.ts +1 -0
  58. package/dist/index.d.ts.map +1 -1
  59. package/dist/index.js +1 -0
  60. package/dist/index.js.map +1 -1
  61. package/dist/runner/requestRunner.d.ts.map +1 -1
  62. package/dist/runner/requestRunner.js +120 -0
  63. package/dist/runner/requestRunner.js.map +1 -1
  64. package/dist/runner/runCollection.d.ts +1 -1
  65. package/dist/runner/runCollection.d.ts.map +1 -1
  66. package/dist/runner/runCollection.js +3 -1
  67. package/dist/runner/runCollection.js.map +1 -1
  68. package/dist/script/legacy.d.ts.map +1 -1
  69. package/dist/script/legacy.js +8 -0
  70. package/dist/script/legacy.js.map +1 -1
  71. package/dist/types/index.d.ts +11 -0
  72. package/dist/types/index.d.ts.map +1 -1
  73. package/dist-cjs/host/connections.js +164 -0
  74. package/dist-cjs/host/connections.js.map +1 -0
  75. package/dist-cjs/host/db/mongoAdapter.js +431 -0
  76. package/dist-cjs/host/db/mongoAdapter.js.map +1 -0
  77. package/dist-cjs/host/db/mysqlAdapter.js +73 -0
  78. package/dist-cjs/host/db/mysqlAdapter.js.map +1 -0
  79. package/dist-cjs/host/db/oracleAdapter.js +147 -0
  80. package/dist-cjs/host/db/oracleAdapter.js.map +1 -0
  81. package/dist-cjs/host/db/oracleConnectString.js +63 -0
  82. package/dist-cjs/host/db/oracleConnectString.js.map +1 -0
  83. package/dist-cjs/host/db/postgresAdapter.js +72 -0
  84. package/dist-cjs/host/db/postgresAdapter.js.map +1 -0
  85. package/dist-cjs/host/db/queryExecutor.js +101 -0
  86. package/dist-cjs/host/db/queryExecutor.js.map +1 -0
  87. package/dist-cjs/host/db/sqlNormalize.js +33 -0
  88. package/dist-cjs/host/db/sqlNormalize.js.map +1 -0
  89. package/dist-cjs/host/db/templateResolver.js +81 -0
  90. package/dist-cjs/host/db/templateResolver.js.map +1 -0
  91. package/dist-cjs/host/db/types.js +7 -0
  92. package/dist-cjs/host/db/types.js.map +1 -0
  93. package/dist-cjs/host/index.js +17 -0
  94. package/dist-cjs/host/index.js.map +1 -0
  95. package/dist-cjs/host/lazy.js +69 -0
  96. package/dist-cjs/host/lazy.js.map +1 -0
  97. package/dist-cjs/host/redis/redisService.js +268 -0
  98. package/dist-cjs/host/redis/redisService.js.map +1 -0
  99. package/dist-cjs/host/redis/types.js +5 -0
  100. package/dist-cjs/host/redis/types.js.map +1 -0
  101. package/dist-cjs/index.js +1 -0
  102. package/dist-cjs/index.js.map +1 -1
  103. package/dist-cjs/runner/requestRunner.js +120 -0
  104. package/dist-cjs/runner/requestRunner.js.map +1 -1
  105. package/dist-cjs/runner/runCollection.js +3 -1
  106. package/dist-cjs/runner/runCollection.js.map +1 -1
  107. package/dist-cjs/script/legacy.js +8 -0
  108. package/dist-cjs/script/legacy.js.map +1 -1
  109. package/package.json +8 -1
@@ -0,0 +1,431 @@
1
+ "use strict";
2
+ // MongoDB adapter. Ported from `pmanfrontend/electron/db/mongoAdapter.ts`.
3
+ // The only change vs. the desktop original is driver loading: instead of
4
+ // `createRequire`, the `mongodb` / `bson` packages are loaded lazily via
5
+ // `loadOptionalModule` so callman-core stays driver-agnostic.
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.executeMongoQuery = exports.testMongoConnection = void 0;
8
+ const lazy_js_1 = require("../lazy.js");
9
+ const unwrap = (mod) => (mod && mod.default && !mod.MongoClient ? mod.default : mod);
10
+ const loadMongoDriver = async () => {
11
+ try {
12
+ return unwrap(await (0, lazy_js_1.loadOptionalModule)("mongodb"));
13
+ }
14
+ catch {
15
+ throw new Error("MongoDB driver (`mongodb`) is not installed. Install `mongodb` to use Mongo connections.");
16
+ }
17
+ };
18
+ // `bson` is a soft dependency (only needed to render Decimal128 from a plain
19
+ // object). It ships with `mongodb`, but we load it independently and cache it
20
+ // synchronously so the recursive value normaliser can stay sync.
21
+ let cachedBson = null;
22
+ let bsonLoaded = false;
23
+ const ensureBson = async () => {
24
+ if (!bsonLoaded) {
25
+ cachedBson = unwrap(await (0, lazy_js_1.loadOptionalModuleOrNull)("bson"));
26
+ bsonLoaded = true;
27
+ }
28
+ return cachedBson;
29
+ };
30
+ const buildMongoUri = (connection) => {
31
+ if (connection.connectionString?.trim()) {
32
+ return connection.connectionString.trim();
33
+ }
34
+ const username = encodeURIComponent(connection.username);
35
+ const password = encodeURIComponent(connection.password);
36
+ const database = connection.database?.trim() || "admin";
37
+ return `mongodb://${username}:${password}@${connection.host.trim()}:${connection.port}/${database}`;
38
+ };
39
+ const getMongoDatabaseName = (connection) => {
40
+ if (connection.database?.trim()) {
41
+ return connection.database.trim();
42
+ }
43
+ if (connection.connectionString?.trim()) {
44
+ try {
45
+ const uri = connection.connectionString.trim();
46
+ const normalizedUri = uri.startsWith("mongodb+srv://")
47
+ ? uri.replace("mongodb+srv://", "https://")
48
+ : uri.replace("mongodb://", "http://");
49
+ const parsedUrl = new URL(normalizedUri);
50
+ const pathname = parsedUrl.pathname.replace(/^\/+/, "").trim();
51
+ if (pathname) {
52
+ return pathname;
53
+ }
54
+ }
55
+ catch {
56
+ return "admin";
57
+ }
58
+ }
59
+ return "admin";
60
+ };
61
+ const ensureMongoCommand = (value) => {
62
+ if (typeof value !== "object" || value === null || Array.isArray(value)) {
63
+ throw new Error("Mongo query must be a JSON object. Example: {\"collection\":\"users\",\"operation\":\"find\",\"filter\":{}}");
64
+ }
65
+ const command = value;
66
+ if (!command.collection?.trim()) {
67
+ throw new Error("Mongo query must include a collection name");
68
+ }
69
+ if (!command.operation?.trim()) {
70
+ throw new Error("Mongo query must include an operation");
71
+ }
72
+ return command;
73
+ };
74
+ const formatUuidFromBytes = (bytes) => {
75
+ const hex = Buffer.from(bytes).toString("hex");
76
+ return [
77
+ hex.slice(0, 8),
78
+ hex.slice(8, 12),
79
+ hex.slice(12, 16),
80
+ hex.slice(16, 20),
81
+ hex.slice(20, 32),
82
+ ].join("-");
83
+ };
84
+ const normalizeBinaryBytes = (bytes, preferUuid = false) => {
85
+ if (preferUuid && bytes.byteLength === 16) {
86
+ return formatUuidFromBytes(bytes);
87
+ }
88
+ return Buffer.from(bytes).toString("hex");
89
+ };
90
+ const toUint8Array = (value) => {
91
+ if (Buffer.isBuffer(value)) {
92
+ return value;
93
+ }
94
+ if (value instanceof Uint8Array) {
95
+ return value;
96
+ }
97
+ if (ArrayBuffer.isView(value)) {
98
+ return new Uint8Array(value.buffer, value.byteOffset, value.byteLength);
99
+ }
100
+ if (value instanceof ArrayBuffer) {
101
+ return new Uint8Array(value);
102
+ }
103
+ return null;
104
+ };
105
+ const toUint8ArrayFromIndexedObject = (value) => {
106
+ if (typeof value !== "object" || value === null || Array.isArray(value)) {
107
+ return null;
108
+ }
109
+ const entries = Object.entries(value);
110
+ if (entries.length === 0 ||
111
+ !entries.every(([key, entryValue]) => /^\d+$/.test(key) && typeof entryValue === "number" && Number.isInteger(entryValue))) {
112
+ return null;
113
+ }
114
+ return Uint8Array.from(entries
115
+ .sort(([leftKey], [rightKey]) => Number(leftKey) - Number(rightKey))
116
+ .map(([, byteValue]) => byteValue));
117
+ };
118
+ const isMongoObjectId = (value) => {
119
+ if (!value || typeof value !== "object") {
120
+ return false;
121
+ }
122
+ const candidate = value;
123
+ return (candidate._bsontype === "ObjectId" ||
124
+ typeof candidate.toHexString === "function");
125
+ };
126
+ const getMongoBsonType = (value) => {
127
+ if (!value || typeof value !== "object") {
128
+ return null;
129
+ }
130
+ return typeof value._bsontype === "string"
131
+ ? (value._bsontype)
132
+ : null;
133
+ };
134
+ const normalizeMongoNumericValue = (value) => {
135
+ const rawValue = typeof value.valueOf === "function" ? value.valueOf() : undefined;
136
+ if (typeof rawValue === "number") {
137
+ return rawValue;
138
+ }
139
+ if (typeof rawValue === "bigint") {
140
+ return rawValue <= BigInt(Number.MAX_SAFE_INTEGER) &&
141
+ rawValue >= BigInt(Number.MIN_SAFE_INTEGER)
142
+ ? Number(rawValue)
143
+ : rawValue.toString();
144
+ }
145
+ if (typeof rawValue === "string") {
146
+ const parsedNumber = Number(rawValue);
147
+ if (rawValue.trim() &&
148
+ Number.isFinite(parsedNumber) &&
149
+ Number.isSafeInteger(parsedNumber) &&
150
+ String(parsedNumber) === rawValue) {
151
+ return parsedNumber;
152
+ }
153
+ return rawValue;
154
+ }
155
+ return typeof value.toString === "function" ? value.toString() : String(value);
156
+ };
157
+ const normalizePlainDecimal128Object = (value) => {
158
+ if (!("bytes" in value)) {
159
+ return null;
160
+ }
161
+ const bytes = toUint8Array(value.bytes) ?? toUint8ArrayFromIndexedObject(value.bytes);
162
+ if (!bytes || bytes.byteLength !== 16) {
163
+ return null;
164
+ }
165
+ if (!cachedBson?.Decimal128) {
166
+ return null;
167
+ }
168
+ try {
169
+ return new cachedBson.Decimal128(bytes).toString();
170
+ }
171
+ catch {
172
+ return null;
173
+ }
174
+ };
175
+ const normalizeMongoSpecialObject = (value) => {
176
+ const bsonType = getMongoBsonType(value);
177
+ if (!bsonType) {
178
+ return normalizePlainDecimal128Object(value);
179
+ }
180
+ if (bsonType === "ObjectId") {
181
+ return isMongoObjectId(value) ? value.toHexString() : String(value);
182
+ }
183
+ if (bsonType === "Decimal128") {
184
+ return typeof value.toString === "function" ? value.toString() : String(value);
185
+ }
186
+ if (bsonType === "Long" || bsonType === "Int32" || bsonType === "Double") {
187
+ return normalizeMongoNumericValue(value);
188
+ }
189
+ if (bsonType === "Timestamp") {
190
+ const seconds = typeof value.getHighBits === "function"
191
+ ? value.getHighBits()
192
+ : null;
193
+ const increment = typeof value.getLowBits === "function"
194
+ ? value.getLowBits()
195
+ : null;
196
+ if (seconds !== null || increment !== null) {
197
+ return {
198
+ seconds,
199
+ increment,
200
+ };
201
+ }
202
+ return typeof value.toString === "function" ? value.toString() : String(value);
203
+ }
204
+ if (bsonType === "Binary" || bsonType === "UUID") {
205
+ const rawBytes = toUint8Array(value.buffer) ??
206
+ (typeof value.value === "function" ? toUint8Array(value.value()) : null);
207
+ const subtype = typeof value.sub_type === "number"
208
+ ? value.sub_type
209
+ : typeof value.subtype === "number"
210
+ ? value.subtype
211
+ : null;
212
+ if (rawBytes) {
213
+ return normalizeBinaryBytes(rawBytes, bsonType === "UUID" || subtype === 3 || subtype === 4);
214
+ }
215
+ return typeof value.toString === "function" ? value.toString() : String(value);
216
+ }
217
+ if (bsonType === "BSONRegExp") {
218
+ const pattern = typeof value.pattern === "string" ? value.pattern : "";
219
+ const options = typeof value.options === "string" ? value.options : "";
220
+ return `/${pattern}/${options}`;
221
+ }
222
+ if (bsonType === "DBRef") {
223
+ return {
224
+ $ref: typeof value.collection === "string" ? value.collection : "",
225
+ $id: normalizeMongoValue(value.oid ?? null),
226
+ ...(typeof value.db === "string" ? { $db: value.db } : {}),
227
+ };
228
+ }
229
+ if (bsonType === "Code") {
230
+ return {
231
+ code: typeof value.code === "string" ? value.code : String(value.code ?? ""),
232
+ ...(value.scope && typeof value.scope === "object"
233
+ ? { scope: normalizeMongoValue(value.scope) }
234
+ : {}),
235
+ };
236
+ }
237
+ if (bsonType === "MinKey" || bsonType === "MaxKey") {
238
+ return bsonType;
239
+ }
240
+ return null;
241
+ };
242
+ const normalizeMongoValue = (value) => {
243
+ if (value === null || value === undefined) {
244
+ return value;
245
+ }
246
+ if (typeof value === "string" ||
247
+ typeof value === "number" ||
248
+ typeof value === "boolean") {
249
+ return value;
250
+ }
251
+ if (value instanceof Date) {
252
+ return value.toISOString();
253
+ }
254
+ if (typeof value === "bigint") {
255
+ return value.toString();
256
+ }
257
+ if (isMongoObjectId(value)) {
258
+ return value.toHexString();
259
+ }
260
+ const binaryValue = toUint8Array(value);
261
+ if (binaryValue) {
262
+ return normalizeBinaryBytes(binaryValue);
263
+ }
264
+ if (Array.isArray(value)) {
265
+ return value.map(normalizeMongoValue);
266
+ }
267
+ if (typeof value === "object") {
268
+ const normalizedSpecialObject = normalizeMongoSpecialObject(value);
269
+ if (normalizedSpecialObject !== null) {
270
+ return normalizedSpecialObject;
271
+ }
272
+ return Object.fromEntries(Object.entries(value).map(([key, entryValue]) => [
273
+ key,
274
+ normalizeMongoValue(entryValue),
275
+ ]));
276
+ }
277
+ return String(value);
278
+ };
279
+ const normalizeMongoResult = (value) => {
280
+ if (Array.isArray(value)) {
281
+ const rows = value.map(normalizeMongoValue);
282
+ return {
283
+ rows,
284
+ rowCount: rows.length,
285
+ };
286
+ }
287
+ if (value === null || value === undefined) {
288
+ return {
289
+ rows: [],
290
+ rowCount: 0,
291
+ };
292
+ }
293
+ return {
294
+ rows: [normalizeMongoValue(value)],
295
+ rowCount: 1,
296
+ };
297
+ };
298
+ const OBJECTID_HEX_PATTERN = /^[a-f\d]{24}$/i;
299
+ const coerceMongoFilterValue = (value, ObjectId) => {
300
+ if (typeof value === "string" && OBJECTID_HEX_PATTERN.test(value)) {
301
+ try {
302
+ return new ObjectId(value);
303
+ }
304
+ catch {
305
+ return value;
306
+ }
307
+ }
308
+ if (Array.isArray(value)) {
309
+ return value.map((item) => coerceMongoFilterValue(item, ObjectId));
310
+ }
311
+ if (typeof value === "object" && value !== null) {
312
+ const obj = value;
313
+ // Support Extended JSON $oid syntax: { "$oid": "hexstring" }
314
+ if (typeof obj.$oid === "string") {
315
+ try {
316
+ return new ObjectId(obj.$oid);
317
+ }
318
+ catch {
319
+ return value;
320
+ }
321
+ }
322
+ return Object.fromEntries(Object.entries(obj).map(([k, v]) => [k, coerceMongoFilterValue(v, ObjectId)]));
323
+ }
324
+ return value;
325
+ };
326
+ const coerceMongoFilter = (filter, ObjectId) => {
327
+ if (!filter) {
328
+ return {};
329
+ }
330
+ return Object.fromEntries(Object.entries(filter).map(([key, value]) => [key, coerceMongoFilterValue(value, ObjectId)]));
331
+ };
332
+ const testMongoConnection = async (connection) => {
333
+ const { MongoClient } = await loadMongoDriver();
334
+ const client = new MongoClient(buildMongoUri(connection));
335
+ await client.connect();
336
+ try {
337
+ await client.db(getMongoDatabaseName(connection)).command({ ping: 1 });
338
+ }
339
+ finally {
340
+ await client.close();
341
+ }
342
+ };
343
+ exports.testMongoConnection = testMongoConnection;
344
+ const executeMongoQuery = async (connection, query) => {
345
+ const { MongoClient, ObjectId } = await loadMongoDriver();
346
+ await ensureBson();
347
+ const command = ensureMongoCommand(query);
348
+ const client = new MongoClient(buildMongoUri(connection));
349
+ await client.connect();
350
+ try {
351
+ const db = client.db(getMongoDatabaseName(connection));
352
+ const collection = db.collection(command.collection);
353
+ const options = command.options ?? {};
354
+ const filter = coerceMongoFilter(command.filter, ObjectId);
355
+ switch (command.operation) {
356
+ case "find": {
357
+ const cursor = collection.find(filter, {
358
+ ...options,
359
+ projection: command.projection,
360
+ sort: command.sort,
361
+ skip: command.skip,
362
+ limit: command.limit,
363
+ });
364
+ const rows = (await cursor.toArray()).map(normalizeMongoValue);
365
+ return {
366
+ rows,
367
+ rowCount: rows.length,
368
+ };
369
+ }
370
+ case "findOne": {
371
+ const row = await collection.findOne(filter, {
372
+ ...options,
373
+ projection: command.projection,
374
+ sort: command.sort,
375
+ skip: command.skip,
376
+ });
377
+ return normalizeMongoResult(row);
378
+ }
379
+ case "aggregate": {
380
+ const rows = (await collection.aggregate(command.pipeline ?? [], options).toArray()).map(normalizeMongoValue);
381
+ return {
382
+ rows,
383
+ rowCount: rows.length,
384
+ };
385
+ }
386
+ case "insertOne": {
387
+ const result = await collection.insertOne(command.document ?? {}, options);
388
+ return normalizeMongoResult({
389
+ acknowledged: result.acknowledged,
390
+ insertedId: result.insertedId,
391
+ });
392
+ }
393
+ case "updateOne": {
394
+ const result = await collection.updateOne(filter, command.update ?? {}, options);
395
+ return normalizeMongoResult({
396
+ acknowledged: result.acknowledged,
397
+ matchedCount: result.matchedCount,
398
+ modifiedCount: result.modifiedCount,
399
+ upsertedId: result.upsertedId ?? null,
400
+ });
401
+ }
402
+ case "deleteOne": {
403
+ const result = await collection.deleteOne(filter, options);
404
+ return normalizeMongoResult({
405
+ acknowledged: result.acknowledged,
406
+ deletedCount: result.deletedCount,
407
+ });
408
+ }
409
+ case "deleteMany": {
410
+ const result = await collection.deleteMany(filter, options);
411
+ return normalizeMongoResult({
412
+ acknowledged: result.acknowledged,
413
+ deletedCount: result.deletedCount,
414
+ });
415
+ }
416
+ case "countDocuments": {
417
+ const count = await collection.countDocuments(command.filter ?? {}, options);
418
+ return normalizeMongoResult({
419
+ count,
420
+ });
421
+ }
422
+ default:
423
+ throw new Error(`Unsupported Mongo operation: ${command.operation}`);
424
+ }
425
+ }
426
+ finally {
427
+ await client.close();
428
+ }
429
+ };
430
+ exports.executeMongoQuery = executeMongoQuery;
431
+ //# sourceMappingURL=mongoAdapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mongoAdapter.js","sourceRoot":"","sources":["../../../src/host/db/mongoAdapter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,73 @@
1
+ "use strict";
2
+ // MySQL adapter. Ported from `pmanfrontend/electron/db/mysqlAdapter.ts` with
3
+ // lazy `mysql2/promise` loading via `loadOptionalModule`.
4
+ Object.defineProperty(exports, "__esModule", { value: true });
5
+ exports.executeMysqlQuery = exports.testMysqlConnection = void 0;
6
+ const lazy_js_1 = require("../lazy.js");
7
+ const sqlNormalize_js_1 = require("./sqlNormalize.js");
8
+ const unwrap = (mod) => mod && mod.default && typeof mod.createConnection !== "function" ? mod.default : mod;
9
+ const loadMysqlDriver = async () => {
10
+ try {
11
+ return unwrap(await (0, lazy_js_1.loadOptionalModule)("mysql2/promise"));
12
+ }
13
+ catch {
14
+ throw new Error("MySQL driver (`mysql2`) is not installed. Install `mysql2` to use MySQL connections.");
15
+ }
16
+ };
17
+ const buildConnectionConfig = (connection) => {
18
+ const ssl = connection.ssl ? {} : undefined;
19
+ if (connection.connectionString?.trim()) {
20
+ return { uri: connection.connectionString.trim(), ssl, connectTimeout: 8000 };
21
+ }
22
+ return {
23
+ host: connection.host,
24
+ port: connection.port,
25
+ database: connection.database,
26
+ user: connection.username,
27
+ password: connection.password,
28
+ ssl,
29
+ connectTimeout: 8000,
30
+ };
31
+ };
32
+ const normalizeMysqlValue = (value) => JSON.parse(JSON.stringify(value, (_key, entry) => {
33
+ if (typeof entry === "bigint")
34
+ return entry.toString();
35
+ if (entry instanceof Date)
36
+ return entry.toISOString();
37
+ if (Buffer.isBuffer(entry) || entry instanceof Uint8Array) {
38
+ return Buffer.from(entry).toString("hex");
39
+ }
40
+ return entry;
41
+ }));
42
+ const testMysqlConnection = async (connection) => {
43
+ const mysql = await loadMysqlDriver();
44
+ const conn = await mysql.createConnection(buildConnectionConfig(connection));
45
+ try {
46
+ await conn.query("SELECT 1");
47
+ }
48
+ finally {
49
+ await conn.end();
50
+ }
51
+ };
52
+ exports.testMysqlConnection = testMysqlConnection;
53
+ const executeMysqlQuery = async (connection, query, params = []) => {
54
+ const mysql = await loadMysqlDriver();
55
+ const conn = await mysql.createConnection(buildConnectionConfig(connection));
56
+ try {
57
+ const finalQuery = (0, sqlNormalize_js_1.stripTrailingSqlTerminator)(query, "mysql");
58
+ const [result] = await conn.query(finalQuery, params);
59
+ if (Array.isArray(result)) {
60
+ const rows = result.map(normalizeMysqlValue);
61
+ return { rows, rowCount: rows.length };
62
+ }
63
+ const affected = result && typeof result.affectedRows === "number"
64
+ ? result.affectedRows
65
+ : 0;
66
+ return { rows: [], rowCount: affected };
67
+ }
68
+ finally {
69
+ await conn.end();
70
+ }
71
+ };
72
+ exports.executeMysqlQuery = executeMysqlQuery;
73
+ //# sourceMappingURL=mysqlAdapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mysqlAdapter.js","sourceRoot":"","sources":["../../../src/host/db/mysqlAdapter.ts"],"names":[],"mappings":"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"}