@carbonorm/carbonnode 6.0.6 → 6.0.7

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 (68) hide show
  1. package/dist/index.cjs.js +159 -28
  2. package/dist/index.cjs.js.map +1 -1
  3. package/dist/index.d.ts +3 -1
  4. package/dist/index.esm.js +156 -28
  5. package/dist/index.esm.js.map +1 -1
  6. package/dist/utils/colorSql.d.ts +1 -0
  7. package/dist/variables/getEnv.d.ts +10 -0
  8. package/dist/variables/isTest.d.ts +1 -1
  9. package/package.json +2 -1
  10. package/src/__tests__/sakila-db/C6.js +1 -1
  11. package/src/__tests__/sakila-db/C6.mysqldump.json +1 -1
  12. package/src/__tests__/sakila-db/C6.mysqldump.sql +1 -1
  13. package/src/__tests__/sakila-db/C6.ts +1 -1
  14. package/src/__tests__/sakila-db/sqlResponses/C6.actor.post.json +3 -3
  15. package/src/__tests__/sakila-db/sqlResponses/C6.actor.post.latest.json +3 -3
  16. package/src/__tests__/sakila-db/sqlResponses/C6.actor.put.json +1 -1
  17. package/src/__tests__/sakila-db/sqlResponses/C6.actor.put.lookup.json +3 -3
  18. package/src/__tests__/sakila-db/sqlResponses/C6.address.post.json +5 -5
  19. package/src/__tests__/sakila-db/sqlResponses/C6.address.post.latest.json +5 -5
  20. package/src/__tests__/sakila-db/sqlResponses/C6.address.put.json +1 -1
  21. package/src/__tests__/sakila-db/sqlResponses/C6.address.put.lookup.json +5 -5
  22. package/src/__tests__/sakila-db/sqlResponses/C6.category.post.json +2 -2
  23. package/src/__tests__/sakila-db/sqlResponses/C6.category.post.latest.json +2 -2
  24. package/src/__tests__/sakila-db/sqlResponses/C6.category.put.json +1 -1
  25. package/src/__tests__/sakila-db/sqlResponses/C6.category.put.lookup.json +2 -2
  26. package/src/__tests__/sakila-db/sqlResponses/C6.city.post.json +2 -2
  27. package/src/__tests__/sakila-db/sqlResponses/C6.city.post.latest.json +2 -2
  28. package/src/__tests__/sakila-db/sqlResponses/C6.city.put.json +1 -1
  29. package/src/__tests__/sakila-db/sqlResponses/C6.city.put.lookup.json +2 -2
  30. package/src/__tests__/sakila-db/sqlResponses/C6.country.post.json +2 -2
  31. package/src/__tests__/sakila-db/sqlResponses/C6.country.post.latest.json +2 -2
  32. package/src/__tests__/sakila-db/sqlResponses/C6.country.put.json +1 -1
  33. package/src/__tests__/sakila-db/sqlResponses/C6.country.put.lookup.json +2 -2
  34. package/src/__tests__/sakila-db/sqlResponses/C6.customer.post.json +5 -5
  35. package/src/__tests__/sakila-db/sqlResponses/C6.customer.post.latest.json +5 -5
  36. package/src/__tests__/sakila-db/sqlResponses/C6.customer.put.json +1 -1
  37. package/src/__tests__/sakila-db/sqlResponses/C6.customer.put.lookup.json +5 -5
  38. package/src/__tests__/sakila-db/sqlResponses/C6.film.post.json +2 -2
  39. package/src/__tests__/sakila-db/sqlResponses/C6.film.post.latest.json +2 -2
  40. package/src/__tests__/sakila-db/sqlResponses/C6.film.put.json +1 -1
  41. package/src/__tests__/sakila-db/sqlResponses/C6.film.put.lookup.json +2 -2
  42. package/src/__tests__/sakila-db/sqlResponses/C6.inventory.post.json +1 -1
  43. package/src/__tests__/sakila-db/sqlResponses/C6.inventory.post.latest.json +1 -1
  44. package/src/__tests__/sakila-db/sqlResponses/C6.inventory.put.json +1 -1
  45. package/src/__tests__/sakila-db/sqlResponses/C6.inventory.put.lookup.json +1 -1
  46. package/src/__tests__/sakila-db/sqlResponses/C6.language.post.json +2 -2
  47. package/src/__tests__/sakila-db/sqlResponses/C6.language.post.latest.json +2 -2
  48. package/src/__tests__/sakila-db/sqlResponses/C6.language.put.json +1 -1
  49. package/src/__tests__/sakila-db/sqlResponses/C6.language.put.lookup.json +2 -2
  50. package/src/__tests__/sakila-db/sqlResponses/C6.payment.post.json +2 -2
  51. package/src/__tests__/sakila-db/sqlResponses/C6.payment.post.latest.json +2 -2
  52. package/src/__tests__/sakila-db/sqlResponses/C6.payment.put.lookup.json +2 -2
  53. package/src/__tests__/sakila-db/sqlResponses/C6.rental.post.json +3 -3
  54. package/src/__tests__/sakila-db/sqlResponses/C6.rental.post.latest.json +3 -3
  55. package/src/__tests__/sakila-db/sqlResponses/C6.rental.put.json +1 -1
  56. package/src/__tests__/sakila-db/sqlResponses/C6.rental.put.lookup.json +3 -3
  57. package/src/__tests__/sqlBuilders.test.ts +21 -1
  58. package/src/api/restRequest.ts +9 -10
  59. package/src/executors/HttpExecutor.ts +1 -1
  60. package/src/index.ts +3 -1
  61. package/src/orm/queries/SelectQueryBuilder.ts +14 -1
  62. package/src/utils/colorSql.ts +112 -0
  63. package/src/variables/getEnv.ts +71 -0
  64. package/src/variables/isLocal.ts +2 -2
  65. package/src/variables/isTest.ts +4 -4
  66. package/src/variables/isVerbose.ts +2 -3
  67. package/dist/variables/getEnvVar.d.ts +0 -1
  68. package/src/variables/getEnvVar.ts +0 -15
