@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.
Files changed (75) hide show
  1. package/LICENSE +363 -0
  2. package/README.md +189 -0
  3. package/dist/build-time/detection.d.ts +32 -0
  4. package/dist/build-time/detection.d.ts.map +1 -0
  5. package/dist/build-time/index.d.ts +84 -0
  6. package/dist/build-time/index.d.ts.map +1 -0
  7. package/dist/build-time/plugins.d.ts +75 -0
  8. package/dist/build-time/plugins.d.ts.map +1 -0
  9. package/dist/build-time/rules.d.ts +73 -0
  10. package/dist/build-time/rules.d.ts.map +1 -0
  11. package/dist/build-time/transformer.d.ts +23 -0
  12. package/dist/build-time/transformer.d.ts.map +1 -0
  13. package/dist/build-time/types.d.ts +212 -0
  14. package/dist/build-time/types.d.ts.map +1 -0
  15. package/dist/debug/advanced-debugging.d.ts +327 -0
  16. package/dist/debug/advanced-debugging.d.ts.map +1 -0
  17. package/dist/debug/debug.d.ts +61 -0
  18. package/dist/debug/debug.d.ts.map +1 -0
  19. package/dist/debug/developer-experience.d.ts +261 -0
  20. package/dist/debug/developer-experience.d.ts.map +1 -0
  21. package/dist/debug/development-warnings.d.ts +42 -0
  22. package/dist/debug/development-warnings.d.ts.map +1 -0
  23. package/dist/debug/documentation-integration.d.ts +269 -0
  24. package/dist/debug/documentation-integration.d.ts.map +1 -0
  25. package/dist/debug/enhanced-errors.d.ts +176 -0
  26. package/dist/debug/enhanced-errors.d.ts.map +1 -0
  27. package/dist/debug/enhanced-types.d.ts +284 -0
  28. package/dist/debug/enhanced-types.d.ts.map +1 -0
  29. package/dist/debug/ide-integration.d.ts +328 -0
  30. package/dist/debug/ide-integration.d.ts.map +1 -0
  31. package/dist/debug/index.d.ts +12 -0
  32. package/dist/debug/index.d.ts.map +1 -0
  33. package/dist/debug/index.js +1251 -0
  34. package/dist/debug/index.js.map +1 -0
  35. package/dist/debug/validation-debug-tools.d.ts +228 -0
  36. package/dist/debug/validation-debug-tools.d.ts.map +1 -0
  37. package/dist/index.d.ts +22 -0
  38. package/dist/index.d.ts.map +1 -0
  39. package/dist/index.js +216229 -0
  40. package/dist/index.js.map +1 -0
  41. package/dist/inspector/index.d.ts +232 -0
  42. package/dist/inspector/index.d.ts.map +1 -0
  43. package/dist/inspector/index.js +525 -0
  44. package/dist/inspector/index.js.map +1 -0
  45. package/dist/plugins/simplified-error-handler.d.ts +83 -0
  46. package/dist/plugins/simplified-error-handler.d.ts.map +1 -0
  47. package/dist/profiler/index.d.ts +21 -0
  48. package/dist/profiler/index.d.ts.map +1 -0
  49. package/dist/profiler/index.js +519 -0
  50. package/dist/profiler/index.js.map +1 -0
  51. package/dist/profiler/performance-optimizer.d.ts +115 -0
  52. package/dist/profiler/performance-optimizer.d.ts.map +1 -0
  53. package/dist/profiler/production-monitoring.d.ts +150 -0
  54. package/dist/profiler/production-monitoring.d.ts.map +1 -0
  55. package/dist/runtime/error-boundary.d.ts +302 -0
  56. package/dist/runtime/error-boundary.d.ts.map +1 -0
  57. package/dist/runtime/error-recovery.d.ts +267 -0
  58. package/dist/runtime/error-recovery.d.ts.map +1 -0
  59. package/dist/runtime/error-reporting.d.ts +287 -0
  60. package/dist/runtime/error-reporting.d.ts.map +1 -0
  61. package/dist/runtime/error-utils.d.ts +204 -0
  62. package/dist/runtime/error-utils.d.ts.map +1 -0
  63. package/dist/runtime/performance.d.ts +217 -0
  64. package/dist/runtime/performance.d.ts.map +1 -0
  65. package/dist/testing/index.d.ts +29 -0
  66. package/dist/testing/index.d.ts.map +1 -0
  67. package/dist/testing/index.js +47 -0
  68. package/dist/testing/index.js.map +1 -0
  69. package/dist/validation/debug-tools-stub.d.ts +67 -0
  70. package/dist/validation/debug-tools-stub.d.ts.map +1 -0
  71. package/dist/validation/enhanced-runtime.d.ts +310 -0
  72. package/dist/validation/enhanced-runtime.d.ts.map +1 -0
  73. package/dist/validation/error-reporting.d.ts +186 -0
  74. package/dist/validation/error-reporting.d.ts.map +1 -0
  75. 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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"}