traceperf 0.2.0 → 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.
Files changed (268) hide show
  1. package/README.md +612 -209
  2. package/dist/__tests__/helpers/console.d.ts +9 -0
  3. package/dist/__tests__/helpers/console.js +25 -0
  4. package/dist/__tests__/helpers/console.js.map +1 -0
  5. package/dist/auto.d.ts +30 -0
  6. package/dist/auto.js +91 -0
  7. package/dist/auto.js.map +1 -0
  8. package/dist/browser.d.ts +52 -144
  9. package/dist/browser.js +112 -439
  10. package/dist/browser.js.map +1 -1
  11. package/dist/cli.d.ts +68 -0
  12. package/dist/cli.js +528 -0
  13. package/dist/cli.js.map +1 -0
  14. package/dist/core/allocations.d.ts +38 -0
  15. package/dist/core/allocations.js +85 -0
  16. package/dist/core/allocations.js.map +1 -0
  17. package/dist/core/cpu-profile.d.ts +84 -0
  18. package/dist/core/cpu-profile.js +181 -0
  19. package/dist/core/cpu-profile.js.map +1 -0
  20. package/dist/core/env.d.ts +10 -0
  21. package/dist/core/env.js +40 -0
  22. package/dist/core/env.js.map +1 -0
  23. package/dist/core/event-loop.d.ts +30 -0
  24. package/dist/core/event-loop.js +43 -0
  25. package/dist/core/event-loop.js.map +1 -0
  26. package/dist/core/explain.d.ts +48 -0
  27. package/dist/core/explain.js +236 -0
  28. package/dist/core/explain.js.map +1 -0
  29. package/dist/core/exporters.d.ts +111 -0
  30. package/dist/core/exporters.js +236 -0
  31. package/dist/core/exporters.js.map +1 -0
  32. package/dist/core/index.d.ts +9 -3
  33. package/dist/core/index.js +9 -3
  34. package/dist/core/index.js.map +1 -1
  35. package/dist/core/optimized-performance-monitor.d.ts +180 -26
  36. package/dist/core/optimized-performance-monitor.js +687 -175
  37. package/dist/core/optimized-performance-monitor.js.map +1 -1
  38. package/dist/core/prometheus.d.ts +36 -0
  39. package/dist/core/prometheus.js +93 -0
  40. package/dist/core/prometheus.js.map +1 -0
  41. package/dist/core/records.d.ts +97 -0
  42. package/dist/core/records.js +87 -0
  43. package/dist/core/records.js.map +1 -0
  44. package/dist/core/stats.d.ts +45 -0
  45. package/dist/core/stats.js +136 -0
  46. package/dist/core/stats.js.map +1 -0
  47. package/dist/core/timeline.d.ts +28 -0
  48. package/dist/core/timeline.js +65 -0
  49. package/dist/core/timeline.js.map +1 -0
  50. package/dist/drivers.d.ts +51 -0
  51. package/dist/drivers.js +205 -0
  52. package/dist/drivers.js.map +1 -0
  53. package/dist/esm/auto.d.ts +30 -0
  54. package/dist/esm/auto.js +87 -0
  55. package/dist/esm/auto.js.map +1 -0
  56. package/dist/esm/browser.d.ts +52 -144
  57. package/dist/esm/browser.js +101 -445
  58. package/dist/esm/browser.js.map +1 -1
  59. package/dist/esm/cli.d.ts +68 -0
  60. package/dist/esm/cli.js +520 -0
  61. package/dist/esm/cli.js.map +1 -0
  62. package/dist/esm/core/allocations.d.ts +38 -0
  63. package/dist/esm/core/allocations.js +82 -0
  64. package/dist/esm/core/allocations.js.map +1 -0
  65. package/dist/esm/core/cpu-profile.d.ts +84 -0
  66. package/dist/esm/core/cpu-profile.js +176 -0
  67. package/dist/esm/core/cpu-profile.js.map +1 -0
  68. package/dist/esm/core/env.d.ts +10 -0
  69. package/dist/esm/core/env.js +35 -0
  70. package/dist/esm/core/env.js.map +1 -0
  71. package/dist/esm/core/event-loop.d.ts +30 -0
  72. package/dist/esm/core/event-loop.js +40 -0
  73. package/dist/esm/core/event-loop.js.map +1 -0
  74. package/dist/esm/core/explain.d.ts +48 -0
  75. package/dist/esm/core/explain.js +232 -0
  76. package/dist/esm/core/explain.js.map +1 -0
  77. package/dist/esm/core/exporters.d.ts +111 -0
  78. package/dist/esm/core/exporters.js +229 -0
  79. package/dist/esm/core/exporters.js.map +1 -0
  80. package/dist/esm/core/index.d.ts +10 -4
  81. package/dist/esm/core/index.js +10 -4
  82. package/dist/esm/core/index.js.map +1 -1
  83. package/dist/esm/core/optimized-performance-monitor.d.ts +180 -26
  84. package/dist/esm/core/optimized-performance-monitor.js +685 -173
  85. package/dist/esm/core/optimized-performance-monitor.js.map +1 -1
  86. package/dist/esm/core/prometheus.d.ts +36 -0
  87. package/dist/esm/core/prometheus.js +89 -0
  88. package/dist/esm/core/prometheus.js.map +1 -0
  89. package/dist/esm/core/records.d.ts +97 -0
  90. package/dist/esm/core/records.js +82 -0
  91. package/dist/esm/core/records.js.map +1 -0
  92. package/dist/esm/core/stats.d.ts +45 -0
  93. package/dist/esm/core/stats.js +131 -0
  94. package/dist/esm/core/stats.js.map +1 -0
  95. package/dist/esm/core/timeline.d.ts +28 -0
  96. package/dist/esm/core/timeline.js +62 -0
  97. package/dist/esm/core/timeline.js.map +1 -0
  98. package/dist/esm/drivers.d.ts +51 -0
  99. package/dist/esm/drivers.js +197 -0
  100. package/dist/esm/drivers.js.map +1 -0
  101. package/dist/esm/index.d.ts +13 -5
  102. package/dist/esm/index.js +21 -17
  103. package/dist/esm/index.js.map +1 -1
  104. package/dist/esm/instrument.d.ts +88 -0
  105. package/dist/esm/instrument.js +274 -0
  106. package/dist/esm/instrument.js.map +1 -0
  107. package/dist/esm/integrations.d.ts +70 -0
  108. package/dist/esm/integrations.js +197 -0
  109. package/dist/esm/integrations.js.map +1 -0
  110. package/dist/esm/node-builtins.d.ts +1 -0
  111. package/dist/esm/node-builtins.js +32 -0
  112. package/dist/esm/node-builtins.js.map +1 -0
  113. package/dist/esm/package.json +3 -0
  114. package/dist/esm/register.d.ts +20 -0
  115. package/dist/esm/register.js +98 -0
  116. package/dist/esm/register.js.map +1 -0
  117. package/dist/esm/report-html.d.ts +11 -0
  118. package/dist/esm/report-html.js +106 -0
  119. package/dist/esm/report-html.js.map +1 -0
  120. package/dist/esm/types/index.d.ts +4 -80
  121. package/dist/esm/types/index.js +1 -2
  122. package/dist/esm/types/index.js.map +1 -1
  123. package/dist/esm/types/options.d.ts +72 -0
  124. package/dist/esm/types/options.js +2 -0
  125. package/dist/esm/types/options.js.map +1 -0
  126. package/dist/esm/watch.d.ts +17 -0
  127. package/dist/esm/watch.js +87 -0
  128. package/dist/esm/watch.js.map +1 -0
  129. package/dist/index.d.ts +10 -2
  130. package/dist/index.js +26 -29
  131. package/dist/index.js.map +1 -1
  132. package/dist/instrument.d.ts +88 -0
  133. package/dist/instrument.js +282 -0
  134. package/dist/instrument.js.map +1 -0
  135. package/dist/integrations.d.ts +70 -0
  136. package/dist/integrations.js +205 -0
  137. package/dist/integrations.js.map +1 -0
  138. package/dist/node-builtins.d.ts +1 -0
  139. package/dist/node-builtins.js +67 -0
  140. package/dist/node-builtins.js.map +1 -0
  141. package/dist/register.d.ts +20 -0
  142. package/dist/register.js +103 -0
  143. package/dist/register.js.map +1 -0
  144. package/dist/report-html.d.ts +11 -0
  145. package/dist/report-html.js +109 -0
  146. package/dist/report-html.js.map +1 -0
  147. package/dist/traceperf.browser.js +1910 -0
  148. package/dist/traceperf.browser.min.js +6 -0
  149. package/dist/types/index.d.ts +4 -80
  150. package/dist/types/index.js +1 -2
  151. package/dist/types/index.js.map +1 -1
  152. package/dist/types/options.d.ts +72 -0
  153. package/dist/types/{config.js → options.js} +1 -1
  154. package/dist/types/options.js.map +1 -0
  155. package/dist/watch.d.ts +17 -0
  156. package/dist/watch.js +90 -0
  157. package/dist/watch.js.map +1 -0
  158. package/package.json +99 -19
  159. package/dist/core/config.d.ts +0 -77
  160. package/dist/core/config.js +0 -116
  161. package/dist/core/config.js.map +0 -1
  162. package/dist/core/constants.d.ts +0 -78
  163. package/dist/core/constants.js +0 -109
  164. package/dist/core/constants.js.map +0 -1
  165. package/dist/core/logger.d.ts +0 -97
  166. package/dist/core/logger.js +0 -186
  167. package/dist/core/logger.js.map +0 -1
  168. package/dist/esm/core/config.d.ts +0 -77
  169. package/dist/esm/core/config.js +0 -112
  170. package/dist/esm/core/config.js.map +0 -1
  171. package/dist/esm/core/constants.d.ts +0 -78
  172. package/dist/esm/core/constants.js +0 -106
  173. package/dist/esm/core/constants.js.map +0 -1
  174. package/dist/esm/core/logger.d.ts +0 -97
  175. package/dist/esm/core/logger.js +0 -182
  176. package/dist/esm/core/logger.js.map +0 -1
  177. package/dist/esm/formatters/ascii.d.ts +0 -52
  178. package/dist/esm/formatters/ascii.js +0 -100
  179. package/dist/esm/formatters/ascii.js.map +0 -1
  180. package/dist/esm/formatters/cli.d.ts +0 -50
  181. package/dist/esm/formatters/cli.js +0 -96
  182. package/dist/esm/formatters/cli.js.map +0 -1
  183. package/dist/esm/formatters/index.d.ts +0 -3
  184. package/dist/esm/formatters/index.js +0 -4
  185. package/dist/esm/formatters/index.js.map +0 -1
  186. package/dist/esm/formatters/json.d.ts +0 -45
  187. package/dist/esm/formatters/json.js +0 -85
  188. package/dist/esm/formatters/json.js.map +0 -1
  189. package/dist/esm/trackers/execution.d.ts +0 -101
  190. package/dist/esm/trackers/execution.js +0 -226
  191. package/dist/esm/trackers/execution.js.map +0 -1
  192. package/dist/esm/trackers/index.d.ts +0 -2
  193. package/dist/esm/trackers/index.js +0 -3
  194. package/dist/esm/trackers/index.js.map +0 -1
  195. package/dist/esm/trackers/performance.d.ts +0 -68
  196. package/dist/esm/trackers/performance.js +0 -112
  197. package/dist/esm/trackers/performance.js.map +0 -1
  198. package/dist/esm/types/config.d.ts +0 -142
  199. package/dist/esm/types/config.js +0 -2
  200. package/dist/esm/types/config.js.map +0 -1
  201. package/dist/esm/types/logger.d.ts +0 -147
  202. package/dist/esm/types/logger.js +0 -2
  203. package/dist/esm/types/logger.js.map +0 -1
  204. package/dist/esm/utils/colors.d.ts +0 -87
  205. package/dist/esm/utils/colors.js +0 -146
  206. package/dist/esm/utils/colors.js.map +0 -1
  207. package/dist/esm/utils/index.d.ts +0 -3
  208. package/dist/esm/utils/index.js +0 -4
  209. package/dist/esm/utils/index.js.map +0 -1
  210. package/dist/esm/utils/proxy-tracker.d.ts +0 -68
  211. package/dist/esm/utils/proxy-tracker.js +0 -127
  212. package/dist/esm/utils/proxy-tracker.js.map +0 -1
  213. package/dist/esm/utils/stack.d.ts +0 -63
  214. package/dist/esm/utils/stack.js +0 -110
  215. package/dist/esm/utils/stack.js.map +0 -1
  216. package/dist/esm/utils/string.d.ts +0 -29
  217. package/dist/esm/utils/string.js +0 -45
  218. package/dist/esm/utils/string.js.map +0 -1
  219. package/dist/esm/utils/timing.d.ts +0 -65
  220. package/dist/esm/utils/timing.js +0 -99
  221. package/dist/esm/utils/timing.js.map +0 -1
  222. package/dist/formatters/ascii.d.ts +0 -52
  223. package/dist/formatters/ascii.js +0 -104
  224. package/dist/formatters/ascii.js.map +0 -1
  225. package/dist/formatters/cli.d.ts +0 -50
  226. package/dist/formatters/cli.js +0 -100
  227. package/dist/formatters/cli.js.map +0 -1
  228. package/dist/formatters/index.d.ts +0 -3
  229. package/dist/formatters/index.js +0 -20
  230. package/dist/formatters/index.js.map +0 -1
  231. package/dist/formatters/json.d.ts +0 -45
  232. package/dist/formatters/json.js +0 -89
  233. package/dist/formatters/json.js.map +0 -1
  234. package/dist/trackers/execution.d.ts +0 -101
  235. package/dist/trackers/execution.js +0 -230
  236. package/dist/trackers/execution.js.map +0 -1
  237. package/dist/trackers/index.d.ts +0 -2
  238. package/dist/trackers/index.js +0 -19
  239. package/dist/trackers/index.js.map +0 -1
  240. package/dist/trackers/performance.d.ts +0 -68
  241. package/dist/trackers/performance.js +0 -116
  242. package/dist/trackers/performance.js.map +0 -1
  243. package/dist/types/config.d.ts +0 -142
  244. package/dist/types/config.js.map +0 -1
  245. package/dist/types/logger.d.ts +0 -147
  246. package/dist/types/logger.js +0 -3
  247. package/dist/types/logger.js.map +0 -1
  248. package/dist/types.d.ts +0 -65
  249. package/dist/types.js +0 -6
  250. package/dist/types.js.map +0 -1
  251. package/dist/utils/colors.d.ts +0 -87
  252. package/dist/utils/colors.js +0 -160
  253. package/dist/utils/colors.js.map +0 -1
  254. package/dist/utils/index.d.ts +0 -3
  255. package/dist/utils/index.js +0 -20
  256. package/dist/utils/index.js.map +0 -1
  257. package/dist/utils/proxy-tracker.d.ts +0 -68
  258. package/dist/utils/proxy-tracker.js +0 -131
  259. package/dist/utils/proxy-tracker.js.map +0 -1
  260. package/dist/utils/stack.d.ts +0 -63
  261. package/dist/utils/stack.js +0 -116
  262. package/dist/utils/stack.js.map +0 -1
  263. package/dist/utils/string.d.ts +0 -29
  264. package/dist/utils/string.js +0 -50
  265. package/dist/utils/string.js.map +0 -1
  266. package/dist/utils/timing.d.ts +0 -65
  267. package/dist/utils/timing.js +0 -106
  268. package/dist/utils/timing.js.map +0 -1
