@coherent.js/devtools 1.0.0-beta.3 → 1.0.0-beta.6
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 +23 -0
- package/dist/index.js +1238 -23
- package/dist/index.js.map +4 -4
- package/package.json +47 -8
- package/types/index.d.ts +389 -27
package/dist/index.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["../src/inspector.js", "../src/profiler.js", "../src/logger.js", "../src/dev-tools.js", "../src/
|
|
4
|
-
"sourcesContent": ["/**\n * Coherent.js Component Inspector\n * \n * Provides tools for inspecting component structure, props, and state\n * \n * @module devtools/inspector\n */\n\n/**\n * Component Inspector\n * Analyzes and provides insights into component structure\n */\nexport class ComponentInspector {\n constructor(options = {}) {\n this.options = {\n trackHistory: true,\n maxHistory: 100,\n verbose: false,\n ...options\n };\n \n this.components = new Map();\n this.history = [];\n this.inspectionCount = 0;\n }\n\n /**\n * Inspect a component\n * \n * @param {Object} component - Component to inspect\n * @param {Object} [metadata] - Additional metadata\n * @returns {Object} Inspection result\n */\n inspect(component, metadata = {}) {\n this.inspectionCount++;\n \n const startTime = performance.now();\n const analysis = this.analyzeComponent(component);\n const tree = this.buildComponentTree(component);\n const stats = this.calculateStats(component);\n const endTime = performance.now();\n \n const inspection = {\n id: this.generateId(),\n timestamp: Date.now(),\n inspectionTime: endTime - startTime,\n component,\n metadata,\n // Flatten analysis results to top level for easier access\n type: analysis.type,\n structure: component,\n props: this.extractProps(component),\n depth: stats.depth || 0, // Use stats.depth, not tree.depth\n childCount: stats.elementCount || 0,\n complexity: stats.complexity || 0,\n nodeCount: stats.nodeCount || 0,\n // Keep nested data for detailed inspection\n analysis,\n tree,\n stats,\n valid: analysis.valid,\n issues: analysis.issues || [],\n errors: analysis.issues || [], // Alias for compatibility\n warnings: analysis.warnings || []\n };\n\n // Track in history\n if (this.options.trackHistory) {\n this.history.push(inspection);\n \n // Limit history size\n if (this.history.length > this.options.maxHistory) {\n this.history.shift();\n }\n }\n\n // Store component\n this.components.set(inspection.id, inspection);\n\n if (this.options.verbose) {\n console.log('[Inspector] Component inspected:', inspection.id);\n }\n\n return inspection;\n }\n\n /**\n * Extract props from component\n */\n extractProps(component) {\n const props = [];\n \n if (!component || typeof component !== 'object') {\n return props;\n }\n \n Object.keys(component).forEach(key => {\n const element = component[key];\n if (element && typeof element === 'object') {\n Object.keys(element).forEach(prop => {\n if (!props.includes(prop) && prop !== 'children' && prop !== 'text') {\n props.push(prop);\n }\n });\n }\n });\n \n return props;\n }\n\n /**\n * Analyze component structure\n */\n analyzeComponent(component) {\n if (!component || typeof component !== 'object') {\n return {\n type: typeof component,\n valid: false,\n issues: ['Component is not an object']\n };\n }\n\n const issues = [];\n const warnings = [];\n const info = [];\n const seen = new WeakSet();\n\n // Check for circular references\n const checkCircular = (obj, path = []) => {\n if (obj === null || typeof obj !== 'object') {\n return;\n }\n\n if (seen.has(obj)) {\n warnings.push(`circular reference detected at ${path.join('.')}`);\n return;\n }\n\n seen.add(obj);\n\n if (Array.isArray(obj)) {\n obj.forEach((item, index) => checkCircular(item, [...path, `[${index}]`]));\n } else {\n Object.keys(obj).forEach(key => {\n checkCircular(obj[key], [...path, key]);\n });\n }\n };\n\n checkCircular(component, ['root']);\n\n // Check component structure\n const keys = Object.keys(component);\n \n if (keys.length === 0) {\n issues.push('Component is empty');\n }\n\n if (keys.length > 1) {\n warnings.push('Component has multiple root elements');\n }\n\n // Analyze each element\n keys.forEach(key => {\n const element = component[key];\n \n if (typeof element === 'object' && element !== null) {\n // Check for common issues\n if (element.children && !Array.isArray(element.children)) {\n issues.push(`Children of ${key} should be an array`);\n }\n\n if (element.className && typeof element.className !== 'string') {\n warnings.push(`className of ${key} should be a string`);\n }\n\n if (element.style && typeof element.style !== 'object') {\n warnings.push(`style of ${key} should be an object`);\n }\n\n // Check for event handlers\n const eventHandlers = Object.keys(element).filter(k => k.startsWith('on'));\n if (eventHandlers.length > 0) {\n info.push(`${key} has ${eventHandlers.length} event handler(s): ${eventHandlers.join(', ')}`);\n }\n }\n });\n\n return {\n type: 'component',\n valid: issues.length === 0,\n rootElements: keys,\n issues,\n warnings,\n info\n };\n }\n\n /**\n * Build component tree structure\n */\n buildComponentTree(component, depth = 0, maxDepth = 10) {\n if (depth > maxDepth) {\n return { _truncated: true, reason: 'Max depth reached' };\n }\n\n if (!component || typeof component !== 'object') {\n return { type: typeof component, value: component };\n }\n\n if (Array.isArray(component)) {\n return component.map(child => this.buildComponentTree(child, depth + 1, maxDepth));\n }\n\n const tree = {};\n\n for (const [key, value] of Object.entries(component)) {\n if (typeof value === 'object' && value !== null) {\n tree[key] = {\n type: 'element',\n props: {},\n children: []\n };\n\n // Extract props and children\n for (const [prop, propValue] of Object.entries(value)) {\n if (prop === 'children') {\n tree[key].children = this.buildComponentTree(propValue, depth + 1, maxDepth);\n } else {\n tree[key].props[prop] = propValue;\n }\n }\n } else {\n tree[key] = { type: typeof value, value };\n }\n }\n\n return tree;\n }\n\n /**\n * Calculate component statistics\n */\n calculateStats(component) {\n const stats = {\n elementCount: 0,\n depth: 0,\n textNodes: 0,\n eventHandlers: 0,\n hasStyles: false,\n hasClasses: false,\n complexity: 0\n };\n\n const traverse = (node, currentDepth = 1) => {\n if (!node || typeof node !== 'object') {\n if (node !== null && node !== undefined) {\n stats.textNodes++;\n }\n return;\n }\n\n if (Array.isArray(node)) {\n node.forEach(child => traverse(child, currentDepth));\n return;\n }\n\n stats.elementCount++;\n stats.depth = Math.max(stats.depth, currentDepth);\n\n for (const [_key, value] of Object.entries(node)) {\n if (typeof value === 'object' && value !== null) {\n // Check for styles and classes\n if (value.style) stats.hasStyles = true;\n if (value.className) stats.hasClasses = true;\n\n // Count event handlers\n const handlers = Object.keys(value).filter(k => k.startsWith('on'));\n stats.eventHandlers += handlers.length;\n\n // Traverse children\n if (value.children) {\n traverse(value.children, currentDepth + 1);\n }\n }\n }\n };\n\n traverse(component);\n\n // Calculate complexity based on various factors\n stats.complexity = \n stats.elementCount * 10 + // Base complexity from element count\n stats.depth * 5 + // Depth adds complexity\n stats.eventHandlers * 3 + // Event handlers add complexity\n stats.textNodes + // Text nodes add minimal complexity\n (stats.hasStyles ? 5 : 0) + // Styles add complexity\n (stats.hasClasses ? 3 : 0); // Classes add complexity\n\n return stats;\n }\n\n /**\n * Get component by ID\n */\n getComponent(id) {\n return this.components.get(id);\n }\n\n /**\n * Get inspection history\n */\n getHistory() {\n return [...this.history];\n }\n\n /**\n * Search components by criteria\n */\n search(criteria) {\n const results = [];\n\n for (const [id, inspection] of this.components.entries()) {\n let matches = true;\n\n if (criteria.hasIssues && inspection.analysis.issues.length === 0) {\n matches = false;\n }\n\n if (criteria.hasWarnings && inspection.analysis.warnings.length === 0) {\n matches = false;\n }\n\n if (criteria.minElements && inspection.stats.elementCount < criteria.minElements) {\n matches = false;\n }\n\n if (criteria.maxElements && inspection.stats.elementCount > criteria.maxElements) {\n matches = false;\n }\n\n if (matches) {\n results.push({ id, inspection });\n }\n }\n\n return results;\n }\n\n /**\n * Compare two components\n */\n compare(componentA, componentB) {\n const inspectionA = typeof componentA === 'string' \n ? this.getComponent(componentA)\n : this.inspect(componentA);\n \n const inspectionB = typeof componentB === 'string'\n ? this.getComponent(componentB)\n : this.inspect(componentB);\n\n return {\n statsComparison: {\n elementCount: {\n a: inspectionA.stats.elementCount,\n b: inspectionB.stats.elementCount,\n diff: inspectionB.stats.elementCount - inspectionA.stats.elementCount\n },\n depth: {\n a: inspectionA.stats.depth,\n b: inspectionB.stats.depth,\n diff: inspectionB.stats.depth - inspectionA.stats.depth\n },\n textNodes: {\n a: inspectionA.stats.textNodes,\n b: inspectionB.stats.textNodes,\n diff: inspectionB.stats.textNodes - inspectionA.stats.textNodes\n }\n },\n structureMatch: JSON.stringify(inspectionA.tree) === JSON.stringify(inspectionB.tree),\n issuesComparison: {\n a: inspectionA.analysis.issues.length,\n b: inspectionB.analysis.issues.length\n }\n };\n }\n\n /**\n * Generate report\n */\n generateReport() {\n return {\n totalInspections: this.inspectionCount,\n componentsTracked: this.components.size,\n historySize: this.history.length,\n summary: {\n totalElements: Array.from(this.components.values())\n .reduce((sum, c) => sum + c.stats.elementCount, 0),\n averageDepth: Array.from(this.components.values())\n .reduce((sum, c) => sum + c.stats.depth, 0) / this.components.size || 0,\n componentsWithIssues: Array.from(this.components.values())\n .filter(c => c.analysis.issues.length > 0).length,\n componentsWithWarnings: Array.from(this.components.values())\n .filter(c => c.analysis.warnings.length > 0).length\n }\n };\n }\n\n /**\n * Clear all data\n */\n clear() {\n this.components.clear();\n this.history = [];\n this.inspectionCount = 0;\n }\n\n /**\n * Clear history only\n */\n clearHistory() {\n this.history = [];\n }\n\n /**\n * Get inspection statistics\n */\n getStats() {\n return {\n totalInspections: this.inspectionCount,\n componentsTracked: this.components.size,\n historySize: this.history.length\n };\n }\n\n /**\n * Export inspection data\n */\n export() {\n return {\n inspections: this.history.map(h => ({\n id: h.id,\n timestamp: h.timestamp,\n type: h.type,\n complexity: h.complexity,\n depth: h.depth,\n issues: h.issues,\n warnings: h.warnings\n })),\n stats: this.getStats(),\n exportedAt: Date.now()\n };\n }\n\n /**\n * Generate unique ID\n */\n generateId() {\n return `inspect-${Date.now()}-${Math.random().toString(36).substring(7)}`;\n }\n}\n\n/**\n * Create a component inspector\n */\nexport function createInspector(options = {}) {\n return new ComponentInspector(options);\n}\n\n/**\n * Quick inspect utility\n */\nexport function inspect(component, options = {}) {\n const inspector = new ComponentInspector(options);\n return inspector.inspect(component);\n}\n\n/**\n * Validate component structure\n */\nexport function validateComponent(component) {\n const inspector = new ComponentInspector();\n const inspection = inspector.inspect(component);\n \n return {\n valid: inspection.valid,\n errors: inspection.issues || [],\n issues: inspection.issues || [],\n warnings: inspection.warnings || [],\n stats: inspection.stats\n };\n}\n\nexport default {\n ComponentInspector,\n createInspector,\n inspect,\n validateComponent\n};\n", "/**\n * Coherent.js Performance Profiler\n * \n * Tracks and analyzes rendering performance\n * \n * @module devtools/profiler\n */\n\n/**\n * Performance Profiler\n * Measures and analyzes component rendering performance\n */\nexport class PerformanceProfiler {\n constructor(options = {}) {\n this.options = {\n enabled: true,\n sampleRate: 1.0, // 1.0 = 100% sampling\n slowThreshold: 16, // 16ms = 60fps\n trackMemory: typeof performance !== 'undefined' && performance.memory,\n maxSamples: options.maxSamples || 1000,\n ...options\n };\n \n this.measurements = [];\n this.sessions = new Map();\n this.currentSession = null;\n this.marks = new Map();\n }\n\n /**\n * Start a profiling session\n */\n start(name = 'default') {\n if (!this.options.enabled) {\n return null;\n }\n\n // Apply sampling\n if (this.options.sampleRate < 1.0 && Math.random() > this.options.sampleRate) {\n return null;\n }\n\n const session = {\n id: this.generateId(),\n name,\n startTime: Date.now(),\n measurements: [],\n marks: [],\n active: true\n };\n\n this.sessions.set(session.id, session);\n this.currentSession = session;\n\n if (typeof performance !== 'undefined' && performance.mark) {\n performance.mark(`coherent-session-start-${session.id}`);\n }\n\n return session.id;\n }\n\n /**\n * Stop a profiling session\n */\n stop(sessionId) {\n if (!sessionId) {\n return null;\n }\n\n const session = this.sessions.get(sessionId);\n\n if (!session) {\n return null; // Gracefully handle non-existent sessions\n }\n\n session.endTime = Date.now();\n session.duration = session.endTime - session.startTime;\n session.active = false;\n\n if (typeof performance !== 'undefined' && performance.mark) {\n performance.mark(`coherent-session-end-${session.id}`);\n }\n\n if (this.currentSession === session) {\n this.currentSession = null;\n }\n\n // Store measurement\n this.measurements.push(session);\n \n // Limit measurements (maxSamples)\n if (this.measurements.length > this.options.maxSamples) {\n this.measurements.shift();\n }\n\n return this.analyzeSession(session);\n }\n\n /**\n * Start measuring a render\n */\n startRender(componentName, props = {}) {\n if (!this.options.enabled) return null;\n \n // Sample rate check\n if (Math.random() > this.options.sampleRate) return null;\n\n const measurementId = this.generateId();\n const measurement = {\n id: measurementId,\n componentName,\n props,\n startTime: Date.now(),\n startMemory: this.getMemoryUsage(),\n phase: 'render'\n };\n\n this.marks.set(measurementId, measurement);\n\n if (typeof performance !== 'undefined' && performance.mark) {\n performance.mark(`coherent-render-start-${measurementId}`);\n }\n\n return measurementId;\n }\n\n /**\n * End measuring a render\n */\n endRender(measurementId, result = {}) {\n if (!measurementId || !this.marks.has(measurementId)) return null;\n\n const measurement = this.marks.get(measurementId);\n measurement.endTime = Date.now();\n measurement.duration = measurement.endTime - measurement.startTime;\n measurement.endMemory = this.getMemoryUsage();\n measurement.memoryDelta = measurement.endMemory - measurement.startMemory;\n measurement.result = result;\n measurement.slow = measurement.duration > this.options.slowThreshold;\n\n if (typeof performance !== 'undefined' && performance.mark) {\n performance.mark(`coherent-render-end-${measurementId}`);\n \n if (performance.measure) {\n try {\n performance.measure(\n `coherent-render-${measurementId}`,\n `coherent-render-start-${measurementId}`,\n `coherent-render-end-${measurementId}`\n );\n } catch {\n // Ignore measure errors\n }\n }\n }\n\n // Add to measurements\n this.measurements.push(measurement);\n \n // Add to current session\n if (this.currentSession) {\n this.currentSession.measurements.push(measurement);\n }\n\n // Clean up\n this.marks.delete(measurementId);\n\n return measurement;\n }\n\n /**\n * Mark a point in time\n */\n mark(name, data = {}) {\n const mark = {\n name,\n timestamp: Date.now(),\n data,\n memory: this.getMemoryUsage()\n };\n\n if (this.currentSession) {\n this.currentSession.marks.push(mark);\n }\n\n if (typeof performance !== 'undefined' && performance.mark) {\n performance.mark(`coherent-mark-${name}`);\n }\n\n return mark;\n }\n\n /**\n * Measure time between two marks\n */\n measure(startMark, endMark) {\n const start = this.findMark(startMark);\n const end = this.findMark(endMark);\n\n if (!start || !end) {\n throw new Error('Mark not found');\n }\n\n return {\n duration: end.timestamp - start.timestamp,\n startMark: start.name,\n endMark: end.name\n };\n }\n\n /**\n * Get memory usage\n */\n getMemoryUsage() {\n if (typeof performance !== 'undefined' && performance.memory) {\n return {\n used: performance.memory.usedJSHeapSize,\n total: performance.memory.totalJSHeapSize,\n limit: performance.memory.jsHeapSizeLimit\n };\n }\n return null;\n }\n\n /**\n * Find a mark by name\n */\n findMark(name) {\n if (!this.currentSession) return null;\n return this.currentSession.marks.find(m => m.name === name);\n }\n\n /**\n * Get all measurements\n */\n getMeasurements(filter = {}) {\n let results = [...this.measurements];\n\n if (filter.componentName) {\n results = results.filter(m => m.componentName === filter.componentName);\n }\n\n if (filter.slow) {\n results = results.filter(m => m.slow);\n }\n\n if (filter.minDuration) {\n results = results.filter(m => m.duration >= filter.minDuration);\n }\n\n if (filter.limit) {\n results = results.slice(0, filter.limit);\n }\n\n return results;\n }\n\n /**\n * Analyze a session\n */\n analyzeSession(session) {\n const measurements = session.measurements;\n\n if (measurements.length === 0) {\n return {\n session: session.id,\n duration: session.duration,\n measurements: 0,\n analysis: null\n };\n }\n\n const durations = measurements.map(m => m.duration);\n const sorted = [...durations].sort((a, b) => a - b);\n\n return {\n session: session.id,\n name: session.name,\n duration: session.duration,\n measurements: measurements.length,\n analysis: {\n total: durations.reduce((a, b) => a + b, 0),\n average: durations.reduce((a, b) => a + b, 0) / durations.length,\n median: sorted[Math.floor(sorted.length / 2)],\n min: Math.min(...durations),\n max: Math.max(...durations),\n p95: sorted[Math.floor(sorted.length * 0.95)],\n p99: sorted[Math.floor(sorted.length * 0.99)],\n slowRenders: measurements.filter(m => m.slow).length,\n slowPercentage: (measurements.filter(m => m.slow).length / measurements.length) * 100\n },\n byComponent: this.groupByComponent(measurements),\n slowest: measurements\n .sort((a, b) => b.duration - a.duration)\n .slice(0, 10)\n .map(m => ({\n component: m.componentName,\n duration: m.duration,\n timestamp: m.startTime\n }))\n };\n }\n\n /**\n * Group measurements by component\n */\n groupByComponent(measurements) {\n const groups = {};\n\n measurements.forEach(m => {\n if (!groups[m.componentName]) {\n groups[m.componentName] = {\n count: 0,\n totalDuration: 0,\n durations: []\n };\n }\n\n groups[m.componentName].count++;\n groups[m.componentName].totalDuration += m.duration;\n groups[m.componentName].durations.push(m.duration);\n });\n\n // Calculate stats for each component\n Object.keys(groups).forEach(name => {\n const group = groups[name];\n group.average = group.totalDuration / group.count;\n group.min = Math.min(...group.durations);\n group.max = Math.max(...group.durations);\n });\n\n return groups;\n }\n\n /**\n * Get performance summary\n */\n getSummary() {\n const allMeasurements = this.measurements;\n\n if (allMeasurements.length === 0) {\n return {\n totalMeasurements: 0,\n totalSessions: this.sessions.size,\n analysis: null\n };\n }\n\n const durations = allMeasurements.map(m => m.duration);\n\n return {\n totalMeasurements: allMeasurements.length,\n totalSessions: this.sessions.size,\n slowRenders: allMeasurements.filter(m => m.slow).length,\n analysis: {\n average: durations.reduce((a, b) => a + b, 0) / durations.length,\n min: Math.min(...durations),\n max: Math.max(...durations),\n slowPercentage: (allMeasurements.filter(m => m.slow).length / allMeasurements.length) * 100\n },\n byComponent: this.groupByComponent(allMeasurements),\n recentSlow: allMeasurements\n .filter(m => m.slow)\n .slice(-10)\n .map(m => ({\n component: m.componentName,\n duration: m.duration,\n timestamp: m.startTime\n }))\n };\n }\n\n /**\n * Get statistics\n */\n getStatistics() {\n if (this.measurements.length === 0) {\n return { mean: 0, median: 0, min: 0, max: 0, stdDev: 0 };\n }\n\n const durations = this.measurements.map(m => m.duration);\n const sum = durations.reduce((a, b) => a + b, 0);\n const mean = sum / durations.length;\n \n const sorted = [...durations].sort((a, b) => a - b);\n const median = sorted[Math.floor(sorted.length / 2)];\n \n const variance = durations.reduce((acc, val) => acc + Math.pow(val - mean, 2), 0) / durations.length;\n const stdDev = Math.sqrt(variance);\n\n return {\n mean,\n median,\n min: Math.min(...durations),\n max: Math.max(...durations),\n stdDev\n };\n }\n\n /**\n * Get bottlenecks\n */\n getBottlenecks(threshold = null) {\n const slowThreshold = threshold || this.options.slowThreshold;\n return this.measurements\n .filter(m => m.duration > slowThreshold)\n .sort((a, b) => b.duration - a.duration)\n .map(m => ({\n name: m.name,\n duration: m.duration,\n timestamp: m.startTime\n }));\n }\n\n /**\n * Get metrics\n */\n getMetrics() {\n const operationCounts = {};\n this.measurements.forEach(m => {\n operationCounts[m.name] = (operationCounts[m.name] || 0) + 1;\n });\n\n const totalDuration = this.measurements.reduce((sum, m) => sum + m.duration, 0);\n\n return {\n totalOperations: this.measurements.length,\n totalDuration,\n operationCounts,\n averageDuration: this.measurements.length > 0 ? totalDuration / this.measurements.length : 0,\n memoryUsage: this.options.trackMemory && typeof performance !== 'undefined' && performance.memory\n ? performance.memory.usedJSHeapSize\n : null\n };\n }\n\n /**\n * Generate report\n */\n generateReport() {\n const stats = this.getStatistics();\n const metrics = this.getMetrics();\n const bottlenecks = this.getBottlenecks();\n const recommendations = this.getRecommendations();\n\n return {\n summary: {\n totalOperations: metrics.totalOperations,\n averageDuration: metrics.averageDuration,\n slowOperations: bottlenecks.length\n },\n statistics: stats,\n operations: this.measurements.map(m => ({\n name: m.name,\n duration: m.duration,\n timestamp: m.startTime\n })),\n bottlenecks: bottlenecks.slice(0, 10),\n recommendations,\n timestamp: Date.now()\n };\n }\n\n /**\n * Export profiling data\n */\n export() {\n return {\n sessions: Array.from(this.sessions.values()),\n measurements: this.measurements,\n metrics: this.getMetrics(),\n statistics: this.getStatistics(),\n exportedAt: Date.now()\n };\n }\n\n /**\n * Format metrics for display\n */\n formatMetrics() {\n const metrics = this.getMetrics();\n const stats = this.getStatistics();\n \n let output = `Performance Metrics\\n`;\n output += `==================\\n`;\n output += `Total Operations: ${metrics.totalOperations}\\n`;\n output += `Average Duration: ${metrics.averageDuration.toFixed(2)}ms\\n`;\n output += `Mean: ${stats.mean.toFixed(2)}ms\\n`;\n output += `Median: ${stats.median.toFixed(2)}ms\\n`;\n output += `Min: ${stats.min.toFixed(2)}ms\\n`;\n output += `Max: ${stats.max.toFixed(2)}ms\\n`;\n \n return output;\n }\n\n /**\n * Compare two profiles\n */\n compare(profileId1, profileId2) {\n const session1 = this.sessions.get(profileId1);\n const session2 = this.sessions.get(profileId2);\n\n if (!session1 || !session2) {\n return null;\n }\n\n return {\n difference: session2.duration - session1.duration,\n percentChange: ((session2.duration - session1.duration) / session1.duration) * 100,\n profile1: { name: session1.name, duration: session1.duration },\n profile2: { name: session2.name, duration: session2.duration }\n };\n }\n\n /**\n * Get performance recommendations\n */\n getRecommendations() {\n const recommendations = [];\n const bottlenecks = this.getBottlenecks();\n const stats = this.getStatistics();\n\n if (bottlenecks.length > 0) {\n bottlenecks.slice(0, 5).forEach(bottleneck => {\n recommendations.push({\n type: 'bottleneck',\n operation: bottleneck.name,\n suggestion: `Optimize ${bottleneck.name} - duration: ${bottleneck.duration.toFixed(2)}ms exceeds threshold`,\n severity: 'high',\n message: `Found slow operation exceeding ${this.options.slowThreshold}ms`\n });\n });\n }\n\n if (stats.max > this.options.slowThreshold * 2) {\n recommendations.push({\n type: 'performance',\n operation: 'general',\n suggestion: `Review operations with high duration`,\n message: `Maximum duration (${stats.max.toFixed(2)}ms) is significantly high`,\n severity: 'medium'\n });\n }\n\n return recommendations;\n }\n\n /**\n * Clear all data\n */\n clear() {\n this.measurements = [];\n this.sessions.clear();\n this.currentSession = null;\n this.marks.clear();\n }\n\n /**\n * Enable profiler\n */\n enable() {\n this.options.enabled = true;\n }\n\n /**\n * Disable profiler\n */\n disable() {\n this.options.enabled = false;\n }\n\n /**\n * Generate unique ID\n */\n generateId() {\n return `prof-${Date.now()}-${Math.random().toString(36).substring(7)}`;\n }\n}\n\n/**\n * Create a performance profiler\n */\nexport function createProfiler(options = {}) {\n return new PerformanceProfiler(options);\n}\n\n/**\n * Measure a function execution\n */\nexport async function measure(name, fn, profiler = null) {\n const prof = profiler || new PerformanceProfiler();\n const sessionId = prof.start(name);\n \n try {\n const value = await fn();\n const result = prof.stop(sessionId);\n return { value, duration: result?.duration || 0 };\n } catch (error) {\n const result = prof.stop(sessionId);\n throw { error, duration: result?.duration || 0 };\n }\n}\n\n/**\n * Create a profiling decorator\n */\nexport function profile(fn) {\n return function(...args) {\n const result = fn(...args);\n return result;\n };\n}\n\nexport default {\n PerformanceProfiler,\n createProfiler,\n measure,\n profile\n};\n", "/**\n * Coherent.js Development Logger\n * \n * Advanced logging system for development and debugging\n * \n * @module devtools/logger\n */\n\n/**\n * Log levels\n */\nexport const LogLevel = {\n TRACE: 0,\n DEBUG: 1,\n INFO: 2,\n WARN: 3,\n ERROR: 4,\n FATAL: 5\n};\n\n/**\n * Development Logger\n * Provides structured logging with filtering and formatting\n */\nexport class DevLogger {\n constructor(options = {}) {\n this.options = {\n level: options.level !== undefined ? options.level : LogLevel.INFO,\n prefix: '[Coherent]',\n timestamp: true,\n colors: true,\n maxLogs: 1000,\n maxBufferSize: options.maxBufferSize || 1000,\n grouping: true,\n buffer: options.buffer || false,\n sampleRate: options.sampleRate !== undefined ? options.sampleRate : 1.0,\n silent: options.silent || false,\n output: options.output || null,\n categories: options.categories || null,\n filter: options.filter || null,\n ...options\n };\n \n this.logs = [];\n this.groups = [];\n this.filters = [];\n this.handlers = [];\n this.context = {};\n }\n\n /**\n * Generic log method (supports category logging)\n */\n log(categoryOrLevel, messageOrData, data) {\n // Support log(category, message) signature\n if (typeof categoryOrLevel === 'string' && typeof messageOrData === 'string') {\n return this.logWithLevel(LogLevel.INFO, messageOrData, { category: categoryOrLevel, ...data });\n }\n // Support log(level, message, data) signature\n return this.logWithLevel(categoryOrLevel, messageOrData, data);\n }\n\n /**\n * Log a trace message\n */\n trace(message, data = {}) {\n return this.logWithLevel(LogLevel.TRACE, message, data);\n }\n\n /**\n * Log a debug message\n */\n debug(message, data = {}) {\n return this.log(LogLevel.DEBUG, message, data);\n }\n\n /**\n * Log an info message\n */\n info(message, data = {}) {\n return this.log(LogLevel.INFO, message, data);\n }\n\n /**\n * Log a warning\n */\n warn(message, data = {}) {\n return this.log(LogLevel.WARN, message, data);\n }\n\n /**\n * Log an error\n */\n error(message, data = {}) {\n if (data instanceof Error) {\n data = {\n message: data.message,\n stack: data.stack,\n name: data.name,\n ...data\n };\n }\n return this.logWithLevel(LogLevel.ERROR, message, data);\n }\n\n /**\n * Log a fatal error\n */\n fatal(message, data = {}) {\n return this.log(LogLevel.FATAL, message, data);\n }\n\n /**\n * Core logging function\n */\n logWithLevel(level, message, data = {}) {\n // Apply sampling\n if (this.options.sampleRate < 1.0 && Math.random() > this.options.sampleRate) {\n return;\n }\n\n // Check if level is enabled\n if (level < this.options.level) {\n return;\n }\n\n // Apply filters\n if (!this.shouldLog(level, message, data)) {\n return;\n }\n\n // Merge context with data\n const mergedData = { ...this.context, ...data };\n\n const logEntry = {\n id: this.generateId(),\n level,\n levelName: this.getLevelName(level),\n message,\n data: mergedData,\n timestamp: Date.now(),\n group: this.groups.length > 0 ? this.groups[this.groups.length - 1] : null,\n stack: level >= LogLevel.ERROR ? new Error().stack : null\n };\n\n // Store log (always store for history/export)\n this.logs.push(logEntry);\n \n // Limit log size (rotation)\n const maxSize = this.options.buffer ? this.options.maxBufferSize : this.options.maxLogs;\n if (this.logs.length > maxSize) {\n this.logs.shift();\n }\n\n // Call handlers\n this.handlers.forEach(handler => {\n try {\n handler(logEntry);\n } catch (error) {\n console.error('Error in log handler:', error);\n }\n });\n\n // Output to console\n this.output(logEntry);\n\n return logEntry;\n }\n\n /**\n * Output log to console\n */\n output(logEntry) {\n const parts = [];\n\n // Timestamp\n if (this.options.timestamp) {\n const date = new Date(logEntry.timestamp);\n parts.push(`[${date.toISOString()}]`);\n }\n\n // Prefix\n if (this.options.prefix) {\n parts.push(this.options.prefix);\n }\n\n // Level\n parts.push(`[${logEntry.levelName}]`);\n\n // Group\n if (logEntry.group) {\n parts.push(`[${logEntry.group}]`);\n }\n\n // Message\n parts.push(logEntry.message);\n\n // Add context data to output if present\n const contextKeys = Object.keys(logEntry.data);\n if (contextKeys.length > 0) {\n const contextStr = contextKeys.map(key => `${key}=${logEntry.data[key]}`).join(' ');\n parts.push(`{${contextStr}}`);\n }\n\n const output = parts.join(' ');\n\n // Skip output if silent mode\n if (this.options.silent) {\n return;\n }\n\n // Use custom output handler if provided\n if (this.options.output) {\n this.options.output(logEntry);\n return;\n }\n\n // Console output\n if (typeof console !== 'undefined') {\n switch (logEntry.level) {\n case LogLevel.TRACE:\n case LogLevel.DEBUG:\n case LogLevel.INFO:\n console.log(output, logEntry.data);\n break;\n case LogLevel.WARN:\n console.warn(output, logEntry.data);\n break;\n case LogLevel.ERROR:\n case LogLevel.FATAL:\n console.error(output, logEntry.data);\n if (logEntry.stack) {\n console.error(logEntry.stack);\n }\n break;\n }\n } else {\n console.log(output, logEntry.data);\n }\n }\n\n /**\n * Get color style for log level\n */\n getColorStyle(level) {\n const styles = {\n [LogLevel.TRACE]: 'color: gray',\n [LogLevel.DEBUG]: 'color: blue',\n [LogLevel.INFO]: 'color: green',\n [LogLevel.WARN]: 'color: orange',\n [LogLevel.ERROR]: 'color: red',\n [LogLevel.FATAL]: 'color: red; font-weight: bold'\n };\n return styles[level] || '';\n }\n\n /**\n * Get level name\n */\n getLevelName(level) {\n const names = {\n [LogLevel.TRACE]: 'TRACE',\n [LogLevel.DEBUG]: 'DEBUG',\n [LogLevel.INFO]: 'INFO',\n [LogLevel.WARN]: 'WARN',\n [LogLevel.ERROR]: 'ERROR',\n [LogLevel.FATAL]: 'FATAL'\n };\n return names[level] || 'UNKNOWN';\n }\n\n /**\n * Check if log should be output\n */\n shouldLog(level, message, data) {\n // Check custom filter option\n if (this.options.filter && !this.options.filter(message, data)) {\n return false;\n }\n\n // Check category filter\n if (this.options.categories && data.category) {\n if (!this.options.categories.includes(data.category)) {\n return false;\n }\n }\n\n // Check registered filters\n if (this.filters.length > 0) {\n return this.filters.every(filter => filter(level, message, data));\n }\n\n return true;\n }\n\n /**\n * Add a filter\n */\n addFilter(filter) {\n this.filters.push(filter);\n }\n\n /**\n * Remove a filter\n */\n removeFilter(filter) {\n const index = this.filters.indexOf(filter);\n if (index > -1) {\n this.filters.splice(index, 1);\n }\n }\n\n /**\n * Add a log handler\n */\n addHandler(handler) {\n this.handlers.push(handler);\n }\n\n /**\n * Remove a log handler\n */\n removeHandler(handler) {\n const index = this.handlers.indexOf(handler);\n if (index > -1) {\n this.handlers.splice(index, 1);\n }\n }\n\n /**\n * Start a log group\n */\n group(name) {\n this.groups.push(name);\n \n if (typeof console !== 'undefined' && console.group) {\n console.group(name);\n }\n }\n\n /**\n * End a log group\n */\n groupEnd() {\n this.groups.pop();\n \n if (typeof console !== 'undefined' && console.groupEnd) {\n console.groupEnd();\n }\n }\n\n /**\n * Get all logs\n */\n getLogs(filter = {}) {\n let results = [...this.logs];\n\n if (filter.level !== undefined) {\n results = results.filter(log => log.level >= filter.level);\n }\n\n if (filter.group) {\n results = results.filter(log => log.group === filter.group);\n }\n\n if (filter.search) {\n const search = filter.search.toLowerCase();\n results = results.filter(log => \n log.message.toLowerCase().includes(search) ||\n JSON.stringify(log.data).toLowerCase().includes(search)\n );\n }\n\n if (filter.limit) {\n results = results.slice(-filter.limit);\n }\n\n return results;\n }\n\n /**\n * Get log statistics\n */\n getStats() {\n const byLevel = {};\n \n Object.values(LogLevel).forEach(level => {\n byLevel[this.getLevelName(level)] = 0;\n });\n\n this.logs.forEach(log => {\n byLevel[log.levelName]++;\n });\n\n return {\n total: this.logs.length,\n byLevel,\n groups: [...new Set(this.logs.map(l => l.group).filter(Boolean))],\n timeRange: this.logs.length > 0 ? {\n start: this.logs[0].timestamp,\n end: this.logs[this.logs.length - 1].timestamp,\n duration: this.logs[this.logs.length - 1].timestamp - this.logs[0].timestamp\n } : null\n };\n }\n\n /**\n * Clear all logs\n */\n clear() {\n this.logs = [];\n this.groups = [];\n }\n\n /**\n * Set log level\n */\n setLevel(level) {\n this.options.level = level;\n }\n\n /**\n * Export logs\n */\n export(format = 'array') {\n if (format === 'array' || !format) {\n // Return array of log objects for tests\n return this.logs.map(log => ({\n level: log.levelName,\n message: log.message,\n timestamp: log.timestamp,\n data: log.data\n }));\n }\n \n switch (format) {\n case 'json':\n return JSON.stringify(this.logs, null, 2);\n \n case 'csv':\n const headers = ['timestamp', 'level', 'group', 'message', 'data'];\n const rows = this.logs.map(log => [\n new Date(log.timestamp).toISOString(),\n log.levelName,\n log.group || '',\n log.message,\n JSON.stringify(log.data)\n ]);\n return [headers, ...rows].map(row => row.join(',')).join('\\n');\n \n case 'text':\n return this.logs.map(log => {\n const date = new Date(log.timestamp).toISOString();\n const group = log.group ? `[${log.group}]` : '';\n return `${date} [${log.levelName}] ${group} ${log.message} ${JSON.stringify(log.data)}`;\n }).join('\\n');\n \n default:\n throw new Error(`Unknown export format: ${format}`);\n }\n }\n\n /**\n * Create a logger with additional context\n */\n withContext(context) {\n const contextLogger = new DevLogger(this.options);\n contextLogger.context = { ...this.context, ...context };\n contextLogger.logs = this.logs; // Share log buffer\n contextLogger.groups = this.groups;\n contextLogger.filters = this.filters;\n contextLogger.handlers = this.handlers;\n return contextLogger;\n }\n\n /**\n * Log a table\n */\n table(data) {\n if (typeof console !== 'undefined' && console.table) {\n console.table(data);\n } else {\n console.log(JSON.stringify(data, null, 2));\n }\n }\n\n /**\n * Start a timer\n */\n time(label) {\n if (typeof console !== 'undefined' && console.time) {\n console.time(label);\n }\n }\n\n /**\n * End a timer\n */\n timeEnd(label) {\n if (typeof console !== 'undefined' && console.timeEnd) {\n console.timeEnd(label);\n }\n }\n\n /**\n * Get log buffer\n */\n getBuffer() {\n return this.logs;\n }\n\n /**\n * Flush buffered logs\n */\n flush() {\n // Output all buffered logs\n this.logs.forEach(log => {\n this.output(log);\n });\n }\n\n /**\n * Clear buffer\n */\n clearBuffer() {\n this.logs = [];\n }\n\n /**\n * Generate unique ID\n */\n generateId() {\n return `log-${Date.now()}-${Math.random().toString(36).substring(7)}`;\n }\n}\n\n/**\n * Create a logger\n */\nexport function createLogger(options = {}) {\n return new DevLogger(options);\n}\n\n/**\n * Create a component logger\n */\nexport function createComponentLogger(componentName, options = {}) {\n const logger = new DevLogger({\n prefix: `[${componentName}]`,\n ...options\n });\n\n // Add perf method for component performance logging\n logger.perf = (operation, duration) => {\n logger.info(`${operation} completed in ${duration}ms`);\n };\n\n // Add lifecycle method for component lifecycle logging\n logger.lifecycle = (event) => {\n logger.info(`Lifecycle: ${event}`);\n };\n\n return logger;\n}\n\n/**\n * Create a console logger (simple wrapper)\n */\nexport function createConsoleLogger(prefix = '') {\n return {\n trace: (...args) => console.debug(prefix, ...args),\n debug: (...args) => console.debug(prefix, ...args),\n info: (...args) => console.info(prefix, ...args),\n warn: (...args) => console.warn(prefix, ...args),\n error: (...args) => console.error(prefix, ...args),\n fatal: (...args) => console.error(prefix, 'FATAL:', ...args)\n };\n}\n\nexport default {\n DevLogger,\n LogLevel,\n createLogger,\n createComponentLogger,\n createConsoleLogger\n};\n", "/**\n * Development Tools for Coherent.js\n * Provides debugging, profiling, and development utilities\n * Only active in development environment for zero production overhead\n */\n\nimport { performanceMonitor } from '@coherent.js/core/src/performance/monitor.js';\nimport { validateComponent, isCoherentObject } from '@coherent.js/core/src/core/object-utils.js';\n\n/**\n * Main DevTools class\n */\nexport class DevTools {\n constructor(coherentInstance) {\n this.coherent = coherentInstance;\n this.isEnabled = this.shouldEnable();\n this.renderHistory = [];\n this.componentRegistry = new Map();\n this.warnings = [];\n this.errors = [];\n this.hotReloadEnabled = false;\n\n if (this.isEnabled) {\n this.initialize();\n }\n }\n\n /**\n * Check if dev tools should be enabled\n */\n shouldEnable() {\n // Only enable in development\n if (typeof process !== 'undefined') {\n return process.env.NODE_ENV === 'development';\n }\n\n // Browser development detection\n if (typeof window !== 'undefined') {\n return window.location.hostname === 'localhost' ||\n window.location.hostname === '127.0.0.1' ||\n window.location.search.includes('dev=true');\n }\n\n return false;\n }\n\n /**\n * Initialize dev tools\n */\n initialize() {\n console.log('\uD83D\uDEE0\uFE0F Coherent.js Dev Tools Enabled');\n\n this.setupGlobalHelpers();\n this.setupRenderInterception();\n this.setupErrorHandling();\n this.setupHotReload();\n this.setupComponentInspector();\n\n // Browser-specific setup\n if (typeof window !== 'undefined') {\n this.setupBrowserDevTools();\n }\n\n // Node.js specific setup\n if (typeof process !== 'undefined') {\n this.setupNodeDevTools();\n }\n }\n\n /**\n * Set up global helper functions\n */\n setupGlobalHelpers() {\n const helpers = {\n // Inspect any component\n $inspect: (component) => this.inspectComponent(component),\n\n // Get render history\n $history: () => this.renderHistory,\n\n // Get performance stats\n $perf: () => this.getPerformanceInsights(),\n\n // Validate component structure\n $validate: (component) => this.validateComponent(component),\n\n // Get component registry\n $registry: () => Array.from(this.componentRegistry.entries()),\n\n // Clear dev data\n $clear: () => this.clearDevData(),\n\n // Enable/disable features\n $toggle: (feature) => this.toggleFeature(feature),\n\n // Get warnings and errors\n $issues: () => ({ warnings: this.warnings, errors: this.errors })\n };\n\n // Expose helpers globally\n if (typeof window !== 'undefined') {\n Object.assign(window, helpers);\n } else if (typeof global !== 'undefined') {\n Object.assign(global, helpers);\n }\n }\n\n /**\n * Intercept render calls for debugging\n */\n setupRenderInterception() {\n const originalRender = this.coherent.render;\n\n this.coherent.render = (component, context = {}, options = {}) => {\n const renderStart = performance.now();\n const renderId = this.generateRenderId();\n\n try {\n // Pre-render validation and logging\n this.preRenderAnalysis(component, context, renderId);\n\n // Actual render\n const result = originalRender.call(this.coherent, component, context, {\n ...options,\n _devRenderId: renderId\n });\n\n // Post-render analysis\n const renderTime = performance.now() - renderStart;\n this.postRenderAnalysis(component, result, renderTime, renderId);\n\n return result;\n\n } catch (_error) {\n this.handleRenderError(_error, component, context, renderId);\n throw _error;\n }\n };\n }\n\n /**\n * Pre-render analysis and validation\n */\n preRenderAnalysis(component, context, renderId) {\n // Component structure validation\n const validation = this.deepValidateComponent(component);\n if (!validation.isValid) {\n this.warnings.push({\n type: 'validation',\n message: validation.message,\n component: this.serializeComponent(component),\n renderId,\n timestamp: Date.now()\n });\n }\n\n // Performance warnings\n const complexity = this.analyzeComplexity(component);\n if (complexity > 1000) {\n this.warnings.push({\n type: 'performance',\n message: `High complexity component detected (${complexity} nodes)`,\n renderId,\n timestamp: Date.now()\n });\n }\n\n // Context analysis\n this.analyzeContext(context, renderId);\n }\n\n /**\n * Post-render analysis\n */\n postRenderAnalysis(component, result, renderTime, renderId) {\n // Store render in history\n const renderRecord = {\n id: renderId,\n timestamp: Date.now(),\n component: this.serializeComponent(component),\n renderTime,\n outputSize: result.length,\n complexity: this.analyzeComplexity(component)\n };\n\n this.renderHistory.push(renderRecord);\n\n // Keep only last 50 renders\n if (this.renderHistory.length > 50) {\n this.renderHistory.shift();\n }\n\n // Performance analysis\n if (renderTime > 10) {\n this.warnings.push({\n type: 'performance',\n message: `Slow render detected: ${renderTime.toFixed(2)}ms`,\n renderId,\n timestamp: Date.now()\n });\n }\n\n // Log render in development\n if (renderTime > 1) {\n console.log(`\uD83D\uDD04 Render ${renderId}: ${renderTime.toFixed(2)}ms`);\n }\n }\n\n /**\n * Deep component validation\n */\n deepValidateComponent(component, path = 'root', depth = 0) {\n if (depth > 100) {\n return {\n isValid: false,\n message: `Component nesting too deep at ${path}`\n };\n }\n\n // Basic validation\n try {\n validateComponent(component);\n } catch (_error) {\n return {\n isValid: false,\n message: `Invalid component at ${path}: ${_error.message}`\n };\n }\n\n // Recursive validation for objects and arrays\n if (Array.isArray(component)) {\n for (let i = 0; i < component.length; i++) {\n const childValidation = this.deepValidateComponent(\n component[i],\n `${path}[${i}]`,\n depth + 1\n );\n if (!childValidation.isValid) {\n return childValidation;\n }\n }\n } else if (isCoherentObject(component)) {\n for (const [tag, props] of Object.entries(component)) {\n if (props && typeof props === 'object' && props.children) {\n const childValidation = this.deepValidateComponent(\n props.children,\n `${path}.${tag}.children`,\n depth + 1\n );\n if (!childValidation.isValid) {\n return childValidation;\n }\n }\n }\n }\n\n return { isValid: true };\n }\n\n /**\n * Analyze component complexity\n */\n analyzeComplexity(component, depth = 0) {\n if (depth > 100) return 1000; // Prevent infinite recursion\n\n if (typeof component === 'string' || typeof component === 'number') {\n return 1;\n }\n\n if (Array.isArray(component)) {\n return component.reduce((sum, child) =>\n sum + this.analyzeComplexity(child, depth + 1), 0);\n }\n\n if (isCoherentObject(component)) {\n let complexity = 1;\n for (const [, props] of Object.entries(component)) {\n if (props && typeof props === 'object') {\n if (props.children) {\n complexity += this.analyzeComplexity(props.children, depth + 1);\n }\n if (typeof props.text === 'function') {\n complexity += 2; // Functions add complexity\n }\n }\n }\n return complexity;\n }\n\n return 1;\n }\n\n /**\n * Context analysis\n */\n analyzeContext(context, renderId) {\n // Large context warning\n const contextSize = JSON.stringify(context).length;\n if (contextSize > 10000) {\n this.warnings.push({\n type: 'context',\n message: `Large context object: ${contextSize} characters`,\n renderId,\n timestamp: Date.now()\n });\n }\n\n // Circular reference check\n try {\n JSON.stringify(context);\n } catch (_error) {\n if (_error.message.includes('circular')) {\n this.warnings.push({\n type: 'context',\n message: 'Circular reference detected in context',\n renderId,\n timestamp: Date.now()\n });\n }\n }\n }\n\n /**\n * Component inspector\n */\n inspectComponent(component) {\n return {\n type: this.getComponentType(component),\n complexity: this.analyzeComplexity(component),\n validation: this.deepValidateComponent(component),\n structure: this.visualizeStructure(component),\n serialized: this.serializeComponent(component),\n recommendations: this.getOptimizationRecommendations(component)\n };\n }\n\n /**\n * Get component type\n */\n getComponentType(component) {\n if (typeof component === 'string') return 'text';\n if (typeof component === 'function') return 'function';\n if (Array.isArray(component)) return 'array';\n if (isCoherentObject(component)) return 'element';\n return 'unknown';\n }\n\n /**\n * Visualize component structure\n */\n visualizeStructure(component, depth = 0, maxDepth = 5) {\n if (depth > maxDepth) return '...';\n\n const indent = ' '.repeat(depth);\n\n if (typeof component === 'string') {\n return `${indent}\"${component.substring(0, 20)}${component.length > 20 ? '...' : ''}\"`;\n }\n\n if (Array.isArray(component)) {\n const items = component.slice(0, 3).map(child =>\n this.visualizeStructure(child, depth + 1, maxDepth)\n );\n const more = component.length > 3 ? `${indent} ...${component.length - 3} more` : '';\n return `${indent}[\\n${items.join('\\n')}${more ? `\\n${ more}` : ''}\\n${indent}]`;\n }\n\n if (isCoherentObject(component)) {\n const entries = Object.entries(component).slice(0, 3);\n const elements = entries.map(([tag, props]) => {\n let result = `${indent}<${tag}`;\n if (props && props.children) {\n result += `>\\n${this.visualizeStructure(props.children, depth + 1, maxDepth)}\\n${indent}</${tag}>`;\n } else if (props && props.text) {\n result += `>${props.text}</${tag}>`;\n } else {\n result += ' />';\n }\n return result;\n });\n return elements.join('\\n');\n }\n\n return `${indent}${typeof component}`;\n }\n\n /**\n * Get optimization recommendations\n */\n getOptimizationRecommendations(component) {\n const recommendations = [];\n const complexity = this.analyzeComplexity(component);\n\n if (complexity > 500) {\n recommendations.push({\n type: 'complexity',\n message: 'Consider breaking down this component into smaller parts',\n priority: 'high'\n });\n }\n\n // Check for repeated patterns\n const serialized = JSON.stringify(component);\n const patterns = this.findRepeatedPatterns(serialized);\n if (patterns.length > 0) {\n recommendations.push({\n type: 'caching',\n message: 'Consider extracting repeated patterns into cached components',\n priority: 'medium',\n patterns: patterns.slice(0, 3)\n });\n }\n\n return recommendations;\n }\n\n /**\n * Find repeated patterns in component\n */\n findRepeatedPatterns(serialized) {\n const patterns = [];\n const minPatternLength = 20;\n\n for (let i = 0; i < serialized.length - minPatternLength; i++) {\n for (let len = minPatternLength; len <= 100 && i + len < serialized.length; len++) {\n const pattern = serialized.substring(i, i + len);\n const occurrences = (serialized.match(new RegExp(this.escapeRegex(pattern), 'g')) || []).length;\n\n if (occurrences > 2) {\n patterns.push({ pattern: `${pattern.substring(0, 50) }...`, occurrences });\n break; // Found a pattern starting at this position\n }\n }\n }\n\n return patterns.sort((a, b) => b.occurrences - a.occurrences);\n }\n\n /**\n * Escape regex special characters\n */\n escapeRegex(string) {\n return string.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n }\n\n /**\n * Setup _error handling\n */\n setupErrorHandling() {\n // Global _error handler\n const originalConsoleError = console.error;\n console.error = (...args) => {\n // Log to dev tools\n this.errors.push({\n type: 'console',\n message: args.join(' '),\n timestamp: Date.now(),\n stack: new Error().stack\n });\n\n // Call original\n originalConsoleError.apply(console, args);\n };\n\n // Unhandled rejection handler (Node.js)\n if (typeof process !== 'undefined') {\n process.on('unhandledRejection', (reason, promise) => {\n this.errors.push({\n type: 'unhandled-rejection',\n message: reason.toString(),\n promise: promise.toString(),\n timestamp: Date.now()\n });\n });\n }\n\n // Browser _error handler\n if (typeof window !== 'undefined') {\n window.addEventListener('_error', (event) => {\n this.errors.push({\n type: 'browser-_error',\n message: event.message,\n filename: event.filename,\n lineno: event.lineno,\n colno: event.colno,\n timestamp: Date.now()\n });\n });\n }\n }\n\n /**\n * Handle render errors specifically\n */\n handleRenderError(_error, component, context, renderId) {\n this.errors.push({\n type: 'render-_error',\n message: _error.message,\n stack: _error.stack,\n component: this.serializeComponent(component),\n context: Object.keys(context),\n renderId,\n timestamp: Date.now()\n });\n\n console.error(`\uD83D\uDEA8 Render Error in ${renderId}:`, _error.message);\n console.error('Component:', this.serializeComponent(component));\n }\n\n /**\n * Setup hot reload capability\n */\n setupHotReload() {\n if (typeof window !== 'undefined' && 'WebSocket' in window) {\n // Browser hot reload\n this.setupBrowserHotReload();\n } else if (typeof require !== 'undefined') {\n // Node.js file watching\n this.setupNodeHotReload();\n }\n }\n\n /**\n * Browser hot reload setup\n */\n setupBrowserHotReload() {\n // Connect to development server WebSocket\n try {\n const ws = new WebSocket('ws://localhost:3001/coherent-dev');\n\n ws.onmessage = (event) => {\n const data = JSON.parse(event.data);\n\n if (data.type === 'component-updated') {\n console.log('\uD83D\uDD04 Component updated:', data.componentName);\n this.handleComponentUpdate(data);\n } else if (data.type === 'full-reload') {\n window.location.reload();\n }\n };\n\n ws.onopen = () => {\n console.log('\uD83D\uDD17 Connected to Coherent dev server');\n this.hotReloadEnabled = true;\n };\n\n ws.onclose = () => {\n console.log('\uD83D\uDD0C Disconnected from dev server');\n this.hotReloadEnabled = false;\n };\n\n } catch {\n // Dev server not available\n }\n }\n\n /**\n * Node.js hot reload setup\n */\n setupNodeHotReload() {\n // File system watching for component changes\n try {\n const fs = require('fs');\n const path = require('path');\n\n const watchDir = path.join(process.cwd(), 'src');\n\n fs.watch(watchDir, { recursive: true }, (eventType, filename) => {\n if (filename && filename.endsWith('.js')) {\n console.log(`\uD83D\uDD04 File changed: ${filename}`);\n this.handleFileChange(filename, eventType);\n }\n });\n\n this.hotReloadEnabled = true;\n\n } catch {\n // File watching not available\n }\n }\n\n /**\n * Handle component updates\n */\n handleComponentUpdate(updateData) {\n // Clear related caches\n if (this.coherent.cache) {\n this.coherent.cache.invalidatePattern(updateData.componentName);\n }\n\n // Update component registry\n this.componentRegistry.set(updateData.componentName, {\n ...updateData,\n lastUpdated: Date.now()\n });\n\n // Trigger re-render if needed\n if (typeof window !== 'undefined' && window.location.search.includes('auto-reload=true')) {\n window.location.reload();\n }\n }\n\n /**\n * Handle file changes\n */\n handleFileChange(filename, eventType) {\n // Clear require cache for the changed file\n if (typeof require !== 'undefined' && require.cache) {\n const fullPath = require.resolve(path.resolve(filename));\n delete require.cache[fullPath];\n }\n\n console.log(`\uD83D\uDCDD ${eventType}: ${filename}`);\n }\n\n /**\n * Setup browser-specific dev tools\n */\n setupBrowserDevTools() {\n // Add dev tools panel to page\n this.createDevPanel();\n\n // Add keyboard shortcuts\n document.addEventListener('keydown', (e) => {\n // Ctrl+Shift+C = Toggle dev panel\n if (e.ctrlKey && e.shiftKey && e.code === 'KeyC') {\n this.toggleDevPanel();\n e.preventDefault();\n }\n\n // Ctrl+Shift+P = Performance report\n if (e.ctrlKey && e.shiftKey && e.code === 'KeyP') {\n console.table(this.getPerformanceInsights());\n e.preventDefault();\n }\n });\n }\n\n /**\n * Create development panel in browser\n */\n createDevPanel() {\n // Create floating dev panel\n const panel = document.createElement('div');\n panel.id = 'coherent-dev-panel';\n panel.style.cssText = `\n position: fixed;\n top: 10px;\n right: 10px;\n width: 300px;\n background: #1a1a1a;\n color: #fff;\n font-family: monospace;\n font-size: 12px;\n border-radius: 8px;\n box-shadow: 0 4px 20px rgba(0,0,0,0.5);\n z-index: 999999;\n display: none;\n max-height: 80vh;\n overflow-y: auto;\n `;\n\n document.body.appendChild(panel);\n this.devPanel = panel;\n this.updateDevPanel();\n }\n\n /**\n * Toggle dev panel visibility\n */\n toggleDevPanel() {\n if (this.devPanel) {\n const isVisible = this.devPanel.style.display === 'block';\n this.devPanel.style.display = isVisible ? 'none' : 'block';\n if (!isVisible) {\n this.updateDevPanel();\n }\n }\n }\n\n /**\n * Update dev panel content\n */\n updateDevPanel() {\n if (!this.devPanel) return;\n\n const stats = this.getPerformanceInsights();\n const recentRenders = this.renderHistory.slice(-5);\n const recentWarnings = this.warnings.slice(-3);\n\n this.devPanel.innerHTML = `\n <div style=\"padding: 15px; border-bottom: 1px solid #333;\">\n <strong>\uD83D\uDEE0\uFE0F Coherent.js Dev Tools</strong>\n <button onclick=\"this.parentElement.parentElement.style.display='none'\"\n style=\"float: right; background: none; border: none; color: #fff; cursor: pointer;\">\u00D7</button>\n </div>\n\n <div style=\"padding: 10px;\">\n <h4 style=\"margin: 0 0 10px 0; color: #4CAF50;\">Performance</h4>\n <div style=\"font-size: 11px;\">\n <div>Avg Render: ${stats.averageRenderTime || 0}ms</div>\n <div>Cache Hit Rate: ${((stats.cacheHits || 0) / Math.max(stats.totalRenders || 1, 1) * 100).toFixed(1)}%</div>\n <div>Memory Usage: ${(performance.memory?.usedJSHeapSize / 1024 / 1024 || 0).toFixed(1)}MB</div>\n </div>\n </div>\n\n <div style=\"padding: 10px;\">\n <h4 style=\"margin: 0 0 10px 0; color: #2196F3;\">Recent Renders</h4>\n ${recentRenders.map(r => `\n <div style=\"font-size: 10px; margin-bottom: 5px; padding: 3px; background: #333; border-radius: 3px;\">\n ${r.id}: ${r.renderTime.toFixed(1)}ms (${r.complexity} nodes)\n </div>\n `).join('')}\n </div>\n\n ${recentWarnings.length > 0 ? `\n <div style=\"padding: 10px;\">\n <h4 style=\"margin: 0 0 10px 0; color: #FF9800;\">Warnings</h4>\n ${recentWarnings.map(w => `\n <div style=\"font-size: 10px; margin-bottom: 5px; padding: 3px; background: #4a2c0a; border-radius: 3px; color: #FFB74D;\">\n ${w.type}: ${w.message}\n </div>\n `).join('')}\n </div>\n ` : ''}\n\n <div style=\"padding: 10px; font-size: 10px; color: #888;\">\n Press Ctrl+Shift+P for performance details\n </div>\n `;\n }\n\n /**\n * Setup Node.js specific dev tools\n */\n setupNodeDevTools() {\n // Add process event listeners\n process.on('SIGINT', () => {\n this.printDevSummary();\n process.exit();\n });\n }\n\n /**\n * Print development summary\n */\n printDevSummary() {\n console.log('\\n\uD83D\uDEE0\uFE0F Coherent.js Development Summary');\n console.log('=================================');\n console.log(`Total Renders: ${this.renderHistory.length}`);\n console.log(`Total Warnings: ${this.warnings.length}`);\n console.log(`Total Errors: ${this.errors.length}`);\n\n if (this.renderHistory.length > 0) {\n const avgTime = this.renderHistory.reduce((sum, r) => sum + r.renderTime, 0) / this.renderHistory.length;\n console.log(`Average Render Time: ${avgTime.toFixed(2)}ms`);\n }\n\n console.log('=================================\\n');\n }\n\n /**\n * Get performance insights\n */\n getPerformanceInsights() {\n const insights = {\n totalRenders: this.renderHistory.length,\n averageRenderTime: 0,\n slowestRender: null,\n fastestRender: null,\n cacheHits: 0,\n totalWarnings: this.warnings.length,\n totalErrors: this.errors.length\n };\n\n if (this.renderHistory.length > 0) {\n const times = this.renderHistory.map(r => r.renderTime);\n insights.averageRenderTime = times.reduce((a, b) => a + b, 0) / times.length;\n insights.slowestRender = Math.max(...times);\n insights.fastestRender = Math.min(...times);\n }\n\n // Get cache stats if available\n if (this.coherent.cache && this.coherent.cache.getStats) {\n const cacheStats = this.coherent.cache.getStats();\n insights.cacheHits = cacheStats.hits;\n insights.cacheHitRate = cacheStats.hitRate;\n }\n\n // Add performance monitor data if available\n if (performanceMonitor && performanceMonitor.getStats) {\n const perfStats = performanceMonitor.getStats();\n insights.performanceMonitorStats = perfStats;\n }\n\n return insights;\n }\n\n /**\n * Utility methods\n */\n generateRenderId() {\n return `render_${Date.now()}_${Math.random().toString(36).substr(2, 5)}`;\n }\n\n serializeComponent(component, maxDepth = 3, currentDepth = 0) {\n if (currentDepth > maxDepth) return '...';\n\n try {\n if (typeof component === 'function') {\n return `[Function: ${component.name || 'anonymous'}]`;\n }\n\n if (Array.isArray(component)) {\n return component.slice(0, 3).map(c =>\n this.serializeComponent(c, maxDepth, currentDepth + 1)\n ).concat(component.length > 3 ? [`...(${component.length - 3} more)`] : []);\n }\n\n if (component && typeof component === 'object') {\n const serialized = {};\n const keys = Object.keys(component).slice(0, 10);\n\n for (const key of keys) {\n if (key === 'children' && component[key]) {\n serialized[key] = this.serializeComponent(component[key], maxDepth, currentDepth + 1);\n } else if (typeof component[key] === 'function') {\n serialized[key] = `[Function: ${component[key].name || 'anonymous'}]`;\n } else {\n serialized[key] = component[key];\n }\n }\n\n if (Object.keys(component).length > 10) {\n serialized['...'] = `(${Object.keys(component).length - 10} more properties)`;\n }\n\n return serialized;\n }\n\n return component;\n\n } catch (_error) {\n return `[Serialization Error: ${_error.message}]`;\n }\n }\n\n clearDevData() {\n this.renderHistory = [];\n this.warnings = [];\n this.errors = [];\n this.componentRegistry.clear();\n console.log('\uD83E\uDDF9 Dev data cleared');\n }\n\n toggleFeature(feature) {\n switch (feature) {\n case 'cache':\n if (this.coherent.cache) {\n this.coherent.cache.enabled = !this.coherent.cache.enabled;\n console.log(`Cache ${this.coherent.cache.enabled ? 'enabled' : 'disabled'}`);\n }\n break;\n case 'monitoring':\n if (performanceMonitor) {\n performanceMonitor.enabled = !performanceMonitor.enabled;\n console.log(`Monitoring ${performanceMonitor.enabled ? 'enabled' : 'disabled'}`);\n }\n break;\n case 'hot-reload':\n this.hotReloadEnabled = !this.hotReloadEnabled;\n console.log(`Hot reload ${this.hotReloadEnabled ? 'enabled' : 'disabled'}`);\n break;\n default:\n console.log(`Unknown feature: ${feature}`);\n }\n }\n\n validateComponent(component) {\n return this.deepValidateComponent(component);\n }\n\n setupComponentInspector() {\n // Register components for inspection\n const originalCreateComponent = this.coherent.createComponent;\n\n if (originalCreateComponent) {\n this.coherent.createComponent = (config) => {\n const component = originalCreateComponent.call(this.coherent, config);\n\n // Register component\n this.componentRegistry.set(config.name || 'anonymous', {\n config,\n component,\n registeredAt: Date.now()\n });\n\n return component;\n };\n }\n }\n}\n\n/**\n * Create a lightweight dev tools instance\n */\nexport function createDevTools(coherentInstance) {\n return new DevTools(coherentInstance);\n}\n\n/**\n * Global dev tools utilities (available even when DevTools is disabled)\n */\nexport const devUtils = {\n /**\n * Quick component inspection\n */\n inspect: (component) => {\n console.log('\uD83D\uDD0D Component Inspection:');\n console.log('Type:', typeof component);\n console.log('Structure:', component);\n\n if (isCoherentObject(component)) {\n const tags = Object.keys(component);\n console.log('Tags:', tags);\n\n for (const tag of tags) {\n const props = component[tag];\n if (props && typeof props === 'object') {\n console.log(`${tag} props:`, Object.keys(props));\n }\n }\n }\n },\n\n /**\n * Simple validation\n */\n validate: (component) => {\n try {\n validateComponent(component);\n console.log('\u2705 Component is valid');\n return true;\n } catch (_error) {\n console.error('\u274C Component validation failed:', _error.message);\n return false;\n }\n },\n\n /**\n * Performance timing helper\n */\n time: (label, fn) => {\n const start = performance.now();\n const result = fn();\n const end = performance.now();\n console.log(`\u23F1\uFE0F ${label}: ${(end - start).toFixed(2)}ms`);\n return result;\n }\n};\n\nexport default DevTools;\n", "/**\n * Coherent.js DevTools\n * \n * Complete developer tools suite for debugging and profiling\n * \n * @module devtools\n */\n\n// Import for default export\nimport {\n ComponentInspector,\n createInspector,\n inspect,\n validateComponent\n} from './inspector.js';\n\nimport {\n PerformanceProfiler,\n createProfiler,\n measure,\n profile\n} from './profiler.js';\n\nimport {\n DevLogger,\n LogLevel,\n createLogger,\n createComponentLogger,\n createConsoleLogger\n} from './logger.js';\n\nimport {\n DevTools,\n createDevTools\n} from './dev-tools.js';\n\n// Re-export everything\nexport {\n ComponentInspector,\n createInspector,\n inspect,\n validateComponent,\n PerformanceProfiler,\n createProfiler,\n measure,\n profile,\n DevLogger,\n LogLevel,\n createLogger,\n createComponentLogger,\n createConsoleLogger,\n DevTools,\n createDevTools\n};\n\n// Default export with all utilities\nexport default {\n // Inspector\n ComponentInspector,\n createInspector,\n inspect,\n validateComponent,\n\n // Profiler\n PerformanceProfiler,\n createProfiler,\n measure,\n profile,\n\n // Logger\n DevLogger,\n LogLevel,\n createLogger,\n createComponentLogger,\n createConsoleLogger,\n\n // DevTools\n DevTools,\n createDevTools\n};\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["path", "validateComponent", "path", "validateComponent"]
|
|
3
|
+
"sources": ["../src/inspector.js", "../src/profiler.js", "../src/logger.js", "../src/dev-tools.js", "../src/component-visualizer.js", "../src/performance-dashboard.js", "../src/enhanced-errors.js"],
|
|
4
|
+
"sourcesContent": ["/**\n * Coherent.js Component Inspector\n * \n * Provides tools for inspecting component structure, props, and state\n * \n * @module devtools/inspector\n */\n\n/**\n * Component Inspector\n * Analyzes and provides insights into component structure\n */\nexport class ComponentInspector {\n constructor(options = {}) {\n this.options = {\n trackHistory: true,\n maxHistory: 100,\n verbose: false,\n ...options\n };\n \n this.components = new Map();\n this.history = [];\n this.inspectionCount = 0;\n }\n\n /**\n * Inspect a component\n * \n * @param {Object} component - Component to inspect\n * @param {Object} [metadata] - Additional metadata\n * @returns {Object} Inspection result\n */\n inspect(component, metadata = {}) {\n this.inspectionCount++;\n \n const startTime = performance.now();\n const analysis = this.analyzeComponent(component);\n const tree = this.buildComponentTree(component);\n const stats = this.calculateStats(component);\n const endTime = performance.now();\n \n const inspection = {\n id: this.generateId(),\n timestamp: Date.now(),\n inspectionTime: endTime - startTime,\n component,\n metadata,\n // Flatten analysis results to top level for easier access\n type: analysis.type,\n structure: component,\n props: this.extractProps(component),\n depth: stats.depth || 0, // Use stats.depth, not tree.depth\n childCount: stats.elementCount || 0,\n complexity: stats.complexity || 0,\n nodeCount: stats.nodeCount || 0,\n // Keep nested data for detailed inspection\n analysis,\n tree,\n stats,\n valid: analysis.valid,\n issues: analysis.issues || [],\n errors: analysis.issues || [], // Alias for compatibility\n warnings: analysis.warnings || []\n };\n\n // Track in history\n if (this.options.trackHistory) {\n this.history.push(inspection);\n \n // Limit history size\n if (this.history.length > this.options.maxHistory) {\n this.history.shift();\n }\n }\n\n // Store component\n this.components.set(inspection.id, inspection);\n\n if (this.options.verbose) {\n console.log('[Inspector] Component inspected:', inspection.id);\n }\n\n return inspection;\n }\n\n /**\n * Extract props from component\n */\n extractProps(component) {\n const props = [];\n \n if (!component || typeof component !== 'object') {\n return props;\n }\n \n Object.keys(component).forEach(key => {\n const element = component[key];\n if (element && typeof element === 'object') {\n Object.keys(element).forEach(prop => {\n if (!props.includes(prop) && prop !== 'children' && prop !== 'text') {\n props.push(prop);\n }\n });\n }\n });\n \n return props;\n }\n\n /**\n * Analyze component structure\n */\n analyzeComponent(component) {\n if (!component || typeof component !== 'object') {\n return {\n type: typeof component,\n valid: false,\n issues: ['Component is not an object']\n };\n }\n\n const issues = [];\n const warnings = [];\n const info = [];\n const seen = new WeakSet();\n\n // Check for circular references\n const checkCircular = (obj, path = []) => {\n if (obj === null || typeof obj !== 'object') {\n return;\n }\n\n if (seen.has(obj)) {\n warnings.push(`circular reference detected at ${path.join('.')}`);\n return;\n }\n\n seen.add(obj);\n\n if (Array.isArray(obj)) {\n obj.forEach((item, index) => checkCircular(item, [...path, `[${index}]`]));\n } else {\n Object.keys(obj).forEach(key => {\n checkCircular(obj[key], [...path, key]);\n });\n }\n };\n\n checkCircular(component, ['root']);\n\n // Check component structure\n const keys = Object.keys(component);\n \n if (keys.length === 0) {\n issues.push('Component is empty');\n }\n\n if (keys.length > 1) {\n warnings.push('Component has multiple root elements');\n }\n\n // Analyze each element\n keys.forEach(key => {\n const element = component[key];\n \n if (typeof element === 'object' && element !== null) {\n // Check for common issues\n if (element.children && !Array.isArray(element.children)) {\n issues.push(`Children of ${key} should be an array`);\n }\n\n if (element.className && typeof element.className !== 'string') {\n warnings.push(`className of ${key} should be a string`);\n }\n\n if (element.style && typeof element.style !== 'object') {\n warnings.push(`style of ${key} should be an object`);\n }\n\n // Check for event handlers\n const eventHandlers = Object.keys(element).filter(k => k.startsWith('on'));\n if (eventHandlers.length > 0) {\n info.push(`${key} has ${eventHandlers.length} event handler(s): ${eventHandlers.join(', ')}`);\n }\n }\n });\n\n return {\n type: 'component',\n valid: issues.length === 0,\n rootElements: keys,\n issues,\n warnings,\n info\n };\n }\n\n /**\n * Build component tree structure\n */\n buildComponentTree(component, depth = 0, maxDepth = 10) {\n if (depth > maxDepth) {\n return { _truncated: true, reason: 'Max depth reached' };\n }\n\n if (!component || typeof component !== 'object') {\n return { type: typeof component, value: component };\n }\n\n if (Array.isArray(component)) {\n return component.map(child => this.buildComponentTree(child, depth + 1, maxDepth));\n }\n\n const tree = {};\n\n for (const [key, value] of Object.entries(component)) {\n if (typeof value === 'object' && value !== null) {\n tree[key] = {\n type: 'element',\n props: {},\n children: []\n };\n\n // Extract props and children\n for (const [prop, propValue] of Object.entries(value)) {\n if (prop === 'children') {\n tree[key].children = this.buildComponentTree(propValue, depth + 1, maxDepth);\n } else {\n tree[key].props[prop] = propValue;\n }\n }\n } else {\n tree[key] = { type: typeof value, value };\n }\n }\n\n return tree;\n }\n\n /**\n * Calculate component statistics\n */\n calculateStats(component) {\n const stats = {\n elementCount: 0,\n depth: 0,\n textNodes: 0,\n eventHandlers: 0,\n hasStyles: false,\n hasClasses: false,\n complexity: 0\n };\n\n const traverse = (node, currentDepth = 1) => {\n if (!node || typeof node !== 'object') {\n if (node !== null && node !== undefined) {\n stats.textNodes++;\n }\n return;\n }\n\n if (Array.isArray(node)) {\n node.forEach(child => traverse(child, currentDepth));\n return;\n }\n\n stats.elementCount++;\n stats.depth = Math.max(stats.depth, currentDepth);\n\n for (const [_key, value] of Object.entries(node)) {\n if (typeof value === 'object' && value !== null) {\n // Check for styles and classes\n if (value.style) stats.hasStyles = true;\n if (value.className) stats.hasClasses = true;\n\n // Count event handlers\n const handlers = Object.keys(value).filter(k => k.startsWith('on'));\n stats.eventHandlers += handlers.length;\n\n // Traverse children\n if (value.children) {\n traverse(value.children, currentDepth + 1);\n }\n }\n }\n };\n\n traverse(component);\n\n // Calculate complexity based on various factors\n stats.complexity = \n stats.elementCount * 10 + // Base complexity from element count\n stats.depth * 5 + // Depth adds complexity\n stats.eventHandlers * 3 + // Event handlers add complexity\n stats.textNodes + // Text nodes add minimal complexity\n (stats.hasStyles ? 5 : 0) + // Styles add complexity\n (stats.hasClasses ? 3 : 0); // Classes add complexity\n\n return stats;\n }\n\n /**\n * Get component by ID\n */\n getComponent(id) {\n return this.components.get(id);\n }\n\n /**\n * Get inspection history\n */\n getHistory() {\n return [...this.history];\n }\n\n /**\n * Search components by criteria\n */\n search(criteria) {\n const results = [];\n\n for (const [id, inspection] of this.components.entries()) {\n let matches = true;\n\n if (criteria.hasIssues && inspection.analysis.issues.length === 0) {\n matches = false;\n }\n\n if (criteria.hasWarnings && inspection.analysis.warnings.length === 0) {\n matches = false;\n }\n\n if (criteria.minElements && inspection.stats.elementCount < criteria.minElements) {\n matches = false;\n }\n\n if (criteria.maxElements && inspection.stats.elementCount > criteria.maxElements) {\n matches = false;\n }\n\n if (matches) {\n results.push({ id, inspection });\n }\n }\n\n return results;\n }\n\n /**\n * Compare two components\n */\n compare(componentA, componentB) {\n const inspectionA = typeof componentA === 'string' \n ? this.getComponent(componentA)\n : this.inspect(componentA);\n \n const inspectionB = typeof componentB === 'string'\n ? this.getComponent(componentB)\n : this.inspect(componentB);\n\n return {\n statsComparison: {\n elementCount: {\n a: inspectionA.stats.elementCount,\n b: inspectionB.stats.elementCount,\n diff: inspectionB.stats.elementCount - inspectionA.stats.elementCount\n },\n depth: {\n a: inspectionA.stats.depth,\n b: inspectionB.stats.depth,\n diff: inspectionB.stats.depth - inspectionA.stats.depth\n },\n textNodes: {\n a: inspectionA.stats.textNodes,\n b: inspectionB.stats.textNodes,\n diff: inspectionB.stats.textNodes - inspectionA.stats.textNodes\n }\n },\n structureMatch: JSON.stringify(inspectionA.tree) === JSON.stringify(inspectionB.tree),\n issuesComparison: {\n a: inspectionA.analysis.issues.length,\n b: inspectionB.analysis.issues.length\n }\n };\n }\n\n /**\n * Generate report\n */\n generateReport() {\n return {\n totalInspections: this.inspectionCount,\n componentsTracked: this.components.size,\n historySize: this.history.length,\n summary: {\n totalElements: Array.from(this.components.values())\n .reduce((sum, c) => sum + c.stats.elementCount, 0),\n averageDepth: Array.from(this.components.values())\n .reduce((sum, c) => sum + c.stats.depth, 0) / this.components.size || 0,\n componentsWithIssues: Array.from(this.components.values())\n .filter(c => c.analysis.issues.length > 0).length,\n componentsWithWarnings: Array.from(this.components.values())\n .filter(c => c.analysis.warnings.length > 0).length\n }\n };\n }\n\n /**\n * Clear all data\n */\n clear() {\n this.components.clear();\n this.history = [];\n this.inspectionCount = 0;\n }\n\n /**\n * Clear history only\n */\n clearHistory() {\n this.history = [];\n }\n\n /**\n * Get inspection statistics\n */\n getStats() {\n return {\n totalInspections: this.inspectionCount,\n componentsTracked: this.components.size,\n historySize: this.history.length\n };\n }\n\n /**\n * Export inspection data\n */\n export() {\n return {\n inspections: this.history.map(h => ({\n id: h.id,\n timestamp: h.timestamp,\n type: h.type,\n complexity: h.complexity,\n depth: h.depth,\n issues: h.issues,\n warnings: h.warnings\n })),\n stats: this.getStats(),\n exportedAt: Date.now()\n };\n }\n\n /**\n * Generate unique ID\n */\n generateId() {\n return `inspect-${Date.now()}-${Math.random().toString(36).substring(7)}`;\n }\n}\n\n/**\n * Create a component inspector\n */\nexport function createInspector(options = {}) {\n return new ComponentInspector(options);\n}\n\n/**\n * Quick inspect utility\n */\nexport function inspect(component, options = {}) {\n const inspector = new ComponentInspector(options);\n return inspector.inspect(component);\n}\n\n/**\n * Validate component structure\n */\nexport function validateComponent(component) {\n const inspector = new ComponentInspector();\n const inspection = inspector.inspect(component);\n \n return {\n valid: inspection.valid,\n errors: inspection.issues || [],\n issues: inspection.issues || [],\n warnings: inspection.warnings || [],\n stats: inspection.stats\n };\n}\n\nexport default {\n ComponentInspector,\n createInspector,\n inspect,\n validateComponent\n};\n", "/**\n * Coherent.js Performance Profiler\n * \n * Tracks and analyzes rendering performance\n * \n * @module devtools/profiler\n */\n\n/**\n * Performance Profiler\n * Measures and analyzes component rendering performance\n */\nexport class PerformanceProfiler {\n constructor(options = {}) {\n this.options = {\n enabled: true,\n sampleRate: 1.0, // 1.0 = 100% sampling\n slowThreshold: 16, // 16ms = 60fps\n trackMemory: typeof performance !== 'undefined' && performance.memory,\n maxSamples: options.maxSamples || 1000,\n ...options\n };\n \n this.measurements = [];\n this.sessions = new Map();\n this.currentSession = null;\n this.marks = new Map();\n }\n\n /**\n * Start a profiling session\n */\n start(name = 'default') {\n if (!this.options.enabled) {\n return null;\n }\n\n // Apply sampling\n if (this.options.sampleRate < 1.0 && Math.random() > this.options.sampleRate) {\n return null;\n }\n\n const session = {\n id: this.generateId(),\n name,\n startTime: Date.now(),\n measurements: [],\n marks: [],\n active: true\n };\n\n this.sessions.set(session.id, session);\n this.currentSession = session;\n\n if (typeof performance !== 'undefined' && performance.mark) {\n performance.mark(`coherent-session-start-${session.id}`);\n }\n\n return session.id;\n }\n\n /**\n * Stop a profiling session\n */\n stop(sessionId) {\n if (!sessionId) {\n return null;\n }\n\n const session = this.sessions.get(sessionId);\n\n if (!session) {\n return null; // Gracefully handle non-existent sessions\n }\n\n session.endTime = Date.now();\n session.duration = session.endTime - session.startTime;\n session.active = false;\n\n if (typeof performance !== 'undefined' && performance.mark) {\n performance.mark(`coherent-session-end-${session.id}`);\n }\n\n if (this.currentSession === session) {\n this.currentSession = null;\n }\n\n // Store measurement\n this.measurements.push(session);\n \n // Limit measurements (maxSamples)\n if (this.measurements.length > this.options.maxSamples) {\n this.measurements.shift();\n }\n\n return this.analyzeSession(session);\n }\n\n /**\n * Start measuring a render\n */\n startRender(componentName, props = {}) {\n if (!this.options.enabled) return null;\n \n // Sample rate check\n if (Math.random() > this.options.sampleRate) return null;\n\n const measurementId = this.generateId();\n const measurement = {\n id: measurementId,\n componentName,\n props,\n startTime: Date.now(),\n startMemory: this.getMemoryUsage(),\n phase: 'render'\n };\n\n this.marks.set(measurementId, measurement);\n\n if (typeof performance !== 'undefined' && performance.mark) {\n performance.mark(`coherent-render-start-${measurementId}`);\n }\n\n return measurementId;\n }\n\n /**\n * End measuring a render\n */\n endRender(measurementId, result = {}) {\n if (!measurementId || !this.marks.has(measurementId)) return null;\n\n const measurement = this.marks.get(measurementId);\n measurement.endTime = Date.now();\n measurement.duration = measurement.endTime - measurement.startTime;\n measurement.endMemory = this.getMemoryUsage();\n measurement.memoryDelta = measurement.endMemory - measurement.startMemory;\n measurement.result = result;\n measurement.slow = measurement.duration > this.options.slowThreshold;\n\n if (typeof performance !== 'undefined' && performance.mark) {\n performance.mark(`coherent-render-end-${measurementId}`);\n \n if (performance.measure) {\n try {\n performance.measure(\n `coherent-render-${measurementId}`,\n `coherent-render-start-${measurementId}`,\n `coherent-render-end-${measurementId}`\n );\n } catch {\n // Ignore measure errors\n }\n }\n }\n\n // Add to measurements\n this.measurements.push(measurement);\n \n // Add to current session\n if (this.currentSession) {\n this.currentSession.measurements.push(measurement);\n }\n\n // Clean up\n this.marks.delete(measurementId);\n\n return measurement;\n }\n\n /**\n * Mark a point in time\n */\n mark(name, data = {}) {\n const mark = {\n name,\n timestamp: Date.now(),\n data,\n memory: this.getMemoryUsage()\n };\n\n if (this.currentSession) {\n this.currentSession.marks.push(mark);\n }\n\n if (typeof performance !== 'undefined' && performance.mark) {\n performance.mark(`coherent-mark-${name}`);\n }\n\n return mark;\n }\n\n /**\n * Measure time between two marks\n */\n measure(startMark, endMark) {\n const start = this.findMark(startMark);\n const end = this.findMark(endMark);\n\n if (!start || !end) {\n throw new Error('Mark not found');\n }\n\n return {\n duration: end.timestamp - start.timestamp,\n startMark: start.name,\n endMark: end.name\n };\n }\n\n /**\n * Get memory usage\n */\n getMemoryUsage() {\n if (typeof performance !== 'undefined' && performance.memory) {\n return {\n used: performance.memory.usedJSHeapSize,\n total: performance.memory.totalJSHeapSize,\n limit: performance.memory.jsHeapSizeLimit\n };\n }\n return null;\n }\n\n /**\n * Find a mark by name\n */\n findMark(name) {\n if (!this.currentSession) return null;\n return this.currentSession.marks.find(m => m.name === name);\n }\n\n /**\n * Get all measurements\n */\n getMeasurements(filter = {}) {\n let results = [...this.measurements];\n\n if (filter.componentName) {\n results = results.filter(m => m.componentName === filter.componentName);\n }\n\n if (filter.slow) {\n results = results.filter(m => m.slow);\n }\n\n if (filter.minDuration) {\n results = results.filter(m => m.duration >= filter.minDuration);\n }\n\n if (filter.limit) {\n results = results.slice(0, filter.limit);\n }\n\n return results;\n }\n\n /**\n * Analyze a session\n */\n analyzeSession(session) {\n const measurements = session.measurements;\n\n if (measurements.length === 0) {\n return {\n session: session.id,\n duration: session.duration,\n measurements: 0,\n analysis: null\n };\n }\n\n const durations = measurements.map(m => m.duration);\n const sorted = [...durations].sort((a, b) => a - b);\n\n return {\n session: session.id,\n name: session.name,\n duration: session.duration,\n measurements: measurements.length,\n analysis: {\n total: durations.reduce((a, b) => a + b, 0),\n average: durations.reduce((a, b) => a + b, 0) / durations.length,\n median: sorted[Math.floor(sorted.length / 2)],\n min: Math.min(...durations),\n max: Math.max(...durations),\n p95: sorted[Math.floor(sorted.length * 0.95)],\n p99: sorted[Math.floor(sorted.length * 0.99)],\n slowRenders: measurements.filter(m => m.slow).length,\n slowPercentage: (measurements.filter(m => m.slow).length / measurements.length) * 100\n },\n byComponent: this.groupByComponent(measurements),\n slowest: measurements\n .sort((a, b) => b.duration - a.duration)\n .slice(0, 10)\n .map(m => ({\n component: m.componentName,\n duration: m.duration,\n timestamp: m.startTime\n }))\n };\n }\n\n /**\n * Group measurements by component\n */\n groupByComponent(measurements) {\n const groups = {};\n\n measurements.forEach(m => {\n if (!groups[m.componentName]) {\n groups[m.componentName] = {\n count: 0,\n totalDuration: 0,\n durations: []\n };\n }\n\n groups[m.componentName].count++;\n groups[m.componentName].totalDuration += m.duration;\n groups[m.componentName].durations.push(m.duration);\n });\n\n // Calculate stats for each component\n Object.keys(groups).forEach(name => {\n const group = groups[name];\n group.average = group.totalDuration / group.count;\n group.min = Math.min(...group.durations);\n group.max = Math.max(...group.durations);\n });\n\n return groups;\n }\n\n /**\n * Get performance summary\n */\n getSummary() {\n const allMeasurements = this.measurements;\n\n if (allMeasurements.length === 0) {\n return {\n totalMeasurements: 0,\n totalSessions: this.sessions.size,\n analysis: null\n };\n }\n\n const durations = allMeasurements.map(m => m.duration);\n\n return {\n totalMeasurements: allMeasurements.length,\n totalSessions: this.sessions.size,\n slowRenders: allMeasurements.filter(m => m.slow).length,\n analysis: {\n average: durations.reduce((a, b) => a + b, 0) / durations.length,\n min: Math.min(...durations),\n max: Math.max(...durations),\n slowPercentage: (allMeasurements.filter(m => m.slow).length / allMeasurements.length) * 100\n },\n byComponent: this.groupByComponent(allMeasurements),\n recentSlow: allMeasurements\n .filter(m => m.slow)\n .slice(-10)\n .map(m => ({\n component: m.componentName,\n duration: m.duration,\n timestamp: m.startTime\n }))\n };\n }\n\n /**\n * Get statistics\n */\n getStatistics() {\n if (this.measurements.length === 0) {\n return { mean: 0, median: 0, min: 0, max: 0, stdDev: 0 };\n }\n\n const durations = this.measurements.map(m => m.duration);\n const sum = durations.reduce((a, b) => a + b, 0);\n const mean = sum / durations.length;\n \n const sorted = [...durations].sort((a, b) => a - b);\n const median = sorted[Math.floor(sorted.length / 2)];\n \n const variance = durations.reduce((acc, val) => acc + Math.pow(val - mean, 2), 0) / durations.length;\n const stdDev = Math.sqrt(variance);\n\n return {\n mean,\n median,\n min: Math.min(...durations),\n max: Math.max(...durations),\n stdDev\n };\n }\n\n /**\n * Get bottlenecks\n */\n getBottlenecks(threshold = null) {\n const slowThreshold = threshold || this.options.slowThreshold;\n return this.measurements\n .filter(m => m.duration > slowThreshold)\n .sort((a, b) => b.duration - a.duration)\n .map(m => ({\n name: m.name,\n duration: m.duration,\n timestamp: m.startTime\n }));\n }\n\n /**\n * Get metrics\n */\n getMetrics() {\n const operationCounts = {};\n this.measurements.forEach(m => {\n operationCounts[m.name] = (operationCounts[m.name] || 0) + 1;\n });\n\n const totalDuration = this.measurements.reduce((sum, m) => sum + m.duration, 0);\n\n return {\n totalOperations: this.measurements.length,\n totalDuration,\n operationCounts,\n averageDuration: this.measurements.length > 0 ? totalDuration / this.measurements.length : 0,\n memoryUsage: this.options.trackMemory && typeof performance !== 'undefined' && performance.memory\n ? performance.memory.usedJSHeapSize\n : null\n };\n }\n\n /**\n * Generate report\n */\n generateReport() {\n const stats = this.getStatistics();\n const metrics = this.getMetrics();\n const bottlenecks = this.getBottlenecks();\n const recommendations = this.getRecommendations();\n\n return {\n summary: {\n totalOperations: metrics.totalOperations,\n averageDuration: metrics.averageDuration,\n slowOperations: bottlenecks.length\n },\n statistics: stats,\n operations: this.measurements.map(m => ({\n name: m.name,\n duration: m.duration,\n timestamp: m.startTime\n })),\n bottlenecks: bottlenecks.slice(0, 10),\n recommendations,\n timestamp: Date.now()\n };\n }\n\n /**\n * Export profiling data\n */\n export() {\n return {\n sessions: Array.from(this.sessions.values()),\n measurements: this.measurements,\n metrics: this.getMetrics(),\n statistics: this.getStatistics(),\n exportedAt: Date.now()\n };\n }\n\n /**\n * Format metrics for display\n */\n formatMetrics() {\n const metrics = this.getMetrics();\n const stats = this.getStatistics();\n \n let output = `Performance Metrics\\n`;\n output += `==================\\n`;\n output += `Total Operations: ${metrics.totalOperations}\\n`;\n output += `Average Duration: ${metrics.averageDuration.toFixed(2)}ms\\n`;\n output += `Mean: ${stats.mean.toFixed(2)}ms\\n`;\n output += `Median: ${stats.median.toFixed(2)}ms\\n`;\n output += `Min: ${stats.min.toFixed(2)}ms\\n`;\n output += `Max: ${stats.max.toFixed(2)}ms\\n`;\n \n return output;\n }\n\n /**\n * Compare two profiles\n */\n compare(profileId1, profileId2) {\n const session1 = this.sessions.get(profileId1);\n const session2 = this.sessions.get(profileId2);\n\n if (!session1 || !session2) {\n return null;\n }\n\n return {\n difference: session2.duration - session1.duration,\n percentChange: ((session2.duration - session1.duration) / session1.duration) * 100,\n profile1: { name: session1.name, duration: session1.duration },\n profile2: { name: session2.name, duration: session2.duration }\n };\n }\n\n /**\n * Get performance recommendations\n */\n getRecommendations() {\n const recommendations = [];\n const bottlenecks = this.getBottlenecks();\n const stats = this.getStatistics();\n\n if (bottlenecks.length > 0) {\n bottlenecks.slice(0, 5).forEach(bottleneck => {\n recommendations.push({\n type: 'bottleneck',\n operation: bottleneck.name,\n suggestion: `Optimize ${bottleneck.name} - duration: ${bottleneck.duration.toFixed(2)}ms exceeds threshold`,\n severity: 'high',\n message: `Found slow operation exceeding ${this.options.slowThreshold}ms`\n });\n });\n }\n\n if (stats.max > this.options.slowThreshold * 2) {\n recommendations.push({\n type: 'performance',\n operation: 'general',\n suggestion: `Review operations with high duration`,\n message: `Maximum duration (${stats.max.toFixed(2)}ms) is significantly high`,\n severity: 'medium'\n });\n }\n\n return recommendations;\n }\n\n /**\n * Clear all data\n */\n clear() {\n this.measurements = [];\n this.sessions.clear();\n this.currentSession = null;\n this.marks.clear();\n }\n\n /**\n * Enable profiler\n */\n enable() {\n this.options.enabled = true;\n }\n\n /**\n * Disable profiler\n */\n disable() {\n this.options.enabled = false;\n }\n\n /**\n * Generate unique ID\n */\n generateId() {\n return `prof-${Date.now()}-${Math.random().toString(36).substring(7)}`;\n }\n}\n\n/**\n * Create a performance profiler\n */\nexport function createProfiler(options = {}) {\n return new PerformanceProfiler(options);\n}\n\n/**\n * Measure a function execution\n */\nexport async function measure(name, fn, profiler = null) {\n const prof = profiler || new PerformanceProfiler();\n const sessionId = prof.start(name);\n \n try {\n const value = await fn();\n const result = prof.stop(sessionId);\n return { value, duration: result?.duration || 0 };\n } catch (error) {\n const result = prof.stop(sessionId);\n throw { error, duration: result?.duration || 0 };\n }\n}\n\n/**\n * Create a profiling decorator\n */\nexport function profile(fn) {\n return function(...args) {\n const result = fn(...args);\n return result;\n };\n}\n\nexport default {\n PerformanceProfiler,\n createProfiler,\n measure,\n profile\n};\n", "/**\n * Coherent.js Development Logger\n * \n * Advanced logging system for development and debugging\n * \n * @module devtools/logger\n */\n\n/**\n * Log levels\n */\nexport const LogLevel = {\n TRACE: 0,\n DEBUG: 1,\n INFO: 2,\n WARN: 3,\n ERROR: 4,\n FATAL: 5\n};\n\n/**\n * Development Logger\n * Provides structured logging with filtering and formatting\n */\nexport class DevLogger {\n constructor(options = {}) {\n this.options = {\n level: options.level !== undefined ? options.level : LogLevel.INFO,\n prefix: '[Coherent]',\n timestamp: true,\n colors: true,\n maxLogs: 1000,\n maxBufferSize: options.maxBufferSize || 1000,\n grouping: true,\n buffer: options.buffer || false,\n sampleRate: options.sampleRate !== undefined ? options.sampleRate : 1.0,\n silent: options.silent || false,\n output: options.output || null,\n categories: options.categories || null,\n filter: options.filter || null,\n ...options\n };\n \n this.logs = [];\n this.groups = [];\n this.filters = [];\n this.handlers = [];\n this.context = {};\n }\n\n /**\n * Generic log method (supports category logging)\n */\n log(categoryOrLevel, messageOrData, data) {\n // Support log(category, message) signature\n if (typeof categoryOrLevel === 'string' && typeof messageOrData === 'string') {\n return this.logWithLevel(LogLevel.INFO, messageOrData, { category: categoryOrLevel, ...data });\n }\n // Support log(level, message, data) signature\n return this.logWithLevel(categoryOrLevel, messageOrData, data);\n }\n\n /**\n * Log a trace message\n */\n trace(message, data = {}) {\n return this.logWithLevel(LogLevel.TRACE, message, data);\n }\n\n /**\n * Log a debug message\n */\n debug(message, data = {}) {\n return this.log(LogLevel.DEBUG, message, data);\n }\n\n /**\n * Log an info message\n */\n info(message, data = {}) {\n return this.log(LogLevel.INFO, message, data);\n }\n\n /**\n * Log a warning\n */\n warn(message, data = {}) {\n return this.log(LogLevel.WARN, message, data);\n }\n\n /**\n * Log an error\n */\n error(message, data = {}) {\n if (data instanceof Error) {\n data = {\n message: data.message,\n stack: data.stack,\n name: data.name,\n ...data\n };\n }\n return this.logWithLevel(LogLevel.ERROR, message, data);\n }\n\n /**\n * Log a fatal error\n */\n fatal(message, data = {}) {\n return this.log(LogLevel.FATAL, message, data);\n }\n\n /**\n * Core logging function\n */\n logWithLevel(level, message, data = {}) {\n // Apply sampling\n if (this.options.sampleRate < 1.0 && Math.random() > this.options.sampleRate) {\n return;\n }\n\n // Check if level is enabled\n if (level < this.options.level) {\n return;\n }\n\n // Apply filters\n if (!this.shouldLog(level, message, data)) {\n return;\n }\n\n // Merge context with data\n const mergedData = { ...this.context, ...data };\n\n const logEntry = {\n id: this.generateId(),\n level,\n levelName: this.getLevelName(level),\n message,\n data: mergedData,\n timestamp: Date.now(),\n group: this.groups.length > 0 ? this.groups[this.groups.length - 1] : null,\n stack: level >= LogLevel.ERROR ? new Error().stack : null\n };\n\n // Store log (always store for history/export)\n this.logs.push(logEntry);\n \n // Limit log size (rotation)\n const maxSize = this.options.buffer ? this.options.maxBufferSize : this.options.maxLogs;\n if (this.logs.length > maxSize) {\n this.logs.shift();\n }\n\n // Call handlers\n this.handlers.forEach(handler => {\n try {\n handler(logEntry);\n } catch (error) {\n console.error('Error in log handler:', error);\n }\n });\n\n // Output to console\n this.output(logEntry);\n\n return logEntry;\n }\n\n /**\n * Output log to console\n */\n output(logEntry) {\n const parts = [];\n\n // Timestamp\n if (this.options.timestamp) {\n const date = new Date(logEntry.timestamp);\n parts.push(`[${date.toISOString()}]`);\n }\n\n // Prefix\n if (this.options.prefix) {\n parts.push(this.options.prefix);\n }\n\n // Level\n parts.push(`[${logEntry.levelName}]`);\n\n // Group\n if (logEntry.group) {\n parts.push(`[${logEntry.group}]`);\n }\n\n // Message\n parts.push(logEntry.message);\n\n // Add context data to output if present\n const contextKeys = Object.keys(logEntry.data);\n if (contextKeys.length > 0) {\n const contextStr = contextKeys.map(key => `${key}=${logEntry.data[key]}`).join(' ');\n parts.push(`{${contextStr}}`);\n }\n\n const output = parts.join(' ');\n\n // Skip output if silent mode\n if (this.options.silent) {\n return;\n }\n\n // Use custom output handler if provided\n if (this.options.output) {\n this.options.output(logEntry);\n return;\n }\n\n // Console output\n if (typeof console !== 'undefined') {\n switch (logEntry.level) {\n case LogLevel.TRACE:\n case LogLevel.DEBUG:\n case LogLevel.INFO:\n console.log(output, logEntry.data);\n break;\n case LogLevel.WARN:\n console.warn(output, logEntry.data);\n break;\n case LogLevel.ERROR:\n case LogLevel.FATAL:\n console.error(output, logEntry.data);\n if (logEntry.stack) {\n console.error(logEntry.stack);\n }\n break;\n }\n } else {\n console.log(output, logEntry.data);\n }\n }\n\n /**\n * Get color style for log level\n */\n getColorStyle(level) {\n const styles = {\n [LogLevel.TRACE]: 'color: gray',\n [LogLevel.DEBUG]: 'color: blue',\n [LogLevel.INFO]: 'color: green',\n [LogLevel.WARN]: 'color: orange',\n [LogLevel.ERROR]: 'color: red',\n [LogLevel.FATAL]: 'color: red; font-weight: bold'\n };\n return styles[level] || '';\n }\n\n /**\n * Get level name\n */\n getLevelName(level) {\n const names = {\n [LogLevel.TRACE]: 'TRACE',\n [LogLevel.DEBUG]: 'DEBUG',\n [LogLevel.INFO]: 'INFO',\n [LogLevel.WARN]: 'WARN',\n [LogLevel.ERROR]: 'ERROR',\n [LogLevel.FATAL]: 'FATAL'\n };\n return names[level] || 'UNKNOWN';\n }\n\n /**\n * Check if log should be output\n */\n shouldLog(level, message, data) {\n // Check custom filter option\n if (this.options.filter && !this.options.filter(message, data)) {\n return false;\n }\n\n // Check category filter\n if (this.options.categories && data.category) {\n if (!this.options.categories.includes(data.category)) {\n return false;\n }\n }\n\n // Check registered filters\n if (this.filters.length > 0) {\n return this.filters.every(filter => filter(level, message, data));\n }\n\n return true;\n }\n\n /**\n * Add a filter\n */\n addFilter(filter) {\n this.filters.push(filter);\n }\n\n /**\n * Remove a filter\n */\n removeFilter(filter) {\n const index = this.filters.indexOf(filter);\n if (index > -1) {\n this.filters.splice(index, 1);\n }\n }\n\n /**\n * Add a log handler\n */\n addHandler(handler) {\n this.handlers.push(handler);\n }\n\n /**\n * Remove a log handler\n */\n removeHandler(handler) {\n const index = this.handlers.indexOf(handler);\n if (index > -1) {\n this.handlers.splice(index, 1);\n }\n }\n\n /**\n * Start a log group\n */\n group(name) {\n this.groups.push(name);\n \n if (typeof console !== 'undefined' && console.group) {\n console.group(name);\n }\n }\n\n /**\n * End a log group\n */\n groupEnd() {\n this.groups.pop();\n \n if (typeof console !== 'undefined' && console.groupEnd) {\n console.groupEnd();\n }\n }\n\n /**\n * Get all logs\n */\n getLogs(filter = {}) {\n let results = [...this.logs];\n\n if (filter.level !== undefined) {\n results = results.filter(log => log.level >= filter.level);\n }\n\n if (filter.group) {\n results = results.filter(log => log.group === filter.group);\n }\n\n if (filter.search) {\n const search = filter.search.toLowerCase();\n results = results.filter(log => \n log.message.toLowerCase().includes(search) ||\n JSON.stringify(log.data).toLowerCase().includes(search)\n );\n }\n\n if (filter.limit) {\n results = results.slice(-filter.limit);\n }\n\n return results;\n }\n\n /**\n * Get log statistics\n */\n getStats() {\n const byLevel = {};\n \n Object.values(LogLevel).forEach(level => {\n byLevel[this.getLevelName(level)] = 0;\n });\n\n this.logs.forEach(log => {\n byLevel[log.levelName]++;\n });\n\n return {\n total: this.logs.length,\n byLevel,\n groups: [...new Set(this.logs.map(l => l.group).filter(Boolean))],\n timeRange: this.logs.length > 0 ? {\n start: this.logs[0].timestamp,\n end: this.logs[this.logs.length - 1].timestamp,\n duration: this.logs[this.logs.length - 1].timestamp - this.logs[0].timestamp\n } : null\n };\n }\n\n /**\n * Clear all logs\n */\n clear() {\n this.logs = [];\n this.groups = [];\n }\n\n /**\n * Set log level\n */\n setLevel(level) {\n this.options.level = level;\n }\n\n /**\n * Export logs\n */\n export(format = 'array') {\n if (format === 'array' || !format) {\n // Return array of log objects for tests\n return this.logs.map(log => ({\n level: log.levelName,\n message: log.message,\n timestamp: log.timestamp,\n data: log.data\n }));\n }\n \n switch (format) {\n case 'json':\n return JSON.stringify(this.logs, null, 2);\n \n case 'csv':\n const headers = ['timestamp', 'level', 'group', 'message', 'data'];\n const rows = this.logs.map(log => [\n new Date(log.timestamp).toISOString(),\n log.levelName,\n log.group || '',\n log.message,\n JSON.stringify(log.data)\n ]);\n return [headers, ...rows].map(row => row.join(',')).join('\\n');\n \n case 'text':\n return this.logs.map(log => {\n const date = new Date(log.timestamp).toISOString();\n const group = log.group ? `[${log.group}]` : '';\n return `${date} [${log.levelName}] ${group} ${log.message} ${JSON.stringify(log.data)}`;\n }).join('\\n');\n \n default:\n throw new Error(`Unknown export format: ${format}`);\n }\n }\n\n /**\n * Create a logger with additional context\n */\n withContext(context) {\n const contextLogger = new DevLogger(this.options);\n contextLogger.context = { ...this.context, ...context };\n contextLogger.logs = this.logs; // Share log buffer\n contextLogger.groups = this.groups;\n contextLogger.filters = this.filters;\n contextLogger.handlers = this.handlers;\n return contextLogger;\n }\n\n /**\n * Log a table\n */\n table(data) {\n if (typeof console !== 'undefined' && console.table) {\n console.table(data);\n } else {\n console.log(JSON.stringify(data, null, 2));\n }\n }\n\n /**\n * Start a timer\n */\n time(label) {\n if (typeof console !== 'undefined' && console.time) {\n console.time(label);\n }\n }\n\n /**\n * End a timer\n */\n timeEnd(label) {\n if (typeof console !== 'undefined' && console.timeEnd) {\n console.timeEnd(label);\n }\n }\n\n /**\n * Get log buffer\n */\n getBuffer() {\n return this.logs;\n }\n\n /**\n * Flush buffered logs\n */\n flush() {\n // Output all buffered logs\n this.logs.forEach(log => {\n this.output(log);\n });\n }\n\n /**\n * Clear buffer\n */\n clearBuffer() {\n this.logs = [];\n }\n\n /**\n * Generate unique ID\n */\n generateId() {\n return `log-${Date.now()}-${Math.random().toString(36).substring(7)}`;\n }\n}\n\n/**\n * Create a logger\n */\nexport function createLogger(options = {}) {\n return new DevLogger(options);\n}\n\n/**\n * Create a component logger\n */\nexport function createComponentLogger(componentName, options = {}) {\n const logger = new DevLogger({\n prefix: `[${componentName}]`,\n ...options\n });\n\n // Add perf method for component performance logging\n logger.perf = (operation, duration) => {\n logger.info(`${operation} completed in ${duration}ms`);\n };\n\n // Add lifecycle method for component lifecycle logging\n logger.lifecycle = (event) => {\n logger.info(`Lifecycle: ${event}`);\n };\n\n return logger;\n}\n\n/**\n * Create a console logger (simple wrapper)\n */\nexport function createConsoleLogger(prefix = '') {\n return {\n trace: (...args) => console.debug(prefix, ...args),\n debug: (...args) => console.debug(prefix, ...args),\n info: (...args) => console.info(prefix, ...args),\n warn: (...args) => console.warn(prefix, ...args),\n error: (...args) => console.error(prefix, ...args),\n fatal: (...args) => console.error(prefix, 'FATAL:', ...args)\n };\n}\n\nexport default {\n DevLogger,\n LogLevel,\n createLogger,\n createComponentLogger,\n createConsoleLogger\n};\n", "/**\n * Development Tools for Coherent.js\n * Provides debugging, profiling, and development utilities\n * Only active in development environment for zero production overhead\n */\n\nimport { performanceMonitor } from '@coherent.js/core/src/performance/monitor.js';\nimport { validateComponent, isCoherentObject } from '@coherent.js/core/src/core/object-utils.js';\n\n/**\n * Main DevTools class\n */\nexport class DevTools {\n constructor(coherentInstance) {\n this.coherent = coherentInstance;\n this.isEnabled = this.shouldEnable();\n this.renderHistory = [];\n this.componentRegistry = new Map();\n this.warnings = [];\n this.errors = [];\n this.hotReloadEnabled = false;\n\n if (this.isEnabled) {\n this.initialize();\n }\n }\n\n /**\n * Check if dev tools should be enabled\n */\n shouldEnable() {\n // Only enable in development\n if (typeof process !== 'undefined') {\n return process.env.NODE_ENV === 'development';\n }\n\n // Browser development detection\n if (typeof window !== 'undefined') {\n return window.location.hostname === 'localhost' ||\n window.location.hostname === '127.0.0.1' ||\n window.location.search.includes('dev=true');\n }\n\n return false;\n }\n\n /**\n * Initialize dev tools\n */\n initialize() {\n console.log('\uD83D\uDEE0\uFE0F Coherent.js Dev Tools Enabled');\n\n this.setupGlobalHelpers();\n this.setupRenderInterception();\n this.setupErrorHandling();\n this.setupHotReload();\n this.setupComponentInspector();\n\n // Browser-specific setup\n if (typeof window !== 'undefined') {\n this.setupBrowserDevTools();\n }\n\n // Node.js specific setup\n if (typeof process !== 'undefined') {\n this.setupNodeDevTools();\n }\n }\n\n /**\n * Set up global helper functions\n */\n setupGlobalHelpers() {\n const helpers = {\n // Inspect any component\n $inspect: (component) => this.inspectComponent(component),\n\n // Get render history\n $history: () => this.renderHistory,\n\n // Get performance stats\n $perf: () => this.getPerformanceInsights(),\n\n // Validate component structure\n $validate: (component) => this.validateComponent(component),\n\n // Get component registry\n $registry: () => Array.from(this.componentRegistry.entries()),\n\n // Clear dev data\n $clear: () => this.clearDevData(),\n\n // Enable/disable features\n $toggle: (feature) => this.toggleFeature(feature),\n\n // Get warnings and errors\n $issues: () => ({ warnings: this.warnings, errors: this.errors })\n };\n\n // Expose helpers globally\n if (typeof window !== 'undefined') {\n Object.assign(window, helpers);\n } else if (typeof global !== 'undefined') {\n Object.assign(global, helpers);\n }\n }\n\n /**\n * Intercept render calls for debugging\n */\n setupRenderInterception() {\n const originalRender = this.coherent.render;\n\n this.coherent.render = (component, context = {}, options = {}) => {\n const renderStart = performance.now();\n const renderId = this.generateRenderId();\n\n try {\n // Pre-render validation and logging\n this.preRenderAnalysis(component, context, renderId);\n\n // Actual render\n const result = originalRender.call(this.coherent, component, context, {\n ...options,\n _devRenderId: renderId\n });\n\n // Post-render analysis\n const renderTime = performance.now() - renderStart;\n this.postRenderAnalysis(component, result, renderTime, renderId);\n\n return result;\n\n } catch (_error) {\n this.handleRenderError(_error, component, context, renderId);\n throw _error;\n }\n };\n }\n\n /**\n * Pre-render analysis and validation\n */\n preRenderAnalysis(component, context, renderId) {\n // Component structure validation\n const validation = this.deepValidateComponent(component);\n if (!validation.isValid) {\n this.warnings.push({\n type: 'validation',\n message: validation.message,\n component: this.serializeComponent(component),\n renderId,\n timestamp: Date.now()\n });\n }\n\n // Performance warnings\n const complexity = this.analyzeComplexity(component);\n if (complexity > 1000) {\n this.warnings.push({\n type: 'performance',\n message: `High complexity component detected (${complexity} nodes)`,\n renderId,\n timestamp: Date.now()\n });\n }\n\n // Context analysis\n this.analyzeContext(context, renderId);\n }\n\n /**\n * Post-render analysis\n */\n postRenderAnalysis(component, result, renderTime, renderId) {\n // Store render in history\n const renderRecord = {\n id: renderId,\n timestamp: Date.now(),\n component: this.serializeComponent(component),\n renderTime,\n outputSize: result.length,\n complexity: this.analyzeComplexity(component)\n };\n\n this.renderHistory.push(renderRecord);\n\n // Keep only last 50 renders\n if (this.renderHistory.length > 50) {\n this.renderHistory.shift();\n }\n\n // Performance analysis\n if (renderTime > 10) {\n this.warnings.push({\n type: 'performance',\n message: `Slow render detected: ${renderTime.toFixed(2)}ms`,\n renderId,\n timestamp: Date.now()\n });\n }\n\n // Log render in development\n if (renderTime > 1) {\n console.log(`\uD83D\uDD04 Render ${renderId}: ${renderTime.toFixed(2)}ms`);\n }\n }\n\n /**\n * Deep component validation\n */\n deepValidateComponent(component, path = 'root', depth = 0) {\n if (depth > 100) {\n return {\n isValid: false,\n message: `Component nesting too deep at ${path}`\n };\n }\n\n // Basic validation\n try {\n validateComponent(component);\n } catch (_error) {\n return {\n isValid: false,\n message: `Invalid component at ${path}: ${_error.message}`\n };\n }\n\n // Recursive validation for objects and arrays\n if (Array.isArray(component)) {\n for (let i = 0; i < component.length; i++) {\n const childValidation = this.deepValidateComponent(\n component[i],\n `${path}[${i}]`,\n depth + 1\n );\n if (!childValidation.isValid) {\n return childValidation;\n }\n }\n } else if (isCoherentObject(component)) {\n for (const [tag, props] of Object.entries(component)) {\n if (props && typeof props === 'object' && props.children) {\n const childValidation = this.deepValidateComponent(\n props.children,\n `${path}.${tag}.children`,\n depth + 1\n );\n if (!childValidation.isValid) {\n return childValidation;\n }\n }\n }\n }\n\n return { isValid: true };\n }\n\n /**\n * Analyze component complexity\n */\n analyzeComplexity(component, depth = 0) {\n if (depth > 100) return 1000; // Prevent infinite recursion\n\n if (typeof component === 'string' || typeof component === 'number') {\n return 1;\n }\n\n if (Array.isArray(component)) {\n return component.reduce((sum, child) =>\n sum + this.analyzeComplexity(child, depth + 1), 0);\n }\n\n if (isCoherentObject(component)) {\n let complexity = 1;\n for (const [, props] of Object.entries(component)) {\n if (props && typeof props === 'object') {\n if (props.children) {\n complexity += this.analyzeComplexity(props.children, depth + 1);\n }\n if (typeof props.text === 'function') {\n complexity += 2; // Functions add complexity\n }\n }\n }\n return complexity;\n }\n\n return 1;\n }\n\n /**\n * Context analysis\n */\n analyzeContext(context, renderId) {\n // Large context warning\n const contextSize = JSON.stringify(context).length;\n if (contextSize > 10000) {\n this.warnings.push({\n type: 'context',\n message: `Large context object: ${contextSize} characters`,\n renderId,\n timestamp: Date.now()\n });\n }\n\n // Circular reference check\n try {\n JSON.stringify(context);\n } catch (_error) {\n if (_error.message.includes('circular')) {\n this.warnings.push({\n type: 'context',\n message: 'Circular reference detected in context',\n renderId,\n timestamp: Date.now()\n });\n }\n }\n }\n\n /**\n * Component inspector\n */\n inspectComponent(component) {\n return {\n type: this.getComponentType(component),\n complexity: this.analyzeComplexity(component),\n validation: this.deepValidateComponent(component),\n structure: this.visualizeStructure(component),\n serialized: this.serializeComponent(component),\n recommendations: this.getOptimizationRecommendations(component)\n };\n }\n\n /**\n * Get component type\n */\n getComponentType(component) {\n if (typeof component === 'string') return 'text';\n if (typeof component === 'function') return 'function';\n if (Array.isArray(component)) return 'array';\n if (isCoherentObject(component)) return 'element';\n return 'unknown';\n }\n\n /**\n * Visualize component structure\n */\n visualizeStructure(component, depth = 0, maxDepth = 5) {\n if (depth > maxDepth) return '...';\n\n const indent = ' '.repeat(depth);\n\n if (typeof component === 'string') {\n return `${indent}\"${component.substring(0, 20)}${component.length > 20 ? '...' : ''}\"`;\n }\n\n if (Array.isArray(component)) {\n const items = component.slice(0, 3).map(child =>\n this.visualizeStructure(child, depth + 1, maxDepth)\n );\n const more = component.length > 3 ? `${indent} ...${component.length - 3} more` : '';\n return `${indent}[\\n${items.join('\\n')}${more ? `\\n${ more}` : ''}\\n${indent}]`;\n }\n\n if (isCoherentObject(component)) {\n const entries = Object.entries(component).slice(0, 3);\n const elements = entries.map(([tag, props]) => {\n let result = `${indent}<${tag}`;\n if (props && props.children) {\n result += `>\\n${this.visualizeStructure(props.children, depth + 1, maxDepth)}\\n${indent}</${tag}>`;\n } else if (props && props.text) {\n result += `>${props.text}</${tag}>`;\n } else {\n result += ' />';\n }\n return result;\n });\n return elements.join('\\n');\n }\n\n return `${indent}${typeof component}`;\n }\n\n /**\n * Get optimization recommendations\n */\n getOptimizationRecommendations(component) {\n const recommendations = [];\n const complexity = this.analyzeComplexity(component);\n\n if (complexity > 500) {\n recommendations.push({\n type: 'complexity',\n message: 'Consider breaking down this component into smaller parts',\n priority: 'high'\n });\n }\n\n // Check for repeated patterns\n const serialized = JSON.stringify(component);\n const patterns = this.findRepeatedPatterns(serialized);\n if (patterns.length > 0) {\n recommendations.push({\n type: 'caching',\n message: 'Consider extracting repeated patterns into cached components',\n priority: 'medium',\n patterns: patterns.slice(0, 3)\n });\n }\n\n return recommendations;\n }\n\n /**\n * Find repeated patterns in component\n */\n findRepeatedPatterns(serialized) {\n const patterns = [];\n const minPatternLength = 20;\n\n for (let i = 0; i < serialized.length - minPatternLength; i++) {\n for (let len = minPatternLength; len <= 100 && i + len < serialized.length; len++) {\n const pattern = serialized.substring(i, i + len);\n const occurrences = (serialized.match(new RegExp(this.escapeRegex(pattern), 'g')) || []).length;\n\n if (occurrences > 2) {\n patterns.push({ pattern: `${pattern.substring(0, 50) }...`, occurrences });\n break; // Found a pattern starting at this position\n }\n }\n }\n\n return patterns.sort((a, b) => b.occurrences - a.occurrences);\n }\n\n /**\n * Escape regex special characters\n */\n escapeRegex(string) {\n return string.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n }\n\n /**\n * Setup _error handling\n */\n setupErrorHandling() {\n // Global _error handler\n const originalConsoleError = console.error;\n console.error = (...args) => {\n // Log to dev tools\n this.errors.push({\n type: 'console',\n message: args.join(' '),\n timestamp: Date.now(),\n stack: new Error().stack\n });\n\n // Call original\n originalConsoleError.apply(console, args);\n };\n\n // Unhandled rejection handler (Node.js)\n if (typeof process !== 'undefined') {\n process.on('unhandledRejection', (reason, promise) => {\n this.errors.push({\n type: 'unhandled-rejection',\n message: reason.toString(),\n promise: promise.toString(),\n timestamp: Date.now()\n });\n });\n }\n\n // Browser _error handler\n if (typeof window !== 'undefined') {\n window.addEventListener('_error', (event) => {\n this.errors.push({\n type: 'browser-_error',\n message: event.message,\n filename: event.filename,\n lineno: event.lineno,\n colno: event.colno,\n timestamp: Date.now()\n });\n });\n }\n }\n\n /**\n * Handle render errors specifically\n */\n handleRenderError(_error, component, context, renderId) {\n this.errors.push({\n type: 'render-_error',\n message: _error.message,\n stack: _error.stack,\n component: this.serializeComponent(component),\n context: Object.keys(context),\n renderId,\n timestamp: Date.now()\n });\n\n console.error(`\uD83D\uDEA8 Render Error in ${renderId}:`, _error.message);\n console.error('Component:', this.serializeComponent(component));\n }\n\n /**\n * Setup hot reload capability\n */\n setupHotReload() {\n if (typeof window !== 'undefined' && 'WebSocket' in window) {\n // Browser hot reload\n this.setupBrowserHotReload();\n } else if (typeof require !== 'undefined') {\n // Node.js file watching\n this.setupNodeHotReload();\n }\n }\n\n /**\n * Browser hot reload setup\n */\n setupBrowserHotReload() {\n // Connect to development server WebSocket\n try {\n const ws = new WebSocket('ws://localhost:3001/coherent-dev');\n\n ws.onmessage = (event) => {\n const data = JSON.parse(event.data);\n\n if (data.type === 'component-updated') {\n console.log('\uD83D\uDD04 Component updated:', data.componentName);\n this.handleComponentUpdate(data);\n } else if (data.type === 'full-reload') {\n window.location.reload();\n }\n };\n\n ws.onopen = () => {\n console.log('\uD83D\uDD17 Connected to Coherent dev server');\n this.hotReloadEnabled = true;\n };\n\n ws.onclose = () => {\n console.log('\uD83D\uDD0C Disconnected from dev server');\n this.hotReloadEnabled = false;\n };\n\n } catch {\n // Dev server not available\n }\n }\n\n /**\n * Node.js hot reload setup\n */\n setupNodeHotReload() {\n // File system watching for component changes\n try {\n const fs = require('fs');\n const path = require('path');\n\n const watchDir = path.join(process.cwd(), 'src');\n\n fs.watch(watchDir, { recursive: true }, (eventType, filename) => {\n if (filename && filename.endsWith('.js')) {\n console.log(`\uD83D\uDD04 File changed: ${filename}`);\n this.handleFileChange(filename, eventType);\n }\n });\n\n this.hotReloadEnabled = true;\n\n } catch {\n // File watching not available\n }\n }\n\n /**\n * Handle component updates\n */\n handleComponentUpdate(updateData) {\n // Clear related caches\n if (this.coherent.cache) {\n this.coherent.cache.invalidatePattern(updateData.componentName);\n }\n\n // Update component registry\n this.componentRegistry.set(updateData.componentName, {\n ...updateData,\n lastUpdated: Date.now()\n });\n\n // Trigger re-render if needed\n if (typeof window !== 'undefined' && window.location.search.includes('auto-reload=true')) {\n window.location.reload();\n }\n }\n\n /**\n * Handle file changes\n */\n handleFileChange(filename, eventType) {\n // Clear require cache for the changed file\n if (typeof require !== 'undefined' && require.cache) {\n const fullPath = require.resolve(path.resolve(filename));\n delete require.cache[fullPath];\n }\n\n console.log(`\uD83D\uDCDD ${eventType}: ${filename}`);\n }\n\n /**\n * Setup browser-specific dev tools\n */\n setupBrowserDevTools() {\n // Add dev tools panel to page\n this.createDevPanel();\n\n // Add keyboard shortcuts\n document.addEventListener('keydown', (e) => {\n // Ctrl+Shift+C = Toggle dev panel\n if (e.ctrlKey && e.shiftKey && e.code === 'KeyC') {\n this.toggleDevPanel();\n e.preventDefault();\n }\n\n // Ctrl+Shift+P = Performance report\n if (e.ctrlKey && e.shiftKey && e.code === 'KeyP') {\n console.table(this.getPerformanceInsights());\n e.preventDefault();\n }\n });\n }\n\n /**\n * Create development panel in browser\n */\n createDevPanel() {\n // Create floating dev panel\n const panel = document.createElement('div');\n panel.id = 'coherent-dev-panel';\n panel.style.cssText = `\n position: fixed;\n top: 10px;\n right: 10px;\n width: 300px;\n background: #1a1a1a;\n color: #fff;\n font-family: monospace;\n font-size: 12px;\n border-radius: 8px;\n box-shadow: 0 4px 20px rgba(0,0,0,0.5);\n z-index: 999999;\n display: none;\n max-height: 80vh;\n overflow-y: auto;\n `;\n\n document.body.appendChild(panel);\n this.devPanel = panel;\n this.updateDevPanel();\n }\n\n /**\n * Toggle dev panel visibility\n */\n toggleDevPanel() {\n if (this.devPanel) {\n const isVisible = this.devPanel.style.display === 'block';\n this.devPanel.style.display = isVisible ? 'none' : 'block';\n if (!isVisible) {\n this.updateDevPanel();\n }\n }\n }\n\n /**\n * Update dev panel content\n */\n updateDevPanel() {\n if (!this.devPanel) return;\n\n const stats = this.getPerformanceInsights();\n const recentRenders = this.renderHistory.slice(-5);\n const recentWarnings = this.warnings.slice(-3);\n\n this.devPanel.innerHTML = `\n <div style=\"padding: 15px; border-bottom: 1px solid #333;\">\n <strong>\uD83D\uDEE0\uFE0F Coherent.js Dev Tools</strong>\n <button onclick=\"this.parentElement.parentElement.style.display='none'\"\n style=\"float: right; background: none; border: none; color: #fff; cursor: pointer;\">\u00D7</button>\n </div>\n\n <div style=\"padding: 10px;\">\n <h4 style=\"margin: 0 0 10px 0; color: #4CAF50;\">Performance</h4>\n <div style=\"font-size: 11px;\">\n <div>Avg Render: ${stats.averageRenderTime || 0}ms</div>\n <div>Cache Hit Rate: ${((stats.cacheHits || 0) / Math.max(stats.totalRenders || 1, 1) * 100).toFixed(1)}%</div>\n <div>Memory Usage: ${(performance.memory?.usedJSHeapSize / 1024 / 1024 || 0).toFixed(1)}MB</div>\n </div>\n </div>\n\n <div style=\"padding: 10px;\">\n <h4 style=\"margin: 0 0 10px 0; color: #2196F3;\">Recent Renders</h4>\n ${recentRenders.map(r => `\n <div style=\"font-size: 10px; margin-bottom: 5px; padding: 3px; background: #333; border-radius: 3px;\">\n ${r.id}: ${r.renderTime.toFixed(1)}ms (${r.complexity} nodes)\n </div>\n `).join('')}\n </div>\n\n ${recentWarnings.length > 0 ? `\n <div style=\"padding: 10px;\">\n <h4 style=\"margin: 0 0 10px 0; color: #FF9800;\">Warnings</h4>\n ${recentWarnings.map(w => `\n <div style=\"font-size: 10px; margin-bottom: 5px; padding: 3px; background: #4a2c0a; border-radius: 3px; color: #FFB74D;\">\n ${w.type}: ${w.message}\n </div>\n `).join('')}\n </div>\n ` : ''}\n\n <div style=\"padding: 10px; font-size: 10px; color: #888;\">\n Press Ctrl+Shift+P for performance details\n </div>\n `;\n }\n\n /**\n * Setup Node.js specific dev tools\n */\n setupNodeDevTools() {\n // Add process event listeners\n process.on('SIGINT', () => {\n this.printDevSummary();\n process.exit();\n });\n }\n\n /**\n * Print development summary\n */\n printDevSummary() {\n console.log('\\n\uD83D\uDEE0\uFE0F Coherent.js Development Summary');\n console.log('=================================');\n console.log(`Total Renders: ${this.renderHistory.length}`);\n console.log(`Total Warnings: ${this.warnings.length}`);\n console.log(`Total Errors: ${this.errors.length}`);\n\n if (this.renderHistory.length > 0) {\n const avgTime = this.renderHistory.reduce((sum, r) => sum + r.renderTime, 0) / this.renderHistory.length;\n console.log(`Average Render Time: ${avgTime.toFixed(2)}ms`);\n }\n\n console.log('=================================\\n');\n }\n\n /**\n * Get performance insights\n */\n getPerformanceInsights() {\n const insights = {\n totalRenders: this.renderHistory.length,\n averageRenderTime: 0,\n slowestRender: null,\n fastestRender: null,\n cacheHits: 0,\n totalWarnings: this.warnings.length,\n totalErrors: this.errors.length\n };\n\n if (this.renderHistory.length > 0) {\n const times = this.renderHistory.map(r => r.renderTime);\n insights.averageRenderTime = times.reduce((a, b) => a + b, 0) / times.length;\n insights.slowestRender = Math.max(...times);\n insights.fastestRender = Math.min(...times);\n }\n\n // Get cache stats if available\n if (this.coherent.cache && this.coherent.cache.getStats) {\n const cacheStats = this.coherent.cache.getStats();\n insights.cacheHits = cacheStats.hits;\n insights.cacheHitRate = cacheStats.hitRate;\n }\n\n // Add performance monitor data if available\n if (performanceMonitor && performanceMonitor.getStats) {\n const perfStats = performanceMonitor.getStats();\n insights.performanceMonitorStats = perfStats;\n }\n\n return insights;\n }\n\n /**\n * Utility methods\n */\n generateRenderId() {\n return `render_${Date.now()}_${Math.random().toString(36).substr(2, 5)}`;\n }\n\n serializeComponent(component, maxDepth = 3, currentDepth = 0) {\n if (currentDepth > maxDepth) return '...';\n\n try {\n if (typeof component === 'function') {\n return `[Function: ${component.name || 'anonymous'}]`;\n }\n\n if (Array.isArray(component)) {\n return component.slice(0, 3).map(c =>\n this.serializeComponent(c, maxDepth, currentDepth + 1)\n ).concat(component.length > 3 ? [`...(${component.length - 3} more)`] : []);\n }\n\n if (component && typeof component === 'object') {\n const serialized = {};\n const keys = Object.keys(component).slice(0, 10);\n\n for (const key of keys) {\n if (key === 'children' && component[key]) {\n serialized[key] = this.serializeComponent(component[key], maxDepth, currentDepth + 1);\n } else if (typeof component[key] === 'function') {\n serialized[key] = `[Function: ${component[key].name || 'anonymous'}]`;\n } else {\n serialized[key] = component[key];\n }\n }\n\n if (Object.keys(component).length > 10) {\n serialized['...'] = `(${Object.keys(component).length - 10} more properties)`;\n }\n\n return serialized;\n }\n\n return component;\n\n } catch (_error) {\n return `[Serialization Error: ${_error.message}]`;\n }\n }\n\n clearDevData() {\n this.renderHistory = [];\n this.warnings = [];\n this.errors = [];\n this.componentRegistry.clear();\n console.log('\uD83E\uDDF9 Dev data cleared');\n }\n\n toggleFeature(feature) {\n switch (feature) {\n case 'cache':\n if (this.coherent.cache) {\n this.coherent.cache.enabled = !this.coherent.cache.enabled;\n console.log(`Cache ${this.coherent.cache.enabled ? 'enabled' : 'disabled'}`);\n }\n break;\n case 'monitoring':\n if (performanceMonitor) {\n performanceMonitor.enabled = !performanceMonitor.enabled;\n console.log(`Monitoring ${performanceMonitor.enabled ? 'enabled' : 'disabled'}`);\n }\n break;\n case 'hot-reload':\n this.hotReloadEnabled = !this.hotReloadEnabled;\n console.log(`Hot reload ${this.hotReloadEnabled ? 'enabled' : 'disabled'}`);\n break;\n default:\n console.log(`Unknown feature: ${feature}`);\n }\n }\n\n validateComponent(component) {\n return this.deepValidateComponent(component);\n }\n\n setupComponentInspector() {\n // Register components for inspection\n const originalCreateComponent = this.coherent.createComponent;\n\n if (originalCreateComponent) {\n this.coherent.createComponent = (config) => {\n const component = originalCreateComponent.call(this.coherent, config);\n\n // Register component\n this.componentRegistry.set(config.name || 'anonymous', {\n config,\n component,\n registeredAt: Date.now()\n });\n\n return component;\n };\n }\n }\n}\n\n/**\n * Create a lightweight dev tools instance\n */\nexport function createDevTools(coherentInstance) {\n return new DevTools(coherentInstance);\n}\n\n/**\n * Global dev tools utilities (available even when DevTools is disabled)\n */\nexport const devUtils = {\n /**\n * Quick component inspection\n */\n inspect: (component) => {\n console.log('\uD83D\uDD0D Component Inspection:');\n console.log('Type:', typeof component);\n console.log('Structure:', component);\n\n if (isCoherentObject(component)) {\n const tags = Object.keys(component);\n console.log('Tags:', tags);\n\n for (const tag of tags) {\n const props = component[tag];\n if (props && typeof props === 'object') {\n console.log(`${tag} props:`, Object.keys(props));\n }\n }\n }\n },\n\n /**\n * Simple validation\n */\n validate: (component) => {\n try {\n validateComponent(component);\n console.log('\u2705 Component is valid');\n return true;\n } catch (_error) {\n console.error('\u274C Component validation failed:', _error.message);\n return false;\n }\n },\n\n /**\n * Performance timing helper\n */\n time: (label, fn) => {\n const start = performance.now();\n const result = fn();\n const end = performance.now();\n console.log(`\u23F1\uFE0F ${label}: ${(end - start).toFixed(2)}ms`);\n return result;\n }\n};\n\nexport default DevTools;\n", "/**\n * Component Tree Visualizer for Coherent.js\n *\n * Provides beautiful visualization of functional component trees\n * making it easy to debug and understand pure JavaScript object components\n *\n * @module ComponentVisualizer\n */\n\nimport {\n isCoherentObject,\n hasChildren,\n normalizeChildren\n} from '@coherent.js/core';\n\n/**\n * Component tree visualizer with enhanced debugging\n */\nexport class ComponentVisualizer {\n constructor(options = {}) {\n this.options = {\n maxDepth: options.maxDepth || 50,\n showProps: options.showProps !== false,\n showMetadata: options.showMetadata !== false,\n colorOutput: options.colorOutput !== false,\n compactMode: options.compactMode || false,\n ...options\n };\n\n this.stats = {\n totalComponents: 0,\n totalDepth: 0,\n staticComponents: 0,\n dynamicComponents: 0,\n renderTime: 0\n };\n }\n\n /**\n * Visualize a component tree\n */\n visualize(component, name = 'Root') {\n const startTime = performance.now();\n this.stats = { totalComponents: 0, totalDepth: 0, staticComponents: 0, dynamicComponents: 0, renderTime: 0 };\n\n const tree = this.buildTree(component, name, 0);\n const visualization = this.renderTree(tree);\n\n this.stats.renderTime = performance.now() - startTime;\n\n return {\n visualization,\n stats: { ...this.stats },\n tree\n };\n }\n\n /**\n * Build component tree structure\n */\n buildTree(component, name, depth) {\n if (depth > this.options.maxDepth) {\n return {\n name: 'MAX_DEPTH_REACHED',\n type: 'warning',\n depth,\n children: [],\n metadata: { message: `Maximum depth ${this.options.maxDepth} exceeded` }\n };\n }\n\n this.stats.totalComponents++;\n this.stats.totalDepth = Math.max(this.stats.totalDepth, depth);\n\n const node = {\n name,\n depth,\n children: [],\n metadata: {}\n };\n\n // Handle different component types\n if (component === null || component === undefined) {\n node.type = 'empty';\n node.value = '';\n this.stats.staticComponents++;\n } else if (typeof component === 'string') {\n node.type = 'text';\n node.value = component;\n node.metadata.length = component.length;\n this.stats.staticComponents++;\n } else if (typeof component === 'number') {\n node.type = 'number';\n node.value = component;\n this.stats.staticComponents++;\n } else if (typeof component === 'boolean') {\n node.type = 'boolean';\n node.value = component;\n this.stats.staticComponents++;\n } else if (typeof component === 'function') {\n node.type = 'function';\n node.value = `Function: ${component.name || 'anonymous'}`;\n node.metadata.arity = component.length;\n node.metadata.isAsync = component.constructor.name === 'AsyncFunction';\n this.stats.dynamicComponents++;\n } else if (Array.isArray(component)) {\n node.type = 'array';\n node.metadata.length = component.length;\n component.forEach((item, _index) => {\n const childNode = this.buildTree(item, `[${_index}]`, depth + 1);\n node.children.push(childNode);\n });\n this.stats.dynamicComponents++;\n } else if (isCoherentObject(component)) {\n const entries = Object.entries(component);\n if (entries.length === 1) {\n const [tagName, props] = entries;\n node.type = 'element';\n node.tagName = tagName;\n node.props = this.options.showProps ? this.analyzeProps(props) : {};\n\n // Extract children\n if (hasChildren(props)) {\n const children = normalizeChildren(props.children);\n children.forEach((child, _index) => {\n const childNode = this.buildTree(child, `${tagName}[${_index}]`, depth + 1);\n node.children.push(childNode);\n });\n }\n\n // Analyze if static or dynamic\n if (this.hasDynamicContent(props)) {\n this.stats.dynamicComponents++;\n node.metadata.dynamic = true;\n } else {\n this.stats.staticComponents++;\n node.metadata.dynamic = false;\n }\n } else {\n node.type = 'complex';\n node.metadata.keys = entries.map(([key]) => key);\n this.stats.dynamicComponents++;\n }\n } else {\n node.type = 'unknown';\n node.value = String(component);\n node.metadata.constructor = component.constructor?.name || 'Object';\n this.stats.staticComponents++;\n }\n\n return node;\n }\n\n /**\n * Analyze component props\n */\n analyzeProps(props) {\n const analyzed = {};\n\n if (!props || typeof props !== 'object') {\n return analyzed;\n }\n\n Object.entries(props).forEach(([key, value]) => {\n if (key === 'children') return;\n\n if (typeof value === 'function') {\n analyzed[key] = {\n type: 'function',\n name: value.name || 'anonymous',\n isEvent: /^on[A-Z]/.test(key)\n };\n } else if (typeof value === 'string') {\n analyzed[key] = {\n type: 'string',\n length: value.length,\n preview: value.length > 50 ? `${value.substring(0, 47)}...` : value\n };\n } else if (typeof value === 'object' && value !== null) {\n analyzed[key] = {\n type: 'object',\n keys: Object.keys(value),\n constructor: value.constructor?.name || 'Object'\n };\n } else {\n analyzed[key] = {\n type: typeof value,\n value\n };\n }\n });\n\n return analyzed;\n }\n\n /**\n * Check if component has dynamic content\n */\n hasDynamicContent(props) {\n if (typeof props === 'object' && props !== null) {\n for (const value of Object.values(props)) {\n if (typeof value === 'function') return true;\n if (typeof value === 'object' && this.hasDynamicContent(value)) return true;\n }\n }\n return false;\n }\n\n /**\n * Render tree as formatted text\n */\n renderTree(tree) {\n const lines = [];\n\n if (this.options.colorOutput) {\n lines.push(this.colorize('\uD83C\uDF33 Coherent.js Component Tree', 'cyan'));\n lines.push(this.colorize('\u2550'.repeat(40), 'cyan'));\n } else {\n lines.push('\uD83C\uDF33 Coherent.js Component Tree');\n lines.push('\u2550'.repeat(40));\n }\n\n this.renderNode(tree, lines, '', true);\n\n if (this.options.showMetadata) {\n lines.push('');\n lines.push('\uD83D\uDCCA Tree Statistics:');\n lines.push(` Total Components: ${this.stats.totalComponents}`);\n lines.push(` Max Depth: ${this.stats.totalDepth}`);\n lines.push(` Static Components: ${this.stats.staticComponents}`);\n lines.push(` Dynamic Components: ${this.stats.dynamicComponents}`);\n lines.push(` Render Time: ${this.stats.renderTime.toFixed(2)}ms`);\n }\n\n return lines.join('\\n');\n }\n\n /**\n * Render individual node\n */\n renderNode(node, lines, prefix = '', isLast = true) {\n const connector = isLast ? '\u2514\u2500\u2500 ' : '\u251C\u2500\u2500 ';\n const childPrefix = prefix + (isLast ? ' ' : '\u2502 ');\n\n let nodeLine = prefix + connector;\n\n // Add node icon and name\n if (this.options.colorOutput) {\n nodeLine += this.getNodeIcon(node.type);\n nodeLine += this.colorize(node.name, this.getNodeColor(node.type));\n } else {\n nodeLine += this.getNodeIcon(node.type) + node.name;\n }\n\n // Add type information\n if (!this.options.compactMode) {\n nodeLine += ` (${node.type})`;\n\n // Add additional info based on type\n if (node.type === 'element') {\n nodeLine += ` <${node.tagName}>`;\n } else if (node.type === 'text' && node.value) {\n nodeLine += `: \"${node.value.substring(0, 30)}${node.value.length > 30 ? '...' : ''}\"`;\n } else if (node.type === 'function') {\n nodeLine += `(${node.metadata.arity || 0} args)`;\n }\n\n // Add dynamic indicator\n if (node.metadata.dynamic !== undefined) {\n nodeLine += node.metadata.dynamic ? ' \uD83D\uDD04' : ' \uD83D\uDCCC';\n }\n }\n\n lines.push(nodeLine);\n\n // Add props if enabled and not compact\n if (this.options.showProps && node.props && !this.options.compactMode) {\n Object.entries(node.props).forEach(([key, prop], _index) => {\n const isLastProp = _index === Object.keys(node.props).length - 1;\n const propConnector = isLastProp ? '\u2514\u2500\u2500 ' : '\u251C\u2500\u2500 ';\n const _propPrefix = childPrefix + (isLastProp && node.children.length === 0 ? ' ' : '\u2502 ');\n\n let propLine = childPrefix + propConnector;\n if (this.options.colorOutput) {\n propLine += this.colorize(key, 'yellow');\n } else {\n propLine += key;\n }\n\n propLine += `: ${ this.formatPropValue(prop)}`;\n lines.push(propLine);\n });\n }\n\n // Render children\n node.children.forEach((child, index) => {\n const isLastChild = index === node.children.length - 1;\n this.renderNode(child, lines, childPrefix, isLastChild);\n });\n }\n\n /**\n * Get node icon based on type\n */\n getNodeIcon(type) {\n const icons = {\n element: '\uD83C\uDFF7\uFE0F ',\n text: '\uD83D\uDCDD ',\n function: '\u26A1 ',\n array: '\uD83D\uDCCB ',\n empty: '\u2B55 ',\n number: '\uD83D\uDD22 ',\n boolean: '\u2611\uFE0F ',\n complex: '\uD83D\uDCE6 ',\n unknown: '\u2753 ',\n warning: '\u26A0\uFE0F '\n };\n return icons[type] || '\uD83D\uDCC4 ';\n }\n\n /**\n * Get node color based on type\n */\n getNodeColor(type) {\n const colors = {\n element: 'green',\n text: 'blue',\n function: 'magenta',\n array: 'cyan',\n empty: 'gray',\n number: 'yellow',\n boolean: 'yellow',\n complex: 'red',\n unknown: 'red',\n warning: 'red'\n };\n return colors[type] || 'white';\n }\n\n /**\n * Format property value for display\n */\n formatPropValue(prop) {\n if (prop.type === 'function') {\n return `\u26A1 ${prop.name}${prop.isEvent ? ' (event)' : ''}`;\n } else if (prop.type === 'string') {\n return `\"${prop.preview}\"`;\n } else if (prop.type === 'object') {\n return `${prop.constructor} {${prop.keys.join(', ')}}`;\n } else {\n return String(prop.value);\n }\n }\n\n /**\n * Add color to text (ANSI colors)\n */\n colorize(text, color) {\n const colors = {\n black: '\\x1b[30m',\n red: '\\x1b[31m',\n green: '\\x1b[32m',\n yellow: '\\x1b[33m',\n blue: '\\x1b[34m',\n magenta: '\\x1b[35m',\n cyan: '\\x1b[36m',\n white: '\\x1b[37m',\n gray: '\\x1b[90m'\n };\n\n const reset = '\\x1b[0m';\n return `${colors[color] || ''}${text}${reset}`;\n }\n\n /**\n * Export tree as JSON for further analysis\n */\n exportAsJSON(tree) {\n return JSON.stringify(tree, null, 2);\n }\n\n /**\n * Export tree as DOT format for Graphviz\n */\n exportAsDOT(tree) {\n const lines = ['digraph ComponentTree {'];\n lines.push(' rankdir=TB;');\n lines.push(' node [shape=box, style=rounded];');\n\n this.generateDOTNodes(tree, lines, 'root');\n\n lines.push('}');\n return lines.join('\\n');\n }\n\n /**\n * Generate DOT nodes\n */\n generateDOTNodes(node, lines, parentId) {\n const nodeId = `${parentId }_${ node.name.replace(/[^a-zA-Z0-9]/g, '_')}`;\n\n let label = node.name;\n if (node.type === 'element') {\n label = `<${node.tagName}>\\\\n${node.name}`;\n }\n\n lines.push(` \"${nodeId}\" [label=\"${label}\"];`);\n\n if (parentId !== 'root') {\n lines.push(` \"${parentId}\" -> \"${nodeId}\";`);\n }\n\n node.children.forEach((child, _index) => {\n this.generateDOTNodes(child, lines, nodeId);\n });\n }\n}\n\n/**\n * Create a component visualizer\n */\nexport function createComponentVisualizer(options = {}) {\n return new ComponentVisualizer(options);\n}\n\n/**\n * Quick visualize function\n */\nexport function visualizeComponent(component, name = 'Root', options = {}) {\n const visualizer = createComponentVisualizer(options);\n return visualizer.visualize(component, name);\n}\n\n/**\n * Visualize component and log to console\n */\nexport function logComponentTree(component, name = 'Root', options = {}) {\n const result = visualizeComponent(component, name, options);\n console.log(result.visualization);\n return result;\n}\n\nexport default {\n ComponentVisualizer,\n createComponentVisualizer,\n visualizeComponent,\n logComponentTree\n};\n", "/**\n * Performance Insights Dashboard for Coherent.js\n *\n * Provides real-time performance metrics and insights for:\n * - API routing performance (smart routing, LRU cache)\n * - Component rendering performance (caching, optimization)\n * - Full-stack request flow analysis\n *\n * @module PerformanceDashboard\n */\n\nexport class PerformanceDashboard {\n constructor(options = {}) {\n this.options = {\n updateInterval: options.updateInterval || 5000,\n maxHistoryPoints: options.maxHistoryPoints || 100,\n enableAlerts: options.enableAlerts !== false,\n enableRecommendations: options.enableRecommendations !== false,\n colorOutput: options.colorOutput !== false,\n ...options\n };\n\n this.metrics = {\n api: {\n requests: 0,\n averageTime: 0,\n cacheHits: 0,\n cacheMisses: 0,\n staticRoutes: 0,\n dynamicRoutes: 0,\n history: []\n },\n components: {\n renders: 0,\n averageTime: 0,\n cacheHits: 0,\n cacheMisses: 0,\n staticComponents: 0,\n dynamicComponents: 0,\n memoryUsage: 0,\n history: []\n },\n fullstack: {\n totalRequests: 0,\n averageTime: 0,\n errors: 0,\n bottlenecks: [],\n history: []\n }\n };\n\n this.alerts = [];\n this.recommendations = [];\n this.startTime = Date.now();\n this.updateTimer = null;\n }\n\n /**\n * Start monitoring performance\n */\n startMonitoring() {\n if (this.updateTimer) return;\n\n this.updateTimer = setInterval(() => {\n this.updateMetrics();\n this.generateAlerts();\n this.generateRecommendations();\n }, this.options.updateInterval);\n }\n\n /**\n * Stop monitoring\n */\n stopMonitoring() {\n if (this.updateTimer) {\n clearInterval(this.updateTimer);\n this.updateTimer = null;\n }\n }\n\n /**\n * Record API request metrics\n */\n recordAPIRequest(duration, routeType, cacheHit = false) {\n this.metrics.api.requests++;\n this.metrics.api.averageTime = this.updateAverage(\n this.metrics.api.averageTime,\n duration,\n this.metrics.api.requests\n );\n\n if (cacheHit) {\n this.metrics.api.cacheHits++;\n } else {\n this.metrics.api.cacheMisses++;\n }\n\n if (routeType === 'static') {\n this.metrics.api.staticRoutes++;\n } else {\n this.metrics.api.dynamicRoutes++;\n }\n\n this.addToHistory('api', {\n timestamp: Date.now(),\n duration,\n routeType,\n cacheHit\n });\n }\n\n /**\n * Record component render metrics\n */\n recordComponentRender(duration, componentType, cacheHit = false, memoryDelta = 0) {\n this.metrics.components.renders++;\n this.metrics.components.averageTime = this.updateAverage(\n this.metrics.components.averageTime,\n duration,\n this.metrics.components.renders\n );\n\n if (cacheHit) {\n this.metrics.components.cacheHits++;\n } else {\n this.metrics.components.cacheMisses++;\n }\n\n if (componentType === 'static') {\n this.metrics.components.staticComponents++;\n } else {\n this.metrics.components.dynamicComponents++;\n }\n\n this.metrics.components.memoryUsage += memoryDelta;\n\n this.addToHistory('components', {\n timestamp: Date.now(),\n duration,\n componentType,\n cacheHit,\n memoryDelta\n });\n }\n\n /**\n * Record full-stack request metrics\n */\n recordFullStackRequest(duration, error = null, bottlenecks = []) {\n this.metrics.fullstack.totalRequests++;\n this.metrics.fullstack.averageTime = this.updateAverage(\n this.metrics.fullstack.averageTime,\n duration,\n this.metrics.fullstack.totalRequests\n );\n\n if (error) {\n this.metrics.fullstack.errors++;\n }\n\n this.metrics.fullstack.bottlenecks = bottlenecks;\n\n this.addToHistory('fullstack', {\n timestamp: Date.now(),\n duration,\n error,\n bottlenecks\n });\n }\n\n /**\n * Update metrics from external sources\n */\n updateMetrics() {\n // This would integrate with actual performance monitors\n // For now, we'll simulate some metrics updates\n const now = Date.now();\n const uptime = now - this.startTime;\n\n // Calculate rates\n const apiRate = this.metrics.api.requests / (uptime / 1000);\n const componentRate = this.metrics.components.renders / (uptime / 1000);\n const fullStackRate = this.metrics.fullstack.totalRequests / (uptime / 1000);\n\n return {\n apiRate,\n componentRate,\n fullStackRate,\n uptime\n };\n }\n\n /**\n * Generate performance alerts\n */\n generateAlerts() {\n this.alerts = [];\n\n // API performance alerts\n if (this.metrics.api.averageTime > 50) {\n this.alerts.push({\n type: 'warning',\n category: 'api',\n message: `API response time is high: ${this.metrics.api.averageTime.toFixed(2)}ms`,\n threshold: 50,\n current: this.metrics.api.averageTime\n });\n }\n\n const apiCacheHitRate = this.getCacheHitRate('api');\n if (apiCacheHitRate < 80) {\n this.alerts.push({\n type: 'warning',\n category: 'api',\n message: `API cache hit rate is low: ${apiCacheHitRate.toFixed(1)}%`,\n threshold: 80,\n current: apiCacheHitRate\n });\n }\n\n // Component performance alerts\n if (this.metrics.components.averageTime > 20) {\n this.alerts.push({\n type: 'warning',\n category: 'components',\n message: `Component render time is high: ${this.metrics.components.averageTime.toFixed(2)}ms`,\n threshold: 20,\n current: this.metrics.components.averageTime\n });\n }\n\n const componentCacheHitRate = this.getCacheHitRate('components');\n if (componentCacheHitRate < 90) {\n this.alerts.push({\n type: 'warning',\n category: 'components',\n message: `Component cache hit rate is low: ${componentCacheHitRate.toFixed(1)}%`,\n threshold: 90,\n current: componentCacheHitRate\n });\n }\n\n // Full-stack alerts\n if (this.metrics.fullstack.errors > 0) {\n this.alerts.push({\n type: 'error',\n category: 'fullstack',\n message: `${this.metrics.fullstack.errors} errors detected`,\n threshold: 0,\n current: this.metrics.fullstack.errors\n });\n }\n }\n\n /**\n * Generate performance recommendations\n */\n generateRecommendations() {\n this.recommendations = [];\n\n // API recommendations\n const staticRouteRatio = this.metrics.api.staticRoutes / Math.max(this.metrics.api.requests, 1);\n if (staticRouteRatio < 0.7) {\n this.recommendations.push({\n type: 'optimization',\n category: 'api',\n message: 'Consider adding more static routes to improve smart routing efficiency',\n impact: 'high',\n effort: 'low'\n });\n }\n\n const apiCacheHitRate = this.getCacheHitRate('api');\n if (apiCacheHitRate < 90) {\n this.recommendations.push({\n type: 'optimization',\n category: 'api',\n message: 'Increase API cache size or TTL to improve cache hit rate',\n impact: 'medium',\n effort: 'low'\n });\n }\n\n // Component recommendations\n const staticComponentRatio = this.metrics.components.staticComponents / Math.max(this.metrics.components.renders, 1);\n if (staticComponentRatio < 0.8) {\n this.recommendations.push({\n type: 'optimization',\n category: 'components',\n message: 'More components could be optimized as static for better caching',\n impact: 'high',\n effort: 'medium'\n });\n }\n\n // Memory recommendations\n if (this.metrics.components.memoryUsage > 100 * 1024 * 1024) { // 100MB\n this.recommendations.push({\n type: 'optimization',\n category: 'memory',\n message: 'Memory usage is high. Consider reducing cache size or implementing memory cleanup',\n impact: 'medium',\n effort: 'medium'\n });\n }\n }\n\n /**\n * Get cache hit rate for category\n */\n getCacheHitRate(category) {\n const metrics = this.metrics[category];\n if (!metrics || !metrics.cacheHits) return 0;\n\n const total = metrics.cacheHits + metrics.cacheMisses;\n return total > 0 ? (metrics.cacheHits / total) * 100 : 0;\n }\n\n /**\n * Update running average\n */\n updateAverage(current, newValue, count) {\n return ((current * (count - 1)) + newValue) / count;\n }\n\n /**\n * Add data point to history\n */\n addToHistory(category, data) {\n if (!this.metrics[category].history) {\n this.metrics[category].history = [];\n }\n\n this.metrics[category].history.push(data);\n\n // Limit history size\n if (this.metrics[category].history.length > this.options.maxHistoryPoints) {\n this.metrics[category].history = this.metrics[category].history.slice(-this.options.maxHistoryPoints);\n }\n }\n\n /**\n * Generate dashboard visualization\n */\n generateDashboard() {\n const lines = [];\n\n if (this.options.colorOutput) {\n lines.push(this.colorize('\uD83D\uDCCA Coherent.js Performance Dashboard', 'cyan'));\n lines.push(this.colorize('\u2550'.repeat(50), 'cyan'));\n } else {\n lines.push('\uD83D\uDCCA Coherent.js Performance Dashboard');\n lines.push('\u2550'.repeat(50));\n }\n\n const uptime = (Date.now() - this.startTime) / 1000;\n lines.push(`\u23F1\uFE0F Uptime: ${uptime.toFixed(1)}s`);\n lines.push('');\n\n // API Performance Section\n lines.push('\uD83D\uDE80 API Performance');\n lines.push('\u2500'.repeat(20));\n const apiCacheHitRate = this.getCacheHitRate('api');\n lines.push(` Requests: ${this.metrics.api.requests} (${(this.metrics.api.requests / uptime).toFixed(1)} req/s)`);\n lines.push(` Avg Time: ${this.metrics.api.averageTime.toFixed(2)}ms`);\n lines.push(` Cache Hit Rate: ${apiCacheHitRate.toFixed(1)}%`);\n lines.push(` Static Routes: ${this.metrics.api.staticRoutes}/${this.metrics.api.requests} (${((this.metrics.api.staticRoutes / Math.max(this.metrics.api.requests, 1)) * 100).toFixed(1)}%)`);\n lines.push('');\n\n // Component Performance Section\n lines.push('\uD83C\uDFD7\uFE0F Component Performance');\n lines.push('\u2500'.repeat(25));\n const componentCacheHitRate = this.getCacheHitRate('components');\n lines.push(` Renders: ${this.metrics.components.renders} (${(this.metrics.components.renders / uptime).toFixed(1)} renders/s)`);\n lines.push(` Avg Time: ${this.metrics.components.averageTime.toFixed(2)}ms`);\n lines.push(` Cache Hit Rate: ${componentCacheHitRate.toFixed(1)}%`);\n lines.push(` Static Components: ${this.metrics.components.staticComponents}/${this.metrics.components.renders} (${((this.metrics.components.staticComponents / Math.max(this.metrics.components.renders, 1)) * 100).toFixed(1)}%)`);\n lines.push(` Memory Usage: ${(this.metrics.components.memoryUsage / 1024 / 1024).toFixed(1)}MB`);\n lines.push('');\n\n // Full-Stack Performance Section\n lines.push('\uD83C\uDF10 Full-Stack Performance');\n lines.push('\u2500'.repeat(26));\n lines.push(` Total Requests: ${this.metrics.fullstack.totalRequests} (${(this.metrics.fullstack.totalRequests / uptime).toFixed(1)} req/s)`);\n lines.push(` Avg Time: ${this.metrics.fullstack.averageTime.toFixed(2)}ms`);\n lines.push(` Errors: ${this.metrics.fullstack.errors}`);\n lines.push('');\n\n // Alerts Section\n if (this.alerts.length > 0) {\n lines.push('\u26A0\uFE0F Performance Alerts');\n lines.push('\u2500'.repeat(22));\n this.alerts.forEach(alert => {\n const icon = alert.type === 'error' ? '\u274C' : '\u26A0\uFE0F';\n lines.push(` ${icon} ${alert.message}`);\n });\n lines.push('');\n }\n\n // Recommendations Section\n if (this.recommendations.length > 0) {\n lines.push('\uD83D\uDCA1 Optimization Recommendations');\n lines.push('\u2500'.repeat(30));\n this.recommendations.forEach(rec => {\n const impact = rec.impact === 'high' ? '\uD83D\uDD25' : rec.impact === 'medium' ? '\u26A1' : '\uD83D\uDCA4';\n lines.push(` ${impact} ${rec.message} (${rec.effort} effort)`);\n });\n lines.push('');\n }\n\n // Performance Score\n const score = this.calculatePerformanceScore();\n const scoreColor = score >= 90 ? 'green' : score >= 70 ? 'yellow' : 'red';\n lines.push(`Performance Score: ${this.colorize(`${score.toFixed(1)}/100`, scoreColor)}`);\n\n return lines.join('\\n');\n }\n\n /**\n * Calculate overall performance score\n */\n calculatePerformanceScore() {\n let score = 100;\n\n // API performance factors\n if (this.metrics.api.averageTime > 50) score -= 10;\n if (this.metrics.api.averageTime > 100) score -= 10;\n if (this.getCacheHitRate('api') < 90) score -= 10;\n\n // Component performance factors\n if (this.metrics.components.averageTime > 20) score -= 10;\n if (this.metrics.components.averageTime > 50) score -= 10;\n if (this.getCacheHitRate('components') < 95) score -= 10;\n\n // Error penalty\n if (this.metrics.fullstack.errors > 0) score -= Math.min(20, this.metrics.fullstack.errors * 5);\n\n return Math.max(0, score);\n }\n\n /**\n * Add color to text\n */\n colorize(text, color) {\n if (!this.options.colorOutput) return text;\n\n const colors = {\n black: '\\x1b[30m',\n red: '\\x1b[31m',\n green: '\\x1b[32m',\n yellow: '\\x1b[33m',\n blue: '\\x1b[34m',\n magenta: '\\x1b[35m',\n cyan: '\\x1b[36m',\n white: '\\x1b[37m',\n gray: '\\x1b[90m'\n };\n\n const reset = '\\x1b[0m';\n return `${colors[color] || ''}${text}${reset}`;\n }\n\n /**\n * Export metrics as JSON\n */\n exportMetrics() {\n return {\n timestamp: Date.now(),\n uptime: Date.now() - this.startTime,\n metrics: { ...this.metrics },\n alerts: [...this.alerts],\n recommendations: [...this.recommendations],\n performanceScore: this.calculatePerformanceScore()\n };\n }\n\n /**\n * Reset all metrics\n */\n reset() {\n this.metrics = {\n api: { requests: 0, averageTime: 0, cacheHits: 0, cacheMisses: 0, staticRoutes: 0, dynamicRoutes: 0, history: [] },\n components: { renders: 0, averageTime: 0, cacheHits: 0, cacheMisses: 0, staticComponents: 0, dynamicComponents: 0, memoryUsage: 0, history: [] },\n fullstack: { totalRequests: 0, averageTime: 0, errors: 0, bottlenecks: [], history: [] }\n };\n this.alerts = [];\n this.recommendations = [];\n this.startTime = Date.now();\n }\n}\n\n/**\n * Create a performance dashboard\n */\nexport function createPerformanceDashboard(options = {}) {\n return new PerformanceDashboard(options);\n}\n\n/**\n * Get dashboard and print to console\n */\nexport function showPerformanceDashboard(dashboard) {\n const output = dashboard.generateDashboard();\n console.log(output);\n return dashboard;\n}\n\nexport default {\n PerformanceDashboard,\n createPerformanceDashboard,\n showPerformanceDashboard\n};\n", "/**\n * Enhanced Error Context for Coherent.js\n *\n * Provides detailed, actionable error messages for functional component debugging:\n * - Component tree context when errors occur\n * - Prop validation with helpful suggestions\n * - Performance-related error insights\n * - Fix suggestions based on common patterns\n *\n * @module EnhancedErrors\n */\n\nimport { isCoherentObject, hasChildren } from '@coherent.js/core';\n\nexport class EnhancedErrorHandler {\n constructor(options = {}) {\n this.options = {\n maxContextDepth: options.maxContextDepth || 5,\n includeStackTrace: options.includeStackTrace !== false,\n showSuggestions: options.showSuggestions !== false,\n colorOutput: options.colorOutput !== false,\n ...options\n };\n\n this.errorHistory = [];\n this.commonPatterns = this.initializeCommonPatterns();\n }\n\n /**\n * Handle and enhance an error with component context\n */\n handleError(error, component = null, context = {}) {\n const enhancedError = {\n originalError: error,\n message: error.message,\n stack: error.stack,\n timestamp: Date.now(),\n component: component ? this.analyzeComponent(component) : null,\n context,\n suggestions: [],\n severity: this.determineSeverity(error),\n category: this.categorizeError(error)\n };\n\n // Add component context\n if (component) {\n enhancedError.componentContext = this.getComponentContext(component, context.path || []);\n enhancedError.propValidation = this.validateProps(component);\n }\n\n // Generate suggestions\n if (this.options.showSuggestions) {\n enhancedError.suggestions = this.generateSuggestions(enhancedError);\n }\n\n // Add to history\n this.errorHistory.push(enhancedError);\n if (this.errorHistory.length > 100) {\n this.errorHistory = this.errorHistory.slice(-100);\n }\n\n return enhancedError;\n }\n\n /**\n * Analyze component structure\n */\n analyzeComponent(component) {\n const analysis = {\n type: this.getComponentType(component),\n isValid: this.isValidComponent(component),\n complexity: this.assessComplexity(component),\n hasDynamicContent: this.hasDynamicContent(component),\n estimatedSize: this.estimateSize(component)\n };\n\n if (isCoherentObject(component)) {\n const entries = Object.entries(component);\n if (entries.length === 1) {\n const [_tagName, props] = entries;\n analysis.tagName = _tagName;\n analysis.propCount = Object.keys(props).length;\n analysis.hasChildren = hasChildren(props);\n analysis.eventHandlers = this.extractEventHandlers(props);\n }\n }\n\n return analysis;\n }\n\n /**\n * Get component context tree\n */\n getComponentContext(component, path = []) {\n const context = {\n path: path.join('.'),\n depth: path.length,\n component: this.summarizeComponent(component),\n children: []\n };\n\n if (isCoherentObject(component) && context.depth < this.options.maxContextDepth) {\n const entries = Object.entries(component);\n if (entries.length === 1) {\n const [tagName, props] = entries;\n\n if (hasChildren(props)) {\n const children = Array.isArray(props.children) ? props.children : [props.children];\n children.forEach((child, index) => {\n if (child && typeof child === 'object') {\n const childContext = this.getComponentContext(child, [...path, `${tagName}[${index}]`]);\n context.children.push(childContext);\n }\n });\n }\n }\n }\n\n return context;\n }\n\n /**\n * Validate component props\n */\n validateProps(component) {\n if (!isCoherentObject(component)) return { valid: true, issues: [] };\n\n const entries = Object.entries(component);\n if (entries.length !== 1) return { valid: false, issues: ['Component must have exactly one root element'] };\n\n const [tagName, props] = entries;\n const issues = [];\n const warnings = [];\n\n // Check for common prop issues\n Object.entries(props).forEach(([key, value]) => {\n // Check for undefined props\n if (value === undefined) {\n issues.push(`Prop '${key}' is undefined`);\n }\n\n // Check for null props that might cause issues\n if (value === null && key !== 'children' && key !== 'text') {\n warnings.push(`Prop '${key}' is null`);\n }\n\n // Check for event handlers\n if (typeof value === 'function' && !/^on[A-Z]/.test(key)) {\n warnings.push(`Function prop '${key}' doesn't follow event handler naming convention (onXxx)`);\n }\n\n // Check for potentially large objects\n if (typeof value === 'object' && value !== null) {\n const size = JSON.stringify(value).length;\n if (size > 10000) {\n warnings.push(`Prop '${key}' is large (${size} bytes) - consider optimizing`);\n }\n }\n });\n\n // Check for missing required props\n if (tagName === 'img' && !props.src && !props['data-src']) {\n issues.push('Image element missing required src or data-src prop');\n }\n\n if (tagName === 'a' && !props.href && !props.onclick) {\n warnings.push('Link element missing href or onclick prop');\n }\n\n return {\n valid: issues.length === 0,\n issues,\n warnings,\n propCount: Object.keys(props).length\n };\n }\n\n /**\n * Generate fix suggestions based on error and context\n */\n generateSuggestions(enhancedError) {\n const suggestions = [];\n const { originalError, component, category } = enhancedError;\n\n // Component-specific suggestions\n if (component && component.type === 'element') {\n if (component.hasDynamicContent && category === 'performance') {\n suggestions.push({\n type: 'optimization',\n message: 'Consider making this component static for better caching',\n code: 'Remove functions from props to enable static optimization'\n });\n }\n\n if (component.complexity > 10) {\n suggestions.push({\n type: 'structure',\n message: 'Component is complex - consider breaking it into smaller components',\n code: 'Split complex components into reusable functional components'\n });\n }\n }\n\n // Error-specific suggestions\n if (originalError && originalError.message && originalError.message.includes('undefined')) {\n suggestions.push({\n type: 'fix',\n message: 'Check for undefined props or missing data',\n code: 'Add prop validation: if (!props.required) return null;'\n });\n }\n\n if (originalError && originalError.message && originalError.message.includes('Maximum render depth')) {\n suggestions.push({\n type: 'fix',\n message: 'Possible infinite recursion detected',\n code: 'Check for circular references in component props'\n });\n }\n\n // Pattern-based suggestions\n this.commonPatterns.forEach(pattern => {\n if (originalError && originalError.message && pattern.matcher.test(originalError.message)) {\n suggestions.push(pattern.suggestion);\n }\n });\n\n return suggestions;\n }\n\n /**\n * Format enhanced error for display\n */\n formatError(enhancedError) {\n const lines = [];\n\n // Header\n if (this.options.colorOutput) {\n lines.push(this.colorize('\u274C Coherent.js Error', 'red'));\n lines.push(this.colorize('\u2500'.repeat(40), 'red'));\n } else {\n lines.push('\u274C Coherent.js Error');\n lines.push('\u2500'.repeat(40));\n }\n\n // Error message\n lines.push(`Message: ${enhancedError.message}`);\n lines.push(`Category: ${enhancedError.category} (${enhancedError.severity})`);\n lines.push(`Time: ${new Date(enhancedError.timestamp).toLocaleTimeString()}`);\n lines.push('');\n\n // Component context\n if (enhancedError.componentContext) {\n lines.push('\uD83C\uDFD7\uFE0F Component Context');\n lines.push('\u2500'.repeat(20));\n lines.push(`Path: ${enhancedError.componentContext.path}`);\n lines.push(`Type: ${enhancedError.component.type}`);\n lines.push(`Depth: ${enhancedError.componentContext.depth}`);\n\n if (enhancedError.componentContext.component) {\n lines.push(`Summary: ${enhancedError.componentContext.component}`);\n }\n\n lines.push('');\n }\n\n // Prop validation\n if (enhancedError.propValidation) {\n const validation = enhancedError.propValidation;\n lines.push('\uD83D\uDCDD Prop Validation');\n lines.push('\u2500'.repeat(18));\n lines.push(`Valid: ${validation.valid ? '\u2705' : '\u274C'}`);\n lines.push(`Props: ${validation.propCount}`);\n\n if (validation.issues.length > 0) {\n lines.push('Issues:');\n validation.issues.forEach(issue => {\n lines.push(` \u274C ${issue}`);\n });\n }\n\n if (validation.warnings.length > 0) {\n lines.push('Warnings:');\n validation.warnings.forEach(warning => {\n lines.push(` \u26A0\uFE0F ${warning}`);\n });\n }\n\n lines.push('');\n }\n\n // Suggestions\n if (enhancedError.suggestions.length > 0) {\n lines.push('\uD83D\uDCA1 Suggestions');\n lines.push('\u2500'.repeat(13));\n enhancedError.suggestions.forEach((suggestion, index) => {\n const icon = suggestion.type === 'fix' ? '\uD83D\uDD27' :\n suggestion.type === 'optimization' ? '\u26A1' :\n suggestion.type === 'structure' ? '\uD83C\uDFD7\uFE0F' : '\uD83D\uDCA1';\n lines.push(`${index + 1}. ${icon} ${suggestion.message}`);\n if (suggestion.code) {\n lines.push(` Code: ${suggestion.code}`);\n }\n });\n lines.push('');\n }\n\n // Stack trace (optional)\n if (this.options.includeStackTrace && enhancedError.stack) {\n lines.push('\uD83D\uDCDA Stack Trace');\n lines.push('\u2500'.repeat(15));\n lines.push(enhancedError.stack.split('\\n').slice(0, 10).join('\\n'));\n if (enhancedError.stack.split('\\n').length > 10) {\n lines.push('... (truncated)');\n }\n }\n\n return lines.join('\\n');\n }\n\n /**\n * Get component type\n */\n getComponentType(component) {\n if (component === null || component === undefined) return 'empty';\n if (typeof component === 'string') return 'text';\n if (typeof component === 'number') return 'number';\n if (typeof component === 'boolean') return 'boolean';\n if (typeof component === 'function') return 'function';\n if (Array.isArray(component)) return 'array';\n if (isCoherentObject(component)) return 'element';\n return 'object';\n }\n\n /**\n * Check if component is valid\n */\n isValidComponent(component) {\n try {\n // Basic validation\n if (component === null || component === undefined) return true;\n if (typeof component === 'string' || typeof component === 'number') return true;\n if (typeof component === 'function') return true;\n if (Array.isArray(component)) return component.every(child => this.isValidComponent(child));\n if (isCoherentObject(component)) {\n const entries = Object.entries(component);\n return entries.length === 1;\n }\n return false;\n } catch {\n return false;\n }\n }\n\n /**\n * Assess component complexity\n */\n assessComplexity(component) {\n let complexity = 0;\n\n if (typeof component === 'object' && component !== null) {\n if (isCoherentObject(component)) {\n const entries = Object.entries(component);\n if (entries.length === 1) {\n const [_tagName, props] = entries;\n complexity += Object.keys(props).length;\n\n if (hasChildren(props)) {\n const children = Array.isArray(props.children) ? props.children : [props.children];\n children.forEach(child => {\n complexity += this.assessComplexity(child);\n });\n }\n }\n } else {\n complexity += Object.keys(component).length;\n }\n }\n\n return complexity;\n }\n\n /**\n * Check if component has dynamic content\n */\n hasDynamicContent(component) {\n if (typeof component === 'function') return true;\n if (typeof component === 'object' && component !== null) {\n for (const value of Object.values(component)) {\n if (typeof value === 'function') return true;\n if (typeof value === 'object' && this.hasDynamicContent(value)) return true;\n }\n }\n return false;\n }\n\n /**\n * Estimate component size\n */\n estimateSize(component) {\n try {\n return JSON.stringify(component).length;\n } catch {\n return 0;\n }\n }\n\n /**\n * Summarize component for context\n */\n summarizeComponent(component) {\n const type = this.getComponentType(component);\n\n if (type === 'element' && isCoherentObject(component)) {\n const entries = Object.entries(component);\n if (entries.length === 1) {\n const [tagName, props] = entries;\n const propCount = Object.keys(props).length;\n const hasChildren = hasChildren(props);\n return `<${tagName}> (${propCount} props, ${hasChildren ? 'has' : 'no'} children)`;\n }\n }\n\n if (type === 'text') {\n const preview = String(component).substring(0, 30);\n return `Text: \"${preview}${component.length > 30 ? '...' : ''}\"`;\n }\n\n if (type === 'function') {\n return `Function: ${component.name || 'anonymous'}`;\n }\n\n return `${type} (${this.estimateSize(component)} bytes)`;\n }\n\n /**\n * Extract event handlers from props\n */\n extractEventHandlers(props) {\n return Object.keys(props).filter(key => /^on[A-Z]/.test(key));\n }\n\n /**\n * Determine error severity\n */\n determineSeverity(error) {\n if (error.name === 'TypeError' || error.name === 'ReferenceError') return 'critical';\n if (error.message.includes('Maximum render depth')) return 'critical';\n if (error.message.includes('undefined')) return 'high';\n if (error.message.includes('performance')) return 'medium';\n return 'low';\n }\n\n /**\n * Categorize error\n */\n categorizeError(error) {\n if (error.message.includes('render') || error.message.includes('component')) return 'rendering';\n if (error.message.includes('props') || error.message.includes('prop')) return 'props';\n if (error.message.includes('cache') || error.message.includes('performance')) return 'performance';\n if (error.message.includes('route') || error.message.includes('router')) return 'routing';\n return 'general';\n }\n\n /**\n * Initialize common error patterns and suggestions\n */\n initializeCommonPatterns() {\n return [\n {\n matcher: /undefined.*property/gi,\n suggestion: {\n type: 'fix',\n message: 'Check for undefined properties in component props',\n code: 'Add default props: const { required = \"default\" } = props;'\n }\n },\n {\n matcher: /maximum.*depth/gi,\n suggestion: {\n type: 'fix',\n message: 'Infinite recursion detected in component tree',\n code: 'Check for circular references in component children'\n }\n },\n {\n matcher: /cannot.*read.*property/gi,\n suggestion: {\n type: 'fix',\n message: 'Property access error - check object structure',\n code: 'Use optional chaining: obj?.prop?.nested'\n }\n },\n {\n matcher: /performance/gi,\n suggestion: {\n type: 'optimization',\n message: 'Consider optimizing component for better performance',\n code: 'Use memoization or static components where possible'\n }\n }\n ];\n }\n\n /**\n * Add color to text\n */\n colorize(text, color) {\n if (!this.options.colorOutput) return text;\n\n const colors = {\n black: '\\x1b[30m',\n red: '\\x1b[31m',\n green: '\\x1b[32m',\n yellow: '\\x1b[33m',\n blue: '\\x1b[34m',\n magenta: '\\x1b[35m',\n cyan: '\\x1b[36m',\n white: '\\x1b[37m',\n gray: '\\x1b[90m'\n };\n\n const reset = '\\x1b[0m';\n return `${colors[color] || ''}${text}${reset}`;\n }\n\n /**\n * Get error statistics\n */\n getErrorStats() {\n const stats = {\n total: this.errorHistory.length,\n byCategory: {},\n bySeverity: {},\n recent: this.errorHistory.slice(-10)\n };\n\n this.errorHistory.forEach(error => {\n stats.byCategory[error.category] = (stats.byCategory[error.category] || 0) + 1;\n stats.bySeverity[error.severity] = (stats.bySeverity[error.severity] || 0) + 1;\n });\n\n return stats;\n }\n}\n\n/**\n * Create enhanced error handler\n */\nexport function createEnhancedErrorHandler(options = {}) {\n return new EnhancedErrorHandler(options);\n}\n\n/**\n * Handle error and log enhanced version\n */\nexport function handleEnhancedError(error, component = null, context = {}) {\n const handler = createEnhancedErrorHandler();\n const enhancedError = handler.handleError(error, component, context);\n console.error(handler.formatError(enhancedError));\n return enhancedError;\n}\n\nexport default {\n EnhancedErrorHandler,\n createEnhancedErrorHandler,\n handleEnhancedError\n};\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["path", "validateComponent", "path", "validateComponent", "isCoherentObject", "isCoherentObject", "hasChildren", "path"]
|
|
7
7
|
}
|