@carbonorm/carbonnode 6.0.5 → 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 (69) hide show
  1. package/dist/index.cjs.js +169 -21
  2. package/dist/index.cjs.js.map +1 -1
  3. package/dist/index.d.ts +3 -1
  4. package/dist/index.esm.js +166 -21
  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 +10 -1
  59. package/src/executors/HttpExecutor.ts +1 -1
  60. package/src/executors/SqlExecutor.ts +22 -15
  61. package/src/index.ts +3 -1
  62. package/src/orm/queries/SelectQueryBuilder.ts +14 -1
  63. package/src/utils/colorSql.ts +112 -0
  64. package/src/variables/getEnv.ts +71 -0
  65. package/src/variables/isLocal.ts +2 -2
  66. package/src/variables/isTest.ts +4 -4
  67. package/src/variables/isVerbose.ts +2 -3
  68. package/dist/variables/getEnvVar.d.ts +0 -1
  69. 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,13 +513,21 @@ 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];
516
+ if (!config.mysqlPool && !config.axios) {
517
+ throw new Error("No execution method available: neither mysqlPool nor axios instance provided in config.");
518
+ }
519
+ if (!config.mysqlPool) return [3 /*break*/, 2];
520
+ config.verbose && console.log("Using SQL Executor");
471
521
  return [4 /*yield*/, Promise.resolve().then(function () { return SqlExecutor$1; })];
472
522
  case 1:
473
523
  SqlExecutor = (_b.sent()).SqlExecutor;
474
524
  executor = new SqlExecutor(config, request);
475
525
  return [2 /*return*/, executor.execute()];
476
- case 2: return [4 /*yield*/, Promise.resolve().then(function () { return HttpExecutor$1; })];
526
+ case 2:
527
+ config.verbose && console.log("Using HTTP Executor", {
528
+ isNode: isNode(),
529
+ });
530
+ return [4 /*yield*/, Promise.resolve().then(function () { return HttpExecutor$1; })];
477
531
  case 3:
478
532
  HttpExecutor = (_b.sent()).HttpExecutor;
479
533
  http = new HttpExecutor(config, request);
@@ -563,13 +617,13 @@ var Executor = /** @class */ (function () {
563
617
  }());
564
618
 
565
619
  function isLocal () {
566
- return getEnvVar('NODE_ENV', '') === 'development';
620
+ return getEnv('NODE_ENV', '') === 'development';
567
621
  }
568
622
 
569
623
  function isTest () {
570
- return getEnvVar('JEST_WORKER_ID') || getEnvVar('NODE_ENV') === 'test'
571
- || getEnvVar('REACT_APP_TEST') === 'true' || getEnvVar('VITE_TEST') === 'true'
572
- || 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);
573
627
  }
574
628
 
575
629
  exports.eFetchDependencies = void 0;
@@ -1279,7 +1333,7 @@ var HttpExecutor = /** @class */ (function (_super) {
1279
1333
  console.error(throwableError);
1280
1334
  console.trace();
1281
1335
  console.groupEnd();
1282
- throw new Error(JSON.stringify(throwableError));
1336
+ throw throwableError;
1283
1337
  }
1284
1338
  return [2 /*return*/];
1285
1339
  }
@@ -2671,6 +2725,89 @@ var PaginationBuilder = /** @class */ (function (_super) {
2671
2725
  return PaginationBuilder;
2672
2726
  }(JoinBuilder));
2673
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
+ };
2674
2811
  var SelectQueryBuilder = /** @class */ (function (_super) {
2675
2812
  tslib.__extends(SelectQueryBuilder, _super);
2676
2813
  function SelectQueryBuilder() {
@@ -2722,7 +2859,8 @@ var SelectQueryBuilder = /** @class */ (function (_super) {
2722
2859
  else if (!isSubSelect) {
2723
2860
  sql += " LIMIT 100";
2724
2861
  }
2725
- 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)));
2726
2864
  return { sql: sql, params: params };
2727
2865
  };
2728
2866
  return SelectQueryBuilder;
@@ -3127,6 +3265,13 @@ var SqlExecutor = /** @class */ (function (_super) {
3127
3265
  case 1: return [4 /*yield*/, this.runQuery()];
3128
3266
  case 2:
3129
3267
  rest = _b.sent();
3268
+ if (this.config.reactBootstrap) {
3269
+ this.config.reactBootstrap.updateRestfulObjectArrays({
3270
+ dataOrCallback: rest.rest,
3271
+ stateKey: this.config.restModel.TABLE_NAME,
3272
+ uniqueObjectId: this.config.restModel.PRIMARY_SHORT,
3273
+ });
3274
+ }
3130
3275
  return [2 /*return*/, rest];
3131
3276
  case 3: return [4 /*yield*/, this.runQuery()];
3132
3277
  case 4:
@@ -3772,6 +3917,7 @@ exports.checkAllRequestsComplete = checkAllRequestsComplete;
3772
3917
  exports.checkCache = checkCache;
3773
3918
  exports.clearCache = clearCache;
3774
3919
  exports.collectSqlAllowListEntries = collectSqlAllowListEntries;
3920
+ exports.colorSql = colorSql;
3775
3921
  exports.compileSqlAllowList = compileSqlAllowList;
3776
3922
  exports.convertForRequestBody = convertForRequestBody;
3777
3923
  exports.convertHexIfBinary = convertHexIfBinary;
@@ -3781,7 +3927,9 @@ exports.distSphere = distSphere;
3781
3927
  exports.error = error;
3782
3928
  exports.extractSqlEntries = extractSqlEntries;
3783
3929
  exports.fieldEq = fieldEq;
3784
- exports.getEnvVar = getEnvVar;
3930
+ exports.getEnv = getEnv;
3931
+ exports.getEnvBool = getEnvBool;
3932
+ exports.getEnvDebug = getEnvDebug;
3785
3933
  exports.getPrimaryKeyTypes = getPrimaryKeyTypes;
3786
3934
  exports.group = group;
3787
3935
  exports.info = info;