@@ -10,11 +10,15 @@
10
10
  * 6. Module registration capability
11
11
  * 7. Enhanced visualization
12
12
  */
13
+ import { ExecutionRecord, TracePerfPlugin } from './records.js';
14
+ import { LabelStats, StatsCollector, StatsOptions } from './stats.js';
15
+ import { TraceRecorder } from './exporters.js';
16
+ import type { ModuleTrackOptions, TrackCallOptions, TrackOptions, TracePerfConfig } from '../types/options.js';
13
17
  export declare const TrackingModes: {
14
- PERFORMANCE: string;
15
- BALANCED: string;
16
- DETAILED: string;
17
- DEBUG: string;
18
+ readonly PERFORMANCE: "performance";
19
+ readonly BALANCED: "balanced";
20
+ readonly DETAILED: "detailed";
21
+ readonly DEBUG: "debug";
18
22
  };
19
23
  /**
20
24
  * Get current memory usage with environment detection
@@ -41,6 +45,13 @@ export interface ExecutionTrackerOptions {
41
45
  showMemoryUsage?: boolean;
42
46
  enableNestedTracking?: boolean;
43
47
  threshold?: number;
48
+ sampleRate?: number;
49
+ enabled?: boolean;
50
+ blockingThreshold?: number;
51
+ stats?: boolean | StatsOptions;
52
+ reporter?: (root: ExecutionRecord) => void;
53
+ plugins?: TracePerfPlugin[];
54
+ asyncLocalStorage?: new () => any;
44
55
  }
45
56
  /**
46
57
  * Interface for timer options
@@ -49,6 +60,11 @@ export interface TimerOptions {
49
60
  trackMemory?: boolean;
50
61
  captureArgs?: boolean;
51
62
  args?: any[];
63
+ /** Per-execution overrides; fall back to the tracker's current settings */
64
+ silent?: boolean;
65
+ trackingMode?: string;
66
+ /** Minimum duration in milliseconds for this execution to be reported */
67
+ threshold?: number;
52
68
  }
