@coherent.js/devtools 1.0.1 → 1.1.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.
|
@@ -111,7 +111,7 @@ var HybridVisualizer = class {
|
|
|
111
111
|
let complexity = 1;
|
|
112
112
|
const objectMatches = funcString.match(/\{/g);
|
|
113
113
|
if (objectMatches) complexity += objectMatches.length;
|
|
114
|
-
const functionMatches = funcString.match(/\w
|
|
114
|
+
const functionMatches = funcString.match(/\w\(/g);
|
|
115
115
|
if (functionMatches) complexity += functionMatches.length * 0.5;
|
|
116
116
|
const conditionalMatches = funcString.match(/\?|if|switch/g);
|
|
117
117
|
if (conditionalMatches) complexity += conditionalMatches.length * 2;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/hybrid-integration-tools.js"],
|
|
4
|
-
"sourcesContent": ["/**\n * Hybrid FP/OOP Integration Tools for Coherent.js\n *\n * Enhanced developer tools that visualize and debug the hybrid approach:\n * - OOP state management visualization\n * - FP component composition analysis\n * - State-to-component flow tracking\n * - Performance insights for hybrid patterns\n */\n\n/**\n * Hybrid Architecture Visualizer\n */\nexport class HybridVisualizer {\n constructor(options = {}) {\n this.options = {\n showStateFlow: options.showStateFlow !== false,\n showComponentComposition: options.showComponentComposition !== false,\n showPerformanceImpact: options.showPerformanceImpact !== false,\n colorOutput: options.colorOutput !== false,\n ...options\n };\n\n this.stateInstances = new Map();\n this.componentInstances = new Map();\n this.connections = [];\n }\n\n /**\n * Register a state instance for tracking\n */\n registerState(name, stateInstance) {\n this.stateInstances.set(name, {\n instance: stateInstance,\n type: this.getStateType(stateInstance),\n methods: this.getStateMethods(stateInstance),\n properties: this.getStateProperties(stateInstance),\n connections: []\n });\n }\n\n /**\n * Register a component instance for tracking\n */\n registerComponent(name, componentFunction, usedStates = []) {\n this.componentInstances.set(name, {\n function: componentFunction,\n usedStates,\n composition: this.analyzeComposition(componentFunction),\n complexity: this.assessComplexity(componentFunction)\n });\n\n // Track connections\n usedStates.forEach(stateName => {\n if (this.stateInstances.has(stateName)) {\n this.connections.push({\n from: stateName,\n to: name,\n type: 'state-to-component'\n });\n\n this.stateInstances.get(stateName).connections.push(name);\n }\n });\n }\n\n /**\n * Visualize the entire hybrid architecture\n */\n visualizeHybridArchitecture() {\n const lines = [];\n\n if (this.options.colorOutput) {\n lines.push('\\n\uD83C\uDFD7\uFE0F Coherent.js Hybrid Architecture Visualization');\n lines.push('\u2550'.repeat(60));\n } else {\n lines.push('\\nCoherent.js Hybrid Architecture Visualization');\n lines.push('\u2550'.repeat(60));\n }\n\n // State Management Layer (OOP)\n lines.push('\\n\uD83D\uDCCA State Management Layer (OOP)');\n lines.push('\u2500'.repeat(35));\n this.stateInstances.forEach((state, name) => {\n lines.push(`\\n\uD83D\uDD27 ${name} (${state.type})`);\n lines.push(` Methods: ${state.methods.join(', ')}`);\n lines.push(` Properties: ${state.properties.join(', ')}`);\n lines.push(` Connected to: ${state.connections.join(', ') || 'None'}`);\n });\n\n // Component Layer (FP)\n lines.push('\\n\uD83C\uDFA8 Component Layer (FP)');\n lines.push('\u2500'.repeat(25));\n this.componentInstances.forEach((component, name) => {\n lines.push(`\\n\u26A1 ${name}`);\n lines.push(` Complexity: ${component.complexity}`);\n lines.push(` Uses states: ${component.usedStates.join(', ') || 'None'}`);\n lines.push(` Composition: ${component.composition.join(', ') || 'Direct'}`);\n });\n\n // Data Flow Visualization\n if (this.options.showStateFlow) {\n lines.push('\\n\uD83D\uDD04 State-to-Component Flow');\n lines.push('\u2500'.repeat(30));\n this.connections.forEach(connection => {\n lines.push(` ${connection.from} \u2192 ${connection.to}`);\n });\n }\n\n // Performance Analysis\n if (this.options.showPerformanceImpact) {\n lines.push('\\n\uD83D\uDCC8 Performance Impact Analysis');\n lines.push('\u2500'.repeat(32));\n lines.push(this.generatePerformanceInsights());\n }\n\n return lines.join('\\n');\n }\n\n /**\n * Analyze component composition\n */\n analyzeComposition(componentFunction) {\n const composition = [];\n\n // This is a simplified analysis - in real implementation,\n // we'd parse the function to detect HOCs, composition patterns\n const funcString = componentFunction.toString();\n\n if (funcString.includes('hoc.withProps')) composition.push('withProps');\n if (funcString.includes('hoc.withMemo')) composition.push('withMemo');\n if (funcString.includes('layout.stack')) composition.push('stack');\n if (funcString.includes('layout.card')) composition.push('card');\n if (funcString.includes('data.map')) composition.push('map');\n if (funcString.includes('compose.combine')) composition.push('combine');\n\n return composition;\n }\n\n /**\n * Assess component complexity\n */\n assessComplexity(componentFunction) {\n const funcString = componentFunction.toString();\n\n let complexity = 1; // Base complexity\n\n // Count nested objects\n const objectMatches = funcString.match(/\\{/g);\n if (objectMatches) complexity += objectMatches.length;\n\n // Count function calls\n const functionMatches = funcString.match(/\\w+\\(/g);\n if (functionMatches) complexity += functionMatches.length * 0.5;\n\n // Count conditional logic\n const conditionalMatches = funcString.match(/\\?|if|switch/g);\n if (conditionalMatches) complexity += conditionalMatches.length * 2;\n\n return Math.round(complexity);\n }\n\n /**\n * Get state type\n */\n getStateType(stateInstance) {\n if (stateInstance.constructor.name === 'FormState') return 'Form';\n if (stateInstance.constructor.name === 'ListState') return 'List';\n if (stateInstance.constructor.name === 'ModalState') return 'Modal';\n if (stateInstance.constructor.name === 'RouterState') return 'Router';\n if (stateInstance.constructor.name === 'ReactiveState') return 'Reactive';\n return 'Unknown';\n }\n\n /**\n * Get state methods\n */\n getStateMethods(stateInstance) {\n const methods = [];\n const prototype = Object.getPrototypeOf(stateInstance);\n\n Object.getOwnPropertyNames(prototype).forEach(name => {\n if (typeof stateInstance[name] === 'function' && name !== 'constructor') {\n methods.push(name);\n }\n });\n\n return methods;\n }\n\n /**\n * Get state properties\n */\n getStateProperties(stateInstance) {\n const properties = [];\n\n // Try to get internal state properties\n if (stateInstance._state) {\n properties.push('reactive-state');\n }\n if (stateInstance._validators) {\n properties.push('validators');\n }\n if (stateInstance._resolvers) {\n properties.push('resolvers');\n }\n if (stateInstance._routes) {\n properties.push('routes');\n }\n\n return properties;\n }\n\n /**\n * Generate performance insights\n */\n generatePerformanceInsights() {\n const insights = [];\n\n const stateCount = this.stateInstances.size;\n const componentCount = this.componentInstances.size;\n const connectionCount = this.connections.length;\n\n // State efficiency\n if (stateCount > 5) {\n insights.push('\u26A0\uFE0F Many state instances - consider consolidating related state');\n } else {\n insights.push('\u2705 Good state organization');\n }\n\n // Component complexity\n const avgComplexity = Array.from(this.componentInstances.values())\n .reduce((sum, comp) => sum + comp.complexity, 0) / Math.max(componentCount, 1);\n\n if (avgComplexity > 10) {\n insights.push('\u26A0\uFE0F High average component complexity - consider breaking down components');\n } else {\n insights.push('\u2705 Reasonable component complexity');\n }\n\n // State coupling\n const couplingRatio = connectionCount / Math.max(componentCount, 1);\n if (couplingRatio > 2) {\n insights.push('\u26A0\uFE0F High state-to-component coupling - consider using context');\n } else {\n insights.push('\u2705 Good state decoupling');\n }\n\n // Composition usage\n const compositionUsage = Array.from(this.componentInstances.values())\n .filter(comp => comp.composition.length > 0).length / Math.max(componentCount, 1);\n\n if (compositionUsage < 0.5) {\n insights.push('\uD83D\uDCA1 Consider using more composition utilities for better reusability');\n } else {\n insights.push('\u2705 Good use of composition patterns');\n }\n\n return insights.join('\\n ');\n }\n\n /**\n * Export architecture analysis\n */\n exportAnalysis() {\n return {\n timestamp: Date.now(),\n stateInstances: Array.from(this.stateInstances.entries()).map(([name, state]) => ({\n name,\n type: state.type,\n methods: state.methods,\n properties: state.properties,\n connections: state.connections\n })),\n componentInstances: Array.from(this.componentInstances.entries()).map(([name, comp]) => ({\n name,\n complexity: comp.complexity,\n usedStates: comp.usedStates,\n composition: comp.composition\n })),\n connections: this.connections,\n insights: this.generatePerformanceInsights().split('\\n ').filter(Boolean)\n };\n }\n}\n\n/**\n * State Flow Tracker\n */\nexport class StateFlowTracker {\n constructor() {\n this.flows = [];\n this.activeFlows = new Map();\n }\n\n /**\n * Track state change and its impact on components\n */\n trackFlow(stateName, action, oldValue, newValue, affectedComponents = []) {\n const flow = {\n id: Date.now() + Math.random(),\n timestamp: Date.now(),\n stateName,\n action,\n oldValue,\n newValue,\n affectedComponents,\n duration: null\n };\n\n this.flows.push(flow);\n this.activeFlows.set(flow.id, flow);\n\n return flow.id;\n }\n\n /**\n * Complete a flow tracking\n */\n completeFlow(flowId, duration) {\n const flow = this.activeFlows.get(flowId);\n if (flow) {\n flow.duration = duration;\n this.activeFlows.delete(flowId);\n }\n }\n\n /**\n * Analyze flow patterns\n */\n analyzeFlows() {\n const analysis = {\n totalFlows: this.flows.length,\n averageDuration: 0,\n mostActiveStates: {},\n bottleneckComponents: {},\n recommendations: []\n };\n\n if (this.flows.length === 0) return analysis;\n\n // Calculate average duration\n const completedFlows = this.flows.filter(flow => flow.duration !== null);\n analysis.averageDuration = completedFlows.reduce((sum, flow) => sum + flow.duration, 0) / completedFlows.length;\n\n // Most active states\n this.flows.forEach(flow => {\n analysis.mostActiveStates[flow.stateName] = (analysis.mostActiveStates[flow.stateName] || 0) + 1;\n });\n\n // Bottleneck components\n this.flows.forEach(flow => {\n flow.affectedComponents.forEach(component => {\n analysis.bottleneckComponents[component] = (analysis.bottleneckComponents[component] || 0) + 1;\n });\n });\n\n // Generate recommendations\n if (analysis.averageDuration > 50) {\n analysis.recommendations.push('Consider optimizing state updates - average duration is high');\n }\n\n const topState = Object.entries(analysis.mostActiveStates)\n .sort(([,a], [,b]) => b - a)[0];\n\n if (topState && topState[1] > 10) {\n analysis.recommendations.push(`State \"${topState[0]}\" is very active - consider splitting or optimizing`);\n }\n\n return analysis;\n }\n\n /**\n * Visualize flow patterns\n */\n visualizeFlows() {\n const lines = [];\n const analysis = this.analyzeFlows();\n\n lines.push('\\n\uD83D\uDD04 State Flow Analysis');\n lines.push('\u2550'.repeat(25));\n lines.push(`Total Flows: ${analysis.totalFlows}`);\n lines.push(`Average Duration: ${analysis.averageDuration.toFixed(2)}ms`);\n\n if (Object.keys(analysis.mostActiveStates).length > 0) {\n lines.push('\\n\uD83D\uDCCA Most Active States:');\n Object.entries(analysis.mostActiveStates)\n .sort(([,a], [,b]) => b - a)\n .slice(0, 5)\n .forEach(([state, count]) => {\n lines.push(` ${state}: ${count} updates`);\n });\n }\n\n if (Object.keys(analysis.bottleneckComponents).length > 0) {\n lines.push('\\n\u26A0\uFE0F Most Affected Components:');\n Object.entries(analysis.bottleneckComponents)\n .sort(([,a], [,b]) => b - a)\n .slice(0, 5)\n .forEach(([component, count]) => {\n lines.push(` ${component}: ${count} re-renders`);\n });\n }\n\n if (analysis.recommendations.length > 0) {\n lines.push('\\n\uD83D\uDCA1 Recommendations:');\n analysis.recommendations.forEach(rec => {\n lines.push(` \u2022 ${rec}`);\n });\n }\n\n return lines.join('\\n');\n }\n}\n\n/**\n * Hybrid Performance Monitor\n */\nexport class HybridPerformanceMonitor {\n constructor() {\n this.metrics = {\n stateOperations: [],\n componentRenders: [],\n hybridInteractions: []\n };\n\n this.startTime = Date.now();\n }\n\n /**\n * Track state operation\n */\n trackStateOperation(stateName, operation, duration, memoryDelta = 0) {\n this.metrics.stateOperations.push({\n timestamp: Date.now(),\n stateName,\n operation,\n duration,\n memoryDelta\n });\n }\n\n /**\n * Track component render\n */\n trackComponentRender(componentName, duration, usedStates = []) {\n this.metrics.componentRenders.push({\n timestamp: Date.now(),\n componentName,\n duration,\n usedStates\n });\n }\n\n /**\n * Track hybrid interaction\n */\n trackHybridInteraction(stateName, componentName, action, duration) {\n this.metrics.hybridInteractions.push({\n timestamp: Date.now(),\n stateName,\n componentName,\n action,\n duration\n });\n }\n\n /**\n * Generate hybrid performance report\n */\n generateReport() {\n const lines = [];\n\n lines.push('\\n\uD83D\uDCC8 Hybrid Performance Report');\n lines.push('\u2550'.repeat(35));\n\n // State operations summary\n const stateOps = this.metrics.stateOperations;\n if (stateOps.length > 0) {\n const avgStateDuration = stateOps.reduce((sum, op) => sum + op.duration, 0) / stateOps.length;\n lines.push(`\\n\uD83D\uDD27 State Operations: ${stateOps.length}`);\n lines.push(` Average Duration: ${avgStateDuration.toFixed(2)}ms`);\n\n const stateCounts = {};\n stateOps.forEach(op => {\n stateCounts[op.stateName] = (stateCounts[op.stateName] || 0) + 1;\n });\n\n const topState = Object.entries(stateCounts).sort(([,a], [,b]) => b - a)[0];\n if (topState) {\n lines.push(` Most Active: ${topState[0]} (${topState[1]} operations)`);\n }\n }\n\n // Component renders summary\n const componentRenders = this.metrics.componentRenders;\n if (componentRenders.length > 0) {\n const avgRenderDuration = componentRenders.reduce((sum, r) => sum + r.duration, 0) / componentRenders.length;\n lines.push(`\\n\u26A1 Component Renders: ${componentRenders.length}`);\n lines.push(` Average Duration: ${avgRenderDuration.toFixed(2)}ms`);\n\n const renderCounts = {};\n componentRenders.forEach(r => {\n renderCounts[r.componentName] = (renderCounts[r.componentName] || 0) + 1;\n });\n\n const topComponent = Object.entries(renderCounts).sort(([,a], [,b]) => b - a)[0];\n if (topComponent) {\n lines.push(` Most Rendered: ${topComponent[0]} (${topComponent[1]} times)`);\n }\n }\n\n // Hybrid interactions\n const interactions = this.metrics.hybridInteractions;\n if (interactions.length > 0) {\n lines.push(`\\n\uD83D\uDD04 Hybrid Interactions: ${interactions.length}`);\n\n const actionCounts = {};\n interactions.forEach(i => {\n actionCounts[i.action] = (actionCounts[i.action] || 0) + 1;\n });\n\n lines.push(' Actions:');\n Object.entries(actionCounts).forEach(([action, count]) => {\n lines.push(` ${action}: ${count}`);\n });\n }\n\n return lines.join('\\n');\n }\n\n /**\n * Export metrics\n */\n exportMetrics() {\n return {\n timestamp: Date.now(),\n uptime: Date.now() - this.startTime,\n metrics: { ...this.metrics }\n };\n }\n}\n\n/**\n * Factory functions\n */\nexport function createHybridVisualizer(options) {\n return new HybridVisualizer(options);\n}\n\nexport function createStateFlowTracker() {\n return new StateFlowTracker();\n}\n\nexport function createHybridPerformanceMonitor() {\n return new HybridPerformanceMonitor();\n}\n\n/**\n * Quick visualization function\n */\nexport function visualizeHybridArchitecture(stateInstances, componentInstances, options = {}) {\n const visualizer = createHybridVisualizer(options);\n\n // Register states\n Object.entries(stateInstances).forEach(([name, instance]) => {\n visualizer.registerState(name, instance);\n });\n\n // Register components\n Object.entries(componentInstances).forEach(([name, { component, states }]) => {\n visualizer.registerComponent(name, component, states);\n });\n\n return visualizer.visualizeHybridArchitecture();\n}\n\nexport default {\n HybridVisualizer,\n StateFlowTracker,\n HybridPerformanceMonitor,\n createHybridVisualizer,\n createStateFlowTracker,\n createHybridPerformanceMonitor,\n visualizeHybridArchitecture\n};\n"],
|
|
5
|
-
"mappings": "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",
|
|
4
|
+
"sourcesContent": ["/**\n * Hybrid FP/OOP Integration Tools for Coherent.js\n *\n * Enhanced developer tools that visualize and debug the hybrid approach:\n * - OOP state management visualization\n * - FP component composition analysis\n * - State-to-component flow tracking\n * - Performance insights for hybrid patterns\n */\n\n/**\n * Hybrid Architecture Visualizer\n */\nexport class HybridVisualizer {\n constructor(options = {}) {\n this.options = {\n showStateFlow: options.showStateFlow !== false,\n showComponentComposition: options.showComponentComposition !== false,\n showPerformanceImpact: options.showPerformanceImpact !== false,\n colorOutput: options.colorOutput !== false,\n ...options\n };\n\n this.stateInstances = new Map();\n this.componentInstances = new Map();\n this.connections = [];\n }\n\n /**\n * Register a state instance for tracking\n */\n registerState(name, stateInstance) {\n this.stateInstances.set(name, {\n instance: stateInstance,\n type: this.getStateType(stateInstance),\n methods: this.getStateMethods(stateInstance),\n properties: this.getStateProperties(stateInstance),\n connections: []\n });\n }\n\n /**\n * Register a component instance for tracking\n */\n registerComponent(name, componentFunction, usedStates = []) {\n this.componentInstances.set(name, {\n function: componentFunction,\n usedStates,\n composition: this.analyzeComposition(componentFunction),\n complexity: this.assessComplexity(componentFunction)\n });\n\n // Track connections\n usedStates.forEach(stateName => {\n if (this.stateInstances.has(stateName)) {\n this.connections.push({\n from: stateName,\n to: name,\n type: 'state-to-component'\n });\n\n this.stateInstances.get(stateName).connections.push(name);\n }\n });\n }\n\n /**\n * Visualize the entire hybrid architecture\n */\n visualizeHybridArchitecture() {\n const lines = [];\n\n if (this.options.colorOutput) {\n lines.push('\\n\uD83C\uDFD7\uFE0F Coherent.js Hybrid Architecture Visualization');\n lines.push('\u2550'.repeat(60));\n } else {\n lines.push('\\nCoherent.js Hybrid Architecture Visualization');\n lines.push('\u2550'.repeat(60));\n }\n\n // State Management Layer (OOP)\n lines.push('\\n\uD83D\uDCCA State Management Layer (OOP)');\n lines.push('\u2500'.repeat(35));\n this.stateInstances.forEach((state, name) => {\n lines.push(`\\n\uD83D\uDD27 ${name} (${state.type})`);\n lines.push(` Methods: ${state.methods.join(', ')}`);\n lines.push(` Properties: ${state.properties.join(', ')}`);\n lines.push(` Connected to: ${state.connections.join(', ') || 'None'}`);\n });\n\n // Component Layer (FP)\n lines.push('\\n\uD83C\uDFA8 Component Layer (FP)');\n lines.push('\u2500'.repeat(25));\n this.componentInstances.forEach((component, name) => {\n lines.push(`\\n\u26A1 ${name}`);\n lines.push(` Complexity: ${component.complexity}`);\n lines.push(` Uses states: ${component.usedStates.join(', ') || 'None'}`);\n lines.push(` Composition: ${component.composition.join(', ') || 'Direct'}`);\n });\n\n // Data Flow Visualization\n if (this.options.showStateFlow) {\n lines.push('\\n\uD83D\uDD04 State-to-Component Flow');\n lines.push('\u2500'.repeat(30));\n this.connections.forEach(connection => {\n lines.push(` ${connection.from} \u2192 ${connection.to}`);\n });\n }\n\n // Performance Analysis\n if (this.options.showPerformanceImpact) {\n lines.push('\\n\uD83D\uDCC8 Performance Impact Analysis');\n lines.push('\u2500'.repeat(32));\n lines.push(this.generatePerformanceInsights());\n }\n\n return lines.join('\\n');\n }\n\n /**\n * Analyze component composition\n */\n analyzeComposition(componentFunction) {\n const composition = [];\n\n // This is a simplified analysis - in real implementation,\n // we'd parse the function to detect HOCs, composition patterns\n const funcString = componentFunction.toString();\n\n if (funcString.includes('hoc.withProps')) composition.push('withProps');\n if (funcString.includes('hoc.withMemo')) composition.push('withMemo');\n if (funcString.includes('layout.stack')) composition.push('stack');\n if (funcString.includes('layout.card')) composition.push('card');\n if (funcString.includes('data.map')) composition.push('map');\n if (funcString.includes('compose.combine')) composition.push('combine');\n\n return composition;\n }\n\n /**\n * Assess component complexity\n */\n assessComplexity(componentFunction) {\n const funcString = componentFunction.toString();\n\n let complexity = 1; // Base complexity\n\n // Count nested objects\n const objectMatches = funcString.match(/\\{/g);\n if (objectMatches) complexity += objectMatches.length;\n\n // Count function calls. /\\w\\(/ counts the same occurrences as /\\w+\\(/ \u2014\n // one per '(' preceded by a word character \u2014 without the quadratic\n // rescan on a long run of word characters. CodeQL js/polynomial-redos.\n const functionMatches = funcString.match(/\\w\\(/g);\n if (functionMatches) complexity += functionMatches.length * 0.5;\n\n // Count conditional logic\n const conditionalMatches = funcString.match(/\\?|if|switch/g);\n if (conditionalMatches) complexity += conditionalMatches.length * 2;\n\n return Math.round(complexity);\n }\n\n /**\n * Get state type\n */\n getStateType(stateInstance) {\n if (stateInstance.constructor.name === 'FormState') return 'Form';\n if (stateInstance.constructor.name === 'ListState') return 'List';\n if (stateInstance.constructor.name === 'ModalState') return 'Modal';\n if (stateInstance.constructor.name === 'RouterState') return 'Router';\n if (stateInstance.constructor.name === 'ReactiveState') return 'Reactive';\n return 'Unknown';\n }\n\n /**\n * Get state methods\n */\n getStateMethods(stateInstance) {\n const methods = [];\n const prototype = Object.getPrototypeOf(stateInstance);\n\n Object.getOwnPropertyNames(prototype).forEach(name => {\n if (typeof stateInstance[name] === 'function' && name !== 'constructor') {\n methods.push(name);\n }\n });\n\n return methods;\n }\n\n /**\n * Get state properties\n */\n getStateProperties(stateInstance) {\n const properties = [];\n\n // Try to get internal state properties\n if (stateInstance._state) {\n properties.push('reactive-state');\n }\n if (stateInstance._validators) {\n properties.push('validators');\n }\n if (stateInstance._resolvers) {\n properties.push('resolvers');\n }\n if (stateInstance._routes) {\n properties.push('routes');\n }\n\n return properties;\n }\n\n /**\n * Generate performance insights\n */\n generatePerformanceInsights() {\n const insights = [];\n\n const stateCount = this.stateInstances.size;\n const componentCount = this.componentInstances.size;\n const connectionCount = this.connections.length;\n\n // State efficiency\n if (stateCount > 5) {\n insights.push('\u26A0\uFE0F Many state instances - consider consolidating related state');\n } else {\n insights.push('\u2705 Good state organization');\n }\n\n // Component complexity\n const avgComplexity = Array.from(this.componentInstances.values())\n .reduce((sum, comp) => sum + comp.complexity, 0) / Math.max(componentCount, 1);\n\n if (avgComplexity > 10) {\n insights.push('\u26A0\uFE0F High average component complexity - consider breaking down components');\n } else {\n insights.push('\u2705 Reasonable component complexity');\n }\n\n // State coupling\n const couplingRatio = connectionCount / Math.max(componentCount, 1);\n if (couplingRatio > 2) {\n insights.push('\u26A0\uFE0F High state-to-component coupling - consider using context');\n } else {\n insights.push('\u2705 Good state decoupling');\n }\n\n // Composition usage\n const compositionUsage = Array.from(this.componentInstances.values())\n .filter(comp => comp.composition.length > 0).length / Math.max(componentCount, 1);\n\n if (compositionUsage < 0.5) {\n insights.push('\uD83D\uDCA1 Consider using more composition utilities for better reusability');\n } else {\n insights.push('\u2705 Good use of composition patterns');\n }\n\n return insights.join('\\n ');\n }\n\n /**\n * Export architecture analysis\n */\n exportAnalysis() {\n return {\n timestamp: Date.now(),\n stateInstances: Array.from(this.stateInstances.entries()).map(([name, state]) => ({\n name,\n type: state.type,\n methods: state.methods,\n properties: state.properties,\n connections: state.connections\n })),\n componentInstances: Array.from(this.componentInstances.entries()).map(([name, comp]) => ({\n name,\n complexity: comp.complexity,\n usedStates: comp.usedStates,\n composition: comp.composition\n })),\n connections: this.connections,\n insights: this.generatePerformanceInsights().split('\\n ').filter(Boolean)\n };\n }\n}\n\n/**\n * State Flow Tracker\n */\nexport class StateFlowTracker {\n constructor() {\n this.flows = [];\n this.activeFlows = new Map();\n }\n\n /**\n * Track state change and its impact on components\n */\n trackFlow(stateName, action, oldValue, newValue, affectedComponents = []) {\n const flow = {\n id: Date.now() + Math.random(),\n timestamp: Date.now(),\n stateName,\n action,\n oldValue,\n newValue,\n affectedComponents,\n duration: null\n };\n\n this.flows.push(flow);\n this.activeFlows.set(flow.id, flow);\n\n return flow.id;\n }\n\n /**\n * Complete a flow tracking\n */\n completeFlow(flowId, duration) {\n const flow = this.activeFlows.get(flowId);\n if (flow) {\n flow.duration = duration;\n this.activeFlows.delete(flowId);\n }\n }\n\n /**\n * Analyze flow patterns\n */\n analyzeFlows() {\n const analysis = {\n totalFlows: this.flows.length,\n averageDuration: 0,\n mostActiveStates: {},\n bottleneckComponents: {},\n recommendations: []\n };\n\n if (this.flows.length === 0) return analysis;\n\n // Calculate average duration\n const completedFlows = this.flows.filter(flow => flow.duration !== null);\n analysis.averageDuration = completedFlows.reduce((sum, flow) => sum + flow.duration, 0) / completedFlows.length;\n\n // Most active states\n this.flows.forEach(flow => {\n analysis.mostActiveStates[flow.stateName] = (analysis.mostActiveStates[flow.stateName] || 0) + 1;\n });\n\n // Bottleneck components\n this.flows.forEach(flow => {\n flow.affectedComponents.forEach(component => {\n analysis.bottleneckComponents[component] = (analysis.bottleneckComponents[component] || 0) + 1;\n });\n });\n\n // Generate recommendations\n if (analysis.averageDuration > 50) {\n analysis.recommendations.push('Consider optimizing state updates - average duration is high');\n }\n\n const topState = Object.entries(analysis.mostActiveStates)\n .sort(([,a], [,b]) => b - a)[0];\n\n if (topState && topState[1] > 10) {\n analysis.recommendations.push(`State \"${topState[0]}\" is very active - consider splitting or optimizing`);\n }\n\n return analysis;\n }\n\n /**\n * Visualize flow patterns\n */\n visualizeFlows() {\n const lines = [];\n const analysis = this.analyzeFlows();\n\n lines.push('\\n\uD83D\uDD04 State Flow Analysis');\n lines.push('\u2550'.repeat(25));\n lines.push(`Total Flows: ${analysis.totalFlows}`);\n lines.push(`Average Duration: ${analysis.averageDuration.toFixed(2)}ms`);\n\n if (Object.keys(analysis.mostActiveStates).length > 0) {\n lines.push('\\n\uD83D\uDCCA Most Active States:');\n Object.entries(analysis.mostActiveStates)\n .sort(([,a], [,b]) => b - a)\n .slice(0, 5)\n .forEach(([state, count]) => {\n lines.push(` ${state}: ${count} updates`);\n });\n }\n\n if (Object.keys(analysis.bottleneckComponents).length > 0) {\n lines.push('\\n\u26A0\uFE0F Most Affected Components:');\n Object.entries(analysis.bottleneckComponents)\n .sort(([,a], [,b]) => b - a)\n .slice(0, 5)\n .forEach(([component, count]) => {\n lines.push(` ${component}: ${count} re-renders`);\n });\n }\n\n if (analysis.recommendations.length > 0) {\n lines.push('\\n\uD83D\uDCA1 Recommendations:');\n analysis.recommendations.forEach(rec => {\n lines.push(` \u2022 ${rec}`);\n });\n }\n\n return lines.join('\\n');\n }\n}\n\n/**\n * Hybrid Performance Monitor\n */\nexport class HybridPerformanceMonitor {\n constructor() {\n this.metrics = {\n stateOperations: [],\n componentRenders: [],\n hybridInteractions: []\n };\n\n this.startTime = Date.now();\n }\n\n /**\n * Track state operation\n */\n trackStateOperation(stateName, operation, duration, memoryDelta = 0) {\n this.metrics.stateOperations.push({\n timestamp: Date.now(),\n stateName,\n operation,\n duration,\n memoryDelta\n });\n }\n\n /**\n * Track component render\n */\n trackComponentRender(componentName, duration, usedStates = []) {\n this.metrics.componentRenders.push({\n timestamp: Date.now(),\n componentName,\n duration,\n usedStates\n });\n }\n\n /**\n * Track hybrid interaction\n */\n trackHybridInteraction(stateName, componentName, action, duration) {\n this.metrics.hybridInteractions.push({\n timestamp: Date.now(),\n stateName,\n componentName,\n action,\n duration\n });\n }\n\n /**\n * Generate hybrid performance report\n */\n generateReport() {\n const lines = [];\n\n lines.push('\\n\uD83D\uDCC8 Hybrid Performance Report');\n lines.push('\u2550'.repeat(35));\n\n // State operations summary\n const stateOps = this.metrics.stateOperations;\n if (stateOps.length > 0) {\n const avgStateDuration = stateOps.reduce((sum, op) => sum + op.duration, 0) / stateOps.length;\n lines.push(`\\n\uD83D\uDD27 State Operations: ${stateOps.length}`);\n lines.push(` Average Duration: ${avgStateDuration.toFixed(2)}ms`);\n\n const stateCounts = {};\n stateOps.forEach(op => {\n stateCounts[op.stateName] = (stateCounts[op.stateName] || 0) + 1;\n });\n\n const topState = Object.entries(stateCounts).sort(([,a], [,b]) => b - a)[0];\n if (topState) {\n lines.push(` Most Active: ${topState[0]} (${topState[1]} operations)`);\n }\n }\n\n // Component renders summary\n const componentRenders = this.metrics.componentRenders;\n if (componentRenders.length > 0) {\n const avgRenderDuration = componentRenders.reduce((sum, r) => sum + r.duration, 0) / componentRenders.length;\n lines.push(`\\n\u26A1 Component Renders: ${componentRenders.length}`);\n lines.push(` Average Duration: ${avgRenderDuration.toFixed(2)}ms`);\n\n const renderCounts = {};\n componentRenders.forEach(r => {\n renderCounts[r.componentName] = (renderCounts[r.componentName] || 0) + 1;\n });\n\n const topComponent = Object.entries(renderCounts).sort(([,a], [,b]) => b - a)[0];\n if (topComponent) {\n lines.push(` Most Rendered: ${topComponent[0]} (${topComponent[1]} times)`);\n }\n }\n\n // Hybrid interactions\n const interactions = this.metrics.hybridInteractions;\n if (interactions.length > 0) {\n lines.push(`\\n\uD83D\uDD04 Hybrid Interactions: ${interactions.length}`);\n\n const actionCounts = {};\n interactions.forEach(i => {\n actionCounts[i.action] = (actionCounts[i.action] || 0) + 1;\n });\n\n lines.push(' Actions:');\n Object.entries(actionCounts).forEach(([action, count]) => {\n lines.push(` ${action}: ${count}`);\n });\n }\n\n return lines.join('\\n');\n }\n\n /**\n * Export metrics\n */\n exportMetrics() {\n return {\n timestamp: Date.now(),\n uptime: Date.now() - this.startTime,\n metrics: { ...this.metrics }\n };\n }\n}\n\n/**\n * Factory functions\n */\nexport function createHybridVisualizer(options) {\n return new HybridVisualizer(options);\n}\n\nexport function createStateFlowTracker() {\n return new StateFlowTracker();\n}\n\nexport function createHybridPerformanceMonitor() {\n return new HybridPerformanceMonitor();\n}\n\n/**\n * Quick visualization function\n */\nexport function visualizeHybridArchitecture(stateInstances, componentInstances, options = {}) {\n const visualizer = createHybridVisualizer(options);\n\n // Register states\n Object.entries(stateInstances).forEach(([name, instance]) => {\n visualizer.registerState(name, instance);\n });\n\n // Register components\n Object.entries(componentInstances).forEach(([name, { component, states }]) => {\n visualizer.registerComponent(name, component, states);\n });\n\n return visualizer.visualizeHybridArchitecture();\n}\n\nexport default {\n HybridVisualizer,\n StateFlowTracker,\n HybridPerformanceMonitor,\n createHybridVisualizer,\n createStateFlowTracker,\n createHybridPerformanceMonitor,\n visualizeHybridArchitecture\n};\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
package/dist/index.js
CHANGED
|
@@ -856,10 +856,21 @@ var PerformanceProfiler = class {
|
|
|
856
856
|
this.options.enabled = false;
|
|
857
857
|
}
|
|
858
858
|
/**
|
|
859
|
-
* Generate unique ID
|
|
859
|
+
* Generate unique ID.
|
|
860
|
+
*
|
|
861
|
+
* Uses crypto.getRandomValues rather than Math.random: the ids key the
|
|
862
|
+
* session and measurement maps, so a predictable suffix lets one caller
|
|
863
|
+
* guess or collide with another's entry. getRandomValues is available in
|
|
864
|
+
* Node 19+ and in browsers without requiring a secure context, unlike
|
|
865
|
+
* randomUUID.
|
|
866
|
+
*
|
|
867
|
+
* @returns {string} A unique profiling id
|
|
860
868
|
*/
|
|
861
869
|
generateId() {
|
|
862
|
-
|
|
870
|
+
const bytes = new Uint8Array(8);
|
|
871
|
+
globalThis.crypto.getRandomValues(bytes);
|
|
872
|
+
const suffix = Array.from(bytes, (byte) => byte.toString(16).padStart(2, "0")).join("");
|
|
873
|
+
return `prof-${Date.now()}-${suffix}`;
|
|
863
874
|
}
|
|
864
875
|
};
|
|
865
876
|
function createProfiler(options = {}) {
|