traceperf 0.1.2 → 0.1.5

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.
@@ -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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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "traceperf",
3
- "version": "0.1.2",
3
+ "version": "0.1.5",
4
4
  "description": "Advanced console logging & performance tracking for Node.js",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/esm/index.js",