53
69
  /**
54
70
  * Interface for execution data
@@ -68,6 +84,29 @@ export interface ExecutionData {
68
84
  memoryDelta?: number;
69
85
  result?: any;
70
86
  error?: Error | null;
87
+ silent?: boolean;
88
+ trackingMode?: string;
89
+ threshold?: number;
90
+ /** Set when the function returned a promise: the end of its synchronous part */
91
+ syncEndTime?: number;
92
+ }
93
+ /**
94
+ * Render one captured argument as a short, safe string.
95
+ * Never throws and never walks large structures in full.
96
+ */
97
+ export declare const formatArg: (arg: unknown) => string;
98
+ /**
99
+ * A manually-ended execution, see `startSpan()` / `monitor.start()`
100
+ */
101
+ export interface Span {
102
+ /** Execution id ('' when the span is not recorded: disabled or sampled out) */
103
+ readonly id: string;
104
+ /** Rename the span before it ends (e.g. once a route is known) */
105
+ setLabel(label: string): void;
106
+ /** Run `fn` as part of this span; tracked calls inside become its children */
107
+ run<R>(fn: () => R): R;
108
+ /** Finish the span; pass the error if the work failed. Calling twice is a no-op. */
109
+ end(error?: unknown): void;
71
110
  }
72
111
  /**
73
112
  * Optimized tracker for individual function executions
@@ -76,17 +115,40 @@ export declare class OptimizedExecutionTracker {
76
115
  private executionTree;
77
116
  private currentExecutionId;
78
117
  private activeExecutions;
118
+ private context;
79
119
  showMemoryUsage: boolean;
80
120
  enableNestedTracking: boolean;
81
121
  silent: boolean;
82
122
  trackingMode: string;
83
123
  defaultThreshold: number;
84
- private _formatters;
124
+ defaultSampleRate: number;
125
+ /** When false, tracked functions just call through (no timing at all) */
126
+ enabled: boolean;
127
+ /** Sync time (ms) from which detailed output flags event-loop blocking; 0 disables */
128
+ blockingThreshold: number;
129
+ /** Replaces console output for reported trees (null = default console tree) */
130
+ reporter: ((root: ExecutionRecord) => void) | null;
131
+ /** Per-label statistics (null when disabled) */
132
+ stats: StatsCollector | null;
133
+ private plugins;
134
+ private wrappers;
135
+ private failedPlugins;
85
136
  /**
86
137
  * Create a new execution tracker
87
138
  * @param options Tracker configuration options
88
139
  */
