devtools-nestjs
v2.1.15
Published
A development tool for NestJS that gives detailed profiling information about request execution — inspired by Symfony's WebProfilerBundle
Maintainers
Readme
devtools-nestjs
A development tool for NestJS that provides detailed profiling information about request execution — inspired by Symfony's WebProfilerBundle.
Features
- Request profiler — collects method, URL, status code, headers, query params, and body
- Performance timeline — tracks event timing, memory usage, and total duration
- Exception tracking — captures thrown exceptions with full stack traces
- Route info — displays matched route, controller, and parameters
- Log collector — aggregates application logs per request
- Database queries — tracks SQL queries, durations, and slow query detection
- Cache operations — monitors cache hits, misses, and operation timing
- Debug toolbar — Symfony-style toolbar injected into responses with real-time token refresh
- Storage — file-based (CSV index + JSON profiles) or in-memory storage
- TypeORM integration — automatic query logging for TypeORM
Installation
npm install devtools-nestjsQuick Start
import { Module } from '@nestjs/common';
import { ProfilerModule } from 'devtools-nestjs';
@Module({
imports: [
ProfilerModule.forRoot({
toolbar: true,
}),
],
})
export class AppModule {}Visit http://localhost:3000/_profiler to browse collected profiles. The debug toolbar appears automatically at the bottom of HTML responses.
Configuration
| Option | Type | Default | Description |
|---|---|---|---|
| storage | 'file' \| 'memory' | 'file' | Storage backend |
| storageDir | string | './.profiler' | Directory for file storage |
| enabled | boolean | true | Enable/disable profiling |
| toolbar | boolean | true | Show debug toolbar |
| toolbarPath | string | '/_profiler/toolbar' | Toolbar endpoint |
| profilerPath | string | '/_profiler' | Profiler panel endpoint |
| autoCollect | boolean | true | Auto-register profiler interceptor |
| typeorm | boolean | false | Enable TypeORM query logging |
Custom Collectors
import { BaseCollector, CollectData, CollectorRegistration } from 'devtools-nestjs';
export class MyCollector extends BaseCollector {
get name(): string { return 'my-collector'; }
getPriority(): number { return 50; }
collect(data: CollectData): void {
this.data = { /* your data */ };
}
}
// Register in module
ProfilerModule.forRoot({
collectors: [
{ collector: MyCollector, priority: 50 },
] as CollectorRegistration[],
});Collectors
| Collector | Name | Priority | Data Collected |
|---|---|---|---|
| RequestCollector | request | 100 | Method, URL, headers, params, body, IP |
| TimeCollector | time | 90 | Event timeline, duration, memory |
| ExceptionCollector | exception | 80 | Exception message, name, stack trace |
| LogCollector | log | 60 | Log entries by level |
| DatabaseCollector | database | 50 | Query count, duration, slow queries |
| CacheCollector | cache | 40 | Operations, hits, misses, hit rate |
Storage
File storage stores profiles as JSON files organized by token hash and indexes them in a CSV file. Profiles expire after 48 hours.
Memory storage keeps profiles in a Map, suitable for development or low-traffic environments.
License
MIT
