devtools-nestjs 2.0.7 → 2.1.1
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/controllers/profiler.controller.d.ts.map +1 -1
- package/dist/controllers/profiler.controller.js +17 -14
- package/dist/controllers/profiler.controller.js.map +1 -1
- package/dist/interceptors/profiler.interceptor.d.ts +3 -1
- package/dist/interceptors/profiler.interceptor.d.ts.map +1 -1
- package/dist/interceptors/profiler.interceptor.js +16 -3
- package/dist/interceptors/profiler.interceptor.js.map +1 -1
- package/dist/interceptors/toolbar.interceptor.d.ts.map +1 -1
- package/dist/interceptors/toolbar.interceptor.js +1 -1
- package/dist/interceptors/toolbar.interceptor.js.map +1 -1
- package/dist/views/icons/icons.d.ts +2 -0
- package/dist/views/icons/icons.d.ts.map +1 -0
- package/dist/views/icons/icons.js +20 -0
- package/dist/views/icons/icons.js.map +1 -0
- package/dist/views/layout.d.ts +1 -0
- package/dist/views/layout.d.ts.map +1 -1
- package/dist/views/layout.js +110 -88
- package/dist/views/layout.js.map +1 -1
- package/dist/views/panels/cache-panel.d.ts.map +1 -1
- package/dist/views/panels/cache-panel.js +14 -14
- package/dist/views/panels/cache-panel.js.map +1 -1
- package/dist/views/panels/database-panel.d.ts.map +1 -1
- package/dist/views/panels/database-panel.js +16 -15
- package/dist/views/panels/database-panel.js.map +1 -1
- package/dist/views/panels/exception-panel.d.ts.map +1 -1
- package/dist/views/panels/exception-panel.js +5 -10
- package/dist/views/panels/exception-panel.js.map +1 -1
- package/dist/views/panels/log-panel.d.ts.map +1 -1
- package/dist/views/panels/log-panel.js +25 -28
- package/dist/views/panels/log-panel.js.map +1 -1
- package/dist/views/panels/request-panel.js +3 -3
- package/dist/views/panels/request-panel.js.map +1 -1
- package/dist/views/panels/route-panel.js +3 -3
- package/dist/views/panels/route-panel.js.map +1 -1
- package/dist/views/panels/time-panel.d.ts.map +1 -1
- package/dist/views/panels/time-panel.js +13 -10
- package/dist/views/panels/time-panel.js.map +1 -1
- package/dist/views/toolbar.d.ts +4 -3
- package/dist/views/toolbar.d.ts.map +1 -1
- package/dist/views/toolbar.js +87 -114
- package/dist/views/toolbar.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"profiler.controller.d.ts","sourceRoot":"","sources":["../../src/controllers/profiler.controller.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC/D,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AAUrE,OAAO,EAAE,qBAAqB,EAA2C,MAAM,mBAAmB,CAAC;AAiBnG,qBACa,kBAAkB;IAE3B,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACQ,OAAO,CAAC,QAAQ,CAAC,OAAO;gBAFxC,QAAQ,EAAE,eAAe,EACzB,QAAQ,EAAE,iBAAiB,EACM,OAAO,EAAE,qBAAqB;IAI5E,IAAI,CAAiB,KAAK,CAAC,EAAE,MAAM,EAAkB,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAiBrF,SAAS,CACG,KAAK,EAAE,MAAM,EACb,KAAK,CAAC,EAAE,MAAM,GAC7B,OAAO,CAAC,MAAM,CAAC;IAQlB,OAAO,CAAC,WAAW;IAmBnB,OAAO,CAAC,kBAAkB;IAyB1B,OAAO,CAAC,UAAU;
|
|
1
|
+
{"version":3,"file":"profiler.controller.d.ts","sourceRoot":"","sources":["../../src/controllers/profiler.controller.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC/D,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AAUrE,OAAO,EAAE,qBAAqB,EAA2C,MAAM,mBAAmB,CAAC;AAiBnG,qBACa,kBAAkB;IAE3B,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACQ,OAAO,CAAC,QAAQ,CAAC,OAAO;gBAFxC,QAAQ,EAAE,eAAe,EACzB,QAAQ,EAAE,iBAAiB,EACM,OAAO,EAAE,qBAAqB;IAI5E,IAAI,CAAiB,KAAK,CAAC,EAAE,MAAM,EAAkB,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAiBrF,SAAS,CACG,KAAK,EAAE,MAAM,EACb,KAAK,CAAC,EAAE,MAAM,GAC7B,OAAO,CAAC,MAAM,CAAC;IAQlB,OAAO,CAAC,WAAW;IAmBnB,OAAO,CAAC,kBAAkB;IAyB1B,OAAO,CAAC,UAAU;IAoClB,OAAO,CAAC,WAAW;CAgBpB"}
|
|
@@ -95,31 +95,34 @@ let ProfilerController = class ProfilerController {
|
|
|
95
95
|
}
|
|
96
96
|
}
|
|
97
97
|
renderHome(recent) {
|
|
98
|
+
const profilerPath = this.options.profilerPath || '/_profiler';
|
|
98
99
|
const rows = recent
|
|
99
100
|
.map((r) => `<tr>
|
|
100
|
-
<td><a href="${
|
|
101
|
-
<td>${r.method}</td>
|
|
101
|
+
<td><a href="${profilerPath}/${r.token}">${r.token}</a></td>
|
|
102
|
+
<td><span class="badge badge-info">${r.method}</span></td>
|
|
102
103
|
<td style="max-width:400px;overflow:hidden;text-overflow:ellipsis">${r.url}</td>
|
|
103
|
-
<td>${r.statusCode}</td>
|
|
104
|
-
<td>${new Date(r.time).toLocaleString()}</td>
|
|
104
|
+
<td><span class="badge ${r.statusCode >= 500 ? 'badge-error' : r.statusCode >= 400 ? 'badge-warn' : 'badge-success'}">${r.statusCode}</span></td>
|
|
105
|
+
<td style="white-space:nowrap">${new Date(r.time).toLocaleString()}</td>
|
|
105
106
|
<td>${r.duration} ms</td>
|
|
106
107
|
<td>${r.ip}</td>
|
|
107
108
|
</tr>`)
|
|
108
109
|
.join('');
|
|
109
|
-
const content =
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
110
|
+
const content = recent.length
|
|
111
|
+
? `<table>
|
|
112
|
+
<thead><tr><th>Token</th><th>Method</th><th>URL</th><th>Status</th><th>Time</th><th>Duration</th><th>IP</th></tr></thead>
|
|
113
|
+
<tbody>${rows}</tbody>
|
|
114
|
+
</table>`
|
|
115
|
+
: `<div class="empty-state">
|
|
116
|
+
<p>No profiles recorded yet.</p>
|
|
117
|
+
<p style="font-size:12px;margin-top:8px">Make a request to your application — it will appear here automatically.</p>
|
|
118
|
+
</div>`;
|
|
116
119
|
const stubProfile = new profile_model_1.ProfileModel();
|
|
117
|
-
stubProfile.method = '
|
|
118
|
-
stubProfile.path = '/
|
|
120
|
+
stubProfile.method = '';
|
|
121
|
+
stubProfile.path = '/';
|
|
119
122
|
stubProfile.statusCode = 200;
|
|
120
123
|
stubProfile.time = Date.now();
|
|
121
124
|
stubProfile.duration = 0;
|
|
122
|
-
return (0, layout_1.renderProfilerLayout)('Profiler
|
|
125
|
+
return (0, layout_1.renderProfilerLayout)('Profiler', content, stubProfile, [], '');
|
|
123
126
|
}
|
|
124
127
|
renderError(message) {
|
|
125
128
|
const stubProfile = new profile_model_1.ProfileModel();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"profiler.controller.js","sourceRoot":"","sources":["../../src/controllers/profiler.controller.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"profiler.controller.js","sourceRoot":"","sources":["../../src/controllers/profiler.controller.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
import { NestInterceptor, ExecutionContext, CallHandler } from '@nestjs/common';
|
|
2
2
|
import { Observable } from 'rxjs';
|
|
3
3
|
import { ProfilerService } from '../profiler/profiler.service';
|
|
4
|
+
import { ProfilerModuleOptions } from '../profiler.types';
|
|
4
5
|
export declare class ProfilerInterceptor implements NestInterceptor {
|
|
5
6
|
private readonly profiler;
|
|
6
|
-
|
|
7
|
+
private readonly options;
|
|
8
|
+
constructor(profiler: ProfilerService, options: ProfilerModuleOptions);
|
|
7
9
|
intercept(context: ExecutionContext, next: CallHandler): Observable<unknown>;
|
|
8
10
|
private getRequest;
|
|
9
11
|
private getResponse;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"profiler.interceptor.d.ts","sourceRoot":"","sources":["../../src/interceptors/profiler.interceptor.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,eAAe,EACf,gBAAgB,EAChB,WAAW,
|
|
1
|
+
{"version":3,"file":"profiler.interceptor.d.ts","sourceRoot":"","sources":["../../src/interceptors/profiler.interceptor.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,eAAe,EACf,gBAAgB,EAChB,WAAW,EAEZ,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,UAAU,EAAE,MAAM,MAAM,CAAC;AAElC,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC/D,OAAO,EAAE,qBAAqB,EAAwC,MAAM,mBAAmB,CAAC;AAEhG,qBACa,mBAAoB,YAAW,eAAe;IAEvD,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACQ,OAAO,CAAC,QAAQ,CAAC,OAAO;gBADxC,QAAQ,EAAE,eAAe,EACQ,OAAO,EAAE,qBAAqB;IAGlF,SAAS,CAAC,OAAO,EAAE,gBAAgB,EAAE,IAAI,EAAE,WAAW,GAAG,UAAU,CAAC,OAAO,CAAC;IAmD5E,OAAO,CAAC,UAAU;IASlB,OAAO,CAAC,WAAW;CAQpB"}
|
|
@@ -8,22 +8,34 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
|
|
|
8
8
|
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
9
|
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
10
|
};
|
|
11
|
+
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
12
|
+
return function (target, key) { decorator(target, key, paramIndex); }
|
|
13
|
+
};
|
|
11
14
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
15
|
exports.ProfilerInterceptor = void 0;
|
|
13
16
|
const common_1 = require("@nestjs/common");
|
|
14
17
|
const operators_1 = require("rxjs/operators");
|
|
15
18
|
const profiler_service_1 = require("../profiler/profiler.service");
|
|
19
|
+
const profiler_types_1 = require("../profiler.types");
|
|
16
20
|
let ProfilerInterceptor = class ProfilerInterceptor {
|
|
17
21
|
profiler;
|
|
18
|
-
|
|
22
|
+
options;
|
|
23
|
+
constructor(profiler, options) {
|
|
19
24
|
this.profiler = profiler;
|
|
25
|
+
this.options = options;
|
|
20
26
|
}
|
|
21
27
|
intercept(context, next) {
|
|
22
28
|
if (!this.profiler.isEnabled()) {
|
|
23
29
|
return next.handle();
|
|
24
30
|
}
|
|
25
|
-
const startTime = performance.now();
|
|
26
31
|
const request = this.getRequest(context);
|
|
32
|
+
const url = request?.url || request?.originalUrl || '';
|
|
33
|
+
const profilerPath = this.options.profilerPath || '/_profiler';
|
|
34
|
+
const toolbarPath = this.options.toolbarPath || '/_profiler/toolbar';
|
|
35
|
+
if (url.startsWith(profilerPath) || url.startsWith(toolbarPath)) {
|
|
36
|
+
return next.handle();
|
|
37
|
+
}
|
|
38
|
+
const startTime = performance.now();
|
|
27
39
|
return next.handle().pipe((0, operators_1.tap)({
|
|
28
40
|
next: (responseBody) => {
|
|
29
41
|
const endTime = performance.now();
|
|
@@ -74,6 +86,7 @@ let ProfilerInterceptor = class ProfilerInterceptor {
|
|
|
74
86
|
exports.ProfilerInterceptor = ProfilerInterceptor;
|
|
75
87
|
exports.ProfilerInterceptor = ProfilerInterceptor = __decorate([
|
|
76
88
|
(0, common_1.Injectable)(),
|
|
77
|
-
|
|
89
|
+
__param(1, (0, common_1.Inject)(profiler_types_1.PROFILER_MODULE_OPTIONS)),
|
|
90
|
+
__metadata("design:paramtypes", [profiler_service_1.ProfilerService, Object])
|
|
78
91
|
], ProfilerInterceptor);
|
|
79
92
|
//# sourceMappingURL=profiler.interceptor.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"profiler.interceptor.js","sourceRoot":"","sources":["../../src/interceptors/profiler.interceptor.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"profiler.interceptor.js","sourceRoot":"","sources":["../../src/interceptors/profiler.interceptor.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"toolbar.interceptor.d.ts","sourceRoot":"","sources":["../../src/interceptors/toolbar.interceptor.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,eAAe,EACf,gBAAgB,EAChB,WAAW,EAGZ,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,UAAU,EAAM,MAAM,MAAM,CAAC;AAEtC,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC/D,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AAErE,OAAO,EAAE,qBAAqB,EAA2B,MAAM,mBAAmB,CAAC;AAEnF,qBACa,kBAAmB,YAAW,eAAe;IAItD,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACQ,OAAO,CAAC,QAAQ,CAAC,OAAO;IAL3D,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAuC;gBAG3C,QAAQ,EAAE,eAAe,EACzB,QAAQ,EAAE,iBAAiB,EACM,OAAO,EAAE,qBAAqB;IAGlF,SAAS,CAAC,OAAO,EAAE,gBAAgB,EAAE,IAAI,EAAE,WAAW,GAAG,UAAU,CAAC,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"toolbar.interceptor.d.ts","sourceRoot":"","sources":["../../src/interceptors/toolbar.interceptor.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,eAAe,EACf,gBAAgB,EAChB,WAAW,EAGZ,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,UAAU,EAAM,MAAM,MAAM,CAAC;AAEtC,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC/D,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AAErE,OAAO,EAAE,qBAAqB,EAA2B,MAAM,mBAAmB,CAAC;AAEnF,qBACa,kBAAmB,YAAW,eAAe;IAItD,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACQ,OAAO,CAAC,QAAQ,CAAC,OAAO;IAL3D,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAuC;gBAG3C,QAAQ,EAAE,eAAe,EACzB,QAAQ,EAAE,iBAAiB,EACM,OAAO,EAAE,qBAAqB;IAGlF,SAAS,CAAC,OAAO,EAAE,gBAAgB,EAAE,IAAI,EAAE,WAAW,GAAG,UAAU,CAAC,OAAO,CAAC;CAmD7E"}
|
|
@@ -56,7 +56,7 @@ let ToolbarInterceptor = ToolbarInterceptor_1 = class ToolbarInterceptor {
|
|
|
56
56
|
const token = profile.token;
|
|
57
57
|
const toolbarPath = this.options.toolbarPath || '/_profiler/toolbar';
|
|
58
58
|
const renderer = new toolbar_1.ToolbarRenderer();
|
|
59
|
-
const toolbarHtml = renderer.render(token, toolbarPath, this.registry);
|
|
59
|
+
const toolbarHtml = renderer.render(token, toolbarPath, this.registry, profile.method, profile.statusCode, profile.duration);
|
|
60
60
|
const injected = body.replace('</body>', `${toolbarHtml}\n</body>`);
|
|
61
61
|
return injected;
|
|
62
62
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"toolbar.interceptor.js","sourceRoot":"","sources":["../../src/interceptors/toolbar.interceptor.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,2CAOwB;AAExB,8CAAiD;AACjD,mEAA+D;AAC/D,yEAAqE;AACrE,8CAAmD;AACnD,sDAAmF;AAG5E,IAAM,kBAAkB,0BAAxB,MAAM,kBAAkB;IAIV;IACA;IACiC;IALnC,MAAM,GAAG,IAAI,eAAM,CAAC,oBAAkB,CAAC,IAAI,CAAC,CAAC;IAE9D,YACmB,QAAyB,EACzB,QAA2B,EACM,OAA8B;QAF/D,aAAQ,GAAR,QAAQ,CAAiB;QACzB,aAAQ,GAAR,QAAQ,CAAmB;QACM,YAAO,GAAP,OAAO,CAAuB;IAC/E,CAAC;IAEJ,SAAS,CAAC,OAAyB,EAAE,IAAiB;QACpD,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,CACvB,IAAA,eAAG,EAAC,CAAC,YAAqB,EAAE,EAAE;YAC5B,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO;gBAAE,OAAO,YAAY,CAAC;YAC/C,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE;gBAAE,OAAO,YAAY,CAAC;YAEpD,MAAM,QAAQ,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,WAAW,EAAE,CAAC;YACtD,MAAM,OAAO,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,UAAU,EAAE,CAAC;YAEpD,IAAI,QAAQ,CAAC,WAAW;gBAAE,OAAO,YAAY,CAAC;YAE9C,MAAM,WAAW,GAAG,OAAO,YAAY,KAAK,QAAQ;gBAClD,CAAC,CAAE,QAAgB,CAAC,SAAS,EAAE,CAAC,cAAc,CAAC,IAAI,EAAE;gBACrD,CAAC,CAAC,EAAE,CAAC;YAEP,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,OAAO,YAAY,KAAK,QAAQ,EAAE,CAAC;gBAC3E,OAAO,YAAY,CAAC;YACtB,CAAC;YAED,MAAM,IAAI,GAAG,OAAO,YAAY,KAAK,QAAQ;gBAC3C,CAAC,CAAC,YAAY;gBACd,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;YAEjC,IAAI,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;gBAC7B,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,iBAAiB,EAAE,CAAC;gBAClD,IAAI,CAAC,OAAO;oBAAE,OAAO,YAAY,CAAC;gBAElC,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;gBAC5B,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,oBAAoB,CAAC;gBACrE,MAAM,QAAQ,GAAG,IAAI,yBAAe,EAAE,CAAC;gBACvC,MAAM,WAAW,GAAG,QAAQ,CAAC,MAAM,
|
|
1
|
+
{"version":3,"file":"toolbar.interceptor.js","sourceRoot":"","sources":["../../src/interceptors/toolbar.interceptor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"icons.d.ts","sourceRoot":"","sources":["../../../src/views/icons/icons.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAexC,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ICONS = void 0;
|
|
4
|
+
exports.ICONS = {
|
|
5
|
+
request: `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M3 7v10a2 2 0 002 2h14a2 2 0 002-2V9a2 2 0 00-2-2h-6l-2-2H5a2 2 0 00-2 2z"/><path d="M12 11v6"/><path d="M9 14l3-3 3 3"/></svg>`,
|
|
6
|
+
time: `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"/><polyline points="12 6 12 12 16 14"/></svg>`,
|
|
7
|
+
exception: `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"/><line x1="12" y1="8" x2="12" y2="12"/><line x1="12" y1="16" x2="12.01" y2="16"/></svg>`,
|
|
8
|
+
route: `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"/><polygon points="10 8 16 12 10 16 10 8"/></svg>`,
|
|
9
|
+
log: `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M14 2H6a2 2 0 00-2 2v16a2 2 0 002 2h12a2 2 0 002-2V8z"/><polyline points="14 2 14 8 20 8"/><line x1="16" y1="13" x2="8" y2="13"/><line x1="16" y1="17" x2="8" y2="17"/><polyline points="10 9 9 9 8 9"/></svg>`,
|
|
10
|
+
database: `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><ellipse cx="12" cy="5" rx="9" ry="3"/><path d="M21 12c0 1.66-4 3-9 3s-9-1.34-9-3"/><path d="M3 5v14c0 1.66 4 3 9 3s9-1.34 9-3V5"/></svg>`,
|
|
11
|
+
cache: `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M4 4h16c1.1 0 2 .9 2 2v12c0 1.1-.9 2-2 2H4c-1.1 0-2-.9-2-2V6c0-1.1.9-2 2-2z"/><polyline points="22 6 12 13 2 6"/></svg>`,
|
|
12
|
+
memory: `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="4" y="4" width="16" height="16" rx="2" ry="2"/><rect x="9" y="9" width="6" height="6"/><line x1="9" y1="1" x2="9" y2="4"/><line x1="15" y1="1" x2="15" y2="4"/><line x1="9" y1="20" x2="9" y2="23"/><line x1="15" y1="20" x2="15" y2="23"/><line x1="20" y1="9" x2="23" y2="9"/><line x1="20" y1="14" x2="23" y2="14"/><line x1="1" y1="9" x2="4" y2="9"/><line x1="1" y1="14" x2="4" y2="14"/></svg>`,
|
|
13
|
+
search: `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="11" cy="11" r="8"/><line x1="21" y1="21" x2="16.65" y2="16.65"/></svg>`,
|
|
14
|
+
chevron_right: `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="9 18 15 12 9 6"/></svg>`,
|
|
15
|
+
chevron_left: `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="15 18 9 12 15 6"/></svg>`,
|
|
16
|
+
close: `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><line x1="18" y1="6" x2="6" y2="18"/><line x1="6" y1="6" x2="18" y2="18"/></svg>`,
|
|
17
|
+
external: `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M18 13v6a2 2 0 01-2 2H5a2 2 0 01-2-2V8a2 2 0 012-2h6"/><polyline points="15 3 21 3 21 9"/><line x1="10" y1="14" x2="21" y2="3"/></svg>`,
|
|
18
|
+
symfony: `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M12 2L2 7l10 5 10-5-10-5zM2 17l10 5 10-5M2 12l10 5 10-5"/></svg>`,
|
|
19
|
+
};
|
|
20
|
+
//# sourceMappingURL=icons.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"icons.js","sourceRoot":"","sources":["../../../src/views/icons/icons.ts"],"names":[],"mappings":";;;AAAa,QAAA,KAAK,GAA2B;IAC3C,OAAO,EAAE,wSAAwS;IACjT,IAAI,EAAE,2OAA2O;IACjP,SAAS,EAAE,sRAAsR;IACjS,KAAK,EAAE,+OAA+O;IACtP,GAAG,EAAE,uXAAuX;IAC5X,QAAQ,EAAE,ySAAyS;IACnT,KAAK,EAAE,gSAAgS;IACvS,MAAM,EAAE,8iBAA8iB;IACtjB,MAAM,EAAE,kPAAkP;IAC1P,aAAa,EAAE,yMAAyM;IACxN,YAAY,EAAE,0MAA0M;IACxN,KAAK,EAAE,gPAAgP;IACvP,QAAQ,EAAE,+SAA+S;IACzT,OAAO,EAAE,yOAAyO;CACnP,CAAC"}
|
package/dist/views/layout.d.ts
CHANGED
|
@@ -12,4 +12,5 @@ export declare function renderProfilerLayout(title: string, content: string, pro
|
|
|
12
12
|
}[], activePanel: string, searchResults?: ProfileSummary[]): string;
|
|
13
13
|
export declare function renderPanelContent(title: string, bodyHtml: string): string;
|
|
14
14
|
export declare function renderKeyValueTable(items: Record<string, unknown>, keyLabel?: string, valueLabel?: string): string;
|
|
15
|
+
export declare function renderSummaryCard(label: string, value: string, colorClass?: string): string;
|
|
15
16
|
//# sourceMappingURL=layout.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"layout.d.ts","sourceRoot":"","sources":["../../src/views/layout.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"layout.d.ts","sourceRoot":"","sources":["../../src/views/layout.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAEzD,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,YAAY,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACvC,KAAK,EAAE,MAAM,CAAC;CACf;AAED,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,YAAY,EACrB,MAAM,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,EAAE,EACzC,WAAW,EAAE,MAAM,EACnB,aAAa,CAAC,EAAE,cAAc,EAAE,GAC/B,MAAM,CA+GR;AAqBD,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAE1E;AAED,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC9B,QAAQ,SAAQ,EAChB,UAAU,SAAU,GACnB,MAAM,CAMR;AAiBD,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,SAAK,GAAG,MAAM,CAEvF"}
|
package/dist/views/layout.js
CHANGED
|
@@ -3,66 +3,105 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.renderProfilerLayout = renderProfilerLayout;
|
|
4
4
|
exports.renderPanelContent = renderPanelContent;
|
|
5
5
|
exports.renderKeyValueTable = renderKeyValueTable;
|
|
6
|
+
exports.renderSummaryCard = renderSummaryCard;
|
|
7
|
+
const icons_1 = require("./icons/icons");
|
|
6
8
|
function renderProfilerLayout(title, content, profile, panels, activePanel, searchResults) {
|
|
7
9
|
const sidebarItems = panels
|
|
8
10
|
.map(p => {
|
|
9
|
-
const active = p.name === activePanel
|
|
10
|
-
const hasData = profile.hasCollector(p.name)
|
|
11
|
-
return `<li
|
|
11
|
+
const active = p.name === activePanel;
|
|
12
|
+
const hasData = profile.hasCollector(p.name);
|
|
13
|
+
return `<li${active ? ' class="active"' : ''}${hasData ? '' : ' data-empty'}>
|
|
14
|
+
<a href="?panel=${p.name}">
|
|
15
|
+
<span class="sidebar-icon">${icons_1.ICONS[p.name] || ''}</span>
|
|
16
|
+
<span class="sidebar-label">${p.label}</span>
|
|
17
|
+
<span class="sidebar-status"></span>
|
|
18
|
+
</a>
|
|
19
|
+
</li>`;
|
|
12
20
|
})
|
|
13
21
|
.join('\n');
|
|
14
|
-
const searchHtml = searchResults
|
|
15
|
-
? renderSearchResults(searchResults)
|
|
16
|
-
: '';
|
|
22
|
+
const searchHtml = searchResults ? renderSearchResults(searchResults) : '';
|
|
17
23
|
return `<!DOCTYPE html>
|
|
18
24
|
<html lang="en">
|
|
19
25
|
<head>
|
|
20
26
|
<meta charset="UTF-8">
|
|
21
27
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
22
|
-
<title>${title}
|
|
28
|
+
<title>${title} — Profiler</title>
|
|
23
29
|
<style>
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
.header
|
|
28
|
-
.header
|
|
29
|
-
.header
|
|
30
|
-
.
|
|
31
|
-
.
|
|
32
|
-
.
|
|
33
|
-
.
|
|
34
|
-
.
|
|
35
|
-
.
|
|
36
|
-
.
|
|
37
|
-
.
|
|
38
|
-
.
|
|
39
|
-
.
|
|
40
|
-
.
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
.
|
|
48
|
-
.
|
|
49
|
-
.
|
|
50
|
-
.
|
|
51
|
-
.
|
|
52
|
-
.
|
|
53
|
-
.
|
|
54
|
-
|
|
55
|
-
|
|
30
|
+
:root{--bg:#0f0f1a;--bg2:#1a1a2e;--bg3:#14142a;--bg4:#252540;--border:#2a2a3e;--text:#e0e0e0;--text2:#aaa;--text3:#666;--accent:#4fc3f7;--accent2:#29b6f6;--green:#4caf50;--yellow:#ff9800;--red:#f44336;--white:#fff;--font:system-ui,-apple-system,'Segoe UI',Roboto,Helvetica,Arial,sans-serif;--font-mono:'JetBrains Mono','Fira Code',ui-monospace,monospace}
|
|
31
|
+
*,*::before,*::after{box-sizing:border-box;margin:0;padding:0}
|
|
32
|
+
body{font:14px/1.6 var(--font);background:var(--bg);color:var(--text)}
|
|
33
|
+
.header{background:var(--bg2);border-bottom:1px solid var(--border);padding:0 20px;display:flex;align-items:center;gap:12px;height:52px;position:sticky;top:0;z-index:100}
|
|
34
|
+
.header-icon{display:flex;align-items:center;color:var(--accent);flex-shrink:0}
|
|
35
|
+
.header-icon svg{width:22px;height:22px}
|
|
36
|
+
.header-title{font-size:15px;font-weight:600;color:var(--white)}
|
|
37
|
+
.header-badge{display:inline-flex;align-items:center;padding:2px 8px;border-radius:4px;font-size:11px;font-weight:600;line-height:1.5}
|
|
38
|
+
.header-badge.method{background:var(--accent);color:#000}
|
|
39
|
+
.header-badge.status{background:var(--bg4);color:var(--text)}
|
|
40
|
+
.header-badge.status-4xx{background:#332200;color:var(--yellow)}
|
|
41
|
+
.header-badge.status-5xx{background:#330000;color:var(--red)}
|
|
42
|
+
.header-badge.duration{background:var(--bg4);color:var(--accent)}
|
|
43
|
+
.header-path{font-size:13px;color:var(--text2);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0}
|
|
44
|
+
.header-path span{color:var(--text3)}
|
|
45
|
+
.header-meta{font-size:11px;color:var(--text3);white-space:nowrap;display:flex;align-items:center;gap:6px}
|
|
46
|
+
.header-sep{color:var(--border)}
|
|
47
|
+
.layout{display:flex;min-height:calc(100vh - 52px)}
|
|
48
|
+
.sidebar{width:220px;background:var(--bg3);border-right:1px solid var(--border);padding:8px 0;flex-shrink:0;overflow-y:auto}
|
|
49
|
+
.sidebar ul{list-style:none}
|
|
50
|
+
.sidebar li{padding:1px 0}
|
|
51
|
+
.sidebar li a{display:flex;align-items:center;gap:10px;padding:7px 16px;color:var(--text2);text-decoration:none;font-size:13px;transition:all .12s;border-left:3px solid transparent}
|
|
52
|
+
.sidebar li a:hover{background:var(--bg2);color:var(--text)}
|
|
53
|
+
.sidebar li.active a{background:var(--bg2);color:var(--accent);border-left-color:var(--accent);font-weight:500}
|
|
54
|
+
.sidebar li[data-empty] a{opacity:.4}
|
|
55
|
+
.sidebar li[data-empty].active a{opacity:.7}
|
|
56
|
+
.sidebar-icon{display:flex;align-items:center;width:18px;height:18px;flex-shrink:0}
|
|
57
|
+
.sidebar-icon svg{width:18px;height:18px;stroke:currentColor;fill:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}
|
|
58
|
+
.sidebar-label{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis}
|
|
59
|
+
.sidebar-status{margin-left:auto}
|
|
60
|
+
.content{flex:1;padding:24px 32px;overflow-x:auto;max-width:1200px}
|
|
61
|
+
.content h2{font-size:18px;font-weight:600;margin-bottom:16px;color:var(--white);display:flex;align-items:center;gap:8px}
|
|
62
|
+
.content h3{font-size:14px;font-weight:600;margin:20px 0 8px;color:var(--text2);text-transform:uppercase;letter-spacing:.5px}
|
|
63
|
+
.summary-bar{display:flex;gap:12px;margin-bottom:20px;flex-wrap:wrap}
|
|
64
|
+
.summary-card{background:var(--bg2);border:1px solid var(--border);border-radius:6px;padding:12px 16px;flex:1;min-width:140px}
|
|
65
|
+
.summary-card .label{font-size:10px;color:var(--text3);text-transform:uppercase;letter-spacing:.8px;font-weight:600}
|
|
66
|
+
.summary-card .value{font-size:20px;font-weight:700;color:var(--white);margin-top:2px;line-height:1.2}
|
|
67
|
+
.summary-card .value.green{color:var(--green)}
|
|
68
|
+
.summary-card .value.yellow{color:var(--yellow)}
|
|
69
|
+
.summary-card .value.red{color:var(--red)}
|
|
70
|
+
.summary-card .value.accent{color:var(--accent)}
|
|
71
|
+
table{width:100%;border-collapse:collapse;margin-bottom:16px}
|
|
72
|
+
th,td{text-align:left;padding:8px 12px;border-bottom:1px solid var(--border);font-size:13px;line-height:1.5}
|
|
73
|
+
th{color:var(--text3);font-weight:600;text-transform:uppercase;font-size:10px;letter-spacing:.8px}
|
|
74
|
+
td{color:var(--text)}
|
|
75
|
+
tr:hover td{background:var(--bg4)}
|
|
76
|
+
pre{background:var(--bg2);padding:12px 16px;border-radius:4px;overflow-x:auto;font:12px/1.7 var(--font-mono);color:var(--text);border:1px solid var(--border);margin-bottom:12px}
|
|
77
|
+
code{font-family:var(--font-mono);font-size:12px;background:var(--bg2);padding:1px 4px;border-radius:3px}
|
|
78
|
+
.badge{display:inline-flex;align-items:center;padding:1px 8px;border-radius:3px;font-size:11px;font-weight:600}
|
|
79
|
+
.badge-info{background:var(--bg4);color:var(--accent)}
|
|
80
|
+
.badge-error{background:#330000;color:var(--red)}
|
|
81
|
+
.badge-warn{background:#332200;color:var(--yellow)}
|
|
82
|
+
.badge-success{background:#003300;color:var(--green)}
|
|
83
|
+
.search-bar{background:var(--bg2);border-bottom:1px solid var(--border);padding:12px 20px;display:flex;align-items:center;gap:12px}
|
|
84
|
+
.search-bar input{background:var(--bg);border:1px solid var(--border);color:var(--text);padding:6px 12px;border-radius:4px;font:13px var(--font);width:280px;outline:none}
|
|
85
|
+
.search-bar input:focus{border-color:var(--accent)}
|
|
86
|
+
.search-bar button{background:var(--accent);color:#000;border:none;padding:6px 16px;border-radius:4px;cursor:pointer;font:13px/1.4 var(--font);font-weight:600;transition:opacity .15s}
|
|
87
|
+
.search-bar button:hover{opacity:.9}
|
|
88
|
+
a{color:var(--accent);text-decoration:none}
|
|
89
|
+
a:hover{text-decoration:underline}
|
|
90
|
+
.empty-state{padding:40px;text-align:center;color:var(--text3);font-size:14px}
|
|
56
91
|
</style>
|
|
57
92
|
</head>
|
|
58
93
|
<body>
|
|
59
94
|
<div class="header">
|
|
60
|
-
<
|
|
61
|
-
<
|
|
62
|
-
<span class="badge">${profile.
|
|
63
|
-
<span class="badge">${profile.
|
|
64
|
-
<
|
|
65
|
-
<
|
|
95
|
+
<div class="header-icon">${icons_1.ICONS.symfony}</div>
|
|
96
|
+
<div class="header-title">Profiler</div>
|
|
97
|
+
<span class="header-badge method">${profile.method}</span>
|
|
98
|
+
<span class="header-badge status status-${profile.statusCode >= 500 ? '5xx' : profile.statusCode >= 400 ? '4xx' : ''}">${profile.statusCode}</span>
|
|
99
|
+
<div class="header-path">${profile.path} <span>— ${profile.url}</span></div>
|
|
100
|
+
<div class="header-meta">
|
|
101
|
+
<span>${new Date(profile.time).toLocaleString()}</span>
|
|
102
|
+
<span class="header-sep">·</span>
|
|
103
|
+
<span>TOKEN: <strong style="color:var(--accent);font-weight:600">${profile.token}</strong></span>
|
|
104
|
+
</div>
|
|
66
105
|
</div>
|
|
67
106
|
${searchHtml}
|
|
68
107
|
<div class="layout">
|
|
@@ -77,30 +116,20 @@ ${searchHtml}
|
|
|
77
116
|
</html>`;
|
|
78
117
|
}
|
|
79
118
|
function renderSearchResults(results) {
|
|
80
|
-
if (!results.length)
|
|
81
|
-
return '';
|
|
82
119
|
return `<div class="search-bar">
|
|
83
|
-
<
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
<
|
|
89
|
-
<
|
|
90
|
-
<
|
|
91
|
-
<
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
.
|
|
95
|
-
|
|
96
|
-
<td>${r.method}</td>
|
|
97
|
-
<td>${r.url}</td>
|
|
98
|
-
<td>${r.statusCode}</td>
|
|
99
|
-
<td>${new Date(r.time).toLocaleString()}</td>
|
|
100
|
-
<td>${r.duration} ms</td>
|
|
101
|
-
<td>${r.ip}</td>
|
|
102
|
-
</tr>`)
|
|
103
|
-
.join('')}
|
|
120
|
+
<span style="font-size:13px;color:var(--text3)">${icons_1.ICONS.search}</span>
|
|
121
|
+
<input type="text" placeholder="Search by token, URL, IP..." id="profiler-search" onkeydown="if(event.key==='Enter'){window.location.href='?token='+this.value}">
|
|
122
|
+
<table style="margin:0;font-size:12px">
|
|
123
|
+
<thead><tr><th>Token</th><th>Method</th><th>URL</th><th>Status</th><th>Duration</th><th>Time</th><th>IP</th></tr></thead>
|
|
124
|
+
<tbody>${results.map(r => `<tr>
|
|
125
|
+
<td><a href="?token=${r.token}" style="color:var(--accent)">${r.token}</a></td>
|
|
126
|
+
<td><span class="badge badge-info">${r.method}</span></td>
|
|
127
|
+
<td style="max-width:300px;overflow:hidden;text-overflow:ellipsis">${r.url}</td>
|
|
128
|
+
<td><span class="badge ${r.statusCode >= 500 ? 'badge-error' : r.statusCode >= 400 ? 'badge-warn' : 'badge-success'}">${r.statusCode}</span></td>
|
|
129
|
+
<td>${r.duration} ms</td>
|
|
130
|
+
<td style="white-space:nowrap">${new Date(r.time).toLocaleString()}</td>
|
|
131
|
+
<td>${r.ip}</td>
|
|
132
|
+
</tr>`).join('')}</tbody>
|
|
104
133
|
</table>
|
|
105
134
|
</div>`;
|
|
106
135
|
}
|
|
@@ -109,35 +138,28 @@ function renderPanelContent(title, bodyHtml) {
|
|
|
109
138
|
}
|
|
110
139
|
function renderKeyValueTable(items, keyLabel = 'Key', valueLabel = 'Value') {
|
|
111
140
|
const rows = Object.entries(items)
|
|
112
|
-
.map(([key, val]) => `<tr><td style="font-weight:500;color
|
|
141
|
+
.map(([key, val]) => `<tr><td style="font-weight:500;color:var(--text2)">${key}</td><td>${formatValue(val)}</td></tr>`)
|
|
113
142
|
.join('');
|
|
114
|
-
return `<table><thead><tr><th>${keyLabel}</th><th>${valueLabel}</th></tr></thead><tbody>${rows}</tbody></table>`;
|
|
143
|
+
return `<table><thead><tr><th>${keyLabel}</th><th>${valueLabel}</th></tr></thead><tbody>${rows || '<tr><td colspan="2" class="empty-state">No data</td></tr>'}</tbody></table>`;
|
|
115
144
|
}
|
|
116
145
|
function formatValue(val) {
|
|
117
146
|
if (val === null || val === undefined)
|
|
118
|
-
return '<span class="
|
|
147
|
+
return '<span class="empty-state">-</span>';
|
|
119
148
|
if (typeof val === 'boolean')
|
|
120
|
-
return `<
|
|
149
|
+
return `<code>${val}</code>`;
|
|
121
150
|
if (typeof val === 'number')
|
|
122
|
-
return `<
|
|
151
|
+
return `<code>${val}</code>`;
|
|
123
152
|
if (typeof val === 'string') {
|
|
124
|
-
if (val.length >
|
|
125
|
-
return `<
|
|
126
|
-
return `<
|
|
127
|
-
}
|
|
128
|
-
if (Array.isArray(val)) {
|
|
129
|
-
return `<pre>${escapeHtml(JSON.stringify(val, null, 2))}</pre>`;
|
|
153
|
+
if (val.length > 300)
|
|
154
|
+
return `<code>${escapeHtml(val.slice(0, 300))}…</code>`;
|
|
155
|
+
return `<code>${escapeHtml(val)}</code>`;
|
|
130
156
|
}
|
|
131
|
-
|
|
132
|
-
return `<pre>${escapeHtml(JSON.stringify(val, null, 2))}</pre>`;
|
|
133
|
-
}
|
|
134
|
-
return `<span class="value">${escapeHtml(String(val))}</span>`;
|
|
157
|
+
return `<pre>${escapeHtml(JSON.stringify(val, null, 2))}</pre>`;
|
|
135
158
|
}
|
|
136
159
|
function escapeHtml(str) {
|
|
137
|
-
return str
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
.replace(/"/g, '"');
|
|
160
|
+
return str.replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>').replace(/"/g, '"');
|
|
161
|
+
}
|
|
162
|
+
function renderSummaryCard(label, value, colorClass = '') {
|
|
163
|
+
return `<div class="summary-card"><div class="label">${label}</div><div class="value${colorClass ? ' ' + colorClass : ''}">${value}</div></div>`;
|
|
142
164
|
}
|
|
143
165
|
//# sourceMappingURL=layout.js.map
|
package/dist/views/layout.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"layout.js","sourceRoot":"","sources":["../../src/views/layout.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"layout.js","sourceRoot":"","sources":["../../src/views/layout.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cache-panel.d.ts","sourceRoot":"","sources":["../../../src/views/panels/cache-panel.ts"],"names":[],"mappings":"AAEA,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"cache-panel.d.ts","sourceRoot":"","sources":["../../../src/views/panels/cache-panel.ts"],"names":[],"mappings":"AAEA,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAyCtE"}
|
|
@@ -6,36 +6,36 @@ function renderCachePanel(data) {
|
|
|
6
6
|
const typeCounts = data.operationsByType || {};
|
|
7
7
|
const recentOps = data.recentOperations || [];
|
|
8
8
|
const typeRows = Object.entries(typeCounts)
|
|
9
|
-
.map(([type, count]) => `<tr><td>${type}</td><td>${count}</td></tr>`)
|
|
9
|
+
.map(([type, count]) => `<tr><td><code>${type}</code></td><td><span class="badge badge-info">${count}</span></td></tr>`)
|
|
10
10
|
.join('');
|
|
11
11
|
const opRows = recentOps
|
|
12
12
|
.reverse()
|
|
13
|
-
.map(
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
13
|
+
.map(op => `<tr>
|
|
14
|
+
<td><code>${op.action}</code></td>
|
|
15
|
+
<td style="max-width:300px;overflow:hidden;text-overflow:ellipsis"><code>${escapeHtml(String(op.key || ''))}</code></td>
|
|
16
|
+
<td>${op.hit === true ? '<span class="badge badge-success">✓</span>' : op.hit === false ? '<span class="badge badge-error">✗</span>' : '-'}</td>
|
|
17
|
+
<td><span class="badge badge-info">${Math.round(op.duration * 100) / 100} ms</span></td>
|
|
18
|
+
</tr>`)
|
|
19
19
|
.join('');
|
|
20
20
|
const body = `
|
|
21
21
|
<div class="summary-bar">
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
22
|
+
${(0, layout_1.renderSummaryCard)('Operations', String(data.totalOperations || 0))}
|
|
23
|
+
${(0, layout_1.renderSummaryCard)('Hits', String(data.totalHits || 0), 'green')}
|
|
24
|
+
${(0, layout_1.renderSummaryCard)('Misses', String(data.totalMisses || 0), data.totalMisses ? 'yellow' : '')}
|
|
25
|
+
${(0, layout_1.renderSummaryCard)('Hit Rate', `${data.hitRate || 0}%`, data.hitRate > 80 ? 'green' : data.hitRate > 50 ? 'yellow' : '')}
|
|
26
|
+
${(0, layout_1.renderSummaryCard)('Total Time', `${data.totalDuration || 0} ms`, 'accent')}
|
|
27
27
|
</div>
|
|
28
28
|
|
|
29
29
|
<h3>Operations by Type</h3>
|
|
30
30
|
<table>
|
|
31
31
|
<thead><tr><th>Type</th><th>Count</th></tr></thead>
|
|
32
|
-
<tbody>${typeRows || '<tr><td colspan="2">No operations</td></tr>'}</tbody>
|
|
32
|
+
<tbody>${typeRows || '<tr><td colspan="2"><div class="empty-state">No operations</div></td></tr>'}</tbody>
|
|
33
33
|
</table>
|
|
34
34
|
|
|
35
35
|
<h3>Recent Operations</h3>
|
|
36
36
|
<table>
|
|
37
37
|
<thead><tr><th>Action</th><th>Key</th><th>Hit</th><th>Duration</th></tr></thead>
|
|
38
|
-
<tbody>${opRows || '<tr><td colspan="4">No operations</td></tr>'}</tbody>
|
|
38
|
+
<tbody>${opRows || '<tr><td colspan="4"><div class="empty-state">No operations recorded</div></td></tr>'}</tbody>
|
|
39
39
|
</table>
|
|
40
40
|
`;
|
|
41
41
|
return (0, layout_1.renderPanelContent)('Cache', body);
|