@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.cjs
CHANGED
|
@@ -3279,6 +3279,41 @@ var Db = class _Db {
|
|
|
3279
3279
|
}
|
|
3280
3280
|
return stack.pop();
|
|
3281
3281
|
};
|
|
3282
|
+
const isTimeoutError = (error) => error?.name === "KnexTimeoutError" || /query timeout|timeout exceeded/i.test(String(error?.message ?? ""));
|
|
3283
|
+
const logQueryEntry = (query, start, { error } = {}) => {
|
|
3284
|
+
let executionTimeMs;
|
|
3285
|
+
if (start) {
|
|
3286
|
+
const [seconds, nanoseconds] = process.hrtime(start);
|
|
3287
|
+
executionTimeMs = (seconds * 1e3 + nanoseconds / 1e6).toFixed(2);
|
|
3288
|
+
} else if (error?.timeout != null) {
|
|
3289
|
+
executionTimeMs = Number(error.timeout).toFixed(2);
|
|
3290
|
+
} else {
|
|
3291
|
+
executionTimeMs = "?";
|
|
3292
|
+
}
|
|
3293
|
+
let status = "ok";
|
|
3294
|
+
if (error) {
|
|
3295
|
+
status = isTimeoutError(error) ? "timeout" : "error";
|
|
3296
|
+
}
|
|
3297
|
+
const logEntry = {
|
|
3298
|
+
sql: query?.sql,
|
|
3299
|
+
bindings: query?.bindings || [],
|
|
3300
|
+
executionTimeMs,
|
|
3301
|
+
status
|
|
3302
|
+
};
|
|
3303
|
+
if (error) {
|
|
3304
|
+
logEntry.error = error.message ?? String(error);
|
|
3305
|
+
}
|
|
3306
|
+
this.queriesLog.push(logEntry);
|
|
3307
|
+
const suffix = error ? ` | ${status}: ${logEntry.error}` : "";
|
|
3308
|
+
this.logger.debug?.(
|
|
3309
|
+
`[Db] Query: ${query?.sql} | Duration: ${executionTimeMs}ms${suffix}`
|
|
3310
|
+
);
|
|
3311
|
+
};
|
|
3312
|
+
const handleQueryError = (error, query) => {
|
|
3313
|
+
const start = popStart(query);
|
|
3314
|
+
logQueryEntry(query, start, { error });
|
|
3315
|
+
this.logger.error?.(`[Db] Query failed: ${query?.sql}`, error);
|
|
3316
|
+
};
|
|
3282
3317
|
this.knexInstance.on("query", (query) => {
|
|
3283
3318
|
pushStart(query);
|
|
3284
3319
|
});
|
|
@@ -3287,20 +3322,31 @@ var Db = class _Db {
|
|
|
3287
3322
|
if (!start) {
|
|
3288
3323
|
return;
|
|
3289
3324
|
}
|
|
3290
|
-
|
|
3291
|
-
const executionTimeMs = (seconds * 1e3 + nanoseconds / 1e6).toFixed(2);
|
|
3292
|
-
const logEntry = {
|
|
3293
|
-
sql: query.sql,
|
|
3294
|
-
bindings: query.bindings || [],
|
|
3295
|
-
executionTimeMs
|
|
3296
|
-
};
|
|
3297
|
-
this.queriesLog.push(logEntry);
|
|
3298
|
-
this.logger.debug?.(`[Db] Query: ${query.sql} | Duration: ${executionTimeMs}ms`);
|
|
3325
|
+
logQueryEntry(query, start);
|
|
3299
3326
|
});
|
|
3300
3327
|
this.knexInstance.on("query-error", (error, query) => {
|
|
3301
|
-
|
|
3302
|
-
this.logger.error?.(`[Db] Query failed: ${query.sql}`, error);
|
|
3328
|
+
handleQueryError(error, query);
|
|
3303
3329
|
});
|
|
3330
|
+
const hookBuilder = (builder) => {
|
|
3331
|
+
if (!builder || builder.__dbProfilerHooked) {
|
|
3332
|
+
return;
|
|
3333
|
+
}
|
|
3334
|
+
builder.__dbProfilerHooked = true;
|
|
3335
|
+
builder.on("query", pushStart);
|
|
3336
|
+
builder.on("query-error", handleQueryError);
|
|
3337
|
+
};
|
|
3338
|
+
const client = this.knexInstance.client;
|
|
3339
|
+
if (client && !client.__dbProfilerPatched) {
|
|
3340
|
+
client.__dbProfilerPatched = true;
|
|
3341
|
+
if (typeof client.queryBuilder === "function") {
|
|
3342
|
+
const origQueryBuilder = client.queryBuilder.bind(client);
|
|
3343
|
+
client.queryBuilder = (...args) => {
|
|
3344
|
+
const builder = origQueryBuilder(...args);
|
|
3345
|
+
hookBuilder(builder);
|
|
3346
|
+
return builder;
|
|
3347
|
+
};
|
|
3348
|
+
}
|
|
3349
|
+
}
|
|
3304
3350
|
}
|
|
3305
3351
|
getQueryLog() {
|
|
3306
3352
|
return [...this.queriesLog];
|