devtools-nestjs 2.0.7 → 2.1.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.
Files changed (35) hide show
  1. package/dist/interceptors/toolbar.interceptor.d.ts.map +1 -1
  2. package/dist/interceptors/toolbar.interceptor.js +1 -1
  3. package/dist/interceptors/toolbar.interceptor.js.map +1 -1
  4. package/dist/views/icons/icons.d.ts +2 -0
  5. package/dist/views/icons/icons.d.ts.map +1 -0
  6. package/dist/views/icons/icons.js +20 -0
  7. package/dist/views/icons/icons.js.map +1 -0
  8. package/dist/views/layout.d.ts +1 -0
  9. package/dist/views/layout.d.ts.map +1 -1
  10. package/dist/views/layout.js +112 -88
  11. package/dist/views/layout.js.map +1 -1
  12. package/dist/views/panels/cache-panel.d.ts.map +1 -1
  13. package/dist/views/panels/cache-panel.js +14 -14
  14. package/dist/views/panels/cache-panel.js.map +1 -1
  15. package/dist/views/panels/database-panel.d.ts.map +1 -1
  16. package/dist/views/panels/database-panel.js +16 -15
  17. package/dist/views/panels/database-panel.js.map +1 -1
  18. package/dist/views/panels/exception-panel.d.ts.map +1 -1
  19. package/dist/views/panels/exception-panel.js +5 -10
  20. package/dist/views/panels/exception-panel.js.map +1 -1
  21. package/dist/views/panels/log-panel.d.ts.map +1 -1
  22. package/dist/views/panels/log-panel.js +25 -28
  23. package/dist/views/panels/log-panel.js.map +1 -1
  24. package/dist/views/panels/request-panel.js +3 -3
  25. package/dist/views/panels/request-panel.js.map +1 -1
  26. package/dist/views/panels/route-panel.js +3 -3
  27. package/dist/views/panels/route-panel.js.map +1 -1
  28. package/dist/views/panels/time-panel.d.ts.map +1 -1
  29. package/dist/views/panels/time-panel.js +13 -10
  30. package/dist/views/panels/time-panel.js.map +1 -1
  31. package/dist/views/toolbar.d.ts +4 -3
  32. package/dist/views/toolbar.d.ts.map +1 -1
  33. package/dist/views/toolbar.js +87 -114
  34. package/dist/views/toolbar.js.map +1 -1
  35. package/package.json +1 -1