89
140
  constructor(options?: ExecutionTrackerOptions);
141
+ /**
142
+ * Register a plugin. Returns a function that removes it again.
143
+ */
144
+ use(plugin: TracePerfPlugin): () => void;
145
+ /**
146
+ * Run `run` inside every plugin's wrap() (first registered = outermost).
147
+ * A wrap() that throws before calling run is reported once and skipped.
148
+ */
149
+ private _wrap;
150
+ private _pluginFailed;
151
+ private _callPlugins;
90
152
  /**
91
153
  * Start timing a function execution
92
154
  * @param label Function name or label
@@ -94,7 +156,7 @@ export declare class OptimizedExecutionTracker {
94
156
  * @param options Additional options
95
157
  * @returns Execution ID
96
158
  */
97
- startTimer(label: string, parentExecutionId?: string | null, options?: TimerOptions): string;
159
+ startTimer(label: string, parentExecutionId?: string | null, options?: TimerOptions, args?: ArrayLike<unknown> | undefined): string;
98
160
  /**
99
161
  * End timing a function execution
100
162
  * @param executionId ID of the execution to end
@@ -104,14 +166,25 @@ export declare class OptimizedExecutionTracker {
104
166
  */
105
167
  endTimer(executionId: string, result?: any, error?: Error | null): ExecutionData | null;
