@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.
- package/dist/index.cjs.js +58 -7
- package/dist/index.cjs.js.map +1 -1
- package/dist/index.esm.js +58 -8
- package/dist/index.esm.js.map +1 -1
- package/dist/types/ormInterfaces.d.ts +1 -0
- package/dist/utils/cacheManager.d.ts +1 -0
- package/dist/utils/logSql.d.ts +1 -1
- package/package.json +2 -2
- package/src/__tests__/cacheManager.test.ts +27 -1
- package/src/__tests__/httpExecutor.cacheEviction.test.ts +70 -0
- package/src/__tests__/logSql.test.ts +16 -0
- package/src/__tests__/sakila-db/C6.js +1 -1
- package/src/__tests__/sakila-db/C6.mysqldump.json +1 -1
- package/src/__tests__/sakila-db/C6.mysqldump.sql +1 -1
- package/src/__tests__/sakila-db/C6.ts +1 -1
- package/src/__tests__/sakila-db/sqlResponses/C6.actor.post.json +3 -3
- package/src/__tests__/sakila-db/sqlResponses/C6.actor.post.latest.json +3 -3
- package/src/__tests__/sakila-db/sqlResponses/C6.actor.put.json +1 -1
- package/src/__tests__/sakila-db/sqlResponses/C6.actor.put.lookup.json +3 -3
- package/src/__tests__/sakila-db/sqlResponses/C6.address.post.json +5 -5
- package/src/__tests__/sakila-db/sqlResponses/C6.address.post.latest.json +5 -5
- package/src/__tests__/sakila-db/sqlResponses/C6.address.put.json +1 -1
- package/src/__tests__/sakila-db/sqlResponses/C6.address.put.lookup.json +5 -5
- package/src/__tests__/sakila-db/sqlResponses/C6.category.post.json +2 -2
- package/src/__tests__/sakila-db/sqlResponses/C6.category.post.latest.json +2 -2
- package/src/__tests__/sakila-db/sqlResponses/C6.category.put.json +1 -1
- package/src/__tests__/sakila-db/sqlResponses/C6.category.put.lookup.json +2 -2
- package/src/__tests__/sakila-db/sqlResponses/C6.city.post.json +2 -2
- package/src/__tests__/sakila-db/sqlResponses/C6.city.post.latest.json +2 -2
- package/src/__tests__/sakila-db/sqlResponses/C6.city.put.json +1 -1
- package/src/__tests__/sakila-db/sqlResponses/C6.city.put.lookup.json +2 -2
- package/src/__tests__/sakila-db/sqlResponses/C6.country.post.json +2 -2
- package/src/__tests__/sakila-db/sqlResponses/C6.country.post.latest.json +2 -2
- package/src/__tests__/sakila-db/sqlResponses/C6.country.put.json +1 -1
- package/src/__tests__/sakila-db/sqlResponses/C6.country.put.lookup.json +2 -2
- package/src/__tests__/sakila-db/sqlResponses/C6.customer.post.json +5 -5
- package/src/__tests__/sakila-db/sqlResponses/C6.customer.post.latest.json +5 -5
- package/src/__tests__/sakila-db/sqlResponses/C6.customer.put.json +1 -1
- package/src/__tests__/sakila-db/sqlResponses/C6.customer.put.lookup.json +5 -5
- package/src/__tests__/sakila-db/sqlResponses/C6.film.post.json +2 -2
- package/src/__tests__/sakila-db/sqlResponses/C6.film.post.latest.json +2 -2
- package/src/__tests__/sakila-db/sqlResponses/C6.film.put.json +1 -1
- package/src/__tests__/sakila-db/sqlResponses/C6.film.put.lookup.json +2 -2
- package/src/__tests__/sakila-db/sqlResponses/C6.inventory.post.json +1 -1
- package/src/__tests__/sakila-db/sqlResponses/C6.inventory.post.latest.json +1 -1
- package/src/__tests__/sakila-db/sqlResponses/C6.inventory.put.json +1 -1
- package/src/__tests__/sakila-db/sqlResponses/C6.inventory.put.lookup.json +1 -1
- package/src/__tests__/sakila-db/sqlResponses/C6.language.post.json +2 -2
- package/src/__tests__/sakila-db/sqlResponses/C6.language.post.latest.json +2 -2
- package/src/__tests__/sakila-db/sqlResponses/C6.language.put.json +1 -1
- package/src/__tests__/sakila-db/sqlResponses/C6.language.put.lookup.json +2 -2
- package/src/__tests__/sakila-db/sqlResponses/C6.payment.post.json +2 -2
- package/src/__tests__/sakila-db/sqlResponses/C6.payment.post.latest.json +2 -2
- package/src/__tests__/sakila-db/sqlResponses/C6.payment.put.lookup.json +2 -2
- package/src/__tests__/sakila-db/sqlResponses/C6.rental.join.json +10 -10
- package/src/__tests__/sakila-db/sqlResponses/C6.rental.post.json +3 -3
- package/src/__tests__/sakila-db/sqlResponses/C6.rental.post.latest.json +3 -3
- package/src/__tests__/sakila-db/sqlResponses/C6.rental.put.json +1 -1
- package/src/__tests__/sakila-db/sqlResponses/C6.rental.put.lookup.json +3 -3
- package/src/__tests__/sqlExecutor.cacheEviction.test.ts +79 -0
- package/src/executors/HttpExecutor.ts +19 -3
- package/src/executors/SqlExecutor.ts +23 -5
- package/src/types/ormInterfaces.ts +4 -1
- package/src/utils/cacheManager.ts +25 -1
- 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.
|
|
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:
|
|
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 (!(
|
|
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:
|
|
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
|