xypriss 1.2.4 → 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.
Files changed (109) hide show
  1. package/README.md +51 -3
  2. package/dist/cjs/mods/security/src/components/cache/index.js +1 -1
  3. package/dist/cjs/shared/logger/Logger.js +2 -0
  4. package/dist/cjs/shared/logger/Logger.js.map +1 -1
  5. package/dist/cjs/src/cluster/bun-cluster-manager.js +1567 -0
  6. package/dist/cjs/src/cluster/bun-cluster-manager.js.map +1 -0
  7. package/dist/cjs/src/cluster/cluster-manager.js +1 -1
  8. package/dist/cjs/src/cluster/cluster-manager.js.map +1 -1
  9. package/dist/cjs/src/cluster/index.js +25 -6
  10. package/dist/cjs/src/cluster/index.js.map +1 -1
  11. package/dist/cjs/src/cluster/memory-manager.js +486 -0
  12. package/dist/cjs/src/cluster/memory-manager.js.map +1 -0
  13. package/dist/cjs/src/cluster/modules/BunIPCManager.js +603 -0
  14. package/dist/cjs/src/cluster/modules/BunIPCManager.js.map +1 -0
  15. package/dist/cjs/src/cluster/modules/ClusterFactory.js +22 -1
  16. package/dist/cjs/src/cluster/modules/ClusterFactory.js.map +1 -1
  17. package/dist/cjs/src/cluster/modules/CpuMonitor.js +658 -0
  18. package/dist/cjs/src/cluster/modules/CpuMonitor.js.map +1 -0
  19. package/dist/cjs/src/cluster/modules/CrossPlatformMemory.js +257 -0
  20. package/dist/cjs/src/cluster/modules/CrossPlatformMemory.js.map +1 -0
  21. package/dist/cjs/src/cluster/modules/ProcessMonitor.js +513 -0
  22. package/dist/cjs/src/cluster/modules/ProcessMonitor.js.map +1 -0
  23. package/dist/cjs/src/plugins/server-maintenance-plugin.js +79 -14
  24. package/dist/cjs/src/plugins/server-maintenance-plugin.js.map +1 -1
  25. package/dist/cjs/src/server/FastServer.js +64 -43
  26. package/dist/cjs/src/server/FastServer.js.map +1 -1
  27. package/dist/cjs/src/server/components/fastapi/ClusterManagerComponent.js +226 -10
  28. package/dist/cjs/src/server/components/fastapi/ClusterManagerComponent.js.map +1 -1
  29. package/dist/cjs/src/server/const/Cluster.config.js +174 -31
  30. package/dist/cjs/src/server/const/Cluster.config.js.map +1 -1
  31. package/dist/cjs/src/server/const/default.js +11 -2
  32. package/dist/cjs/src/server/const/default.js.map +1 -1
  33. package/dist/cjs/src/server/utils/PortManager.js +26 -15
  34. package/dist/cjs/src/server/utils/PortManager.js.map +1 -1
  35. package/dist/esm/mods/security/src/components/cache/index.js +1 -1
  36. package/dist/esm/shared/logger/Logger.js +2 -0
  37. package/dist/esm/shared/logger/Logger.js.map +1 -1
  38. package/dist/esm/src/cluster/bun-cluster-manager.js +1565 -0
  39. package/dist/esm/src/cluster/bun-cluster-manager.js.map +1 -0
  40. package/dist/esm/src/cluster/cluster-manager.js +1 -1
  41. package/dist/esm/src/cluster/cluster-manager.js.map +1 -1
  42. package/dist/esm/src/cluster/index.js +25 -6
  43. package/dist/esm/src/cluster/index.js.map +1 -1
  44. package/dist/esm/src/cluster/memory-manager.js +484 -0
  45. package/dist/esm/src/cluster/memory-manager.js.map +1 -0
  46. package/dist/esm/src/cluster/modules/BunIPCManager.js +601 -0
  47. package/dist/esm/src/cluster/modules/BunIPCManager.js.map +1 -0
  48. package/dist/esm/src/cluster/modules/ClusterFactory.js +22 -1
  49. package/dist/esm/src/cluster/modules/ClusterFactory.js.map +1 -1
  50. package/dist/esm/src/cluster/modules/CpuMonitor.js +656 -0
  51. package/dist/esm/src/cluster/modules/CpuMonitor.js.map +1 -0
  52. package/dist/esm/src/cluster/modules/CrossPlatformMemory.js +255 -0
  53. package/dist/esm/src/cluster/modules/CrossPlatformMemory.js.map +1 -0
  54. package/dist/esm/src/cluster/modules/ProcessMonitor.js +511 -0
  55. package/dist/esm/src/cluster/modules/ProcessMonitor.js.map +1 -0
  56. package/dist/esm/src/plugins/server-maintenance-plugin.js +79 -14
  57. package/dist/esm/src/plugins/server-maintenance-plugin.js.map +1 -1
  58. package/dist/esm/src/server/FastServer.js +64 -43
  59. package/dist/esm/src/server/FastServer.js.map +1 -1
  60. package/dist/esm/src/server/components/fastapi/ClusterManagerComponent.js +226 -10
  61. package/dist/esm/src/server/components/fastapi/ClusterManagerComponent.js.map +1 -1
  62. package/dist/esm/src/server/const/Cluster.config.js +174 -31
  63. package/dist/esm/src/server/const/Cluster.config.js.map +1 -1
  64. package/dist/esm/src/server/const/default.js +11 -2
  65. package/dist/esm/src/server/const/default.js.map +1 -1
  66. package/dist/esm/src/server/utils/PortManager.js +26 -15
  67. package/dist/esm/src/server/utils/PortManager.js.map +1 -1
  68. package/dist/index.d.ts +90 -2
  69. package/package.json +6 -1
  70. package/dist/cjs/src/plugins/modules/network/index.js +0 -120
  71. package/dist/cjs/src/plugins/modules/network/index.js.map +0 -1
  72. package/dist/cjs/src/server/plugins/PluginEngine.js +0 -378
  73. package/dist/cjs/src/server/plugins/PluginEngine.js.map +0 -1
  74. package/dist/cjs/src/server/plugins/PluginRegistry.js +0 -339
  75. package/dist/cjs/src/server/plugins/PluginRegistry.js.map +0 -1
  76. package/dist/cjs/src/server/plugins/builtin/JWTAuthPlugin.js +0 -591
  77. package/dist/cjs/src/server/plugins/builtin/JWTAuthPlugin.js.map +0 -1
  78. package/dist/cjs/src/server/plugins/builtin/ResponseTimePlugin.js +0 -413
  79. package/dist/cjs/src/server/plugins/builtin/ResponseTimePlugin.js.map +0 -1
  80. package/dist/cjs/src/server/plugins/builtin/SmartCachePlugin.js +0 -843
  81. package/dist/cjs/src/server/plugins/builtin/SmartCachePlugin.js.map +0 -1
  82. package/dist/cjs/src/server/plugins/core/CachePlugin.js +0 -1975
  83. package/dist/cjs/src/server/plugins/core/CachePlugin.js.map +0 -1
  84. package/dist/cjs/src/server/plugins/core/PerformancePlugin.js +0 -894
  85. package/dist/cjs/src/server/plugins/core/PerformancePlugin.js.map +0 -1
  86. package/dist/cjs/src/server/plugins/core/SecurityPlugin.js +0 -799
  87. package/dist/cjs/src/server/plugins/core/SecurityPlugin.js.map +0 -1
  88. package/dist/cjs/src/server/plugins/types/PluginTypes.js +0 -47
  89. package/dist/cjs/src/server/plugins/types/PluginTypes.js.map +0 -1
  90. package/dist/esm/src/plugins/modules/network/index.js +0 -109
  91. package/dist/esm/src/plugins/modules/network/index.js.map +0 -1
  92. package/dist/esm/src/server/plugins/PluginEngine.js +0 -376
  93. package/dist/esm/src/server/plugins/PluginEngine.js.map +0 -1
  94. package/dist/esm/src/server/plugins/PluginRegistry.js +0 -337
  95. package/dist/esm/src/server/plugins/PluginRegistry.js.map +0 -1
  96. package/dist/esm/src/server/plugins/builtin/JWTAuthPlugin.js +0 -589
  97. package/dist/esm/src/server/plugins/builtin/JWTAuthPlugin.js.map +0 -1
  98. package/dist/esm/src/server/plugins/builtin/ResponseTimePlugin.js +0 -411
  99. package/dist/esm/src/server/plugins/builtin/ResponseTimePlugin.js.map +0 -1
  100. package/dist/esm/src/server/plugins/builtin/SmartCachePlugin.js +0 -841
  101. package/dist/esm/src/server/plugins/builtin/SmartCachePlugin.js.map +0 -1
  102. package/dist/esm/src/server/plugins/core/CachePlugin.js +0 -1973
  103. package/dist/esm/src/server/plugins/core/CachePlugin.js.map +0 -1
  104. package/dist/esm/src/server/plugins/core/PerformancePlugin.js +0 -872
  105. package/dist/esm/src/server/plugins/core/PerformancePlugin.js.map +0 -1
  106. package/dist/esm/src/server/plugins/core/SecurityPlugin.js +0 -797
  107. package/dist/esm/src/server/plugins/core/SecurityPlugin.js.map +0 -1
  108. package/dist/esm/src/server/plugins/types/PluginTypes.js +0 -47
  109. package/dist/esm/src/server/plugins/types/PluginTypes.js.map +0 -1