@@ -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;CAgD7E"}
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,CAAC,KAAK,EAAE,WAAW,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;gBAEvE,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAC3B,SAAS,EACT,GAAG,WAAW,WAAW,CAC1B,CAAC;gBAEF,OAAO,QAAQ,CAAC;YAClB,CAAC;YAED,OAAO,YAAY,CAAC;QACtB,CAAC,CAAC,EACF,IAAA,sBAAU,EAAC,CAAC,GAAG,EAAE,EAAE;YACjB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,0BAA0B,EAAE,GAAG,CAAC,CAAC;YACnD,MAAM,GAAG,CAAC;QACZ,CAAC,CAAC,CACH,CAAC;IACJ,CAAC;CACF,CAAA;AAzDY,gDAAkB;6BAAlB,kBAAkB;IAD9B,IAAA,mBAAU,GAAE;IAOR,WAAA,IAAA,eAAM,EAAC,wCAAuB,CAAC,CAAA;qCAFL,kCAAe;QACf,sCAAiB;GALnC,kBAAkB,CAyD9B"}
1
+ {"version":3,"file":"toolbar.interceptor.js","sourceRoot":"","sources":["../../src/interceptors/toolbar.interceptor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare const ICONS: Record<string, string>;
2
+ //# sourceMappingURL=icons.d.ts.map
@@ -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"}
@@ -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":"AAAA,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,CA0ER;AAiCD,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM,GACf,MAAM,CAER;AAED,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC9B,QAAQ,SAAQ,EAChB,UAAU,SAAU,GACnB,MAAM,CAQR"}
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,CAiHR;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"}
@@ -3,66 +3,107 @@ 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 ? 'class="active"' : '';
10
- const hasData = profile.hasCollector(p.name) ? '' : 'data-empty';
11
- return `<li ${active} ${hasData}><a href="?panel=${p.name}">${p.label}</a></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} - Profiler</title>
28
+ <title>${title} Profiler</title>
23
29
  <style>
24
- *, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
25
- body { font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; background: #0f0f1a; color: #e0e0e0; font-size: 14px; line-height: 1.5; }
26
- .header { background: linear-gradient(135deg, #1a1a2e 0%, #16213e 100%); padding: 16px 24px; border-bottom: 1px solid #2a2a3e; display: flex; align-items: center; gap: 16px; }
27
- .header h1 { font-size: 18px; font-weight: 600; color: #fff; }
28
- .header .meta { font-size: 12px; color: #888; }
29
- .header .badge { background: #2a2a3e; padding: 2px 8px; border-radius: 4px; font-size: 11px; }
30
- .layout { display: flex; min-height: calc(100vh - 60px); }
31
- .sidebar { width: 220px; background: #14142a; border-right: 1px solid #2a2a3e; padding: 12px 0; flex-shrink: 0; }
32
- .sidebar ul { list-style: none; }
33
- .sidebar li { padding: 2px 0; }
34
- .sidebar li a { display: block; padding: 8px 16px; color: #aaa; text-decoration: none; font-size: 13px; transition: background 0.15s; }
35
- .sidebar li a:hover { background: #1a1a3e; color: #fff; }
36
- .sidebar li.active a { background: #1a1a3e; color: #4fc3f7; border-left: 3px solid #4fc3f7; }
37
- .sidebar li[data-empty] a { opacity: 0.4; }
38
- .content { flex: 1; padding: 24px; overflow-x: auto; }
39
- .content h2 { font-size: 20px; font-weight: 600; margin-bottom: 16px; color: #fff; }
40
- .content h3 { font-size: 16px; font-weight: 600; margin: 16px 0 8px; color: #ccc; }
41
- table { width: 100%; border-collapse: collapse; margin-bottom: 16px; }
42
- th, td { text-align: left; padding: 8px 12px; border-bottom: 1px solid #2a2a3e; font-size: 13px; }
43
- th { color: #888; font-weight: 500; text-transform: uppercase; font-size: 11px; letter-spacing: 0.5px; }
44
- td { color: #ccc; }
45
- td .value { font-family: 'JetBrains Mono', 'Fira Code', monospace; font-size: 12px; }
46
- tr:hover td { background: #1a1a2e; }
47
- .summary-bar { display: flex; gap: 16px; margin-bottom: 24px; flex-wrap: wrap; }
48
- .summary-item { background: #1a1a2e; border: 1px solid #2a2a3e; border-radius: 8px; padding: 12px 16px; flex: 1; min-width: 120px; }
49
- .summary-item .label { font-size: 11px; color: #888; text-transform: uppercase; letter-spacing: 0.5px; }
50
- .summary-item .value { font-size: 18px; font-weight: 600; color: #fff; margin-top: 4px; }
51
- .search-bar { padding: 12px 16px; background: #1a1a2e; border-bottom: 1px solid #2a2a3e; }
52
- .search-bar input { background: #0f0f1a; border: 1px solid #2a2a3e; color: #e0e0e0; padding: 6px 12px; border-radius: 4px; font-size: 13px; width: 300px; }
53
- .search-bar button { background: #4fc3f7; color: #000; border: none; padding: 6px 16px; border-radius: 4px; cursor: pointer; font-size: 13px; font-weight: 500; }
54
- pre { background: #0f0f1a; padding: 12px; border-radius: 4px; overflow-x: auto; font-size: 12px; line-height: 1.6; }
55
- code { font-family: 'JetBrains Mono', 'Fira Code', monospace; }
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
+ .layout{display:flex;min-height:calc(100vh - 52px)}
47
+ .sidebar{width:220px;background:var(--bg3);border-right:1px solid var(--border);padding:8px 0;flex-shrink:0;overflow-y:auto}
48
+ .sidebar ul{list-style:none}
49
+ .sidebar li{padding:1px 0}
50
+ .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}
51
+ .sidebar li a:hover{background:var(--bg2);color:var(--text)}
52
+ .sidebar li.active a{background:var(--bg2);color:var(--accent);border-left-color:var(--accent);font-weight:500}
53
+ .sidebar li[data-empty] a{opacity:.4}
54
+ .sidebar li[data-empty].active a{opacity:.7}
55
+ .sidebar-icon{display:flex;align-items:center;width:18px;height:18px;flex-shrink:0}
56
+ .sidebar-icon svg{width:18px;height:18px;stroke:currentColor;fill:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}
57
+ .sidebar-label{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis}
58
+ .sidebar-status{margin-left:auto}
59
+ .content{flex:1;padding:24px 32px;overflow-x:auto;max-width:1200px}
60
+ .content h2{font-size:18px;font-weight:600;margin-bottom:16px;color:var(--white);display:flex;align-items:center;gap:8px}
61
+ .content h3{font-size:14px;font-weight:600;margin:20px 0 8px;color:var(--text2);text-transform:uppercase;letter-spacing:.5px}
62
+ .summary-bar{display:flex;gap:12px;margin-bottom:20px;flex-wrap:wrap}
63
+ .summary-card{background:var(--bg2);border:1px solid var(--border);border-radius:6px;padding:12px 16px;flex:1;min-width:140px}
64
+ .summary-card .label{font-size:10px;color:var(--text3);text-transform:uppercase;letter-spacing:.8px;font-weight:600}
65
+ .summary-card .value{font-size:20px;font-weight:700;color:var(--white);margin-top:2px;line-height:1.2}
66
+ .summary-card .value.green{color:var(--green)}
67
+ .summary-card .value.yellow{color:var(--yellow)}
68
+ .summary-card .value.red{color:var(--red)}
69
+ .summary-card .value.accent{color:var(--accent)}
70
+ table{width:100%;border-collapse:collapse;margin-bottom:16px}
71
+ th,td{text-align:left;padding:8px 12px;border-bottom:1px solid var(--border);font-size:13px;line-height:1.5}
72
+ th{color:var(--text3);font-weight:600;text-transform:uppercase;font-size:10px;letter-spacing:.8px}
73
+ td{color:var(--text)}
74
+ tr:hover td{background:var(--bg4)}
75
+ 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}
76
+ code{font-family:var(--font-mono);font-size:12px;background:var(--bg2);padding:1px 4px;border-radius:3px}
77
+ .badge{display:inline-flex;align-items:center;padding:1px 8px;border-radius:3px;font-size:11px;font-weight:600}
78
+ .badge-info{background:var(--bg4);color:var(--accent)}
79
+ .badge-error{background:#330000;color:var(--red)}
80
+ .badge-warn{background:#332200;color:var(--yellow)}
81
+ .badge-success{background:#003300;color:var(--green)}
82
+ .search-bar{background:var(--bg2);border-bottom:1px solid var(--border);padding:12px 20px;display:flex;align-items:center;gap:12px}
83
+ .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}
84
+ .search-bar input:focus{border-color:var(--accent)}
85
+ .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}
86
+ .search-bar button:hover{opacity:.9}
87
+ a{color:var(--accent);text-decoration:none}
88
+ a:hover{text-decoration:underline}
89
+ .empty-state{padding:40px;text-align:center;color:var(--text3);font-size:14px}
56
90
  </style>
57
91
  </head>
58
92
  <body>
59
93
  <div class="header">
60
- <h1>NestJS Profiler</h1>
61
- <span class="badge">${profile.method}</span>
62
- <span class="badge">${profile.statusCode}</span>
63
- <span class="badge">${profile.duration} ms</span>
64
- <span class="meta">${new Date(profile.time).toLocaleString()}</span>
65
- <span class="meta">TOKEN: ${profile.token}</span>
94
+ <div class="header-icon">${icons_1.ICONS.symfony}</div>
95
+ <div class="header-title">Profiler</div>
96
+ <span class="header-badge method">${profile.method}</span>
97
+ <span class="header-badge status status-${profile.statusCode >= 500 ? '5xx' : profile.statusCode >= 400 ? '4xx' : ''}">${profile.statusCode}</span>
98
+ <div class="header-path">${profile.path} <span>— ${profile.url}</span></div>
99
+ <span class="header-badge duration">${profile.duration} ms</span>
100
+ <div class="header-meta">
101
+ ${icons_1.ICONS.time} <span>${profile.duration} ms</span>
102
+ <span>·</span>
103
+ <span>${new Date(profile.time).toLocaleString()}</span>
104
+ <span>·</span>
105
+ <span>TOKEN: <strong style="color:var(--accent);font-weight:600">${profile.token}</strong></span>
106
+ </div>
66
107
  </div>
67
108
  ${searchHtml}
68
109
  <div class="layout">
@@ -77,30 +118,20 @@ ${searchHtml}
77
118
  </html>`;
78
119
  }
79
120
  function renderSearchResults(results) {
80
- if (!results.length)
81
- return '';
82
121
  return `<div class="search-bar">
83
- <table>
84
- <tr>
85
- <th>Token</th>
86
- <th>Method</th>
87
- <th>URL</th>
88
- <th>Status</th>
89
- <th>Time</th>
90
- <th>Duration</th>
91
- <th>IP</th>
92
- </tr>
93
- ${results
94
- .map(r => `<tr>
95
- <td><a href="?token=${r.token}" style="color:#4fc3f7">${r.token}</a></td>
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('')}
122
+ <span style="font-size:13px;color:var(--text3)">${icons_1.ICONS.search}</span>
123
+ <input type="text" placeholder="Search by token, URL, IP..." id="profiler-search" onkeydown="if(event.key==='Enter'){window.location.href='?token='+this.value}">
124
+ <table style="margin:0;font-size:12px">
125
+ <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>
126
+ <tbody>${results.map(r => `<tr>
127
+ <td><a href="?token=${r.token}" style="color:var(--accent)">${r.token}</a></td>
128
+ <td><span class="badge badge-info">${r.method}</span></td>
129
+ <td style="max-width:300px;overflow:hidden;text-overflow:ellipsis">${r.url}</td>
130
+ <td><span class="badge ${r.statusCode >= 500 ? 'badge-error' : r.statusCode >= 400 ? 'badge-warn' : 'badge-success'}">${r.statusCode}</span></td>
131
+ <td>${r.duration} ms</td>
132
+ <td style="white-space:nowrap">${new Date(r.time).toLocaleString()}</td>
133
+ <td>${r.ip}</td>
134
+ </tr>`).join('')}</tbody>
104
135
  </table>
105
136
  </div>`;
106
137
  }
@@ -109,35 +140,28 @@ function renderPanelContent(title, bodyHtml) {
109
140
  }
110
141
  function renderKeyValueTable(items, keyLabel = 'Key', valueLabel = 'Value') {
111
142
  const rows = Object.entries(items)
112
- .map(([key, val]) => `<tr><td style="font-weight:500;color:#888">${key}</td><td>${formatValue(val)}</td></tr>`)
143
+ .map(([key, val]) => `<tr><td style="font-weight:500;color:var(--text2)">${key}</td><td>${formatValue(val)}</td></tr>`)
113
144
  .join('');
114
- return `<table><thead><tr><th>${keyLabel}</th><th>${valueLabel}</th></tr></thead><tbody>${rows}</tbody></table>`;
145
+ 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
146
  }
116
147
  function formatValue(val) {
117
148
  if (val === null || val === undefined)
118
- return '<span class="value">-</span>';
149
+ return '<span class="empty-state">-</span>';
119
150
  if (typeof val === 'boolean')
120
- return `<span class="value">${val}</span>`;
151
+ return `<code>${val}</code>`;
121
152
  if (typeof val === 'number')
122
- return `<span class="value">${val}</span>`;
153
+ return `<code>${val}</code>`;
123
154
  if (typeof val === 'string') {
124
- if (val.length > 200)
125
- return `<span class="value">${escapeHtml(val.slice(0, 200))}...</span>`;
126
- return `<span class="value">${escapeHtml(val)}</span>`;
127
- }
128
- if (Array.isArray(val)) {
129
- return `<pre>${escapeHtml(JSON.stringify(val, null, 2))}</pre>`;
155
+ if (val.length > 300)
156
+ return `<code>${escapeHtml(val.slice(0, 300))}…</code>`;
157
+ return `<code>${escapeHtml(val)}</code>`;
130
158
  }
131
- if (typeof val === 'object') {
132
- return `<pre>${escapeHtml(JSON.stringify(val, null, 2))}</pre>`;
133
- }
134
- return `<span class="value">${escapeHtml(String(val))}</span>`;
159
+ return `<pre>${escapeHtml(JSON.stringify(val, null, 2))}</pre>`;
135
160
  }
136
161
  function escapeHtml(str) {
137
- return str
138
- .replace(/&/g, '&amp;')
139
- .replace(/</g, '&lt;')
140
- .replace(/>/g, '&gt;')
141
- .replace(/"/g, '&quot;');
162
+ return str.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/"/g, '&quot;');
163
+ }
164
+ function renderSummaryCard(label, value, colorClass = '') {
165
+ return `<div class="summary-card"><div class="label">${label}</div><div class="value${colorClass ? ' ' + colorClass : ''}">${value}</div></div>`;
142
166
  }
143
167
  //# sourceMappingURL=layout.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"layout.js","sourceRoot":"","sources":["../../src/views/layout.ts"],"names":[],"mappings":"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"}
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,CA2CtE"}
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((op, i) => `<tr>
14
- <td>${op.action}</td>
15
- <td><code>${escapeHtml(String(op.key || ''))}</code></td>
16
- <td>${op.hit === true ? '' : op.hit === false ? '' : '-'}</td>
17
- <td>${Math.round(op.duration * 100) / 100} ms</td>
18
- </tr>`)
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
- <div class="summary-item"><div class="label">Operations</div><div class="value">${data.totalOperations || 0}</div></div>
23
- <div class="summary-item"><div class="label">Hits</div><div class="value">${data.totalHits || 0}</div></div>
24
- <div class="summary-item"><div class="label">Misses</div><div class="value">${data.totalMisses || 0}</div></div>
25
- <div class="summary-item"><div class="label">Hit Rate</div><div class="value">${data.hitRate || 0}%</div></div>
26
- <div class="summary-item"><div class="label">Total Time</div><div class="value">${data.totalDuration || 0} ms</div></div>
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);
@@ -1 +1 @@
1
- {"version":3,"file":"cache-panel.js","sourceRoot":"","sources":["../../../src/views/panels/cache-panel.ts"],"names":[],"mappings":";;AAEA,4CA2CC;AA7CD,sCAA+C;AAE/C,SAAgB,gBAAgB,CAAC,IAA6B;IAC5D,MAAM,UAAU,GAAI,IAAI,CAAC,gBAA2C,IAAI,EAAE,CAAC;IAC3E,MAAM,SAAS,GAAI,IAAI,CAAC,gBAAmD,IAAI,EAAE,CAAC;IAElF,MAAM,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC;SACxC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,WAAW,IAAI,YAAY,KAAK,YAAY,CAAC;SACpE,IAAI,CAAC,EAAE,CAAC,CAAC;IAEZ,MAAM,MAAM,GAAG,SAAS;SACrB,OAAO,EAAE;SACT,GAAG,CACF,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;cACH,EAAE,CAAC,MAAM;oBACH,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC;cACtC,EAAE,CAAC,GAAG,KAAK,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,KAAK,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG;cACpD,IAAI,CAAC,KAAK,CAAE,EAAE,CAAC,QAAmB,GAAG,GAAG,CAAC,GAAG,GAAG;YACjD,CACP;SACA,IAAI,CAAC,EAAE,CAAC,CAAC;IAEZ,MAAM,IAAI,GAAG;;wFAEyE,IAAI,CAAC,eAAe,IAAI,CAAC;kFAC/B,IAAI,CAAC,SAAS,IAAI,CAAC;oFACjB,IAAI,CAAC,WAAW,IAAI,CAAC;sFACnB,IAAI,CAAC,OAAO,IAAI,CAAC;wFACf,IAAI,CAAC,aAAa,IAAI,CAAC;;;;;;eAMhG,QAAQ,IAAI,6CAA6C;;;;;;eAMzD,MAAM,IAAI,6CAA6C;;GAEnE,CAAC;IAEF,OAAO,IAAA,2BAAkB,EAAC,OAAO,EAAE,IAAI,CAAC,CAAC;AAC3C,CAAC;AAED,SAAS,UAAU,CAAC,GAAW;IAC7B,OAAO,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AAChF,CAAC"}
1
+ {"version":3,"file":"cache-panel.js","sourceRoot":"","sources":["../../../src/views/panels/cache-panel.ts"],"names":[],"mappings":";;AAEA,4CAyCC;AA3CD,sCAAkE;AAElE,SAAgB,gBAAgB,CAAC,IAA6B;IAC5D,MAAM,UAAU,GAAI,IAAI,CAAC,gBAA2C,IAAI,EAAE,CAAC;IAC3E,MAAM,SAAS,GAAI,IAAI,CAAC,gBAAmD,IAAI,EAAE,CAAC;IAElF,MAAM,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC;SACxC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,iBAAiB,IAAI,kDAAkD,KAAK,mBAAmB,CAAC;SACvH,IAAI,CAAC,EAAE,CAAC,CAAC;IAEZ,MAAM,MAAM,GAAG,SAAS;SACrB,OAAO,EAAE;SACT,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;kBACG,EAAE,CAAC,MAAM;iFACsD,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC;YACrG,EAAE,CAAC,GAAG,KAAK,IAAI,CAAC,CAAC,CAAC,4CAA4C,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,KAAK,KAAK,CAAC,CAAC,CAAC,0CAA0C,CAAC,CAAC,CAAC,GAAG;2CACrG,IAAI,CAAC,KAAK,CAAE,EAAE,CAAC,QAAmB,GAAG,GAAG,CAAC,GAAG,GAAG;UAChF,CAAC;SACN,IAAI,CAAC,EAAE,CAAC,CAAC;IAEZ,MAAM,IAAI,GAAG;;QAEP,IAAA,0BAAiB,EAAC,YAAY,EAAE,MAAM,CAAC,IAAI,CAAC,eAAe,IAAI,CAAC,CAAC,CAAC;QAClE,IAAA,0BAAiB,EAAC,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,CAAC,EAAE,OAAO,CAAC;QAC/D,IAAA,0BAAiB,EAAC,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,WAAW,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;QAC5F,IAAA,0BAAiB,EAAC,UAAU,EAAE,GAAG,IAAI,CAAC,OAAO,IAAI,CAAC,GAAG,EAAG,IAAI,CAAC,OAAkB,GAAG,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAE,IAAI,CAAC,OAAkB,GAAG,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/I,IAAA,0BAAiB,EAAC,YAAY,EAAE,GAAG,IAAI,CAAC,aAAa,IAAI,CAAC,KAAK,EAAE,QAAQ,CAAC;;;;;;eAMnE,QAAQ,IAAI,4EAA4E;;;;;;eAMxF,MAAM,IAAI,qFAAqF;;GAE3G,CAAC;IAEF,OAAO,IAAA,2BAAkB,EAAC,OAAO,EAAE,IAAI,CAAC,CAAC;AAC3C,CAAC;AAED,SAAS,UAAU,CAAC,GAAW;IAC7B,OAAO,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AAChF,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"database-panel.d.ts","sourceRoot":"","sources":["../../../src/views/panels/database-panel.ts"],"names":[],"mappings":"AAEA,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CA2DzE"}
1
+ {"version":3,"file":"database-panel.d.ts","sourceRoot":"","sources":["../../../src/views/panels/database-panel.ts"],"names":[],"mappings":"AAEA,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAwDzE"}
@@ -7,39 +7,40 @@ function renderDatabasePanel(data) {
7
7
  const slowQueries = data.slowQueries || [];
8
8
  const queryCounts = data.queryCountByType || {};
9
9
  const typeRows = Object.entries(queryCounts)
10
- .map(([type, count]) => `<tr><td>${type}</td><td>${count}</td></tr>`)
10
+ .map(([type, count]) => `<tr><td><code>${type}</code></td><td><span class="badge badge-info">${count}</span></td></tr>`)
11
11
  .join('');
12
12
  const slowRows = slowQueries
13
13
  .map((q, i) => `<tr>
14
- <td>${i + 1}</td>
15
- <td><pre style="margin:0">${escapeHtml(String(q.query || ''))}</pre></td>
16
- <td>${Math.round(q.duration * 100) / 100} ms</td>
17
- </tr>`)
14
+ <td>${i + 1}</td>
15
+ <td><pre style="margin:0;max-width:600px;white-space:pre-wrap;font-size:11px">${escapeHtml(String(q.query || ''))}</pre></td>
16
+ <td><span class="badge badge-error">${Math.round(q.duration * 100) / 100} ms</span></td>
17
+ </tr>`)
18
18
  .join('');
