@carbonorm/carbonnode 6.0.17 → 6.0.19

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 (65) hide show
  1. package/dist/index.cjs.js +58 -7
  2. package/dist/index.cjs.js.map +1 -1
  3. package/dist/index.esm.js +58 -8
  4. package/dist/index.esm.js.map +1 -1
  5. package/dist/types/ormInterfaces.d.ts +1 -0
  6. package/dist/utils/cacheManager.d.ts +1 -0
  7. package/dist/utils/logSql.d.ts +1 -1
  8. package/package.json +2 -2
  9. package/src/__tests__/cacheManager.test.ts +27 -1
  10. package/src/__tests__/httpExecutor.cacheEviction.test.ts +70 -0
  11. package/src/__tests__/logSql.test.ts +16 -0
  12. package/src/__tests__/sakila-db/C6.js +1 -1
  13. package/src/__tests__/sakila-db/C6.mysqldump.json +1 -1
  14. package/src/__tests__/sakila-db/C6.mysqldump.sql +1 -1
  15. package/src/__tests__/sakila-db/C6.ts +1 -1
  16. package/src/__tests__/sakila-db/sqlResponses/C6.actor.post.json +3 -3
  17. package/src/__tests__/sakila-db/sqlResponses/C6.actor.post.latest.json +3 -3
  18. package/src/__tests__/sakila-db/sqlResponses/C6.actor.put.json +1 -1
  19. package/src/__tests__/sakila-db/sqlResponses/C6.actor.put.lookup.json +3 -3
  20. package/src/__tests__/sakila-db/sqlResponses/C6.address.post.json +5 -5
  21. package/src/__tests__/sakila-db/sqlResponses/C6.address.post.latest.json +5 -5
  22. package/src/__tests__/sakila-db/sqlResponses/C6.address.put.json +1 -1
  23. package/src/__tests__/sakila-db/sqlResponses/C6.address.put.lookup.json +5 -5
  24. package/src/__tests__/sakila-db/sqlResponses/C6.category.post.json +2 -2
  25. package/src/__tests__/sakila-db/sqlResponses/C6.category.post.latest.json +2 -2
  26. package/src/__tests__/sakila-db/sqlResponses/C6.category.put.json +1 -1
  27. package/src/__tests__/sakila-db/sqlResponses/C6.category.put.lookup.json +2 -2
  28. package/src/__tests__/sakila-db/sqlResponses/C6.city.post.json +2 -2
  29. package/src/__tests__/sakila-db/sqlResponses/C6.city.post.latest.json +2 -2
  30. package/src/__tests__/sakila-db/sqlResponses/C6.city.put.json +1 -1
  31. package/src/__tests__/sakila-db/sqlResponses/C6.city.put.lookup.json +2 -2
  32. package/src/__tests__/sakila-db/sqlResponses/C6.country.post.json +2 -2
  33. package/src/__tests__/sakila-db/sqlResponses/C6.country.post.latest.json +2 -2
  34. package/src/__tests__/sakila-db/sqlResponses/C6.country.put.json +1 -1
  35. package/src/__tests__/sakila-db/sqlResponses/C6.country.put.lookup.json +2 -2
  36. package/src/__tests__/sakila-db/sqlResponses/C6.customer.post.json +5 -5
  37. package/src/__tests__/sakila-db/sqlResponses/C6.customer.post.latest.json +5 -5
  38. package/src/__tests__/sakila-db/sqlResponses/C6.customer.put.json +1 -1
  39. package/src/__tests__/sakila-db/sqlResponses/C6.customer.put.lookup.json +5 -5
  40. package/src/__tests__/sakila-db/sqlResponses/C6.film.post.json +2 -2
  41. package/src/__tests__/sakila-db/sqlResponses/C6.film.post.latest.json +2 -2
  42. package/src/__tests__/sakila-db/sqlResponses/C6.film.put.json +1 -1
  43. package/src/__tests__/sakila-db/sqlResponses/C6.film.put.lookup.json +2 -2
  44. package/src/__tests__/sakila-db/sqlResponses/C6.inventory.post.json +1 -1
  45. package/src/__tests__/sakila-db/sqlResponses/C6.inventory.post.latest.json +1 -1
  46. package/src/__tests__/sakila-db/sqlResponses/C6.inventory.put.json +1 -1
  47. package/src/__tests__/sakila-db/sqlResponses/C6.inventory.put.lookup.json +1 -1
  48. package/src/__tests__/sakila-db/sqlResponses/C6.language.post.json +2 -2
  49. package/src/__tests__/sakila-db/sqlResponses/C6.language.post.latest.json +2 -2
  50. package/src/__tests__/sakila-db/sqlResponses/C6.language.put.json +1 -1
  51. package/src/__tests__/sakila-db/sqlResponses/C6.language.put.lookup.json +2 -2
  52. package/src/__tests__/sakila-db/sqlResponses/C6.payment.post.json +2 -2
  53. package/src/__tests__/sakila-db/sqlResponses/C6.payment.post.latest.json +2 -2
  54. package/src/__tests__/sakila-db/sqlResponses/C6.payment.put.lookup.json +2 -2
  55. package/src/__tests__/sakila-db/sqlResponses/C6.rental.join.json +10 -10
  56. package/src/__tests__/sakila-db/sqlResponses/C6.rental.post.json +3 -3
  57. package/src/__tests__/sakila-db/sqlResponses/C6.rental.post.latest.json +3 -3
  58. package/src/__tests__/sakila-db/sqlResponses/C6.rental.put.json +1 -1
  59. package/src/__tests__/sakila-db/sqlResponses/C6.rental.put.lookup.json +3 -3
  60. package/src/__tests__/sqlExecutor.cacheEviction.test.ts +79 -0
  61. package/src/executors/HttpExecutor.ts +19 -3
  62. package/src/executors/SqlExecutor.ts +23 -5
  63. package/src/types/ormInterfaces.ts +4 -1
  64. package/src/utils/cacheManager.ts +25 -1
  65. package/src/utils/logSql.ts +3 -1