@@ -1,411 +0,0 @@
1
- import { EventEmitter } from 'events';
2
- import { PerformancePlugin } from '../core/PerformancePlugin.js';
3
- import { PluginPriority } from '../types/PluginTypes.js';
4
-
5
- /**
6
- * Response Time Monitoring Plugin
7
- *
8
- * Ultra-fast performance monitoring plugin with <0.3ms overhead
9
- * for tracking response times and performance metrics.
10
- */
11
- /**
12
- * Response Time Monitoring Plugin for ultra-fast performance tracking
13
- */
14
- class ResponseTimePlugin extends PerformancePlugin {
15
- constructor() {
16
- super(...arguments);
17
- this.eventEmitter = new EventEmitter();
18
- this.id = "XyPriss.performance.response-time";
19
- this.name = "Response Time Monitoring Plugin";
20
- this.version = "1.0.0";
21
- this.priority = PluginPriority.NORMAL;
22
- // Performance thresholds (can be configured)
23
- this.performanceThresholds = {
24
- responseTime: 100, // 100ms
25
- memoryUsage: 50 * 1024 * 1024, // 50MB
26
- cpuUsage: 80, // 80%
27
- };
28
- // Performance tracking
29
- this.routeMetrics = new Map();
30
- // Alert thresholds
31
- this.alertThresholds = {
32
- slowResponseTime: 1000, // 1 second
33
- verySlowResponseTime: 5000, // 5 seconds
34
- highMemoryUsage: 100 * 1024 * 1024, // 100MB
35
- criticalMemoryUsage: 200 * 1024 * 1024, // 200MB
36
- };
37
- // Performance alerts
38
- this.alertCooldowns = new Map();
39
- this.ALERT_COOLDOWN = 60000; // 1 minute
40
- }
41
- /**
42
- * Initialize performance monitoring plugin
43
- */
44
- async initializePerformanceMonitoring(context) {
45
- // Configure thresholds from settings
46
- if (context.config.customSettings.responseTimeThreshold) {
47
- this.alertThresholds.slowResponseTime =
48
- context.config.customSettings.responseTimeThreshold;
49
- }
50
- if (context.config.customSettings.memoryThreshold) {
51
- this.alertThresholds.highMemoryUsage =
52
- context.config.customSettings.memoryThreshold;
53
- }
54
- // Setup periodic metrics cleanup
55
- this.setupMetricsCleanup();
56
- // Setup performance alerts
57
- this.setupPerformanceAlerts();
58
- context.logger.info("Response Time Monitoring Plugin initialized");
59
- }
60
- /**
61
- * Execute performance monitoring logic
62
- */
63
- executePerformanceLogic(context, metrics) {
64
- const { req, res } = context;
65
- const route = this.normalizeRoute(req.path);
66
- // Start response time tracking
67
- const startTime = performance.now();
68
- // Add response time header
69
- res.setHeader("X-Response-Time-Start", startTime.toString());
70
- // Hook into response finish event to capture total time
71
- const originalEnd = res.end;
72
- res.end = (...args) => {
73
- const endTime = performance.now();
74
- const responseTime = endTime - startTime;
75
- // Record route metrics
76
- this.recordRouteMetrics(route, responseTime);
77
- // Add response time headers
78
- res.setHeader("X-Response-Time", `${responseTime.toFixed(2)}ms`);
79
- res.setHeader("X-Performance-Score", this.calculatePerformanceScore(responseTime, metrics));
80
- // Check for performance alerts
81
- this.checkRoutePerformanceAlerts(route, responseTime, metrics);
82
- // Call original end method with proper arguments
83
- return originalEnd.apply(res, args);
84
- };
85
- return {
86
- route,
87
- startTime,
88
- memoryUsage: metrics.memoryUsage,
89
- cpuUsage: metrics.cpuUsage,
90
- requestSize: metrics.requestSize,
91
- };
92
- }
93
- /**
94
- * Precompile performance monitoring systems
95
- */
96
- async precompilePerformanceMonitoring() {
97
- // Pre-warm performance calculation functions
98
- this.calculatePerformanceScore(100, {
99
- memoryUsage: 10 * 1024 * 1024,
100
- cpuUsage: 50,
101
- });
102
- // Pre-warm route normalization
103
- this.normalizeRoute("/api/test/123");
104
- }
105
- /**
106
- * Collect custom performance metrics
107
- */
108
- collectCustomMetrics(context) {
109
- const { req } = context;
110
- const route = this.normalizeRoute(req.path);
111
- const routeMetrics = this.routeMetrics.get(route);
112
- return {
113
- route,
114
- routeMetrics: routeMetrics
115
- ? {
116
- averageResponseTime: routeMetrics.averageTime,
117
- p95ResponseTime: routeMetrics.p95Time,
118
- p99ResponseTime: routeMetrics.p99Time,
119
- requestCount: routeMetrics.count,
120
- minResponseTime: routeMetrics.minTime,
121
- maxResponseTime: routeMetrics.maxTime,
122
- }
123
- : null,
124
- totalRoutes: this.routeMetrics.size,
125
- alertsActive: this.getActiveAlerts(),
126
- };
127
- }
128
- // ===== ROUTE METRICS METHODS =====
129
- /**
130
- * Record metrics for a specific route
131
- */
132
- recordRouteMetrics(route, responseTime) {
133
- let metrics = this.routeMetrics.get(route);
134
- if (!metrics) {
135
- metrics = {
136
- count: 0,
137
- totalTime: 0,
138
- minTime: Infinity,
139
- maxTime: 0,
140
- averageTime: 0,
141
- p95Time: 0,
142
- p99Time: 0,
143
- recentTimes: [],
144
- };
145
- this.routeMetrics.set(route, metrics);
146
- }
147
- // Update basic metrics
148
- metrics.count++;
149
- metrics.totalTime += responseTime;
150
- metrics.minTime = Math.min(metrics.minTime, responseTime);
151
- metrics.maxTime = Math.max(metrics.maxTime, responseTime);
152
- metrics.averageTime = metrics.totalTime / metrics.count;
153
- // Update recent times for percentile calculation
154
- metrics.recentTimes.push(responseTime);
155
- // Keep only last 100 response times for memory efficiency
156
- if (metrics.recentTimes.length > 100) {
157
- metrics.recentTimes.shift();
158
- }
159
- // Calculate percentiles
160
- this.updatePercentiles(metrics);
161
- }
162
- /**
163
- * Update percentile calculations
164
- */
165
- updatePercentiles(metrics) {
166
- if (metrics.recentTimes.length === 0)
167
- return;
168
- const sortedTimes = [...metrics.recentTimes].sort((a, b) => a - b);
169
- const length = sortedTimes.length;
170
- // Calculate P95 (95th percentile)
171
- const p95Index = Math.ceil(length * 0.95) - 1;
172
- metrics.p95Time = sortedTimes[Math.max(0, p95Index)];
173
- // Calculate P99 (99th percentile)
174
- const p99Index = Math.ceil(length * 0.99) - 1;
175
- metrics.p99Time = sortedTimes[Math.max(0, p99Index)];
176
- }
177
- /**
178
- * Normalize route for consistent metrics tracking
179
- */
180
- normalizeRoute(path) {
181
- // Replace dynamic segments with placeholders
182
- return path
183
- .replace(/\/\d+/g, "/:id") // Replace numeric IDs
184
- .replace(/\/[a-f0-9-]{36}/g, "/:uuid") // Replace UUIDs
185
- .replace(/\/[a-f0-9]{24}/g, "/:objectId") // Replace MongoDB ObjectIds
186
- .replace(/\?.*$/, ""); // Remove query parameters
187
- }
188
- // ===== PERFORMANCE SCORING =====
189
- /**
190
- * Calculate performance score (0-100)
191
- */
192
- calculatePerformanceScore(responseTime, metrics) {
193
- let score = 100;
194
- // Response time scoring (50% weight)
195
- if (responseTime > this.alertThresholds.verySlowResponseTime) {
196
- score -= 50;
197
- }
198
- else if (responseTime > this.alertThresholds.slowResponseTime) {
199
- score -= 25;
200
- }
201
- else if (responseTime > this.performanceThresholds.responseTime) {
202
- score -= 10;
203
- }
204
- // Memory usage scoring (25% weight)
205
- if (metrics.memoryUsage > this.alertThresholds.criticalMemoryUsage) {
206
- score -= 25;
207
- }
208
- else if (metrics.memoryUsage > this.alertThresholds.highMemoryUsage) {
209
- score -= 15;
210
- }
211
- else if (metrics.memoryUsage > this.performanceThresholds.memoryUsage) {
212
- score -= 5;
213
- }
214
- // CPU usage scoring (25% weight)
215
- if (metrics.cpuUsage > 90) {
216
- score -= 25;
217
- }
218
- else if (metrics.cpuUsage > this.performanceThresholds.cpuUsage) {
219
- score -= 10;
220
- }
221
- return Math.max(0, score);
222
- }
223
- // ===== PERFORMANCE ALERTS =====
224
- /**
225
- * Check for performance alerts (override from PerformancePlugin)
226
- */
227
- checkPerformanceAlerts(metrics) {
228
- const alerts = [];
229
- // Check response time alerts
230
- if (metrics.responseTime > this.alertThresholds.verySlowResponseTime) {
231
- alerts.push("CRITICAL: Response time severely degraded");
232
- this.triggerAlert("critical_response_time", {
233
- route: metrics.route,
234
- responseTime: metrics.responseTime,
235
- threshold: this.alertThresholds.verySlowResponseTime,
236
- });
237
- }
238
- else if (metrics.responseTime > this.alertThresholds.slowResponseTime) {
239
- alerts.push("WARNING: Slow response time detected");
240
- this.triggerAlert("slow_response_time", {
241
- route: metrics.route,
242
- responseTime: metrics.responseTime,
243
- threshold: this.alertThresholds.slowResponseTime,
244
- });
245
- }
246
- // Check memory usage alerts
247
- if (metrics.memoryUsage > this.alertThresholds.criticalMemoryUsage) {
248
- alerts.push("CRITICAL: Memory usage critically high");
249
- this.triggerAlert("critical_memory_usage", {
250
- memoryUsage: metrics.memoryUsage,
251
- threshold: this.alertThresholds.criticalMemoryUsage,
252
- });
253
- }
254
- else if (metrics.memoryUsage > this.alertThresholds.highMemoryUsage) {
255
- alerts.push("WARNING: High memory usage detected");
256
- this.triggerAlert("high_memory_usage", {
257
- memoryUsage: metrics.memoryUsage,
258
- threshold: this.alertThresholds.highMemoryUsage,
259
- });
260
- }
261
- // Check CPU usage alerts
262
- if (metrics.cpuUsage > 90) {
263
- alerts.push("CRITICAL: CPU usage critically high");
264
- this.triggerAlert("critical_cpu_usage", {
265
- cpuUsage: metrics.cpuUsage,
266
- threshold: 90,
267
- });
268
- }
269
- return alerts;
270
- }
271
- /**
272
- * Check for performance alerts with route-specific parameters
273
- */
274
- checkRoutePerformanceAlerts(route, responseTime, metrics) {
275
- // Use the base class method with enhanced metrics
276
- const enhancedMetrics = {
277
- ...metrics,
278
- route,
279
- responseTime,
280
- };
281
- this.checkPerformanceAlerts(enhancedMetrics);
282
- }
283
- /**
284
- * Trigger performance alert with cooldown
285
- */
286
- triggerAlert(alertType, data) {
287
- const now = Date.now();
288
- const lastAlert = this.alertCooldowns.get(alertType) || 0;
289
- // Check cooldown
290
- if (now - lastAlert < this.ALERT_COOLDOWN) {
291
- return;
292
- }
293
- // Update cooldown
294
- this.alertCooldowns.set(alertType, now);
295
- // Log alert
296
- console.warn(`[PERFORMANCE ALERT] ${alertType}:`, data);
297
- // Emit alert event (can be listened to by monitoring systems)
298
- this.eventEmitter.emit("performance_alert", {
299
- type: alertType,
300
- data,
301
- timestamp: new Date(),
302
- });
303
- }
304
- /**
305
- * Get active alerts
306
- */
307
- getActiveAlerts() {
308
- const now = Date.now();
309
- const activeAlerts = [];
310
- for (const [alertType, lastTriggered,] of this.alertCooldowns.entries()) {
311
- if (now - lastTriggered < this.ALERT_COOLDOWN) {
312
- activeAlerts.push(alertType);
313
- }
314
- }
315
- return activeAlerts;
316
- }
317
- // ===== CLEANUP AND MAINTENANCE =====
318
- /**
319
- * Setup metrics cleanup
320
- */
321
- setupMetricsCleanup() {
322
- // Clean up old metrics every 10 minutes
323
- setInterval(() => {
324
- this.cleanupOldMetrics();
325
- }, 600000); // 10 minutes
326
- }
327
- /**
328
- * Clean up old metrics to prevent memory leaks
329
- */
330
- cleanupOldMetrics() {
331
- const now = Date.now();
332
- // Remove routes that haven't been accessed in the last hour
333
- for (const [route, metrics] of this.routeMetrics.entries()) {
334
- // If no recent activity, remove the route metrics
335
- if (metrics.recentTimes.length === 0) {
336
- this.routeMetrics.delete(route);
337
- }
338
- }
339
- // Clean up old alert cooldowns
340
- for (const [alertType, lastTriggered,] of this.alertCooldowns.entries()) {
341
- if (now - lastTriggered > this.ALERT_COOLDOWN * 2) {
342
- this.alertCooldowns.delete(alertType);
343
- }
344
- }
345
- }
346
- /**
347
- * Setup performance alerts monitoring
348
- */
349
- setupPerformanceAlerts() {
350
- // Monitor overall system performance every 30 seconds
351
- setInterval(() => {
352
- this.checkSystemPerformance();
353
- }, 30000); // 30 seconds
354
- }
355
- /**
356
- * Check overall system performance
357
- */
358
- checkSystemPerformance() {
359
- const memoryUsage = this.getMemoryUsage();
360
- const cpuUsage = this.getCpuUsage();
361
- // Check system-wide thresholds
362
- if (memoryUsage > this.alertThresholds.criticalMemoryUsage) {
363
- this.triggerAlert("system_critical_memory", { memoryUsage });
364
- }
365
- if (cpuUsage > 95) {
366
- this.triggerAlert("system_critical_cpu", { cpuUsage });
367
- }
368
- }
369
- // ===== PUBLIC API =====
370
- /**
371
- * Get route performance summary
372
- */
373
- getRoutePerformanceSummary() {
374
- const summary = {};
375
- for (const [route, metrics] of this.routeMetrics.entries()) {
376
- summary[route] = {
377
- requestCount: metrics.count,
378
- averageResponseTime: Math.round(metrics.averageTime * 100) / 100,
379
- minResponseTime: Math.round(metrics.minTime * 100) / 100,
380
- maxResponseTime: Math.round(metrics.maxTime * 100) / 100,
381
- p95ResponseTime: Math.round(metrics.p95Time * 100) / 100,
382
- p99ResponseTime: Math.round(metrics.p99Time * 100) / 100,
383
- };
384
- }
385
- return summary;
386
- }
387
- /**
388
- * Get performance alerts summary
389
- */
390
- getPerformanceAlertsSummary() {
391
- return {
392
- activeAlerts: this.getActiveAlerts(),
393
- alertThresholds: this.alertThresholds,
394
- lastAlerts: Object.fromEntries(this.alertCooldowns),
395
- };
396
- }
397
- /**
398
- * Reset route metrics
399
- */
400
- resetRouteMetrics(route) {
401
- if (route) {
402
- this.routeMetrics.delete(route);
403
- }
404
- else {
405
- this.routeMetrics.clear();
406
- }
407
- }
408
- }
409
-
410
- export { ResponseTimePlugin };
411
- //# sourceMappingURL=ResponseTimePlugin.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ResponseTimePlugin.js","sources":["../../../../../../src/server/plugins/builtin/ResponseTimePlugin.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}