19
19
  const queryRows = queries
20
20
  .slice(-50)
21
21
  .reverse()
22
22
  .map((q, i) => `<tr>
23
- <td>${i + 1}</td>
24
- <td><pre style="margin:0;max-width:600px;overflow:hidden;text-overflow:ellipsis">${escapeHtml(String(q.query || ''))}</pre></td>
25
- <td>${Math.round(q.duration * 100) / 100} ms</td>
26
- </tr>`)
23
+ <td>${i + 1}</td>
24
+ <td><pre style="margin:0;max-width:600px;white-space:pre-wrap;font-size:11px">${escapeHtml(String(q.query || ''))}</pre></td>
25
+ <td><span class="badge badge-info">${Math.round(q.duration * 100) / 100} ms</span></td>
26
+ </tr>`)
27
27
  .join('');
28
28
  const body = `
29
29
  <div class="summary-bar">
30
- <div class="summary-item"><div class="label">Total Queries</div><div class="value">${data.totalQueries || 0}</div></div>
31
- <div class="summary-item"><div class="label">Total Time</div><div class="value">${data.totalDuration || 0} ms</div></div>
32
- <div class="summary-item"><div class="label">Average</div><div class="value">${data.averageDuration || 0} ms</div></div>
30
+ ${(0, layout_1.renderSummaryCard)('Total Queries', String(data.totalQueries || 0))}
31
+ ${(0, layout_1.renderSummaryCard)('Total Time', `${data.totalDuration || 0} ms`, 'accent')}
32
+ ${(0, layout_1.renderSummaryCard)('Average', `${data.averageDuration || 0} ms`)}
33
+ ${(0, layout_1.renderSummaryCard)('Slow', String(slowQueries.length), slowQueries.length > 0 ? 'red' : 'green')}
33
34
  </div>
34
35
 
35
36
  <h3>Query Types</h3>
36
37
  <table>
37
38
  <thead><tr><th>Type</th><th>Count</th></tr></thead>
38
- <tbody>${typeRows || '<tr><td colspan="2">No queries</td></tr>'}</tbody>
39
+ <tbody>${typeRows || '<tr><td colspan="2"><div class="empty-state">No queries</div></td></tr>'}</tbody>
39
40
  </table>
40
41
 
