nestjs-devtools 1.2.3 → 1.3.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.
@@ -0,0 +1,2 @@
1
+ export declare const DEVOOLS_COLLECTORS_TOKEN = "DEVOOLS_COLLECTORS_TOKEN";
2
+ export declare const DEVOOLS_CONFIG_TOKEN = "DEVOOLS_CONFIG_TOKEN";
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DEVOOLS_CONFIG_TOKEN = exports.DEVOOLS_COLLECTORS_TOKEN = void 0;
4
+ exports.DEVOOLS_COLLECTORS_TOKEN = 'DEVOOLS_COLLECTORS_TOKEN';
5
+ exports.DEVOOLS_CONFIG_TOKEN = 'DEVOOLS_CONFIG_TOKEN';
6
+ //# sourceMappingURL=devtools.constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"devtools.constants.js","sourceRoot":"","sources":["../devtools.constants.ts"],"names":[],"mappings":";;;AAAa,QAAA,wBAAwB,GAAG,0BAA0B,CAAC;AACtD,QAAA,oBAAoB,GAAG,sBAAsB,CAAC"}
@@ -1,9 +1,12 @@
1
1
  import { DevtoolsService } from './devtools.service';
2
2
  import { AbstractCollector } from './collectors';
3
+ import { ProfilerPageConfig } from './toolbar/profiler';
4
+ import { ToolbarTemplateConfig } from './toolbar/template';
3
5
  export declare class DevtoolsController {
4
6
  private readonly devtoolsService;
5
7
  private readonly collectors;
6
- constructor(devtoolsService: DevtoolsService, collectors?: AbstractCollector[]);
8
+ private readonly devtoolsConfig;
9
+ constructor(devtoolsService: DevtoolsService, collectors: AbstractCollector[] | undefined, devtoolsConfig: ToolbarTemplateConfig & ProfilerPageConfig);
7
10
  getProfiler(res: any): void;
8
11
  getToolbarData(): Record<string, unknown>;
9
12
  getHistory(): {
@@ -15,12 +15,13 @@ Object.defineProperty(exports, "__esModule", { value: true });
15
15
  exports.DevtoolsController = void 0;
16
16
  const common_1 = require("@nestjs/common");
17
17
  const devtools_service_1 = require("./devtools.service");
18
- const devtools_module_1 = require("./devtools.module");
18
+ const devtools_constants_1 = require("./devtools.constants");
19
19
  const profiler_1 = require("./toolbar/profiler");
20
20
  let DevtoolsController = class DevtoolsController {
21
- constructor(devtoolsService, collectors = []) {
21
+ constructor(devtoolsService, collectors = [], devtoolsConfig) {
22
22
  this.devtoolsService = devtoolsService;
23
23
  this.collectors = collectors;
24
+ this.devtoolsConfig = devtoolsConfig;
24
25
  }
25
26
  getProfiler(res) {
26
27
  try {
@@ -29,7 +30,7 @@ let DevtoolsController = class DevtoolsController {
29
30
  catch {
30
31
  res.header('content-type', 'text/html');
31
32
  }
32
- res.send((0, profiler_1.PROFILER_PAGE)());
33
+ res.send((0, profiler_1.PROFILER_PAGE)(this.devtoolsConfig));
33
34
  }
34
35
  getToolbarData() {
35
36
  const panels = {};
@@ -73,6 +74,7 @@ __decorate([
73
74
  ], DevtoolsController.prototype, "getHistory", null);
74
75
  __decorate([
75
76
  (0, common_1.Get)('request/:id'),
77
+ __param(0, (0, common_1.Param)('id')),
76
78
  __metadata("design:type", Function),
77
79
  __metadata("design:paramtypes", [String]),
78
80
  __metadata("design:returntype", void 0)
@@ -80,7 +82,8 @@ __decorate([
80
82
  exports.DevtoolsController = DevtoolsController = __decorate([
81
83
  (0, common_1.Controller)('__devtools'),
82
84
  __param(1, (0, common_1.Optional)()),
83
- __param(1, (0, common_1.Inject)(devtools_module_1.DEVOOLS_COLLECTORS_TOKEN)),
84
- __metadata("design:paramtypes", [devtools_service_1.DevtoolsService, Array])
85
+ __param(1, (0, common_1.Inject)(devtools_constants_1.DEVOOLS_COLLECTORS_TOKEN)),
86
+ __param(2, (0, common_1.Inject)(devtools_constants_1.DEVOOLS_CONFIG_TOKEN)),
87
+ __metadata("design:paramtypes", [devtools_service_1.DevtoolsService, Array, Object])
85
88
  ], DevtoolsController);
86
89
  //# sourceMappingURL=devtools.controller.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"devtools.controller.js","sourceRoot":"","sources":["../devtools.controller.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,2CAAwE;AACxE,yDAAqD;AAErD,uDAA6D;AAC7D,iDAAmD;AAG5C,IAAM,kBAAkB,GAAxB,MAAM,kBAAkB;IAC7B,YACmB,eAAgC,EAGhC,aAAkC,EAAE;QAHpC,oBAAe,GAAf,eAAe,CAAiB;QAGhC,eAAU,GAAV,UAAU,CAA0B;IACpD,CAAC;IAGJ,WAAW,CAAQ,GAAQ;QACzB,IAAI,CAAC;YAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAAC,CAAC;QAAC,MAAM,CAAC;YAAC,GAAG,CAAC,MAAM,CAAC,cAAc,EAAE,WAAW,CAAC,CAAC;QAAC,CAAC;QACjF,GAAG,CAAC,IAAI,CAAC,IAAA,wBAAa,GAAE,CAAC,CAAC;IAC5B,CAAC;IAGD,cAAc;QACZ,MAAM,MAAM,GAA4B,EAAE,CAAC;QAC3C,KAAK,MAAM,SAAS,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACxC,IAAI,CAAC;gBACH,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,OAAO,EAAE,CAAC;YAC/C,CAAC;YAAC,MAAM,CAAC;gBACP,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,SAAS,CAAC,IAAI,EAAE,OAAO,EAAE,uBAAuB,EAAE,CAAC;YACvF,CAAC;QACH,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAGD,UAAU;QACR,OAAO,IAAI,CAAC,eAAe,CAAC,iBAAiB,EAAE,CAAC;IAClD,CAAC;IAGD,gBAAgB,CAAC,EAAU;QACzB,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,UAAU,EAAE,CAAC;QAClD,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,IAAI,IAAI,CAAC;IAClD,CAAC;CACF,CAAA;AArCY,gDAAkB;AAS7B;IADC,IAAA,YAAG,GAAE;IACO,WAAA,IAAA,YAAG,GAAE,CAAA;;;;qDAGjB;AAGD;IADC,IAAA,YAAG,EAAC,MAAM,CAAC;;;;wDAWX;AAGD;IADC,IAAA,YAAG,EAAC,SAAS,CAAC;;;;oDAGd;AAGD;IADC,IAAA,YAAG,EAAC,aAAa,CAAC;;;;0DAIlB;6BApCU,kBAAkB;IAD9B,IAAA,mBAAU,EAAC,YAAY,CAAC;IAIpB,WAAA,IAAA,iBAAQ,GAAE,CAAA;IACV,WAAA,IAAA,eAAM,EAAC,0CAAwB,CAAC,CAAA;qCAFC,kCAAe;GAFxC,kBAAkB,CAqC9B"}
1
+ {"version":3,"file":"devtools.controller.js","sourceRoot":"","sources":["../devtools.controller.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,2CAA+E;AAC/E,yDAAqD;AAErD,6DAAsF;AACtF,iDAAuE;AAIhE,IAAM,kBAAkB,GAAxB,MAAM,kBAAkB;IAC7B,YACmB,eAAgC,EAGhC,aAAkC,EAAE,EAEpC,cAA0D;QAL1D,oBAAe,GAAf,eAAe,CAAiB;QAGhC,eAAU,GAAV,UAAU,CAA0B;QAEpC,mBAAc,GAAd,cAAc,CAA4C;IAC1E,CAAC;IAGJ,WAAW,CAAQ,GAAQ;QACzB,IAAI,CAAC;YAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAAC,CAAC;QAAC,MAAM,CAAC;YAAC,GAAG,CAAC,MAAM,CAAC,cAAc,EAAE,WAAW,CAAC,CAAC;QAAC,CAAC;QACjF,GAAG,CAAC,IAAI,CAAC,IAAA,wBAAa,EAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC;IAC/C,CAAC;IAGD,cAAc;QACZ,MAAM,MAAM,GAA4B,EAAE,CAAC;QAC3C,KAAK,MAAM,SAAS,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACxC,IAAI,CAAC;gBACH,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,OAAO,EAAE,CAAC;YAC/C,CAAC;YAAC,MAAM,CAAC;gBACP,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,SAAS,CAAC,IAAI,EAAE,OAAO,EAAE,uBAAuB,EAAE,CAAC;YACvF,CAAC;QACH,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAGD,UAAU;QACR,OAAO,IAAI,CAAC,eAAe,CAAC,iBAAiB,EAAE,CAAC;IAClD,CAAC;IAGD,gBAAgB,CAAc,EAAU;QACtC,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,UAAU,EAAE,CAAC;QAClD,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,IAAI,IAAI,CAAC;IAClD,CAAC;CACF,CAAA;AAvCY,gDAAkB;AAW7B;IADC,IAAA,YAAG,GAAE;IACO,WAAA,IAAA,YAAG,GAAE,CAAA;;;;qDAGjB;AAGD;IADC,IAAA,YAAG,EAAC,MAAM,CAAC;;;;wDAWX;AAGD;IADC,IAAA,YAAG,EAAC,SAAS,CAAC;;;;oDAGd;AAGD;IADC,IAAA,YAAG,EAAC,aAAa,CAAC;IACD,WAAA,IAAA,cAAK,EAAC,IAAI,CAAC,CAAA;;;;0DAG5B;6BAtCU,kBAAkB;IAD9B,IAAA,mBAAU,EAAC,YAAY,CAAC;IAIpB,WAAA,IAAA,iBAAQ,GAAE,CAAA;IACV,WAAA,IAAA,eAAM,EAAC,6CAAwB,CAAC,CAAA;IAEhC,WAAA,IAAA,eAAM,EAAC,yCAAoB,CAAC,CAAA;qCAJK,kCAAe;GAFxC,kBAAkB,CAuC9B"}
@@ -1,8 +1,10 @@
1
1
  import { NestInterceptor, ExecutionContext, CallHandler } from '@nestjs/common';
2
2
  import { Observable } from 'rxjs';
3
3
  import { DevtoolsService } from './devtools.service';
4
+ import { ToolbarTemplateConfig } from './toolbar/template';
4
5
  export declare class DevtoolsFilter implements NestInterceptor {
5
6
  private readonly devtoolsService;
6
- constructor(devtoolsService: DevtoolsService);
7
+ private readonly config;
8
+ constructor(devtoolsService: DevtoolsService, config: ToolbarTemplateConfig);
7
9
  intercept(context: ExecutionContext, next: CallHandler): Observable<unknown>;
8
10
  }
@@ -8,22 +8,27 @@ 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.DevtoolsFilter = void 0;
13
16
  const common_1 = require("@nestjs/common");
14
17
  const rxjs_1 = require("rxjs");
15
18
  const devtools_service_1 = require("./devtools.service");
19
+ const devtools_constants_1 = require("./devtools.constants");
16
20
  const template_1 = require("./toolbar/template");
17
21
  let DevtoolsFilter = class DevtoolsFilter {
18
- constructor(devtoolsService) {
22
+ constructor(devtoolsService, config) {
19
23
  this.devtoolsService = devtoolsService;
24
+ this.config = config;
20
25
  }
21
26
  intercept(context, next) {
22
27
  return next.handle().pipe((0, rxjs_1.map)((data) => {
23
28
  const response = context.switchToHttp().getResponse();
24
29
  const contentType = response.getHeader('content-type') ?? '';
25
30
  if (typeof data === 'string' && contentType.includes('text/html')) {
26
- return data.replace('</body>', (0, template_1.TOOLBAR_TEMPLATE)() + '</body>');
31
+ return data.replace('</body>', (0, template_1.TOOLBAR_TEMPLATE)(this.config) + '</body>');
27
32
  }
28
33
  return data;
29
34
  }));
@@ -32,6 +37,7 @@ let DevtoolsFilter = class DevtoolsFilter {
32
37
  exports.DevtoolsFilter = DevtoolsFilter;
33
38
  exports.DevtoolsFilter = DevtoolsFilter = __decorate([
34
39
  (0, common_1.Injectable)(),
35
- __metadata("design:paramtypes", [devtools_service_1.DevtoolsService])
40
+ __param(1, (0, common_1.Inject)(devtools_constants_1.DEVOOLS_CONFIG_TOKEN)),
41
+ __metadata("design:paramtypes", [devtools_service_1.DevtoolsService, Object])
36
42
  ], DevtoolsFilter);
37
43
  //# sourceMappingURL=devtools.filter.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"devtools.filter.js","sourceRoot":"","sources":["../devtools.filter.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,2CAKwB;AACxB,+BAAuC;AACvC,yDAAqD;AACrD,iDAAsD;AAG/C,IAAM,cAAc,GAApB,MAAM,cAAc;IACzB,YAA6B,eAAgC;QAAhC,oBAAe,GAAf,eAAe,CAAiB;IAAG,CAAC;IAEjE,SAAS,CAAC,OAAyB,EAAE,IAAiB;QACpD,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,CACvB,IAAA,UAAG,EAAC,CAAC,IAAI,EAAE,EAAE;YACX,MAAM,QAAQ,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,WAAW,EAAE,CAAC;YACtD,MAAM,WAAW,GAAG,QAAQ,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC;YAE7D,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,WAAW,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;gBAClE,OAAO,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,IAAA,2BAAgB,GAAE,GAAG,SAAS,CAAC,CAAC;YACjE,CAAC;YAED,OAAO,IAAI,CAAC;QACd,CAAC,CAAC,CACH,CAAC;IACJ,CAAC;CACF,CAAA;AAjBY,wCAAc;yBAAd,cAAc;IAD1B,IAAA,mBAAU,GAAE;qCAEmC,kCAAe;GADlD,cAAc,CAiB1B"}
1
+ {"version":3,"file":"devtools.filter.js","sourceRoot":"","sources":["../devtools.filter.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,2CAMwB;AACxB,+BAAuC;AACvC,yDAAqD;AACrD,6DAA4D;AAC5D,iDAA6E;AAGtE,IAAM,cAAc,GAApB,MAAM,cAAc;IACzB,YACmB,eAAgC,EAEhC,MAA6B;QAF7B,oBAAe,GAAf,eAAe,CAAiB;QAEhC,WAAM,GAAN,MAAM,CAAuB;IAC7C,CAAC;IAEJ,SAAS,CAAC,OAAyB,EAAE,IAAiB;QACpD,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,CACvB,IAAA,UAAG,EAAC,CAAC,IAAI,EAAE,EAAE;YACX,MAAM,QAAQ,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,WAAW,EAAE,CAAC;YACtD,MAAM,WAAW,GAAG,QAAQ,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC;YAE7D,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,WAAW,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;gBAClE,OAAO,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,IAAA,2BAAgB,EAAC,IAAI,CAAC,MAAM,CAAC,GAAG,SAAS,CAAC,CAAC;YAC5E,CAAC;YAED,OAAO,IAAI,CAAC;QACd,CAAC,CAAC,CACH,CAAC;IACJ,CAAC;CACF,CAAA;AArBY,wCAAc;yBAAd,cAAc;IAD1B,IAAA,mBAAU,GAAE;IAIR,WAAA,IAAA,eAAM,EAAC,yCAAoB,CAAC,CAAA;qCADK,kCAAe;GAFxC,cAAc,CAqB1B"}
@@ -1,6 +1,6 @@
1
1
  import { DynamicModule, Type } from '@nestjs/common';
2
2
  import { AbstractCollector } from './collectors/abstract.collector';
3
- export declare const DEVOOLS_COLLECTORS_TOKEN = "DEVOOLS_COLLECTORS_TOKEN";
3
+ export { DEVOOLS_COLLECTORS_TOKEN, DEVOOLS_CONFIG_TOKEN } from './devtools.constants';
4
4
  export interface DevtoolsModuleOptions {
5
5
  enabled?: boolean;
6
6
  position?: 'bottom-left' | 'bottom-right' | 'top-left' | 'top-right';
@@ -7,7 +7,7 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
7
7
  };
8
8
  var DevtoolsModule_1;
9
9
  Object.defineProperty(exports, "__esModule", { value: true });
10
- exports.DevtoolsModule = exports.DEVOOLS_COLLECTORS_TOKEN = void 0;
10
+ exports.DevtoolsModule = exports.DEVOOLS_CONFIG_TOKEN = exports.DEVOOLS_COLLECTORS_TOKEN = void 0;
11
11
  const common_1 = require("@nestjs/common");
12
12
  const core_1 = require("@nestjs/core");
13
13
  const devtools_service_1 = require("./devtools.service");
@@ -15,7 +15,10 @@ const devtools_interceptor_1 = require("./devtools.interceptor");
15
15
  const devtools_filter_1 = require("./devtools.filter");
16
16
  const devtools_controller_1 = require("./devtools.controller");
17
17
  const collectors_1 = require("./collectors");
18
- exports.DEVOOLS_COLLECTORS_TOKEN = 'DEVOOLS_COLLECTORS_TOKEN';
18
+ const devtools_constants_1 = require("./devtools.constants");
19
+ var devtools_constants_2 = require("./devtools.constants");
20
+ Object.defineProperty(exports, "DEVOOLS_COLLECTORS_TOKEN", { enumerable: true, get: function () { return devtools_constants_2.DEVOOLS_COLLECTORS_TOKEN; } });
21
+ Object.defineProperty(exports, "DEVOOLS_CONFIG_TOKEN", { enumerable: true, get: function () { return devtools_constants_2.DEVOOLS_CONFIG_TOKEN; } });
19
22
  const DEFAULT_COLLECTORS = [
20
23
  collectors_1.RequestCollector,
21
24
  collectors_1.PerformanceCollector,
@@ -23,17 +26,22 @@ const DEFAULT_COLLECTORS = [
23
26
  collectors_1.RouteCollector,
24
27
  collectors_1.LogCollector,
25
28
  ];
26
- const SHARED_PROVIDERS = [
27
- devtools_service_1.DevtoolsService,
28
- collectors_1.RequestCollector,
29
- collectors_1.PerformanceCollector,
30
- collectors_1.DatabaseCollector,
31
- collectors_1.RouteCollector,
32
- collectors_1.LogCollector,
33
- ];
29
+ function createSharedProviders(maxHistory) {
30
+ return [
31
+ {
32
+ provide: devtools_service_1.DevtoolsService,
33
+ useFactory: () => new devtools_service_1.DevtoolsService(maxHistory),
34
+ },
35
+ collectors_1.RequestCollector,
36
+ collectors_1.PerformanceCollector,
37
+ collectors_1.DatabaseCollector,
38
+ collectors_1.RouteCollector,
39
+ collectors_1.LogCollector,
40
+ ];
41
+ }
34
42
  let DevtoolsModule = DevtoolsModule_1 = class DevtoolsModule {
35
43
  static forRoot(options = {}) {
36
- const { enabled = process.env.NODE_ENV !== 'production', maxHistory = 50, collectors = DEFAULT_COLLECTORS, injectToolbar = true, } = options;
44
+ const { enabled = process.env.NODE_ENV !== 'production', maxHistory = 50, collectors = DEFAULT_COLLECTORS, injectToolbar = true, position, theme, } = options;
37
45
  if (!enabled) {
38
46
  return {
39
47
  module: DevtoolsModule_1,
@@ -48,13 +56,23 @@ let DevtoolsModule = DevtoolsModule_1 = class DevtoolsModule {
48
56
  }
49
57
  const allCollectors = [...new Set([...DEFAULT_COLLECTORS, ...collectors])];
50
58
  const collectorProvider = {
51
- provide: exports.DEVOOLS_COLLECTORS_TOKEN,
59
+ provide: devtools_constants_1.DEVOOLS_COLLECTORS_TOKEN,
52
60
  useFactory: (...instances) => instances,
53
61
  inject: allCollectors,
54
62
  };
63
+ const resolvedConfig = {
64
+ position: position ?? 'bottom-left',
65
+ theme: theme ?? 'dark',
66
+ };
67
+ const configProvider = {
68
+ provide: devtools_constants_1.DEVOOLS_CONFIG_TOKEN,
69
+ useValue: resolvedConfig,
70
+ };
71
+ const sharedProviders = createSharedProviders(maxHistory);
55
72
  const providers = [
56
- ...SHARED_PROVIDERS,
73
+ ...sharedProviders,
57
74
  collectorProvider,
75
+ configProvider,
58
76
  {
59
77
  provide: core_1.APP_INTERCEPTOR,
60
78
  useClass: devtools_interceptor_1.DevtoolsInterceptor,
@@ -70,7 +88,7 @@ let DevtoolsModule = DevtoolsModule_1 = class DevtoolsModule {
70
88
  module: DevtoolsModule_1,
71
89
  controllers: [devtools_controller_1.DevtoolsController],
72
90
  providers,
73
- exports: [devtools_service_1.DevtoolsService, exports.DEVOOLS_COLLECTORS_TOKEN, ...SHARED_PROVIDERS],
91
+ exports: [devtools_service_1.DevtoolsService, devtools_constants_1.DEVOOLS_COLLECTORS_TOKEN, devtools_constants_1.DEVOOLS_CONFIG_TOKEN, ...sharedProviders],
74
92
  };
75
93
  }
76
94
  };
@@ -1 +1 @@
1
- {"version":3,"file":"devtools.module.js","sourceRoot":"","sources":["../devtools.module.ts"],"names":[],"mappings":";;;;;;;;;;AAAA,2CAAuE;AACvE,uCAA+C;AAC/C,yDAAqD;AACrD,iEAA6D;AAC7D,uDAAmD;AACnD,+DAA2D;AAE3D,6CAMsB;AAET,QAAA,wBAAwB,GAAG,0BAA0B,CAAC;AAWnE,MAAM,kBAAkB,GAA8B;IACpD,6BAAgB;IAChB,iCAAoB;IACpB,8BAAiB;IACjB,2BAAc;IACd,yBAAY;CACb,CAAC;AAEF,MAAM,gBAAgB,GAAe;IACnC,kCAAe;IACf,6BAAgB;IAChB,iCAAoB;IACpB,8BAAiB;IACjB,2BAAc;IACd,yBAAY;CACb,CAAC;AAGK,IAAM,cAAc,sBAApB,MAAM,cAAc;IACzB,MAAM,CAAC,OAAO,CAAC,UAAiC,EAAE;QAChD,MAAM,EACJ,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,YAAY,EAC/C,UAAU,GAAG,EAAE,EACf,UAAU,GAAG,kBAAkB,EAC/B,aAAa,GAAG,IAAI,GACrB,GAAG,OAAO,CAAC;QAEZ,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO;gBACL,MAAM,EAAE,gBAAc;gBACtB,SAAS,EAAE;oBACT;wBACE,OAAO,EAAE,kCAAe;wBACxB,QAAQ,EAAE,IAAI;qBACf;iBACF;gBACD,OAAO,EAAE,EAAE;aACZ,CAAC;QACJ,CAAC;QAED,MAAM,aAAa,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,kBAAkB,EAAE,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;QAE3E,MAAM,iBAAiB,GAAa;YAClC,OAAO,EAAE,gCAAwB;YACjC,UAAU,EAAE,CAAC,GAAG,SAA8B,EAAE,EAAE,CAAC,SAAS;YAC5D,MAAM,EAAE,aAAa;SACtB,CAAC;QAEF,MAAM,SAAS,GAAe;YAC5B,GAAG,gBAAgB;YACnB,iBAAiB;YACjB;gBACE,OAAO,EAAE,sBAAe;gBACxB,QAAQ,EAAE,0CAAmB;aAC9B;SACF,CAAC;QAEF,IAAI,aAAa,EAAE,CAAC;YAClB,SAAS,CAAC,IAAI,CAAC;gBACb,OAAO,EAAE,sBAAe;gBACxB,QAAQ,EAAE,gCAAc;aACzB,CAAC,CAAC;QACL,CAAC;QAED,OAAO;YACL,MAAM,EAAE,gBAAc;YACtB,WAAW,EAAE,CAAC,wCAAkB,CAAC;YACjC,SAAS;YACT,OAAO,EAAE,CAAC,kCAAe,EAAE,gCAAwB,EAAE,GAAG,gBAAgB,CAAC;SAC1E,CAAC;IACJ,CAAC;CACF,CAAA;AArDY,wCAAc;yBAAd,cAAc;IAD1B,IAAA,eAAM,EAAC,EAAE,CAAC;GACE,cAAc,CAqD1B"}
1
+ {"version":3,"file":"devtools.module.js","sourceRoot":"","sources":["../devtools.module.ts"],"names":[],"mappings":";;;;;;;;;;AAAA,2CAAuE;AACvE,uCAA+C;AAC/C,yDAAqD;AACrD,iEAA6D;AAC7D,uDAAmD;AACnD,+DAA2D;AAE3D,6CAMsB;AACtB,6DAG8B;AAE9B,2DAAsF;AAA7E,8HAAA,wBAAwB,OAAA;AAAE,0HAAA,oBAAoB,OAAA;AAgBvD,MAAM,kBAAkB,GAA8B;IACpD,6BAAgB;IAChB,iCAAoB;IACpB,8BAAiB;IACjB,2BAAc;IACd,yBAAY;CACb,CAAC;AAEF,SAAS,qBAAqB,CAAC,UAAkB;IAC/C,OAAO;QACL;YACE,OAAO,EAAE,kCAAe;YACxB,UAAU,EAAE,GAAG,EAAE,CAAC,IAAI,kCAAe,CAAC,UAAU,CAAC;SAClD;QACD,6BAAgB;QAChB,iCAAoB;QACpB,8BAAiB;QACjB,2BAAc;QACd,yBAAY;KACb,CAAC;AACJ,CAAC;AAGM,IAAM,cAAc,sBAApB,MAAM,cAAc;IACzB,MAAM,CAAC,OAAO,CAAC,UAAiC,EAAE;QAChD,MAAM,EACJ,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,YAAY,EAC/C,UAAU,GAAG,EAAE,EACf,UAAU,GAAG,kBAAkB,EAC/B,aAAa,GAAG,IAAI,EACpB,QAAQ,EACR,KAAK,GACN,GAAG,OAAO,CAAC;QAEZ,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO;gBACL,MAAM,EAAE,gBAAc;gBACtB,SAAS,EAAE;oBACT;wBACE,OAAO,EAAE,kCAAe;wBACxB,QAAQ,EAAE,IAAI;qBACf;iBACF;gBACD,OAAO,EAAE,EAAE;aACZ,CAAC;QACJ,CAAC;QAED,MAAM,aAAa,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,kBAAkB,EAAE,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;QAE3E,MAAM,iBAAiB,GAAa;YAClC,OAAO,EAAE,6CAAwB;YACjC,UAAU,EAAE,CAAC,GAAG,SAA8B,EAAE,EAAE,CAAC,SAAS;YAC5D,MAAM,EAAE,aAAa;SACtB,CAAC;QAEF,MAAM,cAAc,GAA2B;YAC7C,QAAQ,EAAE,QAAQ,IAAI,aAAa;YACnC,KAAK,EAAE,KAAK,IAAI,MAAM;SACvB,CAAC;QACF,MAAM,cAAc,GAAa;YAC/B,OAAO,EAAE,yCAAoB;YAC7B,QAAQ,EAAE,cAAc;SACzB,CAAC;QAEF,MAAM,eAAe,GAAG,qBAAqB,CAAC,UAAU,CAAC,CAAC;QAE1D,MAAM,SAAS,GAAe;YAC5B,GAAG,eAAe;YAClB,iBAAiB;YACjB,cAAc;YACd;gBACE,OAAO,EAAE,sBAAe;gBACxB,QAAQ,EAAE,0CAAmB;aAC9B;SACF,CAAC;QAEF,IAAI,aAAa,EAAE,CAAC;YAClB,SAAS,CAAC,IAAI,CAAC;gBACb,OAAO,EAAE,sBAAe;gBACxB,QAAQ,EAAE,gCAAc;aACzB,CAAC,CAAC;QACL,CAAC;QAED,OAAO;YACL,MAAM,EAAE,gBAAc;YACtB,WAAW,EAAE,CAAC,wCAAkB,CAAC;YACjC,SAAS;YACT,OAAO,EAAE,CAAC,kCAAe,EAAE,6CAAwB,EAAE,yCAAoB,EAAE,GAAG,eAAe,CAAC;SAC/F,CAAC;IACJ,CAAC;CACF,CAAA;AAnEY,wCAAc;yBAAd,cAAc;IAD1B,IAAA,eAAM,EAAC,EAAE,CAAC;GACE,cAAc,CAmE1B"}
@@ -8,9 +8,6 @@ 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
- };
14
11
  Object.defineProperty(exports, "__esModule", { value: true });
15
12
  exports.DevtoolsService = void 0;
16
13
  const common_1 = require("@nestjs/common");
@@ -80,7 +77,6 @@ let DevtoolsService = class DevtoolsService {
80
77
  exports.DevtoolsService = DevtoolsService;
81
78
  exports.DevtoolsService = DevtoolsService = __decorate([
82
79
  (0, common_1.Injectable)(),
83
- __param(0, (0, common_1.Optional)()),
84
80
  __metadata("design:paramtypes", [Object])
85
81
  ], DevtoolsService);
86
82
  //# sourceMappingURL=devtools.service.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"devtools.service.js","sourceRoot":"","sources":["../devtools.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,2CAAsD;AAI/C,IAAM,eAAe,GAArB,MAAM,eAAe;IAI1B,YAAwB,aAAa,EAAE;QAHtB,YAAO,GAAuB,EAAE,CAAC;QAO1C,mBAAc,GAA4B,IAAI,CAAC;QAHrD,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;IAC/B,CAAC;IAID,iBAAiB;QACf,OAAO,IAAI,CAAC,cAAc,CAAC;IAC7B,CAAC;IAED,iBAAiB,CAAC,IAAsB;QACtC,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;IAC7B,CAAC;IAED,QAAQ,CAAC,GAAW,EAAE,QAAgB;QACpC,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACxB,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC,CAAC;QACtD,CAAC;IACH,CAAC;IAED,MAAM,CAAC,OAAe,EAAE,KAAa;QACnC,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACxB,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,IAAI,EAAE,EAAE,CAAC,CAAC;QAC3E,CAAC;IACH,CAAC;IAED,cAAc;QACZ,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACxB,IAAI,CAAC,cAAc,CAAC,SAAS,EAAE,CAAC;QAClC,CAAC;IACH,CAAC;IAED,eAAe;QACb,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACxB,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE,CAAC;QACpC,CAAC;IACH,CAAC;IAED,YAAY,CAAC,SAA6C;QACxD,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACxB,IAAI,CAAC,cAAc,CAAC,SAAS,GAAG,SAAS,CAAC;QAC5C,CAAC;IACH,CAAC;IAED,aAAa;QACX,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACxB,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;YAC1C,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;gBAC1C,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;YACrB,CAAC;YACD,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;QAC7B,CAAC;IACH,CAAC;IAED,cAAc;QACZ,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;IACjC,CAAC;IAED,UAAU;QACR,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IAED,iBAAiB;QACf,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAC9B,EAAE,EAAE,CAAC,CAAC,EAAE;YACR,MAAM,EAAE,CAAC,CAAC,MAAM;YAChB,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,UAAU,EAAE,CAAC,CAAC,UAAU;YACxB,QAAQ,EAAE,CAAC,CAAC,QAAQ;YACpB,SAAS,EAAE,CAAC,CAAC,SAAS;SACvB,CAAC,CAAC,CAAC;IACN,CAAC;CACF,CAAA;AA5EY,0CAAe;0BAAf,eAAe;IAD3B,IAAA,mBAAU,GAAE;IAKE,WAAA,IAAA,iBAAQ,GAAE,CAAA;;GAJZ,eAAe,CA4E3B"}
1
+ {"version":3,"file":"devtools.service.js","sourceRoot":"","sources":["../devtools.service.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,2CAA4C;AAIrC,IAAM,eAAe,GAArB,MAAM,eAAe;IAI1B,YAAY,UAAU,GAAG,EAAE;QAHV,YAAO,GAAuB,EAAE,CAAC;QAO1C,mBAAc,GAA4B,IAAI,CAAC;QAHrD,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;IAC/B,CAAC;IAID,iBAAiB;QACf,OAAO,IAAI,CAAC,cAAc,CAAC;IAC7B,CAAC;IAED,iBAAiB,CAAC,IAAsB;QACtC,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;IAC7B,CAAC;IAED,QAAQ,CAAC,GAAW,EAAE,QAAgB;QACpC,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACxB,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC,CAAC;QACtD,CAAC;IACH,CAAC;IAED,MAAM,CAAC,OAAe,EAAE,KAAa;QACnC,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACxB,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,IAAI,EAAE,EAAE,CAAC,CAAC;QAC3E,CAAC;IACH,CAAC;IAED,cAAc;QACZ,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACxB,IAAI,CAAC,cAAc,CAAC,SAAS,EAAE,CAAC;QAClC,CAAC;IACH,CAAC;IAED,eAAe;QACb,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACxB,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE,CAAC;QACpC,CAAC;IACH,CAAC;IAED,YAAY,CAAC,SAA6C;QACxD,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACxB,IAAI,CAAC,cAAc,CAAC,SAAS,GAAG,SAAS,CAAC;QAC5C,CAAC;IACH,CAAC;IAED,aAAa;QACX,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACxB,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;YAC1C,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;gBAC1C,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;YACrB,CAAC;YACD,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;QAC7B,CAAC;IACH,CAAC;IAED,cAAc;QACZ,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;IACjC,CAAC;IAED,UAAU;QACR,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IAED,iBAAiB;QACf,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAC9B,EAAE,EAAE,CAAC,CAAC,EAAE;YACR,MAAM,EAAE,CAAC,CAAC,MAAM;YAChB,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,UAAU,EAAE,CAAC,CAAC,UAAU;YACxB,QAAQ,EAAE,CAAC,CAAC,QAAQ;YACpB,SAAS,EAAE,CAAC,CAAC,SAAS;SACvB,CAAC,CAAC,CAAC;IACN,CAAC;CACF,CAAA;AA5EY,0CAAe;0BAAf,eAAe;IAD3B,IAAA,mBAAU,GAAE;;GACA,eAAe,CA4E3B"}
@@ -1 +1,4 @@
1
- export declare const PROFILER_PAGE: () => string;
1
+ export interface ProfilerPageConfig {
2
+ theme: 'light' | 'dark';
3
+ }
4
+ export declare const PROFILER_PAGE: (config?: Partial<ProfilerPageConfig>) => string;
@@ -1,7 +1,20 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.PROFILER_PAGE = void 0;
4
- const PROFILER_PAGE = () => `<!DOCTYPE html>
4
+ const PROFILER_PAGE = (config) => {
5
+ const { theme = 'dark' } = config ?? {};
6
+ const dark = theme === 'dark';
7
+ const bg = dark ? '#111827' : '#f8fafc';
8
+ const fg = dark ? '#f3f4f6' : '#1f2937';
9
+ const cardBg = dark ? '#1f2937' : '#ffffff';
10
+ const borderClr = dark ? '#374151' : '#e5e7eb';
11
+ const headerBg = dark ? '#1f2937' : '#ffffff';
12
+ const dimText = dark ? '#9ca3af' : '#6b7280';
13
+ const dimmerText = dark ? '#6b7280' : '#9ca3af';
14
+ const accentText = dark ? '#60a5fa' : '#2563eb';
15
+ const navBg = dark ? '#1f2937' : '#f1f5f9';
16
+ const navFg = dark ? '#d1d5db' : '#475569';
17
+ return `<!DOCTYPE html>
5
18
  <html lang="en">
6
19
  <head>
7
20
  <meta charset="UTF-8">
@@ -10,38 +23,38 @@ const PROFILER_PAGE = () => `<!DOCTYPE html>
10
23
  <style>
11
24
  *, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
12
25
  body {
13
- font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
14
- background: #111827; color: #f3f4f6; font-size: 13px; line-height: 1.5;
26
+ font-family: -apple-system, BlinkMacSystemFont, Roboto, sans-serif;
27
+ background: ${bg}; color: ${fg}; font-size: 13px; line-height: 1.5;
15
28
  min-height: 100vh;
16
29
  }
17
30
  .header {
18
- background: #1f2937; border-bottom: 2px solid #3b82f6;
31
+ background: ${headerBg}; border-bottom: 2px solid #3b82f6;
19
32
  padding: 16px 24px; display: flex; align-items: center; gap: 12px;
20
33
  }
21
- .header h1 { font-size: 18px; font-weight: 700; color: #60a5fa; }
22
- .header span { color: #9ca3af; font-size: 13px; }
34
+ .header h1 { font-size: 18px; font-weight: 700; color: ${accentText}; }
35
+ .header span { color: ${dimText}; font-size: 13px; }
23
36
  .container { max-width: 1200px; margin: 0 auto; padding: 24px; }
24
37
  .grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(280px, 1fr)); gap: 16px; margin-bottom: 24px; }
25
38
  .card {
26
- background: #1f2937; border-radius: 8px; border: 1px solid #374151;
39
+ background: ${cardBg}; border-radius: 8px; border: 1px solid ${borderClr};
27
40
  overflow: hidden; cursor: pointer; transition: border-color .15s;
28
41
  }
29
42
  .card:hover { border-color: #3b82f6; }
30
43
  .card-header {
31
44
  padding: 12px 16px; display: flex; align-items: center; gap: 10px;
32
- border-bottom: 1px solid #374151;
45
+ border-bottom: 1px solid ${borderClr};
33
46
  }
34
47
  .card-header .icon { font-size: 18px; }
35
48
  .card-header .label { font-weight: 600; font-size: 13px; }
36
- .card-header .summary { color: #9ca3af; font-size: 11px; margin-left: auto; }
49
+ .card-header .summary { color: ${dimText}; font-size: 11px; margin-left: auto; }
37
50
  .card-body { padding: 0; max-height: 0; overflow: hidden; transition: max-height .2s, padding .2s; }
38
51
  .card-body.open { max-height: 2000px; padding: 12px 16px; overflow-y: auto; }
39
52
  .card-body table { width: 100%; border-collapse: collapse; font-size: 12px; }
40
53
  .card-body td, .card-body th {
41
- padding: 6px 8px; border-bottom: 1px solid #1f2937; text-align: left;
54
+ padding: 6px 8px; border-bottom: 1px solid ${borderClr}; text-align: left;
42
55
  vertical-align: top; word-break: break-word;
43
56
  }
44
- .card-body th { color: #9ca3af; font-weight: 600; width: 120px; }
57
+ .card-body th { color: ${dimText}; font-weight: 600; width: 120px; }
45
58
  .badge {
46
59
  display: inline-block; padding: 2px 8px; border-radius: 4px;
47
60
  font-size: 11px; font-weight: 600;
@@ -51,22 +64,22 @@ const PROFILER_PAGE = () => `<!DOCTYPE html>
51
64
  .badge-put { background: #713f12; color: #fcd34d; }
52
65
  .badge-delete { background: #7f1d1d; color: #fca5a5; }
53
66
  .badge-patch { background: #581c87; color: #d8b4fe; }
54
- .empty { padding: 24px; text-align: center; color: #6b7280; }
67
+ .empty { padding: 24px; text-align: center; color: ${dimmerText}; }
55
68
  .mono { font-family: 'SF Mono', 'Fira Code', 'Cascadia Code', monospace; font-size: 11px; }
56
69
  .history-table { width: 100%; border-collapse: collapse; margin-top: 16px; }
57
- .history-table th { padding: 8px 12px; text-align: left; color: #9ca3af; font-weight: 600; border-bottom: 2px solid #374151; }
58
- .history-table td { padding: 8px 12px; border-bottom: 1px solid #1f2937; }
59
- .history-table tr:hover td { background: #1f2937; }
70
+ .history-table th { padding: 8px 12px; text-align: left; color: ${dimText}; font-weight: 600; border-bottom: 2px solid ${borderClr}; }
71
+ .history-table td { padding: 8px 12px; border-bottom: 1px solid ${borderClr}; }
72
+ .history-table tr:hover td { background: ${cardBg}; }
60
73
  .error-text { color: #ef4444; }
61
74
  .warn-text { color: #f59e0b; }
62
75
  .ok-text { color: #10b981; }
63
76
  .nav { display: flex; gap: 8px; margin-bottom: 24px; }
64
77
  .nav button {
65
- padding: 8px 16px; border-radius: 6px; border: 1px solid #374151;
66
- background: #1f2937; color: #d1d5db; cursor: pointer; font-size: 13px;
78
+ padding: 8px 16px; border-radius: 6px; border: 1px solid ${borderClr};
79
+ background: ${navBg}; color: ${navFg}; cursor: pointer; font-size: 13px;
67
80
  }
68
- .nav button.active { border-color: #3b82f6; color: #60a5fa; background: #1e3a5f; }
69
- .nav button:hover { background: #374151; }
81
+ .nav button.active { border-color: #3b82f6; color: ${accentText}; background: ${dark ? '#1e3a5f' : '#dbeafe'}; }
82
+ .nav button:hover { background: ${dark ? '#374151' : '#e2e8f0'}; }
70
83
  .section { display: none; }
71
84
  .section.active { display: block; }
72
85
  .qlabel { display: inline-block; padding: 1px 6px; border-radius: 3px; font-size: 10px; font-weight: 700; margin-right: 4px; }
@@ -222,5 +235,6 @@ const PROFILER_PAGE = () => `<!DOCTYPE html>
222
235
  </script>
223
236
  </body>
224
237
  </html>`;
238
+ };
225
239
  exports.PROFILER_PAGE = PROFILER_PAGE;
226
240
  //# sourceMappingURL=profiler.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"profiler.js","sourceRoot":"","sources":["../../toolbar/profiler.ts"],"names":[],"mappings":";;;AAAO,MAAM,aAAa,GAAG,GAAG,EAAE,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QA4N3B,CAAC;AA5NI,QAAA,aAAa,iBA4NjB"}
1
+ {"version":3,"file":"profiler.js","sourceRoot":"","sources":["../../toolbar/profiler.ts"],"names":[],"mappings":";;;AAIO,MAAM,aAAa,GAAG,CAAC,MAAoC,EAAE,EAAE;IACpE,MAAM,EAAE,KAAK,GAAG,MAAM,EAAE,GAAG,MAAM,IAAI,EAAE,CAAC;IACxC,MAAM,IAAI,GAAG,KAAK,KAAK,MAAM,CAAC;IAC9B,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;IACxC,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;IACxC,MAAM,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;IAC5C,MAAM,SAAS,GAAG,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;IAC/C,MAAM,QAAQ,GAAG,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;IAC9C,MAAM,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;IAC7C,MAAM,UAAU,GAAG,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;IAChD,MAAM,UAAU,GAAG,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;IAChD,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;IAC3C,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;IAE3C,OAAO;;;;;;;;;;kBAUS,EAAE,YAAY,EAAE;;;;kBAIhB,QAAQ;;;2DAGiC,UAAU;0BAC3C,OAAO;;;;kBAIf,MAAM,2CAA2C,SAAS;;;;;;+BAM7C,SAAS;;;;mCAIL,OAAO;;;;;iDAKO,SAAS;;;2BAG/B,OAAO;;;;;;;;;;uDAUqB,UAAU;;;oEAGG,OAAO,gDAAgD,SAAS;oEAChE,SAAS;6CAChC,MAAM;;;;;;+DAMY,SAAS;kBACtD,KAAK,YAAY,KAAK;;uDAEe,UAAU,iBAAiB,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS;oCAC1E,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QA2JxD,CAAC;AACT,CAAC,CAAC;AA3OW,QAAA,aAAa,iBA2OxB"}
@@ -1 +1,5 @@
1
- export declare const TOOLBAR_TEMPLATE: () => string;
1
+ export interface ToolbarTemplateConfig {
2
+ position: 'bottom-left' | 'bottom-right' | 'top-left' | 'top-right';
3
+ theme: 'light' | 'dark';
4
+ }
5
+ export declare const TOOLBAR_TEMPLATE: (config?: Partial<ToolbarTemplateConfig>) => string;
@@ -1,15 +1,38 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.TOOLBAR_TEMPLATE = void 0;
4
- const TOOLBAR_TEMPLATE = () => {
4
+ const TOOLBAR_TEMPLATE = (config) => {
5
+ const { position = 'bottom-left', theme = 'dark' } = config ?? {};
5
6
  const id = '__nestDevtools';
6
7
  const uid = Math.random().toString(36).slice(2, 8);
8
+ const isTop = position.startsWith('top');
9
+ const isRight = position.endsWith('right');
10
+ const outerPos = isTop ? 'top:0' : 'bottom:0';
11
+ const outerSide = isRight ? 'right:0' : 'left:0';
12
+ const outerBorder = isTop ? 'border-bottom:2px solid #3b82f6' : 'border-top:2px solid #3b82f6';
13
+ const outerShadow = isTop
14
+ ? 'box-shadow:0 4px 12px rgba(0,0,0,0.35)'
15
+ : 'box-shadow:0 -4px 12px rgba(0,0,0,0.35)';
16
+ const dark = theme === 'dark';
17
+ const bg = dark ? '#1f2937' : '#ffffff';
18
+ const fg = dark ? '#f3f4f6' : '#1f2937';
19
+ const panelBg = dark ? '#111827' : '#f3f4f6';
20
+ const borderClr = dark ? '#374151' : '#e5e7eb';
21
+ const btnFg = dark ? '#d1d5db' : '#374151';
22
+ const btnBg = dark ? '#374151' : '#e5e7eb';
23
+ const btnHover = dark ? '#4b5563' : '#d1d5db';
24
+ const dimText = dark ? '#9ca3af' : '#6b7280';
25
+ const dimmerText = dark ? '#6b7280' : '#9ca3af';
26
+ const accentText = dark ? '#60a5fa' : '#2563eb';
27
+ const warnClr = '#f59e0b';
28
+ const errClr = '#ef4444';
29
+ const sqlTimeClr = dark ? '#fbbf24' : '#b45309';
7
30
  return `<script id="${id}">
8
31
  (function(){
9
32
  var D=document, B=D.body, C='__nestDt'+'${uid}';
10
33
  var p = window.location.pathname.replace(\/[^\/]*$/,'') + '/__devtools';
11
34
  var c=D.createElement('div'); c.id=C;
12
- c.innerHTML='<div style="position:fixed;bottom:0;left:0;z-index:99999;font-family:system-ui,BlinkMacSystemFont,sans-serif;font-size:12px;background:#1f2937;color:#f3f4f6;border-top:2px solid #3b82f6;width:100%;box-shadow:0 -4px 12px rgba(0,0,0,0.35)"><div style="display:flex;align-items:center;height:34px;padding:0 8px;gap:4px;overflow-x:auto;white-space:nowrap;scrollbar-width:none"><span style="font-weight:800;font-size:13px;color:#60a5fa;padding:0 10px 0 4px;letter-spacing:-0.5px">NDev</span><div id="'+C+'-bar"></div><a href="'+p+'" target="_blank" style="color:#6b7280;text-decoration:none;padding:4px 8px;font-size:11px;margin-left:auto" title="Open profiler">&#x25A3;</a><span id="'+C+'-toggle" style="color:#6b7280;cursor:pointer;padding:4px 8px;font-size:14px">&#x2039;</span></div><div id="'+C+'-panel" style="display:none;border-top:1px solid #374151;background:#111827;font-size:12px;line-height:1.5"></div></div>';
35
+ c.innerHTML='<div style="position:fixed;${outerPos};${outerSide};z-index:99999;font-family:system-ui,BlinkMacSystemFont,sans-serif;font-size:12px;background:${bg};color:${fg};${outerBorder};width:100%;${outerShadow}"><div style="display:flex;align-items:center;height:34px;padding:0 8px;gap:4px;overflow-x:auto;white-space:nowrap;scrollbar-width:none"><span style="font-weight:800;font-size:13px;color:${accentText};padding:0 10px 0 4px;letter-spacing:-0.5px">NDev</span><div id="'+C+'-bar"></div><a href="'+p+'" target="_blank" style="color:${dimmerText};text-decoration:none;padding:4px 8px;font-size:11px;margin-left:auto" title="Open profiler">&#x25A3;</a><span id="'+C+'-toggle" style="color:${dimmerText};cursor:pointer;padding:4px 8px;font-size:14px">&#x2039;</span></div><div id="'+C+'-panel" style="display:none;border-top:1px solid ${borderClr};background:${panelBg};font-size:12px;line-height:1.5"></div></div>';
13
36
  B.appendChild(c);
14
37
 
15
38
  var lastActive=null;
@@ -20,39 +43,39 @@ const TOOLBAR_TEMPLATE = () => {
20
43
  var h='<div style="padding:12px 16px;max-height:360px;overflow-y:auto">';
21
44
  h+='<div style="display:flex;align-items:center;margin-bottom:10px;gap:8px">';
22
45
  h+='<span style="font-weight:700;font-size:13px">'+detail.label+'</span>';
23
- h+='<span style="color:#9ca3af;font-size:11px">'+detail.summary+'</span>';
24
- h+='<span style="margin-left:auto;cursor:pointer;color:#6b7280;font-size:16px" onclick="document.getElementById('+C+'-panel).style.display=\\'none\\';lastActive=null">\u00d7</span>';
46
+ h+='<span style="color:${dimText};font-size:11px">'+detail.summary+'</span>';
47
+ h+='<span style="margin-left:auto;cursor:pointer;color:${dimmerText};font-size:16px" onclick="document.getElementById('+C+'-panel).style.display=\\'none\\';lastActive=null">\u00d7</span>';
25
48
  h+='</div>';
26
49
  h+='<table style="width:100%;border-collapse:collapse">';
27
50
  for (var k in detail.details) {
28
51
  var v=detail.details[k];
29
52
  if (k==='queries' && Array.isArray(v)) {
30
53
  for (var i=0;i<v.length;i++) {
31
- h+='<tr><td style="padding:4px 8px;color:#9ca3af;border-bottom:1px solid #1f2937;vertical-align:top;width:80px">#'+(i+1)+'</td><td style="padding:4px 8px;border-bottom:1px solid #1f2937;font-family:monospace;font-size:11px;word-break:break-all">'+escapeHtml(v[i].sql||'')+'</td><td style="padding:4px 8px;border-bottom:1px solid #1f2937;text-align:right;color:#fbbf24">'+escapeHtml(v[i].duration||'')+'</td></tr>';
54
+ h+='<tr><td style="padding:4px 8px;color:${dimText};border-bottom:1px solid ${borderClr};vertical-align:top;width:80px">#'+(i+1)+'</td><td style="padding:4px 8px;border-bottom:1px solid ${borderClr};font-family:monospace;font-size:11px;word-break:break-all">'+escapeHtml(v[i].sql||'')+'</td><td style="padding:4px 8px;border-bottom:1px solid ${borderClr};text-align:right;color:${sqlTimeClr}">'+escapeHtml(v[i].duration||'')+'</td></tr>';
32
55
  }
33
56
  continue;
34
57
  }
35
58
  if (k==='entries' && Array.isArray(v)) {
36
59
  for (var i=0;i<v.length;i++) {
37
60
  var e=v[i];
38
- var lc=e.level==='error'?'#ef4444':e.level==='warn'?'#f59e0b':'#9ca3af';
39
- h+='<tr><td style="padding:3px 8px;color:'+lc+';border-bottom:1px solid #1f2937;width:60px;text-transform:uppercase;font-weight:600;font-size:10px">'+escapeHtml(e.level||'')+'</td><td style="padding:3px 8px;border-bottom:1px solid #1f2937;word-break:break-all">'+escapeHtml(e.message||'')+'</td></tr>';
61
+ var lc=e.level==='error'?'${errClr}':e.level==='warn'?'${warnClr}':'${dimText}';
62
+ h+='<tr><td style="padding:3px 8px;color:'+lc+';border-bottom:1px solid ${borderClr};width:60px;text-transform:uppercase;font-weight:600;font-size:10px">'+escapeHtml(e.level||'')+'</td><td style="padding:3px 8px;border-bottom:1px solid ${borderClr};word-break:break-all">'+escapeHtml(e.message||'')+'</td></tr>';
40
63
  }
41
64
  continue;
42
65
  }
43
66
  if (k==='grouped' && Array.isArray(v)) {
44
67
  for (var i=0;i<v.length;i++) {
45
68
  var g=v[i];
46
- h+='<tr><td colspan="3" style="padding:6px 8px;color:#60a5fa;font-weight:600;border-bottom:1px solid #1f2937">'+escapeHtml(g.method||'')+' ('+(g.count||0)+')</td></tr>';
69
+ h+='<tr><td colspan="3" style="padding:6px 8px;color:${accentText};font-weight:600;border-bottom:1px solid ${borderClr}">'+escapeHtml(g.method||'')+' ('+(g.count||0)+')</td></tr>';
47
70
  if (g.routes) {
48
71
  for (var j=0;j<g.routes.length;j++) {
49
- h+='<tr><td style="padding:2px 8px 2px 24px;border-bottom:1px solid #1f2937;font-family:monospace;font-size:11px" colspan="3">'+escapeHtml(g.routes[j].path||'')+' <span style="color:#6b7280">('+escapeHtml(g.routes[j].controller||'')+')</span></td></tr>';
72
+ h+='<tr><td style="padding:2px 8px 2px 24px;border-bottom:1px solid ${borderClr};font-family:monospace;font-size:11px" colspan="3">'+escapeHtml(g.routes[j].path||'')+' <span style="color:${dimmerText}">('+escapeHtml(g.routes[j].controller||'')+')</span></td></tr>';
50
73
  }
51
74
  }
52
75
  }
53
76
  continue;
54
77
  }
55
- h+='<tr><td style="padding:4px 8px;color:#9ca3af;border-bottom:1px solid #1f2937;width:120px;vertical-align:top">'+escapeHtml(k)+'</td><td style="padding:4px 8px;border-bottom:1px solid #1f2937;word-break:break-all">'+escapeHtml(String(v))+'</td></tr>';
78
+ h+='<tr><td style="padding:4px 8px;color:${dimText};border-bottom:1px solid ${borderClr};width:120px;vertical-align:top">'+escapeHtml(k)+'</td><td style="padding:4px 8px;border-bottom:1px solid ${borderClr};word-break:break-all">'+escapeHtml(String(v))+'</td></tr>';
56
79
  }
57
80
  h+='</table></div>';
58
81
  p.innerHTML=h;
@@ -79,10 +102,10 @@ const TOOLBAR_TEMPLATE = () => {
79
102
  panels.forEach(function(p,i){
80
103
  var ic=icons[p.label.toLowerCase()]||icons['default'];
81
104
  var btn=D.createElement('span');
82
- btn.style.cssText='display:inline-flex;align-items:center;gap:4px;padding:3px 10px;border-radius:4px;cursor:pointer;color:#d1d5db;background:#374151;margin:0 2px;transition:background .15s';
105
+ btn.style.cssText='display:inline-flex;align-items:center;gap:4px;padding:3px 10px;border-radius:4px;cursor:pointer;color:${btnFg};background:${btnBg};margin:0 2px;transition:background .15s';
83
106
  btn.innerHTML=ic+' '+escapeHtml(p.summary);
84
- btn.onmouseenter=function(){this.style.background='#4b5563'};
85
- btn.onmouseleave=function(){this.style.background='#374151'};
107
+ btn.onmouseenter=function(){this.style.background='${btnHover}'};
108
+ btn.onmouseleave=function(){this.style.background='${btnBg}'};
86
109
  btn.onclick=function(n){return function(){
87
110
  var key=Object.keys(d).filter(function(k){return d[k]===d[n]})[0];
88
111
  renderPanel(key,d[key]);
@@ -1 +1 @@
1
- {"version":3,"file":"template.js","sourceRoot":"","sources":["../../toolbar/template.ts"],"names":[],"mappings":";;;AAAO,MAAM,gBAAgB,GAAG,GAAG,EAAE;IACnC,MAAM,EAAE,GAAG,gBAAgB,CAAC;IAC5B,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAEnD,OAAO,eAAe,EAAE;;4CAEkB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;UA0FrC,CAAC;AACX,CAAC,CAAC;AAjGW,QAAA,gBAAgB,oBAiG3B"}
1
+ {"version":3,"file":"template.js","sourceRoot":"","sources":["../../toolbar/template.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "nestjs-devtools",
3
- "version": "1.2.3",
3
+ "version": "1.3.1",
4
4
  "description": "Symfony-style debug toolbar for NestJS applications",
5
5
  "keywords": [
6
6
  "nestjs",