@carbonorm/carbonnode 3.7.6 → 3.7.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 (38) hide show
  1. package/README.md +1 -1
  2. package/dist/api/orm/builders/AggregateBuilder.d.ts +1 -0
  3. package/dist/api/types/ormInterfaces.d.ts +2 -2
  4. package/dist/api/utils/cacheManager.d.ts +1 -1
  5. package/dist/api/utils/normalizeSingularRequest.d.ts +10 -0
  6. package/dist/index.cjs.js +175 -32
  7. package/dist/index.cjs.js.map +1 -1
  8. package/dist/index.d.ts +1 -0
  9. package/dist/index.esm.js +176 -34
  10. package/dist/index.esm.js.map +1 -1
  11. package/package.json +11 -6
  12. package/scripts/assets/handlebars/C6.test.ts.handlebars +55 -80
  13. package/scripts/assets/handlebars/C6.ts.handlebars +28 -2
  14. package/scripts/generateRestBindings.cjs +17 -6
  15. package/scripts/generateRestBindings.ts +22 -8
  16. package/src/__tests__/fixtures/c6.fixture.ts +74 -0
  17. package/src/__tests__/normalizeSingularRequest.test.ts +95 -0
  18. package/src/__tests__/sakila-db/C6.js +1487 -0
  19. package/src/__tests__/sakila-db/C6.test.ts +63 -0
  20. package/src/__tests__/sakila-db/C6.ts +2206 -0
  21. package/src/__tests__/sakila-db/sakila-data.sql +46444 -0
  22. package/src/__tests__/sakila-db/sakila-schema.sql +686 -0
  23. package/src/__tests__/sakila-db/sakila.mwb +0 -0
  24. package/src/__tests__/sakila.generated.test.ts +46 -0
  25. package/src/__tests__/sqlBuilders.complex.test.ts +134 -0
  26. package/src/__tests__/sqlBuilders.test.ts +121 -0
  27. package/src/api/convertForRequestBody.ts +1 -1
  28. package/src/api/executors/HttpExecutor.ts +14 -3
  29. package/src/api/executors/SqlExecutor.ts +14 -1
  30. package/src/api/orm/builders/AggregateBuilder.ts +3 -0
  31. package/src/api/orm/builders/ConditionBuilder.ts +34 -11
  32. package/src/api/orm/builders/PaginationBuilder.ts +10 -4
  33. package/src/api/orm/queries/SelectQueryBuilder.ts +3 -0
  34. package/src/api/orm/queries/UpdateQueryBuilder.ts +2 -1
  35. package/src/api/types/ormInterfaces.ts +3 -4
  36. package/src/api/utils/cacheManager.ts +1 -1
  37. package/src/api/utils/normalizeSingularRequest.ts +138 -0
  38. package/src/index.ts +1 -0
package/dist/index.esm.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import axios from 'axios';
2
2
  import Qs from 'qs';
3
- import { __assign, __awaiter, __generator, __extends, __spreadArray } from 'tslib';
3
+ import { __assign, __awaiter, __generator, __spreadArray, __rest, __extends } from 'tslib';
4
4
  import { toast } from 'react-toastify';
5
5
  import namedPlaceholders from 'named-placeholders';
6
6
  import { Buffer as Buffer$1 } from 'buffer';
@@ -590,6 +590,95 @@ function removeInvalidKeys(request, c6Tables) {
590
590
  return intersection;
591
591
  }
592
592
 