41
42
  ${slowQueries.length ? `
42
- <h3>Slow Queries (>100ms)</h3>
43
+ <h3>Slow Queries &gt;100ms</h3>
43
44
  <table>
44
45
  <thead><tr><th>#</th><th>Query</th><th>Duration</th></tr></thead>
45
46
  <tbody>${slowRows}</tbody>
@@ -48,7 +49,7 @@ function renderDatabasePanel(data) {
48
49
  <h3>Recent Queries</h3>
49
50
  <table>
50
51
  <thead><tr><th>#</th><th>Query</th><th>Duration</th></tr></thead>
51
- <tbody>${queryRows || '<tr><td colspan="3">No queries</td></tr>'}</tbody>
52
+ <tbody>${queryRows || '<tr><td colspan="3"><div class="empty-state">No queries recorded</div></td></tr>'}</tbody>
52
53
  </table>
53
54
  `;
54
55
  return (0, layout_1.renderPanelContent)('Database', body);
@@ -1 +1 @@
1
- {"version":3,"file":"database-panel.js","sourceRoot":"","sources":["../../../src/views/panels/database-panel.ts"],"names":[],"mappings":";;AAEA,kDA2DC;AA7DD,sCAA+C;AAE/C,SAAgB,mBAAmB,CAAC,IAA6B;IAC/D,MAAM,OAAO,GAAI,IAAI,CAAC,OAA0C,IAAI,EAAE,CAAC;IACvE,MAAM,WAAW,GAAI,IAAI,CAAC,WAA8C,IAAI,EAAE,CAAC;IAC/E,MAAM,WAAW,GAAI,IAAI,CAAC,gBAA2C,IAAI,EAAE,CAAC;IAE5E,MAAM,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC;SACzC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,WAAW,IAAI,YAAY,KAAK,YAAY,CAAC;SACpE,IAAI,CAAC,EAAE,CAAC,CAAC;IAEZ,MAAM,QAAQ,GAAG,WAAW;SACzB,GAAG,CACF,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;cACF,CAAC,GAAG,CAAC;oCACiB,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;cACvD,IAAI,CAAC,KAAK,CAAE,CAAC,CAAC,QAAmB,GAAG,GAAG,CAAC,GAAG,GAAG;YAChD,CACP;SACA,IAAI,CAAC,EAAE,CAAC,CAAC;IAEZ,MAAM,SAAS,GAAG,OAAO;SACtB,KAAK,CAAC,CAAC,EAAE,CAAC;SACV,OAAO,EAAE;SACT,GAAG,CACF,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;cACF,CAAC,GAAG,CAAC;2FACwE,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;cAC9G,IAAI,CAAC,KAAK,CAAE,CAAC,CAAC,QAAmB,GAAG,GAAG,CAAC,GAAG,GAAG;YAChD,CACP;SACA,IAAI,CAAC,EAAE,CAAC,CAAC;IAEZ,MAAM,IAAI,GAAG;;2FAE4E,IAAI,CAAC,YAAY,IAAI,CAAC;wFACzB,IAAI,CAAC,aAAa,IAAI,CAAC;qFAC1B,IAAI,CAAC,eAAe,IAAI,CAAC;;;;;;eAM/F,QAAQ,IAAI,0CAA0C;;;MAG/D,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC;;;;eAIZ,QAAQ;aACV,CAAC,CAAC,CAAC,EAAE;;;;;eAKH,SAAS,IAAI,0CAA0C;;GAEnE,CAAC;IAEF,OAAO,IAAA,2BAAkB,EAAC,UAAU,EAAE,IAAI,CAAC,CAAC;AAC9C,CAAC;AAED,SAAS,UAAU,CAAC,GAAW;IAC7B,OAAO,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AAChF,CAAC"}
1
+ {"version":3,"file":"database-panel.js","sourceRoot":"","sources":["../../../src/views/panels/database-panel.ts"],"names":[],"mappings":";;AAEA,kDAwDC;AA1DD,sCAAkE;AAElE,SAAgB,mBAAmB,CAAC,IAA6B;IAC/D,MAAM,OAAO,GAAI,IAAI,CAAC,OAA0C,IAAI,EAAE,CAAC;IACvE,MAAM,WAAW,GAAI,IAAI,CAAC,WAA8C,IAAI,EAAE,CAAC;IAC/E,MAAM,WAAW,GAAI,IAAI,CAAC,gBAA2C,IAAI,EAAE,CAAC;IAE5E,MAAM,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC;SACzC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,iBAAiB,IAAI,kDAAkD,KAAK,mBAAmB,CAAC;SACvH,IAAI,CAAC,EAAE,CAAC,CAAC;IAEZ,MAAM,QAAQ,GAAG,WAAW;SACzB,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YACP,CAAC,GAAG,CAAC;sFACqE,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;4CAC3E,IAAI,CAAC,KAAK,CAAE,CAAC,CAAC,QAAmB,GAAG,GAAG,CAAC,GAAG,GAAG;UAChF,CAAC;SACN,IAAI,CAAC,EAAE,CAAC,CAAC;IAEZ,MAAM,SAAS,GAAG,OAAO;SACtB,KAAK,CAAC,CAAC,EAAE,CAAC;SACV,OAAO,EAAE;SACT,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YACP,CAAC,GAAG,CAAC;sFACqE,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;2CAC5E,IAAI,CAAC,KAAK,CAAE,CAAC,CAAC,QAAmB,GAAG,GAAG,CAAC,GAAG,GAAG;UAC/E,CAAC;SACN,IAAI,CAAC,EAAE,CAAC,CAAC;IAEZ,MAAM,IAAI,GAAG;;QAEP,IAAA,0BAAiB,EAAC,eAAe,EAAE,MAAM,CAAC,IAAI,CAAC,YAAY,IAAI,CAAC,CAAC,CAAC;QAClE,IAAA,0BAAiB,EAAC,YAAY,EAAE,GAAG,IAAI,CAAC,aAAa,IAAI,CAAC,KAAK,EAAE,QAAQ,CAAC;QAC1E,IAAA,0BAAiB,EAAC,SAAS,EAAE,GAAG,IAAI,CAAC,eAAe,IAAI,CAAC,KAAK,CAAC;QAC/D,IAAA,0BAAiB,EAAC,MAAM,EAAE,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC;;;;;;eAMxF,QAAQ,IAAI,yEAAyE;;;MAG9F,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC;;;;eAIZ,QAAQ;aACV,CAAC,CAAC,CAAC,EAAE;;;;;eAKH,SAAS,IAAI,kFAAkF;;GAE3G,CAAC;IAEF,OAAO,IAAA,2BAAkB,EAAC,UAAU,EAAE,IAAI,CAAC,CAAC;AAC9C,CAAC;AAED,SAAS,UAAU,CAAC,GAAW;IAC7B,OAAO,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AAChF,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"exception-panel.d.ts","sourceRoot":"","sources":["../../../src/views/panels/exception-panel.ts"],"names":[],"mappings":"AAEA,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAuB1E"}
1
+ {"version":3,"file":"exception-panel.d.ts","sourceRoot":"","sources":["../../../src/views/panels/exception-panel.ts"],"names":[],"mappings":"AAEA,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAkB1E"}
@@ -4,23 +4,18 @@ exports.renderExceptionPanel = renderExceptionPanel;
4
4
  const layout_1 = require("../layout");
5
5
  function renderExceptionPanel(data) {
6
6
  if (!data.hasException) {
7
- return (0, layout_1.renderPanelContent)('Exception', '<p>No exceptions were thrown during this request.</p>');
7
+ return (0, layout_1.renderPanelContent)('Exception', '<div class="empty-state">No exceptions were thrown during this request.</div>');
8
8
  }
9
9
  const stack = data.stack || [];
10
10
  const body = `
11
11
  <div class="summary-bar">
12
- <div class="summary-item" style="border-color:#f44336">
13
- <div class="label">Exception</div>
14
- <div class="value" style="color:#f44336">${data.name || 'Error'}</div>
15
- </div>
16
- <div class="summary-item" style="border-color:#f44336">
17
- <div class="label">Message</div>
18
- <div class="value" style="color:#f44336">${data.message || ''}</div>
19
- </div>
12
+ ${(0, layout_1.renderSummaryCard)('Exception', String(data.name || 'Error'), 'red')}
13
+ ${(0, layout_1.renderSummaryCard)('Message', String(data.message || ''), 'red')}
14
+ ${data.code ? (0, layout_1.renderSummaryCard)('Code', String(data.code), 'red') : ''}
20
15
  </div>
21
16
 
22
17
  <h3>Stack Trace</h3>
23
- <pre>${stack.map((line) => escapeHtml(line)).join('\n')}</pre>
18
+ <pre style="border-left:3px solid var(--red);background:#1a0000">${stack.map((line) => escapeHtml(line)).join('\n')}</pre>
24
19
  `;
25
20
  return (0, layout_1.renderPanelContent)('Exception', body);
26
21
  }
@@ -1 +1 @@
1
- {"version":3,"file":"exception-panel.js","sourceRoot":"","sources":["../../../src/views/panels/exception-panel.ts"],"names":[],"mappings":";;AAEA,oDAuBC;AAzBD,sCAA+C;AAE/C,SAAgB,oBAAoB,CAAC,IAA6B;IAChE,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;QACvB,OAAO,IAAA,2BAAkB,EAAC,WAAW,EAAE,uDAAuD,CAAC,CAAC;IAClG,CAAC;IAED,MAAM,KAAK,GAAI,IAAI,CAAC,KAAkB,IAAI,EAAE,CAAC;IAC7C,MAAM,IAAI,GAAG;;;;mDAIoC,IAAI,CAAC,IAAI,IAAI,OAAO;;;;mDAIpB,IAAI,CAAC,OAAO,IAAI,EAAE;;;;;WAK1D,KAAK,CAAC,GAAG,CAAC,CAAC,IAAY,EAAE,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;GAChE,CAAC;IAEF,OAAO,IAAA,2BAAkB,EAAC,WAAW,EAAE,IAAI,CAAC,CAAC;AAC/C,CAAC;AAED,SAAS,UAAU,CAAC,GAAW;IAC7B,OAAO,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AAChF,CAAC"}
1
+ {"version":3,"file":"exception-panel.js","sourceRoot":"","sources":["../../../src/views/panels/exception-panel.ts"],"names":[],"mappings":";;AAEA,oDAkBC;AApBD,sCAAkE;AAElE,SAAgB,oBAAoB,CAAC,IAA6B;IAChE,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;QACvB,OAAO,IAAA,2BAAkB,EAAC,WAAW,EAAE,+EAA+E,CAAC,CAAC;IAC1H,CAAC;IAED,MAAM,KAAK,GAAI,IAAI,CAAC,KAAkB,IAAI,EAAE,CAAC;IAC7C,MAAM,IAAI,GAAG;;QAEP,IAAA,0BAAiB,EAAC,WAAW,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,IAAI,OAAO,CAAC,EAAE,KAAK,CAAC;QACnE,IAAA,0BAAiB,EAAC,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC,EAAE,KAAK,CAAC;QAC/D,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAA,0BAAiB,EAAC,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE;;;;uEAIL,KAAK,CAAC,GAAG,CAAC,CAAC,IAAY,EAAE,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;GAC5H,CAAC;IAEF,OAAO,IAAA,2BAAkB,EAAC,WAAW,EAAE,IAAI,CAAC,CAAC;AAC/C,CAAC;AAED,SAAS,UAAU,CAAC,GAAW;IAC7B,OAAO,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AAChF,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"log-panel.d.ts","sourceRoot":"","sources":["../../../src/views/panels/log-panel.ts"],"names":[],"mappings":"AAEA,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAiDpE"}
1
+ {"version":3,"file":"log-panel.d.ts","sourceRoot":"","sources":["../../../src/views/panels/log-panel.ts"],"names":[],"mappings":"AAEA,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAiCpE"}
@@ -5,53 +5,50 @@ const layout_1 = require("../layout");
5
5
  function renderLogPanel(data) {
6
6
  const logCounts = data.logCounts || {};
7
7
  const logs = data.logs || [];
8
- const countRows = Object.entries(logCounts)
9
- .map(([level, count]) => `<tr><td>${level}</td><td>${count}</td></tr>`)
10
- .join('');
11
8
  const logRows = logs
12
9
  .slice(-100)
13
10
  .reverse()
14
- .map((log, i) => `<tr>
15
- <td style="white-space:nowrap">${log.timestamp || ''}</td>
16
- <td><span class="badge" style="background:${levelColor(log.level)}">${log.level || 'info'}</span></td>
17
- <td>${escapeHtml(String(log.message || ''))}</td>
18
- <td>${log.context || '-'}</td>
19
- </tr>`)
11
+ .map(log => `<tr>
12
+ <td style="white-space:nowrap;font-size:12px;color:var(--text3)">${log.timestamp || ''}</td>
13
+ <td><span class="badge ${levelBadge(log.level)}">${log.level || 'info'}</span></td>
14
+ <td><code>${escapeHtml(String(log.message || ''))}</code></td>
15
+ <td style="color:var(--text3)">${log.context || '-'}</td>
16
+ </tr>`)
17
+ .join('');
18
+ const countCards = Object.entries(logCounts)
19
+ .map(([level, count]) => (0, layout_1.renderSummaryCard)(level, String(count), levelColor(level)))
20
20
  .join('');
21
21
  const body = `
22
22
  <div class="summary-bar">
23
- <div class="summary-item"><div class="label">Total Logs</div><div class="value">${data.totalLogs || 0}</div></div>
24
- ${Object.entries(logCounts)
25
- .map(([level, count]) => `<div class="summary-item"><div class="label">${level}</div><div class="value">${count}</div></div>`)
26
- .join('')}
23
+ ${(0, layout_1.renderSummaryCard)('Total Logs', String(data.totalLogs || 0))}
24
+ ${countCards}
27
25
  </div>
28
26
 
29
- <h3>Log Counts</h3>
30
- <table>
31
- <thead><tr><th>Level</th><th>Count</th></tr></thead>
32
- <tbody>${countRows || '<tr><td colspan="2">No logs</td></tr>'}</tbody>
33
- </table>
34
-
35
27
  <h3>Recent Logs</h3>
36
28
  <table>
37
29
  <thead><tr><th>Timestamp</th><th>Level</th><th>Message</th><th>Context</th></tr></thead>
38
- <tbody>${logRows || '<tr><td colspan="4">No logs</td></tr>'}</tbody>
30
+ <tbody>${logRows || '<tr><td colspan="4"><div class="empty-state">No logs</div></td></tr>'}</tbody>
39
31
  </table>
40
32
  `;
41
33
  return (0, layout_1.renderPanelContent)('Logs', body);
42
34
  }
35
+ function levelBadge(level) {
36
+ switch (level) {
37
+ case 'error':
38
+ case 'fatal': return 'badge-error';
39
+ case 'warn':
40
+ case 'warning': return 'badge-warn';
41
+ case 'debug': return 'badge-info';
42
+ default: return 'badge-success';
43
+ }
44
+ }
43
45
  function levelColor(level) {
44
46
  switch (level) {
45
47
  case 'error':
46
- case 'fatal':
47
- return '#f44336';
48
+ case 'fatal': return 'red';
48
49
  case 'warn':
49
- case 'warning':
50
- return '#ff9800';
51
- case 'debug':
52
- return '#4fc3f7';
53
- default:
54
- return '#4caf50';
50
+ case 'warning': return 'yellow';
51
+ default: return '';
55
52
  }
56
53
  }
57
54
  function escapeHtml(str) {
@@ -1 +1 @@
1
- {"version":3,"file":"log-panel.js","sourceRoot":"","sources":["../../../src/views/panels/log-panel.ts"],"names":[],"mappings":";;AAEA,wCAiDC;AAnDD,sCAA+C;AAE/C,SAAgB,cAAc,CAAC,IAA6B;IAC1D,MAAM,SAAS,GAAI,IAAI,CAAC,SAAoC,IAAI,EAAE,CAAC;IACnE,MAAM,IAAI,GAAI,IAAI,CAAC,IAAuC,IAAI,EAAE,CAAC;IAEjE,MAAM,SAAS,GAAG,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC;SACxC,GAAG,CACF,CAAC,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE,EAAE,CACjB,WAAW,KAAK,YAAY,KAAK,YAAY,CAChD;SACA,IAAI,CAAC,EAAE,CAAC,CAAC;IAEZ,MAAM,OAAO,GAAG,IAAI;SACjB,KAAK,CAAC,CAAC,GAAG,CAAC;SACX,OAAO,EAAE;SACT,GAAG,CACF,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;yCACuB,GAAG,CAAC,SAAS,IAAI,EAAE;oDACR,UAAU,CAAC,GAAG,CAAC,KAAe,CAAC,KAAK,GAAG,CAAC,KAAK,IAAI,MAAM;cAC7F,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC;cACrC,GAAG,CAAC,OAAO,IAAI,GAAG;YACpB,CACP;SACA,IAAI,CAAC,EAAE,CAAC,CAAC;IAEZ,MAAM,IAAI,GAAG;;wFAEyE,IAAI,CAAC,SAAS,IAAI,CAAC;QACnG,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC;SACxB,GAAG,CACF,CAAC,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE,EAAE,CACjB,gDAAgD,KAAK,4BAA4B,KAAK,cAAc,CACvG;SACA,IAAI,CAAC,EAAE,CAAC;;;;;;eAMF,SAAS,IAAI,uCAAuC;;;;;;eAMpD,OAAO,IAAI,uCAAuC;;GAE9D,CAAC;IAEF,OAAO,IAAA,2BAAkB,EAAC,MAAM,EAAE,IAAI,CAAC,CAAC;AAC1C,CAAC;AAED,SAAS,UAAU,CAAC,KAAa;IAC/B,QAAQ,KAAK,EAAE,CAAC;QACd,KAAK,OAAO,CAAC;QACb,KAAK,OAAO;YACV,OAAO,SAAS,CAAC;QACnB,KAAK,MAAM,CAAC;QACZ,KAAK,SAAS;YACZ,OAAO,SAAS,CAAC;QACnB,KAAK,OAAO;YACV,OAAO,SAAS,CAAC;QACnB;YACE,OAAO,SAAS,CAAC;IACrB,CAAC;AACH,CAAC;AAED,SAAS,UAAU,CAAC,GAAW;IAC7B,OAAO,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AAChF,CAAC"}
1
+ {"version":3,"file":"log-panel.js","sourceRoot":"","sources":["../../../src/views/panels/log-panel.ts"],"names":[],"mappings":";;AAEA,wCAiCC;AAnCD,sCAAkE;AAElE,SAAgB,cAAc,CAAC,IAA6B;IAC1D,MAAM,SAAS,GAAI,IAAI,CAAC,SAAoC,IAAI,EAAE,CAAC;IACnE,MAAM,IAAI,GAAI,IAAI,CAAC,IAAuC,IAAI,EAAE,CAAC;IAEjE,MAAM,OAAO,GAAG,IAAI;SACjB,KAAK,CAAC,CAAC,GAAG,CAAC;SACX,OAAO,EAAE;SACT,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;yEACyD,GAAG,CAAC,SAAS,IAAI,EAAE;+BAC7D,UAAU,CAAC,GAAG,CAAC,KAAe,CAAC,KAAK,GAAG,CAAC,KAAK,IAAI,MAAM;kBACpE,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC;uCAChB,GAAG,CAAC,OAAO,IAAI,GAAG;UAC/C,CAAC;SACN,IAAI,CAAC,EAAE,CAAC,CAAC;IAEZ,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC;SACzC,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,IAAA,0BAAiB,EAAC,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC;SACnF,IAAI,CAAC,EAAE,CAAC,CAAC;IAEZ,MAAM,IAAI,GAAG;;QAEP,IAAA,0BAAiB,EAAC,YAAY,EAAE,MAAM,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,CAAC,CAAC;QAC5D,UAAU;;;;;;eAMH,OAAO,IAAI,sEAAsE;;GAE7F,CAAC;IAEF,OAAO,IAAA,2BAAkB,EAAC,MAAM,EAAE,IAAI,CAAC,CAAC;AAC1C,CAAC;AAED,SAAS,UAAU,CAAC,KAAa;IAC/B,QAAQ,KAAK,EAAE,CAAC;QACd,KAAK,OAAO,CAAC;QAAC,KAAK,OAAO,CAAC,CAAC,OAAO,aAAa,CAAC;QACjD,KAAK,MAAM,CAAC;QAAC,KAAK,SAAS,CAAC,CAAC,OAAO,YAAY,CAAC;QACjD,KAAK,OAAO,CAAC,CAAC,OAAO,YAAY,CAAC;QAClC,OAAO,CAAC,CAAC,OAAO,eAAe,CAAC;IAClC,CAAC;AACH,CAAC;AAED,SAAS,UAAU,CAAC,KAAa;IAC/B,QAAQ,KAAK,EAAE,CAAC;QACd,KAAK,OAAO,CAAC;QAAC,KAAK,OAAO,CAAC,CAAC,OAAO,KAAK,CAAC;QACzC,KAAK,MAAM,CAAC;QAAC,KAAK,SAAS,CAAC,CAAC,OAAO,QAAQ,CAAC;QAC7C,OAAO,CAAC,CAAC,OAAO,EAAE,CAAC;IACrB,CAAC;AACH,CAAC;AAED,SAAS,UAAU,CAAC,GAAW;IAC7B,OAAO,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AAChF,CAAC"}
@@ -5,9 +5,9 @@ const layout_1 = require("../layout");
5
5
  function renderRequestPanel(data) {
6
6
  const body = `
7
7
  <div class="summary-bar">
8
- <div class="summary-item"><div class="label">Method</div><div class="value">${data.method || 'GET'}</div></div>
9
- <div class="summary-item"><div class="label">Status</div><div class="value">${data.statusCode || 200}</div></div>
10
- <div class="summary-item"><div class="label">IP</div><div class="value">${data.ip || '-'}</div></div>
8
+ ${(0, layout_1.renderSummaryCard)('Method', String(data.method || 'GET'))}
9
+ ${(0, layout_1.renderSummaryCard)('Status', String(data.statusCode || 200), data.statusCode >= 400 ? 'red' : 'green')}
10
+ ${(0, layout_1.renderSummaryCard)('IP', String(data.ip || '-'))}
11
11
  </div>
12
12
 
13
13
  <h3>Request Headers</h3>
@@ -1 +1 @@
1
- {"version":3,"file":"request-panel.js","sourceRoot":"","sources":["../../../src/views/panels/request-panel.ts"],"names":[],"mappings":";;AAEA,gDAsBC;AAxBD,sCAAoE;AAEpE,SAAgB,kBAAkB,CAAC,IAA6B;IAC9D,MAAM,IAAI,GAAG;;oFAEqE,IAAI,CAAC,MAAM,IAAI,KAAK;oFACpB,IAAI,CAAC,UAAU,IAAI,GAAG;gFAC1B,IAAI,CAAC,EAAE,IAAI,GAAG;;;;MAIxF,IAAA,4BAAmB,EAAE,IAAI,CAAC,OAAmC,IAAI,EAAE,EAAE,QAAQ,EAAE,OAAO,CAAC;;;MAGvF,IAAA,4BAAmB,EAAE,IAAI,CAAC,eAA2C,IAAI,EAAE,EAAE,QAAQ,EAAE,OAAO,CAAC;;;MAG/F,IAAA,4BAAmB,EAAE,IAAI,CAAC,KAAiC,IAAI,EAAE,EAAE,WAAW,EAAE,OAAO,CAAC;;;MAGxF,IAAA,4BAAmB,EAAE,IAAI,CAAC,MAAkC,IAAI,EAAE,EAAE,WAAW,EAAE,OAAO,CAAC;GAC5F,CAAC;IAEF,OAAO,IAAA,2BAAkB,EAAC,SAAS,EAAE,IAAI,CAAC,CAAC;AAC7C,CAAC"}
1
+ {"version":3,"file":"request-panel.js","sourceRoot":"","sources":["../../../src/views/panels/request-panel.ts"],"names":[],"mappings":";;AAEA,gDAsBC;AAxBD,sCAAuF;AAEvF,SAAgB,kBAAkB,CAAC,IAA6B;IAC9D,MAAM,IAAI,GAAG;;QAEP,IAAA,0BAAiB,EAAC,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,IAAI,KAAK,CAAC,CAAC;QACzD,IAAA,0BAAiB,EAAC,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,UAAU,IAAI,GAAG,CAAC,EAAG,IAAI,CAAC,UAAqB,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC;QACjH,IAAA,0BAAiB,EAAC,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,GAAG,CAAC,CAAC;;;;MAIjD,IAAA,4BAAmB,EAAE,IAAI,CAAC,OAAmC,IAAI,EAAE,EAAE,QAAQ,EAAE,OAAO,CAAC;;;MAGvF,IAAA,4BAAmB,EAAE,IAAI,CAAC,eAA2C,IAAI,EAAE,EAAE,QAAQ,EAAE,OAAO,CAAC;;;MAG/F,IAAA,4BAAmB,EAAE,IAAI,CAAC,KAAiC,IAAI,EAAE,EAAE,WAAW,EAAE,OAAO,CAAC;;;MAGxF,IAAA,4BAAmB,EAAE,IAAI,CAAC,MAAkC,IAAI,EAAE,EAAE,WAAW,EAAE,OAAO,CAAC;GAC5F,CAAC;IAEF,OAAO,IAAA,2BAAkB,EAAC,SAAS,EAAE,IAAI,CAAC,CAAC;AAC7C,CAAC"}
@@ -5,9 +5,9 @@ const layout_1 = require("../layout");
5
5
  function renderRoutePanel(data) {
6
6
  const body = `
7
7
  <div class="summary-bar">
8
- <div class="summary-item"><div class="label">Route</div><div class="value">${data.route || '/'}</div></div>
9
- <div class="summary-item"><div class="label">Controller</div><div class="value">${data.controller || 'unknown'}</div></div>
10
- <div class="summary-item"><div class="label">Method</div><div class="value">${data.method || 'GET'}</div></div>
8
+ ${(0, layout_1.renderSummaryCard)('Route', String(data.route || '/'))}
9
+ ${(0, layout_1.renderSummaryCard)('Controller', String(data.controller || 'unknown'), 'accent')}
10
+ ${(0, layout_1.renderSummaryCard)('Method', String(data.method || 'GET'))}
11
11
  </div>
12
12
 
13
13
  <h3>Route Parameters</h3>
@@ -1 +1 @@
1
- {"version":3,"file":"route-panel.js","sourceRoot":"","sources":["../../../src/views/panels/route-panel.ts"],"names":[],"mappings":";;AAEA,4CAgBC;AAlBD,sCAAoE;AAEpE,SAAgB,gBAAgB,CAAC,IAA6B;IAC5D,MAAM,IAAI,GAAG;;mFAEoE,IAAI,CAAC,KAAK,IAAI,GAAG;wFACZ,IAAI,CAAC,UAAU,IAAI,SAAS;oFAChC,IAAI,CAAC,MAAM,IAAI,KAAK;;;;MAIlG,IAAA,4BAAmB,EAAE,IAAI,CAAC,MAAkC,IAAI,EAAE,EAAE,WAAW,EAAE,OAAO,CAAC;;;MAGzF,IAAA,4BAAmB,EAAE,IAAI,CAAC,KAAiC,IAAI,EAAE,EAAE,WAAW,EAAE,OAAO,CAAC;GAC3F,CAAC;IAEF,OAAO,IAAA,2BAAkB,EAAC,OAAO,EAAE,IAAI,CAAC,CAAC;AAC3C,CAAC"}
1
+ {"version":3,"file":"route-panel.js","sourceRoot":"","sources":["../../../src/views/panels/route-panel.ts"],"names":[],"mappings":";;AAEA,4CAgBC;AAlBD,sCAAuF;AAEvF,SAAgB,gBAAgB,CAAC,IAA6B;IAC5D,MAAM,IAAI,GAAG;;QAEP,IAAA,0BAAiB,EAAC,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,IAAI,GAAG,CAAC,CAAC;QACrD,IAAA,0BAAiB,EAAC,YAAY,EAAE,MAAM,CAAC,IAAI,CAAC,UAAU,IAAI,SAAS,CAAC,EAAE,QAAQ,CAAC;QAC/E,IAAA,0BAAiB,EAAC,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,IAAI,KAAK,CAAC,CAAC;;;;MAI3D,IAAA,4BAAmB,EAAE,IAAI,CAAC,MAAkC,IAAI,EAAE,EAAE,WAAW,EAAE,OAAO,CAAC;;;MAGzF,IAAA,4BAAmB,EAAE,IAAI,CAAC,KAAiC,IAAI,EAAE,EAAE,WAAW,EAAE,OAAO,CAAC;GAC3F,CAAC;IAEF,OAAO,IAAA,2BAAkB,EAAC,OAAO,EAAE,IAAI,CAAC,CAAC;AAC3C,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"time-panel.d.ts","sourceRoot":"","sources":["../../../src/views/panels/time-panel.ts"],"names":[],"mappings":"AAEA,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CA6BrE"}
1
+ {"version":3,"file":"time-panel.d.ts","sourceRoot":"","sources":["../../../src/views/panels/time-panel.ts"],"names":[],"mappings":"AAEA,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CA2BrE"}
@@ -6,25 +6,28 @@ function renderTimePanel(data) {
6
6
  const timeline = data.timeline || [];
7
7
  const timelineRows = timeline
8
8
  .map((ev, i) => `<tr>
9
- <td>${i + 1}</td>
10
- <td>${ev.name}</td>
11
- <td>${Math.round(ev.duration * 100) / 100} ms</td>
12
- <td>${ev.memory || '-'} MB</td>
13
- </tr>`)
9
+ <td>${i + 1}</td>
10
+ <td><code>${escapeHtml(String(ev.name || ''))}</code></td>
11
+ <td><span class="badge badge-info">${Math.round(ev.duration * 100) / 100} ms</span></td>
12
+ <td>${ev.memory != null ? `${ev.memory} MB` : '-'}</td>
13
+ </tr>`)
14
14
  .join('');
15
15
  const body = `
16
16
  <div class="summary-bar">
17
- <div class="summary-item"><div class="label">Total Duration</div><div class="value">${data.totalDuration || 0} ms</div></div>
18
- <div class="summary-item"><div class="label">Peak Memory</div><div class="value">${data.peakMemory || 0} MB</div></div>
19
- <div class="summary-item"><div class="label">Memory Limit</div><div class="value">${data.memoryLimit || '-'}</div></div>
17
+ ${(0, layout_1.renderSummaryCard)('Total Duration', `${data.totalDuration || 0} ms`, 'accent')}
18
+ ${(0, layout_1.renderSummaryCard)('Peak Memory', `${data.peakMemory || 0} MB`)}
19
+ ${(0, layout_1.renderSummaryCard)('Memory Limit', String(data.memoryLimit || '-'))}
20
20
  </div>
21
21
 
22
- <h3>Timeline</h3>
22
+ <h3>Timeline <span style="color:var(--text3);font-weight:400;text-transform:none;letter-spacing:0">(${timeline.length} events)</span></h3>
23
23
  <table>
24
24
  <thead><tr><th>#</th><th>Event</th><th>Duration</th><th>Memory</th></tr></thead>
25
- <tbody>${timelineRows || '<tr><td colspan="4">No events recorded</td></tr>'}</tbody>
25
+ <tbody>${timelineRows || '<tr><td colspan="4"><div class="empty-state">No events recorded</div></td></tr>'}</tbody>
26
26
  </table>
27
27
  `;
28
28
  return (0, layout_1.renderPanelContent)('Performance', body);
29
29
  }
30
+ function escapeHtml(str) {
31
+ return str.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;');
32
+ }
30
33
  //# sourceMappingURL=time-panel.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"time-panel.js","sourceRoot":"","sources":["../../../src/views/panels/time-panel.ts"],"names":[],"mappings":";;AAEA,0CA6BC;AA/BD,sCAAoE;AAEpE,SAAgB,eAAe,CAAC,IAA6B;IAC3D,MAAM,QAAQ,GAAI,IAAI,CAAC,QAA2C,IAAI,EAAE,CAAC;IAEzE,MAAM,YAAY,GAAG,QAAQ;SAC1B,GAAG,CACF,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;cACH,CAAC,GAAG,CAAC;cACL,EAAE,CAAC,IAAI;cACP,IAAI,CAAC,KAAK,CAAE,EAAE,CAAC,QAAmB,GAAG,GAAG,CAAC,GAAG,GAAG;cAC/C,EAAE,CAAC,MAAM,IAAI,GAAG;YAClB,CACP;SACA,IAAI,CAAC,EAAE,CAAC,CAAC;IAEZ,MAAM,IAAI,GAAG;;4FAE6E,IAAI,CAAC,aAAa,IAAI,CAAC;yFAC1B,IAAI,CAAC,UAAU,IAAI,CAAC;0FACnB,IAAI,CAAC,WAAW,IAAI,GAAG;;;;;;eAMlG,YAAY,IAAI,kDAAkD;;GAE9E,CAAC;IAEF,OAAO,IAAA,2BAAkB,EAAC,aAAa,EAAE,IAAI,CAAC,CAAC;AACjD,CAAC"}
1
+ {"version":3,"file":"time-panel.js","sourceRoot":"","sources":["../../../src/views/panels/time-panel.ts"],"names":[],"mappings":";;AAEA,0CA2BC;AA7BD,sCAAkE;AAElE,SAAgB,eAAe,CAAC,IAA6B;IAC3D,MAAM,QAAQ,GAAI,IAAI,CAAC,QAA2C,IAAI,EAAE,CAAC;IAEzE,MAAM,YAAY,GAAG,QAAQ;SAC1B,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;YACR,CAAC,GAAG,CAAC;kBACC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;2CACR,IAAI,CAAC,KAAK,CAAE,EAAE,CAAC,QAAmB,GAAG,GAAG,CAAC,GAAG,GAAG;YAC9E,EAAE,CAAC,MAAM,IAAI,IAAI,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,GAAG;UAC7C,CAAC;SACN,IAAI,CAAC,EAAE,CAAC,CAAC;IAEZ,MAAM,IAAI,GAAG;;QAEP,IAAA,0BAAiB,EAAC,gBAAgB,EAAE,GAAG,IAAI,CAAC,aAAa,IAAI,CAAC,KAAK,EAAE,QAAQ,CAAC;QAC9E,IAAA,0BAAiB,EAAC,aAAa,EAAE,GAAG,IAAI,CAAC,UAAU,IAAI,CAAC,KAAK,CAAC;QAC9D,IAAA,0BAAiB,EAAC,cAAc,EAAE,MAAM,CAAC,IAAI,CAAC,WAAW,IAAI,GAAG,CAAC,CAAC;;;0GAGgC,QAAQ,CAAC,MAAM;;;eAG1G,YAAY,IAAI,iFAAiF;;GAE7G,CAAC;IAEF,OAAO,IAAA,2BAAkB,EAAC,aAAa,EAAE,IAAI,CAAC,CAAC;AACjD,CAAC;AAED,SAAS,UAAU,CAAC,GAAW;IAC7B,OAAO,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AAChF,CAAC"}
@@ -1,8 +1,9 @@
1
1
  import { CollectorRegistry } from '../collectors/collector.registry';
2
2
  export declare class ToolbarRenderer {
3
- render(token: string, toolbarPath: string, registry: CollectorRegistry): string;
4
- private renderIcon;
5
- private renderTextPieces;
3
+ render(token: string, toolbarPath: string, registry: CollectorRegistry, method?: string, statusCode?: number, duration?: number, memory?: number): string;
4
+ private renderBlockIcon;
5
+ private renderBlockText;
6
+ private renderBlockInfo;
6
7
  private getStatusClass;
7
8
  }
8
9
  //# sourceMappingURL=toolbar.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"toolbar.d.ts","sourceRoot":"","sources":["../../src/views/toolbar.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AAErE,qBAAa,eAAe;IAC1B,MAAM,CACJ,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,iBAAiB,GAC1B,MAAM;IA0GT,OAAO,CAAC,UAAU;IAclB,OAAO,CAAC,gBAAgB;IAoCxB,OAAO,CAAC,cAAc;CAOvB"}
1
+ {"version":3,"file":"toolbar.d.ts","sourceRoot":"","sources":["../../src/views/toolbar.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AAGrE,qBAAa,eAAe;IAC1B,MAAM,CACJ,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,iBAAiB,EAC3B,MAAM,CAAC,EAAE,MAAM,EACf,UAAU,CAAC,EAAE,MAAM,EACnB,QAAQ,CAAC,EAAE,MAAM,EACjB,MAAM,CAAC,EAAE,MAAM,GACd,MAAM;IA+DT,OAAO,CAAC,eAAe;IAIvB,OAAO,CAAC,eAAe;IAuBvB,OAAO,CAAC,eAAe;IAyCvB,OAAO,CAAC,cAAc;CAKvB"}
@@ -1,162 +1,135 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.ToolbarRenderer = void 0;
4
+ const icons_1 = require("./icons/icons");
4
5
  class ToolbarRenderer {
5
- render(token, toolbarPath, registry) {
6
+ render(token, toolbarPath, registry, method, statusCode, duration, memory) {
6
7
  const collectors = registry.getAll();
7
8
  const blocks = collectors
8
9
  .map(c => {
9
- const icon = this.renderIcon(c.getIcon());
10
- const name = c.name;
11
10
  const data = c.getData();
12
- const textPieces = this.renderTextPieces(name, data);
13
- const statusClass = this.getStatusClass(data);
11
+ const icon = this.renderBlockIcon(c.name, data, c.getIcon());
12
+ const text = this.renderBlockText(c.name, data);
13
+ const statusClass = this.getStatusClass(c.name, data);
14
14
  return `
15
- <div class="sf-toolbar-block sf-toolbar-block-${name} sf-toolbar-status-${statusClass}">
16
- <a href="${toolbarPath}/${token}?panel=${name}" target="_profiler">
17
- <div class="sf-toolbar-icon">${icon}</div>
15
+ <div class="sf-toolbar-block sf-toolbar-block-${c.name}">
16
+ <a href="${toolbarPath}/${token}?panel=${c.name}" target="_profiler">
17
+ <div class="sf-toolbar-icon">${icon}${text}</div>
18
18
  </a>
19
- <div class="sf-toolbar-info">${textPieces}</div>
19
+ <div class="sf-toolbar-info">${this.renderBlockInfo(c.name, data)}</div>
20
20
  </div>`;
21
21
  })
22
22
  .join('');
23
23
  return `
24
24
  <style>
25
- .sf-toolbar { font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; position: fixed; bottom: 0; left: 0; right: 0; z-index: 99999; background: #1a1a2e; color: #e0e0e0; font-size: 13px; display: flex; align-items: stretch; box-shadow: 0 -2px 10px rgba(0,0,0,0.3); min-height: 36px; }
26
- .sf-toolbar-block { display: flex; align-items: stretch; border-right: 1px solid #2a2a3e; position: relative; cursor: pointer; }
27
- .sf-toolbar-block:hover { background: #252540; }
28
- .sf-toolbar-block a { display: flex; align-items: center; text-decoration: none; color: #e0e0e0; padding: 4px 10px; }
29
- .sf-toolbar-icon { display: flex; align-items: center; gap: 5px; white-space: nowrap; }
30
- .sf-toolbar-icon svg { width: 18px; height: 18px; fill: currentColor; }
31
- .sf-toolbar-info { display: none; position: absolute; bottom: 100%; left: 0; background: #1a1a2e; border: 1px solid #2a2a3e; padding: 8px; min-width: 200px; white-space: nowrap; box-shadow: 0 -2px 10px rgba(0,0,0,0.3); }
32
- .sf-toolbar-block:hover .sf-toolbar-info { display: block; }
33
- .sf-toolbar-info-piece { padding: 4px 8px; display: flex; gap: 8px; }
34
- .sf-toolbar-info-piece b { min-width: 80px; color: #888; }
35
- .sf-toolbar-status-green { color: #4caf50; }
36
- .sf-toolbar-status-yellow { color: #ff9800; }
37
- .sf-toolbar-status-red { color: #f44336; }
38
- .sf-toolbar-status-default { color: #e0e0e0; }
39
- .sf-toolbar-token { padding: 4px 10px; display: flex; align-items: center; margin-left: auto; font-size: 11px; color: #666; }
40
- .sf-toolbar-token strong { color: #999; margin: 0 4px; }
41
- .sf-toolbar-value { font-weight: 600; }
42
- .sf-toolbar-label { color: #888; font-size: 11px; }
25
+ .sf-toolbarreset{--sf-bg:#1a1a2e;--sf-bg-hover:#252540;--sf-border:#2a2a3e;--sf-text:#e0e0e0;--sf-text-muted:#888;--sf-font:system-ui,-apple-system,'Segoe UI',Roboto,Helvetica,Arial,sans-serif;--sf-font-mono:'JetBrains Mono','Fira Code',ui-monospace,monospace;--sf-green:#4caf50;--sf-yellow:#ff9800;--sf-red:#f44336;--sf-blue:#4fc3f7;--sf-white:#fff;all:initial;direction:ltr}
26
+ .sf-toolbarreset *{box-sizing:content-box;vertical-align:baseline;letter-spacing:normal}
27
+ .sf-toolbarreset{font:11px var(--sf-font);background:var(--sf-bg);color:var(--sf-text);position:fixed;bottom:0;left:0;right:0;z-index:99999;display:flex;align-items:stretch;box-shadow:inset 0 1px 0 var(--sf-border),0 -1px 8px rgba(0,0,0,.5);padding:0 4px;min-height:36px;text-transform:none;direction:ltr}
28
+ .sf-toolbar-block{display:flex;align-items:stretch;position:relative;cursor:default;flex-shrink:0}
29
+ .sf-toolbar-block a{display:flex;align-items:center;text-decoration:none;color:var(--sf-text);padding:0 10px;white-space:nowrap;transition:background .15s;font-size:11px;line-height:36px;height:36px}
30
+ .sf-toolbar-block a:hover{background:var(--sf-bg-hover)}
31
+ .sf-toolbar-icon{display:flex;align-items:center;gap:6px}
32
+ .sf-toolbar-icon svg{width:16px;height:16px;fill:none;stroke:currentColor;flex-shrink:0}
33
+ .sf-toolbar-icon .sf-toolbar-value{font-weight:600;font-size:12px;color:var(--sf-white);margin-right:2px}
34
+ .sf-toolbar-icon .sf-toolbar-label{color:var(--sf-text-muted);font-size:11px}
35
+ .sf-toolbar-info{display:none;position:absolute;bottom:100%;left:-1px;background:var(--sf-bg);border:1px solid var(--sf-border);border-bottom:none;min-width:220px;white-space:nowrap;box-shadow:0 -4px 12px rgba(0,0,0,.4);z-index:99998}
36
+ .sf-toolbar-block:hover .sf-toolbar-info{display:block}
37
+ .sf-toolbar-info-piece{padding:6px 12px;display:flex;gap:12px;font-size:12px;line-height:1.5;border-bottom:1px solid var(--sf-border)}
38
+ .sf-toolbar-info-piece:last-child{border-bottom:none}
39
+ .sf-toolbar-info-piece b{min-width:80px;color:var(--sf-text-muted);font-weight:500}
40
+ .sf-toolbar-info-piece .sf-toolbar-status{font-weight:600}
41
+ .sf-toolbar-status-green{color:var(--sf-green)}
42
+ .sf-toolbar-status-yellow{color:var(--sf-yellow)}
43
+ .sf-toolbar-status-red{color:var(--sf-red)}
44
+ .sf-toolbar-status-default{color:var(--sf-text)}
45
+ .sf-toolbar-token{margin-left:auto;padding:0 12px;display:flex;align-items:center;font-size:10px;color:var(--sf-text-muted);white-space:nowrap;gap:4px}
46
+ .sf-toolbar-token strong{color:var(--sf-text);font-weight:600}
47
+ .sf-toolbar-spacer{flex:1}
48
+ @media(max-width:768px){.sf-toolbar-icon .sf-toolbar-label,.sf-toolbar-icon .sf-toolbar-value{display:none}}
43
49
  </style>
44
- <div class="sf-toolbar" id="sfwdt${token}">
50
+ <div class="sf-toolbarreset" id="sfwdt${token}">
45
51
  ${blocks}
46
- <div class="sf-toolbar-token">TOKEN: <strong>${token}</strong></div>
52
+ <div class="sf-toolbar-spacer"></div>
53
+ <div class="sf-toolbar-token">
54
+ ${method || ''} ${statusCode ? `<span class="sf-toolbar-status-${statusCode >= 400 ? 'red' : 'green'}">${statusCode}</span>` : ''}
55
+ ${duration ? `<span>${duration}ms</span>` : ''}
56
+ ${memory ? `<span>${memory}MB</span>` : ''}
57
+ <strong>${token}</strong>
58
+ </div>
47
59
  </div>
48
60
  <script>
49
- (function() {
50
- var token = '${token}';
51
- var toolbarUrl = '${toolbarPath}';
52
- var toolbar = document.getElementById('sfwdt' + token);
53
-
54
- var xhr = new XMLHttpRequest();
55
- xhr.open('GET', toolbarUrl + '/' + token, true);
56
- xhr.onload = function() {
57
- if (xhr.status === 200) {
58
- // toolbar loaded
59
- }
60
- };
61
- xhr.send();
62
-
63
- var originalFetch = window.fetch;
64
- window.fetch = function(url, opts) {
65
- return originalFetch.apply(this, arguments).then(function(response) {
66
- var dt = response.headers.get('X-Debug-Token');
67
- if (dt && dt !== token) {
68
- token = dt;
69
- var wdt = document.getElementById('sfwdt' + dt);
70
- if (!wdt) {
71
- var div = document.querySelector('.sf-toolbar');
72
- if (div) div.parentNode.removeChild(div);
73
- setTimeout(function() {
74
- var xhr2 = new XMLHttpRequest();
75
- xhr2.open('GET', toolbarUrl + '/' + dt, true);
76
- xhr2.send();
77
- }, 100);
78
- }
79
- }
80
- return response;
81
- });
82
- };
83
-
84
- var origSend = XMLHttpRequest.prototype.send;
85
- XMLHttpRequest.prototype.send = function(body) {
86
- this.addEventListener('load', function() {
87
- var dt = this.getResponseHeader('X-Debug-Token');
88
- if (dt && dt !== token) {
89
- token = dt;
90
- var wdt = document.getElementById('sfwdt' + dt);
91
- if (!wdt) {
92
- var div = document.querySelector('.sf-toolbar');
93
- if (div) div.parentNode.removeChild(div);
94
- setTimeout(function() {
95
- var xhr2 = new XMLHttpRequest();
96
- xhr2.open('GET', toolbarUrl + '/' + dt, true);
97
- xhr2.send();
98
- }, 100);
99
- }
100
- }
101
- });
102
- return origSend.call(this, body);
103
- };
104
- })();
61
+ (function(){var t='${token}',p='${toolbarPath}';
62
+ var o=XMLHttpRequest.prototype.send;XMLHttpRequest.prototype.send=function(b){this.addEventListener('load',function(){var d=this.getResponseHeader('X-Debug-Token');if(d&&d!==t){t=d;var e=document.querySelector('.sf-toolbarreset');if(e)e.remove();var x=new XMLHttpRequest;x.open('GET',p+'/'+d,true);x.send()}});return o.call(this,b)};
63
+ var f=window.fetch;window.fetch=function(u,o){return f.apply(this,arguments).then(function(r){var d=r.headers.get('X-Debug-Token');if(d&&d!==t){t=d;var e=document.querySelector('.sf-toolbarreset');if(e)e.remove();setTimeout(function(){var x=new XMLHttpRequest;x.open('GET',p+'/'+d,true);x.send()},100)}return r})};})();
105
64
  </script>`;
106
65
  }
107
- renderIcon(iconName) {
108
- const icons = {
109
- request: `<svg viewBox="0 0 24 24"><path d="M20 4H4c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2zm0 14H4V6h16v12zM6 10h2v2H6v-2zm0 4h8v2H6v-2zm10 0h2v2h-2v-2zm-6-4h8v2h-8v-2z"/></svg>`,
110
- time: `<svg viewBox="0 0 24 24"><path d="M11.99 2C6.47 2 2 6.48 2 12s4.47 10 9.99 10C17.52 22 22 17.52 22 12S17.52 2 11.99 2zM12 20c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8zm.5-13H11v6l5.25 3.15.75-1.23-4.5-2.67z"/></svg>`,
111
- exception: `<svg viewBox="0 0 24 24"><path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm-2 15l-5-5 1.41-1.41L10 14.17l7.59-7.59L19 8l-9 9z"/></svg>`,
112
- route: `<svg viewBox="0 0 24 24"><path d="M12 2C8.13 2 5 5.13 5 9c0 5.25 7 13 7 13s7-7.75 7-13c0-3.87-3.13-7-7-7zm0 9.5c-1.38 0-2.5-1.12-2.5-2.5s1.12-2.5 2.5-2.5 2.5 1.12 2.5 2.5-1.12 2.5-2.5 2.5z"/></svg>`,
113
- log: `<svg viewBox="0 0 24 24"><path d="M20 2H4c-1.1 0-2 .9-2 2v18l4-4h14c1.1 0 2-.9 2-2V4c0-1.1-.9-2-2-2zm0 14H5.17L4 17.17V4h16v12zM7 9h10v2H7V9zm0 3h7v2H7v-2z"/></svg>`,
114
- database: `<svg viewBox="0 0 24 24"><path d="M12 3C7.58 3 4 4.79 4 7v10c0 2.21 3.58 4 8 4s8-1.79 8-4V7c0-2.21-3.58-4-8-4zm6 14c0 1.1-2.69 2-6 2s-6-.9-6-2v-2.23c1.43.83 3.58 1.23 6 1.23s4.57-.4 6-1.23V17zm0-4c0 1.1-2.69 2-6 2s-6-.9-6-2v-2.23c1.43.83 3.58 1.23 6 1.23s4.57-.4 6-1.23V13zm0-4c0 1.1-2.69 2-6 2s-6-.9-6-2V7c0-1.1 2.69-2 6-2s6 .9 6 2v2z"/></svg>`,
115
- cache: `<svg viewBox="0 0 24 24"><path d="M19 10V8c0-1.1-.9-2-2-2h-2V4c0-1.1-.9-2-2-2h-2c-1.1 0-2 .9-2 2v2H7c-1.1 0-2 .9-2 2v2c-1.1 0-2 .9-2 2v2c0 1.1.9 2 2 2v2c0 1.1.9 2 2 2h10c1.1 0 2-.9 2-2v-2c1.1 0 2-.9 2-2v-2c0-1.1-.9-2-2-2zm-6-6h2v2h-2V4zm0 4h2v2h-2V8zM7 8h2v2H7V8zm0 4h2v2H7v-2zm10 8H7v-2h10v2zm0-4H7v-2h10v2zm0-4H7v-2h10v2z"/></svg>`,
116
- };
117
- return icons[iconName] || icons.request;
66
+ renderBlockIcon(name, data, iconName) {
67
+ return icons_1.ICONS[name] || icons_1.ICONS[iconName] || icons_1.ICONS.request;
118
68
  }
119
- renderTextPieces(name, data) {
69
+ renderBlockText(name, data) {
70
+ switch (name) {
71
+ case 'request':
72
+ return `<span class="sf-toolbar-value">${data.method || 'GET'}</span><span class="sf-toolbar-label">${data.statusCode || 200}</span>`;
73
+ case 'time':
74
+ return `<span class="sf-toolbar-value">${data.totalDuration || 0}</span><span class="sf-toolbar-label">ms</span>`;
75
+ case 'exception':
76
+ return data.hasException
77
+ ? `<span class="sf-toolbar-value sf-toolbar-status-red">ERR</span>`
78
+ : `<span class="sf-toolbar-value sf-toolbar-status-green">OK</span>`;
79
+ case 'route':
80
+ return `<span class="sf-toolbar-label">${data.route?.split('/').pop() || '/'}</span>`;
81
+ case 'log':
82
+ return `<span class="sf-toolbar-value">${data.totalLogs || 0}</span><span class="sf-toolbar-label">logs</span>`;
83
+ case 'database':
84
+ return `<span class="sf-toolbar-value">${data.totalQueries || 0}</span><span class="sf-toolbar-label">db</span>`;
85
+ case 'cache':
86
+ return `<span class="sf-toolbar-value">${data.totalOperations || 0}</span><span class="sf-toolbar-label">cache</span>`;
87
+ default:
88
+ return `<span class="sf-toolbar-label">${name}</span>`;
89
+ }
90
+ }
91
+ renderBlockInfo(name, data) {
120
92
  switch (name) {
121
93
  case 'request':
122
94
  return `
123
- <div class="sf-toolbar-info-piece"><b>Method</b><span>${data.method || 'GET'}</span></div>
124
- <div class="sf-toolbar-info-piece"><b>Status</b><span>${data.statusCode || 200}</span></div>
125
- <div class="sf-toolbar-info-piece"><b>URL</b><span style="max-width:300px;overflow:hidden;text-overflow:ellipsis">${data.path || '/'}</span></div>
95
+ <div class="sf-toolbar-info-piece"><b>Method</b><span class="sf-toolbar-status">${data.method || 'GET'}</span></div>
96
+ <div class="sf-toolbar-info-piece"><b>Status</b><span class="sf-toolbar-status-${data.statusCode >= 400 ? 'red' : 'green'}">${data.statusCode || 200}</span></div>
97
+ <div class="sf-toolbar-info-piece"><b>URL</b><span style="max-width:350px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap">${data.path || '/'}</span></div>
126
98
  <div class="sf-toolbar-info-piece"><b>IP</b><span>${data.ip || '-'}</span></div>`;
127
99
  case 'time':
128
100
  return `
129
- <div class="sf-toolbar-info-piece"><b>Duration</b><span>${data.totalDuration || 0} ms</span></div>
130
- <div class="sf-toolbar-info-piece"><b>Memory</b><span>${data.peakMemory || 0} MB</span></div>`;
101
+ <div class="sf-toolbar-info-piece"><b>Duration</b><span class="sf-toolbar-status">${data.totalDuration || 0} ms</span></div>
102
+ <div class="sf-toolbar-info-piece"><b>Peak Memory</b><span>${data.peakMemory || 0} MB</span></div>`;
131
103
  case 'exception':
132
104
  if (data.hasException) {
133
- return `<div class="sf-toolbar-info-piece"><b>Error</b><span style="color:#f44336">${data.message || 'Unknown'}</span></div>`;
105
+ return `<div class="sf-toolbar-info-piece"><b>Error</b><span class="sf-toolbar-status-red">${data.message || 'Unknown'}</span></div>`;
134
106
  }
135
- return `<div class="sf-toolbar-info-piece"><b>Errors</b><span>0</span></div>`;
107
+ return `<div class="sf-toolbar-info-piece"><b>Errors</b><span class="sf-toolbar-status-green">0</span></div>`;
136
108
  case 'route':
137
109
  return `
138
110
  <div class="sf-toolbar-info-piece"><b>Route</b><span>${data.route || '/'}</span></div>
139
111
  <div class="sf-toolbar-info-piece"><b>Controller</b><span>${data.controller || 'unknown'}</span></div>`;
140
112
  case 'log':
141
- return `<div class="sf-toolbar-info-piece"><b>Logs</b><span>${data.totalLogs || 0} total</span></div>`;
113
+ return `
114
+ <div class="sf-toolbar-info-piece"><b>Total Logs</b><span class="sf-toolbar-status">${data.totalLogs || 0}</span></div>
115
+ ${data.logCounts ? Object.entries(data.logCounts).map(([level, count]) => `<div class="sf-toolbar-info-piece"><b>${level}</b><span>${count}</span></div>`).join('') : ''}`;
142
116
  case 'database':
143
117
  return `
144
- <div class="sf-toolbar-info-piece"><b>Queries</b><span>${data.totalQueries || 0}</span></div>
145
- <div class="sf-toolbar-info-piece"><b>Duration</b><span>${data.totalDuration || 0} ms</span></div>`;
118
+ <div class="sf-toolbar-info-piece"><b>Total Queries</b><span class="sf-toolbar-status">${data.totalQueries || 0}</span></div>
119
+ <div class="sf-toolbar-info-piece"><b>Total Time</b><span>${data.totalDuration || 0} ms</span></div>
120
+ <div class="sf-toolbar-info-piece"><b>Average</b><span>${data.averageDuration || 0} ms</span></div>`;
146
121
  case 'cache':
147
122
  return `
148
- <div class="sf-toolbar-info-piece"><b>Operations</b><span>${data.totalOperations || 0}</span></div>
149
- <div class="sf-toolbar-info-piece"><b>Hit rate</b><span>${data.hitRate || 0}%</span></div>`;
123
+ <div class="sf-toolbar-info-piece"><b>Total Ops</b><span class="sf-toolbar-status">${data.totalOperations || 0}</span></div>
124
+ <div class="sf-toolbar-info-piece"><b>Hit Rate</b><span class="sf-toolbar-status-${data.hitRate > 80 ? 'green' : data.hitRate > 50 ? 'yellow' : 'default'}">${data.hitRate || 0}%</span></div>`;
150
125
  default:
151
126
  return `<div class="sf-toolbar-info-piece"><b>Data</b><span>collected</span></div>`;
152
127
  }
153
128
  }
154
- getStatusClass(data) {
155
- const exception = data.hasException;
156
- const statusCode = data.statusCode;
157
- if (exception)
129
+ getStatusClass(name, data) {
130
+ if (name === 'exception' && data.hasException)
158
131
  return 'red';
159
- if (statusCode && statusCode >= 400)
132
+ if (name === 'request' && data.statusCode >= 400)
160
133
  return 'yellow';
161
134
  return 'green';
162
135
  }
@@ -1 +1 @@
1
- {"version":3,"file":"toolbar.js","sourceRoot":"","sources":["../../src/views/toolbar.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"toolbar.js","sourceRoot":"","sources":["../../src/views/toolbar.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "devtools-nestjs",
3
- "version": "2.0.7",
3
+ "version": "2.1.0",
4
4
  "description": "A development tool for NestJS that gives detailed profiling information about request execution — inspired by Symfony's WebProfilerBundle",
5
5
  "keywords": [
6
6
  "nestjs",