@nmakarov/cli-toolkit 0.39.0 → 0.40.0
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/cli-runner.cjs +57 -11
- package/dist/cli-runner.cjs.map +1 -1
- package/dist/cli-runner.js +57 -11
- package/dist/cli-runner.js.map +1 -1
- package/dist/db.cjs +57 -11
- package/dist/db.cjs.map +1 -1
- package/dist/db.js +57 -11
- package/dist/db.js.map +1 -1
- package/dist/index.cjs +57 -11
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +57 -11
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/cli-runner.js
CHANGED
|
@@ -3263,6 +3263,41 @@ var Db = class _Db {
|
|
|
3263
3263
|
}
|
|
3264
3264
|
return stack.pop();
|
|
3265
3265
|
};
|
|
3266
|
+
const isTimeoutError = (error) => error?.name === "KnexTimeoutError" || /query timeout|timeout exceeded/i.test(String(error?.message ?? ""));
|
|
3267
|
+
const logQueryEntry = (query, start, { error } = {}) => {
|
|
3268
|
+
let executionTimeMs;
|
|
3269
|
+
if (start) {
|
|
3270
|
+
const [seconds, nanoseconds] = process.hrtime(start);
|
|
3271
|
+
executionTimeMs = (seconds * 1e3 + nanoseconds / 1e6).toFixed(2);
|
|
3272
|
+
} else if (error?.timeout != null) {
|
|
3273
|
+
executionTimeMs = Number(error.timeout).toFixed(2);
|
|
3274
|
+
} else {
|
|
3275
|
+
executionTimeMs = "?";
|
|
3276
|
+
}
|
|
3277
|
+
let status = "ok";
|
|
3278
|
+
if (error) {
|
|
3279
|
+
status = isTimeoutError(error) ? "timeout" : "error";
|
|
3280
|
+
}
|
|
3281
|
+
const logEntry = {
|
|
3282
|
+
sql: query?.sql,
|
|
3283
|
+
bindings: query?.bindings || [],
|
|
3284
|
+
executionTimeMs,
|
|
3285
|
+
status
|
|
3286
|
+
};
|
|
3287
|
+
if (error) {
|
|
3288
|
+
logEntry.error = error.message ?? String(error);
|
|
3289
|
+
}
|
|
3290
|
+
this.queriesLog.push(logEntry);
|
|
3291
|
+
const suffix = error ? ` | ${status}: ${logEntry.error}` : "";
|
|
3292
|
+
this.logger.debug?.(
|
|
3293
|
+
`[Db] Query: ${query?.sql} | Duration: ${executionTimeMs}ms${suffix}`
|
|
3294
|
+
);
|
|
3295
|
+
};
|
|
3296
|
+
const handleQueryError = (error, query) => {
|
|
3297
|
+
const start = popStart(query);
|
|
3298
|
+
logQueryEntry(query, start, { error });
|
|
3299
|
+
this.logger.error?.(`[Db] Query failed: ${query?.sql}`, error);
|
|
3300
|
+
};
|
|
3266
3301
|
this.knexInstance.on("query", (query) => {
|
|
3267
3302
|
pushStart(query);
|
|
3268
3303
|
});
|
|
@@ -3271,20 +3306,31 @@ var Db = class _Db {
|
|
|
3271
3306
|
if (!start) {
|
|
3272
3307
|
return;
|
|
3273
3308
|
}
|
|
3274
|
-
|
|
3275
|
-
const executionTimeMs = (seconds * 1e3 + nanoseconds / 1e6).toFixed(2);
|
|
3276
|
-
const logEntry = {
|
|
3277
|
-
sql: query.sql,
|
|
3278
|
-
bindings: query.bindings || [],
|
|
3279
|
-
executionTimeMs
|
|
3280
|
-
};
|
|
3281
|
-
this.queriesLog.push(logEntry);
|
|
3282
|
-
this.logger.debug?.(`[Db] Query: ${query.sql} | Duration: ${executionTimeMs}ms`);
|
|
3309
|
+
logQueryEntry(query, start);
|
|
3283
3310
|
});
|
|
3284
3311
|
this.knexInstance.on("query-error", (error, query) => {
|
|
3285
|
-
|
|
3286
|
-
this.logger.error?.(`[Db] Query failed: ${query.sql}`, error);
|
|
3312
|
+
handleQueryError(error, query);
|
|
3287
3313
|
});
|
|
3314
|
+
const hookBuilder = (builder) => {
|
|
3315
|
+
if (!builder || builder.__dbProfilerHooked) {
|
|
3316
|
+
return;
|
|
3317
|
+
}
|
|
3318
|
+
builder.__dbProfilerHooked = true;
|
|
3319
|
+
builder.on("query", pushStart);
|
|
3320
|
+
builder.on("query-error", handleQueryError);
|
|
3321
|
+
};
|
|
3322
|
+
const client = this.knexInstance.client;
|
|
3323
|
+
if (client && !client.__dbProfilerPatched) {
|
|
3324
|
+
client.__dbProfilerPatched = true;
|
|
3325
|
+
if (typeof client.queryBuilder === "function") {
|
|
3326
|
+
const origQueryBuilder = client.queryBuilder.bind(client);
|
|
3327
|
+
client.queryBuilder = (...args) => {
|
|
3328
|
+
const builder = origQueryBuilder(...args);
|
|
3329
|
+
hookBuilder(builder);
|
|
3330
|
+
return builder;
|
|
3331
|
+
};
|
|
3332
|
+
}
|
|
3333
|
+
}
|
|
3288
3334
|
}
|
|
3289
3335
|
getQueryLog() {
|
|
3290
3336
|
return [...this.queriesLog];
|