nestjs-devtools 1.2.3 → 1.3.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.
@@ -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(): {
@@ -18,9 +18,10 @@ const devtools_service_1 = require("./devtools.service");
18
18
  const devtools_module_1 = require("./devtools.module");
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)
@@ -81,6 +83,7 @@ exports.DevtoolsController = DevtoolsController = __decorate([
81
83
  (0, common_1.Controller)('__devtools'),
82
84
  __param(1, (0, common_1.Optional)()),
83
85
  __param(1, (0, common_1.Inject)(devtools_module_1.DEVOOLS_COLLECTORS_TOKEN)),
84
- __metadata("design:paramtypes", [devtools_service_1.DevtoolsService, Array])
86
+ __param(2, (0, common_1.Inject)(devtools_module_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,uDAAmF;AACnF,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,0CAAwB,CAAC,CAAA;IAEhC,WAAA,IAAA,eAAM,EAAC,sCAAoB,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_module_1 = require("./devtools.module");
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_module_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,uDAAyD;AACzD,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,sCAAoB,CAAC,CAAA;qCADK,kCAAe;GAFxC,cAAc,CAqB1B"}
@@ -1,6 +1,7 @@
1
1
  import { DynamicModule, Type } from '@nestjs/common';
2
2
  import { AbstractCollector } from './collectors/abstract.collector';
3
3
  export declare const DEVOOLS_COLLECTORS_TOKEN = "DEVOOLS_COLLECTORS_TOKEN";
4
+ export declare const DEVOOLS_CONFIG_TOKEN = "DEVOOLS_CONFIG_TOKEN";
4
5
  export interface DevtoolsModuleOptions {
5
6
  enabled?: boolean;
6
7
  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");
@@ -16,6 +16,7 @@ const devtools_filter_1 = require("./devtools.filter");
16
16
  const devtools_controller_1 = require("./devtools.controller");
17
17
  const collectors_1 = require("./collectors");
18
18
  exports.DEVOOLS_COLLECTORS_TOKEN = 'DEVOOLS_COLLECTORS_TOKEN';
19
+ exports.DEVOOLS_CONFIG_TOKEN = 'DEVOOLS_CONFIG_TOKEN';
19
20
  const DEFAULT_COLLECTORS = [
20
21
  collectors_1.RequestCollector,
21
22
  collectors_1.PerformanceCollector,
@@ -23,17 +24,22 @@ const DEFAULT_COLLECTORS = [
23
24
  collectors_1.RouteCollector,
24
25
  collectors_1.LogCollector,
25
26
  ];
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
- ];
27
+ function createSharedProviders(maxHistory) {
28
+ return [
29
+ {
30
+ provide: devtools_service_1.DevtoolsService,
31
+ useFactory: () => new devtools_service_1.DevtoolsService(maxHistory),
32
+ },
33
+ collectors_1.RequestCollector,
34
+ collectors_1.PerformanceCollector,
35
+ collectors_1.DatabaseCollector,
36
+ collectors_1.RouteCollector,
37
+ collectors_1.LogCollector,
38
+ ];
39
+ }
34
40
  let DevtoolsModule = DevtoolsModule_1 = class DevtoolsModule {
35
41
  static forRoot(options = {}) {
36
- const { enabled = process.env.NODE_ENV !== 'production', maxHistory = 50, collectors = DEFAULT_COLLECTORS, injectToolbar = true, } = options;
42
+ const { enabled = process.env.NODE_ENV !== 'production', maxHistory = 50, collectors = DEFAULT_COLLECTORS, injectToolbar = true, position, theme, } = options;
37
43
  if (!enabled) {
38
44
  return {
39
45
  module: DevtoolsModule_1,
@@ -52,9 +58,19 @@ let DevtoolsModule = DevtoolsModule_1 = class DevtoolsModule {
52
58
  useFactory: (...instances) => instances,
53
59
  inject: allCollectors,
54
60
  };
61
+ const resolvedConfig = {
62
+ position: position ?? 'bottom-left',
63
+ theme: theme ?? 'dark',
64
+ };
65
+ const configProvider = {
66
+ provide: exports.DEVOOLS_CONFIG_TOKEN,
67
+ useValue: resolvedConfig,
68
+ };
69
+ const sharedProviders = createSharedProviders(maxHistory);
55
70
  const providers = [
56
- ...SHARED_PROVIDERS,
71
+ ...sharedProviders,
57
72
  collectorProvider,
73
+ configProvider,
58
74
  {
59
75
  provide: core_1.APP_INTERCEPTOR,
60
76
  useClass: devtools_interceptor_1.DevtoolsInterceptor,
@@ -70,7 +86,7 @@ let DevtoolsModule = DevtoolsModule_1 = class DevtoolsModule {
70
86
  module: DevtoolsModule_1,
71
87
  controllers: [devtools_controller_1.DevtoolsController],
72
88
  providers,
73
- exports: [devtools_service_1.DevtoolsService, exports.DEVOOLS_COLLECTORS_TOKEN, ...SHARED_PROVIDERS],
89
+ exports: [devtools_service_1.DevtoolsService, exports.DEVOOLS_COLLECTORS_TOKEN, exports.DEVOOLS_CONFIG_TOKEN, ...sharedProviders],
74
90
  };
75
91
  }
76
92
  };
@@ -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;AAET,QAAA,wBAAwB,GAAG,0BAA0B,CAAC;AACtD,QAAA,oBAAoB,GAAG,sBAAsB,CAAC;AAgB3D,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,gCAAwB;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,4BAAoB;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,gCAAwB,EAAE,4BAAoB,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.0",
4
4
  "description": "Symfony-style debug toolbar for NestJS applications",
5
5
  "keywords": [
6
6
  "nestjs",