@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.
package/dist/profiler.js
CHANGED
|
@@ -465,10 +465,21 @@ var PerformanceProfiler = class {
|
|
|
465
465
|
this.options.enabled = false;
|
|
466
466
|
}
|
|
467
467
|
/**
|
|
468
|
-
* Generate unique ID
|
|
468
|
+
* Generate unique ID.
|
|
469
|
+
*
|
|
470
|
+
* Uses crypto.getRandomValues rather than Math.random: the ids key the
|
|
471
|
+
* session and measurement maps, so a predictable suffix lets one caller
|
|
472
|
+
* guess or collide with another's entry. getRandomValues is available in
|
|
473
|
+
* Node 19+ and in browsers without requiring a secure context, unlike
|
|
474
|
+
* randomUUID.
|
|
475
|
+
*
|
|
476
|
+
* @returns {string} A unique profiling id
|
|
469
477
|
*/
|
|
470
478
|
generateId() {
|
|
471
|
-
|
|
479
|
+
const bytes = new Uint8Array(8);
|
|
480
|
+
globalThis.crypto.getRandomValues(bytes);
|
|
481
|
+
const suffix = Array.from(bytes, (byte) => byte.toString(16).padStart(2, "0")).join("");
|
|
482
|
+
return `prof-${Date.now()}-${suffix}`;
|
|
472
483
|
}
|
|
473
484
|
};
|
|
474
485
|
function createProfiler(options = {}) {
|
package/dist/profiler.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/profiler.js"],
|
|
4
|
-
"sourcesContent": ["/**\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"],
|
|
5
|
-
"mappings": "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",
|
|
4
|
+
"sourcesContent": ["/**\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 * Uses crypto.getRandomValues rather than Math.random: the ids key the\n * session and measurement maps, so a predictable suffix lets one caller\n * guess or collide with another's entry. getRandomValues is available in\n * Node 19+ and in browsers without requiring a secure context, unlike\n * randomUUID.\n *\n * @returns {string} A unique profiling id\n */\n generateId() {\n const bytes = new Uint8Array(8);\n globalThis.crypto.getRandomValues(bytes);\n const suffix = Array.from(bytes, byte => byte.toString(16).padStart(2, '0')).join('');\n return `prof-${Date.now()}-${suffix}`;\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"],
|
|
5
|
+
"mappings": ";AAYO,IAAM,sBAAN,MAA0B;AAAA,EAC/B,YAAY,UAAU,CAAC,GAAG;AACxB,SAAK,UAAU;AAAA,MACb,SAAS;AAAA,MACT,YAAY;AAAA;AAAA,MACZ,eAAe;AAAA;AAAA,MACf,aAAa,OAAO,gBAAgB,eAAe,YAAY;AAAA,MAC/D,YAAY,QAAQ,cAAc;AAAA,MAClC,GAAG;AAAA,IACL;AAEA,SAAK,eAAe,CAAC;AACrB,SAAK,WAAW,oBAAI,IAAI;AACxB,SAAK,iBAAiB;AACtB,SAAK,QAAQ,oBAAI,IAAI;AAAA,EACvB;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,OAAO,WAAW;AACtB,QAAI,CAAC,KAAK,QAAQ,SAAS;AACzB,aAAO;AAAA,IACT;AAGA,QAAI,KAAK,QAAQ,aAAa,KAAO,KAAK,OAAO,IAAI,KAAK,QAAQ,YAAY;AAC5E,aAAO;AAAA,IACT;AAEA,UAAM,UAAU;AAAA,MACd,IAAI,KAAK,WAAW;AAAA,MACpB;AAAA,MACA,WAAW,KAAK,IAAI;AAAA,MACpB,cAAc,CAAC;AAAA,MACf,OAAO,CAAC;AAAA,MACR,QAAQ;AAAA,IACV;AAEA,SAAK,SAAS,IAAI,QAAQ,IAAI,OAAO;AACrC,SAAK,iBAAiB;AAEtB,QAAI,OAAO,gBAAgB,eAAe,YAAY,MAAM;AAC1D,kBAAY,KAAK,0BAA0B,QAAQ,EAAE,EAAE;AAAA,IACzD;AAEA,WAAO,QAAQ;AAAA,EACjB;AAAA;AAAA;AAAA;AAAA,EAKA,KAAK,WAAW;AACd,QAAI,CAAC,WAAW;AACd,aAAO;AAAA,IACT;AAEA,UAAM,UAAU,KAAK,SAAS,IAAI,SAAS;AAE3C,QAAI,CAAC,SAAS;AACZ,aAAO;AAAA,IACT;AAEA,YAAQ,UAAU,KAAK,IAAI;AAC3B,YAAQ,WAAW,QAAQ,UAAU,QAAQ;AAC7C,YAAQ,SAAS;AAEjB,QAAI,OAAO,gBAAgB,eAAe,YAAY,MAAM;AAC1D,kBAAY,KAAK,wBAAwB,QAAQ,EAAE,EAAE;AAAA,IACvD;AAEA,QAAI,KAAK,mBAAmB,SAAS;AACnC,WAAK,iBAAiB;AAAA,IACxB;AAGA,SAAK,aAAa,KAAK,OAAO;AAG9B,QAAI,KAAK,aAAa,SAAS,KAAK,QAAQ,YAAY;AACtD,WAAK,aAAa,MAAM;AAAA,IAC1B;AAEA,WAAO,KAAK,eAAe,OAAO;AAAA,EACpC;AAAA;AAAA;AAAA;AAAA,EAKA,YAAY,eAAe,QAAQ,CAAC,GAAG;AACrC,QAAI,CAAC,KAAK,QAAQ,QAAS,QAAO;AAGlC,QAAI,KAAK,OAAO,IAAI,KAAK,QAAQ,WAAY,QAAO;AAEpD,UAAM,gBAAgB,KAAK,WAAW;AACtC,UAAM,cAAc;AAAA,MAClB,IAAI;AAAA,MACJ;AAAA,MACA;AAAA,MACA,WAAW,KAAK,IAAI;AAAA,MACpB,aAAa,KAAK,eAAe;AAAA,MACjC,OAAO;AAAA,IACT;AAEA,SAAK,MAAM,IAAI,eAAe,WAAW;AAEzC,QAAI,OAAO,gBAAgB,eAAe,YAAY,MAAM;AAC1D,kBAAY,KAAK,yBAAyB,aAAa,EAAE;AAAA,IAC3D;AAEA,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,UAAU,eAAe,SAAS,CAAC,GAAG;AACpC,QAAI,CAAC,iBAAiB,CAAC,KAAK,MAAM,IAAI,aAAa,EAAG,QAAO;AAE7D,UAAM,cAAc,KAAK,MAAM,IAAI,aAAa;AAChD,gBAAY,UAAU,KAAK,IAAI;AAC/B,gBAAY,WAAW,YAAY,UAAU,YAAY;AACzD,gBAAY,YAAY,KAAK,eAAe;AAC5C,gBAAY,cAAc,YAAY,YAAY,YAAY;AAC9D,gBAAY,SAAS;AACrB,gBAAY,OAAO,YAAY,WAAW,KAAK,QAAQ;AAEvD,QAAI,OAAO,gBAAgB,eAAe,YAAY,MAAM;AAC1D,kBAAY,KAAK,uBAAuB,aAAa,EAAE;AAEvD,UAAI,YAAY,SAAS;AACvB,YAAI;AACF,sBAAY;AAAA,YACV,mBAAmB,aAAa;AAAA,YAChC,yBAAyB,aAAa;AAAA,YACtC,uBAAuB,aAAa;AAAA,UACtC;AAAA,QACF,QAAQ;AAAA,QAER;AAAA,MACF;AAAA,IACF;AAGA,SAAK,aAAa,KAAK,WAAW;AAGlC,QAAI,KAAK,gBAAgB;AACvB,WAAK,eAAe,aAAa,KAAK,WAAW;AAAA,IACnD;AAGA,SAAK,MAAM,OAAO,aAAa;AAE/B,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,KAAK,MAAM,OAAO,CAAC,GAAG;AACpB,UAAM,OAAO;AAAA,MACX;AAAA,MACA,WAAW,KAAK,IAAI;AAAA,MACpB;AAAA,MACA,QAAQ,KAAK,eAAe;AAAA,IAC9B;AAEA,QAAI,KAAK,gBAAgB;AACvB,WAAK,eAAe,MAAM,KAAK,IAAI;AAAA,IACrC;AAEA,QAAI,OAAO,gBAAgB,eAAe,YAAY,MAAM;AAC1D,kBAAY,KAAK,iBAAiB,IAAI,EAAE;AAAA,IAC1C;AAEA,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,QAAQ,WAAW,SAAS;AAC1B,UAAM,QAAQ,KAAK,SAAS,SAAS;AACrC,UAAM,MAAM,KAAK,SAAS,OAAO;AAEjC,QAAI,CAAC,SAAS,CAAC,KAAK;AAClB,YAAM,IAAI,MAAM,gBAAgB;AAAA,IAClC;AAEA,WAAO;AAAA,MACL,UAAU,IAAI,YAAY,MAAM;AAAA,MAChC,WAAW,MAAM;AAAA,MACjB,SAAS,IAAI;AAAA,IACf;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,iBAAiB;AACf,QAAI,OAAO,gBAAgB,eAAe,YAAY,QAAQ;AAC5D,aAAO;AAAA,QACL,MAAM,YAAY,OAAO;AAAA,QACzB,OAAO,YAAY,OAAO;AAAA,QAC1B,OAAO,YAAY,OAAO;AAAA,MAC5B;AAAA,IACF;AACA,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,SAAS,MAAM;AACb,QAAI,CAAC,KAAK,eAAgB,QAAO;AACjC,WAAO,KAAK,eAAe,MAAM,KAAK,OAAK,EAAE,SAAS,IAAI;AAAA,EAC5D;AAAA;AAAA;AAAA;AAAA,EAKA,gBAAgB,SAAS,CAAC,GAAG;AAC3B,QAAI,UAAU,CAAC,GAAG,KAAK,YAAY;AAEnC,QAAI,OAAO,eAAe;AACxB,gBAAU,QAAQ,OAAO,OAAK,EAAE,kBAAkB,OAAO,aAAa;AAAA,IACxE;AAEA,QAAI,OAAO,MAAM;AACf,gBAAU,QAAQ,OAAO,OAAK,EAAE,IAAI;AAAA,IACtC;AAEA,QAAI,OAAO,aAAa;AACtB,gBAAU,QAAQ,OAAO,OAAK,EAAE,YAAY,OAAO,WAAW;AAAA,IAChE;AAEA,QAAI,OAAO,OAAO;AAChB,gBAAU,QAAQ,MAAM,GAAG,OAAO,KAAK;AAAA,IACzC;AAEA,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,eAAe,SAAS;AACtB,UAAM,eAAe,QAAQ;AAE7B,QAAI,aAAa,WAAW,GAAG;AAC7B,aAAO;AAAA,QACL,SAAS,QAAQ;AAAA,QACjB,UAAU,QAAQ;AAAA,QAClB,cAAc;AAAA,QACd,UAAU;AAAA,MACZ;AAAA,IACF;AAEA,UAAM,YAAY,aAAa,IAAI,OAAK,EAAE,QAAQ;AAClD,UAAM,SAAS,CAAC,GAAG,SAAS,EAAE,KAAK,CAAC,GAAG,MAAM,IAAI,CAAC;AAElD,WAAO;AAAA,MACL,SAAS,QAAQ;AAAA,MACjB,MAAM,QAAQ;AAAA,MACd,UAAU,QAAQ;AAAA,MAClB,cAAc,aAAa;AAAA,MAC3B,UAAU;AAAA,QACR,OAAO,UAAU,OAAO,CAAC,GAAG,MAAM,IAAI,GAAG,CAAC;AAAA,QAC1C,SAAS,UAAU,OAAO,CAAC,GAAG,MAAM,IAAI,GAAG,CAAC,IAAI,UAAU;AAAA,QAC1D,QAAQ,OAAO,KAAK,MAAM,OAAO,SAAS,CAAC,CAAC;AAAA,QAC5C,KAAK,KAAK,IAAI,GAAG,SAAS;AAAA,QAC1B,KAAK,KAAK,IAAI,GAAG,SAAS;AAAA,QAC1B,KAAK,OAAO,KAAK,MAAM,OAAO,SAAS,IAAI,CAAC;AAAA,QAC5C,KAAK,OAAO,KAAK,MAAM,OAAO,SAAS,IAAI,CAAC;AAAA,QAC5C,aAAa,aAAa,OAAO,OAAK,EAAE,IAAI,EAAE;AAAA,QAC9C,gBAAiB,aAAa,OAAO,OAAK,EAAE,IAAI,EAAE,SAAS,aAAa,SAAU;AAAA,MACpF;AAAA,MACA,aAAa,KAAK,iBAAiB,YAAY;AAAA,MAC/C,SAAS,aACN,KAAK,CAAC,GAAG,MAAM,EAAE,WAAW,EAAE,QAAQ,EACtC,MAAM,GAAG,EAAE,EACX,IAAI,QAAM;AAAA,QACT,WAAW,EAAE;AAAA,QACb,UAAU,EAAE;AAAA,QACZ,WAAW,EAAE;AAAA,MACf,EAAE;AAAA,IACN;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,iBAAiB,cAAc;AAC7B,UAAM,SAAS,CAAC;AAEhB,iBAAa,QAAQ,OAAK;AACxB,UAAI,CAAC,OAAO,EAAE,aAAa,GAAG;AAC5B,eAAO,EAAE,aAAa,IAAI;AAAA,UACxB,OAAO;AAAA,UACP,eAAe;AAAA,UACf,WAAW,CAAC;AAAA,QACd;AAAA,MACF;AAEA,aAAO,EAAE,aAAa,EAAE;AACxB,aAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE;AAC3C,aAAO,EAAE,aAAa,EAAE,UAAU,KAAK,EAAE,QAAQ;AAAA,IACnD,CAAC;AAGD,WAAO,KAAK,MAAM,EAAE,QAAQ,UAAQ;AAClC,YAAM,QAAQ,OAAO,IAAI;AACzB,YAAM,UAAU,MAAM,gBAAgB,MAAM;AAC5C,YAAM,MAAM,KAAK,IAAI,GAAG,MAAM,SAAS;AACvC,YAAM,MAAM,KAAK,IAAI,GAAG,MAAM,SAAS;AAAA,IACzC,CAAC;AAED,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,aAAa;AACX,UAAM,kBAAkB,KAAK;AAE7B,QAAI,gBAAgB,WAAW,GAAG;AAChC,aAAO;AAAA,QACL,mBAAmB;AAAA,QACnB,eAAe,KAAK,SAAS;AAAA,QAC7B,UAAU;AAAA,MACZ;AAAA,IACF;AAEA,UAAM,YAAY,gBAAgB,IAAI,OAAK,EAAE,QAAQ;AAErD,WAAO;AAAA,MACL,mBAAmB,gBAAgB;AAAA,MACnC,eAAe,KAAK,SAAS;AAAA,MAC7B,aAAa,gBAAgB,OAAO,OAAK,EAAE,IAAI,EAAE;AAAA,MACjD,UAAU;AAAA,QACR,SAAS,UAAU,OAAO,CAAC,GAAG,MAAM,IAAI,GAAG,CAAC,IAAI,UAAU;AAAA,QAC1D,KAAK,KAAK,IAAI,GAAG,SAAS;AAAA,QAC1B,KAAK,KAAK,IAAI,GAAG,SAAS;AAAA,QAC1B,gBAAiB,gBAAgB,OAAO,OAAK,EAAE,IAAI,EAAE,SAAS,gBAAgB,SAAU;AAAA,MAC1F;AAAA,MACA,aAAa,KAAK,iBAAiB,eAAe;AAAA,MAClD,YAAY,gBACT,OAAO,OAAK,EAAE,IAAI,EAClB,MAAM,GAAG,EACT,IAAI,QAAM;AAAA,QACT,WAAW,EAAE;AAAA,QACb,UAAU,EAAE;AAAA,QACZ,WAAW,EAAE;AAAA,MACf,EAAE;AAAA,IACN;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,gBAAgB;AACd,QAAI,KAAK,aAAa,WAAW,GAAG;AAClC,aAAO,EAAE,MAAM,GAAG,QAAQ,GAAG,KAAK,GAAG,KAAK,GAAG,QAAQ,EAAE;AAAA,IACzD;AAEA,UAAM,YAAY,KAAK,aAAa,IAAI,OAAK,EAAE,QAAQ;AACvD,UAAM,MAAM,UAAU,OAAO,CAAC,GAAG,MAAM,IAAI,GAAG,CAAC;AAC/C,UAAM,OAAO,MAAM,UAAU;AAE7B,UAAM,SAAS,CAAC,GAAG,SAAS,EAAE,KAAK,CAAC,GAAG,MAAM,IAAI,CAAC;AAClD,UAAM,SAAS,OAAO,KAAK,MAAM,OAAO,SAAS,CAAC,CAAC;AAEnD,UAAM,WAAW,UAAU,OAAO,CAAC,KAAK,QAAQ,MAAM,KAAK,IAAI,MAAM,MAAM,CAAC,GAAG,CAAC,IAAI,UAAU;AAC9F,UAAM,SAAS,KAAK,KAAK,QAAQ;AAEjC,WAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA,KAAK,KAAK,IAAI,GAAG,SAAS;AAAA,MAC1B,KAAK,KAAK,IAAI,GAAG,SAAS;AAAA,MAC1B;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,eAAe,YAAY,MAAM;AAC/B,UAAM,gBAAgB,aAAa,KAAK,QAAQ;AAChD,WAAO,KAAK,aACT,OAAO,OAAK,EAAE,WAAW,aAAa,EACtC,KAAK,CAAC,GAAG,MAAM,EAAE,WAAW,EAAE,QAAQ,EACtC,IAAI,QAAM;AAAA,MACT,MAAM,EAAE;AAAA,MACR,UAAU,EAAE;AAAA,MACZ,WAAW,EAAE;AAAA,IACf,EAAE;AAAA,EACN;AAAA;AAAA;AAAA;AAAA,EAKA,aAAa;AACX,UAAM,kBAAkB,CAAC;AACzB,SAAK,aAAa,QAAQ,OAAK;AAC7B,sBAAgB,EAAE,IAAI,KAAK,gBAAgB,EAAE,IAAI,KAAK,KAAK;AAAA,IAC7D,CAAC;AAED,UAAM,gBAAgB,KAAK,aAAa,OAAO,CAAC,KAAK,MAAM,MAAM,EAAE,UAAU,CAAC;AAE9E,WAAO;AAAA,MACL,iBAAiB,KAAK,aAAa;AAAA,MACnC;AAAA,MACA;AAAA,MACA,iBAAiB,KAAK,aAAa,SAAS,IAAI,gBAAgB,KAAK,aAAa,SAAS;AAAA,MAC3F,aAAa,KAAK,QAAQ,eAAe,OAAO,gBAAgB,eAAe,YAAY,SACvF,YAAY,OAAO,iBACnB;AAAA,IACN;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,iBAAiB;AACf,UAAM,QAAQ,KAAK,cAAc;AACjC,UAAM,UAAU,KAAK,WAAW;AAChC,UAAM,cAAc,KAAK,eAAe;AACxC,UAAM,kBAAkB,KAAK,mBAAmB;AAEhD,WAAO;AAAA,MACL,SAAS;AAAA,QACP,iBAAiB,QAAQ;AAAA,QACzB,iBAAiB,QAAQ;AAAA,QACzB,gBAAgB,YAAY;AAAA,MAC9B;AAAA,MACA,YAAY;AAAA,MACZ,YAAY,KAAK,aAAa,IAAI,QAAM;AAAA,QACtC,MAAM,EAAE;AAAA,QACR,UAAU,EAAE;AAAA,QACZ,WAAW,EAAE;AAAA,MACf,EAAE;AAAA,MACF,aAAa,YAAY,MAAM,GAAG,EAAE;AAAA,MACpC;AAAA,MACA,WAAW,KAAK,IAAI;AAAA,IACtB;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,SAAS;AACP,WAAO;AAAA,MACL,UAAU,MAAM,KAAK,KAAK,SAAS,OAAO,CAAC;AAAA,MAC3C,cAAc,KAAK;AAAA,MACnB,SAAS,KAAK,WAAW;AAAA,MACzB,YAAY,KAAK,cAAc;AAAA,MAC/B,YAAY,KAAK,IAAI;AAAA,IACvB;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,gBAAgB;AACd,UAAM,UAAU,KAAK,WAAW;AAChC,UAAM,QAAQ,KAAK,cAAc;AAEjC,QAAI,SAAS;AAAA;AACb,cAAU;AAAA;AACV,cAAU,qBAAqB,QAAQ,eAAe;AAAA;AACtD,cAAU,qBAAqB,QAAQ,gBAAgB,QAAQ,CAAC,CAAC;AAAA;AACjE,cAAU,SAAS,MAAM,KAAK,QAAQ,CAAC,CAAC;AAAA;AACxC,cAAU,WAAW,MAAM,OAAO,QAAQ,CAAC,CAAC;AAAA;AAC5C,cAAU,QAAQ,MAAM,IAAI,QAAQ,CAAC,CAAC;AAAA;AACtC,cAAU,QAAQ,MAAM,IAAI,QAAQ,CAAC,CAAC;AAAA;AAEtC,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,QAAQ,YAAY,YAAY;AAC9B,UAAM,WAAW,KAAK,SAAS,IAAI,UAAU;AAC7C,UAAM,WAAW,KAAK,SAAS,IAAI,UAAU;AAE7C,QAAI,CAAC,YAAY,CAAC,UAAU;AAC1B,aAAO;AAAA,IACT;AAEA,WAAO;AAAA,MACL,YAAY,SAAS,WAAW,SAAS;AAAA,MACzC,gBAAiB,SAAS,WAAW,SAAS,YAAY,SAAS,WAAY;AAAA,MAC/E,UAAU,EAAE,MAAM,SAAS,MAAM,UAAU,SAAS,SAAS;AAAA,MAC7D,UAAU,EAAE,MAAM,SAAS,MAAM,UAAU,SAAS,SAAS;AAAA,IAC/D;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,qBAAqB;AACnB,UAAM,kBAAkB,CAAC;AACzB,UAAM,cAAc,KAAK,eAAe;AACxC,UAAM,QAAQ,KAAK,cAAc;AAEjC,QAAI,YAAY,SAAS,GAAG;AAC1B,kBAAY,MAAM,GAAG,CAAC,EAAE,QAAQ,gBAAc;AAC5C,wBAAgB,KAAK;AAAA,UACnB,MAAM;AAAA,UACN,WAAW,WAAW;AAAA,UACtB,YAAY,YAAY,WAAW,IAAI,gBAAgB,WAAW,SAAS,QAAQ,CAAC,CAAC;AAAA,UACrF,UAAU;AAAA,UACV,SAAS,kCAAkC,KAAK,QAAQ,aAAa;AAAA,QACvE,CAAC;AAAA,MACH,CAAC;AAAA,IACH;AAEA,QAAI,MAAM,MAAM,KAAK,QAAQ,gBAAgB,GAAG;AAC9C,sBAAgB,KAAK;AAAA,QACnB,MAAM;AAAA,QACN,WAAW;AAAA,QACX,YAAY;AAAA,QACZ,SAAS,qBAAqB,MAAM,IAAI,QAAQ,CAAC,CAAC;AAAA,QAClD,UAAU;AAAA,MACZ,CAAC;AAAA,IACH;AAEA,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,QAAQ;AACN,SAAK,eAAe,CAAC;AACrB,SAAK,SAAS,MAAM;AACpB,SAAK,iBAAiB;AACtB,SAAK,MAAM,MAAM;AAAA,EACnB;AAAA;AAAA;AAAA;AAAA,EAKA,SAAS;AACP,SAAK,QAAQ,UAAU;AAAA,EACzB;AAAA;AAAA;AAAA;AAAA,EAKA,UAAU;AACR,SAAK,QAAQ,UAAU;AAAA,EACzB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAaA,aAAa;AACX,UAAM,QAAQ,IAAI,WAAW,CAAC;AAC9B,eAAW,OAAO,gBAAgB,KAAK;AACvC,UAAM,SAAS,MAAM,KAAK,OAAO,UAAQ,KAAK,SAAS,EAAE,EAAE,SAAS,GAAG,GAAG,CAAC,EAAE,KAAK,EAAE;AACpF,WAAO,QAAQ,KAAK,IAAI,CAAC,IAAI,MAAM;AAAA,EACrC;AACF;AAKO,SAAS,eAAe,UAAU,CAAC,GAAG;AAC3C,SAAO,IAAI,oBAAoB,OAAO;AACxC;AAKA,eAAsB,QAAQ,MAAM,IAAI,WAAW,MAAM;AACvD,QAAM,OAAO,YAAY,IAAI,oBAAoB;AACjD,QAAM,YAAY,KAAK,MAAM,IAAI;AAEjC,MAAI;AACF,UAAM,QAAQ,MAAM,GAAG;AACvB,UAAM,SAAS,KAAK,KAAK,SAAS;AAClC,WAAO,EAAE,OAAO,UAAU,QAAQ,YAAY,EAAE;AAAA,EAClD,SAAS,OAAO;AACd,UAAM,SAAS,KAAK,KAAK,SAAS;AAClC,UAAM,EAAE,OAAO,UAAU,QAAQ,YAAY,EAAE;AAAA,EACjD;AACF;AAKO,SAAS,QAAQ,IAAI;AAC1B,SAAO,YAAY,MAAM;AACvB,UAAM,SAAS,GAAG,GAAG,IAAI;AACzB,WAAO;AAAA,EACT;AACF;AAEA,IAAO,mBAAQ;AAAA,EACb;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@coherent.js/devtools",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.1.2",
|
|
4
4
|
"description": "Developer tools for Coherent.js applications - tree-shakable modular exports",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -62,7 +62,7 @@
|
|
|
62
62
|
"author": "Coherent.js Team",
|
|
63
63
|
"license": "MIT",
|
|
64
64
|
"peerDependencies": {
|
|
65
|
-
"@coherent.js/core": "1.
|
|
65
|
+
"@coherent.js/core": "^1.1.2"
|
|
66
66
|
},
|
|
67
67
|
"repository": {
|
|
68
68
|
"type": "git",
|