nestjs-devtools 1.5.4 → 1.5.5
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/devtools.controller.js +2 -2
- package/dist/devtools.controller.js.map +1 -1
- package/dist/devtools.service.d.ts +2 -1
- package/dist/devtools.service.js +69 -0
- package/dist/devtools.service.js.map +1 -1
- package/dist/toolbar/profiler.js +36 -37
- package/dist/toolbar/profiler.js.map +1 -1
- package/package.json +1 -1
|
@@ -48,8 +48,8 @@ let DevtoolsController = class DevtoolsController {
|
|
|
48
48
|
res.send(this.devtoolsService.getHistorySummary());
|
|
49
49
|
}
|
|
50
50
|
getRequestDetail(id, res) {
|
|
51
|
-
const
|
|
52
|
-
res.send(
|
|
51
|
+
const panels = this.devtoolsService.getRequestPanels(id);
|
|
52
|
+
res.send(panels ?? null);
|
|
53
53
|
}
|
|
54
54
|
};
|
|
55
55
|
exports.DevtoolsController = DevtoolsController;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"devtools.controller.js","sourceRoot":"","sources":["../devtools.controller.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,2CAA+E;AAC/E,yDAAqD;AAErD,6DAAwF;AACxF,iDAAuE;AAIhE,IAAM,kBAAkB,GAAxB,MAAM,kBAAkB;IAC7B,YACmB,eAAgC,EAGhC,aAAkC,EAAE,EAEpC,cAA0D;QAL1D,oBAAe,GAAf,eAAe,CAAiB;QAGhC,eAAU,GAAV,UAAU,CAA0B;QAEpC,mBAAc,GAAd,cAAc,CAA4C;IAC1E,CAAC;IAGJ,WAAW,CAAQ,GAAQ;QACzB,IAAI,CAAC;YAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAAC,CAAC;QAAC,MAAM,CAAC;YAAC,GAAG,CAAC,MAAM,CAAC,cAAc,EAAE,WAAW,CAAC,CAAC;QAAC,CAAC;QACjF,GAAG,CAAC,IAAI,CAAC,IAAA,wBAAa,EAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC;IAC/C,CAAC;IAGD,cAAc,CAAQ,GAAQ;QAC5B,MAAM,MAAM,GAA4B,EAAE,CAAC;QAC3C,KAAK,MAAM,SAAS,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACxC,IAAI,CAAC;gBACH,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,OAAO,EAAE,CAAC;YAC/C,CAAC;YAAC,MAAM,CAAC;gBACP,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,SAAS,CAAC,IAAI,EAAE,OAAO,EAAE,uBAAuB,EAAE,CAAC;YACvF,CAAC;QACH,CAAC;QACD,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACnB,CAAC;IAGD,UAAU,CAAQ,GAAQ;QACxB,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,iBAAiB,EAAE,CAAC,CAAC;IACrD,CAAC;IAGD,gBAAgB,CAAc,EAAU,EAAS,GAAQ;QACvD,MAAM,
|
|
1
|
+
{"version":3,"file":"devtools.controller.js","sourceRoot":"","sources":["../devtools.controller.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,2CAA+E;AAC/E,yDAAqD;AAErD,6DAAwF;AACxF,iDAAuE;AAIhE,IAAM,kBAAkB,GAAxB,MAAM,kBAAkB;IAC7B,YACmB,eAAgC,EAGhC,aAAkC,EAAE,EAEpC,cAA0D;QAL1D,oBAAe,GAAf,eAAe,CAAiB;QAGhC,eAAU,GAAV,UAAU,CAA0B;QAEpC,mBAAc,GAAd,cAAc,CAA4C;IAC1E,CAAC;IAGJ,WAAW,CAAQ,GAAQ;QACzB,IAAI,CAAC;YAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAAC,CAAC;QAAC,MAAM,CAAC;YAAC,GAAG,CAAC,MAAM,CAAC,cAAc,EAAE,WAAW,CAAC,CAAC;QAAC,CAAC;QACjF,GAAG,CAAC,IAAI,CAAC,IAAA,wBAAa,EAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC;IAC/C,CAAC;IAGD,cAAc,CAAQ,GAAQ;QAC5B,MAAM,MAAM,GAA4B,EAAE,CAAC;QAC3C,KAAK,MAAM,SAAS,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACxC,IAAI,CAAC;gBACH,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,OAAO,EAAE,CAAC;YAC/C,CAAC;YAAC,MAAM,CAAC;gBACP,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,SAAS,CAAC,IAAI,EAAE,OAAO,EAAE,uBAAuB,EAAE,CAAC;YACvF,CAAC;QACH,CAAC;QACD,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACnB,CAAC;IAGD,UAAU,CAAQ,GAAQ;QACxB,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,iBAAiB,EAAE,CAAC,CAAC;IACrD,CAAC;IAGD,gBAAgB,CAAc,EAAU,EAAS,GAAQ;QACvD,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC;QACzD,GAAG,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,CAAC;IAC3B,CAAC;CACF,CAAA;AAvCY,gDAAkB;AAW7B;IADC,IAAA,YAAG,GAAE;IACO,WAAA,IAAA,YAAG,GAAE,CAAA;;;;qDAGjB;AAGD;IADC,IAAA,YAAG,EAAC,MAAM,CAAC;IACI,WAAA,IAAA,YAAG,GAAE,CAAA;;;;wDAUpB;AAGD;IADC,IAAA,YAAG,EAAC,SAAS,CAAC;IACH,WAAA,IAAA,YAAG,GAAE,CAAA;;;;oDAEhB;AAGD;IADC,IAAA,YAAG,EAAC,aAAa,CAAC;IACD,WAAA,IAAA,cAAK,EAAC,IAAI,CAAC,CAAA;IAAc,WAAA,IAAA,YAAG,GAAE,CAAA;;;;0DAG/C;6BAtCU,kBAAkB;IAD9B,IAAA,mBAAU,EAAC,YAAY,CAAC;IAIpB,WAAA,IAAA,iBAAQ,GAAE,CAAA;IACV,WAAA,IAAA,eAAM,EAAC,8CAAyB,CAAC,CAAA;IAEjC,WAAA,IAAA,eAAM,EAAC,0CAAqB,CAAC,CAAA;qCAJI,kCAAe;GAFxC,kBAAkB,CAuC9B"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { RequestDebugInfo } from './interfaces';
|
|
1
|
+
import { RequestDebugInfo, DevtoolsData } from './interfaces';
|
|
2
2
|
export declare class DevtoolsService {
|
|
3
3
|
private readonly history;
|
|
4
4
|
private readonly maxHistory;
|
|
@@ -25,4 +25,5 @@ export declare class DevtoolsService {
|
|
|
25
25
|
duration: number;
|
|
26
26
|
timestamp: Date;
|
|
27
27
|
}[];
|
|
28
|
+
getRequestPanels(id: string): Record<string, DevtoolsData> | null;
|
|
28
29
|
}
|
package/dist/devtools.service.js
CHANGED
|
@@ -73,6 +73,75 @@ let DevtoolsService = class DevtoolsService {
|
|
|
73
73
|
timestamp: r.timestamp,
|
|
74
74
|
}));
|
|
75
75
|
}
|
|
76
|
+
getRequestPanels(id) {
|
|
77
|
+
const req = this.history.find((r) => r.id === id);
|
|
78
|
+
if (!req)
|
|
79
|
+
return null;
|
|
80
|
+
const panels = {};
|
|
81
|
+
panels.request = {
|
|
82
|
+
label: 'Request',
|
|
83
|
+
icon: '🌐',
|
|
84
|
+
summary: `${req.method} ${req.path} → ${req.statusCode}`,
|
|
85
|
+
details: {
|
|
86
|
+
method: req.method,
|
|
87
|
+
path: req.path,
|
|
88
|
+
status: req.statusCode,
|
|
89
|
+
duration: `${req.duration.toFixed(2)} ms`,
|
|
90
|
+
memory: `${(req.memory / 1024 / 1024).toFixed(2)} MB`,
|
|
91
|
+
timestamp: req.timestamp.toISOString(),
|
|
92
|
+
route: req.route,
|
|
93
|
+
},
|
|
94
|
+
};
|
|
95
|
+
panels.performance = {
|
|
96
|
+
label: 'Performance',
|
|
97
|
+
icon: '⚡',
|
|
98
|
+
summary: `${req.duration.toFixed(1)} ms, ${(req.memory / 1024 / 1024).toFixed(1)} MB`,
|
|
99
|
+
details: {
|
|
100
|
+
duration: `${req.duration.toFixed(2)} ms`,
|
|
101
|
+
peakMemory: `${(req.memory / 1024 / 1024).toFixed(2)} MB`,
|
|
102
|
+
queries: req.queries.length,
|
|
103
|
+
queryTime: `${req.queries.reduce((a, q) => a + q.duration, 0).toFixed(2)} ms`,
|
|
104
|
+
},
|
|
105
|
+
};
|
|
106
|
+
const totalQueryDuration = req.queries.reduce((a, q) => a + q.duration, 0);
|
|
107
|
+
panels.database = {
|
|
108
|
+
label: 'Database',
|
|
109
|
+
icon: '🗄️',
|
|
110
|
+
summary: `${req.queries.length} queries in ${totalQueryDuration.toFixed(1)} ms`,
|
|
111
|
+
details: {
|
|
112
|
+
totalQueries: req.queries.length,
|
|
113
|
+
totalTime: `${totalQueryDuration.toFixed(2)} ms`,
|
|
114
|
+
queries: req.queries.map((q) => ({
|
|
115
|
+
sql: q.sql,
|
|
116
|
+
duration: `${q.duration.toFixed(2)} ms`,
|
|
117
|
+
})),
|
|
118
|
+
},
|
|
119
|
+
};
|
|
120
|
+
const errors = req.logs.filter((l) => l.level === 'error');
|
|
121
|
+
const warnings = req.logs.filter((l) => l.level === 'warn');
|
|
122
|
+
const logsDetails = {
|
|
123
|
+
total: req.logs.length,
|
|
124
|
+
errors: errors.length,
|
|
125
|
+
warnings: warnings.length,
|
|
126
|
+
entries: req.logs.slice(-20).map((l) => ({
|
|
127
|
+
level: l.level,
|
|
128
|
+
message: l.message,
|
|
129
|
+
})),
|
|
130
|
+
};
|
|
131
|
+
if (req.exception) {
|
|
132
|
+
logsDetails.exception = {
|
|
133
|
+
message: req.exception.message,
|
|
134
|
+
stack: req.exception.stack,
|
|
135
|
+
};
|
|
136
|
+
}
|
|
137
|
+
panels.logs = {
|
|
138
|
+
label: 'Logs',
|
|
139
|
+
icon: '📝',
|
|
140
|
+
summary: `${req.logs.length} entries (${errors.length} errors, ${warnings.length} warnings)`,
|
|
141
|
+
details: logsDetails,
|
|
142
|
+
};
|
|
143
|
+
return panels;
|
|
144
|
+
}
|
|
76
145
|
};
|
|
77
146
|
exports.DevtoolsService = DevtoolsService;
|
|
78
147
|
exports.DevtoolsService = DevtoolsService = __decorate([
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"devtools.service.js","sourceRoot":"","sources":["../devtools.service.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,2CAA4C;AAIrC,IAAM,eAAe,GAArB,MAAM,eAAe;IAI1B,YAAY,UAAU,GAAG,EAAE;QAHV,YAAO,GAAuB,EAAE,CAAC;QAO1C,mBAAc,GAA4B,IAAI,CAAC;QAHrD,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;IAC/B,CAAC;IAID,iBAAiB;QACf,OAAO,IAAI,CAAC,cAAc,CAAC;IAC7B,CAAC;IAED,iBAAiB,CAAC,IAAsB;QACtC,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;IAC7B,CAAC;IAED,QAAQ,CAAC,GAAW,EAAE,QAAgB;QACpC,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACxB,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC,CAAC;QACtD,CAAC;IACH,CAAC;IAED,MAAM,CAAC,OAAe,EAAE,KAAa;QACnC,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACxB,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,IAAI,EAAE,EAAE,CAAC,CAAC;QAC3E,CAAC;IACH,CAAC;IAED,cAAc;QACZ,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACxB,IAAI,CAAC,cAAc,CAAC,SAAS,EAAE,CAAC;QAClC,CAAC;IACH,CAAC;IAED,eAAe;QACb,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACxB,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE,CAAC;QACpC,CAAC;IACH,CAAC;IAED,YAAY,CAAC,SAA6C;QACxD,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACxB,IAAI,CAAC,cAAc,CAAC,SAAS,GAAG,SAAS,CAAC;QAC5C,CAAC;IACH,CAAC;IAED,aAAa;QACX,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACxB,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;YAC1C,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;gBAC1C,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;YACrB,CAAC;YACD,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;QAC7B,CAAC;IACH,CAAC;IAED,cAAc;QACZ,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;IACjC,CAAC;IAED,UAAU;QACR,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IAED,iBAAiB;QACf,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAC9B,EAAE,EAAE,CAAC,CAAC,EAAE;YACR,MAAM,EAAE,CAAC,CAAC,MAAM;YAChB,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,UAAU,EAAE,CAAC,CAAC,UAAU;YACxB,QAAQ,EAAE,CAAC,CAAC,QAAQ;YACpB,SAAS,EAAE,CAAC,CAAC,SAAS;SACvB,CAAC,CAAC,CAAC;IACN,CAAC;CACF,CAAA;
|
|
1
|
+
{"version":3,"file":"devtools.service.js","sourceRoot":"","sources":["../devtools.service.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,2CAA4C;AAIrC,IAAM,eAAe,GAArB,MAAM,eAAe;IAI1B,YAAY,UAAU,GAAG,EAAE;QAHV,YAAO,GAAuB,EAAE,CAAC;QAO1C,mBAAc,GAA4B,IAAI,CAAC;QAHrD,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;IAC/B,CAAC;IAID,iBAAiB;QACf,OAAO,IAAI,CAAC,cAAc,CAAC;IAC7B,CAAC;IAED,iBAAiB,CAAC,IAAsB;QACtC,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;IAC7B,CAAC;IAED,QAAQ,CAAC,GAAW,EAAE,QAAgB;QACpC,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACxB,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC,CAAC;QACtD,CAAC;IACH,CAAC;IAED,MAAM,CAAC,OAAe,EAAE,KAAa;QACnC,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACxB,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,IAAI,EAAE,EAAE,CAAC,CAAC;QAC3E,CAAC;IACH,CAAC;IAED,cAAc;QACZ,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACxB,IAAI,CAAC,cAAc,CAAC,SAAS,EAAE,CAAC;QAClC,CAAC;IACH,CAAC;IAED,eAAe;QACb,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACxB,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE,CAAC;QACpC,CAAC;IACH,CAAC;IAED,YAAY,CAAC,SAA6C;QACxD,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACxB,IAAI,CAAC,cAAc,CAAC,SAAS,GAAG,SAAS,CAAC;QAC5C,CAAC;IACH,CAAC;IAED,aAAa;QACX,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACxB,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;YAC1C,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;gBAC1C,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;YACrB,CAAC;YACD,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;QAC7B,CAAC;IACH,CAAC;IAED,cAAc;QACZ,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;IACjC,CAAC;IAED,UAAU;QACR,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IAED,iBAAiB;QACf,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAC9B,EAAE,EAAE,CAAC,CAAC,EAAE;YACR,MAAM,EAAE,CAAC,CAAC,MAAM;YAChB,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,UAAU,EAAE,CAAC,CAAC,UAAU;YACxB,QAAQ,EAAE,CAAC,CAAC,QAAQ;YACpB,SAAS,EAAE,CAAC,CAAC,SAAS;SACvB,CAAC,CAAC,CAAC;IACN,CAAC;IAED,gBAAgB,CAAC,EAAU;QACzB,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;QAClD,IAAI,CAAC,GAAG;YAAE,OAAO,IAAI,CAAC;QAEtB,MAAM,MAAM,GAAiC,EAAE,CAAC;QAEhD,MAAM,CAAC,OAAO,GAAG;YACf,KAAK,EAAE,SAAS;YAChB,IAAI,EAAE,IAAI;YACV,OAAO,EAAE,GAAG,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,IAAI,MAAM,GAAG,CAAC,UAAU,EAAE;YACxD,OAAO,EAAE;gBACP,MAAM,EAAE,GAAG,CAAC,MAAM;gBAClB,IAAI,EAAE,GAAG,CAAC,IAAI;gBACd,MAAM,EAAE,GAAG,CAAC,UAAU;gBACtB,QAAQ,EAAE,GAAG,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK;gBACzC,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,MAAM,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK;gBACrD,SAAS,EAAE,GAAG,CAAC,SAAS,CAAC,WAAW,EAAE;gBACtC,KAAK,EAAE,GAAG,CAAC,KAAK;aACjB;SACF,CAAC;QAEF,MAAM,CAAC,WAAW,GAAG;YACnB,KAAK,EAAE,aAAa;YACpB,IAAI,EAAE,GAAG;YACT,OAAO,EAAE,GAAG,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK;YACrF,OAAO,EAAE;gBACP,QAAQ,EAAE,GAAG,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK;gBACzC,UAAU,EAAE,GAAG,CAAC,GAAG,CAAC,MAAM,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK;gBACzD,OAAO,EAAE,GAAG,CAAC,OAAO,CAAC,MAAM;gBAC3B,SAAS,EAAE,GAAG,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK;aAC9E;SACF,CAAC;QAEF,MAAM,kBAAkB,GAAG,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;QAC3E,MAAM,CAAC,QAAQ,GAAG;YAChB,KAAK,EAAE,UAAU;YACjB,IAAI,EAAE,KAAK;YACX,OAAO,EAAE,GAAG,GAAG,CAAC,OAAO,CAAC,MAAM,eAAe,kBAAkB,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK;YAC/E,OAAO,EAAE;gBACP,YAAY,EAAE,GAAG,CAAC,OAAO,CAAC,MAAM;gBAChC,SAAS,EAAE,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK;gBAChD,OAAO,EAAE,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;oBAC/B,GAAG,EAAE,CAAC,CAAC,GAAG;oBACV,QAAQ,EAAE,GAAG,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK;iBACxC,CAAC,CAAC;aACJ;SACF,CAAC;QAEF,MAAM,MAAM,GAAG,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,OAAO,CAAC,CAAC;QAC3D,MAAM,QAAQ,GAAG,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,MAAM,CAAC,CAAC;QAC5D,MAAM,WAAW,GAA4B;YAC3C,KAAK,EAAE,GAAG,CAAC,IAAI,CAAC,MAAM;YACtB,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,QAAQ,EAAE,QAAQ,CAAC,MAAM;YACzB,OAAO,EAAE,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBACvC,KAAK,EAAE,CAAC,CAAC,KAAK;gBACd,OAAO,EAAE,CAAC,CAAC,OAAO;aACnB,CAAC,CAAC;SACJ,CAAC;QACF,IAAI,GAAG,CAAC,SAAS,EAAE,CAAC;YAClB,WAAW,CAAC,SAAS,GAAG;gBACtB,OAAO,EAAE,GAAG,CAAC,SAAS,CAAC,OAAO;gBAC9B,KAAK,EAAE,GAAG,CAAC,SAAS,CAAC,KAAK;aAC3B,CAAC;QACJ,CAAC;QACD,MAAM,CAAC,IAAI,GAAG;YACZ,KAAK,EAAE,MAAM;YACb,IAAI,EAAE,IAAI;YACV,OAAO,EAAE,GAAG,GAAG,CAAC,IAAI,CAAC,MAAM,aAAa,MAAM,CAAC,MAAM,YAAY,QAAQ,CAAC,MAAM,YAAY;YAC5F,OAAO,EAAE,WAAW;SACrB,CAAC;QAEF,OAAO,MAAM,CAAC;IAChB,CAAC;CACF,CAAA;AAvJY,0CAAe;0BAAf,eAAe;IAD3B,IAAA,mBAAU,GAAE;;GACA,eAAe,CAuJ3B"}
|
package/dist/toolbar/profiler.js
CHANGED
|
@@ -69,9 +69,6 @@ const PROFILER_PAGE = (config) => {
|
|
|
69
69
|
#history-body tr { cursor: pointer; }
|
|
70
70
|
#history-body tr:hover { background: #f0f7ff; }
|
|
71
71
|
#history-body tr.selected { background: #e1effa; }
|
|
72
|
-
.detail-section { margin-bottom: 12px; }
|
|
73
|
-
.detail-section:last-child { margin-bottom: 0; }
|
|
74
|
-
.detail-section h4 { font-size: 10px; text-transform: uppercase; letter-spacing: 0.5px; color: #999; margin-bottom: 6px; }
|
|
75
72
|
.query-table { width: 100%; }
|
|
76
73
|
.query-row { display: flex; align-items: flex-start; padding: 5px 0; gap: 6px; border-bottom: 1px solid #eee; font-size: 11px; }
|
|
77
74
|
.query-row:last-child { border-bottom: none; }
|
|
@@ -260,38 +257,6 @@ const PROFILER_PAGE = (config) => {
|
|
|
260
257
|
});
|
|
261
258
|
}
|
|
262
259
|
|
|
263
|
-
function renderRequestDetail(d) {
|
|
264
|
-
if (!d) return '<span class="empty">No details available</span>';
|
|
265
|
-
var h = '<div class="detail-section"><h4>Request</h4><table>'+
|
|
266
|
-
'<tr><th style="width:80px">Method</th><td><span class="badge badge-'+d.method.toLowerCase()+'">'+escape(d.method)+'</span></td></tr>'+
|
|
267
|
-
'<tr><th>Path</th><td class="mono">'+escape(d.path)+'</td></tr>'+
|
|
268
|
-
'<tr><th>Status</th><td><span class="status-badge status-'+(d.statusCode||'')+'">'+escape(d.statusCode||'')+'</span></td></tr>'+
|
|
269
|
-
'<tr><th>Duration</th><td>'+(d.duration!=null?d.duration.toFixed(1):'')+' ms</td></tr>'+
|
|
270
|
-
'<tr><th>Memory</th><td>'+escape(d.memory||'')+'</td></tr>'+
|
|
271
|
-
'<tr><th>Route</th><td class="mono" style="font-size:10px">'+escape(d.route||'')+'</td></tr>'+
|
|
272
|
-
'<tr><th>Time</th><td>'+escape(new Date(d.timestamp).toLocaleTimeString())+'</td></tr>'+
|
|
273
|
-
'</table></div>';
|
|
274
|
-
if (d.queries && d.queries.length>0) {
|
|
275
|
-
h += '<div class="detail-section"><h4>Queries ('+d.queries.length+')</h4>';
|
|
276
|
-
d.queries.forEach(function(q,i){
|
|
277
|
-
h += '<div class="query-row"><span class="query-num">'+(i+1)+'</span><span class="query-sql">'+escape(q.sql||'')+'</span><span class="query-time">'+escape(q.duration||'')+'</span></div>';
|
|
278
|
-
});
|
|
279
|
-
h += '</div>';
|
|
280
|
-
}
|
|
281
|
-
if (d.logs && d.logs.length>0) {
|
|
282
|
-
h += '<div class="detail-section"><h4>Logs ('+d.logs.length+')</h4>';
|
|
283
|
-
d.logs.forEach(function(e){
|
|
284
|
-
var lc = e.level==='error' ? 'log-error' : e.level==='warn' ? 'log-warn' : 'log-info';
|
|
285
|
-
h += '<div class="log-row"><span class="log-level '+lc+'">'+escape(e.level||'')+'</span><span>'+escape(e.message||'')+'</span></div>';
|
|
286
|
-
});
|
|
287
|
-
h += '</div>';
|
|
288
|
-
}
|
|
289
|
-
if (d.exception) {
|
|
290
|
-
h += '<div class="detail-section"><h4>Exception</h4><div class="exception-box"><div class="msg">'+escape(d.exception.message||'')+'</div><div class="stack">'+escape(d.exception.stack||'')+'</div></div></div>';
|
|
291
|
-
}
|
|
292
|
-
return h;
|
|
293
|
-
}
|
|
294
|
-
|
|
295
260
|
function loadHistory() {
|
|
296
261
|
fetch(BASE + '/__devtools/history').then(function(r){return r.json()}).then(function(rows){
|
|
297
262
|
var tbody = document.getElementById('history-body');
|
|
@@ -319,8 +284,42 @@ const PROFILER_PAGE = (config) => {
|
|
|
319
284
|
document.querySelectorAll('#history-body tr').forEach(function(t){t.classList.remove('selected')});
|
|
320
285
|
tr.classList.add('selected');
|
|
321
286
|
tbody.setAttribute('data-selected', r.id);
|
|
322
|
-
fetch(BASE + '/__devtools/request/' + r.id).then(function(r2){return r2.json()}).then(function(
|
|
323
|
-
document.getElementById('history-detail-body')
|
|
287
|
+
fetch(BASE + '/__devtools/request/' + r.id).then(function(r2){return r2.json()}).then(function(panels){
|
|
288
|
+
var body = document.getElementById('history-detail-body');
|
|
289
|
+
body.innerHTML = '';
|
|
290
|
+
if (!panels) {
|
|
291
|
+
body.innerHTML = '<span class="empty">No details available</span>';
|
|
292
|
+
detail.classList.add('open');
|
|
293
|
+
return;
|
|
294
|
+
}
|
|
295
|
+
var order = ['request','performance','database','routes','logs'];
|
|
296
|
+
order.forEach(function(key){
|
|
297
|
+
var p = panels[key];
|
|
298
|
+
if (!p || !p.label) return;
|
|
299
|
+
var panel = document.createElement('div');
|
|
300
|
+
panel.className = 'panel';
|
|
301
|
+
panel.innerHTML =
|
|
302
|
+
'<div class="panel-header"><span>'+escape(p.label)+'</span><span class="summary">'+escape(p.summary||'')+'</span></div>'+
|
|
303
|
+
'<div class="panel-body">'+renderPanelContent(p)+'</div>';
|
|
304
|
+
panel.querySelector('.panel-header').addEventListener('click', function(){
|
|
305
|
+
this.nextElementSibling.classList.toggle('open');
|
|
306
|
+
});
|
|
307
|
+
body.appendChild(panel);
|
|
308
|
+
});
|
|
309
|
+
for (var key in panels) {
|
|
310
|
+
if (order.indexOf(key)!==-1) continue;
|
|
311
|
+
var p = panels[key];
|
|
312
|
+
if (!p || !p.label) continue;
|
|
313
|
+
var panel = document.createElement('div');
|
|
314
|
+
panel.className = 'panel';
|
|
315
|
+
panel.innerHTML =
|
|
316
|
+
'<div class="panel-header"><span>'+escape(p.label)+'</span><span class="summary">'+escape(p.summary||'')+'</span></div>'+
|
|
317
|
+
'<div class="panel-body">'+renderPanelContent(p)+'</div>';
|
|
318
|
+
panel.querySelector('.panel-header').addEventListener('click', function(){
|
|
319
|
+
this.nextElementSibling.classList.toggle('open');
|
|
320
|
+
});
|
|
321
|
+
body.appendChild(panel);
|
|
322
|
+
}
|
|
324
323
|
detail.classList.add('open');
|
|
325
324
|
}).catch(function(e){
|
|
326
325
|
console.error('[Devtools] Failed to load request detail:', e);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"profiler.js","sourceRoot":"","sources":["../../toolbar/profiler.ts"],"names":[],"mappings":";;;AAIO,MAAM,aAAa,GAAG,CAAC,MAAoC,EAAE,EAAE;IACpE,MAAM,EAAE,KAAK,GAAG,MAAM,EAAE,GAAG,MAAM,IAAI,EAAE,CAAC;IAExC,OAAO
|
|
1
|
+
{"version":3,"file":"profiler.js","sourceRoot":"","sources":["../../toolbar/profiler.ts"],"names":[],"mappings":";;;AAIO,MAAM,aAAa,GAAG,CAAC,MAAoC,EAAE,EAAE;IACpE,MAAM,EAAE,KAAK,GAAG,MAAM,EAAE,GAAG,MAAM,IAAI,EAAE,CAAC;IAExC,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAgVD,CAAC;AACT,CAAC,CAAC;AApVW,QAAA,aAAa,iBAoVxB"}
|