@coherent.js/devtools 1.0.0-beta.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/inspector.js", "../src/profiler.js", "../src/logger.js", "../src/dev-tools.js", "../src/index.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 * 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"]
7
+ }