@carbonorm/carbonnode 3.0.11 → 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 +311 -209
- package/dist/index.cjs.js.map +1 -1
- package/dist/index.esm.js +310 -206
- package/dist/index.esm.js.map +1 -1
- package/dist/variables/isLocal.d.ts +1 -2
- 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/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.esm.js
CHANGED
|
@@ -308,7 +308,13 @@ function convertForRequestBody (restfulObject, tableName, C6, regexErrorHandler)
|
|
|
308
308
|
}, {});
|
|
309
309
|
}
|
|
310
310
|
|
|
311
|
-
var isNode = function () {
|
|
311
|
+
var isNode = function () {
|
|
312
|
+
var _a;
|
|
313
|
+
console.log('Checking if running in Node.js environment...');
|
|
314
|
+
var isNodeEnv = typeof process !== 'undefined' && !!((_a = process.versions) === null || _a === void 0 ? void 0 : _a.node);
|
|
315
|
+
console.log("Is Node.js environment: ".concat(isNodeEnv));
|
|
316
|
+
return isNodeEnv;
|
|
317
|
+
};
|
|
312
318
|
|
|
313
319
|
/**
|
|
314
320
|
* Facade: routes API calls to SQL or HTTP executors based on runtime context.
|
|
@@ -359,165 +365,6 @@ function timeout(shouldContinueAfterTimeout, cb, timeoutMs) {
|
|
|
359
365
|
};
|
|
360
366
|
}
|
|
361
367
|
|
|
362
|
-
function buildBooleanJoinedConditions(set, andMode) {
|
|
363
|
-
if (andMode === void 0) { andMode = true; }
|
|
364
|
-
var booleanOperator = andMode ? 'AND' : 'OR';
|
|
365
|
-
var sql = '';
|
|
366
|
-
var OPERATORS = ['=', '!=', '<', '<=', '>', '>=', 'LIKE', 'NOT LIKE', 'IN', 'NOT IN', 'IS', 'IS NOT'];
|
|
367
|
-
var isAggregateArray = function (value) { return Array.isArray(value) && typeof value[0] === 'string' && OPERATORS.includes(value[0]); };
|
|
368
|
-
var isNumericKeyed = function (obj) { return Array.isArray(obj) && Object.keys(obj).every(function (k) { return /^\d+$/.test(k); }); };
|
|
369
|
-
// todo - we should be doing something with value no????
|
|
370
|
-
var addCondition = function (column, op, _value) {
|
|
371
|
-
var paramName = column.replace(/\W+/g, '_');
|
|
372
|
-
return "(".concat(column, " ").concat(op, " :").concat(paramName, ")");
|
|
373
|
-
};
|
|
374
|
-
if (isNumericKeyed(set)) {
|
|
375
|
-
switch (set.length) {
|
|
376
|
-
case 2:
|
|
377
|
-
sql += addCondition(set[0], '=', set[1]);
|
|
378
|
-
break;
|
|
379
|
-
case 3:
|
|
380
|
-
if (!OPERATORS.includes(set[1])) {
|
|
381
|
-
throw new Error("Invalid operator: ".concat(set[1]));
|
|
382
|
-
}
|
|
383
|
-
sql += addCondition(set[0], set[1], set[2]);
|
|
384
|
-
break;
|
|
385
|
-
default:
|
|
386
|
-
throw new Error("Invalid array condition: ".concat(JSON.stringify(set)));
|
|
387
|
-
}
|
|
388
|
-
}
|
|
389
|
-
else {
|
|
390
|
-
var parts = [];
|
|
391
|
-
for (var _i = 0, _a = Object.entries(set); _i < _a.length; _i++) {
|
|
392
|
-
var _b = _a[_i], key = _b[0], value = _b[1];
|
|
393
|
-
if (/^\d+$/.test(key)) {
|
|
394
|
-
parts.push(buildBooleanJoinedConditions(value, !andMode));
|
|
395
|
-
continue;
|
|
396
|
-
}
|
|
397
|
-
if (!Array.isArray(value) || isAggregateArray(value)) {
|
|
398
|
-
parts.push(addCondition(key, '='));
|
|
399
|
-
continue;
|
|
400
|
-
}
|
|
401
|
-
if (value.length === 2 && OPERATORS.includes(value[0])) {
|
|
402
|
-
parts.push(addCondition(key, value[0], value[1]));
|
|
403
|
-
}
|
|
404
|
-
else if (value.length === 1 && isAggregateArray(value[0])) {
|
|
405
|
-
parts.push(addCondition(key, '=', value[0]));
|
|
406
|
-
}
|
|
407
|
-
else {
|
|
408
|
-
throw new Error("Invalid condition for ".concat(key, ": ").concat(JSON.stringify(value)));
|
|
409
|
-
}
|
|
410
|
-
}
|
|
411
|
-
sql = parts.join(" ".concat(booleanOperator, " "));
|
|
412
|
-
}
|
|
413
|
-
return "(".concat(sql, ")");
|
|
414
|
-
}
|
|
415
|
-
function buildAggregateField(field) {
|
|
416
|
-
if (typeof field === 'string')
|
|
417
|
-
return field;
|
|
418
|
-
if (!Array.isArray(field))
|
|
419
|
-
throw new Error('Invalid SELECT entry: must be string or array');
|
|
420
|
-
var agg = field[0], args = field.slice(1);
|
|
421
|
-
switch (agg) {
|
|
422
|
-
case 'COUNT':
|
|
423
|
-
return "COUNT(".concat(args[0] || '*', ")");
|
|
424
|
-
case 'SUM':
|
|
425
|
-
case 'AVG':
|
|
426
|
-
case 'MIN':
|
|
427
|
-
case 'MAX':
|
|
428
|
-
return "".concat(agg, "(").concat(args[0], ")").concat(args[1] ? " AS ".concat(args[1]) : '');
|
|
429
|
-
case 'DISTINCT':
|
|
430
|
-
return "DISTINCT(".concat(args[0], ")").concat(args[1] ? " AS ".concat(args[1]) : '');
|
|
431
|
-
case 'GROUP_CONCAT': {
|
|
432
|
-
var col = args[0], alias = args[1], sortCol = args[2], sortType = args[3];
|
|
433
|
-
var order = sortCol ? " ORDER BY ".concat(sortCol, " ").concat(sortType || 'ASC') : '';
|
|
434
|
-
return "GROUP_CONCAT(DISTINCT ".concat(col).concat(order, " SEPARATOR ',')").concat(alias ? " AS ".concat(alias) : '');
|
|
435
|
-
}
|
|
436
|
-
case 'AS': {
|
|
437
|
-
var col = args[0], alias = args[1];
|
|
438
|
-
return "".concat(col, " AS ").concat(alias);
|
|
439
|
-
}
|
|
440
|
-
case 'CONVERT_TZ': {
|
|
441
|
-
var ts = args[0], fromTz = args[1], toTz = args[2];
|
|
442
|
-
return "CONVERT_TZ(".concat(ts, ", ").concat(fromTz, ", ").concat(toTz, ")");
|
|
443
|
-
}
|
|
444
|
-
case 'NOW':
|
|
445
|
-
return 'NOW()';
|
|
446
|
-
default:
|
|
447
|
-
throw new Error("Unsupported aggregate: ".concat(agg));
|
|
448
|
-
}
|
|
449
|
-
}
|
|
450
|
-
function buildSelectQuery(table, primary, args, isSubSelect) {
|
|
451
|
-
var _a, _b;
|
|
452
|
-
if (isSubSelect === void 0) { isSubSelect = false; }
|
|
453
|
-
var selectList = (_a = args === null || args === void 0 ? void 0 : args[C6Constants.SELECT]) !== null && _a !== void 0 ? _a : ['*'];
|
|
454
|
-
var selectFields = Array.isArray(selectList)
|
|
455
|
-
? selectList.map(function (f) { return buildAggregateField(f); }).join(', ')
|
|
456
|
-
: '*';
|
|
457
|
-
var sql = "SELECT ".concat(selectFields, " FROM `").concat(table, "`");
|
|
458
|
-
if (args === null || args === void 0 ? void 0 : args[C6Constants.JOIN]) {
|
|
459
|
-
var joins = args[C6Constants.JOIN];
|
|
460
|
-
for (var joinType in joins) {
|
|
461
|
-
var joinKeyword = joinType.replace('_', ' ').toUpperCase();
|
|
462
|
-
for (var joinTable in joins[joinType]) {
|
|
463
|
-
var onClause = buildBooleanJoinedConditions(joins[joinType][joinTable]);
|
|
464
|
-
sql += " ".concat(joinKeyword, " JOIN `").concat(joinTable, "` ON ").concat(onClause);
|
|
465
|
-
}
|
|
466
|
-
}
|
|
467
|
-
}
|
|
468
|
-
if (args === null || args === void 0 ? void 0 : args[C6Constants.WHERE]) {
|
|
469
|
-
sql += " WHERE ".concat(buildBooleanJoinedConditions(args[C6Constants.WHERE]));
|
|
470
|
-
}
|
|
471
|
-
if (args === null || args === void 0 ? void 0 : args[C6Constants.GROUP_BY]) {
|
|
472
|
-
var groupByFields = Array.isArray(args[C6Constants.GROUP_BY]) ? args[C6Constants.GROUP_BY].join(', ') : args[C6Constants.GROUP_BY];
|
|
473
|
-
sql += " GROUP BY ".concat(groupByFields);
|
|
474
|
-
}
|
|
475
|
-
if (args === null || args === void 0 ? void 0 : args[C6Constants.HAVING]) {
|
|
476
|
-
sql += " HAVING ".concat(buildBooleanJoinedConditions(args[C6Constants.HAVING]));
|
|
477
|
-
}
|
|
478
|
-
if (args === null || args === void 0 ? void 0 : args[C6Constants.PAGINATION]) {
|
|
479
|
-
var p = args[C6Constants.PAGINATION];
|
|
480
|
-
var limitClause = '';
|
|
481
|
-
if (p[C6Constants.ORDER]) {
|
|
482
|
-
var orderArray = Object.entries(p[C6Constants.ORDER]).map(function (_a) {
|
|
483
|
-
var col = _a[0], dir = _a[1];
|
|
484
|
-
if (!['ASC', 'DESC'].includes(String(dir).toUpperCase())) {
|
|
485
|
-
throw new Error("Invalid order direction: ".concat(dir));
|
|
486
|
-
}
|
|
487
|
-
return "".concat(col, " ").concat(String(dir).toUpperCase());
|
|
488
|
-
});
|
|
489
|
-
sql += " ORDER BY ".concat(orderArray.join(', '));
|
|
490
|
-
}
|
|
491
|
-
else if (primary) {
|
|
492
|
-
sql += " ORDER BY ".concat(primary, " DESC");
|
|
493
|
-
} /*else {
|
|
494
|
-
// todo - this is wrong
|
|
495
|
-
const primaryKey = C6Constants.TABLES['users'].PRIMARY_SHORT?.[0] ?? 'user_id';
|
|
496
|
-
sql += ` ORDER BY ${primaryKey} DESC`;
|
|
497
|
-
}*/
|
|
498
|
-
if (p[C6Constants.LIMIT] != null) {
|
|
499
|
-
var limit = parseInt(p[C6Constants.LIMIT], 10);
|
|
500
|
-
if (isNaN(limit) || limit < 0) {
|
|
501
|
-
throw new Error("Invalid LIMIT: ".concat(p[C6Constants.LIMIT]));
|
|
502
|
-
}
|
|
503
|
-
var page = parseInt((_b = p[C6Constants.PAGE]) !== null && _b !== void 0 ? _b : 1, 10);
|
|
504
|
-
if (isNaN(page) || page < 1) {
|
|
505
|
-
throw new Error("PAGE must be >= 1 (got ".concat(p[C6Constants.PAGE], ")"));
|
|
506
|
-
}
|
|
507
|
-
var offset = (page - 1) * limit;
|
|
508
|
-
limitClause += " LIMIT ".concat(offset, ", ").concat(limit);
|
|
509
|
-
}
|
|
510
|
-
sql += limitClause;
|
|
511
|
-
}
|
|
512
|
-
else if (!isSubSelect && primary) {
|
|
513
|
-
sql += " ORDER BY ".concat(primary, " ASC LIMIT 1");
|
|
514
|
-
}
|
|
515
|
-
else if (!isSubSelect && !primary) {
|
|
516
|
-
sql += " ORDER BY id ASC LIMIT 100"; // fallback default limit
|
|
517
|
-
}
|
|
518
|
-
return sql;
|
|
519
|
-
}
|
|
520
|
-
|
|
521
368
|
function getEnvVar(key, fallback) {
|
|
522
369
|
if (fallback === void 0) { fallback = ''; }
|
|
523
370
|
// Vite-style injection
|
|
@@ -533,8 +380,10 @@ function getEnvVar(key, fallback) {
|
|
|
533
380
|
return fallback;
|
|
534
381
|
}
|
|
535
382
|
|
|
536
|
-
|
|
537
|
-
var
|
|
383
|
+
function isVerbose () {
|
|
384
|
+
var envVerbose = getEnvVar('VERBOSE') || getEnvVar('REACT_APP_VERBOSE') || getEnvVar('VITE_VERBOSE') || '';
|
|
385
|
+
return ['true', '1', 'yes', 'on'].includes(envVerbose.toLowerCase());
|
|
386
|
+
}
|
|
538
387
|
|
|
539
388
|
var Executor = /** @class */ (function () {
|
|
540
389
|
function Executor(config, request) {
|
|
@@ -557,7 +406,7 @@ var Executor = /** @class */ (function () {
|
|
|
557
406
|
if (!(_i < _a.length)) return [3 /*break*/, 6];
|
|
558
407
|
_b = _a[_i], key = _b[0], fn = _b[1];
|
|
559
408
|
if (!(typeof fn === "function")) return [3 /*break*/, 5];
|
|
560
|
-
if (isVerbose || args.request.debug) {
|
|
409
|
+
if (isVerbose() || args.request.debug) {
|
|
561
410
|
console.groupCollapsed("[LIFECYCLE] ".concat(this.config.requestMethod, ".").concat(String(phase), ":").concat(key));
|
|
562
411
|
console.log("config:", args.config);
|
|
563
412
|
console.log("request:", args.request);
|
|
@@ -588,11 +437,220 @@ var Executor = /** @class */ (function () {
|
|
|
588
437
|
return Executor;
|
|
589
438
|
}());
|
|
590
439
|
|
|
591
|
-
var
|
|
440
|
+
var SqlBuilder = /** @class */ (function (_super) {
|
|
441
|
+
__extends(SqlBuilder, _super);
|
|
442
|
+
function SqlBuilder() {
|
|
443
|
+
return _super !== null && _super.apply(this, arguments) || this;
|
|
444
|
+
}
|
|
445
|
+
/** Generate nested WHERE/JOIN conditions with parameter binding */
|
|
446
|
+
SqlBuilder.prototype.buildBooleanJoinedConditions = function (set, andMode, params) {
|
|
447
|
+
if (andMode === void 0) { andMode = true; }
|
|
448
|
+
if (params === void 0) { params = []; }
|
|
449
|
+
var booleanOperator = andMode ? 'AND' : 'OR';
|
|
450
|
+
var OPERATORS = ['=', '!=', '<', '<=', '>', '>=', 'LIKE', 'NOT LIKE', 'IN', 'NOT IN', 'IS', 'IS NOT'];
|
|
451
|
+
var isAggregateArray = function (value) {
|
|
452
|
+
return Array.isArray(value) && typeof value[0] === 'string' && OPERATORS.includes(value[0]);
|
|
453
|
+
};
|
|
454
|
+
var isNumericKeyed = function (obj) {
|
|
455
|
+
return Array.isArray(obj) && Object.keys(obj).every(function (k) { return /^\d+$/.test(k); });
|
|
456
|
+
};
|
|
457
|
+
var addCondition = function (column, op, value) {
|
|
458
|
+
var clause;
|
|
459
|
+
/*if (Buffer.isBuffer(value)) { // TODO - I want this as a parameterized option, for now default to faster
|
|
460
|
+
params.push(value.toString('hex')); // Or use UNHEX(?) in SQL
|
|
461
|
+
clause = `(${column} = UNHEX(?))`;
|
|
462
|
+
} else {*/
|
|
463
|
+
params.push(value);
|
|
464
|
+
clause = "( ".concat(column, " ").concat(op, " ? )");
|
|
465
|
+
//}
|
|
466
|
+
isVerbose() && console.log("[WHERE] \u2795 ".concat(clause, " ->"), value);
|
|
467
|
+
return clause;
|
|
468
|
+
};
|
|
469
|
+
var sql;
|
|
470
|
+
if (isNumericKeyed(set)) {
|
|
471
|
+
isVerbose() && console.log("[WHERE] Numeric keyed condition:", set);
|
|
472
|
+
switch (set.length) {
|
|
473
|
+
case 2:
|
|
474
|
+
sql = addCondition(set[0], '=', set[1]);
|
|
475
|
+
break;
|
|
476
|
+
case 3:
|
|
477
|
+
if (!OPERATORS.includes(set[1]))
|
|
478
|
+
throw new Error("Invalid operator: ".concat(set[1]));
|
|
479
|
+
sql = addCondition(set[0], set[1], set[2]);
|
|
480
|
+
break;
|
|
481
|
+
default:
|
|
482
|
+
throw new Error("Invalid array condition: ".concat(JSON.stringify(set)));
|
|
483
|
+
}
|
|
484
|
+
}
|
|
485
|
+
else {
|
|
486
|
+
var parts = [];
|
|
487
|
+
for (var _i = 0, _a = Object.entries(set); _i < _a.length; _i++) {
|
|
488
|
+
var _b = _a[_i], key = _b[0], value = _b[1];
|
|
489
|
+
if (/^\d+$/.test(key)) {
|
|
490
|
+
parts.push(this.buildBooleanJoinedConditions(value, !andMode, params));
|
|
491
|
+
}
|
|
492
|
+
else if (!Array.isArray(value) || isAggregateArray(value)) {
|
|
493
|
+
parts.push(addCondition(key, '=', value));
|
|
494
|
+
}
|
|
495
|
+
else if (value.length === 2 && OPERATORS.includes(value[0])) {
|
|
496
|
+
parts.push(addCondition(key, value[0], value[1]));
|
|
497
|
+
}
|
|
498
|
+
else {
|
|
499
|
+
throw new Error("Invalid condition for ".concat(key, ": ").concat(JSON.stringify(value)));
|
|
500
|
+
}
|
|
501
|
+
}
|
|
502
|
+
sql = parts.join(" ".concat(booleanOperator, " "));
|
|
503
|
+
}
|
|
504
|
+
isVerbose() && console.log("[WHERE] Final: (".concat(sql, ")"));
|
|
505
|
+
return "(".concat(sql, ")");
|
|
506
|
+
};
|
|
507
|
+
/** Translate array or function calls into SQL expressions */
|
|
508
|
+
SqlBuilder.prototype.buildAggregateField = function (field) {
|
|
509
|
+
if (typeof field === 'string')
|
|
510
|
+
return field;
|
|
511
|
+
if (!Array.isArray(field))
|
|
512
|
+
throw new Error('Invalid SELECT entry');
|
|
513
|
+
var fn = field[0], args = field.slice(1);
|
|
514
|
+
var alias;
|
|
515
|
+
if (args.length >= 2 && args[args.length - 2] === 'AS') {
|
|
516
|
+
alias = String(args.pop());
|
|
517
|
+
args.pop();
|
|
518
|
+
}
|
|
519
|
+
var F = String(fn).toUpperCase();
|
|
520
|
+
var p = args.join(', ');
|
|
521
|
+
isVerbose() && console.log("[SELECT] ".concat(F, "(").concat(p, ")").concat(alias ? " AS ".concat(alias) : ''));
|
|
522
|
+
switch (F) {
|
|
523
|
+
case 'DATE_ADD':
|
|
524
|
+
return "DATE_ADD(".concat(args[0], ", ").concat(args[1], ")").concat(alias ? " AS ".concat(alias) : '');
|
|
525
|
+
case 'DATE_SUB':
|
|
526
|
+
return "DATE_SUB(".concat(args[0], ", ").concat(args[1], ")").concat(alias ? " AS ".concat(alias) : '');
|
|
527
|
+
case 'YEAR':
|
|
528
|
+
return "YEAR(".concat(args[0], ")").concat(alias ? " AS ".concat(alias) : '');
|
|
529
|
+
case 'MONTH':
|
|
530
|
+
return "MONTH(".concat(args[0], ")").concat(alias ? " AS ".concat(alias) : '');
|
|
531
|
+
case 'DAY':
|
|
532
|
+
return "DAY(".concat(args[0], ")").concat(alias ? " AS ".concat(alias) : '');
|
|
533
|
+
case 'ROUND':
|
|
534
|
+
case 'CEIL':
|
|
535
|
+
case 'FLOOR':
|
|
536
|
+
case 'ABS':
|
|
537
|
+
case 'SQRT':
|
|
538
|
+
return "".concat(F, "(").concat(p, ")").concat(alias ? " AS ".concat(alias) : '');
|
|
539
|
+
case 'ST_DISTANCE':
|
|
540
|
+
return "ST_Distance(".concat(p, ")").concat(alias ? " AS ".concat(alias) : '');
|
|
541
|
+
default:
|
|
542
|
+
if (/^[A-Z_]+$/.test(F))
|
|
543
|
+
return "".concat(F, "(").concat(p, ")").concat(alias ? " AS ".concat(alias) : '');
|
|
544
|
+
throw new Error("Unsupported function: ".concat(F));
|
|
545
|
+
}
|
|
546
|
+
};
|
|
547
|
+
/** Compose a parameterized SELECT query with optional JOIN/WHERE/GROUP/HAVING/PAGINATION */
|
|
548
|
+
SqlBuilder.prototype.buildSelectQuery = function (table, primary, args, isSubSelect) {
|
|
549
|
+
var _this = this;
|
|
550
|
+
var _a, _b, _c, _d;
|
|
551
|
+
if (isSubSelect === void 0) { isSubSelect = false; }
|
|
552
|
+
var model = this.config.C6.TABLES[table];
|
|
553
|
+
var params = [];
|
|
554
|
+
// SELECT
|
|
555
|
+
var selectList = (_a = args === null || args === void 0 ? void 0 : args[C6Constants.SELECT]) !== null && _a !== void 0 ? _a : ['*'];
|
|
556
|
+
var selectFields = Array.isArray(selectList)
|
|
557
|
+
? selectList.map(function (f) { return _this.buildAggregateField(f); }).join(', ')
|
|
558
|
+
: '*';
|
|
559
|
+
var sql = "SELECT ".concat(selectFields, " FROM ").concat(table);
|
|
560
|
+
isVerbose() && console.log("[SELECT]", selectFields);
|
|
561
|
+
// JOIN
|
|
562
|
+
if (args === null || args === void 0 ? void 0 : args[C6Constants.JOIN]) {
|
|
563
|
+
for (var jt in args[C6Constants.JOIN]) {
|
|
564
|
+
var jk = jt.replace('_', ' ').toUpperCase();
|
|
565
|
+
for (var jn in args[C6Constants.JOIN][jt]) {
|
|
566
|
+
var on = this.buildBooleanJoinedConditions(args[C6Constants.JOIN][jt][jn], true, params);
|
|
567
|
+
sql += " ".concat(jk, " JOIN `").concat(jn, "` ON ").concat(on);
|
|
568
|
+
isVerbose() && console.log("[JOIN]", jk, jn, on);
|
|
569
|
+
}
|
|
570
|
+
}
|
|
571
|
+
}
|
|
572
|
+
// WHERE
|
|
573
|
+
if (args === null || args === void 0 ? void 0 : args[C6Constants.WHERE]) {
|
|
574
|
+
var wc = this.buildBooleanJoinedConditions(args[C6Constants.WHERE], true, params);
|
|
575
|
+
// Trim leading and trailing parentheses if they fully wrap the condition
|
|
576
|
+
while (wc.startsWith('(') && wc.endsWith(')')) {
|
|
577
|
+
wc = wc.slice(1, -1).trim();
|
|
578
|
+
}
|
|
579
|
+
sql += " WHERE ".concat(wc);
|
|
580
|
+
}
|
|
581
|
+
// GROUP BY
|
|
582
|
+
if (args === null || args === void 0 ? void 0 : args[C6Constants.GROUP_BY]) {
|
|
583
|
+
var gb = Array.isArray(args[C6Constants.GROUP_BY])
|
|
584
|
+
? args[C6Constants.GROUP_BY].join(', ')
|
|
585
|
+
: args[C6Constants.GROUP_BY];
|
|
586
|
+
sql += " GROUP BY ".concat(gb);
|
|
587
|
+
isVerbose() && console.log("[GROUP BY]", gb);
|
|
588
|
+
}
|
|
589
|
+
// HAVING
|
|
590
|
+
if (args === null || args === void 0 ? void 0 : args[C6Constants.HAVING]) {
|
|
591
|
+
var hc = this.buildBooleanJoinedConditions(args[C6Constants.HAVING], true, params);
|
|
592
|
+
sql += " HAVING ".concat(hc);
|
|
593
|
+
}
|
|
594
|
+
// PAGINATION
|
|
595
|
+
if (args === null || args === void 0 ? void 0 : args[C6Constants.PAGINATION]) {
|
|
596
|
+
var p = args[C6Constants.PAGINATION];
|
|
597
|
+
if (p[C6Constants.ORDER]) {
|
|
598
|
+
var ord = Object.entries(p[C6Constants.ORDER]).map(function (_a) {
|
|
599
|
+
var c = _a[0], d = _a[1];
|
|
600
|
+
return "".concat(c, " ").concat(String(d).toUpperCase());
|
|
601
|
+
});
|
|
602
|
+
sql += " ORDER BY ".concat(ord.join(', '));
|
|
603
|
+
isVerbose() && console.log("[ORDER BY]", ord);
|
|
604
|
+
}
|
|
605
|
+
if (p[C6Constants.LIMIT] != null) {
|
|
606
|
+
var lim = parseInt(p[C6Constants.LIMIT], 10);
|
|
607
|
+
var pg = parseInt((_b = p[C6Constants.PAGE]) !== null && _b !== void 0 ? _b : 1, 10);
|
|
608
|
+
var off = (pg - 1) * lim;
|
|
609
|
+
sql += " LIMIT ".concat(off, ", ").concat(lim);
|
|
610
|
+
isVerbose() && console.log("[LIMIT]", off, lim);
|
|
611
|
+
}
|
|
612
|
+
}
|
|
613
|
+
// Fallback ORDER/LIMIT
|
|
614
|
+
else if (!isSubSelect) {
|
|
615
|
+
var ok = void 0;
|
|
616
|
+
if (primary)
|
|
617
|
+
ok = primary;
|
|
618
|
+
else if ((_c = model === null || model === void 0 ? void 0 : model.PRIMARY_SHORT) === null || _c === void 0 ? void 0 : _c[0])
|
|
619
|
+
ok = model.PRIMARY_SHORT[0];
|
|
620
|
+
else
|
|
621
|
+
for (var _i = 0, _e = ['created_at', 'updated_at']; _i < _e.length; _i++) {
|
|
622
|
+
var ts = _e[_i];
|
|
623
|
+
if ((_d = model === null || model === void 0 ? void 0 : model.COLUMNS) === null || _d === void 0 ? void 0 : _d["".concat(table, ".").concat(ts)]) {
|
|
624
|
+
ok = ts;
|
|
625
|
+
break;
|
|
626
|
+
}
|
|
627
|
+
}
|
|
628
|
+
if (ok) {
|
|
629
|
+
var dir = primary ? 'ASC' : 'DESC';
|
|
630
|
+
var lim = primary ? 1 : 100;
|
|
631
|
+
sql += " ORDER BY ".concat(ok, " ").concat(dir, " LIMIT ").concat(lim);
|
|
632
|
+
isVerbose() && console.log("[ORDER]", ok, dir, lim);
|
|
633
|
+
}
|
|
634
|
+
else {
|
|
635
|
+
sql += " LIMIT 100";
|
|
636
|
+
isVerbose() && console.warn("[ORDER] fallback LIMIT 100");
|
|
637
|
+
}
|
|
638
|
+
}
|
|
639
|
+
isVerbose() && console.log("[SQL]", sql, params);
|
|
640
|
+
return { sql: sql, params: params };
|
|
641
|
+
};
|
|
642
|
+
return SqlBuilder;
|
|
643
|
+
}(Executor));
|
|
644
|
+
|
|
645
|
+
function isLocal () {
|
|
646
|
+
return getEnvVar('NODE_ENV', '') === 'development';
|
|
647
|
+
}
|
|
592
648
|
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
649
|
+
function isTest () {
|
|
650
|
+
return getEnvVar('JEST_WORKER_ID') || getEnvVar('NODE_ENV') === 'test'
|
|
651
|
+
|| getEnvVar('REACT_APP_TEST') === 'true' || getEnvVar('VITE_TEST') === 'true'
|
|
652
|
+
|| getEnvVar('MODE') === 'test' || getEnvVar('VITE_TEST_MODE') === 'true';
|
|
653
|
+
}
|
|
596
654
|
|
|
597
655
|
var eFetchDependencies;
|
|
598
656
|
(function (eFetchDependencies) {
|
|
@@ -672,7 +730,7 @@ function removeInvalidKeys(request, c6Tables) {
|
|
|
672
730
|
intersection[key] = request[key];
|
|
673
731
|
}
|
|
674
732
|
});
|
|
675
|
-
isTest || console.log('intersection', intersection);
|
|
733
|
+
isTest() || console.log('intersection', intersection);
|
|
676
734
|
return intersection;
|
|
677
735
|
}
|
|
678
736
|
|
|
@@ -697,7 +755,7 @@ function checkCache(cacheResult, requestMethod, tableName, request) {
|
|
|
697
755
|
return cacheResult.request;
|
|
698
756
|
}
|
|
699
757
|
if (true === (cacheResult === null || cacheResult === void 0 ? void 0 : cacheResult.final)) {
|
|
700
|
-
if (false === isTest || true === isVerbose) {
|
|
758
|
+
if (false === isTest() || true === isVerbose()) {
|
|
701
759
|
console.groupCollapsed('%c API: Rest api cache (' + requestMethod + ' ' + tableName + ') has reached the final result. Returning undefined!', 'color: #cc0');
|
|
702
760
|
console.log('%c ' + requestMethod + ' ' + tableName, 'color: #cc0');
|
|
703
761
|
console.log('%c Request Data (note you may see the success and/or error prompt):', 'color: #cc0', request);
|
|
@@ -870,7 +928,7 @@ var HttpExecutor = /** @class */ (function (_super) {
|
|
|
870
928
|
if (undefined !== cacheResult) return [3 /*break*/, 1];
|
|
871
929
|
_p.label = 5;
|
|
872
930
|
case 5:
|
|
873
|
-
if (debug &&
|
|
931
|
+
if (debug && isLocal()) {
|
|
874
932
|
toast.warning("DEVS: Request in cache. (" + apiRequestCache.findIndex(function (cache) { return cache.requestArgumentsSerialized === querySerialized; }) + "). Returning function to request page (" + query[C6.PAGINATION][C6.PAGE] + ")", toastOptionsDevs);
|
|
875
933
|
}
|
|
876
934
|
// @ts-ignore - this is an incorrect warning on TS, it's well typed
|
|
@@ -879,12 +937,12 @@ var HttpExecutor = /** @class */ (function (_super) {
|
|
|
879
937
|
cachingConfirmed = true;
|
|
880
938
|
return [3 /*break*/, 8];
|
|
881
939
|
case 7:
|
|
882
|
-
if (debug &&
|
|
940
|
+
if (debug && isLocal()) {
|
|
883
941
|
toast.info("DEVS: Ignore cache was set to true.", toastOptionsDevs);
|
|
884
942
|
}
|
|
885
943
|
_p.label = 8;
|
|
886
944
|
case 8:
|
|
887
|
-
if (debug &&
|
|
945
|
+
if (debug && isLocal()) {
|
|
888
946
|
toast.success("DEVS: Request not in cache." + (requestMethod === C6.GET ? "Page (" + query[C6.PAGINATION][C6.PAGE] + ")." : '') + " Logging cache 2 console.", toastOptionsDevs);
|
|
889
947
|
}
|
|
890
948
|
return [3 /*break*/, 12];
|
|
@@ -921,7 +979,7 @@ var HttpExecutor = /** @class */ (function (_super) {
|
|
|
921
979
|
if (undefined === query
|
|
922
980
|
|| null === query
|
|
923
981
|
|| false === primaryKey in query) {
|
|
924
|
-
if (true === debug &&
|
|
982
|
+
if (true === debug && isLocal()) {
|
|
925
983
|
toast.error('DEVS: The primary key (' + primaryKey + ') was not provided!!');
|
|
926
984
|
}
|
|
927
985
|
throw Error('You must provide the primary key (' + primaryKey + ') for table (' + operatingTable + '). Request (' + JSON.stringify(this.request, undefined, 4) + ') Query (' + JSON.stringify(query) + ')');
|
|
@@ -1010,7 +1068,7 @@ var HttpExecutor = /** @class */ (function (_super) {
|
|
|
1010
1068
|
case 0:
|
|
1011
1069
|
// noinspection SuspiciousTypeOfGuard
|
|
1012
1070
|
if (typeof response.data === 'string') {
|
|
1013
|
-
if (isTest) {
|
|
1071
|
+
if (isTest()) {
|
|
1014
1072
|
console.trace();
|
|
1015
1073
|
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 + ')');
|
|
1016
1074
|
}
|
|
@@ -1030,7 +1088,7 @@ var HttpExecutor = /** @class */ (function (_super) {
|
|
|
1030
1088
|
// todo - this feels dumb now, but i digress
|
|
1031
1089
|
apiResponse = TestRestfulResponse(response, success, error);
|
|
1032
1090
|
if (false === apiResponse) {
|
|
1033
|
-
if (debug &&
|
|
1091
|
+
if (debug && isLocal()) {
|
|
1034
1092
|
toast.warning("DEVS: TestRestfulResponse returned false for (" + operatingTable + ").", toastOptionsDevs);
|
|
1035
1093
|
}
|
|
1036
1094
|
return [2 /*return*/, response];
|
|
@@ -1068,7 +1126,7 @@ var HttpExecutor = /** @class */ (function (_super) {
|
|
|
1068
1126
|
responseData_1 = response.data;
|
|
1069
1127
|
returnGetNextPageFunction = 1 !== ((_d = query === null || query === void 0 ? void 0 : query[C6.PAGINATION]) === null || _d === void 0 ? void 0 : _d[C6.LIMIT]) &&
|
|
1070
1128
|
((_e = query === null || query === void 0 ? void 0 : query[C6.PAGINATION]) === null || _e === void 0 ? void 0 : _e[C6.LIMIT]) === responseData_1.rest.length;
|
|
1071
|
-
if (false === isTest || true === isVerbose) {
|
|
1129
|
+
if (false === isTest() || true === isVerbose()) {
|
|
1072
1130
|
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');
|
|
1073
1131
|
console.log('%c ' + requestMethod + ' ' + tableName, 'color: #0c0');
|
|
1074
1132
|
console.log('%c Request Data (note you may see the success and/or error prompt):', 'color: #0c0', this.request);
|
|
@@ -1079,7 +1137,7 @@ var HttpExecutor = /** @class */ (function (_super) {
|
|
|
1079
1137
|
}
|
|
1080
1138
|
if (false === returnGetNextPageFunction
|
|
1081
1139
|
&& true === debug
|
|
1082
|
-
&&
|
|
1140
|
+
&& isLocal()) {
|
|
1083
1141
|
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);
|
|
1084
1142
|
}
|
|
1085
1143
|
if (!(fetchDependencies
|
|
@@ -1264,7 +1322,7 @@ var HttpExecutor = /** @class */ (function (_super) {
|
|
|
1264
1322
|
}); });
|
|
1265
1323
|
_l.label = 6;
|
|
1266
1324
|
case 6:
|
|
1267
|
-
if (debug &&
|
|
1325
|
+
if (debug && isLocal()) {
|
|
1268
1326
|
toast.success("DEVS: (" + requestMethod + ") request complete.", toastOptionsDevs);
|
|
1269
1327
|
}
|
|
1270
1328
|
return [2 /*return*/, response];
|
|
@@ -1273,7 +1331,7 @@ var HttpExecutor = /** @class */ (function (_super) {
|
|
|
1273
1331
|
}); }).then(function (response) { return response.data; })];
|
|
1274
1332
|
}
|
|
1275
1333
|
catch (throwableError) {
|
|
1276
|
-
if (isTest) {
|
|
1334
|
+
if (isTest()) {
|
|
1277
1335
|
throw new Error(JSON.stringify(throwableError));
|
|
1278
1336
|
}
|
|
1279
1337
|
console.groupCollapsed('%c API: An error occurred in the try catch block. returning null!', 'color: #ff0000');
|
|
@@ -1309,13 +1367,16 @@ var SqlExecutor = /** @class */ (function (_super) {
|
|
|
1309
1367
|
}
|
|
1310
1368
|
SqlExecutor.prototype.execute = function () {
|
|
1311
1369
|
return __awaiter(this, void 0, void 0, function () {
|
|
1312
|
-
var
|
|
1313
|
-
return __generator(this, function (
|
|
1314
|
-
switch (
|
|
1370
|
+
var TABLE_NAME, method, _a, rest, result, created, result, updated, result, deleted;
|
|
1371
|
+
return __generator(this, function (_b) {
|
|
1372
|
+
switch (_b.label) {
|
|
1315
1373
|
case 0:
|
|
1316
|
-
|
|
1317
|
-
|
|
1318
|
-
|
|
1374
|
+
TABLE_NAME = this.config.restModel.TABLE_NAME;
|
|
1375
|
+
method = this.config.requestMethod;
|
|
1376
|
+
console.log("[SQL EXECUTOR] \u25B6\uFE0F Executing ".concat(method, " on table \"").concat(TABLE_NAME, "\""));
|
|
1377
|
+
console.log("[SQL EXECUTOR] \uD83E\uDDFE Request payload:", this.request);
|
|
1378
|
+
_a = method;
|
|
1379
|
+
switch (_a) {
|
|
1319
1380
|
case 'GET': return [3 /*break*/, 1];
|
|
1320
1381
|
case 'POST': return [3 /*break*/, 3];
|
|
1321
1382
|
case 'PUT': return [3 /*break*/, 5];
|
|
@@ -1324,24 +1385,36 @@ var SqlExecutor = /** @class */ (function (_super) {
|
|
|
1324
1385
|
return [3 /*break*/, 9];
|
|
1325
1386
|
case 1: return [4 /*yield*/, this.select(TABLE_NAME, undefined, this.request)];
|
|
1326
1387
|
case 2:
|
|
1327
|
-
rest =
|
|
1388
|
+
rest = _b.sent();
|
|
1389
|
+
console.log("[SQL EXECUTOR] \u2705 GET result:", rest);
|
|
1328
1390
|
return [2 /*return*/, { rest: rest }];
|
|
1329
1391
|
case 3: return [4 /*yield*/, this.insert(TABLE_NAME, this.request)];
|
|
1330
1392
|
case 4:
|
|
1331
|
-
result =
|
|
1393
|
+
result = _b.sent();
|
|
1394
|
+
console.log("[SQL EXECUTOR] \u2705 POST result:", result);
|
|
1332
1395
|
created = { rest: result, created: true };
|
|
1333
1396
|
return [2 /*return*/, created];
|
|
1334
|
-
case 5: return [4 /*yield*/, this.update(TABLE_NAME,
|
|
1397
|
+
case 5: return [4 /*yield*/, this.update(TABLE_NAME, [], this.request)];
|
|
1335
1398
|
case 6:
|
|
1336
|
-
result =
|
|
1337
|
-
|
|
1399
|
+
result = _b.sent();
|
|
1400
|
+
console.log("[SQL EXECUTOR] \u2705 PUT result:", result);
|
|
1401
|
+
updated = {
|
|
1402
|
+
rest: result,
|
|
1403
|
+
updated: true,
|
|
1404
|
+
rowCount: result.affectedRows
|
|
1405
|
+
};
|
|
1338
1406
|
return [2 /*return*/, updated];
|
|
1339
|
-
case 7: return [4 /*yield*/, this.delete(TABLE_NAME,
|
|
1407
|
+
case 7: return [4 /*yield*/, this.delete(TABLE_NAME, [], this.request)];
|
|
1340
1408
|
case 8:
|
|
1341
|
-
result =
|
|
1342
|
-
|
|
1409
|
+
result = _b.sent();
|
|
1410
|
+
console.log("[SQL EXECUTOR] \u2705 DELETE result:", result);
|
|
1411
|
+
deleted = {
|
|
1412
|
+
rest: result,
|
|
1413
|
+
deleted: true,
|
|
1414
|
+
rowCount: result.affectedRows
|
|
1415
|
+
};
|
|
1343
1416
|
return [2 /*return*/, deleted];
|
|
1344
|
-
case 9: throw new Error("Unsupported request method: ".concat(
|
|
1417
|
+
case 9: throw new Error("Unsupported request method: ".concat(method));
|
|
1345
1418
|
}
|
|
1346
1419
|
});
|
|
1347
1420
|
});
|
|
@@ -1351,15 +1424,19 @@ var SqlExecutor = /** @class */ (function (_super) {
|
|
|
1351
1424
|
var conn;
|
|
1352
1425
|
return __generator(this, function (_a) {
|
|
1353
1426
|
switch (_a.label) {
|
|
1354
|
-
case 0:
|
|
1427
|
+
case 0:
|
|
1428
|
+
console.log("[SQL EXECUTOR] \uD83D\uDCE1 Getting DB connection");
|
|
1429
|
+
return [4 /*yield*/, this.config.mysqlPool.getConnection()];
|
|
1355
1430
|
case 1:
|
|
1356
1431
|
conn = _a.sent();
|
|
1357
1432
|
_a.label = 2;
|
|
1358
1433
|
case 2:
|
|
1359
1434
|
_a.trys.push([2, , 4, 5]);
|
|
1435
|
+
console.log("[SQL EXECUTOR] \u2705 Connection acquired");
|
|
1360
1436
|
return [4 /*yield*/, cb(conn)];
|
|
1361
1437
|
case 3: return [2 /*return*/, _a.sent()];
|
|
1362
1438
|
case 4:
|
|
1439
|
+
console.log("[SQL EXECUTOR] \uD83D\uDD0C Releasing DB connection");
|
|
1363
1440
|
conn.release();
|
|
1364
1441
|
return [7 /*endfinally*/];
|
|
1365
1442
|
case 5: return [2 /*return*/];
|
|
@@ -1369,21 +1446,23 @@ var SqlExecutor = /** @class */ (function (_super) {
|
|
|
1369
1446
|
};
|
|
1370
1447
|
SqlExecutor.prototype.select = function (table, primary, args) {
|
|
1371
1448
|
return __awaiter(this, void 0, void 0, function () {
|
|
1372
|
-
var sql;
|
|
1449
|
+
var sql, formatted;
|
|
1373
1450
|
var _this = this;
|
|
1374
1451
|
return __generator(this, function (_a) {
|
|
1375
1452
|
switch (_a.label) {
|
|
1376
1453
|
case 0:
|
|
1377
|
-
sql = buildSelectQuery(table, primary, args);
|
|
1454
|
+
sql = this.buildSelectQuery(table, primary, args);
|
|
1455
|
+
console.log("[SQL EXECUTOR] \uD83E\uDDE0 Generated SELECT SQL:", sql);
|
|
1456
|
+
formatted = this.formatSQLWithParams(sql.sql, sql.params);
|
|
1457
|
+
console.log("[SQL EXECUTOR] \uD83E\uDDE0 Formatted SELECT SQL:", formatted);
|
|
1378
1458
|
return [4 /*yield*/, this.withConnection(function (conn) { return __awaiter(_this, void 0, void 0, function () {
|
|
1379
1459
|
var rows;
|
|
1380
1460
|
return __generator(this, function (_a) {
|
|
1381
1461
|
switch (_a.label) {
|
|
1382
|
-
case 0:
|
|
1383
|
-
console.log(sql);
|
|
1384
|
-
return [4 /*yield*/, conn.query(sql)];
|
|
1462
|
+
case 0: return [4 /*yield*/, conn.query(sql.sql, sql.params)];
|
|
1385
1463
|
case 1:
|
|
1386
1464
|
rows = (_a.sent())[0];
|
|
1465
|
+
console.log("[SQL EXECUTOR] \uD83D\uDCE6 Rows fetched:", rows);
|
|
1387
1466
|
return [2 /*return*/, rows];
|
|
1388
1467
|
}
|
|
1389
1468
|
});
|
|
@@ -1404,6 +1483,8 @@ var SqlExecutor = /** @class */ (function (_super) {
|
|
|
1404
1483
|
values = keys.map(function (k) { return data[k]; });
|
|
1405
1484
|
placeholders = keys.map(function () { return '?'; }).join(', ');
|
|
1406
1485
|
sql = "INSERT INTO `".concat(table, "` (").concat(keys.join(', '), ") VALUES (").concat(placeholders, ")");
|
|
1486
|
+
console.log("[SQL EXECUTOR] \uD83E\uDDE0 Generated INSERT SQL:", sql);
|
|
1487
|
+
console.log("[SQL EXECUTOR] \uD83D\uDD22 Values:", values);
|
|
1407
1488
|
return [4 /*yield*/, this.withConnection(function (conn) { return __awaiter(_this, void 0, void 0, function () {
|
|
1408
1489
|
var result;
|
|
1409
1490
|
return __generator(this, function (_a) {
|
|
@@ -1434,6 +1515,8 @@ var SqlExecutor = /** @class */ (function (_super) {
|
|
|
1434
1515
|
updates = keys.map(function (k) { return "`".concat(k, "` = ?"); }).join(', ');
|
|
1435
1516
|
sql = "UPDATE `".concat(table, "` SET ").concat(updates, " WHERE `").concat(primary[0], "` = ?");
|
|
1436
1517
|
values.push(data[primary[0]]);
|
|
1518
|
+
console.log("[SQL EXECUTOR] \uD83E\uDDE0 Generated UPDATE SQL:", sql);
|
|
1519
|
+
console.log("[SQL EXECUTOR] \uD83D\uDD22 Values:", values);
|
|
1437
1520
|
return [4 /*yield*/, this.withConnection(function (conn) { return __awaiter(_this, void 0, void 0, function () {
|
|
1438
1521
|
var result;
|
|
1439
1522
|
return __generator(this, function (_a) {
|
|
@@ -1461,6 +1544,8 @@ var SqlExecutor = /** @class */ (function (_super) {
|
|
|
1461
1544
|
if (!key || !(args === null || args === void 0 ? void 0 : args[key]))
|
|
1462
1545
|
throw new Error('Primary key and value required for delete');
|
|
1463
1546
|
sql = "DELETE FROM `".concat(table, "` WHERE `").concat(key, "` = ?");
|
|
1547
|
+
console.log("[SQL EXECUTOR] \uD83E\uDDE0 Generated DELETE SQL:", sql);
|
|
1548
|
+
console.log("[SQL EXECUTOR] \uD83D\uDD22 Value:", args[key]);
|
|
1464
1549
|
return [4 /*yield*/, this.withConnection(function (conn) { return __awaiter(_this, void 0, void 0, function () {
|
|
1465
1550
|
var result;
|
|
1466
1551
|
return __generator(this, function (_a) {
|
|
@@ -1477,8 +1562,27 @@ var SqlExecutor = /** @class */ (function (_super) {
|
|
|
1477
1562
|
});
|
|
1478
1563
|
});
|
|
1479
1564
|
};
|
|
1565
|
+
SqlExecutor.prototype.formatSQLWithParams = function (sql, params) {
|
|
1566
|
+
var index = 0;
|
|
1567
|
+
return sql.replace(/\?/g, function () {
|
|
1568
|
+
if (index >= params.length)
|
|
1569
|
+
return '?'; // fallback if params are missing
|
|
1570
|
+
var val = params[index++];
|
|
1571
|
+
if (val === null || val === undefined)
|
|
1572
|
+
return 'NULL';
|
|
1573
|
+
if (Buffer.isBuffer(val))
|
|
1574
|
+
return "UNHEX('".concat(val.toString('hex'), "')");
|
|
1575
|
+
if (typeof val === 'string')
|
|
1576
|
+
return "'".concat(val.replace(/'/g, "''"), "'");
|
|
1577
|
+
if (typeof val === 'number')
|
|
1578
|
+
return val.toString();
|
|
1579
|
+
if (val instanceof Date)
|
|
1580
|
+
return "'".concat(val.toISOString().slice(0, 19).replace('T', ' '), "'");
|
|
1581
|
+
return "'".concat(JSON.stringify(val), "'");
|
|
1582
|
+
});
|
|
1583
|
+
};
|
|
1480
1584
|
return SqlExecutor;
|
|
1481
|
-
}(
|
|
1585
|
+
}(SqlBuilder));
|
|
1482
1586
|
|
|
1483
1587
|
var SqlExecutor$1 = /*#__PURE__*/Object.freeze({
|
|
1484
1588
|
__proto__: null,
|
|
@@ -1589,7 +1693,7 @@ function getPrimaryKeyTypes(table) {
|
|
|
1589
1693
|
* Conditionally group a log if verbose.
|
|
1590
1694
|
*/
|
|
1591
1695
|
function group(title, data) {
|
|
1592
|
-
if (!isVerbose)
|
|
1696
|
+
if (!isVerbose())
|
|
1593
1697
|
return;
|
|
1594
1698
|
console.groupCollapsed("%c".concat(title), "color: #007acc");
|
|
1595
1699
|
if (data !== undefined)
|
|
@@ -1601,7 +1705,7 @@ function info(message) {
|
|
|
1601
1705
|
for (var _i = 1; _i < arguments.length; _i++) {
|
|
1602
1706
|
optional[_i - 1] = arguments[_i];
|
|
1603
1707
|
}
|
|
1604
|
-
if (!isVerbose)
|
|
1708
|
+
if (!isVerbose())
|
|
1605
1709
|
return;
|
|
1606
1710
|
console.info.apply(console, __spreadArray(["%cINFO: ".concat(message), "color: #0a0"], optional, false));
|
|
1607
1711
|
}
|
|
@@ -1634,11 +1738,11 @@ function checkAllRequestsComplete() {
|
|
|
1634
1738
|
}
|
|
1635
1739
|
|
|
1636
1740
|
function onSuccess(message) {
|
|
1637
|
-
toast.success(message,
|
|
1741
|
+
toast.success(message, isLocal() ? toastOptionsDevs : toastOptions);
|
|
1638
1742
|
}
|
|
1639
1743
|
function onError(message) {
|
|
1640
|
-
toast.error(message,
|
|
1744
|
+
toast.error(message, isLocal() ? toastOptionsDevs : toastOptions);
|
|
1641
1745
|
}
|
|
1642
1746
|
|
|
1643
|
-
export { C6Constants, DELETE, Executor, ExpressHandler, GET, HttpExecutor, POST, PUT, SqlExecutor, TestRestfulResponse, apiRequestCache, axiosInstance,
|
|
1747
|
+
export { C6Constants, DELETE, Executor, ExpressHandler, GET, HttpExecutor, POST, PUT, SqlBuilder, SqlExecutor, TestRestfulResponse, apiRequestCache, axiosInstance, checkAllRequestsComplete, checkCache, clearCache, convertForRequestBody, determineRuntimeJsType, eFetchDependencies, error, getEnvVar, getPrimaryKeyTypes, group, info, isLocal, isNode, isTest, isVerbose, onError, onSuccess, removeInvalidKeys, removePrefixIfExists, restOrm, restRequest, sortAndSerializeQueryObject, timeout, toastOptions, toastOptionsDevs, userCustomClearCache, warn };
|
|
1644
1748
|
//# sourceMappingURL=index.esm.js.map
|