106
168
  /**
107
- * Generate a visualization of the execution flow
108
- * @param execution The execution to visualize
109
- * @param depth Current depth in the tree
110
- * @param isLastChild Whether this is the last child
111
- * @param ancestors Array tracking if parents were last children
112
- * @returns Formatted execution flow chart
169
+ * Drop a finished execution and its finished descendants
170
+ */
171
+ private _release;
172
+ /**
173
+ * Mark the end of the synchronous part of an execution that returned a promise
113
174
  */
114
- private _generateExecutionFlowChart;
175
+ markSyncEnd(executionId: string): void;
176
+ /**
177
+ * Convert a finished execution (and its finished children) to a record tree
178
+ */
179
+ private _toRecord;
180
+ /**
181
+ * Print a finished tree (or hand it to the custom reporter)
182
+ */
183
+ private _report;
184
+ /**
185
+ * Run one call of `fn` with tracking (shared by createTrackable and track)
186
+ */
187
+ private _invoke;
115
188
  /**
116
189
  * Create a trackable version of a function
117
190
  * @param fn Function to track
@@ -119,6 +192,12 @@ export declare class OptimizedExecutionTracker {
119
192
  * @returns Tracked version of the function
120
193
  */
121
194
  createTrackable<T extends (...args: any[]) => any>(fn: T, options?: Record<string, any>): (...args: Parameters<T>) => ReturnType<T>;