package/dist/index.esm.js CHANGED
@@ -951,7 +951,7 @@ function colorSql(sql) {
951
951
  return s;
952
952
  }
953
953
 
954
- var version = "6.0.17";
954
+ var version = "6.0.19";
955
955
 
956
956
  var DEFAULT_STEP = 8;
957
957
  function parseSemver(version) {
@@ -1037,6 +1037,8 @@ var cacheLabel = function (cacheStatus) {
1037
1037
  switch (cacheStatus) {
1038
1038
  case "hit":
1039
1039
  return "".concat(C.METHOD_COLORS.SELECT, "[CACHE HIT]").concat(C.RESET);
1040
+ case "evicted":
1041
+ return "".concat(C.WARN, "[CACHE EVICTED]").concat(C.RESET);
1040
1042
  case "ignored":
1041
1043
  return "".concat(C.WARN, "[CACHE IGNORED]").concat(C.RESET);
1042
1044
  default:
@@ -1114,7 +1116,6 @@ function checkCache(method, tableName, requestData, logContext) {
1114
1116
  var key = makeCacheKey(method, tableName, requestData);
1115
1117
  var cached = apiRequestCache.get(key);
1116
1118
  if (!cached) {
1117
- console.log('apiRequestCache.size', apiRequestCache.size);
1118
1119
  return false;
1119
1120
  }
1120
1121
  if (shouldLog(LogLevel.INFO, logContext)) {
@@ -1137,6 +1138,24 @@ function setCache(method, tableName, requestData, cacheEntry) {
1137
1138
  var key = makeCacheKey(method, tableName, requestData);
1138
1139
  apiRequestCache.set(key, cacheEntry);
1139
1140
  }
1141
+ function evictCacheEntry(method, tableName, requestData, logContext) {
1142
+ var _a, _b, _c, _d, _e;
1143
+ var key = makeCacheKey(method, tableName, requestData);
1144
+ var cached = apiRequestCache.get(key);
1145
+ var deleted = apiRequestCache.delete(key);
1146
+ if (deleted && shouldLog(LogLevel.INFO, logContext)) {
1147
+ var sql = (_d = (_c = (_b = (_a = cached === null || cached === void 0 ? void 0 : cached.response) === null || _a === void 0 ? void 0 : _a.data) === null || _b === void 0 ? void 0 : _b.sql) === null || _c === void 0 ? void 0 : _c.sql) !== null && _d !== void 0 ? _d : "";
1148
+ var sqlMethod = ((_e = sql.trim().split(/\s+/, 1)[0]) === null || _e === void 0 ? void 0 : _e.toUpperCase()) || method;
1149
+ logSql({
1150
+ allowListStatus: "not verified",
1151
+ cacheStatus: "evicted",
1152
+ context: logContext,
1153
+ method: sqlMethod,
1154
+ sql: sql,
1155
+ });
1156
+ }
1157
+ return deleted;
1158
+ }
1140
1159
 
1141
1160
  function sortAndSerializeQueryObject(tables, query) {
1142
1161
  var orderedQuery = Object.keys(query).sort().reduce(function (obj, key) {
@@ -1262,7 +1281,7 @@ var HttpExecutor = /** @class */ (function (_super) {
1262
1281
  }
1263
1282
  query = this.request;
1264
1283
  apiRequest = function () { return __awaiter(_this, void 0, void 0, function () {
1265
- var _a, debug, _b, cacheResults, dataInsertMultipleRows, success, _c, fetchDependencies, _d, error, cachingConfirmed, cacheRequestData, querySerialized, cachedRequest, apiResponse, restRequestUri, needsConditionOrPrimaryCheck, TABLES, primaryKeyList, primaryKeyFullyQualified, primaryKey, whereVal, whereIsEmpty, providedPrimary, primaryVal, axiosActiveRequest_1;
1284
+ var _a, debug, _b, cacheResults, dataInsertMultipleRows, success, _c, fetchDependencies, _d, error, cachingConfirmed, cacheRequestData, evictFromCache, querySerialized, cachedRequest, cachedData, apiResponse, restRequestUri, needsConditionOrPrimaryCheck, TABLES, primaryKeyList, primaryKeyFullyQualified, primaryKey, whereVal, whereIsEmpty, providedPrimary, primaryVal, axiosActiveRequest_1;
1266
1285
  var _e;
1267
1286
  var _this = this;
1268
1287
  var _f, _g, _h, _j, _k, _l;
@@ -1292,6 +1311,9 @@ var HttpExecutor = /** @class */ (function (_super) {
1292
1311
  query[C6.PAGINATION][C6.LIMIT] = query[C6.PAGINATION][C6.LIMIT] || 100;
1293
1312
  }
1294
1313
  cacheRequestData = JSON.parse(JSON.stringify(query !== null && query !== void 0 ? query : {}));
1314
+ evictFromCache = requestMethod === GET && cacheResults
1315
+ ? function () { return evictCacheEntry(requestMethod, tableName, cacheRequestData, logContext); }
1316
+ : undefined;
1295
1317
  querySerialized = sortAndSerializeQueryObject(tables, cacheRequestData !== null && cacheRequestData !== void 0 ? cacheRequestData : {});
1296
1318
  cachedRequest = false;
1297
1319
  if (cacheResults) {
@@ -1299,7 +1321,15 @@ var HttpExecutor = /** @class */ (function (_super) {
1299
1321
  }
1300
1322
  if (!cachedRequest) return [3 /*break*/, 2];
1301
1323
  return [4 /*yield*/, cachedRequest];
1302
- case 1: return [2 /*return*/, (_m.sent()).data];
1324
+ case 1:
1325
+ cachedData = (_m.sent()).data;
1326
+ if (evictFromCache
1327
+ && cachedData
1328
+ && typeof cachedData === "object"
1329
+ && Array.isArray(cachedData.rest)) {
1330
+ cachedData.evictFromCache = evictFromCache;
1331
+ }
1332
+ return [2 /*return*/, cachedData];
1303
1333
  case 2:
1304
1334
  if (cacheResults) {
1305
1335
  cachingConfirmed = true;
@@ -1490,7 +1520,7 @@ var HttpExecutor = /** @class */ (function (_super) {
1490
1520
  else {
1491
1521
  callback();
1492
1522
  }
1493
- if (!(C6.GET === requestMethod && this.isRestResponse(response))) return [3 /*break*/, 2];
1523
+ if (!(requestMethod === GET && this.isRestResponse(response))) return [3 /*break*/, 2];
1494
1524
  responseData_1 = response.data;
1495
1525
  pageLimit = (_a = query === null || query === void 0 ? void 0 : query[C6.PAGINATION]) === null || _a === void 0 ? void 0 : _a[C6.LIMIT];
1496
1526
  got = responseData_1.rest.length;
@@ -1501,6 +1531,9 @@ var HttpExecutor = /** @class */ (function (_super) {
1501
1531
  else {
1502
1532
  responseData_1.next = undefined; // short page => done
1503
1533
  }
1534
+ if (cachingConfirmed && evictFromCache) {
1535
+ responseData_1.evictFromCache = evictFromCache;
1536
+ }
1504
1537
  if (cachingConfirmed) {
1505
1538
  setCache(requestMethod, tableName, cacheRequestData, {
1506
1539
  requestArgumentsSerialized: querySerialized,
@@ -4067,7 +4100,7 @@ var SqlExecutor = /** @class */ (function (_super) {
4067
4100
  };
4068
4101
  SqlExecutor.prototype.runQuery = function () {
4069
4102
  return __awaiter(this, void 0, void 0, function () {
4070
- var method, tableName, logContext, cacheResults, cacheRequestData, requestArgumentsSerialized, cachedRequest, sqlExecution, sqlMethod, queryPromise, cacheRequest, cacheResponse;
4103
+ var method, tableName, logContext, cacheResults, cacheRequestData, requestArgumentsSerialized, evictFromCache, cachedRequest, cachedData, sqlExecution, sqlMethod, queryPromise, cacheRequest, cacheResponse;
4071
4104
  var _this = this;
4072
4105
  var _a, _b;
4073
4106
  return __generator(this, function (_c) {
@@ -4084,11 +4117,22 @@ var SqlExecutor = /** @class */ (function (_super) {
4084
4117
  requestArgumentsSerialized = cacheResults
4085
4118
  ? sortAndSerializeQueryObject(tableName, cacheRequestData !== null && cacheRequestData !== void 0 ? cacheRequestData : {})
4086
4119
  : undefined;
4120
+ evictFromCache = method === C6Constants.GET && cacheResults && cacheRequestData
4121
+ ? function () { return evictCacheEntry(method, tableName, cacheRequestData, logContext); }
4122
+ : undefined;
4087
4123
  if (!cacheResults) return [3 /*break*/, 2];
4088
4124
  cachedRequest = checkCache(method, tableName, cacheRequestData, logContext);
4089
4125
  if (!cachedRequest) return [3 /*break*/, 2];
4090
4126
  return [4 /*yield*/, cachedRequest];
4091
- case 1: return [2 /*return*/, (_c.sent()).data];
4127
+ case 1:
4128
+ cachedData = (_c.sent()).data;
4129
+ if (evictFromCache
4130
+ && cachedData
4131
+ && typeof cachedData === "object"
4132
+ && Array.isArray(cachedData.rest)) {
4133
+ cachedData.evictFromCache = evictFromCache;
4134
+ }
4135
+ return [2 /*return*/, cachedData];
4092
4136
  case 2:
4093
4137
  sqlExecution = this.buildSqlExecutionContext(method, tableName, logContext);
4094
4138
  sqlMethod = this.resolveSqlLogMethod(method, sqlExecution.sql);
@@ -4102,6 +4146,12 @@ var SqlExecutor = /** @class */ (function (_super) {
4102
4146
  case 3: return [2 /*return*/, _c.sent()];
4103
4147
  case 4:
4104
4148
  cacheRequest = queryPromise.then(function (data) {
4149
+ if (evictFromCache
4150
+ && data
4151
+ && typeof data === "object"
4152
+ && Array.isArray(data.rest)) {
4153
+ data.evictFromCache = evictFromCache;
4154
+ }
4105
4155
  return _this.createCacheResponseEnvelope(method, tableName, data);
4106
4156
  });
4107
4157
  setCache(method, tableName, cacheRequestData, {
@@ -4535,5 +4585,5 @@ function isVerbose() {
4535
4585
  return resolveLogLevel() >= LogLevel.DEBUG;
4536
4586
  }
4537
4587
 
4538
- export { A, AggregateBuilder, C6C, C6Constants, ConditionBuilder, DELETE, DeleteQueryBuilder, Executor, ExpressHandler, F, GET, HttpExecutor, JoinBuilder, LogLevel, POST, PUT, PaginationBuilder, PostQueryBuilder, SelectQueryBuilder, SqlExecutor, TestRestfulResponse, UpdateQueryBuilder, apiRequestCache, applyLogLevelDefaults, axiosInstance, bbox, carbonNodeQsStringify, checkAllRequestsComplete, checkCache, clearCache, collectSqlAllowListEntries, colorSql, compileSqlAllowList, convertForRequestBody, convertHexIfBinary, derivedTable, determineRuntimeJsType, distSphere, eFetchDependencies, error, extractSqlEntries, fieldEq, getEnv, getEnvBool, getEnvDebug, getEnvLogLevel, getLogContext, getPrimaryKeyTypes, group, info, isDerivedTableKey, isLocal, isNode, isTest, isVerbose, loadSqlAllowList, logSql, logWithLevel, normalizeSingularRequest, normalizeSql, notifyToast, onError, onSuccess, parseLogLevel, removeInvalidKeys, removePrefixIfExists, resolveDerivedTable, resolveLogLevel, restExpressRequest, restOrm, restRequest, setCache, setToastHandler, shouldLog, sortAndSerializeQueryObject, stContains, timeout, toastOptions, toastOptionsDevs, userCustomClearCache, versionToRgb as versionColor, warn };
4588
+ export { A, AggregateBuilder, C6C, C6Constants, ConditionBuilder, DELETE, DeleteQueryBuilder, Executor, ExpressHandler, F, GET, HttpExecutor, JoinBuilder, LogLevel, POST, PUT, PaginationBuilder, PostQueryBuilder, SelectQueryBuilder, SqlExecutor, TestRestfulResponse, UpdateQueryBuilder, apiRequestCache, applyLogLevelDefaults, axiosInstance, bbox, carbonNodeQsStringify, checkAllRequestsComplete, checkCache, clearCache, collectSqlAllowListEntries, colorSql, compileSqlAllowList, convertForRequestBody, convertHexIfBinary, derivedTable, determineRuntimeJsType, distSphere, eFetchDependencies, error, evictCacheEntry, extractSqlEntries, fieldEq, getEnv, getEnvBool, getEnvDebug, getEnvLogLevel, getLogContext, getPrimaryKeyTypes, group, info, isDerivedTableKey, isLocal, isNode, isTest, isVerbose, loadSqlAllowList, logSql, logWithLevel, normalizeSingularRequest, normalizeSql, notifyToast, onError, onSuccess, parseLogLevel, removeInvalidKeys, removePrefixIfExists, resolveDerivedTable, resolveLogLevel, restExpressRequest, restOrm, restRequest, setCache, setToastHandler, shouldLog, sortAndSerializeQueryObject, stContains, timeout, toastOptions, toastOptionsDevs, userCustomClearCache, versionToRgb as versionColor, warn };
4539
4589
  //# sourceMappingURL=index.esm.js.map