@carbonorm/carbonnode 3.0.10 → 3.0.12
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/api/builders/sqlBuilder.d.ts +21 -3
- package/dist/api/executors/Executor.d.ts +1 -1
- package/dist/api/executors/SqlExecutor.d.ts +4 -3
- package/dist/index.cjs.js +312 -211
- package/dist/index.cjs.js.map +1 -1
- package/dist/index.esm.js +311 -208
- package/dist/index.esm.js.map +1 -1
- package/dist/variables/isLocal.d.ts +1 -2
- package/dist/variables/isNode.d.ts +1 -1
- package/dist/variables/isTest.d.ts +1 -2
- package/dist/variables/isVerbose.d.ts +1 -2
- package/package.json +1 -1
- package/src/api/builders/sqlBuilder.ts +199 -149
- package/src/api/executors/Executor.ts +2 -2
- package/src/api/executors/HttpExecutor.ts +10 -10
- package/src/api/executors/SqlExecutor.ts +71 -15
- package/src/api/restRequest.ts +1 -1
- package/src/api/utils/apiHelpers.ts +1 -1
- package/src/api/utils/cacheManager.ts +1 -1
- package/src/api/utils/logger.ts +2 -2
- package/src/api/utils/toastNotifier.ts +2 -2
- package/src/variables/isLocal.ts +3 -2
- package/src/variables/isNode.ts +10 -1
- package/src/variables/isTest.ts +5 -4
- package/src/variables/isVerbose.ts +4 -5
package/dist/index.cjs.js
CHANGED
|
@@ -311,8 +311,13 @@ function convertForRequestBody (restfulObject, tableName, C6, regexErrorHandler)
|
|
|
311
311
|
}, {});
|
|
312
312
|
}
|
|
313
313
|
|
|
314
|
-
var
|
|
315
|
-
var
|
|
314
|
+
var isNode = function () {
|
|
315
|
+
var _a;
|
|
316
|
+
console.log('Checking if running in Node.js environment...');
|
|
317
|
+
var isNodeEnv = typeof process !== 'undefined' && !!((_a = process.versions) === null || _a === void 0 ? void 0 : _a.node);
|
|
318
|
+
console.log("Is Node.js environment: ".concat(isNodeEnv));
|
|
319
|
+
return isNodeEnv;
|
|
320
|
+
};
|
|
316
321
|
|
|
317
322
|
/**
|
|
318
323
|
* Facade: routes API calls to SQL or HTTP executors based on runtime context.
|
|
@@ -325,7 +330,7 @@ function restRequest(configX) {
|
|
|
325
330
|
switch (_a.label) {
|
|
326
331
|
case 0:
|
|
327
332
|
config = typeof configX === "function" ? configX() : configX;
|
|
328
|
-
if (!(isNode && config.mysqlPool)) return [3 /*break*/, 2];
|
|
333
|
+
if (!(isNode() && config.mysqlPool)) return [3 /*break*/, 2];
|
|
329
334
|
return [4 /*yield*/, Promise.resolve().then(function () { return SqlExecutor$1; })];
|
|
330
335
|
case 1:
|
|
331
336
|
SqlExecutor = (_a.sent()).SqlExecutor;
|
|
@@ -363,165 +368,6 @@ function timeout(shouldContinueAfterTimeout, cb, timeoutMs) {
|
|
|
363
368
|
};
|
|
364
369
|
}
|
|
365
370
|
|
|
366
|
-
function buildBooleanJoinedConditions(set, andMode) {
|
|
367
|
-
if (andMode === void 0) { andMode = true; }
|
|
368
|
-
var booleanOperator = andMode ? 'AND' : 'OR';
|
|
369
|
-
var sql = '';
|
|
370
|
-
var OPERATORS = ['=', '!=', '<', '<=', '>', '>=', 'LIKE', 'NOT LIKE', 'IN', 'NOT IN', 'IS', 'IS NOT'];
|
|
371
|
-
var isAggregateArray = function (value) { return Array.isArray(value) && typeof value[0] === 'string' && OPERATORS.includes(value[0]); };
|
|
372
|
-
var isNumericKeyed = function (obj) { return Array.isArray(obj) && Object.keys(obj).every(function (k) { return /^\d+$/.test(k); }); };
|
|
373
|
-
// todo - we should be doing something with value no????
|
|
374
|
-
var addCondition = function (column, op, _value) {
|
|
375
|
-
var paramName = column.replace(/\W+/g, '_');
|
|
376
|
-
return "(".concat(column, " ").concat(op, " :").concat(paramName, ")");
|
|
377
|
-
};
|
|
378
|
-
if (isNumericKeyed(set)) {
|
|
379
|
-
switch (set.length) {
|
|
380
|
-
case 2:
|
|
381
|
-
sql += addCondition(set[0], '=', set[1]);
|
|
382
|
-
break;
|
|
383
|
-
case 3:
|
|
384
|
-
if (!OPERATORS.includes(set[1])) {
|
|
385
|
-
throw new Error("Invalid operator: ".concat(set[1]));
|
|
386
|
-
}
|
|
387
|
-
sql += addCondition(set[0], set[1], set[2]);
|
|
388
|
-
break;
|
|
389
|
-
default:
|
|
390
|
-
throw new Error("Invalid array condition: ".concat(JSON.stringify(set)));
|
|
391
|
-
}
|
|
392
|
-
}
|
|
393
|
-
else {
|
|
394
|
-
var parts = [];
|
|
395
|
-
for (var _i = 0, _a = Object.entries(set); _i < _a.length; _i++) {
|
|
396
|
-
var _b = _a[_i], key = _b[0], value = _b[1];
|
|
397
|
-
if (/^\d+$/.test(key)) {
|
|
398
|
-
parts.push(buildBooleanJoinedConditions(value, !andMode));
|
|
399
|
-
continue;
|
|
400
|
-
}
|
|
401
|
-
if (!Array.isArray(value) || isAggregateArray(value)) {
|
|
402
|
-
parts.push(addCondition(key, '='));
|
|
403
|
-
continue;
|
|
404
|
-
}
|
|
405
|
-
if (value.length === 2 && OPERATORS.includes(value[0])) {
|
|
406
|
-
parts.push(addCondition(key, value[0], value[1]));
|
|
407
|
-
}
|
|
408
|
-
else if (value.length === 1 && isAggregateArray(value[0])) {
|
|
409
|
-
parts.push(addCondition(key, '=', value[0]));
|
|
410
|
-
}
|
|
411
|
-
else {
|
|
412
|
-
throw new Error("Invalid condition for ".concat(key, ": ").concat(JSON.stringify(value)));
|
|
413
|
-
}
|
|
414
|
-
}
|
|
415
|
-
sql = parts.join(" ".concat(booleanOperator, " "));
|
|
416
|
-
}
|
|
417
|
-
return "(".concat(sql, ")");
|
|
418
|
-
}
|
|
419
|
-
function buildAggregateField(field) {
|
|
420
|
-
if (typeof field === 'string')
|
|
421
|
-
return field;
|
|
422
|
-
if (!Array.isArray(field))
|
|
423
|
-
throw new Error('Invalid SELECT entry: must be string or array');
|
|
424
|
-
var agg = field[0], args = field.slice(1);
|
|
425
|
-
switch (agg) {
|
|
426
|
-
case 'COUNT':
|
|
427
|
-
return "COUNT(".concat(args[0] || '*', ")");
|
|
428
|
-
case 'SUM':
|
|
429
|
-
case 'AVG':
|
|
430
|
-
case 'MIN':
|
|
431
|
-
case 'MAX':
|
|
432
|
-
return "".concat(agg, "(").concat(args[0], ")").concat(args[1] ? " AS ".concat(args[1]) : '');
|
|
433
|
-
case 'DISTINCT':
|
|
434
|
-
return "DISTINCT(".concat(args[0], ")").concat(args[1] ? " AS ".concat(args[1]) : '');
|
|
435
|
-
case 'GROUP_CONCAT': {
|
|
436
|
-
var col = args[0], alias = args[1], sortCol = args[2], sortType = args[3];
|
|
437
|
-
var order = sortCol ? " ORDER BY ".concat(sortCol, " ").concat(sortType || 'ASC') : '';
|
|
438
|
-
return "GROUP_CONCAT(DISTINCT ".concat(col).concat(order, " SEPARATOR ',')").concat(alias ? " AS ".concat(alias) : '');
|
|
439
|
-
}
|
|
440
|
-
case 'AS': {
|
|
441
|
-
var col = args[0], alias = args[1];
|
|
442
|
-
return "".concat(col, " AS ").concat(alias);
|
|
443
|
-
}
|
|
444
|
-
case 'CONVERT_TZ': {
|
|
445
|
-
var ts = args[0], fromTz = args[1], toTz = args[2];
|
|
446
|
-
return "CONVERT_TZ(".concat(ts, ", ").concat(fromTz, ", ").concat(toTz, ")");
|
|
447
|
-
}
|
|
448
|
-
case 'NOW':
|
|
449
|
-
return 'NOW()';
|
|
450
|
-
default:
|
|
451
|
-
throw new Error("Unsupported aggregate: ".concat(agg));
|
|
452
|
-
}
|
|
453
|
-
}
|
|
454
|
-
function buildSelectQuery(table, primary, args, isSubSelect) {
|
|
455
|
-
var _a, _b;
|
|
456
|
-
if (isSubSelect === void 0) { isSubSelect = false; }
|
|
457
|
-
var selectList = (_a = args === null || args === void 0 ? void 0 : args[C6Constants.SELECT]) !== null && _a !== void 0 ? _a : ['*'];
|
|
458
|
-
var selectFields = Array.isArray(selectList)
|
|
459
|
-
? selectList.map(function (f) { return buildAggregateField(f); }).join(', ')
|
|
460
|
-
: '*';
|
|
461
|
-
var sql = "SELECT ".concat(selectFields, " FROM `").concat(table, "`");
|
|
462
|
-
if (args === null || args === void 0 ? void 0 : args[C6Constants.JOIN]) {
|
|
463
|
-
var joins = args[C6Constants.JOIN];
|
|
464
|
-
for (var joinType in joins) {
|
|
465
|
-
var joinKeyword = joinType.replace('_', ' ').toUpperCase();
|
|
466
|
-
for (var joinTable in joins[joinType]) {
|
|
467
|
-
var onClause = buildBooleanJoinedConditions(joins[joinType][joinTable]);
|
|
468
|
-
sql += " ".concat(joinKeyword, " JOIN `").concat(joinTable, "` ON ").concat(onClause);
|
|
469
|
-
}
|
|
470
|
-
}
|
|
471
|
-
}
|
|
472
|
-
if (args === null || args === void 0 ? void 0 : args[C6Constants.WHERE]) {
|
|
473
|
-
sql += " WHERE ".concat(buildBooleanJoinedConditions(args[C6Constants.WHERE]));
|
|
474
|
-
}
|
|
475
|
-
if (args === null || args === void 0 ? void 0 : args[C6Constants.GROUP_BY]) {
|
|
476
|
-
var groupByFields = Array.isArray(args[C6Constants.GROUP_BY]) ? args[C6Constants.GROUP_BY].join(', ') : args[C6Constants.GROUP_BY];
|
|
477
|
-
sql += " GROUP BY ".concat(groupByFields);
|
|
478
|
-
}
|
|
479
|
-
if (args === null || args === void 0 ? void 0 : args[C6Constants.HAVING]) {
|
|
480
|
-
sql += " HAVING ".concat(buildBooleanJoinedConditions(args[C6Constants.HAVING]));
|
|
481
|
-
}
|
|
482
|
-
if (args === null || args === void 0 ? void 0 : args[C6Constants.PAGINATION]) {
|
|
483
|
-
var p = args[C6Constants.PAGINATION];
|
|
484
|
-
var limitClause = '';
|
|
485
|
-
if (p[C6Constants.ORDER]) {
|
|
486
|
-
var orderArray = Object.entries(p[C6Constants.ORDER]).map(function (_a) {
|
|
487
|
-
var col = _a[0], dir = _a[1];
|
|
488
|
-
if (!['ASC', 'DESC'].includes(String(dir).toUpperCase())) {
|
|
489
|
-
throw new Error("Invalid order direction: ".concat(dir));
|
|
490
|
-
}
|
|
491
|
-
return "".concat(col, " ").concat(String(dir).toUpperCase());
|
|
492
|
-
});
|
|
493
|
-
sql += " ORDER BY ".concat(orderArray.join(', '));
|
|
494
|
-
}
|
|
495
|
-
else if (primary) {
|
|
496
|
-
sql += " ORDER BY ".concat(primary, " DESC");
|
|
497
|
-
} /*else {
|
|
498
|
-
// todo - this is wrong
|
|
499
|
-
const primaryKey = C6Constants.TABLES['users'].PRIMARY_SHORT?.[0] ?? 'user_id';
|
|
500
|
-
sql += ` ORDER BY ${primaryKey} DESC`;
|
|
501
|
-
}*/
|
|
502
|
-
if (p[C6Constants.LIMIT] != null) {
|
|
503
|
-
var limit = parseInt(p[C6Constants.LIMIT], 10);
|
|
504
|
-
if (isNaN(limit) || limit < 0) {
|
|
505
|
-
throw new Error("Invalid LIMIT: ".concat(p[C6Constants.LIMIT]));
|
|
506
|
-
}
|
|
507
|
-
var page = parseInt((_b = p[C6Constants.PAGE]) !== null && _b !== void 0 ? _b : 1, 10);
|
|
508
|
-
if (isNaN(page) || page < 1) {
|
|
509
|
-
throw new Error("PAGE must be >= 1 (got ".concat(p[C6Constants.PAGE], ")"));
|
|
510
|
-
}
|
|
511
|
-
var offset = (page - 1) * limit;
|
|
512
|
-
limitClause += " LIMIT ".concat(offset, ", ").concat(limit);
|
|
513
|
-
}
|
|
514
|
-
sql += limitClause;
|
|
515
|
-
}
|
|
516
|
-
else if (!isSubSelect && primary) {
|
|
517
|
-
sql += " ORDER BY ".concat(primary, " ASC LIMIT 1");
|
|
518
|
-
}
|
|
519
|
-
else if (!isSubSelect && !primary) {
|
|
520
|
-
sql += " ORDER BY id ASC LIMIT 100"; // fallback default limit
|
|
521
|
-
}
|
|
522
|
-
return sql;
|
|
523
|
-
}
|
|
524
|
-
|
|
525
371
|
function getEnvVar(key, fallback) {
|
|
526
372
|
if (fallback === void 0) { fallback = ''; }
|
|
527
373
|
// Vite-style injection
|
|
@@ -537,8 +383,10 @@ function getEnvVar(key, fallback) {
|
|
|
537
383
|
return fallback;
|
|
538
384
|
}
|
|
539
385
|
|
|
540
|
-
|
|
541
|
-
var
|
|
386
|
+
function isVerbose () {
|
|
387
|
+
var envVerbose = getEnvVar('VERBOSE') || getEnvVar('REACT_APP_VERBOSE') || getEnvVar('VITE_VERBOSE') || '';
|
|
388
|
+
return ['true', '1', 'yes', 'on'].includes(envVerbose.toLowerCase());
|
|
389
|
+
}
|
|
542
390
|
|
|
543
391
|
var Executor = /** @class */ (function () {
|
|
544
392
|
function Executor(config, request) {
|
|
@@ -561,7 +409,7 @@ var Executor = /** @class */ (function () {
|
|
|
561
409
|
if (!(_i < _a.length)) return [3 /*break*/, 6];
|
|
562
410
|
_b = _a[_i], key = _b[0], fn = _b[1];
|
|
563
411
|
if (!(typeof fn === "function")) return [3 /*break*/, 5];
|
|
564
|
-
if (isVerbose || args.request.debug) {
|
|
412
|
+
if (isVerbose() || args.request.debug) {
|
|
565
413
|
console.groupCollapsed("[LIFECYCLE] ".concat(this.config.requestMethod, ".").concat(String(phase), ":").concat(key));
|
|
566
414
|
console.log("config:", args.config);
|
|
567
415
|
console.log("request:", args.request);
|
|
@@ -592,11 +440,220 @@ var Executor = /** @class */ (function () {
|
|
|
592
440
|
return Executor;
|
|
593
441
|
}());
|
|
594
442
|
|
|
595
|
-
var
|
|
443
|
+
var SqlBuilder = /** @class */ (function (_super) {
|
|
444
|
+
tslib.__extends(SqlBuilder, _super);
|
|
445
|
+
function SqlBuilder() {
|
|
446
|
+
return _super !== null && _super.apply(this, arguments) || this;
|
|
447
|
+
}
|
|
448
|
+
/** Generate nested WHERE/JOIN conditions with parameter binding */
|
|
449
|
+
SqlBuilder.prototype.buildBooleanJoinedConditions = function (set, andMode, params) {
|
|
450
|
+
if (andMode === void 0) { andMode = true; }
|
|
451
|
+
if (params === void 0) { params = []; }
|
|
452
|
+
var booleanOperator = andMode ? 'AND' : 'OR';
|
|
453
|
+
var OPERATORS = ['=', '!=', '<', '<=', '>', '>=', 'LIKE', 'NOT LIKE', 'IN', 'NOT IN', 'IS', 'IS NOT'];
|
|
454
|
+
var isAggregateArray = function (value) {
|
|
455
|
+
return Array.isArray(value) && typeof value[0] === 'string' && OPERATORS.includes(value[0]);
|
|
456
|
+
};
|
|
457
|
+
var isNumericKeyed = function (obj) {
|
|
458
|
+
return Array.isArray(obj) && Object.keys(obj).every(function (k) { return /^\d+$/.test(k); });
|
|
459
|
+
};
|
|
460
|
+
var addCondition = function (column, op, value) {
|
|
461
|
+
var clause;
|
|
462
|
+
/*if (Buffer.isBuffer(value)) { // TODO - I want this as a parameterized option, for now default to faster
|
|
463
|
+
params.push(value.toString('hex')); // Or use UNHEX(?) in SQL
|
|
464
|
+
clause = `(${column} = UNHEX(?))`;
|
|
465
|
+
} else {*/
|
|
466
|
+
params.push(value);
|
|
467
|
+
clause = "( ".concat(column, " ").concat(op, " ? )");
|
|
468
|
+
//}
|
|
469
|
+
isVerbose() && console.log("[WHERE] \u2795 ".concat(clause, " ->"), value);
|
|
470
|
+
return clause;
|
|
471
|
+
};
|
|
472
|
+
var sql;
|
|
473
|
+
if (isNumericKeyed(set)) {
|
|
474
|
+
isVerbose() && console.log("[WHERE] Numeric keyed condition:", set);
|
|
475
|
+
switch (set.length) {
|
|
476
|
+
case 2:
|
|
477
|
+
sql = addCondition(set[0], '=', set[1]);
|
|
478
|
+
break;
|
|
479
|
+
case 3:
|
|
480
|
+
if (!OPERATORS.includes(set[1]))
|
|
481
|
+
throw new Error("Invalid operator: ".concat(set[1]));
|
|
482
|
+
sql = addCondition(set[0], set[1], set[2]);
|
|
483
|
+
break;
|
|
484
|
+
default:
|
|
485
|
+
throw new Error("Invalid array condition: ".concat(JSON.stringify(set)));
|
|
486
|
+
}
|
|
487
|
+
}
|
|
488
|
+
else {
|
|
489
|
+
var parts = [];
|
|
490
|
+
for (var _i = 0, _a = Object.entries(set); _i < _a.length; _i++) {
|
|
491
|
+
var _b = _a[_i], key = _b[0], value = _b[1];
|
|
492
|
+
if (/^\d+$/.test(key)) {
|
|
493
|
+
parts.push(this.buildBooleanJoinedConditions(value, !andMode, params));
|
|
494
|
+
}
|
|
495
|
+
else if (!Array.isArray(value) || isAggregateArray(value)) {
|
|
496
|
+
parts.push(addCondition(key, '=', value));
|
|
497
|
+
}
|
|
498
|
+
else if (value.length === 2 && OPERATORS.includes(value[0])) {
|
|
499
|
+
parts.push(addCondition(key, value[0], value[1]));
|
|
500
|
+
}
|
|
501
|
+
else {
|
|
502
|
+
throw new Error("Invalid condition for ".concat(key, ": ").concat(JSON.stringify(value)));
|
|
503
|
+
}
|
|
504
|
+
}
|
|
505
|
+
sql = parts.join(" ".concat(booleanOperator, " "));
|
|
506
|
+
}
|
|
507
|
+
isVerbose() && console.log("[WHERE] Final: (".concat(sql, ")"));
|
|
508
|
+
return "(".concat(sql, ")");
|
|
509
|
+
};
|
|
510
|
+
/** Translate array or function calls into SQL expressions */
|
|
511
|
+
SqlBuilder.prototype.buildAggregateField = function (field) {
|
|
512
|
+
if (typeof field === 'string')
|
|
513
|
+
return field;
|
|
514
|
+
if (!Array.isArray(field))
|
|
515
|
+
throw new Error('Invalid SELECT entry');
|
|
516
|
+
var fn = field[0], args = field.slice(1);
|
|
517
|
+
var alias;
|
|
518
|
+
if (args.length >= 2 && args[args.length - 2] === 'AS') {
|
|
519
|
+
alias = String(args.pop());
|
|
520
|
+
args.pop();
|
|
521
|
+
}
|
|
522
|
+
var F = String(fn).toUpperCase();
|
|
523
|
+
var p = args.join(', ');
|
|
524
|
+
isVerbose() && console.log("[SELECT] ".concat(F, "(").concat(p, ")").concat(alias ? " AS ".concat(alias) : ''));
|
|
525
|
+
switch (F) {
|
|
526
|
+
case 'DATE_ADD':
|
|
527
|
+
return "DATE_ADD(".concat(args[0], ", ").concat(args[1], ")").concat(alias ? " AS ".concat(alias) : '');
|
|
528
|
+
case 'DATE_SUB':
|
|
529
|
+
return "DATE_SUB(".concat(args[0], ", ").concat(args[1], ")").concat(alias ? " AS ".concat(alias) : '');
|
|
530
|
+
case 'YEAR':
|
|
531
|
+
return "YEAR(".concat(args[0], ")").concat(alias ? " AS ".concat(alias) : '');
|
|
532
|
+
case 'MONTH':
|
|
533
|
+
return "MONTH(".concat(args[0], ")").concat(alias ? " AS ".concat(alias) : '');
|
|
534
|
+
case 'DAY':
|
|
535
|
+
return "DAY(".concat(args[0], ")").concat(alias ? " AS ".concat(alias) : '');
|
|
536
|
+
case 'ROUND':
|
|
537
|
+
case 'CEIL':
|
|
538
|
+
case 'FLOOR':
|
|
539
|
+
case 'ABS':
|
|
540
|
+
case 'SQRT':
|
|
541
|
+
return "".concat(F, "(").concat(p, ")").concat(alias ? " AS ".concat(alias) : '');
|
|
542
|
+
case 'ST_DISTANCE':
|
|
543
|
+
return "ST_Distance(".concat(p, ")").concat(alias ? " AS ".concat(alias) : '');
|
|
544
|
+
default:
|
|
545
|
+
if (/^[A-Z_]+$/.test(F))
|
|
546
|
+
return "".concat(F, "(").concat(p, ")").concat(alias ? " AS ".concat(alias) : '');
|
|
547
|
+
throw new Error("Unsupported function: ".concat(F));
|
|
548
|
+
}
|
|
549
|
+
};
|
|
550
|
+
/** Compose a parameterized SELECT query with optional JOIN/WHERE/GROUP/HAVING/PAGINATION */
|
|
551
|
+
SqlBuilder.prototype.buildSelectQuery = function (table, primary, args, isSubSelect) {
|
|
552
|
+
var _this = this;
|
|
553
|
+
var _a, _b, _c, _d;
|
|
554
|
+
if (isSubSelect === void 0) { isSubSelect = false; }
|
|
555
|
+
var model = this.config.C6.TABLES[table];
|
|
556
|
+
var params = [];
|
|
557
|
+
// SELECT
|
|
558
|
+
var selectList = (_a = args === null || args === void 0 ? void 0 : args[C6Constants.SELECT]) !== null && _a !== void 0 ? _a : ['*'];
|
|
559
|
+
var selectFields = Array.isArray(selectList)
|
|
560
|
+
? selectList.map(function (f) { return _this.buildAggregateField(f); }).join(', ')
|
|
561
|
+
: '*';
|
|
562
|
+
var sql = "SELECT ".concat(selectFields, " FROM ").concat(table);
|
|
563
|
+
isVerbose() && console.log("[SELECT]", selectFields);
|
|
564
|
+
// JOIN
|
|
565
|
+
if (args === null || args === void 0 ? void 0 : args[C6Constants.JOIN]) {
|
|
566
|
+
for (var jt in args[C6Constants.JOIN]) {
|
|
567
|
+
var jk = jt.replace('_', ' ').toUpperCase();
|
|
568
|
+
for (var jn in args[C6Constants.JOIN][jt]) {
|
|
569
|
+
var on = this.buildBooleanJoinedConditions(args[C6Constants.JOIN][jt][jn], true, params);
|
|
570
|
+
sql += " ".concat(jk, " JOIN `").concat(jn, "` ON ").concat(on);
|
|
571
|
+
isVerbose() && console.log("[JOIN]", jk, jn, on);
|
|
572
|
+
}
|
|
573
|
+
}
|
|
574
|
+
}
|
|
575
|
+
// WHERE
|
|
576
|
+
if (args === null || args === void 0 ? void 0 : args[C6Constants.WHERE]) {
|
|
577
|
+
var wc = this.buildBooleanJoinedConditions(args[C6Constants.WHERE], true, params);
|
|
578
|
+
// Trim leading and trailing parentheses if they fully wrap the condition
|
|
579
|
+
while (wc.startsWith('(') && wc.endsWith(')')) {
|
|
580
|
+
wc = wc.slice(1, -1).trim();
|
|
581
|
+
}
|
|
582
|
+
sql += " WHERE ".concat(wc);
|
|
583
|
+
}
|
|
584
|
+
// GROUP BY
|
|
585
|
+
if (args === null || args === void 0 ? void 0 : args[C6Constants.GROUP_BY]) {
|
|
586
|
+
var gb = Array.isArray(args[C6Constants.GROUP_BY])
|
|
587
|
+
? args[C6Constants.GROUP_BY].join(', ')
|
|
588
|
+
: args[C6Constants.GROUP_BY];
|
|
589
|
+
sql += " GROUP BY ".concat(gb);
|
|
590
|
+
isVerbose() && console.log("[GROUP BY]", gb);
|
|
591
|
+
}
|
|
592
|
+
// HAVING
|
|
593
|
+
if (args === null || args === void 0 ? void 0 : args[C6Constants.HAVING]) {
|
|
594
|
+
var hc = this.buildBooleanJoinedConditions(args[C6Constants.HAVING], true, params);
|
|
595
|
+
sql += " HAVING ".concat(hc);
|
|
596
|
+
}
|
|
597
|
+
// PAGINATION
|
|
598
|
+
if (args === null || args === void 0 ? void 0 : args[C6Constants.PAGINATION]) {
|
|
599
|
+
var p = args[C6Constants.PAGINATION];
|
|
600
|
+
if (p[C6Constants.ORDER]) {
|
|
601
|
+
var ord = Object.entries(p[C6Constants.ORDER]).map(function (_a) {
|
|
602
|
+
var c = _a[0], d = _a[1];
|
|
603
|
+
return "".concat(c, " ").concat(String(d).toUpperCase());
|
|
604
|
+
});
|
|
605
|
+
sql += " ORDER BY ".concat(ord.join(', '));
|
|
606
|
+
isVerbose() && console.log("[ORDER BY]", ord);
|
|
607
|
+
}
|
|
608
|
+
if (p[C6Constants.LIMIT] != null) {
|
|
609
|
+
var lim = parseInt(p[C6Constants.LIMIT], 10);
|
|
610
|
+
var pg = parseInt((_b = p[C6Constants.PAGE]) !== null && _b !== void 0 ? _b : 1, 10);
|
|
611
|
+
var off = (pg - 1) * lim;
|
|
612
|
+
sql += " LIMIT ".concat(off, ", ").concat(lim);
|
|
613
|
+
isVerbose() && console.log("[LIMIT]", off, lim);
|
|
614
|
+
}
|
|
615
|
+
}
|
|
616
|
+
// Fallback ORDER/LIMIT
|
|
617
|
+
else if (!isSubSelect) {
|
|
618
|
+
var ok = void 0;
|
|
619
|
+
if (primary)
|
|
620
|
+
ok = primary;
|
|
621
|
+
else if ((_c = model === null || model === void 0 ? void 0 : model.PRIMARY_SHORT) === null || _c === void 0 ? void 0 : _c[0])
|
|
622
|
+
ok = model.PRIMARY_SHORT[0];
|
|
623
|
+
else
|
|
624
|
+
for (var _i = 0, _e = ['created_at', 'updated_at']; _i < _e.length; _i++) {
|
|
625
|
+
var ts = _e[_i];
|
|
626
|
+
if ((_d = model === null || model === void 0 ? void 0 : model.COLUMNS) === null || _d === void 0 ? void 0 : _d["".concat(table, ".").concat(ts)]) {
|
|
627
|
+
ok = ts;
|
|
628
|
+
break;
|
|
629
|
+
}
|
|
630
|
+
}
|
|
631
|
+
if (ok) {
|
|
632
|
+
var dir = primary ? 'ASC' : 'DESC';
|
|
633
|
+
var lim = primary ? 1 : 100;
|
|
634
|
+
sql += " ORDER BY ".concat(ok, " ").concat(dir, " LIMIT ").concat(lim);
|
|
635
|
+
isVerbose() && console.log("[ORDER]", ok, dir, lim);
|
|
636
|
+
}
|
|
637
|
+
else {
|
|
638
|
+
sql += " LIMIT 100";
|
|
639
|
+
isVerbose() && console.warn("[ORDER] fallback LIMIT 100");
|
|
640
|
+
}
|
|
641
|
+
}
|
|
642
|
+
isVerbose() && console.log("[SQL]", sql, params);
|
|
643
|
+
return { sql: sql, params: params };
|
|
644
|
+
};
|
|
645
|
+
return SqlBuilder;
|
|
646
|
+
}(Executor));
|
|
647
|
+
|
|
648
|
+
function isLocal () {
|
|
649
|
+
return getEnvVar('NODE_ENV', '') === 'development';
|
|
650
|
+
}
|
|
596
651
|
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
|
|
652
|
+
function isTest () {
|
|
653
|
+
return getEnvVar('JEST_WORKER_ID') || getEnvVar('NODE_ENV') === 'test'
|
|
654
|
+
|| getEnvVar('REACT_APP_TEST') === 'true' || getEnvVar('VITE_TEST') === 'true'
|
|
655
|
+
|| getEnvVar('MODE') === 'test' || getEnvVar('VITE_TEST_MODE') === 'true';
|
|
656
|
+
}
|
|
600
657
|
|
|
601
658
|
exports.eFetchDependencies = void 0;
|
|
602
659
|
(function (eFetchDependencies) {
|
|
@@ -676,7 +733,7 @@ function removeInvalidKeys(request, c6Tables) {
|
|
|
676
733
|
intersection[key] = request[key];
|
|
677
734
|
}
|
|
678
735
|
});
|
|
679
|
-
isTest || console.log('intersection', intersection);
|
|
736
|
+
isTest() || console.log('intersection', intersection);
|
|
680
737
|
return intersection;
|
|
681
738
|
}
|
|
682
739
|
|
|
@@ -701,7 +758,7 @@ function checkCache(cacheResult, requestMethod, tableName, request) {
|
|
|
701
758
|
return cacheResult.request;
|
|
702
759
|
}
|
|
703
760
|
if (true === (cacheResult === null || cacheResult === void 0 ? void 0 : cacheResult.final)) {
|
|
704
|
-
if (false === isTest || true === isVerbose) {
|
|
761
|
+
if (false === isTest() || true === isVerbose()) {
|
|
705
762
|
console.groupCollapsed('%c API: Rest api cache (' + requestMethod + ' ' + tableName + ') has reached the final result. Returning undefined!', 'color: #cc0');
|
|
706
763
|
console.log('%c ' + requestMethod + ' ' + tableName, 'color: #cc0');
|
|
707
764
|
console.log('%c Request Data (note you may see the success and/or error prompt):', 'color: #cc0', request);
|
|
@@ -874,7 +931,7 @@ var HttpExecutor = /** @class */ (function (_super) {
|
|
|
874
931
|
if (undefined !== cacheResult) return [3 /*break*/, 1];
|
|
875
932
|
_p.label = 5;
|
|
876
933
|
case 5:
|
|
877
|
-
if (debug &&
|
|
934
|
+
if (debug && isLocal()) {
|
|
878
935
|
reactToastify.toast.warning("DEVS: Request in cache. (" + exports.apiRequestCache.findIndex(function (cache) { return cache.requestArgumentsSerialized === querySerialized; }) + "). Returning function to request page (" + query[C6.PAGINATION][C6.PAGE] + ")", toastOptionsDevs);
|
|
879
936
|
}
|
|
880
937
|
// @ts-ignore - this is an incorrect warning on TS, it's well typed
|
|
@@ -883,12 +940,12 @@ var HttpExecutor = /** @class */ (function (_super) {
|
|
|
883
940
|
cachingConfirmed = true;
|
|
884
941
|
return [3 /*break*/, 8];
|
|
885
942
|
case 7:
|
|
886
|
-
if (debug &&
|
|
943
|
+
if (debug && isLocal()) {
|
|
887
944
|
reactToastify.toast.info("DEVS: Ignore cache was set to true.", toastOptionsDevs);
|
|
888
945
|
}
|
|
889
946
|
_p.label = 8;
|
|
890
947
|
case 8:
|
|
891
|
-
if (debug &&
|
|
948
|
+
if (debug && isLocal()) {
|
|
892
949
|
reactToastify.toast.success("DEVS: Request not in cache." + (requestMethod === C6.GET ? "Page (" + query[C6.PAGINATION][C6.PAGE] + ")." : '') + " Logging cache 2 console.", toastOptionsDevs);
|
|
893
950
|
}
|
|
894
951
|
return [3 /*break*/, 12];
|
|
@@ -925,7 +982,7 @@ var HttpExecutor = /** @class */ (function (_super) {
|
|
|
925
982
|
if (undefined === query
|
|
926
983
|
|| null === query
|
|
927
984
|
|| false === primaryKey in query) {
|
|
928
|
-
if (true === debug &&
|
|
985
|
+
if (true === debug && isLocal()) {
|
|
929
986
|
reactToastify.toast.error('DEVS: The primary key (' + primaryKey + ') was not provided!!');
|
|
930
987
|
}
|
|
931
988
|
throw Error('You must provide the primary key (' + primaryKey + ') for table (' + operatingTable + '). Request (' + JSON.stringify(this.request, undefined, 4) + ') Query (' + JSON.stringify(query) + ')');
|
|
@@ -1014,7 +1071,7 @@ var HttpExecutor = /** @class */ (function (_super) {
|
|
|
1014
1071
|
case 0:
|
|
1015
1072
|
// noinspection SuspiciousTypeOfGuard
|
|
1016
1073
|
if (typeof response.data === 'string') {
|
|
1017
|
-
if (isTest) {
|
|
1074
|
+
if (isTest()) {
|
|
1018
1075
|
console.trace();
|
|
1019
1076
|
throw new Error('The response data was a string this typically indicated html was sent. Make sure all cookies (' + JSON.stringify(response.config.headers) + ') needed are present! (' + response.data + ')');
|
|
1020
1077
|
}
|
|
@@ -1034,7 +1091,7 @@ var HttpExecutor = /** @class */ (function (_super) {
|
|
|
1034
1091
|
// todo - this feels dumb now, but i digress
|
|
1035
1092
|
apiResponse = TestRestfulResponse(response, success, error);
|
|
1036
1093
|
if (false === apiResponse) {
|
|
1037
|
-
if (debug &&
|
|
1094
|
+
if (debug && isLocal()) {
|
|
1038
1095
|
reactToastify.toast.warning("DEVS: TestRestfulResponse returned false for (" + operatingTable + ").", toastOptionsDevs);
|
|
1039
1096
|
}
|
|
1040
1097
|
return [2 /*return*/, response];
|
|
@@ -1072,7 +1129,7 @@ var HttpExecutor = /** @class */ (function (_super) {
|
|
|
1072
1129
|
responseData_1 = response.data;
|
|
1073
1130
|
returnGetNextPageFunction = 1 !== ((_d = query === null || query === void 0 ? void 0 : query[C6.PAGINATION]) === null || _d === void 0 ? void 0 : _d[C6.LIMIT]) &&
|
|
1074
1131
|
((_e = query === null || query === void 0 ? void 0 : query[C6.PAGINATION]) === null || _e === void 0 ? void 0 : _e[C6.LIMIT]) === responseData_1.rest.length;
|
|
1075
|
-
if (false === isTest || true === isVerbose) {
|
|
1132
|
+
if (false === isTest() || true === isVerbose()) {
|
|
1076
1133
|
console.groupCollapsed('%c API: Response (' + requestMethod + ' ' + tableName + ') returned length (' + ((_f = responseData_1.rest) === null || _f === void 0 ? void 0 : _f.length) + ') of possible (' + ((_g = query === null || query === void 0 ? void 0 : query[C6.PAGINATION]) === null || _g === void 0 ? void 0 : _g[C6.LIMIT]) + ') limit!', 'color: #0c0');
|
|
1077
1134
|
console.log('%c ' + requestMethod + ' ' + tableName, 'color: #0c0');
|
|
1078
1135
|
console.log('%c Request Data (note you may see the success and/or error prompt):', 'color: #0c0', this.request);
|
|
@@ -1083,7 +1140,7 @@ var HttpExecutor = /** @class */ (function (_super) {
|
|
|
1083
1140
|
}
|
|
1084
1141
|
if (false === returnGetNextPageFunction
|
|
1085
1142
|
&& true === debug
|
|
1086
|
-
&&
|
|
1143
|
+
&& isLocal()) {
|
|
1087
1144
|
reactToastify.toast.success("DEVS: Response returned length (" + ((_j = responseData_1.rest) === null || _j === void 0 ? void 0 : _j.length) + ") less than limit (" + ((_k = query === null || query === void 0 ? void 0 : query[C6.PAGINATION]) === null || _k === void 0 ? void 0 : _k[C6.LIMIT]) + ").", toastOptionsDevs);
|
|
1088
1145
|
}
|
|
1089
1146
|
if (!(fetchDependencies
|
|
@@ -1268,7 +1325,7 @@ var HttpExecutor = /** @class */ (function (_super) {
|
|
|
1268
1325
|
}); });
|
|
1269
1326
|
_l.label = 6;
|
|
1270
1327
|
case 6:
|
|
1271
|
-
if (debug &&
|
|
1328
|
+
if (debug && isLocal()) {
|
|
1272
1329
|
reactToastify.toast.success("DEVS: (" + requestMethod + ") request complete.", toastOptionsDevs);
|
|
1273
1330
|
}
|
|
1274
1331
|
return [2 /*return*/, response];
|
|
@@ -1277,7 +1334,7 @@ var HttpExecutor = /** @class */ (function (_super) {
|
|
|
1277
1334
|
}); }).then(function (response) { return response.data; })];
|
|
1278
1335
|
}
|
|
1279
1336
|
catch (throwableError) {
|
|
1280
|
-
if (isTest) {
|
|
1337
|
+
if (isTest()) {
|
|
1281
1338
|
throw new Error(JSON.stringify(throwableError));
|
|
1282
1339
|
}
|
|
1283
1340
|
console.groupCollapsed('%c API: An error occurred in the try catch block. returning null!', 'color: #ff0000');
|
|
@@ -1313,13 +1370,16 @@ var SqlExecutor = /** @class */ (function (_super) {
|
|
|
1313
1370
|
}
|
|
1314
1371
|
SqlExecutor.prototype.execute = function () {
|
|
1315
1372
|
return tslib.__awaiter(this, void 0, void 0, function () {
|
|
1316
|
-
var
|
|
1317
|
-
return tslib.__generator(this, function (
|
|
1318
|
-
switch (
|
|
1373
|
+
var TABLE_NAME, method, _a, rest, result, created, result, updated, result, deleted;
|
|
1374
|
+
return tslib.__generator(this, function (_b) {
|
|
1375
|
+
switch (_b.label) {
|
|
1319
1376
|
case 0:
|
|
1320
|
-
|
|
1321
|
-
|
|
1322
|
-
|
|
1377
|
+
TABLE_NAME = this.config.restModel.TABLE_NAME;
|
|
1378
|
+
method = this.config.requestMethod;
|
|
1379
|
+
console.log("[SQL EXECUTOR] \u25B6\uFE0F Executing ".concat(method, " on table \"").concat(TABLE_NAME, "\""));
|
|
1380
|
+
console.log("[SQL EXECUTOR] \uD83E\uDDFE Request payload:", this.request);
|
|
1381
|
+
_a = method;
|
|
1382
|
+
switch (_a) {
|
|
1323
1383
|
case 'GET': return [3 /*break*/, 1];
|
|
1324
1384
|
case 'POST': return [3 /*break*/, 3];
|
|
1325
1385
|
case 'PUT': return [3 /*break*/, 5];
|
|
@@ -1328,24 +1388,36 @@ var SqlExecutor = /** @class */ (function (_super) {
|
|
|
1328
1388
|
return [3 /*break*/, 9];
|
|
1329
1389
|
case 1: return [4 /*yield*/, this.select(TABLE_NAME, undefined, this.request)];
|
|
1330
1390
|
case 2:
|
|
1331
|
-
rest =
|
|
1391
|
+
rest = _b.sent();
|
|
1392
|
+
console.log("[SQL EXECUTOR] \u2705 GET result:", rest);
|
|
1332
1393
|
return [2 /*return*/, { rest: rest }];
|
|
1333
1394
|
case 3: return [4 /*yield*/, this.insert(TABLE_NAME, this.request)];
|
|
1334
1395
|
case 4:
|
|
1335
|
-
result =
|
|
1396
|
+
result = _b.sent();
|
|
1397
|
+
console.log("[SQL EXECUTOR] \u2705 POST result:", result);
|
|
1336
1398
|
created = { rest: result, created: true };
|
|
1337
1399
|
return [2 /*return*/, created];
|
|
1338
|
-
case 5: return [4 /*yield*/, this.update(TABLE_NAME,
|
|
1400
|
+
case 5: return [4 /*yield*/, this.update(TABLE_NAME, [], this.request)];
|
|
1339
1401
|
case 6:
|
|
1340
|
-
result =
|
|
1341
|
-
|
|
1402
|
+
result = _b.sent();
|
|
1403
|
+
console.log("[SQL EXECUTOR] \u2705 PUT result:", result);
|
|
1404
|
+
updated = {
|
|
1405
|
+
rest: result,
|
|
1406
|
+
updated: true,
|
|
1407
|
+
rowCount: result.affectedRows
|
|
1408
|
+
};
|
|
1342
1409
|
return [2 /*return*/, updated];
|
|
1343
|
-
case 7: return [4 /*yield*/, this.delete(TABLE_NAME,
|
|
1410
|
+
case 7: return [4 /*yield*/, this.delete(TABLE_NAME, [], this.request)];
|
|
1344
1411
|
case 8:
|
|
1345
|
-
result =
|
|
1346
|
-
|
|
1412
|
+
result = _b.sent();
|
|
1413
|
+
console.log("[SQL EXECUTOR] \u2705 DELETE result:", result);
|
|
1414
|
+
deleted = {
|
|
1415
|
+
rest: result,
|
|
1416
|
+
deleted: true,
|
|
1417
|
+
rowCount: result.affectedRows
|
|
1418
|
+
};
|
|
1347
1419
|
return [2 /*return*/, deleted];
|
|
1348
|
-
case 9: throw new Error("Unsupported request method: ".concat(
|
|
1420
|
+
case 9: throw new Error("Unsupported request method: ".concat(method));
|
|
1349
1421
|
}
|
|
1350
1422
|
});
|
|
1351
1423
|
});
|
|
@@ -1355,15 +1427,19 @@ var SqlExecutor = /** @class */ (function (_super) {
|
|
|
1355
1427
|
var conn;
|
|
1356
1428
|
return tslib.__generator(this, function (_a) {
|
|
1357
1429
|
switch (_a.label) {
|
|
1358
|
-
case 0:
|
|
1430
|
+
case 0:
|
|
1431
|
+
console.log("[SQL EXECUTOR] \uD83D\uDCE1 Getting DB connection");
|
|
1432
|
+
return [4 /*yield*/, this.config.mysqlPool.getConnection()];
|
|
1359
1433
|
case 1:
|
|
1360
1434
|
conn = _a.sent();
|
|
1361
1435
|
_a.label = 2;
|
|
1362
1436
|
case 2:
|
|
1363
1437
|
_a.trys.push([2, , 4, 5]);
|
|
1438
|
+
console.log("[SQL EXECUTOR] \u2705 Connection acquired");
|
|
1364
1439
|
return [4 /*yield*/, cb(conn)];
|
|
1365
1440
|
case 3: return [2 /*return*/, _a.sent()];
|
|
1366
1441
|
case 4:
|
|
1442
|
+
console.log("[SQL EXECUTOR] \uD83D\uDD0C Releasing DB connection");
|
|
1367
1443
|
conn.release();
|
|
1368
1444
|
return [7 /*endfinally*/];
|
|
1369
1445
|
case 5: return [2 /*return*/];
|
|
@@ -1373,21 +1449,23 @@ var SqlExecutor = /** @class */ (function (_super) {
|
|
|
1373
1449
|
};
|
|
1374
1450
|
SqlExecutor.prototype.select = function (table, primary, args) {
|
|
1375
1451
|
return tslib.__awaiter(this, void 0, void 0, function () {
|
|
1376
|
-
var sql;
|
|
1452
|
+
var sql, formatted;
|
|
1377
1453
|
var _this = this;
|
|
1378
1454
|
return tslib.__generator(this, function (_a) {
|
|
1379
1455
|
switch (_a.label) {
|
|
1380
1456
|
case 0:
|
|
1381
|
-
sql = buildSelectQuery(table, primary, args);
|
|
1457
|
+
sql = this.buildSelectQuery(table, primary, args);
|
|
1458
|
+
console.log("[SQL EXECUTOR] \uD83E\uDDE0 Generated SELECT SQL:", sql);
|
|
1459
|
+
formatted = this.formatSQLWithParams(sql.sql, sql.params);
|
|
1460
|
+
console.log("[SQL EXECUTOR] \uD83E\uDDE0 Formatted SELECT SQL:", formatted);
|
|
1382
1461
|
return [4 /*yield*/, this.withConnection(function (conn) { return tslib.__awaiter(_this, void 0, void 0, function () {
|
|
1383
1462
|
var rows;
|
|
1384
1463
|
return tslib.__generator(this, function (_a) {
|
|
1385
1464
|
switch (_a.label) {
|
|
1386
|
-
case 0:
|
|
1387
|
-
console.log(sql);
|
|
1388
|
-
return [4 /*yield*/, conn.query(sql)];
|
|
1465
|
+
case 0: return [4 /*yield*/, conn.query(sql.sql, sql.params)];
|
|
1389
1466
|
case 1:
|
|
1390
1467
|
rows = (_a.sent())[0];
|
|
1468
|
+
console.log("[SQL EXECUTOR] \uD83D\uDCE6 Rows fetched:", rows);
|
|
1391
1469
|
return [2 /*return*/, rows];
|
|
1392
1470
|
}
|
|
1393
1471
|
});
|
|
@@ -1408,6 +1486,8 @@ var SqlExecutor = /** @class */ (function (_super) {
|
|
|
1408
1486
|
values = keys.map(function (k) { return data[k]; });
|
|
1409
1487
|
placeholders = keys.map(function () { return '?'; }).join(', ');
|
|
1410
1488
|
sql = "INSERT INTO `".concat(table, "` (").concat(keys.join(', '), ") VALUES (").concat(placeholders, ")");
|
|
1489
|
+
console.log("[SQL EXECUTOR] \uD83E\uDDE0 Generated INSERT SQL:", sql);
|
|
1490
|
+
console.log("[SQL EXECUTOR] \uD83D\uDD22 Values:", values);
|
|
1411
1491
|
return [4 /*yield*/, this.withConnection(function (conn) { return tslib.__awaiter(_this, void 0, void 0, function () {
|
|
1412
1492
|
var result;
|
|
1413
1493
|
return tslib.__generator(this, function (_a) {
|
|
@@ -1438,6 +1518,8 @@ var SqlExecutor = /** @class */ (function (_super) {
|
|
|
1438
1518
|
updates = keys.map(function (k) { return "`".concat(k, "` = ?"); }).join(', ');
|
|
1439
1519
|
sql = "UPDATE `".concat(table, "` SET ").concat(updates, " WHERE `").concat(primary[0], "` = ?");
|
|
1440
1520
|
values.push(data[primary[0]]);
|
|
1521
|
+
console.log("[SQL EXECUTOR] \uD83E\uDDE0 Generated UPDATE SQL:", sql);
|
|
1522
|
+
console.log("[SQL EXECUTOR] \uD83D\uDD22 Values:", values);
|
|
1441
1523
|
return [4 /*yield*/, this.withConnection(function (conn) { return tslib.__awaiter(_this, void 0, void 0, function () {
|
|
1442
1524
|
var result;
|
|
1443
1525
|
return tslib.__generator(this, function (_a) {
|
|
@@ -1465,6 +1547,8 @@ var SqlExecutor = /** @class */ (function (_super) {
|
|
|
1465
1547
|
if (!key || !(args === null || args === void 0 ? void 0 : args[key]))
|
|
1466
1548
|
throw new Error('Primary key and value required for delete');
|
|
1467
1549
|
sql = "DELETE FROM `".concat(table, "` WHERE `").concat(key, "` = ?");
|
|
1550
|
+
console.log("[SQL EXECUTOR] \uD83E\uDDE0 Generated DELETE SQL:", sql);
|
|
1551
|
+
console.log("[SQL EXECUTOR] \uD83D\uDD22 Value:", args[key]);
|
|
1468
1552
|
return [4 /*yield*/, this.withConnection(function (conn) { return tslib.__awaiter(_this, void 0, void 0, function () {
|
|
1469
1553
|
var result;
|
|
1470
1554
|
return tslib.__generator(this, function (_a) {
|
|
@@ -1481,8 +1565,27 @@ var SqlExecutor = /** @class */ (function (_super) {
|
|
|
1481
1565
|
});
|
|
1482
1566
|
});
|
|
1483
1567
|
};
|
|
1568
|
+
SqlExecutor.prototype.formatSQLWithParams = function (sql, params) {
|
|
1569
|
+
var index = 0;
|
|
1570
|
+
return sql.replace(/\?/g, function () {
|
|
1571
|
+
if (index >= params.length)
|
|
1572
|
+
return '?'; // fallback if params are missing
|
|
1573
|
+
var val = params[index++];
|
|
1574
|
+
if (val === null || val === undefined)
|
|
1575
|
+
return 'NULL';
|
|
1576
|
+
if (Buffer.isBuffer(val))
|
|
1577
|
+
return "UNHEX('".concat(val.toString('hex'), "')");
|
|
1578
|
+
if (typeof val === 'string')
|
|
1579
|
+
return "'".concat(val.replace(/'/g, "''"), "'");
|
|
1580
|
+
if (typeof val === 'number')
|
|
1581
|
+
return val.toString();
|
|
1582
|
+
if (val instanceof Date)
|
|
1583
|
+
return "'".concat(val.toISOString().slice(0, 19).replace('T', ' '), "'");
|
|
1584
|
+
return "'".concat(JSON.stringify(val), "'");
|
|
1585
|
+
});
|
|
1586
|
+
};
|
|
1484
1587
|
return SqlExecutor;
|
|
1485
|
-
}(
|
|
1588
|
+
}(SqlBuilder));
|
|
1486
1589
|
|
|
1487
1590
|
var SqlExecutor$1 = /*#__PURE__*/Object.freeze({
|
|
1488
1591
|
__proto__: null,
|
|
@@ -1593,7 +1696,7 @@ function getPrimaryKeyTypes(table) {
|
|
|
1593
1696
|
* Conditionally group a log if verbose.
|
|
1594
1697
|
*/
|
|
1595
1698
|
function group(title, data) {
|
|
1596
|
-
if (!isVerbose)
|
|
1699
|
+
if (!isVerbose())
|
|
1597
1700
|
return;
|
|
1598
1701
|
console.groupCollapsed("%c".concat(title), "color: #007acc");
|
|
1599
1702
|
if (data !== undefined)
|
|
@@ -1605,7 +1708,7 @@ function info(message) {
|
|
|
1605
1708
|
for (var _i = 1; _i < arguments.length; _i++) {
|
|
1606
1709
|
optional[_i - 1] = arguments[_i];
|
|
1607
1710
|
}
|
|
1608
|
-
if (!isVerbose)
|
|
1711
|
+
if (!isVerbose())
|
|
1609
1712
|
return;
|
|
1610
1713
|
console.info.apply(console, tslib.__spreadArray(["%cINFO: ".concat(message), "color: #0a0"], optional, false));
|
|
1611
1714
|
}
|
|
@@ -1638,10 +1741,10 @@ function checkAllRequestsComplete() {
|
|
|
1638
1741
|
}
|
|
1639
1742
|
|
|
1640
1743
|
function onSuccess(message) {
|
|
1641
|
-
reactToastify.toast.success(message,
|
|
1744
|
+
reactToastify.toast.success(message, isLocal() ? toastOptionsDevs : toastOptions);
|
|
1642
1745
|
}
|
|
1643
1746
|
function onError(message) {
|
|
1644
|
-
reactToastify.toast.error(message,
|
|
1747
|
+
reactToastify.toast.error(message, isLocal() ? toastOptionsDevs : toastOptions);
|
|
1645
1748
|
}
|
|
1646
1749
|
|
|
1647
1750
|
exports.C6Constants = C6Constants;
|
|
@@ -1652,12 +1755,10 @@ exports.GET = GET;
|
|
|
1652
1755
|
exports.HttpExecutor = HttpExecutor;
|
|
1653
1756
|
exports.POST = POST;
|
|
1654
1757
|
exports.PUT = PUT;
|
|
1758
|
+
exports.SqlBuilder = SqlBuilder;
|
|
1655
1759
|
exports.SqlExecutor = SqlExecutor;
|
|
1656
1760
|
exports.TestRestfulResponse = TestRestfulResponse;
|
|
1657
1761
|
exports.axiosInstance = axiosInstance;
|
|
1658
|
-
exports.buildAggregateField = buildAggregateField;
|
|
1659
|
-
exports.buildBooleanJoinedConditions = buildBooleanJoinedConditions;
|
|
1660
|
-
exports.buildSelectQuery = buildSelectQuery;
|
|
1661
1762
|
exports.checkAllRequestsComplete = checkAllRequestsComplete;
|
|
1662
1763
|
exports.checkCache = checkCache;
|
|
1663
1764
|
exports.clearCache = clearCache;
|
|
@@ -1668,7 +1769,7 @@ exports.getEnvVar = getEnvVar;
|
|
|
1668
1769
|
exports.getPrimaryKeyTypes = getPrimaryKeyTypes;
|
|
1669
1770
|
exports.group = group;
|
|
1670
1771
|
exports.info = info;
|
|
1671
|
-
exports.isLocal =
|
|
1772
|
+
exports.isLocal = isLocal;
|
|
1672
1773
|
exports.isNode = isNode;
|
|
1673
1774
|
exports.isTest = isTest;
|
|
1674
1775
|
exports.isVerbose = isVerbose;
|