195
+ /**
196
+ * Start a manually-ended execution (a "span"). Use `run()` to execute code
197
+ * as part of it, so tracked calls inside attach as children, and `end()`
198
+ * when the work is finished.
199
+ */
200
+ startSpan(label: string, options?: Record<string, any>): Span;
122
201
  /**
123
202
  * Track a module's methods
124
203
  * @param module Module to track
@@ -139,16 +218,11 @@ export declare class OptimizedExecutionTracker {
139
218
  reset(): void;
140
219
  }
141
220
  /**
142
- * Interface for performance monitor options
221
+ * @deprecated Use `TracePerfConfig`.
143
222
  */
144
- export interface PerformanceMonitorOptions {
145
- trackingMode?: string;
146
- silent?: boolean;
147
- trackMemory?: boolean;
148
- enableNestedTracking?: boolean;
149
- threshold?: number;
150
- sampleRate?: number;
151
- }
223
+ export type PerformanceMonitorOptions = TracePerfConfig;
224
+ /** Decorator returned by `traced()`: works as a standard or legacy method decorator */
225
+ export type TracedDecorator = (target: any, context?: any, descriptor?: PropertyDescriptor) => any;
152
226
  /**
153
227
  * Main performance monitoring interface
154
228
  */
@@ -166,21 +240,97 @@ export declare class OptimizedPerformanceMonitor {
166
240
  * @param options Tracking options
167
241
  * @returns Result of the tracked function
168
242
  */
169
- track<T>(fn: () => T, options?: Record<string, any>): T;
243
+ track<T>(fn: () => T, options?: TrackCallOptions): T;
170
244
  /**
171
245
  * Create a trackable version of a function
172
246
  * @param fn The function to track
173
247
  * @param options Tracking options
174
248
  * @returns Tracked version of the function
175
249
  */
176
- createTrackable<T extends (...args: any[]) => any>(fn: T, options?: Record<string, any>): (...args: Parameters<T>) => ReturnType<T>;
250
+ createTrackable<T extends (...args: any[]) => any>(fn: T, options?: TrackOptions): (...args: Parameters<T>) => ReturnType<T>;
177
251
  /**
178
252
  * Register a module for tracking
179
253
  * @param module The module or object containing methods to track
180
254
  * @param options Tracking options
181
255
  * @returns Modified module with tracked methods
182
256
  */
183
- registerModule<T extends Record<string, any>>(module: T, options?: Record<string, any>): T;
257
+ registerModule<T extends Record<string, any>>(module: T, options?: ModuleTrackOptions): T;
258
+ /**
259
+ * Track every method of an object or class instance, including methods
260
+ * inherited from its prototype, without copying it. Returns a proxy:
261
+ * state changes go to the original object, and methods run with the
262
+ * original object as `this` (so private #fields keep working).
263
+ */
264
+ trackObject<T extends object>(target: T, options?: ModuleTrackOptions): T;
265
+ /**
266
+ * Method decorator. Works with TypeScript 5 / TC39 standard decorators and
267
+ * with legacy `experimentalDecorators`. The label defaults to
268
+ * "ClassName.method".
269
+ *
270
+ * class UserService {
271
+ * @tp.traced()
272
+ * async getUser(id: string) { ... }
273
+ * }
274
+ */
275
+ traced(options?: TrackOptions): TracedDecorator;
276
+ /**
277
+ * Start a manually-ended execution (a span), e.g. for a request:
278
+ *
279
+ * const span = tp.start('GET /users');
280
+ * span.run(() => next()); // tracked calls inside become children
281
+ * res.on('finish', () => span.end());
282
+ */
283
+ start(label: string, options?: TrackOptions): Span;
284
+ /**
285
+ * Register a plugin (exporter, custom sink). Returns an unsubscribe function.
286
+ */
287
+ use(plugin: TracePerfPlugin): () => void;
288
+ /**
289
+ * Call `listener` with every finished top-level execution tree (even when
290
+ * silent or below threshold). Returns an unsubscribe function.
291
+ */
292
+ onComplete(listener: (root: ExecutionRecord) => void): () => void;
293
+ /**
294
+ * Call `listener` for every finished call (nested ones included) that
295
+ * took at least `threshold` ms. Pass a number, or per-label thresholds
296
+ * with an optional '*' default:
297
+ *
298
+ * tp.onSlow(200, (call, root) => logger.warn(`${call.label} took ${call.duration}ms in ${root.label}`));
299
+ * tp.onSlow({ 'db.query': 50, 'GET /search': 500, '*': 1000 }, alert);
300
+ *
301
+ * Works in every tracking mode and when silent. Returns an unsubscribe function.
302
+ */
303
+ onSlow(threshold: number | Record<string, number>, listener: (call: ExecutionRecord, root: ExecutionRecord) => void): () => void;
304
+ /**
305
+ * Per-label statistics (ms): count, errors, total, mean, min, max,
306
+ * p50/p95/p99 and mean self time.
307
+ */
308
+ getStats(): Record<string, LabelStats>;
309
+ getStats(label: string): LabelStats | undefined;
310
+ /** Clear collected statistics */
311
+ resetStats(): OptimizedPerformanceMonitor;
312
+ /** Statistics as a text table, slowest total first */
313
+ formatStats(): string;
314
+ /** Print the statistics table to the console */
315
+ printStats(): OptimizedPerformanceMonitor;
316
+ /**
317
+ * Start recording finished calls for a Chrome/Perfetto trace.
318
+ *
319
+ * const recording = tp.startTrace();
320
+ * await work();
321
+ * fs.writeFileSync('trace.json', JSON.stringify(recording.stop()));
322
+ *
323
+ * Open the file in https://ui.perfetto.dev or chrome://tracing.
324
+ */
325
+ startTrace(options?: {
326
+ maxRoots?: number;
327
+ }): TraceRecorder;
328
+ /** Turn tracking on */
329
+ enable(): OptimizedPerformanceMonitor;
330
+ /** Turn tracking off: tracked functions become plain pass-through calls */
331
+ disable(): OptimizedPerformanceMonitor;
332
+ /** Whether tracking is on */
333
+ isEnabled(): boolean;
184
334
  /**
185
335
  * Set configuration options
186
336
  * @param config Configuration to update
@@ -203,6 +353,10 @@ export declare class OptimizedPerformanceMonitor {
203
353
  * @returns This instance for chaining
204
354
  */
205
355
  setTrackingMode(mode: string): OptimizedPerformanceMonitor;
356
+ /**
357
+ * Get the current tracking mode
358
+ */
359
+ getTrackingMode(): string;
206
360
  /**
207
361
  * Enable memory usage tracking
208
362
  * @returns This instance for chaining
@@ -220,7 +374,7 @@ export declare class OptimizedPerformanceMonitor {
220
374
  */
221
375
  setSampleRate(rate: number): OptimizedPerformanceMonitor;
222
376
  /**
223
- * Reset the tracker state
377
+ * Reset the tracker state (in-flight executions and statistics)
224
378
  * @returns This instance for chaining
225
379
  */
226
380
  reset(): OptimizedPerformanceMonitor;