package/dist/index.cjs.js CHANGED
@@ -434,24 +434,70 @@ var isNode = function () {
434
434
  return typeof process !== 'undefined' && !!((_a = process.versions) === null || _a === void 0 ? void 0 : _a.node);
435
435
  };
436
436
 
437
- function getEnvVar(key, fallback) {
438
- if (fallback === void 0) { fallback = ''; }
439
- // Vite-style injection
440
- // @ts-ignore
441
- if (typeof ({ url: (typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('index.cjs.js', document.baseURI).href)) }) !== 'undefined' && undefined && key in undefined) {
442
- // @ts-ignore
443
- return undefined[key];
437
+ /** biome-ignore-all lint/suspicious/noExplicitAny: working with global browser objects */
438
+ function getRuntimeEnv(key) {
439
+ var _a;
440
+ return typeof window !== "undefined" && ((_a = window.__ENV__) === null || _a === void 0 ? void 0 : _a[key]);
441
+ }
442
+ // Do not import anything here
443
+ function getViteEnv(key) {
444
+ var _a;
445
+ // @ts-expect-error
446
+ return typeof ({ url: (typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('index.cjs.js', document.baseURI).href)) }) !== "undefined" && ((_a = undefined) === null || _a === void 0 ? void 0 : _a[key]);
447
+ }
448
+ function getEnv(key, fallback) {
449
+ var _a;
450
+ try {
451
+ var viteEnv = getViteEnv(key);
452
+ if (viteEnv !== undefined)
453
+ return viteEnv;
444
454
  }
445
- // Node or SSR
446
- if (typeof process !== 'undefined' && process.env && key in process.env) {
455
+ catch (_b) { }
456
+ var runtimeEnv = getRuntimeEnv(key);
457
+ if (runtimeEnv !== undefined)
458
+ return runtimeEnv;
459
+ if (typeof process !== "undefined" && ((_a = process.env) === null || _a === void 0 ? void 0 : _a[key]) !== undefined) {
447
460
  return process.env[key];
448
461
  }
449
- return fallback;
462
+ if (fallback !== undefined)
463
+ return fallback;
464
+ throw new Error("Missing environment variable: ".concat(key));
465
+ }
466
+ function getEnvBool(key, fallback) {
467
+ if (fallback === void 0) { fallback = false; }
468
+ var raw = getEnv(key, fallback);
469
+ var v = String(raw).trim().toLowerCase();
470
+ return (v === "true" ||
471
+ v === "1" ||
472
+ v === "yes" ||
473
+ v === "y" ||
474
+ v === "on" ||
475
+ v === "enabled");
476
+ }
477
+ function getEnvDebug(key, fallback) {
478
+ var _a;
479
+ try {
480
+ var viteEnv = getViteEnv(key);
481
+ if (viteEnv !== undefined) {
482
+ return { key: key, value: viteEnv, source: "vite" };
483
+ }
484
+ }
485
+ catch (_b) { }
486
+ var runtimeEnv = getRuntimeEnv(key);
487
+ if (runtimeEnv !== undefined) {
488
+ return { key: key, value: runtimeEnv, source: "runtime" };
489
+ }
490
+ if (typeof process !== "undefined" && ((_a = process.env) === null || _a === void 0 ? void 0 : _a[key]) !== undefined) {
491
+ return { key: key, value: process.env[key], source: "process" };
492
+ }
493
+ if (fallback !== undefined) {
494
+ return { key: key, value: fallback, source: "fallback" };
495
+ }
496
+ return { key: key, value: undefined, source: "missing" };
450
497
  }
451
498
 
452
499
  function isVerbose () {
453
- var envVerbose = getEnvVar('VERBOSE') || getEnvVar('REACT_APP_VERBOSE') || getEnvVar('VITE_VERBOSE') || '';
454
- return ['true', '1', 'yes', 'on'].includes(envVerbose.toLowerCase());
500
+ return getEnvBool('VERBOSE', false) || getEnvBool('REACT_APP_VERBOSE', false) || getEnvBool('VITE_VERBOSE', false);
455
501
  }
456
502
 
457
503
  /**
@@ -467,22 +513,20 @@ function restRequest(configX) {
467
513
  case 0:
468
514
  config = typeof configX === "function" ? configX() : configX;
469
515
  (_a = config.verbose) !== null && _a !== void 0 ? _a : (config.verbose = isVerbose()); // Default to env-driven verbosity if not set
470
- if (!(isNode() && config.mysqlPool)) return [3 /*break*/, 2];
471
- if (config.verbose) {
472
- console.log("Using SQL Executor");
516
+ if (!config.mysqlPool && !config.axios) {
517
+ throw new Error("No execution method available: neither mysqlPool nor axios instance provided in config.");
473
518
  }
519
+ if (!config.mysqlPool) return [3 /*break*/, 2];
520
+ config.verbose && console.log("Using SQL Executor");
474
521
  return [4 /*yield*/, Promise.resolve().then(function () { return SqlExecutor$1; })];
475
522
  case 1:
476
523
  SqlExecutor = (_b.sent()).SqlExecutor;
477
524
  executor = new SqlExecutor(config, request);
478
525
  return [2 /*return*/, executor.execute()];
479
526
  case 2:
480
- if (config.verbose) {
481
- console.log("Using HTTP Executor", {
482
- isNode: isNode(),
483
- hasPool: !!config.mysqlPool
484
- });
485
- }
527
+ config.verbose && console.log("Using HTTP Executor", {
528
+ isNode: isNode(),
529
+ });
486
530
  return [4 /*yield*/, Promise.resolve().then(function () { return HttpExecutor$1; })];
487
531
  case 3:
488
532
  HttpExecutor = (_b.sent()).HttpExecutor;
@@ -573,13 +617,13 @@ var Executor = /** @class */ (function () {
573
617
  }());
574
618
 
575
619
  function isLocal () {
576
- return getEnvVar('NODE_ENV', '') === 'development';
620
+ return getEnv('NODE_ENV', '') === 'development';
577
621
  }
578
622
 
579
623
  function isTest () {
580
- return getEnvVar('JEST_WORKER_ID') || getEnvVar('NODE_ENV') === 'test'
581
- || getEnvVar('REACT_APP_TEST') === 'true' || getEnvVar('VITE_TEST') === 'true'
582
- || getEnvVar('MODE') === 'test' || getEnvVar('VITE_TEST_MODE') === 'true';
624
+ return getEnv('JEST_WORKER_ID', null) || getEnv('NODE_ENV', "") === 'test'
625
+ || getEnvBool('REACT_APP_TEST', false) || getEnvBool('VITE_TEST', false)
626
+ || getEnv('MODE', '') === 'test' || getEnvBool('VITE_TEST_MODE', false);
583
627
  }
584
628
 
585
629
  exports.eFetchDependencies = void 0;
@@ -1289,7 +1333,7 @@ var HttpExecutor = /** @class */ (function (_super) {
1289
1333
  console.error(throwableError);
1290
1334
  console.trace();
1291
1335
  console.groupEnd();
1292
- throw new Error(JSON.stringify(throwableError));
1336
+ throw throwableError;
1293
1337
  }
1294
1338
  return [2 /*return*/];
1295
1339
  }
@@ -2681,6 +2725,89 @@ var PaginationBuilder = /** @class */ (function (_super) {
2681
2725
  return PaginationBuilder;
2682
2726
  }(JoinBuilder));
2683
2727
 
2728
+ /* eslint-disable no-control-regex */
2729
+ var RESET = "\x1b[0m";
2730
+ var C$1 = {
2731
+ KEYWORD: "\x1b[94m", // blue
2732
+ LIMIT: "\x1b[93m", // yellow
2733
+ NUMBER: "\x1b[92m", // green
2734
+ DIM: "\x1b[90m", // gray
2735
+ };
2736
+ /* ---------- ANSI helpers ---------- */
2737
+ var ansi256 = function (n) { return "\u001B[38;5;".concat(n, "m"); };
2738
+ /* ---------- hashing ---------- */
2739
+ function hashString(str) {
2740
+ var hash = 0;
2741
+ for (var i = 0; i < str.length; i++) {
2742
+ hash = (hash * 31 + str.charCodeAt(i)) | 0;
2743
+ }
2744
+ return Math.abs(hash);
2745
+ }
2746
+ /* ---------- table color ---------- */
2747
+ function tableRGB(tableName) {
2748
+ var name = tableName.replace(/[`"]/g, "").toLowerCase();
2749
+ var hash = hashString(name);
2750
+ // Stable hue bucket by first letter
2751
+ var first = name.charCodeAt(0) || 97;
2752
+ var hueBase = (first - 97) % 6;
2753
+ var r = (hueBase + (hash % 3)) % 6;
2754
+ var g = (hash >> 3) % 6;
2755
+ var b = (hash >> 6) % 6;
2756
+ return [r, g, Math.max(2, b)]; // avoid muddy dark blues
2757
+ }
2758
+ function tableColor(table) {
2759
+ var _a = tableRGB(table), r = _a[0], g = _a[1], b = _a[2];
2760
+ return ansi256(16 + 36 * r + 6 * g + b);
2761
+ }
2762
+ /* ---------- column color (same hue, lighter) ---------- */
2763
+ function columnColorFromTable(table) {
2764
+ var _a = tableRGB(table), r = _a[0], g = _a[1], b = _a[2];
2765
+ // Lift toward white, preserve hue
2766
+ var lr = Math.min(5, r + 1);
2767
+ var lg = Math.min(5, g + 1);
2768
+ var lb = Math.min(5, b + 2);
2769
+ return ansi256(16 + 36 * lr + 6 * lg + lb);
2770
+ }
2771
+ /* ---------- bind collapsing ---------- */
2772
+ /**
2773
+ * ?, ?, ?, ?, ?, ? → ? ×6
2774
+ * triggers at 4+
2775
+ */
2776
+ function collapseBinds(sql) {
2777
+ return sql.replace(/(\?\s*,\s*){3,}\?/g, function (match) {
2778
+ var count = match.split("?").length - 1;
2779
+ return "".concat(C$1.DIM, "? \u00D7").concat(count).concat(RESET);
2780
+ });
2781
+ }
2782
+ /* ---------- main formatter ---------- */
2783
+ function colorSql(sql) {
2784
+ var s = sql.trim();
2785
+ /* 1️⃣ collapse bind noise */
2786
+ s = collapseBinds(s);
2787
+ /* 2️⃣ table.column coloring (core visual grouping) */
2788
+ s = s.replace(/\b(`?\w+`?)\.(\w+)\b/g, function (_, table, column) {
2789
+ return "".concat(tableColor(table)).concat(table).concat(RESET, ".") +
2790
+ "".concat(columnColorFromTable(table)).concat(column).concat(RESET);
2791
+ });
2792
+ /* 3️⃣ FROM / JOIN tables */
2793
+ s = s.replace(/\b(FROM|JOIN|UPDATE|INTO)\s+(`[^`]+`|\w+)/gi, function (_, kw, table) {
2794
+ return "".concat(C$1.KEYWORD).concat(kw).concat(RESET, " ").concat(tableColor(table)).concat(table).concat(RESET);
2795
+ });
2796
+ /* 4️⃣ SQL keywords */
2797
+ s = s.replace(/\b(SELECT|WHERE|AND|OR|ON|IN|BETWEEN|EXISTS|ORDER BY)\b/gi, "".concat(C$1.KEYWORD, "$1").concat(RESET));
2798
+ /* 5️⃣ LIMIT */
2799
+ s = s.replace(/\bLIMIT\s+(\d+)/gi, "".concat(C$1.LIMIT, "LIMIT").concat(RESET, " ").concat(C$1.NUMBER, "$1").concat(RESET));
2800
+ return s;
2801
+ }
2802
+
2803
+ var version = "6.0.7";
2804
+
2805
+ var C = {
2806
+ SSR: "\x1b[95m", // bright magenta
2807
+ HTTP: "\x1b[94m", // bright blue
2808
+ SQL: "\x1b[96m", // bright cyan (your SELECT teal)
2809
+ RESET: "\x1b[0m",
2810
+ };
2684
2811
  var SelectQueryBuilder = /** @class */ (function (_super) {
2685
2812
  tslib.__extends(SelectQueryBuilder, _super);
2686
2813
  function SelectQueryBuilder() {
@@ -2732,7 +2859,8 @@ var SelectQueryBuilder = /** @class */ (function (_super) {
2732
2859
  else if (!isSubSelect) {
2733
2860
  sql += " LIMIT 100";
2734
2861
  }
2735
- console.log("[SELECT] ".concat(sql.trim()));
2862
+ var preText = getEnvBool("SSR", false) ? "".concat(C.SSR, "[SSR]").concat(C.RESET, " ") : "".concat(C.HTTP, "[API]").concat(C.RESET, " ");
2863
+ console.log("[".concat(version, "] ").concat(preText).concat(C.SQL, "[SELECT]").concat(C.RESET, " ").concat(colorSql(sql)));
2736
2864
  return { sql: sql, params: params };
2737
2865
  };
2738
2866
  return SelectQueryBuilder;
@@ -3789,6 +3917,7 @@ exports.checkAllRequestsComplete = checkAllRequestsComplete;
3789
3917
  exports.checkCache = checkCache;
3790
3918
  exports.clearCache = clearCache;
3791
3919
  exports.collectSqlAllowListEntries = collectSqlAllowListEntries;
3920
+ exports.colorSql = colorSql;
3792
3921
  exports.compileSqlAllowList = compileSqlAllowList;
3793
3922
  exports.convertForRequestBody = convertForRequestBody;
3794
3923
  exports.convertHexIfBinary = convertHexIfBinary;
@@ -3798,7 +3927,9 @@ exports.distSphere = distSphere;
3798
3927
  exports.error = error;
3799
3928
  exports.extractSqlEntries = extractSqlEntries;
3800
3929
  exports.fieldEq = fieldEq;
3801
- exports.getEnvVar = getEnvVar;
3930
+ exports.getEnv = getEnv;
3931
+ exports.getEnvBool = getEnvBool;
3932
+ exports.getEnvDebug = getEnvDebug;
3802
3933
  exports.getPrimaryKeyTypes = getPrimaryKeyTypes;
3803
3934
  exports.group = group;
3804
3935
  exports.info = info;