593
+ /**
594
+ * Converts a singular T-shaped request into complex ORM format for GET/PUT/DELETE
595
+ * Enforces that all primary keys are present for singular syntax and that the table has PKs.
596
+ * Optionally accepts a previously removed primary key (key/value) to reconstruct WHERE.
597
+ */
598
+ function normalizeSingularRequest(requestMethod, request, restModel, removedPrimary) {
599
+ var _a, _b;
600
+ if (request == null || typeof request !== 'object')
601
+ return request;
602
+ var specialKeys = new Set([
603
+ C6Constants.SELECT,
604
+ C6Constants.UPDATE,
605
+ C6Constants.DELETE,
606
+ C6Constants.WHERE,
607
+ C6Constants.JOIN,
608
+ C6Constants.PAGINATION,
609
+ ]);
610
+ // Determine if the request is already complex (has any special key besides PAGINATION)
611
+ var keys = Object.keys(request);
612
+ var hasComplexKeys = keys.some(function (k) { return k !== C6Constants.PAGINATION && specialKeys.has(k); });
613
+ if (hasComplexKeys)
614
+ return request; // already complex
615
+ // We treat it as singular when it's not complex.
616
+ // For GET, PUT, DELETE only
617
+ if (!(requestMethod === C6Constants.GET || requestMethod === C6Constants.PUT || requestMethod === C6Constants.DELETE)) {
618
+ return request;
619
+ }
620
+ var pkShorts = Array.isArray(restModel.PRIMARY_SHORT) ? __spreadArray([], restModel.PRIMARY_SHORT, true) : [];
621
+ if (!pkShorts.length) {
622
+ throw new Error("Table (".concat(restModel.TABLE_NAME, ") has no primary key; singular request syntax is not allowed."));
623
+ }
624
+ // Build pk map from request + possibly removed primary key
625
+ var pkValues = {};
626
+ for (var _i = 0, pkShorts_1 = pkShorts; _i < pkShorts_1.length; _i++) {
627
+ var pk = pkShorts_1[_i];
628
+ var fromRequest = request[pk];
629
+ if (fromRequest !== undefined && fromRequest !== null) {
630
+ pkValues[pk] = fromRequest;
631
+ continue;
632
+ }
633
+ if (removedPrimary && removedPrimary.key === pk) {
634
+ pkValues[pk] = removedPrimary.value;
635
+ continue;
636
+ }
637
+ }
638
+ var missing = pkShorts.filter(function (pk) { return !(pk in pkValues); });
639
+ if (missing.length) {
640
+ throw new Error("Singular request requires all primary key(s) [".concat(pkShorts.join(', '), "] for table (").concat(restModel.TABLE_NAME, "). Missing: [").concat(missing.join(', '), "]"));
641
+ }
642
+ // Strip API metadata that should remain at root
643
+ var _c = request, dataInsertMultipleRows = _c.dataInsertMultipleRows, cacheResults = _c.cacheResults, fetchDependencies = _c.fetchDependencies, debug = _c.debug, success = _c.success, error = _c.error, rest = __rest(_c, ["dataInsertMultipleRows", "cacheResults", "fetchDependencies", "debug", "success", "error"]);
644
+ if (requestMethod === C6Constants.GET) {
645
+ var normalized_1 = {
646
+ WHERE: __assign({}, pkValues),
647
+ };
648
+ // Preserve pagination if any was added previously
649
+ if (request[C6Constants.PAGINATION]) {
650
+ normalized_1[C6Constants.PAGINATION] = request[C6Constants.PAGINATION];
651
+ }
652
+ return __assign(__assign({}, normalized_1), { dataInsertMultipleRows: dataInsertMultipleRows, cacheResults: cacheResults, fetchDependencies: fetchDependencies, debug: debug, success: success, error: error });
653
+ }
654
+ if (requestMethod === C6Constants.DELETE) {
655
+ var normalized_2 = (_a = {},
656
+ _a[C6Constants.DELETE] = true,
657
+ _a.WHERE = __assign({}, pkValues),
658
+ _a);
659
+ return __assign(__assign({}, normalized_2), { dataInsertMultipleRows: dataInsertMultipleRows, cacheResults: cacheResults, fetchDependencies: fetchDependencies, debug: debug, success: success, error: error });
660
+ }
661
+ // PUT
662
+ var updateBody = {};
663
+ for (var _d = 0, _e = Object.keys(rest); _d < _e.length; _d++) {
664
+ var k = _e[_d];
665
+ if (pkShorts.includes(k))
666
+ continue; // don't update PK columns
667
+ // Skip special request keys if any slipped through
668
+ if (specialKeys.has(k))
669
+ continue;
670
+ updateBody[k] = rest[k];
671
+ }
672
+ if (Object.keys(updateBody).length === 0) {
673
+ throw new Error("Singular PUT request for table (".concat(restModel.TABLE_NAME, ") must include at least one non-primary field to update."));
674
+ }
675
+ var normalized = (_b = {},
676
+ _b[C6Constants.UPDATE] = updateBody,
677
+ _b.WHERE = __assign({}, pkValues),
678
+ _b);
679
+ return __assign(__assign({}, normalized), { dataInsertMultipleRows: dataInsertMultipleRows, cacheResults: cacheResults, fetchDependencies: fetchDependencies, debug: debug, success: success, error: error });
680
+ }
681
+
593
682
  // do not remove entries from this array. It is used to track the progress of API requests.
