traceperf 0.1.2 → 0.1.4
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 +93 -50
- package/dist/browser.d.ts +24 -6
- package/dist/browser.js +35 -48
- package/dist/browser.js.map +1 -1
- package/dist/core/logger.d.ts +14 -1
- package/dist/core/logger.js +16 -4
- package/dist/core/logger.js.map +1 -1
- package/dist/esm/browser.d.ts +24 -6
- package/dist/esm/browser.js +35 -48
- package/dist/esm/browser.js.map +1 -1
- package/dist/esm/core/logger.d.ts +14 -1
- package/dist/esm/core/logger.js +16 -4
- package/dist/esm/core/logger.js.map +1 -1
- package/dist/esm/trackers/execution.d.ts +11 -6
- package/dist/esm/trackers/execution.js +22 -49
- package/dist/esm/trackers/execution.js.map +1 -1
- package/dist/esm/types/config.d.ts +35 -17
- package/dist/esm/types/index.d.ts +54 -4
- package/dist/esm/types/logger.d.ts +11 -0
- package/dist/esm/utils/proxy-tracker.d.ts +68 -0
- package/dist/esm/utils/proxy-tracker.js +127 -0
- package/dist/esm/utils/proxy-tracker.js.map +1 -0
- package/dist/trackers/execution.d.ts +11 -6
- package/dist/trackers/execution.js +22 -49
- package/dist/trackers/execution.js.map +1 -1
- package/dist/types/config.d.ts +35 -17
- package/dist/types/index.d.ts +54 -4
- package/dist/types/logger.d.ts +11 -0
- package/dist/utils/proxy-tracker.d.ts +68 -0
- package/dist/utils/proxy-tracker.js +131 -0
- package/dist/utils/proxy-tracker.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Proxy-based function tracking utility
|
|
4
|
+
*
|
|
5
|
+
* This module provides utilities for automatically tracking nested function calls
|
|
6
|
+
* using JavaScript Proxies without modifying the original code structure.
|
|
7
|
+
*/
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.ProxyTracker = void 0;
|
|
10
|
+
/**
|
|
11
|
+
* A tracking context that manages function tracking using proxies
|
|
12
|
+
*/
|
|
13
|
+
class ProxyTracker {
|
|
14
|
+
/**
|
|
15
|
+
* Create a new ProxyTracker
|
|
16
|
+
*
|
|
17
|
+
* @param trackFn - The function to use for tracking
|
|
18
|
+
*/
|
|
19
|
+
constructor(trackFn) {
|
|
20
|
+
this._originalFunctions = new Map();
|
|
21
|
+
this._trackedFunctions = new Map();
|
|
22
|
+
this._isEnabled = true;
|
|
23
|
+
this._trackFn = trackFn;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Enable or disable tracking
|
|
27
|
+
*
|
|
28
|
+
* @param enabled - Whether tracking is enabled
|
|
29
|
+
*/
|
|
30
|
+
setEnabled(enabled) {
|
|
31
|
+
this._isEnabled = enabled;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Check if tracking is enabled
|
|
35
|
+
*
|
|
36
|
+
* @returns Whether tracking is enabled
|
|
37
|
+
*/
|
|
38
|
+
isEnabled() {
|
|
39
|
+
return this._isEnabled;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Make a function trackable
|
|
43
|
+
*
|
|
44
|
+
* @param fn - The function to make trackable
|
|
45
|
+
* @param name - The name to use for tracking
|
|
46
|
+
* @returns A tracked version of the function
|
|
47
|
+
*/
|
|
48
|
+
makeTrackable(fn, name) {
|
|
49
|
+
// If tracking is disabled, return the original function
|
|
50
|
+
if (!this._isEnabled) {
|
|
51
|
+
return fn;
|
|
52
|
+
}
|
|
53
|
+
// If we've already tracked this function, return the tracked version
|
|
54
|
+
if (this._trackedFunctions.has(fn)) {
|
|
55
|
+
return this._trackedFunctions.get(fn);
|
|
56
|
+
}
|
|
57
|
+
// Create a tracked version of the function
|
|
58
|
+
const self = this;
|
|
59
|
+
const trackedFn = function (...args) {
|
|
60
|
+
return self._trackFn(() => fn.apply(this, args), {
|
|
61
|
+
label: name || fn.name || 'anonymous'
|
|
62
|
+
});
|
|
63
|
+
};
|
|
64
|
+
// Store the tracked version
|
|
65
|
+
this._trackedFunctions.set(fn, trackedFn);
|
|
66
|
+
return trackedFn;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Create a proxy for an object to track all its methods
|
|
70
|
+
*
|
|
71
|
+
* @param obj - The object to proxy
|
|
72
|
+
* @param namespace - The namespace to use for tracking
|
|
73
|
+
* @returns A proxied version of the object
|
|
74
|
+
*/
|
|
75
|
+
createProxy(obj, namespace = '') {
|
|
76
|
+
// If tracking is disabled, return the original object
|
|
77
|
+
if (!this._isEnabled) {
|
|
78
|
+
return obj;
|
|
79
|
+
}
|
|
80
|
+
const self = this;
|
|
81
|
+
return new Proxy(obj, {
|
|
82
|
+
get(target, prop, receiver) {
|
|
83
|
+
const value = Reflect.get(target, prop, receiver);
|
|
84
|
+
// If the property is a function, make it trackable
|
|
85
|
+
if (typeof value === 'function' && prop !== 'constructor') {
|
|
86
|
+
const name = namespace
|
|
87
|
+
? `${namespace}.${String(prop)}`
|
|
88
|
+
: String(prop);
|
|
89
|
+
return self.makeTrackable(value, name);
|
|
90
|
+
}
|
|
91
|
+
// If the property is an object (but not a built-in), proxy it too
|
|
92
|
+
if (value &&
|
|
93
|
+
typeof value === 'object' &&
|
|
94
|
+
!Array.isArray(value) &&
|
|
95
|
+
Object.getPrototypeOf(value) === Object.prototype) {
|
|
96
|
+
const nestedNamespace = namespace
|
|
97
|
+
? `${namespace}.${String(prop)}`
|
|
98
|
+
: String(prop);
|
|
99
|
+
return self.createProxy(value, nestedNamespace);
|
|
100
|
+
}
|
|
101
|
+
return value;
|
|
102
|
+
},
|
|
103
|
+
apply(target, thisArg, args) {
|
|
104
|
+
// This handles the case when the proxy itself is called as a function
|
|
105
|
+
const name = namespace || target.name || 'anonymous';
|
|
106
|
+
return self._trackFn(() => Reflect.apply(target, thisArg, args), {
|
|
107
|
+
label: name
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
});
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Track a module's exports
|
|
114
|
+
*
|
|
115
|
+
* @param moduleExports - The module's exports
|
|
116
|
+
* @param namespace - The namespace to use for tracking
|
|
117
|
+
* @returns A proxied version of the module's exports
|
|
118
|
+
*/
|
|
119
|
+
trackModule(moduleExports, namespace) {
|
|
120
|
+
return this.createProxy(moduleExports, namespace);
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Clear all tracked functions
|
|
124
|
+
*/
|
|
125
|
+
clear() {
|
|
126
|
+
this._trackedFunctions.clear();
|
|
127
|
+
this._originalFunctions.clear();
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
exports.ProxyTracker = ProxyTracker;
|
|
131
|
+
//# sourceMappingURL=proxy-tracker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"proxy-tracker.js","sourceRoot":"","sources":["../../src/utils/proxy-tracker.ts"],"names":[],"mappings":"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"}
|