@tachui/devtools 0.8.0-alpha
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/LICENSE +363 -0
- package/README.md +189 -0
- package/dist/build-time/detection.d.ts +32 -0
- package/dist/build-time/detection.d.ts.map +1 -0
- package/dist/build-time/index.d.ts +84 -0
- package/dist/build-time/index.d.ts.map +1 -0
- package/dist/build-time/plugins.d.ts +75 -0
- package/dist/build-time/plugins.d.ts.map +1 -0
- package/dist/build-time/rules.d.ts +73 -0
- package/dist/build-time/rules.d.ts.map +1 -0
- package/dist/build-time/transformer.d.ts +23 -0
- package/dist/build-time/transformer.d.ts.map +1 -0
- package/dist/build-time/types.d.ts +212 -0
- package/dist/build-time/types.d.ts.map +1 -0
- package/dist/debug/advanced-debugging.d.ts +327 -0
- package/dist/debug/advanced-debugging.d.ts.map +1 -0
- package/dist/debug/debug.d.ts +61 -0
- package/dist/debug/debug.d.ts.map +1 -0
- package/dist/debug/developer-experience.d.ts +261 -0
- package/dist/debug/developer-experience.d.ts.map +1 -0
- package/dist/debug/development-warnings.d.ts +42 -0
- package/dist/debug/development-warnings.d.ts.map +1 -0
- package/dist/debug/documentation-integration.d.ts +269 -0
- package/dist/debug/documentation-integration.d.ts.map +1 -0
- package/dist/debug/enhanced-errors.d.ts +176 -0
- package/dist/debug/enhanced-errors.d.ts.map +1 -0
- package/dist/debug/enhanced-types.d.ts +284 -0
- package/dist/debug/enhanced-types.d.ts.map +1 -0
- package/dist/debug/ide-integration.d.ts +328 -0
- package/dist/debug/ide-integration.d.ts.map +1 -0
- package/dist/debug/index.d.ts +12 -0
- package/dist/debug/index.d.ts.map +1 -0
- package/dist/debug/index.js +1251 -0
- package/dist/debug/index.js.map +1 -0
- package/dist/debug/validation-debug-tools.d.ts +228 -0
- package/dist/debug/validation-debug-tools.d.ts.map +1 -0
- package/dist/index.d.ts +22 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +216229 -0
- package/dist/index.js.map +1 -0
- package/dist/inspector/index.d.ts +232 -0
- package/dist/inspector/index.d.ts.map +1 -0
- package/dist/inspector/index.js +525 -0
- package/dist/inspector/index.js.map +1 -0
- package/dist/plugins/simplified-error-handler.d.ts +83 -0
- package/dist/plugins/simplified-error-handler.d.ts.map +1 -0
- package/dist/profiler/index.d.ts +21 -0
- package/dist/profiler/index.d.ts.map +1 -0
- package/dist/profiler/index.js +519 -0
- package/dist/profiler/index.js.map +1 -0
- package/dist/profiler/performance-optimizer.d.ts +115 -0
- package/dist/profiler/performance-optimizer.d.ts.map +1 -0
- package/dist/profiler/production-monitoring.d.ts +150 -0
- package/dist/profiler/production-monitoring.d.ts.map +1 -0
- package/dist/runtime/error-boundary.d.ts +302 -0
- package/dist/runtime/error-boundary.d.ts.map +1 -0
- package/dist/runtime/error-recovery.d.ts +267 -0
- package/dist/runtime/error-recovery.d.ts.map +1 -0
- package/dist/runtime/error-reporting.d.ts +287 -0
- package/dist/runtime/error-reporting.d.ts.map +1 -0
- package/dist/runtime/error-utils.d.ts +204 -0
- package/dist/runtime/error-utils.d.ts.map +1 -0
- package/dist/runtime/performance.d.ts +217 -0
- package/dist/runtime/performance.d.ts.map +1 -0
- package/dist/testing/index.d.ts +29 -0
- package/dist/testing/index.d.ts.map +1 -0
- package/dist/testing/index.js +47 -0
- package/dist/testing/index.js.map +1 -0
- package/dist/validation/debug-tools-stub.d.ts +67 -0
- package/dist/validation/debug-tools-stub.d.ts.map +1 -0
- package/dist/validation/enhanced-runtime.d.ts +310 -0
- package/dist/validation/enhanced-runtime.d.ts.map +1 -0
- package/dist/validation/error-reporting.d.ts +186 -0
- package/dist/validation/error-reporting.d.ts.map +1 -0
- package/package.json +78 -0
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Performance Profiling System
|
|
3
|
+
*
|
|
4
|
+
* Provides runtime performance monitoring, component render profiling,
|
|
5
|
+
* memory usage tracking, and bundle size analysis.
|
|
6
|
+
*/
|
|
7
|
+
export declare const PerformanceProfiler: {
|
|
8
|
+
initialize: (config: any) => void;
|
|
9
|
+
};
|
|
10
|
+
export declare const RenderProfiler: {
|
|
11
|
+
wrap: (component: any, _config: any) => any;
|
|
12
|
+
};
|
|
13
|
+
export declare const MemoryProfiler: {
|
|
14
|
+
startMonitoring: (config: any) => void;
|
|
15
|
+
};
|
|
16
|
+
export declare const BundleAnalyzer: {
|
|
17
|
+
analyze: () => void;
|
|
18
|
+
};
|
|
19
|
+
export * from './performance-optimizer';
|
|
20
|
+
export * from './production-monitoring';
|
|
21
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/profiler/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,eAAO,MAAM,mBAAmB;yBACT,GAAG;CAGzB,CAAA;AAED,eAAO,MAAM,cAAc;sBACP,GAAG,WAAW,GAAG;CACpC,CAAA;AAED,eAAO,MAAM,cAAc;8BACC,GAAG;CAG9B,CAAA;AAED,eAAO,MAAM,cAAc;;CAI1B,CAAA;AAGD,cAAc,yBAAyB,CAAA;AAGvC,cAAc,yBAAyB,CAAA"}
|
|
@@ -0,0 +1,519 @@
|
|
|
1
|
+
const validationDebugger = {
|
|
2
|
+
logEvent: (type, message, data) => {
|
|
3
|
+
if (typeof console !== "undefined") {
|
|
4
|
+
console.log(`[ValidationDebugger] ${type}: ${message}`, data);
|
|
5
|
+
}
|
|
6
|
+
}
|
|
7
|
+
};
|
|
8
|
+
class PerformanceOptimizer {
|
|
9
|
+
static instance;
|
|
10
|
+
config;
|
|
11
|
+
metrics = /* @__PURE__ */ new Map();
|
|
12
|
+
operationQueue = [];
|
|
13
|
+
frameCounter = 0;
|
|
14
|
+
lastBatchTime = 0;
|
|
15
|
+
throttleTimers = /* @__PURE__ */ new Map();
|
|
16
|
+
defaultConfig = {
|
|
17
|
+
enabled: true,
|
|
18
|
+
targetOverhead: 5,
|
|
19
|
+
// 5% overhead target
|
|
20
|
+
batchSize: 10,
|
|
21
|
+
cacheStrategy: "moderate",
|
|
22
|
+
asyncValidation: true,
|
|
23
|
+
throttleMs: 16,
|
|
24
|
+
// ~60fps
|
|
25
|
+
skipFrames: 0
|
|
26
|
+
};
|
|
27
|
+
constructor(config = {}) {
|
|
28
|
+
this.config = { ...this.defaultConfig, ...config };
|
|
29
|
+
}
|
|
30
|
+
static getInstance(config) {
|
|
31
|
+
if (!this.instance) {
|
|
32
|
+
this.instance = new PerformanceOptimizer(config);
|
|
33
|
+
}
|
|
34
|
+
return this.instance;
|
|
35
|
+
}
|
|
36
|
+
configure(config) {
|
|
37
|
+
this.config = { ...this.config, ...config };
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Optimize a validation operation with smart batching and caching
|
|
41
|
+
*/
|
|
42
|
+
optimizeValidation(key, operation, _skipCache = false) {
|
|
43
|
+
if (!this.config.enabled) {
|
|
44
|
+
return operation();
|
|
45
|
+
}
|
|
46
|
+
if (this.shouldSkipFrame()) {
|
|
47
|
+
return operation();
|
|
48
|
+
}
|
|
49
|
+
if (this.isThrottled(key)) {
|
|
50
|
+
return operation();
|
|
51
|
+
}
|
|
52
|
+
const startTime = performance.now();
|
|
53
|
+
try {
|
|
54
|
+
const result = operation();
|
|
55
|
+
this.recordMetrics(key, performance.now() - startTime, true);
|
|
56
|
+
return result;
|
|
57
|
+
} catch (error) {
|
|
58
|
+
this.recordMetrics(key, performance.now() - startTime, false);
|
|
59
|
+
throw error;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Batch validation operations for better performance
|
|
64
|
+
*/
|
|
65
|
+
batchValidations(operations) {
|
|
66
|
+
if (!this.config.enabled) {
|
|
67
|
+
operations.forEach((op) => op());
|
|
68
|
+
return;
|
|
69
|
+
}
|
|
70
|
+
this.operationQueue.push(...operations);
|
|
71
|
+
const now = Date.now();
|
|
72
|
+
if (this.operationQueue.length >= this.config.batchSize || now - this.lastBatchTime > this.config.throttleMs) {
|
|
73
|
+
this.processBatch();
|
|
74
|
+
this.lastBatchTime = now;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Process queued validation operations
|
|
79
|
+
*/
|
|
80
|
+
processBatch() {
|
|
81
|
+
const batch = this.operationQueue.splice(0, this.config.batchSize);
|
|
82
|
+
if (this.config.asyncValidation) {
|
|
83
|
+
setTimeout(() => {
|
|
84
|
+
batch.forEach((op) => {
|
|
85
|
+
try {
|
|
86
|
+
op();
|
|
87
|
+
} catch (error) {
|
|
88
|
+
console.warn("Batch validation error:", error);
|
|
89
|
+
}
|
|
90
|
+
});
|
|
91
|
+
}, 0);
|
|
92
|
+
} else {
|
|
93
|
+
batch.forEach((op) => {
|
|
94
|
+
try {
|
|
95
|
+
op();
|
|
96
|
+
} catch (error) {
|
|
97
|
+
console.warn("Batch validation error:", error);
|
|
98
|
+
}
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Check if validation should be skipped this frame
|
|
104
|
+
*/
|
|
105
|
+
shouldSkipFrame() {
|
|
106
|
+
if (this.config.skipFrames === 0) return false;
|
|
107
|
+
this.frameCounter++;
|
|
108
|
+
return this.frameCounter % (this.config.skipFrames + 1) !== 0;
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Check if operation is currently throttled
|
|
112
|
+
*/
|
|
113
|
+
isThrottled(key) {
|
|
114
|
+
const lastTime = this.throttleTimers.get(key);
|
|
115
|
+
const now = Date.now();
|
|
116
|
+
if (!lastTime || now - lastTime > this.config.throttleMs) {
|
|
117
|
+
this.throttleTimers.set(key, now);
|
|
118
|
+
return false;
|
|
119
|
+
}
|
|
120
|
+
return true;
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Record performance metrics
|
|
124
|
+
*/
|
|
125
|
+
recordMetrics(key, duration, _success) {
|
|
126
|
+
const existing = this.metrics.get(key) || {
|
|
127
|
+
operationCount: 0,
|
|
128
|
+
totalTime: 0,
|
|
129
|
+
averageTime: 0,
|
|
130
|
+
maxTime: 0,
|
|
131
|
+
cacheHitRate: 0,
|
|
132
|
+
skipRate: 0
|
|
133
|
+
};
|
|
134
|
+
existing.operationCount++;
|
|
135
|
+
existing.totalTime += duration;
|
|
136
|
+
existing.averageTime = existing.totalTime / existing.operationCount;
|
|
137
|
+
existing.maxTime = Math.max(existing.maxTime, duration);
|
|
138
|
+
this.metrics.set(key, existing);
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Get performance metrics for a specific operation
|
|
142
|
+
*/
|
|
143
|
+
getMetrics(key) {
|
|
144
|
+
return this.metrics.get(key);
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* Get all performance metrics
|
|
148
|
+
*/
|
|
149
|
+
getAllMetrics() {
|
|
150
|
+
return new Map(this.metrics);
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* Reset all metrics
|
|
154
|
+
*/
|
|
155
|
+
resetMetrics() {
|
|
156
|
+
this.metrics.clear();
|
|
157
|
+
this.throttleTimers.clear();
|
|
158
|
+
this.frameCounter = 0;
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* Auto-optimize based on current performance
|
|
162
|
+
*/
|
|
163
|
+
autoOptimize(currentOverhead) {
|
|
164
|
+
if (currentOverhead > this.config.targetOverhead * 1.5) {
|
|
165
|
+
this.configure({
|
|
166
|
+
batchSize: Math.max(this.config.batchSize * 2, 50),
|
|
167
|
+
cacheStrategy: "aggressive",
|
|
168
|
+
skipFrames: Math.min(this.config.skipFrames + 1, 3)
|
|
169
|
+
});
|
|
170
|
+
} else if (currentOverhead < this.config.targetOverhead * 0.5) {
|
|
171
|
+
this.configure({
|
|
172
|
+
batchSize: Math.max(Math.floor(this.config.batchSize / 2), 5),
|
|
173
|
+
cacheStrategy: "moderate",
|
|
174
|
+
skipFrames: Math.max(this.config.skipFrames - 1, 0)
|
|
175
|
+
});
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
/**
|
|
179
|
+
* Measure validation overhead
|
|
180
|
+
*/
|
|
181
|
+
measureOverhead(validationFn, iterations = 100) {
|
|
182
|
+
const baselineStart = performance.now();
|
|
183
|
+
const baselineTime = performance.now() - baselineStart;
|
|
184
|
+
const validationStart = performance.now();
|
|
185
|
+
for (let i = 0; i < iterations; i++) {
|
|
186
|
+
validationFn();
|
|
187
|
+
}
|
|
188
|
+
const validationTime = performance.now() - validationStart;
|
|
189
|
+
const overhead = validationTime - baselineTime;
|
|
190
|
+
const overheadPercentage = overhead / validationTime * 100;
|
|
191
|
+
return Math.max(overheadPercentage, 0);
|
|
192
|
+
}
|
|
193
|
+
/**
|
|
194
|
+
* Monitor and report performance continuously
|
|
195
|
+
*/
|
|
196
|
+
startPerformanceMonitoring(intervalMs = 5e3) {
|
|
197
|
+
const interval = setInterval(() => {
|
|
198
|
+
const overhead = this.measureOverhead(() => {
|
|
199
|
+
this.optimizeValidation("monitor-test", () => {
|
|
200
|
+
return Math.random() > 0.5;
|
|
201
|
+
});
|
|
202
|
+
});
|
|
203
|
+
if (overhead > this.config.targetOverhead) {
|
|
204
|
+
this.autoOptimize(overhead);
|
|
205
|
+
validationDebugger.logEvent(
|
|
206
|
+
"performance-warning",
|
|
207
|
+
`Validation overhead: ${overhead.toFixed(1)}% (target: ${this.config.targetOverhead}%)`,
|
|
208
|
+
{ overhead, target: this.config.targetOverhead, actual: overhead }
|
|
209
|
+
);
|
|
210
|
+
}
|
|
211
|
+
}, intervalMs);
|
|
212
|
+
return () => clearInterval(interval);
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
const performanceOptimizer = PerformanceOptimizer.getInstance();
|
|
216
|
+
const PerformanceOptimizationUtils = {
|
|
217
|
+
configure: (config) => performanceOptimizer.configure(config),
|
|
218
|
+
getMetrics: (key) => key ? performanceOptimizer.getMetrics(key) : performanceOptimizer.getAllMetrics(),
|
|
219
|
+
resetMetrics: () => performanceOptimizer.resetMetrics(),
|
|
220
|
+
measureOverhead: (validationFn, iterations) => performanceOptimizer.measureOverhead(validationFn, iterations),
|
|
221
|
+
startMonitoring: (intervalMs) => performanceOptimizer.startPerformanceMonitoring(intervalMs),
|
|
222
|
+
getStats: () => ({
|
|
223
|
+
enabled: performanceOptimizer["config"].enabled,
|
|
224
|
+
targetOverhead: performanceOptimizer["config"].targetOverhead,
|
|
225
|
+
batchSize: performanceOptimizer["config"].batchSize,
|
|
226
|
+
cacheStrategy: performanceOptimizer["config"].cacheStrategy,
|
|
227
|
+
metricsCount: performanceOptimizer.getAllMetrics().size
|
|
228
|
+
})
|
|
229
|
+
};
|
|
230
|
+
class ProductionMonitor {
|
|
231
|
+
static instance;
|
|
232
|
+
bypassCount = 0;
|
|
233
|
+
performanceGain = 0;
|
|
234
|
+
validationTimes = [];
|
|
235
|
+
slowValidations = [];
|
|
236
|
+
static getInstance() {
|
|
237
|
+
if (!this.instance) {
|
|
238
|
+
this.instance = new ProductionMonitor();
|
|
239
|
+
}
|
|
240
|
+
return this.instance;
|
|
241
|
+
}
|
|
242
|
+
/**
|
|
243
|
+
* Record a validation bypass for performance tracking
|
|
244
|
+
*/
|
|
245
|
+
recordBypass(timesSaved) {
|
|
246
|
+
this.bypassCount++;
|
|
247
|
+
this.performanceGain += timesSaved;
|
|
248
|
+
}
|
|
249
|
+
/**
|
|
250
|
+
* Record validation performance
|
|
251
|
+
*/
|
|
252
|
+
recordValidationTime(componentType, duration) {
|
|
253
|
+
this.validationTimes.push(duration);
|
|
254
|
+
if (duration > 5) {
|
|
255
|
+
this.slowValidations.push({ component: componentType, time: duration });
|
|
256
|
+
console.warn(
|
|
257
|
+
`⚠️ Validation overhead: ${duration.toFixed(2)}ms for ${componentType}`
|
|
258
|
+
);
|
|
259
|
+
}
|
|
260
|
+
if (this.validationTimes.length > 100) {
|
|
261
|
+
this.validationTimes = this.validationTimes.slice(-50);
|
|
262
|
+
}
|
|
263
|
+
if (this.slowValidations.length > 20) {
|
|
264
|
+
this.slowValidations = this.slowValidations.slice(-10);
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
/**
|
|
268
|
+
* Get performance statistics
|
|
269
|
+
*/
|
|
270
|
+
getStats() {
|
|
271
|
+
const averageOverhead = this.validationTimes.length > 0 ? this.validationTimes.reduce((sum, time) => sum + time, 0) / this.validationTimes.length : 0;
|
|
272
|
+
return {
|
|
273
|
+
bypassCount: this.bypassCount,
|
|
274
|
+
performanceGain: this.performanceGain,
|
|
275
|
+
averageOverhead,
|
|
276
|
+
slowValidations: [...this.slowValidations]
|
|
277
|
+
};
|
|
278
|
+
}
|
|
279
|
+
/**
|
|
280
|
+
* Reset monitoring statistics
|
|
281
|
+
*/
|
|
282
|
+
reset() {
|
|
283
|
+
this.bypassCount = 0;
|
|
284
|
+
this.performanceGain = 0;
|
|
285
|
+
this.validationTimes = [];
|
|
286
|
+
this.slowValidations = [];
|
|
287
|
+
}
|
|
288
|
+
/**
|
|
289
|
+
* Generate optimization recommendations
|
|
290
|
+
*/
|
|
291
|
+
getRecommendations() {
|
|
292
|
+
const recommendations = [];
|
|
293
|
+
const stats = this.getStats();
|
|
294
|
+
if (stats.averageOverhead > 3) {
|
|
295
|
+
recommendations.push(
|
|
296
|
+
"Consider reducing validation complexity - average overhead is high"
|
|
297
|
+
);
|
|
298
|
+
}
|
|
299
|
+
if (stats.slowValidations.length > 5) {
|
|
300
|
+
recommendations.push(
|
|
301
|
+
"Multiple slow validation operations detected - review component validators"
|
|
302
|
+
);
|
|
303
|
+
}
|
|
304
|
+
if (stats.bypassCount === 0 && process.env.NODE_ENV === "production") {
|
|
305
|
+
recommendations.push(
|
|
306
|
+
"Validation bypass not working - check production build configuration"
|
|
307
|
+
);
|
|
308
|
+
}
|
|
309
|
+
return recommendations;
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
class BundleAnalysis {
|
|
313
|
+
/**
|
|
314
|
+
* Estimate validation code size in bundle
|
|
315
|
+
*/
|
|
316
|
+
static getValidationCodeSize() {
|
|
317
|
+
if (process.env.NODE_ENV === "production") {
|
|
318
|
+
return 0;
|
|
319
|
+
}
|
|
320
|
+
return 15e3;
|
|
321
|
+
}
|
|
322
|
+
/**
|
|
323
|
+
* Generate optimization report
|
|
324
|
+
*/
|
|
325
|
+
static getOptimizationReport() {
|
|
326
|
+
const monitor = ProductionMonitor.getInstance();
|
|
327
|
+
const stats = monitor.getStats();
|
|
328
|
+
const codeSize = this.getValidationCodeSize();
|
|
329
|
+
return {
|
|
330
|
+
validationCodeSize: codeSize,
|
|
331
|
+
performanceGain: stats.performanceGain,
|
|
332
|
+
optimization: codeSize === 0 ? "Fully optimized (tree-shaken)" : "Development mode",
|
|
333
|
+
recommendations: monitor.getRecommendations()
|
|
334
|
+
};
|
|
335
|
+
}
|
|
336
|
+
}
|
|
337
|
+
function devAssert(condition, message, context) {
|
|
338
|
+
if (typeof window !== "undefined" && window.__TACHUI_DEV_MODE__) {
|
|
339
|
+
if (!condition) {
|
|
340
|
+
console.error("TachUI Dev Assertion Failed:", message, context);
|
|
341
|
+
if (context) {
|
|
342
|
+
console.trace("Assertion context:", context);
|
|
343
|
+
}
|
|
344
|
+
throw new Error(`TachUI Dev Assertion: ${message}`);
|
|
345
|
+
}
|
|
346
|
+
}
|
|
347
|
+
}
|
|
348
|
+
function devWarn(condition, message, context) {
|
|
349
|
+
if (typeof window !== "undefined" && window.__TACHUI_DEV_MODE__) {
|
|
350
|
+
if (!condition) {
|
|
351
|
+
console.warn(`TachUI Dev Warning: ${message}`, context);
|
|
352
|
+
if (context) {
|
|
353
|
+
console.trace("Warning context:", context);
|
|
354
|
+
}
|
|
355
|
+
}
|
|
356
|
+
}
|
|
357
|
+
}
|
|
358
|
+
function withPerformanceMonitoring(fn, name, options = {}) {
|
|
359
|
+
const { threshold = 10, logSlow = true, trackStats = true } = options;
|
|
360
|
+
return function monitoredFunction(...args) {
|
|
361
|
+
const start = performance.now();
|
|
362
|
+
const result = fn(...args);
|
|
363
|
+
const end = performance.now();
|
|
364
|
+
const duration = end - start;
|
|
365
|
+
if (trackStats) {
|
|
366
|
+
ProductionMonitor.getInstance().recordValidationTime(name, duration);
|
|
367
|
+
}
|
|
368
|
+
if (logSlow && duration > threshold) {
|
|
369
|
+
console.info(`⏱️ ${name}: ${duration.toFixed(2)}ms`);
|
|
370
|
+
}
|
|
371
|
+
return result;
|
|
372
|
+
};
|
|
373
|
+
}
|
|
374
|
+
function withMonitoredValidation(originalConstructor, componentType, validator) {
|
|
375
|
+
return function monitoredComponent(...args) {
|
|
376
|
+
const startTime = performance.now();
|
|
377
|
+
if (validator) {
|
|
378
|
+
try {
|
|
379
|
+
validator(args);
|
|
380
|
+
} catch (error) {
|
|
381
|
+
console.error(`Validation failed for ${componentType}:`, error);
|
|
382
|
+
throw error;
|
|
383
|
+
}
|
|
384
|
+
}
|
|
385
|
+
const result = originalConstructor.apply(this, args);
|
|
386
|
+
const endTime = performance.now();
|
|
387
|
+
const duration = endTime - startTime;
|
|
388
|
+
ProductionMonitor.getInstance().recordValidationTime(
|
|
389
|
+
componentType,
|
|
390
|
+
duration
|
|
391
|
+
);
|
|
392
|
+
return result;
|
|
393
|
+
};
|
|
394
|
+
}
|
|
395
|
+
const DevConstants = {
|
|
396
|
+
__DEVELOPMENT_ONLY__: process.env.NODE_ENV !== "production",
|
|
397
|
+
__TACHUI_VERSION__: "0.1.0",
|
|
398
|
+
// Define globals for bundlers to replace
|
|
399
|
+
defineGlobals: {
|
|
400
|
+
__TACHUI_PRODUCTION_MODE__: process.env.NODE_ENV === "production",
|
|
401
|
+
__TACHUI_DEBUG_INFO__: process.env.NODE_ENV !== "production"
|
|
402
|
+
}
|
|
403
|
+
};
|
|
404
|
+
const ProductionOptimizationUtils = {
|
|
405
|
+
/**
|
|
406
|
+
* Get detailed performance statistics
|
|
407
|
+
*/
|
|
408
|
+
getDetailedStats: () => {
|
|
409
|
+
const monitor = ProductionMonitor.getInstance();
|
|
410
|
+
return {
|
|
411
|
+
...monitor.getStats(),
|
|
412
|
+
recommendations: monitor.getRecommendations(),
|
|
413
|
+
bundleReport: BundleAnalysis.getOptimizationReport()
|
|
414
|
+
};
|
|
415
|
+
},
|
|
416
|
+
/**
|
|
417
|
+
* Reset monitoring data
|
|
418
|
+
*/
|
|
419
|
+
resetStats: () => ProductionMonitor.getInstance().reset(),
|
|
420
|
+
/**
|
|
421
|
+
* Get bundle optimization report
|
|
422
|
+
*/
|
|
423
|
+
getBundleReport: BundleAnalysis.getOptimizationReport,
|
|
424
|
+
/**
|
|
425
|
+
* Test production optimization with detailed reporting
|
|
426
|
+
*/
|
|
427
|
+
test() {
|
|
428
|
+
console.group("🚀 Production Optimization Analysis");
|
|
429
|
+
const stats = ProductionMonitor.getInstance().getStats();
|
|
430
|
+
const report = BundleAnalysis.getOptimizationReport();
|
|
431
|
+
console.info("📊 Performance Statistics:");
|
|
432
|
+
console.info(" • Validation bypasses:", stats.bypassCount);
|
|
433
|
+
console.info(
|
|
434
|
+
" • Performance gain:",
|
|
435
|
+
`${stats.performanceGain.toFixed(2)}ms`
|
|
436
|
+
);
|
|
437
|
+
console.info(
|
|
438
|
+
" • Average overhead:",
|
|
439
|
+
`${stats.averageOverhead.toFixed(2)}ms`
|
|
440
|
+
);
|
|
441
|
+
console.info(" • Slow validations:", stats.slowValidations.length);
|
|
442
|
+
console.info("📦 Bundle Optimization:");
|
|
443
|
+
console.info(" • Bundle status:", report.optimization);
|
|
444
|
+
console.info(
|
|
445
|
+
" • Validation code size:",
|
|
446
|
+
report.validationCodeSize === 0 ? "Tree-shaken ✅" : `${report.validationCodeSize} bytes`
|
|
447
|
+
);
|
|
448
|
+
if (report.recommendations.length > 0) {
|
|
449
|
+
console.info("💡 Optimization Recommendations:");
|
|
450
|
+
report.recommendations.forEach((rec) => console.info(` • ${rec}`));
|
|
451
|
+
} else {
|
|
452
|
+
console.info(
|
|
453
|
+
"✅ No optimization recommendations - system is running efficiently"
|
|
454
|
+
);
|
|
455
|
+
}
|
|
456
|
+
if (stats.slowValidations.length > 0) {
|
|
457
|
+
console.info("⚠️ Slow Validations:");
|
|
458
|
+
stats.slowValidations.forEach(
|
|
459
|
+
(slow) => console.info(` • ${slow.component}: ${slow.time.toFixed(2)}ms`)
|
|
460
|
+
);
|
|
461
|
+
}
|
|
462
|
+
console.groupEnd();
|
|
463
|
+
},
|
|
464
|
+
/**
|
|
465
|
+
* Start continuous monitoring
|
|
466
|
+
*/
|
|
467
|
+
startMonitoring(intervalMs = 3e4) {
|
|
468
|
+
const monitor = ProductionMonitor.getInstance();
|
|
469
|
+
const interval = setInterval(() => {
|
|
470
|
+
const stats = monitor.getStats();
|
|
471
|
+
if (stats.slowValidations.length > 0) {
|
|
472
|
+
console.warn(
|
|
473
|
+
"⚠️ TachUI Performance Alert: Slow validation operations detected"
|
|
474
|
+
);
|
|
475
|
+
}
|
|
476
|
+
}, intervalMs);
|
|
477
|
+
console.info("🔍 TachUI production monitoring started");
|
|
478
|
+
return () => {
|
|
479
|
+
clearInterval(interval);
|
|
480
|
+
console.info("🔍 TachUI production monitoring stopped");
|
|
481
|
+
};
|
|
482
|
+
}
|
|
483
|
+
};
|
|
484
|
+
const PerformanceProfiler = {
|
|
485
|
+
initialize: (config) => {
|
|
486
|
+
console.log("PerformanceProfiler initialized with config:", config);
|
|
487
|
+
}
|
|
488
|
+
};
|
|
489
|
+
const RenderProfiler = {
|
|
490
|
+
wrap: (component, _config) => component
|
|
491
|
+
};
|
|
492
|
+
const MemoryProfiler = {
|
|
493
|
+
startMonitoring: (config) => {
|
|
494
|
+
console.log("MemoryProfiler started with config:", config);
|
|
495
|
+
}
|
|
496
|
+
};
|
|
497
|
+
const BundleAnalyzer = {
|
|
498
|
+
analyze: () => {
|
|
499
|
+
console.log("Bundle analysis started");
|
|
500
|
+
}
|
|
501
|
+
};
|
|
502
|
+
export {
|
|
503
|
+
BundleAnalysis,
|
|
504
|
+
BundleAnalyzer,
|
|
505
|
+
DevConstants,
|
|
506
|
+
MemoryProfiler,
|
|
507
|
+
PerformanceOptimizationUtils,
|
|
508
|
+
PerformanceOptimizer,
|
|
509
|
+
PerformanceProfiler,
|
|
510
|
+
ProductionMonitor,
|
|
511
|
+
ProductionOptimizationUtils,
|
|
512
|
+
RenderProfiler,
|
|
513
|
+
devAssert,
|
|
514
|
+
devWarn,
|
|
515
|
+
performanceOptimizer,
|
|
516
|
+
withMonitoredValidation,
|
|
517
|
+
withPerformanceMonitoring
|
|
518
|
+
};
|
|
519
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../src/profiler/performance-optimizer.ts","../../src/profiler/production-monitoring.ts","../../src/profiler/index.ts"],"sourcesContent":["/**\n * Performance Optimization System - Phase 1C\n *\n * Advanced performance optimizations to reduce validation overhead\n * to <5% impact in development mode with smart caching and batching.\n */\n\n// Note: ProductionModeManager import will need to be handled differently in devtools\n// For now, we'll create a local interface\ninterface ProductionModeManager {\n isEnabled: () => boolean\n}\n\n// Simple production mode check - in devtools we assume development mode\nconst ProductionModeManager: ProductionModeManager = {\n isEnabled: () => false,\n}\n\n// Debug tools are available in devtools package\nconst validationDebugger = {\n logEvent: (type: string, message: string, data?: any) => {\n if (typeof console !== 'undefined') {\n console.log(`[ValidationDebugger] ${type}: ${message}`, data)\n }\n },\n}\n\n/**\n * Performance optimization configuration\n */\nexport interface PerformanceOptimizerConfig {\n enabled: boolean\n targetOverhead: number // percentage (5 = 5%)\n batchSize: number\n cacheStrategy: 'aggressive' | 'moderate' | 'conservative'\n asyncValidation: boolean\n throttleMs: number\n skipFrames: number // Skip validation every N frames\n}\n\n/**\n * Validation operation metrics\n */\nexport interface ValidationMetrics {\n operationCount: number\n totalTime: number\n averageTime: number\n maxTime: number\n cacheHitRate: number\n skipRate: number\n}\n\n/**\n * Performance optimization engine\n */\nexport class PerformanceOptimizer {\n private static instance: PerformanceOptimizer\n private config: PerformanceOptimizerConfig\n private metrics = new Map<string, ValidationMetrics>()\n private operationQueue: Array<() => void> = []\n private frameCounter = 0\n private lastBatchTime = 0\n private throttleTimers = new Map<string, number>()\n\n private defaultConfig: PerformanceOptimizerConfig = {\n enabled: true,\n targetOverhead: 5, // 5% overhead target\n batchSize: 10,\n cacheStrategy: 'moderate',\n asyncValidation: true,\n throttleMs: 16, // ~60fps\n skipFrames: 0,\n }\n\n constructor(config: Partial<PerformanceOptimizerConfig> = {}) {\n this.config = { ...this.defaultConfig, ...config }\n\n // Disable in production\n if (ProductionModeManager.isEnabled()) {\n this.config.enabled = false\n }\n }\n\n static getInstance(\n config?: Partial<PerformanceOptimizerConfig>\n ): PerformanceOptimizer {\n if (!this.instance) {\n this.instance = new PerformanceOptimizer(config)\n }\n return this.instance\n }\n\n configure(config: Partial<PerformanceOptimizerConfig>): void {\n this.config = { ...this.config, ...config }\n }\n\n /**\n * Optimize a validation operation with smart batching and caching\n */\n optimizeValidation<T>(\n key: string,\n operation: () => T,\n _skipCache = false\n ): T {\n if (!this.config.enabled) {\n return operation()\n }\n\n // Skip validation based on frame counting\n if (this.shouldSkipFrame()) {\n return operation() // Still run but don't optimize\n }\n\n // Check throttling\n if (this.isThrottled(key)) {\n return operation() // Return cached result or run operation\n }\n\n const startTime = performance.now()\n\n try {\n const result = operation()\n this.recordMetrics(key, performance.now() - startTime, true)\n return result\n } catch (error) {\n this.recordMetrics(key, performance.now() - startTime, false)\n throw error\n }\n }\n\n /**\n * Batch validation operations for better performance\n */\n batchValidations(operations: Array<() => void>): void {\n if (!this.config.enabled) {\n operations.forEach(op => op())\n return\n }\n\n // Add to queue\n this.operationQueue.push(...operations)\n\n // Process if batch size reached or enough time passed\n const now = Date.now()\n if (\n this.operationQueue.length >= this.config.batchSize ||\n now - this.lastBatchTime > this.config.throttleMs\n ) {\n this.processBatch()\n this.lastBatchTime = now\n }\n }\n\n /**\n * Process queued validation operations\n */\n private processBatch(): void {\n const batch = this.operationQueue.splice(0, this.config.batchSize)\n\n if (this.config.asyncValidation) {\n // Process asynchronously to avoid blocking\n setTimeout(() => {\n batch.forEach(op => {\n try {\n op()\n } catch (error) {\n console.warn('Batch validation error:', error)\n }\n })\n }, 0)\n } else {\n // Process synchronously\n batch.forEach(op => {\n try {\n op()\n } catch (error) {\n console.warn('Batch validation error:', error)\n }\n })\n }\n }\n\n /**\n * Check if validation should be skipped this frame\n */\n private shouldSkipFrame(): boolean {\n if (this.config.skipFrames === 0) return false\n\n this.frameCounter++\n return this.frameCounter % (this.config.skipFrames + 1) !== 0\n }\n\n /**\n * Check if operation is currently throttled\n */\n private isThrottled(key: string): boolean {\n const lastTime = this.throttleTimers.get(key)\n const now = Date.now()\n\n if (!lastTime || now - lastTime > this.config.throttleMs) {\n this.throttleTimers.set(key, now)\n return false\n }\n\n return true\n }\n\n /**\n * Record performance metrics\n */\n private recordMetrics(\n key: string,\n duration: number,\n _success: boolean\n ): void {\n const existing = this.metrics.get(key) || {\n operationCount: 0,\n totalTime: 0,\n averageTime: 0,\n maxTime: 0,\n cacheHitRate: 0,\n skipRate: 0,\n }\n\n existing.operationCount++\n existing.totalTime += duration\n existing.averageTime = existing.totalTime / existing.operationCount\n existing.maxTime = Math.max(existing.maxTime, duration)\n\n this.metrics.set(key, existing)\n }\n\n /**\n * Get performance metrics for a specific operation\n */\n getMetrics(key: string): ValidationMetrics | undefined {\n return this.metrics.get(key)\n }\n\n /**\n * Get all performance metrics\n */\n getAllMetrics(): Map<string, ValidationMetrics> {\n return new Map(this.metrics)\n }\n\n /**\n * Reset all metrics\n */\n resetMetrics(): void {\n this.metrics.clear()\n this.throttleTimers.clear()\n this.frameCounter = 0\n }\n\n /**\n * Auto-optimize based on current performance\n */\n autoOptimize(currentOverhead: number): void {\n if (currentOverhead > this.config.targetOverhead * 1.5) {\n // Aggressive optimization\n this.configure({\n batchSize: Math.max(this.config.batchSize * 2, 50),\n cacheStrategy: 'aggressive',\n skipFrames: Math.min(this.config.skipFrames + 1, 3),\n })\n } else if (currentOverhead < this.config.targetOverhead * 0.5) {\n // Relax optimization\n this.configure({\n batchSize: Math.max(Math.floor(this.config.batchSize / 2), 5),\n cacheStrategy: 'moderate',\n skipFrames: Math.max(this.config.skipFrames - 1, 0),\n })\n }\n }\n\n /**\n * Measure validation overhead\n */\n measureOverhead(validationFn: () => void, iterations = 100): number {\n // Baseline measurement (no validation)\n const baselineStart = performance.now()\n for (let i = 0; i < iterations; i++) {\n // Empty loop\n }\n const baselineTime = performance.now() - baselineStart\n\n // Validation measurement\n const validationStart = performance.now()\n for (let i = 0; i < iterations; i++) {\n validationFn()\n }\n const validationTime = performance.now() - validationStart\n\n // Calculate overhead percentage\n const overhead = validationTime - baselineTime\n const overheadPercentage = (overhead / validationTime) * 100\n\n return Math.max(overheadPercentage, 0)\n }\n\n /**\n * Monitor and report performance continuously\n */\n startPerformanceMonitoring(intervalMs = 5000): () => void {\n const interval = setInterval(() => {\n const overhead = this.measureOverhead(() => {\n // Simulate typical validation operations\n this.optimizeValidation('monitor-test', () => {\n return Math.random() > 0.5\n })\n })\n\n if (overhead > this.config.targetOverhead) {\n // Automatically adjust optimization settings\n this.autoOptimize(overhead)\n\n validationDebugger.logEvent(\n 'performance-warning',\n `Validation overhead: ${overhead.toFixed(1)}% (target: ${this.config.targetOverhead}%)`,\n { overhead, target: this.config.targetOverhead, actual: overhead }\n )\n }\n }, intervalMs)\n\n return () => clearInterval(interval)\n }\n}\n\n/**\n * Global performance optimizer instance\n */\nexport const performanceOptimizer = PerformanceOptimizer.getInstance()\n\n/**\n * Performance optimization utilities\n */\nexport const PerformanceOptimizationUtils = {\n configure: (config: Partial<PerformanceOptimizerConfig>) =>\n performanceOptimizer.configure(config),\n\n getMetrics: (key?: string) =>\n key\n ? performanceOptimizer.getMetrics(key)\n : performanceOptimizer.getAllMetrics(),\n\n resetMetrics: () => performanceOptimizer.resetMetrics(),\n\n measureOverhead: (validationFn: () => void, iterations?: number) =>\n performanceOptimizer.measureOverhead(validationFn, iterations),\n\n startMonitoring: (intervalMs?: number) =>\n performanceOptimizer.startPerformanceMonitoring(intervalMs),\n\n getStats: () => ({\n enabled: performanceOptimizer['config'].enabled,\n targetOverhead: performanceOptimizer['config'].targetOverhead,\n batchSize: performanceOptimizer['config'].batchSize,\n cacheStrategy: performanceOptimizer['config'].cacheStrategy,\n metricsCount: performanceOptimizer.getAllMetrics().size,\n }),\n}\n","/**\n * Production Mode Monitoring and Analysis\n *\n * Development tools for monitoring production optimization effectiveness,\n * performance tracking, and bundle analysis.\n *\n * Moved from @tachui/core for proper separation of dev vs production concerns.\n */\n\n/**\n * Enhanced production configuration with debugging\n */\nexport interface EnhancedProductionConfig {\n enabled: boolean\n mode: 'development' | 'production' | 'test'\n optimizationLevel: 'none' | 'basic' | 'aggressive'\n debugInfo: boolean\n}\n\n/**\n * Performance statistics for production optimization\n */\ninterface PerformanceStats {\n bypassCount: number\n performanceGain: number\n averageOverhead: number\n slowValidations: Array<{ component: string; time: number }>\n}\n\n/**\n * Bundle analysis report\n */\ninterface BundleOptimizationReport {\n validationCodeSize: number\n performanceGain: number\n optimization: string\n recommendations: string[]\n}\n\n/**\n * Production monitoring and analysis\n */\nexport class ProductionMonitor {\n private static instance: ProductionMonitor\n private bypassCount = 0\n private performanceGain = 0\n private validationTimes: number[] = []\n private slowValidations: Array<{ component: string; time: number }> = []\n\n static getInstance(): ProductionMonitor {\n if (!this.instance) {\n this.instance = new ProductionMonitor()\n }\n return this.instance\n }\n\n /**\n * Record a validation bypass for performance tracking\n */\n recordBypass(timesSaved: number): void {\n this.bypassCount++\n this.performanceGain += timesSaved\n }\n\n /**\n * Record validation performance\n */\n recordValidationTime(componentType: string, duration: number): void {\n this.validationTimes.push(duration)\n\n if (duration > 5) {\n // More than 5ms is concerning\n this.slowValidations.push({ component: componentType, time: duration })\n console.warn(\n `⚠️ Validation overhead: ${duration.toFixed(2)}ms for ${componentType}`\n )\n }\n\n // Keep only recent measurements\n if (this.validationTimes.length > 100) {\n this.validationTimes = this.validationTimes.slice(-50)\n }\n\n if (this.slowValidations.length > 20) {\n this.slowValidations = this.slowValidations.slice(-10)\n }\n }\n\n /**\n * Get performance statistics\n */\n getStats(): PerformanceStats {\n const averageOverhead =\n this.validationTimes.length > 0\n ? this.validationTimes.reduce((sum, time) => sum + time, 0) /\n this.validationTimes.length\n : 0\n\n return {\n bypassCount: this.bypassCount,\n performanceGain: this.performanceGain,\n averageOverhead,\n slowValidations: [...this.slowValidations],\n }\n }\n\n /**\n * Reset monitoring statistics\n */\n reset(): void {\n this.bypassCount = 0\n this.performanceGain = 0\n this.validationTimes = []\n this.slowValidations = []\n }\n\n /**\n * Generate optimization recommendations\n */\n getRecommendations(): string[] {\n const recommendations: string[] = []\n const stats = this.getStats()\n\n if (stats.averageOverhead > 3) {\n recommendations.push(\n 'Consider reducing validation complexity - average overhead is high'\n )\n }\n\n if (stats.slowValidations.length > 5) {\n recommendations.push(\n 'Multiple slow validation operations detected - review component validators'\n )\n }\n\n if (stats.bypassCount === 0 && process.env.NODE_ENV === 'production') {\n recommendations.push(\n 'Validation bypass not working - check production build configuration'\n )\n }\n\n return recommendations\n }\n}\n\n/**\n * Bundle size analysis\n */\nexport class BundleAnalysis {\n /**\n * Estimate validation code size in bundle\n */\n static getValidationCodeSize(): number {\n // This is a rough estimate - in practice this would be more sophisticated\n if (process.env.NODE_ENV === 'production') {\n return 0 // Should be tree-shaken in production\n }\n\n // Rough estimate of validation code size in development\n return 15000 // ~15KB estimated validation code size\n }\n\n /**\n * Generate optimization report\n */\n static getOptimizationReport(): BundleOptimizationReport {\n const monitor = ProductionMonitor.getInstance()\n const stats = monitor.getStats()\n const codeSize = this.getValidationCodeSize()\n\n return {\n validationCodeSize: codeSize,\n performanceGain: stats.performanceGain,\n optimization:\n codeSize === 0 ? 'Fully optimized (tree-shaken)' : 'Development mode',\n recommendations: monitor.getRecommendations(),\n }\n }\n}\n\n/**\n * Development-only assertion macro with detailed reporting\n */\nexport function devAssert(\n condition: boolean,\n message: string,\n context?: any\n): void {\n if (typeof window !== 'undefined' && (window as any).__TACHUI_DEV_MODE__) {\n if (!condition) {\n console.error('TachUI Dev Assertion Failed:', message, context)\n if (context) {\n console.trace('Assertion context:', context)\n }\n throw new Error(`TachUI Dev Assertion: ${message}`)\n }\n }\n}\n\n/**\n * Development-only warning macro with enhanced reporting\n */\nexport function devWarn(\n condition: boolean,\n message: string,\n context?: any\n): void {\n if (typeof window !== 'undefined' && (window as any).__TACHUI_DEV_MODE__) {\n if (!condition) {\n console.warn(`TachUI Dev Warning: ${message}`, context)\n if (context) {\n console.trace('Warning context:', context)\n }\n }\n }\n}\n\n/**\n * Enhanced performance monitoring wrapper\n */\nexport function withPerformanceMonitoring<T extends (...args: any[]) => any>(\n fn: T,\n name: string,\n options: {\n threshold?: number\n logSlow?: boolean\n trackStats?: boolean\n } = {}\n): T {\n const { threshold = 10, logSlow = true, trackStats = true } = options\n\n return function monitoredFunction(...args: any[]): ReturnType<T> {\n const start = performance.now()\n const result = fn(...args)\n const end = performance.now()\n\n const duration = end - start\n\n if (trackStats) {\n ProductionMonitor.getInstance().recordValidationTime(name, duration)\n }\n\n if (logSlow && duration > threshold) {\n console.info(`⏱️ ${name}: ${duration.toFixed(2)}ms`)\n }\n\n return result\n } as T\n}\n\n/**\n * Component validation wrapper with performance monitoring\n */\nexport function withMonitoredValidation<T extends (...args: any[]) => any>(\n originalConstructor: T,\n componentType: string,\n validator?: (args: unknown[]) => void\n): T {\n return function monitoredComponent(this: any, ...args: unknown[]): T {\n const startTime = performance.now()\n\n // Run validation with monitoring\n if (validator) {\n try {\n validator(args)\n } catch (error) {\n console.error(`Validation failed for ${componentType}:`, error)\n throw error\n }\n }\n\n const result = originalConstructor.apply(this, args as any)\n const endTime = performance.now()\n\n // Record performance\n const duration = endTime - startTime\n ProductionMonitor.getInstance().recordValidationTime(\n componentType,\n duration\n )\n\n return result\n } as T\n}\n\n/**\n * Development build constants (for tree-shaking)\n */\nexport const DevConstants = {\n __DEVELOPMENT_ONLY__: process.env.NODE_ENV !== 'production',\n __TACHUI_VERSION__: '0.1.0',\n\n // Define globals for bundlers to replace\n defineGlobals: {\n __TACHUI_PRODUCTION_MODE__: process.env.NODE_ENV === 'production',\n __TACHUI_DEBUG_INFO__: process.env.NODE_ENV !== 'production',\n },\n}\n\n/**\n * Production optimization utilities with monitoring\n */\nexport const ProductionOptimizationUtils = {\n /**\n * Get detailed performance statistics\n */\n getDetailedStats: () => {\n const monitor = ProductionMonitor.getInstance()\n return {\n ...monitor.getStats(),\n recommendations: monitor.getRecommendations(),\n bundleReport: BundleAnalysis.getOptimizationReport(),\n }\n },\n\n /**\n * Reset monitoring data\n */\n resetStats: () => ProductionMonitor.getInstance().reset(),\n\n /**\n * Get bundle optimization report\n */\n getBundleReport: BundleAnalysis.getOptimizationReport,\n\n /**\n * Test production optimization with detailed reporting\n */\n test(): void {\n console.group('🚀 Production Optimization Analysis')\n\n const stats = ProductionMonitor.getInstance().getStats()\n const report = BundleAnalysis.getOptimizationReport()\n\n console.info('📊 Performance Statistics:')\n console.info(' • Validation bypasses:', stats.bypassCount)\n console.info(\n ' • Performance gain:',\n `${stats.performanceGain.toFixed(2)}ms`\n )\n console.info(\n ' • Average overhead:',\n `${stats.averageOverhead.toFixed(2)}ms`\n )\n console.info(' • Slow validations:', stats.slowValidations.length)\n\n console.info('📦 Bundle Optimization:')\n console.info(' • Bundle status:', report.optimization)\n console.info(\n ' • Validation code size:',\n report.validationCodeSize === 0\n ? 'Tree-shaken ✅'\n : `${report.validationCodeSize} bytes`\n )\n\n if (report.recommendations.length > 0) {\n console.info('💡 Optimization Recommendations:')\n report.recommendations.forEach(rec => console.info(` • ${rec}`))\n } else {\n console.info(\n '✅ No optimization recommendations - system is running efficiently'\n )\n }\n\n if (stats.slowValidations.length > 0) {\n console.info('⚠️ Slow Validations:')\n stats.slowValidations.forEach(slow =>\n console.info(` • ${slow.component}: ${slow.time.toFixed(2)}ms`)\n )\n }\n\n console.groupEnd()\n },\n\n /**\n * Start continuous monitoring\n */\n startMonitoring(intervalMs = 30000): () => void {\n const monitor = ProductionMonitor.getInstance()\n\n const interval = setInterval(() => {\n const stats = monitor.getStats()\n if (stats.slowValidations.length > 0) {\n console.warn(\n '⚠️ TachUI Performance Alert: Slow validation operations detected'\n )\n }\n }, intervalMs)\n\n console.info('🔍 TachUI production monitoring started')\n\n return () => {\n clearInterval(interval)\n console.info('🔍 TachUI production monitoring stopped')\n }\n },\n}\n","/**\n * Performance Profiling System\n *\n * Provides runtime performance monitoring, component render profiling,\n * memory usage tracking, and bundle size analysis.\n */\n\n// Placeholder implementation - to be expanded based on design document\nexport const PerformanceProfiler = {\n initialize: (config: any) => {\n console.log('PerformanceProfiler initialized with config:', config)\n },\n}\n\nexport const RenderProfiler = {\n wrap: (component: any, _config: any) => component,\n}\n\nexport const MemoryProfiler = {\n startMonitoring: (config: any) => {\n console.log('MemoryProfiler started with config:', config)\n },\n}\n\nexport const BundleAnalyzer = {\n analyze: () => {\n console.log('Bundle analysis started')\n },\n}\n\n// Export the performance optimizer that was moved from core\nexport * from './performance-optimizer'\n\n// Export production monitoring tools\nexport * from './production-monitoring'\n"],"names":[],"mappings":"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"}
|