594
683
  // position in array is important. Do not sort. To not add to begging.
595
684
  var apiRequestCache = [];
@@ -727,7 +816,7 @@ var HttpExecutor = /** @class */ (function (_super) {
727
816
  query[C6.PAGINATION][C6.LIMIT] = query[C6.PAGINATION][C6.LIMIT] || 100;
728
817
  }
729
818
  apiRequest = function () { return __awaiter(_this, void 0, void 0, function () {
730
- var _a, debug, _b, cacheResults, dataInsertMultipleRows, success, _c, fetchDependencies, _d, error, querySerialized, cacheResult, cachingConfirmed, cacheCheck, cacheCheck, addBackPK, apiResponse, returnGetNextPageFunction, restRequestUri, needsConditionOrPrimaryCheck, TABLES, primaryKey, removedPkValue_1, axiosActiveRequest;
819
+ var _a, debug, _b, cacheResults, dataInsertMultipleRows, success, _c, fetchDependencies, _d, error, querySerialized, cacheResult, cachingConfirmed, cacheCheck, cacheCheck, addBackPK, removedPrimaryKV, apiResponse, returnGetNextPageFunction, restRequestUri, needsConditionOrPrimaryCheck, TABLES, primaryKey, removedPkValue_1, axiosActiveRequest;
731
820
  var _e;
732
821
  var _this = this;
733
822
  var _f, _g, _h, _j, _k, _l;
@@ -847,6 +936,7 @@ var HttpExecutor = /** @class */ (function (_super) {
847
936
  && primaryKey in query) {
848
937
  restRequestUri += query[primaryKey] + '/';
849
938
  removedPkValue_1 = query[primaryKey];
939
+ removedPrimaryKV = { key: primaryKey, value: removedPkValue_1 };
850
940
  addBackPK = function () {
851
941
  query !== null && query !== void 0 ? query : (query = {});
852
942
  query[primaryKey] = removedPkValue_1;
@@ -875,9 +965,11 @@ var HttpExecutor = /** @class */ (function (_super) {
875
965
  var baseConfig = {
876
966
  withCredentials: withCredentials,
877
967
  };
968
+ // Normalize singular request (GET/PUT/DELETE) into complex ORM shape
969
+ var normalizedQuery = normalizeSingularRequest(requestMethod, query, restModel, removedPrimaryKV);
878
970
  switch (requestMethod) {
879
971
  case GET:
880
- return [__assign(__assign({}, baseConfig), { params: query })];
972
+ return [__assign(__assign({}, baseConfig), { params: normalizedQuery })];
881
973
  case POST:
882
974
  if (dataInsertMultipleRows !== undefined) {
883
975
  return [
@@ -887,9 +979,9 @@ var HttpExecutor = /** @class */ (function (_super) {
887
979
  }
888
980
  return [convert(query), baseConfig];
889
981
  case PUT:
890
- return [convert(query), baseConfig];
982
+ return [convert(normalizedQuery), baseConfig];
891
983
  case DELETE:
892
- return [__assign(__assign({}, baseConfig), { data: convert(query) })];
984
+ return [__assign(__assign({}, baseConfig), { data: convert(normalizedQuery) })];
893
985
  default:
894
986
  throw new Error("The request method (".concat(requestMethod, ") was not recognized."));
895
987
  }
@@ -1210,7 +1302,9 @@ function convertHexIfBinary(_col, val, columnDef) {
1210
1302
  var AggregateBuilder = /** @class */ (function (_super) {
1211
1303
  __extends(AggregateBuilder, _super);
1212
1304
  function AggregateBuilder() {
1213
- return _super !== null && _super.apply(this, arguments) || this;
1305
+ var _this = _super !== null && _super.apply(this, arguments) || this;
1306
+ _this.selectAliases = new Set();
1307
+ return _this;
1214
1308
  }
1215
1309
  AggregateBuilder.prototype.buildAggregateField = function (field) {
1216
1310
  var _this = this;
@@ -1238,6 +1332,7 @@ var AggregateBuilder = /** @class */ (function (_super) {
1238
1332
  expr = "".concat(F, "(").concat(argList, ")");
1239
1333
  }
1240
1334
  if (alias) {
1335
+ this.selectAliases.add(alias);
1241
1336
  expr += " AS ".concat(alias);
1242
1337
  }
1243
1338
  this.config.verbose && console.log("[SELECT] ".concat(expr));
@@ -1304,12 +1399,21 @@ var ConditionBuilder = /** @class */ (function (_super) {
1304
1399
  throw new Error("Method not implemented.");
1305
1400
  };
1306
1401
  ConditionBuilder.prototype.isTableReference = function (val) {
1307
- var _a, _b, _c;
1308
- if (typeof val !== 'string' || !val.includes('.'))
1402
+ var _a, _b, _c, _d;
1403
+ if (typeof val !== 'string')
1404
+ return false;
1405
+ // Support aggregate aliases (e.g., SELECT COUNT(x) AS cnt ... HAVING cnt > 1)
1406
+ if (!val.includes('.')) {
1407
+ var isIdentifier = /^[A-Za-z_][A-Za-z0-9_]*$/.test(val);
1408
+ // selectAliases is defined in AggregateBuilder
1409
+ if (isIdentifier && ((_a = this.selectAliases) === null || _a === void 0 ? void 0 : _a.has(val))) {
1410
+ return true;
1411
+ }
1309
1412
  return false;
1310
- var _d = val.split('.'), prefix = _d[0], column = _d[1];
1311
- var tableName = (_a = this.aliasMap[prefix]) !== null && _a !== void 0 ? _a : prefix;
1312
- var table = (_c = (_b = this.config.C6) === null || _b === void 0 ? void 0 : _b.TABLES) === null || _c === void 0 ? void 0 : _c[tableName];
1413
+ }
1414
+ var _e = val.split('.'), prefix = _e[0], column = _e[1];
1415
+ var tableName = (_b = this.aliasMap[prefix]) !== null && _b !== void 0 ? _b : prefix;
1416
+ var table = (_d = (_c = this.config.C6) === null || _c === void 0 ? void 0 : _c.TABLES) === null || _d === void 0 ? void 0 : _d[tableName];
1313
1417
  if (!table || !table.COLUMNS)
1314
1418
  return false;
1315
1419
  var fullKey = "".concat(tableName, ".").concat(column);
@@ -1322,8 +1426,14 @@ var ConditionBuilder = /** @class */ (function (_super) {
1322
1426
  }
1323
1427
  };
1324
1428
  ConditionBuilder.prototype.addParam = function (params, column, value) {
1325
- var _a, _b;
1326
- var columnDef = (_b = (_a = this.config.C6[column.split('.')[0]]) === null || _a === void 0 ? void 0 : _a.TYPE_VALIDATION) === null || _b === void 0 ? void 0 : _b[column];
1429
+ var _a, _b, _c;
1430
+ // Determine column definition from C6.TABLES to support type-aware conversions (e.g., BINARY hex -> Buffer)
1431
+ var columnDef;
1432
+ if (typeof column === 'string' && column.includes('.')) {
1433
+ var tableName = column.split('.', 2)[0];
1434
+ var table = (_b = (_a = this.config.C6) === null || _a === void 0 ? void 0 : _a.TABLES) === null || _b === void 0 ? void 0 : _b[tableName];
1435
+ columnDef = (_c = table === null || table === void 0 ? void 0 : table.TYPE_VALIDATION) === null || _c === void 0 ? void 0 : _c[column];
1436
+ }
1327
1437
  var val = convertHexIfBinary(column, value, columnDef);
1328
1438
  if (this.useNamedParams) {
1329
1439
  var key = "param".concat(Object.keys(params).length);
@@ -1367,7 +1477,7 @@ var ConditionBuilder = /** @class */ (function (_super) {
1367
1477
  var leftIsCol = _this.isColumnRef(column);
1368
1478
  var leftIsRef = _this.isTableReference(column);
1369
1479
  var rightIsCol = typeof value === 'string' && _this.isColumnRef(value);
1370
- if (!leftIsCol && !rightIsCol) {
1480
+ if (!leftIsCol && !leftIsRef && !rightIsCol) {
1371
1481
  throw new Error("Potential SQL injection detected: '".concat(column, " ").concat(op, " ").concat(value, "'"));
1372
1482
  }
1373
1483
  _this.validateOperator(op);
@@ -1434,21 +1544,22 @@ var ConditionBuilder = /** @class */ (function (_super) {
1434
1544
  var parts = [];
1435
1545
  var buildFromObject = function (obj, mode) {
1436
1546
  var subParts = [];
1437
- for (var _i = 0, _a = Object.entries(obj); _i < _a.length; _i++) {
1438
- var _b = _a[_i], k = _b[0], v = _b[1];
1439
- // numeric keys represent nested OR groups
1440
- if (!isNaN(Number(k))) {
1441
- var sub = _this.buildBooleanJoinedConditions(v, false, params);
1442
- if (sub)
1443
- subParts.push(sub);
1444
- continue;
1445
- }
1547
+ var entries = Object.entries(obj);
1548
+ var nonNumeric = entries.filter(function (_a) {
1549
+ var k = _a[0];
1550
+ return isNaN(Number(k));
1551
+ });
1552
+ var numeric = entries.filter(function (_a) {
1553
+ var k = _a[0];
1554
+ return !isNaN(Number(k));
1555
+ });
1556
+ var processEntry = function (k, v) {
1446
1557
  if (typeof v === 'object' && v !== null && Object.keys(v).length === 1) {
1447
- var _c = Object.entries(v)[0], op = _c[0], val = _c[1];
1558
+ var _a = Object.entries(v)[0], op = _a[0], val = _a[1];
1448
1559
  subParts.push(addCondition(k, op, val));
1449
1560
  }
1450
1561
  else if (Array.isArray(v) && v.length >= 2 && typeof v[0] === 'string') {
1451
- var _d = v, op = _d[0], val = _d[1];
1562
+ var _b = v, op = _b[0], val = _b[1];
1452
1563
  subParts.push(addCondition(k, op, val));
1453
1564
  }
1454
1565
  else if (typeof v === 'object' && v !== null) {
@@ -1459,6 +1570,18 @@ var ConditionBuilder = /** @class */ (function (_super) {
1459
1570
  else {
1460
1571
  subParts.push(addCondition(k, '=', v));
1461
1572
  }
1573
+ };
1574
+ // Process non-numeric keys first to preserve intuitive insertion order for params
1575
+ for (var _i = 0, nonNumeric_1 = nonNumeric; _i < nonNumeric_1.length; _i++) {
1576
+ var _a = nonNumeric_1[_i], k = _a[0], v = _a[1];
1577
+ processEntry(k, v);
1578
+ }
1579
+ // Then process numeric keys (treated as grouped OR conditions)
1580
+ for (var _b = 0, numeric_1 = numeric; _b < numeric_1.length; _b++) {
1581
+ var _c = numeric_1[_b]; _c[0]; var v = _c[1];
1582
+ var sub = _this.buildBooleanJoinedConditions(v, false, params);
1583
+ if (sub)
1584
+ subParts.push(sub);
1462
1585
  }
1463
1586
  return subParts.join(" ".concat(mode ? 'AND' : 'OR', " "));
1464
1587
  };
@@ -1595,13 +1718,12 @@ var PaginationBuilder = /** @class */ (function (_super) {
1595
1718
  */
1596
1719
  PaginationBuilder.prototype.buildPaginationClause = function (pagination) {
1597
1720
  var _this = this;
1598
- var _a;
1599
1721
  var sql = "";
1600
1722
  /* -------- ORDER BY -------- */
1601
1723
  if (pagination === null || pagination === void 0 ? void 0 : pagination[C6Constants.ORDER]) {
1602
1724
  var orderParts = [];
1603
- for (var _i = 0, _b = Object.entries(pagination[C6Constants.ORDER]); _i < _b.length; _i++) {
1604
- var _c = _b[_i], key = _c[0], val = _c[1];
1725
+ for (var _i = 0, _a = Object.entries(pagination[C6Constants.ORDER]); _i < _a.length; _i++) {
1726
+ var _b = _a[_i], key = _b[0], val = _b[1];
1605
1727
  // FUNCTION CALL: val is an array of args
1606
1728
  if (Array.isArray(val)) {
1607
1729
  var args = val
@@ -1620,9 +1742,16 @@ var PaginationBuilder = /** @class */ (function (_super) {
1620
1742
  /* -------- LIMIT / OFFSET -------- */
1621
1743
  if ((pagination === null || pagination === void 0 ? void 0 : pagination[C6Constants.LIMIT]) != null) {
1622
1744
  var lim = parseInt(pagination[C6Constants.LIMIT], 10);
1623
- var page = parseInt((_a = pagination[C6Constants.PAGE]) !== null && _a !== void 0 ? _a : 1, 10);
1624
- var offset = (page - 1) * lim;
1625
- sql += " LIMIT ".concat(offset, ", ").concat(lim);
1745
+ var pageRaw = pagination[C6Constants.PAGE];
1746
+ var pageParsed = parseInt(pageRaw !== null && pageRaw !== void 0 ? pageRaw : 1, 10);
1747
+ var page = isFinite(pageParsed) && pageParsed > 1 ? pageParsed : 1;
1748
+ if (page === 1) {
1749
+ sql += " LIMIT ".concat(lim);
1750
+ }
1751
+ else {
1752
+ var offset = (page - 1) * lim;
1753
+ sql += " LIMIT ".concat(offset, ", ").concat(lim);
1754
+ }
1626
1755
  }
1627
1756
  this.config.verbose && console.log("[PAGINATION] ".concat(sql.trim()));
1628
1757
  return sql;
@@ -1640,6 +1769,10 @@ var SelectQueryBuilder = /** @class */ (function (_super) {
1640
1769
  var _a;
1641
1770
  if (isSubSelect === void 0) { isSubSelect = false; }
1642
1771
  this.aliasMap = {};
1772
+ // reset any previously collected SELECT aliases (from AggregateBuilder)
1773
+ // @ts-ignore
1774
+ if (this.selectAliases && this.selectAliases.clear)
1775
+ this.selectAliases.clear();
1643
1776
  var args = this.request;
1644
1777
  this.initAlias(table, args.JOIN);
1645
1778
  var params = this.useNamedParams ? {} : [];
@@ -1693,9 +1826,10 @@ var UpdateQueryBuilder = /** @class */ (function (_super) {
1693
1826
  if (!(C6C.UPDATE in this.request)) {
1694
1827
  throw new Error("No update data provided in the request.");
1695
1828
  }
1696
- var setClauses = Object.entries(this.request[C6C.UPDATE]).map(function (_a) {
1829
+ var setClauses = Object.entries(this.request[C6C.UPDATE])
1830
+ .map(function (_a) {
1697
1831
  var col = _a[0], val = _a[1];
1698
- return _this.addParam(params, col, val);
1832
+ return "`".concat(col, "` = ").concat(_this.addParam(params, col, val));
1699
1833
  });
1700
1834
  sql += " SET ".concat(setClauses.join(', '));
1701
1835
  if (args.WHERE) {
@@ -1727,6 +1861,14 @@ var SqlExecutor = /** @class */ (function (_super) {
1727
1861
  case 0:
1728
1862
  TABLE_NAME = this.config.restModel.TABLE_NAME;
1729
1863
  method = this.config.requestMethod;
1864
+ // Normalize singular T-shaped requests into complex ORM shape (GET/PUT/DELETE)
1865
+ try {
1866
+ this.request = normalizeSingularRequest(method, this.request, this.config.restModel, undefined);
1867
+ }
1868
+ catch (e) {
1869
+ // Surface normalization errors early
1870
+ throw e;
1871
+ }
1730
1872
  this.config.verbose && console.log("[SQL EXECUTOR] \u25B6\uFE0F Executing ".concat(method, " on table \"").concat(TABLE_NAME, "\""));
1731
1873
  this.config.verbose && console.log("[SQL EXECUTOR] \uD83E\uDDE9 Request:", this.request);
1732
1874
  _a = method;
@@ -2091,5 +2233,5 @@ function isVerbose () {
2091
2233
  return ['true', '1', 'yes', 'on'].includes(envVerbose.toLowerCase());
2092
2234
  }
2093
2235
 
2094
- export { A, AggregateBuilder, C6C, C6Constants, ConditionBuilder, DELETE, DeleteQueryBuilder, Executor, ExpressHandler, F, GET, HttpExecutor, JoinBuilder, POST, PUT, PaginationBuilder, PostQueryBuilder, SelectQueryBuilder, SqlExecutor, TestRestfulResponse, UpdateQueryBuilder, apiRequestCache, axiosInstance, bbox, checkAllRequestsComplete, checkCache, clearCache, convertForRequestBody, convertHexIfBinary, determineRuntimeJsType, distSphere, eFetchDependencies, error, fieldEq, getEnvVar, getPrimaryKeyTypes, group, info, isLocal, isNode, isTest, isVerbose, onError, onSuccess, removeInvalidKeys, removePrefixIfExists, restOrm, restRequest, sortAndSerializeQueryObject, stContains, timeout, toastOptions, toastOptionsDevs, userCustomClearCache, warn };
2236
+ export { A, AggregateBuilder, C6C, C6Constants, ConditionBuilder, DELETE, DeleteQueryBuilder, Executor, ExpressHandler, F, GET, HttpExecutor, JoinBuilder, POST, PUT, PaginationBuilder, PostQueryBuilder, SelectQueryBuilder, SqlExecutor, TestRestfulResponse, UpdateQueryBuilder, apiRequestCache, axiosInstance, bbox, checkAllRequestsComplete, checkCache, clearCache, convertForRequestBody, convertHexIfBinary, determineRuntimeJsType, distSphere, eFetchDependencies, error, fieldEq, getEnvVar, getPrimaryKeyTypes, group, info, isLocal, isNode, isTest, isVerbose, normalizeSingularRequest, onError, onSuccess, removeInvalidKeys, removePrefixIfExists, restOrm, restRequest, sortAndSerializeQueryObject, stContains, timeout, toastOptions, toastOptionsDevs, userCustomClearCache, warn };
2095
2237
  //# sourceMappingURL=index.esm.js.map