@dbcube/core 5.2.4 → 5.2.5

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/dist/index.cjs CHANGED
@@ -37,6 +37,7 @@ __export(index_exports, {
37
37
  DaemonClient: () => DaemonClient,
38
38
  DbConfig: () => DbConfig,
39
39
  Engine: () => Engine,
40
+ EnvLoader: () => EnvLoader,
40
41
  FileLogger: () => FileLogger,
41
42
  QueryEngine: () => QueryEngine,
42
43
  TableProcessor: () => TableProcessor,
@@ -46,6 +47,7 @@ module.exports = __toCommonJS(index_exports);
46
47
 
47
48
  // src/lib/Engine.ts
48
49
  var import_path4 = __toESM(require("path"));
50
+ var fs5 = __toESM(require("fs"));
49
51
 
50
52
  // src/lib/Arquitecture.ts
51
53
  var os = __toESM(require("os"));
@@ -193,7 +195,7 @@ var Downloader = class {
193
195
  */
194
196
  static async fetchLatestVersion(prefix) {
195
197
  const url = this.VERSION_URLS[prefix];
196
- return new Promise((resolve5, reject) => {
198
+ return new Promise((resolve6, reject) => {
197
199
  https.get(url, (response) => {
198
200
  let data = "";
199
201
  response.on("data", (chunk) => {
@@ -203,7 +205,7 @@ var Downloader = class {
203
205
  try {
204
206
  const versions = JSON.parse(data);
205
207
  if (versions && versions.length > 0) {
206
- resolve5(versions[0].version);
208
+ resolve6(versions[0].version);
207
209
  } else {
208
210
  reject(new Error("No versions found"));
209
211
  }
@@ -412,7 +414,7 @@ var Downloader = class {
412
414
  if (attempt < maxRetries && (errorMessage.includes("ECONNRESET") || errorMessage.includes("timeout") || errorMessage.includes("ETIMEDOUT") || errorMessage.includes("ENOTFOUND"))) {
413
415
  attempt++;
414
416
  console.log(`\u{1F504} Retrying ${binary.prefix}-engine (${attempt}/${maxRetries})...`);
415
- await new Promise((resolve5) => setTimeout(resolve5, 1e3 + Math.random() * 1e3));
417
+ await new Promise((resolve6) => setTimeout(resolve6, 1e3 + Math.random() * 1e3));
416
418
  } else {
417
419
  throw new Error(`Error downloading ${binary.prefix}: ${errorMessage}`);
418
420
  }
@@ -460,12 +462,12 @@ var Downloader = class {
460
462
  return `[${filledBar}${emptyBar}] ${percentage}`;
461
463
  }
462
464
  static downloadFileWithProgress(url, outputPath, prefix) {
463
- return new Promise((resolve5, reject) => {
465
+ return new Promise((resolve6, reject) => {
464
466
  const request = https.get(url, { timeout: 0 }, (response) => {
465
467
  if (response.statusCode === 302 || response.statusCode === 301) {
466
468
  const redirectUrl = response.headers.location;
467
469
  if (redirectUrl) {
468
- return this.downloadFileWithProgress(redirectUrl, outputPath, prefix).then(resolve5).catch(reject);
470
+ return this.downloadFileWithProgress(redirectUrl, outputPath, prefix).then(resolve6).catch(reject);
469
471
  }
470
472
  }
471
473
  if (response.statusCode !== 200) {
@@ -488,7 +490,7 @@ var Downloader = class {
488
490
  }
489
491
  });
490
492
  response.on("end", () => {
491
- file.end(() => resolve5());
493
+ file.end(() => resolve6());
492
494
  });
493
495
  response.on("error", (err) => {
494
496
  file.close();
@@ -520,7 +522,7 @@ var Downloader = class {
520
522
  this.mainSpinner.text = `\u{1F4E5} ${import_chalk.default.bold(binary)} - ${progressText}`;
521
523
  }
522
524
  static extractBinary(zipPath, outputPath, prefix) {
523
- return new Promise((resolve5, reject) => {
525
+ return new Promise((resolve6, reject) => {
524
526
  const outDir = path.dirname(outputPath);
525
527
  let extracted = 0;
526
528
  const pending = [];
@@ -555,7 +557,7 @@ var Downloader = class {
555
557
  if (extracted === 0) {
556
558
  reject(new Error(`No se encontr\xF3 archivo v\xE1lido en el ZIP para ${prefix}`));
557
559
  } else {
558
- resolve5();
560
+ resolve6();
559
561
  }
560
562
  }).catch((err) => {
561
563
  this.cleanupFile(zipPath);
@@ -746,6 +748,67 @@ var Config = class {
746
748
  }
747
749
  };
748
750
 
751
+ // src/lib/EnvLoader.ts
752
+ var fs3 = __toESM(require("fs"));
753
+ var path3 = __toESM(require("path"));
754
+ var EnvLoader = class _EnvLoader {
755
+ /**
756
+ * Carga el archivo .env indicado (o ./.env del cwd) en process.env.
757
+ * Silencioso si el archivo no existe. Devuelve true si cargó algo.
758
+ */
759
+ static load(envPath) {
760
+ const file = envPath || path3.resolve(process.cwd(), ".env");
761
+ if (!fs3.existsSync(file)) return false;
762
+ const proc = process;
763
+ if (typeof proc.loadEnvFile === "function") {
764
+ try {
765
+ proc.loadEnvFile(file);
766
+ return true;
767
+ } catch {
768
+ }
769
+ }
770
+ try {
771
+ const parsed = _EnvLoader.parse(fs3.readFileSync(file, "utf8"));
772
+ for (const [key, value] of Object.entries(parsed)) {
773
+ if (process.env[key] === void 0) {
774
+ process.env[key] = value;
775
+ }
776
+ }
777
+ return true;
778
+ } catch {
779
+ return false;
780
+ }
781
+ }
782
+ /**
783
+ * Parser mínimo de formato .env. Soporta:
784
+ * KEY=value · KEY="value con espacios" · KEY='literal' · export KEY=value
785
+ * comentarios con # · líneas en blanco · \n \t en comillas dobles.
786
+ */
787
+ static parse(content) {
788
+ const out = {};
789
+ for (const rawLine of content.split(/\r?\n/)) {
790
+ const line = rawLine.trim();
791
+ if (!line || line.startsWith("#")) continue;
792
+ const withoutExport = line.startsWith("export ") ? line.slice(7).trim() : line;
793
+ const eq = withoutExport.indexOf("=");
794
+ if (eq === -1) continue;
795
+ const key = withoutExport.slice(0, eq).trim();
796
+ if (!key) continue;
797
+ let value = withoutExport.slice(eq + 1).trim();
798
+ if (value.length >= 2 && value[0] === '"' && value[value.length - 1] === '"') {
799
+ value = value.slice(1, -1).replace(/\\n/g, "\n").replace(/\\t/g, " ").replace(/\\"/g, '"');
800
+ } else if (value.length >= 2 && value[0] === "'" && value[value.length - 1] === "'") {
801
+ value = value.slice(1, -1);
802
+ } else {
803
+ const hash = value.indexOf(" #");
804
+ if (hash !== -1) value = value.slice(0, hash).trim();
805
+ }
806
+ out[key] = value;
807
+ }
808
+ return out;
809
+ }
810
+ };
811
+
749
812
  // src/lib/Engine.ts
750
813
  var import_child_process2 = require("child_process");
751
814
  var import_module = require("module");
@@ -875,22 +938,22 @@ var DaemonClient = class _DaemonClient {
875
938
  child.unref();
876
939
  }
877
940
  tryConnect(port) {
878
- return new Promise((resolve5) => {
941
+ return new Promise((resolve6) => {
879
942
  const socket = import_net.default.createConnection({ host: "127.0.0.1", port }, async () => {
880
943
  socket.setNoDelay(true);
881
944
  this.attach(socket);
882
945
  try {
883
946
  const pong = await this.send({ action: "ping" }, 2e3);
884
- resolve5(pong.status === 200);
947
+ resolve6(pong.status === 200);
885
948
  } catch {
886
949
  this.detach();
887
- resolve5(false);
950
+ resolve6(false);
888
951
  }
889
952
  });
890
- socket.once("error", () => resolve5(false));
953
+ socket.once("error", () => resolve6(false));
891
954
  socket.setTimeout(3e3, () => {
892
955
  socket.destroy();
893
- resolve5(false);
956
+ resolve6(false);
894
957
  });
895
958
  });
896
959
  }
@@ -938,7 +1001,7 @@ var DaemonClient = class _DaemonClient {
938
1001
  * single socket, so pending requests resolve in send order.
939
1002
  */
940
1003
  send(payload, timeoutMs) {
941
- return new Promise((resolve5, reject) => {
1004
+ return new Promise((resolve6, reject) => {
942
1005
  if (!this.socket || this.socket.destroyed) {
943
1006
  reject(new Error("Daemon not connected"));
944
1007
  return;
@@ -949,7 +1012,7 @@ var DaemonClient = class _DaemonClient {
949
1012
  reject(new Error("Daemon request timeout"));
950
1013
  this.detach();
951
1014
  }, timeoutMs ?? this.requestTimeout);
952
- this.pending.push({ resolve: resolve5, reject, timer });
1015
+ this.pending.push({ resolve: resolve6, reject, timer });
953
1016
  this.socket.write(JSON.stringify(payload) + "\n");
954
1017
  });
955
1018
  }
@@ -1083,6 +1146,7 @@ var Engine = class {
1083
1146
  }
1084
1147
  setArguments() {
1085
1148
  let args = [];
1149
+ const motor = this.config.type === "postgres" ? "postgresql" : this.config.type;
1086
1150
  if (this.config.type == "sqlite") {
1087
1151
  args = [
1088
1152
  "--id",
@@ -1092,7 +1156,7 @@ var Engine = class {
1092
1156
  "--database",
1093
1157
  this.config.config.DATABASE + ".db",
1094
1158
  "--motor",
1095
- this.config.type
1159
+ motor
1096
1160
  ];
1097
1161
  } else {
1098
1162
  args = [
@@ -1107,7 +1171,7 @@ var Engine = class {
1107
1171
  "--port",
1108
1172
  String(this.config.config.PORT),
1109
1173
  "--motor",
1110
- this.config.type
1174
+ motor
1111
1175
  ];
1112
1176
  if (this.config.config.USER != null && this.config.config.USER !== "") {
1113
1177
  args.push("--user", this.config.config.USER);
@@ -1120,8 +1184,10 @@ var Engine = class {
1120
1184
  }
1121
1185
  setConfig(name) {
1122
1186
  const configInstance = new Config();
1187
+ EnvLoader.load();
1123
1188
  try {
1124
- const configFilePath = import_path4.default.resolve(process.cwd(), "dbcube.config.js");
1189
+ const cjsPath = import_path4.default.resolve(process.cwd(), "dbcube.config.cjs");
1190
+ const configFilePath = fs5.existsSync(cjsPath) ? cjsPath : import_path4.default.resolve(process.cwd(), "dbcube.config.js");
1125
1191
  const requireUrl = typeof __filename !== "undefined" ? __filename : process.cwd();
1126
1192
  const require2 = (0, import_module.createRequire)(requireUrl);
1127
1193
  if (require2.cache && require2.resolve) {
@@ -1153,7 +1219,7 @@ var Engine = class {
1153
1219
  if (!this.binary) {
1154
1220
  throw new Error("Binary not initialized");
1155
1221
  }
1156
- return new Promise((resolve5, reject) => {
1222
+ return new Promise((resolve6, reject) => {
1157
1223
  const child = (0, import_child_process2.spawn)(this.binary[binary], [...this.arguments, ...args]);
1158
1224
  let stdoutBuffer = "";
1159
1225
  let stderrBuffer = "";
@@ -1169,7 +1235,7 @@ var Engine = class {
1169
1235
  if (!isResolved) {
1170
1236
  isResolved = true;
1171
1237
  clearTimeout(timeoutId);
1172
- resolve5(response);
1238
+ resolve6(response);
1173
1239
  }
1174
1240
  };
1175
1241
  const tryParseLines = (buffer) => {
@@ -1235,10 +1301,11 @@ var Engine = class {
1235
1301
 
1236
1302
  // src/lib/QueryEngine.ts
1237
1303
  var import_path5 = __toESM(require("path"));
1304
+ var fs7 = __toESM(require("fs"));
1238
1305
 
1239
1306
  // src/lib/EmbeddedEngine.ts
1240
- var fs4 = __toESM(require("fs"));
1241
- var path5 = __toESM(require("path"));
1307
+ var fs6 = __toESM(require("fs"));
1308
+ var path6 = __toESM(require("path"));
1242
1309
  if (!process.env.UV_THREADPOOL_SIZE) {
1243
1310
  process.env.UV_THREADPOOL_SIZE = "16";
1244
1311
  }
@@ -1254,11 +1321,11 @@ function platTag() {
1254
1321
  }
1255
1322
  function findFile(name) {
1256
1323
  const candidates = [
1257
- path5.resolve(process.cwd(), ".dbcube", "bin", name),
1258
- path5.resolve(process.cwd(), "node_modules", ".dbcube", "bin", name)
1324
+ path6.resolve(process.cwd(), ".dbcube", "bin", name),
1325
+ path6.resolve(process.cwd(), "node_modules", ".dbcube", "bin", name)
1259
1326
  ];
1260
1327
  for (const c of candidates) {
1261
- if (fs4.existsSync(c)) return c;
1328
+ if (fs6.existsSync(c)) return c;
1262
1329
  }
1263
1330
  return null;
1264
1331
  }
@@ -1366,10 +1433,10 @@ function loadKoffiBackend() {
1366
1433
  return { status: 500, message: `Invalid embedded response: ${e.message}`, data: null };
1367
1434
  }
1368
1435
  };
1369
- const call = (fn, ...args) => new Promise((resolve5, reject) => {
1436
+ const call = (fn, ...args) => new Promise((resolve6, reject) => {
1370
1437
  fn.async(...args, (err, ptr) => {
1371
1438
  if (err) return reject(err);
1372
- resolve5(take(ptr));
1439
+ resolve6(take(ptr));
1373
1440
  });
1374
1441
  });
1375
1442
  return {
@@ -1523,12 +1590,12 @@ var QueryEngine = class {
1523
1590
  throw new Error("No available ports found in range 9900-9944");
1524
1591
  }
1525
1592
  isPortAvailable(port) {
1526
- return new Promise((resolve5) => {
1593
+ return new Promise((resolve6) => {
1527
1594
  const tester = net2.createServer();
1528
- tester.once("error", () => resolve5(false));
1595
+ tester.once("error", () => resolve6(false));
1529
1596
  tester.once("listening", () => {
1530
1597
  tester.close();
1531
- resolve5(true);
1598
+ resolve6(true);
1532
1599
  });
1533
1600
  tester.listen(port, "127.0.0.1");
1534
1601
  });
@@ -1540,6 +1607,7 @@ var QueryEngine = class {
1540
1607
  }
1541
1608
  setArguments() {
1542
1609
  let args = [];
1610
+ const motor = this.config.type === "postgres" ? "postgresql" : this.config.type;
1543
1611
  if (this.config.type == "sqlite") {
1544
1612
  args = [
1545
1613
  "--id",
@@ -1549,7 +1617,7 @@ var QueryEngine = class {
1549
1617
  "--database",
1550
1618
  this.config.config.DATABASE + ".db",
1551
1619
  "--motor",
1552
- this.config.type
1620
+ motor
1553
1621
  ];
1554
1622
  } else {
1555
1623
  args = [
@@ -1564,7 +1632,7 @@ var QueryEngine = class {
1564
1632
  "--port",
1565
1633
  String(this.config.config.PORT),
1566
1634
  "--motor",
1567
- this.config.type
1635
+ motor
1568
1636
  ];
1569
1637
  if (this.config.config.USER != null && this.config.config.USER !== "") {
1570
1638
  args.push("--user", this.config.config.USER);
@@ -1588,8 +1656,10 @@ var QueryEngine = class {
1588
1656
  }
1589
1657
  setConfig(name) {
1590
1658
  const configInstance = new Config();
1659
+ EnvLoader.load();
1591
1660
  try {
1592
- const configFilePath = import_path5.default.resolve(process.cwd(), "dbcube.config.js");
1661
+ const cjsPath = import_path5.default.resolve(process.cwd(), "dbcube.config.cjs");
1662
+ const configFilePath = fs7.existsSync(cjsPath) ? cjsPath : import_path5.default.resolve(process.cwd(), "dbcube.config.js");
1593
1663
  const requireUrl = typeof __filename !== "undefined" ? __filename : process.cwd();
1594
1664
  const require2 = (0, import_module2.createRequire)(requireUrl);
1595
1665
  if (require2.cache && require2.resolve) {
@@ -1761,7 +1831,7 @@ var QueryEngine = class {
1761
1831
  throw e;
1762
1832
  }
1763
1833
  }
1764
- return new Promise((resolve5) => pool.waiters.push(resolve5));
1834
+ return new Promise((resolve6) => pool.waiters.push(resolve6));
1765
1835
  }
1766
1836
  releaseSocket(socket, broken) {
1767
1837
  const pool = socketPools.get(this.connectionId);
@@ -1800,25 +1870,25 @@ var QueryEngine = class {
1800
1870
  throw new Error("TCP server failed to become ready within timeout");
1801
1871
  }
1802
1872
  async isServerResponding(port) {
1803
- return new Promise((resolve5) => {
1873
+ return new Promise((resolve6) => {
1804
1874
  const client = new net2.Socket();
1805
1875
  const timeout = setTimeout(() => {
1806
1876
  client.destroy();
1807
- resolve5(false);
1877
+ resolve6(false);
1808
1878
  }, 1e3);
1809
1879
  client.connect(port, "127.0.0.1", () => {
1810
1880
  clearTimeout(timeout);
1811
1881
  client.destroy();
1812
- resolve5(true);
1882
+ resolve6(true);
1813
1883
  });
1814
1884
  client.on("error", () => {
1815
1885
  clearTimeout(timeout);
1816
- resolve5(false);
1886
+ resolve6(false);
1817
1887
  });
1818
1888
  });
1819
1889
  }
1820
1890
  sleep(ms) {
1821
- return new Promise((resolve5) => setTimeout(resolve5, ms));
1891
+ return new Promise((resolve6) => setTimeout(resolve6, ms));
1822
1892
  }
1823
1893
  getCachedDML(dmlJson) {
1824
1894
  if (queryCache.has(dmlJson)) {
@@ -1838,7 +1908,7 @@ var QueryEngine = class {
1838
1908
  throw new Error("Binary not initialized");
1839
1909
  }
1840
1910
  this.tcpPort = await this.findAvailablePort(this.tcpPort);
1841
- return new Promise((resolve5, reject) => {
1911
+ return new Promise((resolve6, reject) => {
1842
1912
  const serverArgs = [...this.arguments, "--action", "server", "--tcp-port", this.tcpPort.toString()];
1843
1913
  const serverProcess = (0, import_child_process3.spawn)(this.binary["query_engine"], serverArgs);
1844
1914
  let started = false;
@@ -1858,7 +1928,7 @@ var QueryEngine = class {
1858
1928
  port: this.tcpPort,
1859
1929
  process: serverProcess
1860
1930
  });
1861
- resolve5();
1931
+ resolve6();
1862
1932
  }
1863
1933
  }
1864
1934
  });
@@ -1877,7 +1947,7 @@ var QueryEngine = class {
1877
1947
  });
1878
1948
  }
1879
1949
  async createNewConnection(port) {
1880
- return new Promise((resolve5, reject) => {
1950
+ return new Promise((resolve6, reject) => {
1881
1951
  const client = new net2.Socket();
1882
1952
  client.setNoDelay(true);
1883
1953
  client.setKeepAlive(true, 6e4);
@@ -1887,7 +1957,7 @@ var QueryEngine = class {
1887
1957
  }, 5e3);
1888
1958
  client.connect(port, "127.0.0.1", () => {
1889
1959
  clearTimeout(timeout);
1890
- resolve5(client);
1960
+ resolve6(client);
1891
1961
  });
1892
1962
  client.on("error", (error) => {
1893
1963
  clearTimeout(timeout);
@@ -1896,7 +1966,7 @@ var QueryEngine = class {
1896
1966
  });
1897
1967
  }
1898
1968
  async executeOnConnection(connection, command) {
1899
- return new Promise((resolve5, reject) => {
1969
+ return new Promise((resolve6, reject) => {
1900
1970
  let responseBuffer = "";
1901
1971
  let isResolved = false;
1902
1972
  const timeout = setTimeout(() => {
@@ -1921,7 +1991,7 @@ var QueryEngine = class {
1921
1991
  connection.removeListener("error", onError);
1922
1992
  try {
1923
1993
  const response = JSON.parse(line.slice(marker + "PROCESS_RESPONSE:".length));
1924
- resolve5({
1994
+ resolve6({
1925
1995
  status: response.status,
1926
1996
  message: response.message,
1927
1997
  data: response.data
@@ -1950,7 +2020,7 @@ var QueryEngine = class {
1950
2020
  if (!this.binary) {
1951
2021
  throw new Error("Binary not initialized");
1952
2022
  }
1953
- return new Promise((resolve5, reject) => {
2023
+ return new Promise((resolve6, reject) => {
1954
2024
  const child = (0, import_child_process3.spawn)(this.binary[binary], [...this.arguments, ...args]);
1955
2025
  let stdoutBuffer = "";
1956
2026
  let stderrBuffer = "";
@@ -1966,7 +2036,7 @@ var QueryEngine = class {
1966
2036
  if (!isResolved) {
1967
2037
  isResolved = true;
1968
2038
  clearTimeout(timeoutId);
1969
- resolve5(response);
2039
+ resolve6(response);
1970
2040
  }
1971
2041
  };
1972
2042
  const tryParseLines = (buffer) => {
@@ -2053,9 +2123,9 @@ var QueryEngine = class {
2053
2123
  };
2054
2124
 
2055
2125
  // src/lib/DbConfig.ts
2056
- var path7 = __toESM(require("path"));
2126
+ var path8 = __toESM(require("path"));
2057
2127
  var import_fs2 = __toESM(require("fs"));
2058
- var rootPath = path7.resolve(process.cwd(), ".dbcube");
2128
+ var rootPath = path8.resolve(process.cwd(), ".dbcube");
2059
2129
  var SQLite = class {
2060
2130
  database;
2061
2131
  engine = null;
@@ -2064,14 +2134,14 @@ var SQLite = class {
2064
2134
  }
2065
2135
  /** Ruta del archivo SQLite interno (.dbcube/<database>.db). */
2066
2136
  dbFilePath() {
2067
- return path7.join(rootPath, this.database + ".db");
2137
+ return path8.join(rootPath, this.database + ".db");
2068
2138
  }
2069
2139
  /** QueryEngine sqlite apuntando al archivo interno, con config explícito
2070
2140
  * (no vive en dbcube.config.js). La ruta relativa `.dbcube/<db>` deja que
2071
2141
  * QueryEngine le añada `.db` → `.dbcube/<db>.db`, relativo al CWD. */
2072
2142
  getEngine() {
2073
2143
  if (!this.engine) {
2074
- const relativeDb = path7.join(".dbcube", this.database).replace(/\\/g, "/");
2144
+ const relativeDb = path8.join(".dbcube", this.database).replace(/\\/g, "/");
2075
2145
  this.engine = new QueryEngine(`dbcube-internal-${this.database}`, 3e4, {
2076
2146
  type: "sqlite",
2077
2147
  config: { DATABASE: relativeDb }
@@ -2203,8 +2273,8 @@ var DbConfig = new SQLite({ DATABASE: "config" });
2203
2273
  var DbConfig_default = DbConfig;
2204
2274
 
2205
2275
  // src/lib/FileLogger.ts
2206
- var fs6 = __toESM(require("fs"));
2207
- var path8 = __toESM(require("path"));
2276
+ var fs9 = __toESM(require("fs"));
2277
+ var path9 = __toESM(require("path"));
2208
2278
  var import_events = require("events");
2209
2279
  var FileLogger = class _FileLogger extends import_events.EventEmitter {
2210
2280
  static watchers = /* @__PURE__ */ new Map();
@@ -2219,9 +2289,9 @@ var FileLogger = class _FileLogger extends import_events.EventEmitter {
2219
2289
  */
2220
2290
  static async write(filePath, message, level = "INFO", append = true) {
2221
2291
  try {
2222
- const dir = path8.dirname(filePath);
2223
- if (!fs6.existsSync(dir)) {
2224
- fs6.mkdirSync(dir, { recursive: true });
2292
+ const dir = path9.dirname(filePath);
2293
+ if (!fs9.existsSync(dir)) {
2294
+ fs9.mkdirSync(dir, { recursive: true });
2225
2295
  }
2226
2296
  const timestamp = (/* @__PURE__ */ new Date()).toISOString();
2227
2297
  const formattedMessage = `[${timestamp}] [${level}] ${message}
@@ -2231,9 +2301,9 @@ var FileLogger = class _FileLogger extends import_events.EventEmitter {
2231
2301
  return true;
2232
2302
  }
2233
2303
  if (append) {
2234
- await fs6.promises.appendFile(filePath, formattedMessage, "utf8");
2304
+ await fs9.promises.appendFile(filePath, formattedMessage, "utf8");
2235
2305
  } else {
2236
- await fs6.promises.writeFile(filePath, formattedMessage, "utf8");
2306
+ await fs9.promises.writeFile(filePath, formattedMessage, "utf8");
2237
2307
  }
2238
2308
  return true;
2239
2309
  } catch (error) {
@@ -2258,12 +2328,12 @@ var FileLogger = class _FileLogger extends import_events.EventEmitter {
2258
2328
  const buffer = _FileLogger.buffers.get(filePath);
2259
2329
  if (buffer && buffer.length > 0) {
2260
2330
  try {
2261
- const dir = path8.dirname(filePath);
2262
- if (!fs6.existsSync(dir)) {
2263
- fs6.mkdirSync(dir, { recursive: true });
2331
+ const dir = path9.dirname(filePath);
2332
+ if (!fs9.existsSync(dir)) {
2333
+ fs9.mkdirSync(dir, { recursive: true });
2264
2334
  }
2265
2335
  const content = buffer.join("");
2266
- await fs6.promises.appendFile(filePath, content, "utf8");
2336
+ await fs9.promises.appendFile(filePath, content, "utf8");
2267
2337
  _FileLogger.buffers.delete(filePath);
2268
2338
  return true;
2269
2339
  } catch (error) {
@@ -2399,10 +2469,10 @@ var FileLogger = class _FileLogger extends import_events.EventEmitter {
2399
2469
  // Si debe retornar como array de líneas
2400
2470
  } = options;
2401
2471
  try {
2402
- if (!fs6.existsSync(filePath)) {
2472
+ if (!fs9.existsSync(filePath)) {
2403
2473
  return asArray ? [] : "";
2404
2474
  }
2405
- let content = await fs6.promises.readFile(filePath, "utf8");
2475
+ let content = await fs9.promises.readFile(filePath, "utf8");
2406
2476
  if (asArray) {
2407
2477
  let linesArray = content.split("\n").filter((line) => line.trim() !== "");
2408
2478
  if (lines !== null) {
@@ -2445,15 +2515,15 @@ var FileLogger = class _FileLogger extends import_events.EventEmitter {
2445
2515
  } = options;
2446
2516
  let lastSize = 0;
2447
2517
  let lastPosition = 0;
2448
- if (fs6.existsSync(filePath)) {
2449
- const stats = fs6.statSync(filePath);
2518
+ if (fs9.existsSync(filePath)) {
2519
+ const stats = fs9.statSync(filePath);
2450
2520
  lastSize = stats.size;
2451
2521
  lastPosition = fromEnd ? stats.size : 0;
2452
2522
  }
2453
2523
  const listener = async (curr, prev) => {
2454
2524
  try {
2455
2525
  if (curr.size > lastSize) {
2456
- const stream = fs6.createReadStream(filePath, {
2526
+ const stream = fs9.createReadStream(filePath, {
2457
2527
  start: lastPosition,
2458
2528
  end: curr.size - 1,
2459
2529
  encoding: "utf8"
@@ -2481,7 +2551,7 @@ var FileLogger = class _FileLogger extends import_events.EventEmitter {
2481
2551
  console.error("Error en watcher:", error);
2482
2552
  }
2483
2553
  };
2484
- fs6.watchFile(filePath, { persistent, interval }, listener);
2554
+ fs9.watchFile(filePath, { persistent, interval }, listener);
2485
2555
  const watcherId = `${filePath}_${Date.now()}`;
2486
2556
  _FileLogger.watchers.set(watcherId, listener);
2487
2557
  return {
@@ -2489,7 +2559,7 @@ var FileLogger = class _FileLogger extends import_events.EventEmitter {
2489
2559
  stop: () => {
2490
2560
  const storedListener = _FileLogger.watchers.get(watcherId);
2491
2561
  if (storedListener) {
2492
- fs6.unwatchFile(filePath, storedListener);
2562
+ fs9.unwatchFile(filePath, storedListener);
2493
2563
  _FileLogger.watchers.delete(watcherId);
2494
2564
  }
2495
2565
  },
@@ -2502,7 +2572,7 @@ var FileLogger = class _FileLogger extends import_events.EventEmitter {
2502
2572
  static stopAllWatchers() {
2503
2573
  for (const [watcherId] of _FileLogger.watchers) {
2504
2574
  const filePath = watcherId.split("_")[0];
2505
- fs6.unwatchFile(filePath);
2575
+ fs9.unwatchFile(filePath);
2506
2576
  }
2507
2577
  _FileLogger.watchers.clear();
2508
2578
  }
@@ -2532,7 +2602,7 @@ var FileLogger = class _FileLogger extends import_events.EventEmitter {
2532
2602
  if (lines.length > maxLines) {
2533
2603
  const keepLines = lines.slice(-maxLines);
2534
2604
  const content = keepLines.join("\n") + "\n";
2535
- await fs6.promises.writeFile(filePath, content, "utf8");
2605
+ await fs9.promises.writeFile(filePath, content, "utf8");
2536
2606
  return lines.length - maxLines;
2537
2607
  }
2538
2608
  return 0;
@@ -2547,8 +2617,8 @@ var FileLogger = class _FileLogger extends import_events.EventEmitter {
2547
2617
  */
2548
2618
  static async deleteLogFile(filePath) {
2549
2619
  try {
2550
- if (fs6.existsSync(filePath)) {
2551
- await fs6.promises.unlink(filePath);
2620
+ if (fs9.existsSync(filePath)) {
2621
+ await fs9.promises.unlink(filePath);
2552
2622
  return true;
2553
2623
  }
2554
2624
  return false;
@@ -2964,6 +3034,7 @@ function convertToType(value, type2) {
2964
3034
  DaemonClient,
2965
3035
  DbConfig,
2966
3036
  Engine,
3037
+ EnvLoader,
2967
3038
  FileLogger,
2968
3039
  QueryEngine,
2969
3040
  TableProcessor,