traceperf 0.1.0 → 0.1.2
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.
- package/README.md +110 -1
- package/dist/browser.d.ts +67 -5
- package/dist/browser.js +207 -36
- package/dist/browser.js.map +1 -1
- package/dist/esm/browser.d.ts +129 -0
- package/dist/esm/browser.js +426 -0
- package/dist/esm/browser.js.map +1 -0
- package/dist/esm/core/config.d.ts +77 -0
- package/dist/esm/core/config.js +112 -0
- package/dist/esm/core/config.js.map +1 -0
- package/dist/esm/core/constants.d.ts +78 -0
- package/dist/esm/core/constants.js +106 -0
- package/dist/esm/core/constants.js.map +1 -0
- package/dist/esm/core/index.d.ts +3 -0
- package/dist/esm/core/index.js +4 -0
- package/dist/esm/core/index.js.map +1 -0
- package/dist/esm/core/logger.d.ts +84 -0
- package/dist/esm/core/logger.js +170 -0
- package/dist/esm/core/logger.js.map +1 -0
- package/dist/esm/formatters/ascii.d.ts +52 -0
- package/dist/esm/formatters/ascii.js +100 -0
- package/dist/esm/formatters/ascii.js.map +1 -0
- package/dist/esm/formatters/cli.d.ts +50 -0
- package/dist/esm/formatters/cli.js +96 -0
- package/dist/esm/formatters/cli.js.map +1 -0
- package/dist/esm/formatters/index.d.ts +3 -0
- package/dist/esm/formatters/index.js +4 -0
- package/dist/esm/formatters/index.js.map +1 -0
- package/dist/esm/formatters/json.d.ts +45 -0
- package/dist/esm/formatters/json.js +85 -0
- package/dist/esm/formatters/json.js.map +1 -0
- package/dist/esm/index.d.ts +10 -0
- package/dist/esm/index.js +29 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/trackers/execution.d.ts +88 -0
- package/dist/esm/trackers/execution.js +214 -0
- package/dist/esm/trackers/execution.js.map +1 -0
- package/dist/esm/trackers/index.d.ts +2 -0
- package/dist/esm/trackers/index.js +3 -0
- package/dist/esm/trackers/index.js.map +1 -0
- package/dist/esm/trackers/performance.d.ts +82 -0
- package/dist/esm/trackers/performance.js +106 -0
- package/dist/esm/trackers/performance.js.map +1 -0
- package/dist/esm/types/config.d.ts +110 -0
- package/dist/esm/types/config.js +2 -0
- package/dist/esm/types/config.js.map +1 -0
- package/dist/esm/types/index.d.ts +34 -0
- package/dist/esm/types/index.js +3 -0
- package/dist/esm/types/index.js.map +1 -0
- package/dist/esm/types/logger.d.ts +127 -0
- package/dist/esm/types/logger.js +2 -0
- package/dist/esm/types/logger.js.map +1 -0
- package/dist/esm/utils/colors.d.ts +87 -0
- package/dist/esm/utils/colors.js +134 -0
- package/dist/esm/utils/colors.js.map +1 -0
- package/dist/esm/utils/index.d.ts +3 -0
- package/dist/esm/utils/index.js +4 -0
- package/dist/esm/utils/index.js.map +1 -0
- package/dist/esm/utils/stack.d.ts +63 -0
- package/dist/esm/utils/stack.js +110 -0
- package/dist/esm/utils/stack.js.map +1 -0
- package/dist/esm/utils/timing.d.ts +65 -0
- package/dist/esm/utils/timing.js +99 -0
- package/dist/esm/utils/timing.js.map +1 -0
- package/dist/index.js +13 -0
- package/dist/index.js.map +1 -1
- package/dist/trackers/execution.d.ts +23 -7
- package/dist/trackers/execution.js +100 -29
- package/dist/trackers/execution.js.map +1 -1
- package/dist/types/config.js +2 -1
- package/dist/types/index.d.ts +32 -0
- package/dist/types/index.js +18 -2
- package/dist/types/index.js.map +1 -1
- package/dist/types/logger.js +2 -1
- package/package.json +16 -2
package/README.md
CHANGED
|
@@ -9,10 +9,12 @@ Advanced console logging & performance tracking for Node.js applications.
|
|
|
9
9
|
|
|
10
10
|
- **Structured and Visually Appealing Logs**: A better alternative to `console.log()` with colors, icons, and formatting.
|
|
11
11
|
- **Execution Flow Tracing**: Track function calls and visualize the execution flow with ASCII art.
|
|
12
|
+
- **Nested Function Tracking**: Multiple approaches to track nested function calls with detailed visualization.
|
|
12
13
|
- **Performance Bottleneck Detection**: Identify slow functions and get suggestions for optimization.
|
|
13
14
|
- **Conditional Logging Modes**: Different logging levels for development, staging, and production.
|
|
14
15
|
- **Nested Logging**: Group related logs with indentation for better readability.
|
|
15
16
|
- **Auto-Remove Debug Logs**: Automatically filter out debug logs in production.
|
|
17
|
+
- **Universal Module Compatibility**: Works with both CommonJS and ESM environments.
|
|
16
18
|
|
|
17
19
|
## Installation
|
|
18
20
|
|
|
@@ -22,6 +24,8 @@ npm install traceperf
|
|
|
22
24
|
|
|
23
25
|
## Basic Usage
|
|
24
26
|
|
|
27
|
+
### CommonJS (Node.js)
|
|
28
|
+
|
|
25
29
|
```javascript
|
|
26
30
|
const tracePerf = require('traceperf');
|
|
27
31
|
|
|
@@ -41,6 +45,15 @@ tracePerf.warn('Invalid password attempt');
|
|
|
41
45
|
tracePerf.groupEnd();
|
|
42
46
|
```
|
|
43
47
|
|
|
48
|
+
### ESM (ECMAScript Modules)
|
|
49
|
+
|
|
50
|
+
```javascript
|
|
51
|
+
import tracePerf from 'traceperf';
|
|
52
|
+
|
|
53
|
+
// Use the same API as with CommonJS
|
|
54
|
+
tracePerf.info('This is an info message');
|
|
55
|
+
```
|
|
56
|
+
|
|
44
57
|
## Execution Flow Tracking
|
|
45
58
|
|
|
46
59
|
```javascript
|
|
@@ -108,12 +121,31 @@ tracePerf.error('Error message'); // Shown
|
|
|
108
121
|
|
|
109
122
|
TracePerf also provides a browser-compatible version for use in frontend applications:
|
|
110
123
|
|
|
124
|
+
### ESM (Modern Browsers)
|
|
125
|
+
|
|
111
126
|
```javascript
|
|
112
127
|
// Import the browser version
|
|
113
128
|
import tracePerf from 'traceperf/browser';
|
|
114
129
|
|
|
115
130
|
// Use it just like the Node.js version
|
|
116
131
|
tracePerf.info('This works in the browser!');
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
### CommonJS (Bundlers with CommonJS support)
|
|
135
|
+
|
|
136
|
+
```javascript
|
|
137
|
+
// Import the browser version with require
|
|
138
|
+
const tracePerf = require('traceperf/browser');
|
|
139
|
+
|
|
140
|
+
// Use it just like the Node.js version
|
|
141
|
+
tracePerf.info('This works in the browser with CommonJS bundlers!');
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
### Browser Example
|
|
145
|
+
|
|
146
|
+
```javascript
|
|
147
|
+
// Import using your preferred method
|
|
148
|
+
import tracePerf from 'traceperf/browser';
|
|
117
149
|
|
|
118
150
|
// Track function performance
|
|
119
151
|
function expensiveCalculation() {
|
|
@@ -199,4 +231,81 @@ logger.info('Custom logger');
|
|
|
199
231
|
|
|
200
232
|
## License
|
|
201
233
|
|
|
202
|
-
MIT
|
|
234
|
+
MIT
|
|
235
|
+
|
|
236
|
+
## Advanced Usage
|
|
237
|
+
|
|
238
|
+
### Tracking Nested Function Calls
|
|
239
|
+
|
|
240
|
+
TracePerf provides several approaches to track nested function calls:
|
|
241
|
+
|
|
242
|
+
#### Approach 1: Manual Tracking (Recommended)
|
|
243
|
+
|
|
244
|
+
The most reliable way to track nested function calls is to manually track each function:
|
|
245
|
+
|
|
246
|
+
```javascript
|
|
247
|
+
function fetchData() {
|
|
248
|
+
// Simulate API call
|
|
249
|
+
const data = { items: [1, 2, 3, 4, 5] };
|
|
250
|
+
|
|
251
|
+
// Process the data with manual tracking
|
|
252
|
+
const processedData = tracePerf.track(() => {
|
|
253
|
+
// Data processing logic
|
|
254
|
+
return data.items.map(item => item * 2);
|
|
255
|
+
}, { label: "processData" });
|
|
256
|
+
|
|
257
|
+
// Calculate results with manual tracking
|
|
258
|
+
const results = tracePerf.track(() => {
|
|
259
|
+
// Calculation logic
|
|
260
|
+
return processedData.reduce((sum, item) => sum + item, 0);
|
|
261
|
+
}, { label: "calculateResults" });
|
|
262
|
+
|
|
263
|
+
return results;
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
// Track the main function
|
|
267
|
+
tracePerf.track(fetchData, { label: "fetchData" });
|
|
268
|
+
```
|
|
269
|
+
|
|
270
|
+
This approach gives you the most control and provides accurate timing for each function.
|
|
271
|
+
|
|
272
|
+
#### Approach 2: Wrapper Functions
|
|
273
|
+
|
|
274
|
+
You can create tracked versions of your functions:
|
|
275
|
+
|
|
276
|
+
```javascript
|
|
277
|
+
// Original functions
|
|
278
|
+
function processData(data) {
|
|
279
|
+
return data.items.map(item => item * 2);
|
|
280
|
+
}
|
|
281
|
+
|
|
282
|
+
function calculateResults(processedData) {
|
|
283
|
+
return processedData.reduce((sum, item) => sum + item, 0);
|
|
284
|
+
}
|
|
285
|
+
|
|
286
|
+
// Create tracked versions
|
|
287
|
+
const trackedProcessData = (data) => {
|
|
288
|
+
return tracePerf.track(() => processData(data), { label: "processData" });
|
|
289
|
+
};
|
|
290
|
+
|
|
291
|
+
const trackedCalculateResults = (data) => {
|
|
292
|
+
return tracePerf.track(() => calculateResults(data), { label: "calculateResults" });
|
|
293
|
+
};
|
|
294
|
+
|
|
295
|
+
// Use tracked versions in your main function
|
|
296
|
+
function fetchData() {
|
|
297
|
+
const data = { items: [1, 2, 3, 4, 5] };
|
|
298
|
+
const processedData = trackedProcessData(data);
|
|
299
|
+
const results = trackedCalculateResults(processedData);
|
|
300
|
+
return results;
|
|
301
|
+
}
|
|
302
|
+
|
|
303
|
+
// Track the main function
|
|
304
|
+
tracePerf.track(fetchData, { label: "fetchData" });
|
|
305
|
+
```
|
|
306
|
+
|
|
307
|
+
This approach allows you to keep your original functions clean while still tracking their performance.
|
|
308
|
+
|
|
309
|
+
### Customizing Performance Thresholds
|
|
310
|
+
|
|
311
|
+
// ... existing code ...
|
package/dist/browser.d.ts
CHANGED
|
@@ -26,19 +26,75 @@ declare class BrowserPerformanceMonitor {
|
|
|
26
26
|
generateSuggestion(functionName: string, duration: number, memoryUsage?: number): string;
|
|
27
27
|
}
|
|
28
28
|
/**
|
|
29
|
-
* Browser-compatible execution tracker
|
|
29
|
+
* Browser-compatible execution tracker for tracking function calls and generating flow charts
|
|
30
30
|
*/
|
|
31
31
|
declare class BrowserExecutionTracker {
|
|
32
32
|
private _callStack;
|
|
33
33
|
private _executions;
|
|
34
34
|
private _currentExecution;
|
|
35
35
|
private _defaultThreshold;
|
|
36
|
+
private _instrumentedFunctions;
|
|
37
|
+
private _isInstrumented;
|
|
38
|
+
/**
|
|
39
|
+
* Create a new BrowserExecutionTracker instance
|
|
40
|
+
*
|
|
41
|
+
* @param options - Tracker options
|
|
42
|
+
*/
|
|
36
43
|
constructor(options?: {
|
|
37
44
|
defaultThreshold?: number;
|
|
38
45
|
});
|
|
39
|
-
|
|
46
|
+
/**
|
|
47
|
+
* Generate a performance optimization suggestion based on execution duration
|
|
48
|
+
*
|
|
49
|
+
* @param name - Function name
|
|
50
|
+
* @param duration - Execution duration in ms
|
|
51
|
+
* @returns Optimization suggestion
|
|
52
|
+
*/
|
|
53
|
+
private generateSuggestion;
|
|
54
|
+
/**
|
|
55
|
+
* Track the execution of a function
|
|
56
|
+
*
|
|
57
|
+
* @param fn - The function to track
|
|
58
|
+
* @param options - Options for tracking
|
|
59
|
+
* @returns The return value of the tracked function
|
|
60
|
+
*/
|
|
61
|
+
track<T>(fn: () => T, options?: any): T;
|
|
62
|
+
/**
|
|
63
|
+
* Instrument a function to track nested function calls
|
|
64
|
+
*
|
|
65
|
+
* @param fn - The function to instrument
|
|
66
|
+
* @returns The instrumented function
|
|
67
|
+
*/
|
|
68
|
+
private instrumentFunction;
|
|
69
|
+
/**
|
|
70
|
+
* Get the current call stack
|
|
71
|
+
*
|
|
72
|
+
* @returns The current call stack
|
|
73
|
+
*/
|
|
40
74
|
getCallStack(): string[];
|
|
75
|
+
/**
|
|
76
|
+
* Generate a visual representation of the execution flow
|
|
77
|
+
*
|
|
78
|
+
* @returns ASCII flow chart of the execution
|
|
79
|
+
*/
|
|
41
80
|
generateFlowChart(): string;
|
|
81
|
+
/**
|
|
82
|
+
* Prepare execution data for the flow chart
|
|
83
|
+
*
|
|
84
|
+
* @param executions - The execution records to prepare
|
|
85
|
+
* @returns A list of execution data
|
|
86
|
+
*/
|
|
87
|
+
private prepareExecutionData;
|
|
88
|
+
/**
|
|
89
|
+
* Add children to the result list
|
|
90
|
+
*
|
|
91
|
+
* @param children - The children to add
|
|
92
|
+
* @param result - The result list
|
|
93
|
+
*/
|
|
94
|
+
private addChildrenToResult;
|
|
95
|
+
/**
|
|
96
|
+
* Clear all execution records
|
|
97
|
+
*/
|
|
42
98
|
clear(): void;
|
|
43
99
|
}
|
|
44
100
|
/**
|
|
@@ -61,7 +117,13 @@ declare class BrowserLogger {
|
|
|
61
117
|
track<T>(fn: () => T, options?: ITrackOptions): T;
|
|
62
118
|
private log;
|
|
63
119
|
}
|
|
64
|
-
|
|
65
|
-
|
|
120
|
+
/**
|
|
121
|
+
* Create a new browser logger instance
|
|
122
|
+
*
|
|
123
|
+
* @param config - Configuration options
|
|
124
|
+
* @returns A new BrowserLogger instance
|
|
125
|
+
*/
|
|
66
126
|
export declare function createBrowserLogger(config?: Partial<ILoggerConfig>): BrowserLogger;
|
|
67
|
-
|
|
127
|
+
declare const defaultBrowserLogger: BrowserLogger;
|
|
128
|
+
export default defaultBrowserLogger;
|
|
129
|
+
export { BrowserLogger, BrowserPerformanceMonitor, BrowserExecutionTracker };
|
package/dist/browser.js
CHANGED
|
@@ -1,9 +1,13 @@
|
|
|
1
|
+
"use strict";
|
|
1
2
|
/**
|
|
2
3
|
* Browser-compatible version of TracePerf
|
|
3
4
|
*
|
|
4
5
|
* This file provides a browser-compatible version of TracePerf that can be used
|
|
5
6
|
* in React, Next.js, or other frontend applications.
|
|
6
7
|
*/
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.BrowserExecutionTracker = exports.BrowserPerformanceMonitor = exports.BrowserLogger = void 0;
|
|
10
|
+
exports.createBrowserLogger = createBrowserLogger;
|
|
7
11
|
/**
|
|
8
12
|
* Browser-compatible performance monitoring
|
|
9
13
|
*/
|
|
@@ -60,23 +64,56 @@ class BrowserPerformanceMonitor {
|
|
|
60
64
|
return `🛠 Potential Fix: Review ${functionName} for performance optimizations`;
|
|
61
65
|
}
|
|
62
66
|
}
|
|
67
|
+
exports.BrowserPerformanceMonitor = BrowserPerformanceMonitor;
|
|
63
68
|
/**
|
|
64
|
-
* Browser-compatible execution tracker
|
|
69
|
+
* Browser-compatible execution tracker for tracking function calls and generating flow charts
|
|
65
70
|
*/
|
|
66
71
|
class BrowserExecutionTracker {
|
|
72
|
+
/**
|
|
73
|
+
* Create a new BrowserExecutionTracker instance
|
|
74
|
+
*
|
|
75
|
+
* @param options - Tracker options
|
|
76
|
+
*/
|
|
67
77
|
constructor(options = {}) {
|
|
68
78
|
var _a;
|
|
69
79
|
this._callStack = [];
|
|
70
80
|
this._executions = [];
|
|
71
81
|
this._currentExecution = null;
|
|
82
|
+
this._instrumentedFunctions = new Map();
|
|
83
|
+
this._isInstrumented = false;
|
|
72
84
|
this._defaultThreshold = (_a = options.defaultThreshold) !== null && _a !== void 0 ? _a : 100; // ms
|
|
73
85
|
}
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
86
|
+
/**
|
|
87
|
+
* Generate a performance optimization suggestion based on execution duration
|
|
88
|
+
*
|
|
89
|
+
* @param name - Function name
|
|
90
|
+
* @param duration - Execution duration in ms
|
|
91
|
+
* @returns Optimization suggestion
|
|
92
|
+
*/
|
|
93
|
+
generateSuggestion(name, duration) {
|
|
94
|
+
if (duration > 500) {
|
|
95
|
+
return `Function "${name}" took ${duration.toFixed(2)}ms to execute. Consider optimizing or breaking it down into smaller functions.`;
|
|
96
|
+
}
|
|
97
|
+
else if (duration > 200) {
|
|
98
|
+
return `Function "${name}" took ${duration.toFixed(2)}ms to execute. Consider optimizing if called frequently.`;
|
|
99
|
+
}
|
|
100
|
+
else if (duration > 100) {
|
|
101
|
+
return `Function "${name}" took ${duration.toFixed(2)}ms to execute. Monitor if called in critical paths.`;
|
|
102
|
+
}
|
|
103
|
+
return '';
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Track the execution of a function
|
|
107
|
+
*
|
|
108
|
+
* @param fn - The function to track
|
|
109
|
+
* @param options - Options for tracking
|
|
110
|
+
* @returns The return value of the tracked function
|
|
111
|
+
*/
|
|
112
|
+
track(fn, options = {}) {
|
|
113
|
+
var _a, _b;
|
|
114
|
+
const fnName = options.label || fn.name || 'anonymous';
|
|
115
|
+
const threshold = (_a = options.threshold) !== null && _a !== void 0 ? _a : this._defaultThreshold;
|
|
116
|
+
const enableNestedTracking = (_b = options.enableNestedTracking) !== null && _b !== void 0 ? _b : true;
|
|
80
117
|
// Add to call stack
|
|
81
118
|
this._callStack.push(fnName);
|
|
82
119
|
// Create execution record
|
|
@@ -85,7 +122,7 @@ class BrowserExecutionTracker {
|
|
|
85
122
|
duration: 0,
|
|
86
123
|
isSlow: false,
|
|
87
124
|
level: this._callStack.length - 1,
|
|
88
|
-
startTime,
|
|
125
|
+
startTime: performance.now(),
|
|
89
126
|
children: [],
|
|
90
127
|
};
|
|
91
128
|
// Set parent-child relationship
|
|
@@ -94,55 +131,175 @@ class BrowserExecutionTracker {
|
|
|
94
131
|
this._currentExecution.children.push(execution);
|
|
95
132
|
}
|
|
96
133
|
else {
|
|
134
|
+
// This is a root execution
|
|
97
135
|
this._executions.push(execution);
|
|
98
136
|
}
|
|
99
137
|
// Save the previous current execution
|
|
100
138
|
const previousExecution = this._currentExecution;
|
|
101
139
|
// Set this as the current execution
|
|
102
140
|
this._currentExecution = execution;
|
|
141
|
+
// Flag to track if we're already instrumenting to avoid recursion
|
|
142
|
+
const wasInstrumented = this._isInstrumented;
|
|
143
|
+
let result;
|
|
103
144
|
try {
|
|
104
|
-
//
|
|
105
|
-
|
|
145
|
+
// If this is the top-level call and nested tracking is enabled, instrument the function
|
|
146
|
+
if (enableNestedTracking && !wasInstrumented) {
|
|
147
|
+
this._isInstrumented = true;
|
|
148
|
+
// Instrument the function to track nested calls
|
|
149
|
+
const instrumentedFn = this.instrumentFunction(fn);
|
|
150
|
+
result = instrumentedFn();
|
|
151
|
+
}
|
|
152
|
+
else {
|
|
153
|
+
// Execute the function normally
|
|
154
|
+
result = fn();
|
|
155
|
+
}
|
|
106
156
|
}
|
|
107
|
-
|
|
157
|
+
catch (error) {
|
|
108
158
|
// End timing
|
|
109
159
|
const endTime = performance.now();
|
|
110
|
-
|
|
111
|
-
execution.duration = endTime - startTime;
|
|
112
|
-
// Check if it's a bottleneck
|
|
160
|
+
execution.endTime = endTime;
|
|
161
|
+
execution.duration = endTime - execution.startTime;
|
|
113
162
|
execution.isSlow = execution.duration > threshold;
|
|
114
163
|
// Restore the previous current execution
|
|
115
164
|
this._currentExecution = previousExecution;
|
|
116
165
|
// Remove from call stack
|
|
117
166
|
this._callStack.pop();
|
|
167
|
+
// Reset instrumentation flag if this was the top-level call
|
|
168
|
+
if (!wasInstrumented) {
|
|
169
|
+
this._isInstrumented = false;
|
|
170
|
+
}
|
|
171
|
+
// Re-throw the error
|
|
172
|
+
throw error;
|
|
173
|
+
}
|
|
174
|
+
// End timing
|
|
175
|
+
const endTime = performance.now();
|
|
176
|
+
execution.endTime = endTime;
|
|
177
|
+
execution.duration = endTime - execution.startTime;
|
|
178
|
+
execution.isSlow = execution.duration > threshold;
|
|
179
|
+
// Generate suggestion if slow
|
|
180
|
+
if (execution.isSlow) {
|
|
181
|
+
execution.suggestion = this.generateSuggestion(fnName, execution.duration);
|
|
182
|
+
}
|
|
183
|
+
// Restore the previous current execution
|
|
184
|
+
this._currentExecution = previousExecution;
|
|
185
|
+
// Remove from call stack
|
|
186
|
+
this._callStack.pop();
|
|
187
|
+
// Reset instrumentation flag if this was the top-level call
|
|
188
|
+
if (!wasInstrumented) {
|
|
189
|
+
this._isInstrumented = false;
|
|
118
190
|
}
|
|
191
|
+
return result;
|
|
192
|
+
}
|
|
193
|
+
/**
|
|
194
|
+
* Instrument a function to track nested function calls
|
|
195
|
+
*
|
|
196
|
+
* @param fn - The function to instrument
|
|
197
|
+
* @returns The instrumented function
|
|
198
|
+
*/
|
|
199
|
+
instrumentFunction(fn) {
|
|
200
|
+
// If we've already instrumented this function, return the instrumented version
|
|
201
|
+
if (this._instrumentedFunctions.has(fn)) {
|
|
202
|
+
return this._instrumentedFunctions.get(fn);
|
|
203
|
+
}
|
|
204
|
+
// Create a new instrumented function
|
|
205
|
+
const instrumentedFn = () => {
|
|
206
|
+
// Execute the function and track nested calls
|
|
207
|
+
try {
|
|
208
|
+
// We can't actually modify the function at runtime to track nested calls,
|
|
209
|
+
// so we'll just execute it and rely on the call stack for visualization
|
|
210
|
+
return fn();
|
|
211
|
+
}
|
|
212
|
+
catch (error) {
|
|
213
|
+
// Re-throw any errors
|
|
214
|
+
throw error;
|
|
215
|
+
}
|
|
216
|
+
};
|
|
217
|
+
// Cache the instrumented function
|
|
218
|
+
this._instrumentedFunctions.set(fn, instrumentedFn);
|
|
219
|
+
return instrumentedFn;
|
|
119
220
|
}
|
|
221
|
+
/**
|
|
222
|
+
* Get the current call stack
|
|
223
|
+
*
|
|
224
|
+
* @returns The current call stack
|
|
225
|
+
*/
|
|
120
226
|
getCallStack() {
|
|
121
227
|
return [...this._callStack];
|
|
122
228
|
}
|
|
229
|
+
/**
|
|
230
|
+
* Generate a visual representation of the execution flow
|
|
231
|
+
*
|
|
232
|
+
* @returns ASCII flow chart of the execution
|
|
233
|
+
*/
|
|
123
234
|
generateFlowChart() {
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
235
|
+
let result = 'Execution Flow:\n';
|
|
236
|
+
// Process each execution
|
|
237
|
+
this.prepareExecutionData(this._executions).forEach(execution => {
|
|
238
|
+
const indent = ' '.repeat(execution.level);
|
|
239
|
+
const durationStr = execution.duration.toFixed(2);
|
|
240
|
+
const slowMarker = execution.isSlow ? ' [SLOW]' : '';
|
|
241
|
+
result += `${indent}→ ${execution.name} (${durationStr}ms)${slowMarker}\n`;
|
|
242
|
+
// Add suggestion if available
|
|
243
|
+
if (execution.suggestion) {
|
|
244
|
+
result += `${indent} ⚠️ ${execution.suggestion}\n`;
|
|
245
|
+
}
|
|
246
|
+
});
|
|
247
|
+
return result;
|
|
248
|
+
}
|
|
249
|
+
/**
|
|
250
|
+
* Prepare execution data for the flow chart
|
|
251
|
+
*
|
|
252
|
+
* @param executions - The execution records to prepare
|
|
253
|
+
* @returns A list of execution data
|
|
254
|
+
*/
|
|
255
|
+
prepareExecutionData(executions) {
|
|
256
|
+
const result = [];
|
|
257
|
+
// Process each root execution
|
|
258
|
+
executions.forEach(execution => {
|
|
259
|
+
// Add the root execution
|
|
260
|
+
result.push({
|
|
261
|
+
name: execution.name,
|
|
262
|
+
duration: execution.duration,
|
|
263
|
+
isSlow: execution.isSlow,
|
|
264
|
+
suggestion: execution.suggestion,
|
|
265
|
+
level: execution.level,
|
|
135
266
|
});
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
267
|
+
// Add children recursively
|
|
268
|
+
this.addChildrenToResult(execution.children, result);
|
|
269
|
+
});
|
|
270
|
+
return result;
|
|
139
271
|
}
|
|
272
|
+
/**
|
|
273
|
+
* Add children to the result list
|
|
274
|
+
*
|
|
275
|
+
* @param children - The children to add
|
|
276
|
+
* @param result - The result list
|
|
277
|
+
*/
|
|
278
|
+
addChildrenToResult(children, result) {
|
|
279
|
+
children.forEach(child => {
|
|
280
|
+
// Add the child
|
|
281
|
+
result.push({
|
|
282
|
+
name: child.name,
|
|
283
|
+
duration: child.duration,
|
|
284
|
+
isSlow: child.isSlow,
|
|
285
|
+
suggestion: child.suggestion,
|
|
286
|
+
level: child.level,
|
|
287
|
+
});
|
|
288
|
+
// Add grandchildren recursively
|
|
289
|
+
this.addChildrenToResult(child.children, result);
|
|
290
|
+
});
|
|
291
|
+
}
|
|
292
|
+
/**
|
|
293
|
+
* Clear all execution records
|
|
294
|
+
*/
|
|
140
295
|
clear() {
|
|
141
296
|
this._executions = [];
|
|
142
297
|
this._currentExecution = null;
|
|
143
298
|
this._callStack = [];
|
|
299
|
+
this._instrumentedFunctions.clear();
|
|
144
300
|
}
|
|
145
301
|
}
|
|
302
|
+
exports.BrowserExecutionTracker = BrowserExecutionTracker;
|
|
146
303
|
/**
|
|
147
304
|
* Browser-compatible logger
|
|
148
305
|
*/
|
|
@@ -247,14 +404,28 @@ class BrowserLogger {
|
|
|
247
404
|
}
|
|
248
405
|
}
|
|
249
406
|
}
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
407
|
+
exports.BrowserLogger = BrowserLogger;
|
|
408
|
+
/**
|
|
409
|
+
* Create a new browser logger instance
|
|
410
|
+
*
|
|
411
|
+
* @param config - Configuration options
|
|
412
|
+
* @returns A new BrowserLogger instance
|
|
413
|
+
*/
|
|
414
|
+
function createBrowserLogger(config = {}) {
|
|
256
415
|
return new BrowserLogger(config);
|
|
257
416
|
}
|
|
258
|
-
//
|
|
259
|
-
|
|
417
|
+
// Create a singleton instance
|
|
418
|
+
const defaultBrowserLogger = new BrowserLogger();
|
|
419
|
+
// Export the singleton instance as the default export
|
|
420
|
+
exports.default = defaultBrowserLogger;
|
|
421
|
+
// Add CommonJS compatibility
|
|
422
|
+
if (typeof module !== 'undefined' && module.exports) {
|
|
423
|
+
module.exports = Object.assign(defaultBrowserLogger, {
|
|
424
|
+
default: defaultBrowserLogger,
|
|
425
|
+
createBrowserLogger,
|
|
426
|
+
BrowserLogger,
|
|
427
|
+
BrowserPerformanceMonitor,
|
|
428
|
+
BrowserExecutionTracker
|
|
429
|
+
});
|
|
430
|
+
}
|
|
260
431
|
//# sourceMappingURL=browser.js.map
|
package/dist/browser.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"browser.js","sourceRoot":"","sources":["../src/browser.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"browser.js","sourceRoot":"","sources":["../src/browser.ts"],"names":[],"mappings":"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"}
|