wu-framework 1.1.5 → 1.1.7

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 @@
1
+ {"version":3,"file":"wu-framework.dev.js","sources":["../src/core/wu-loader.js","../src/core/wu-style-bridge.js","../src/core/wu-proxy-sandbox.js","../src/core/wu-snapshot-sandbox.js","../src/core/wu-script-executor.js","../src/core/wu-html-parser.js","../src/core/wu-sandbox.js","../src/core/wu-manifest.js","../src/core/wu-logger.js","../src/core/wu-store.js","../src/core/wu-app.js","../src/core/wu-cache.js","../src/core/wu-event-bus.js","../src/core/wu-performance.js","../src/core/wu-plugin.js","../src/core/wu-strategies.js","../src/core/wu-error-boundary.js","../src/core/wu-hooks.js","../src/core/wu-sandbox-pool.js","../src/core/wu-registry.js","../src/core/wu-core.js","../src/index.js"],"sourcesContent":["/**\n * 🚀 WU-LOADER: SISTEMA DE CARGA DINÁMICA UNIVERSAL\n * Carga aplicaciones y componentes sin depender del framework\n */\n\nexport class WuLoader {\n constructor() {\n this.cache = new Map();\n this.loadingPromises = new Map();\n\n console.log('[WuLoader] 📦 Dynamic loader initialized');\n }\n\n /**\n * Cargar aplicación completa\n * @param {string} appUrl - URL base de la aplicación\n * @param {Object} manifest - Manifest de la aplicación\n * @returns {string} Código JavaScript de la aplicación\n */\n async loadApp(appUrl, manifest) {\n const entryFile = manifest?.entry || 'index.js';\n const fullUrl = `${appUrl}/${entryFile}`;\n\n console.log(`[WuLoader] 📥 Loading app from: ${fullUrl}`);\n\n try {\n // Verificar cache\n if (this.cache.has(fullUrl)) {\n console.log(`[WuLoader] ⚡ Cache hit for: ${fullUrl}`);\n return this.cache.get(fullUrl);\n }\n\n // Verificar si ya está cargando\n if (this.loadingPromises.has(fullUrl)) {\n console.log(`[WuLoader] ⏳ Loading in progress for: ${fullUrl}`);\n return await this.loadingPromises.get(fullUrl);\n }\n\n // Crear promesa de carga\n const loadingPromise = this.fetchCode(fullUrl);\n this.loadingPromises.set(fullUrl, loadingPromise);\n\n const code = await loadingPromise;\n\n // Limpiar promesa de carga y cachear resultado\n this.loadingPromises.delete(fullUrl);\n this.cache.set(fullUrl, code);\n\n console.log(`[WuLoader] ✅ App loaded successfully: ${fullUrl}`);\n return code;\n\n } catch (error) {\n this.loadingPromises.delete(fullUrl);\n console.error(`[WuLoader] ❌ Failed to load app: ${fullUrl}`, error);\n throw new Error(`Failed to load app from ${fullUrl}: ${error.message}`);\n }\n }\n\n /**\n * Cargar componente específico\n * @param {string} appUrl - URL base de la aplicación\n * @param {string} componentPath - Ruta del componente\n * @returns {Function} Función del componente\n */\n async loadComponent(appUrl, componentPath) {\n // Normalizar ruta del componente\n let normalizedPath = componentPath;\n if (normalizedPath.startsWith('./')) {\n normalizedPath = normalizedPath.substring(2);\n }\n if (!normalizedPath.endsWith('.js') && !normalizedPath.endsWith('.jsx')) {\n normalizedPath += '.js';\n }\n\n const fullUrl = `${appUrl}/${normalizedPath}`;\n\n console.log(`[WuLoader] 🧩 Loading component from: ${fullUrl}`);\n\n try {\n // Cargar código del componente\n const code = await this.loadCode(fullUrl);\n\n // Crear función que retorna el componente\n const componentFunction = new Function('require', 'module', 'exports', `\n ${code}\n return typeof module.exports === 'function' ? module.exports :\n typeof module.exports === 'object' && module.exports.default ? module.exports.default :\n exports.default || exports;\n `);\n\n // Ejecutar y obtener el componente\n const fakeModule = { exports: {} };\n const fakeRequire = (name) => {\n console.warn(`[WuLoader] Component ${componentPath} requires ${name} - not supported yet`);\n return {};\n };\n\n const component = componentFunction(fakeRequire, fakeModule, fakeModule.exports);\n\n console.log(`[WuLoader] ✅ Component loaded: ${componentPath}`);\n return component;\n\n } catch (error) {\n console.error(`[WuLoader] ❌ Failed to load component: ${componentPath}`, error);\n throw new Error(`Failed to load component ${componentPath}: ${error.message}`);\n }\n }\n\n /**\n * Cargar código con cache\n * @param {string} url - URL del archivo\n * @returns {string} Código JavaScript\n */\n async loadCode(url) {\n // Verificar cache\n if (this.cache.has(url)) {\n return this.cache.get(url);\n }\n\n // Verificar si ya está cargando\n if (this.loadingPromises.has(url)) {\n return await this.loadingPromises.get(url);\n }\n\n // Crear promesa de carga\n const loadingPromise = this.fetchCode(url);\n this.loadingPromises.set(url, loadingPromise);\n\n try {\n const code = await loadingPromise;\n this.loadingPromises.delete(url);\n this.cache.set(url, code);\n return code;\n } catch (error) {\n this.loadingPromises.delete(url);\n throw error;\n }\n }\n\n /**\n * Realizar fetch del código\n * @param {string} url - URL del archivo\n * @returns {string} Código JavaScript\n */\n async fetchCode(url) {\n const response = await fetch(url, {\n cache: 'no-cache',\n headers: {\n 'Accept': 'application/javascript, text/javascript, */*'\n }\n });\n\n if (!response.ok) {\n throw new Error(`HTTP ${response.status}: ${response.statusText}`);\n }\n\n const code = await response.text();\n\n if (!code.trim()) {\n throw new Error('Empty response');\n }\n\n return code;\n }\n\n /**\n * Precargar aplicaciones\n * @param {Array} appConfigs - Configuraciones de aplicaciones\n */\n async preload(appConfigs) {\n console.log(`[WuLoader] 🚀 Preloading ${appConfigs.length} apps...`);\n\n const preloadPromises = appConfigs.map(async (config) => {\n try {\n await this.loadApp(config.url, config.manifest);\n console.log(`[WuLoader] ✅ Preloaded: ${config.name}`);\n } catch (error) {\n console.warn(`[WuLoader] ⚠️ Failed to preload ${config.name}:`, error.message);\n }\n });\n\n await Promise.allSettled(preloadPromises);\n console.log(`[WuLoader] 🎉 Preload completed`);\n }\n\n /**\n * Verificar si una URL está disponible\n * @param {string} url - URL a verificar\n * @returns {boolean} True si está disponible\n */\n async isAvailable(url) {\n try {\n const response = await fetch(url, { method: 'HEAD' });\n return response.ok;\n } catch {\n return false;\n }\n }\n\n /**\n * Resolver dependencias de imports\n * @param {Array} imports - Lista de imports del manifest\n * @param {Map} availableApps - Apps disponibles\n */\n async resolveDependencies(imports, availableApps) {\n const resolved = new Map();\n\n for (const importPath of imports || []) {\n const [appName, componentName] = importPath.split('.');\n\n if (!appName || !componentName) {\n console.warn(`[WuLoader] Invalid import format: ${importPath}`);\n continue;\n }\n\n const app = availableApps.get(appName);\n if (!app) {\n console.warn(`[WuLoader] Import app not found: ${appName}`);\n continue;\n }\n\n const manifest = app.manifest;\n const exportPath = manifest?.wu?.exports?.[componentName];\n\n if (!exportPath) {\n console.warn(`[WuLoader] Export not found: ${importPath}`);\n continue;\n }\n\n try {\n const component = await this.loadComponent(app.url, exportPath);\n resolved.set(importPath, component);\n console.log(`[WuLoader] ✅ Resolved dependency: ${importPath}`);\n } catch (error) {\n console.error(`[WuLoader] ❌ Failed to resolve: ${importPath}`, error);\n }\n }\n\n return resolved;\n }\n\n /**\n * Limpiar cache\n * @param {string} pattern - Patrón opcional para limpiar URLs específicas\n */\n clearCache(pattern) {\n if (pattern) {\n const regex = new RegExp(pattern);\n for (const [url] of this.cache) {\n if (regex.test(url)) {\n this.cache.delete(url);\n console.log(`[WuLoader] 🗑️ Cleared cache for: ${url}`);\n }\n }\n } else {\n this.cache.clear();\n console.log(`[WuLoader] 🗑️ Cache cleared completely`);\n }\n }\n\n /**\n * Obtener estadísticas del loader\n */\n getStats() {\n return {\n cached: this.cache.size,\n loading: this.loadingPromises.size,\n cacheKeys: Array.from(this.cache.keys())\n };\n }\n}","/**\n * 🎨 WU-STYLE-BRIDGE: SHADOW DOM STYLE SHARING SYSTEM\n *\n * Comparte automáticamente estilos de node_modules entre padre e hijos Shadow DOM\n * Soluciona el problema de aislamiento CSS en microfrontends\n *\n * MODOS DE INYECCIÓN DE ESTILOS:\n * ================================\n *\n * 1. \"shared\" (default):\n * - Inyecta TODOS los estilos del documento padre en el Shadow DOM\n * - Incluye: librerías (Element Plus, Vue Flow), estilos globales, etc.\n * - Ideal para: Apps que necesitan compartir un design system común\n * - Riesgo de colisiones: ALTO\n *\n * 2. \"isolated\":\n * - NO inyecta estilos externos\n * - Usa el encapsulamiento NATIVO del Shadow DOM\n * - La app debe incluir sus propios estilos (CSS-in-JS, scoped styles, etc.)\n * - Ideal para: Apps con estilos completamente independientes\n * - Riesgo de colisiones: NINGUNO\n *\n * 3. \"fully-isolated\":\n * - Inyecta SOLO los estilos propios de la micro-app específica\n * - Detecta estilos por patrón: packages/appName/src/\n * - Usa MutationObserver para HMR de Vite\n * - Ideal para: Apps que necesitan sus estilos pero no los globales\n * - Riesgo de colisiones: NINGUNO\n */\n\nexport class WuStyleBridge {\n constructor() {\n this.sharedStyles = new Map();\n this.styleObserver = null;\n this.fullyIsolatedApps = new Map(); // Mapa de appName -> appUrl para apps con fully-isolated\n this.config = {\n // Librerías que se deben compartir automáticamente\n autoShareLibraries: [\n 'element-plus',\n 'vue-flow',\n '@vue-flow',\n 'vueuse',\n '@vueuse',\n 'normalize.css',\n 'reset.css'\n ],\n // Patrones de URLs a compartir\n sharePatterns: [\n /\\/node_modules\\//,\n /\\/@vite\\/client/,\n /\\/dist\\/index\\.css$/,\n /\\/dist\\/style\\.css$/\n ],\n // Modo de compartición\n mode: 'auto', // 'auto' | 'manual' | 'all'\n // Caché de estilos\n cacheEnabled: true\n };\n\n console.log('[WuStyleBridge] 🎨 Style sharing system initialized');\n }\n\n /**\n * 🛡️ REGISTRAR APP FULLY-ISOLATED: Registra una app con fully-isolated para filtrar sus estilos\n * @param {string} appName - Nombre de la app\n * @param {string} appUrl - URL base de la app\n */\n registerFullyIsolatedApp(appName, appUrl) {\n this.fullyIsolatedApps.set(appName, appUrl);\n console.log(`[WuStyleBridge] 🛡️ Registered fully-isolated app: ${appName} (${appUrl})`);\n }\n\n /**\n * 🔍 VERIFICAR SI ESTILO ES DE APP FULLY-ISOLATED: Verifica si un estilo proviene de una app con fully-isolated\n * @param {string|Object|HTMLElement} styleUrlOrElement - URL del estilo, objeto de estilo, o elemento DOM\n * @returns {boolean}\n */\n isStyleFromFullyIsolatedApp(styleUrlOrElement) {\n let url = '';\n \n // Si es un string, usar directamente\n if (typeof styleUrlOrElement === 'string') {\n url = styleUrlOrElement;\n }\n // Si es un elemento DOM (HTMLElement) - verificar si tiene getAttribute (método común de elementos DOM)\n else if (styleUrlOrElement && typeof styleUrlOrElement.getAttribute === 'function') {\n // Obtener data-vite-dev-id o href del elemento\n url = styleUrlOrElement.getAttribute('data-vite-dev-id') || styleUrlOrElement.href || '';\n }\n // Si es un objeto con propiedades\n else if (styleUrlOrElement) {\n if (styleUrlOrElement.href) {\n url = styleUrlOrElement.href;\n } else if (styleUrlOrElement.viteId) {\n url = styleUrlOrElement.viteId;\n } else if (styleUrlOrElement.element) {\n if (typeof styleUrlOrElement.element.getAttribute === 'function') {\n url = styleUrlOrElement.element.getAttribute('data-vite-dev-id') || styleUrlOrElement.element.href || '';\n } else if (styleUrlOrElement.element.href) {\n url = styleUrlOrElement.element.href;\n }\n }\n }\n\n if (!url || url.trim() === '') return false;\n\n // Normalizar la URL para comparación (convertir backslashes a forward slashes)\n const normalizedUrl = url.replace(/\\\\/g, '/').toLowerCase();\n\n // Verificar si la URL pertenece a alguna app con fully-isolated\n for (const [appName, appUrl] of this.fullyIsolatedApps.entries()) {\n const normalizedAppUrl = appUrl.replace(/\\\\/g, '/').toLowerCase();\n const normalizedAppName = appName.toLowerCase();\n \n // Verificar si la URL contiene la URL base de la app (ej: http://localhost:4001)\n if (normalizedAppUrl && normalizedUrl.includes(normalizedAppUrl)) {\n return true;\n }\n \n // Verificar si la URL contiene rutas del app en el sistema de archivos\n // Ej: C:/Users/.../header/src/... o /header/src/...\n // Patrón: cualquier ruta que contenga /header/ o \\header\\\n const appPathPattern = new RegExp(`[/\\\\\\\\]${normalizedAppName}[/\\\\\\\\]`, 'i');\n if (appPathPattern.test(normalizedUrl)) {\n return true;\n }\n }\n\n return false;\n }\n\n /**\n * 🔍 DETECTAR ESTILOS: Escanea todos los estilos del documento\n * @returns {Array} Lista de estilos detectados (filtrados para excluir apps con fully-isolated)\n */\n detectDocumentStyles() {\n const styles = [];\n\n // 1. Detectar TODOS los <link> tags de CSS\n const linkTags = document.querySelectorAll('link[rel=\"stylesheet\"]');\n linkTags.forEach((link) => {\n // Filtrar estilos de apps con fully-isolated\n if (this.isStyleFromFullyIsolatedApp(link)) {\n return;\n }\n\n styles.push({\n type: 'link',\n href: link.href,\n element: link,\n library: this.extractLibraryName(link.href)\n });\n });\n\n // 2. Detectar TODOS los <style> tags (incluyendo Vue scoped styles)\n const styleTags = document.querySelectorAll('style');\n styleTags.forEach((style, index) => {\n // Excluir solo estilos ya compartidos por wu-framework\n if (style.getAttribute('data-wu-shared') === 'true') {\n return;\n }\n\n const viteId = style.getAttribute('data-vite-dev-id');\n const content = style.textContent;\n\n // Filtrar estilos de apps con fully-isolated (después de obtener viteId para mejor detección)\n if (this.isStyleFromFullyIsolatedApp(style) || (viteId && this.isStyleFromFullyIsolatedApp(viteId))) {\n console.log(`[WuStyleBridge] 🛡️ Filtered out style from fully-isolated app: ${viteId || 'unknown'}`);\n return;\n }\n\n // Incluir todos los estilos con contenido\n if (content && content.trim().length > 0) {\n styles.push({\n type: 'inline',\n content,\n element: style,\n viteId,\n library: this.extractLibraryName(viteId || ''),\n index\n });\n }\n });\n\n // 3. Detectar Constructable Stylesheets (si están disponibles)\n if (document.adoptedStyleSheets && document.adoptedStyleSheets.length > 0) {\n document.adoptedStyleSheets.forEach((sheet, index) => {\n styles.push({\n type: 'adoptedStyleSheet',\n sheet,\n index\n });\n });\n }\n\n console.log(`[WuStyleBridge] 🔍 Detected ${styles.length} shareable styles`);\n return styles;\n }\n\n /**\n * 🎯 VERIFICAR SI SE DEBE COMPARTIR: Filtra estilos según configuración\n * @param {string} urlOrId - URL o ID del estilo\n * @returns {boolean}\n */\n shouldShareStyle(urlOrId) {\n if (!urlOrId) return false;\n\n // Modo 'all' - compartir todo\n if (this.config.mode === 'all') return true;\n\n // Verificar patrones configurados\n for (const pattern of this.config.sharePatterns) {\n if (pattern.test(urlOrId)) return true;\n }\n\n // Verificar librerías específicas\n for (const lib of this.config.autoShareLibraries) {\n if (urlOrId.includes(lib)) return true;\n }\n\n return false;\n }\n\n /**\n * 📦 EXTRAER NOMBRE DE LIBRERÍA: Obtiene el nombre de la librería desde la URL\n * @param {string} url - URL del estilo\n * @returns {string|null}\n */\n extractLibraryName(url) {\n if (!url) return null;\n\n // Extraer de node_modules\n const nodeModulesMatch = url.match(/\\/node_modules\\/(@?[^/]+\\/[^/]+|@?[^/]+)/);\n if (nodeModulesMatch) return nodeModulesMatch[1];\n\n // Extraer de vite dev id\n const viteMatch = url.match(/\\/node_modules\\/(.+?)\\/.*?\\.css/);\n if (viteMatch) return viteMatch[1];\n\n return null;\n }\n\n /**\n * 🌉 INYECTAR ESTILOS EN SHADOW DOM: Clona estilos al Shadow DOM\n * @param {ShadowRoot} shadowRoot - Shadow DOM donde inyectar\n * @param {string} appName - Nombre de la app\n * @param {string} styleMode - Modo de estilos: 'shared', 'isolated', 'fully-isolated'\n * @returns {Promise<number>}\n */\n async injectStylesIntoShadow(shadowRoot, appName, styleMode) {\n if (!shadowRoot) {\n console.warn('[WuStyleBridge] ⚠️ No shadow root provided');\n return 0;\n }\n\n // 🛡️ MODO FULLY-ISOLATED: No inyectar ningún estilo compartido\n // Los estilos propios se manejan en wu-sandbox.js con injectOwnStylesToShadow\n if (styleMode === 'fully-isolated') {\n console.log(`[WuStyleBridge] 🛡️ Style mode \"fully-isolated\" for ${appName}, skipping shared style injection`);\n return 0;\n }\n\n // 🔒 MODO ISOLATED: No inyectar estilos externos - usar encapsulamiento nativo de Shadow DOM\n // La app debe manejar sus propios estilos (CSS-in-JS, scoped styles, imports directos)\n if (styleMode === 'isolated') {\n console.log(`[WuStyleBridge] 🔒 Style mode \"isolated\" for ${appName}, using native Shadow DOM encapsulation (no external styles)`);\n return 0;\n }\n\n // 🌐 MODO SHARED (default): Inyectar todos los estilos compartidos del documento\n console.log(`[WuStyleBridge] 🌐 Style mode \"shared\" for ${appName}, injecting all shared styles...`);\n\n // Detectar estilos del documento\n const styles = this.detectDocumentStyles();\n let injectedCount = 0;\n\n // Inyectar cada estilo\n for (const style of styles) {\n try {\n switch (style.type) {\n case 'link':\n await this.injectLinkStyle(shadowRoot, style);\n injectedCount++;\n break;\n\n case 'inline':\n this.injectInlineStyle(shadowRoot, style);\n injectedCount++;\n break;\n\n case 'adoptedStyleSheet':\n this.injectAdoptedStyleSheet(shadowRoot, style);\n injectedCount++;\n break;\n }\n } catch (error) {\n console.warn(`[WuStyleBridge] ⚠️ Failed to inject style:`, error);\n }\n }\n\n console.log(`[WuStyleBridge] ✅ Injected ${injectedCount} shared styles into ${appName}`);\n return injectedCount;\n }\n\n /**\n * 🔗 INYECTAR LINK STYLE: Clona <link> tag al Shadow DOM\n * @param {ShadowRoot} shadowRoot\n * @param {Object} style\n */\n async injectLinkStyle(shadowRoot, style) {\n // Verificar si ya existe\n const existing = shadowRoot.querySelector(`link[href=\"${style.href}\"]`);\n if (existing) {\n console.log(`[WuStyleBridge] ⏭️ Style already exists: ${style.library || style.href}`);\n return;\n }\n\n // Clonar link tag\n const link = document.createElement('link');\n link.rel = 'stylesheet';\n link.href = style.href;\n link.setAttribute('data-wu-shared', 'true');\n link.setAttribute('data-wu-library', style.library || 'unknown');\n\n // Insertar al principio del shadow root (antes de otros estilos)\n shadowRoot.insertBefore(link, shadowRoot.firstChild);\n\n console.log(`[WuStyleBridge] 🔗 Injected link: ${style.library || style.href}`);\n }\n\n /**\n * 📝 INYECTAR INLINE STYLE: Clona <style> tag al Shadow DOM\n * @param {ShadowRoot} shadowRoot\n * @param {Object} style\n */\n injectInlineStyle(shadowRoot, style) {\n // Verificar si ya existe\n const viteId = style.viteId;\n if (viteId) {\n const existing = shadowRoot.querySelector(`style[data-wu-vite-id=\"${viteId}\"]`);\n if (existing) {\n console.log(`[WuStyleBridge] ⏭️ Inline style already exists: ${viteId}`);\n return;\n }\n }\n\n // Crear nuevo style tag\n const styleTag = document.createElement('style');\n styleTag.textContent = style.content;\n styleTag.setAttribute('data-wu-shared', 'true');\n styleTag.setAttribute('data-wu-library', style.library || 'unknown');\n if (viteId) {\n styleTag.setAttribute('data-wu-vite-id', viteId);\n }\n\n // Insertar al principio del shadow root\n shadowRoot.insertBefore(styleTag, shadowRoot.firstChild);\n\n console.log(`[WuStyleBridge] 📝 Injected inline style: ${style.library || viteId}`);\n }\n\n /**\n * 📋 INYECTAR ADOPTED STYLESHEET: Comparte stylesheet constructable\n * @param {ShadowRoot} shadowRoot\n * @param {Object} style\n */\n injectAdoptedStyleSheet(shadowRoot, style) {\n try {\n // Agregar stylesheet al array de adopted stylesheets\n if (!shadowRoot.adoptedStyleSheets) {\n shadowRoot.adoptedStyleSheets = [];\n }\n\n // Verificar si ya existe\n if (shadowRoot.adoptedStyleSheets.includes(style.sheet)) {\n console.log(`[WuStyleBridge] ⏭️ Adopted stylesheet already exists`);\n return;\n }\n\n shadowRoot.adoptedStyleSheets = [\n ...shadowRoot.adoptedStyleSheets,\n style.sheet\n ];\n\n console.log(`[WuStyleBridge] 📋 Injected adopted stylesheet`);\n } catch (error) {\n console.warn(`[WuStyleBridge] ⚠️ Failed to inject adopted stylesheet:`, error);\n }\n }\n\n /**\n * 🔄 OBSERVAR CAMBIOS: Monitorea nuevos estilos en el documento\n * @param {Function} callback - Callback cuando se detectan cambios\n */\n observeStyleChanges(callback) {\n // Limpiar observer anterior si existe\n if (this.styleObserver) {\n this.styleObserver.disconnect();\n }\n\n // Crear MutationObserver para detectar nuevos estilos\n this.styleObserver = new MutationObserver((mutations) => {\n let hasStyleChanges = false;\n\n for (const mutation of mutations) {\n if (mutation.type === 'childList') {\n // Verificar si se agregaron <link> o <style> tags\n const addedNodes = Array.from(mutation.addedNodes);\n const hasNewStyles = addedNodes.some(node =>\n node.tagName === 'LINK' || node.tagName === 'STYLE'\n );\n\n if (hasNewStyles) {\n hasStyleChanges = true;\n break;\n }\n }\n }\n\n if (hasStyleChanges && callback) {\n console.log('[WuStyleBridge] 🔄 Style changes detected');\n callback();\n }\n });\n\n // Observar <head> para cambios en estilos\n this.styleObserver.observe(document.head, {\n childList: true,\n subtree: true\n });\n\n console.log('[WuStyleBridge] 👀 Observing style changes');\n }\n\n /**\n * ⚙️ CONFIGURAR: Actualiza la configuración\n * @param {Object} config - Nueva configuración\n */\n configure(config) {\n this.config = {\n ...this.config,\n ...config\n };\n\n console.log('[WuStyleBridge] ⚙️ Configuration updated:', this.config);\n }\n\n /**\n * 🧹 LIMPIAR: Detiene la observación\n */\n cleanup() {\n if (this.styleObserver) {\n this.styleObserver.disconnect();\n this.styleObserver = null;\n }\n\n this.sharedStyles.clear();\n console.log('[WuStyleBridge] 🧹 StyleBridge cleaned up');\n }\n\n /**\n * 📊 OBTENER ESTADÍSTICAS: Información sobre estilos compartidos\n * @returns {Object}\n */\n getStats() {\n const styles = this.detectDocumentStyles();\n\n return {\n totalStyles: styles.length,\n linkStyles: styles.filter(s => s.type === 'link').length,\n inlineStyles: styles.filter(s => s.type === 'inline').length,\n adoptedStyleSheets: styles.filter(s => s.type === 'adoptedStyleSheet').length,\n libraries: [...new Set(styles.map(s => s.library).filter(Boolean))],\n config: this.config\n };\n }\n}\n","/**\n * 🛡️ WU-PROXY-SANDBOX: JavaScript Isolation con Proxy\n * Basado en video-code - Aislamiento real de variables globales\n *\n * Este sandbox usa ES6 Proxy para interceptar accesos a window\n * y aislar completamente el JavaScript entre micro-apps\n */\n\nexport class WuProxySandbox {\n constructor(appName) {\n this.appName = appName;\n this.proxy = null;\n this.fakeWindow = Object.create(null); // Namespace aislado\n this.active = false;\n this.modifiedKeys = new Set(); // Track de propiedades modificadas\n\n console.log(`[WuProxySandbox] 🛡️ Creating proxy sandbox for: ${appName}`);\n }\n\n /**\n * Activar sandbox - Crea el Proxy que aísla window\n */\n activate() {\n if (this.active) {\n console.warn(`[WuProxySandbox] Sandbox already active for ${this.appName}`);\n return this.proxy;\n }\n\n this.proxy = new Proxy(window, {\n get: (target, prop) => {\n // 🔍 Primero buscar en el namespace aislado\n if (prop in this.fakeWindow) {\n return this.fakeWindow[prop];\n }\n\n // 🎯 Propiedades del window real\n const value = target[prop];\n\n // ⚠️ CRÍTICO: Bind de funciones para mantener contexto\n if (typeof value === 'function' && !this.isConstructor(value)) {\n return value.bind(target);\n }\n\n return value;\n },\n\n set: (target, prop, value) => {\n // 🛡️ AISLAMIENTO: Todo set va al namespace aislado\n this.fakeWindow[prop] = value;\n this.modifiedKeys.add(prop);\n\n console.log(`[WuProxySandbox] 📝 ${this.appName} set: ${String(prop)}`);\n return true;\n },\n\n has: (target, prop) => {\n // Verificar tanto en fakeWindow como en window real\n return prop in this.fakeWindow || prop in target;\n },\n\n deleteProperty: (target, prop) => {\n // Solo permitir delete en el namespace aislado\n if (prop in this.fakeWindow) {\n delete this.fakeWindow[prop];\n this.modifiedKeys.delete(prop);\n return true;\n }\n return false;\n }\n });\n\n this.active = true;\n console.log(`[WuProxySandbox] ✅ Proxy sandbox activated for ${this.appName}`);\n\n return this.proxy;\n }\n\n /**\n * Desactivar sandbox - Limpia el namespace aislado\n */\n deactivate() {\n if (!this.active) {\n console.warn(`[WuProxySandbox] Sandbox not active for ${this.appName}`);\n return;\n }\n\n console.log(`[WuProxySandbox] 🧹 Deactivating sandbox for ${this.appName}`);\n\n // 🧹 Limpiar todas las propiedades modificadas\n this.fakeWindow = Object.create(null);\n this.modifiedKeys.clear();\n this.proxy = null;\n this.active = false;\n\n console.log(`[WuProxySandbox] ✅ Sandbox deactivated for ${this.appName}`);\n }\n\n /**\n * Verificar si un valor es un constructor (class)\n */\n isConstructor(fn) {\n try {\n // Detectar constructores/classes por su prototipo\n return fn.prototype && fn.prototype.constructor === fn;\n } catch {\n return false;\n }\n }\n\n /**\n * Obtener el proxy activo (o null si no está activo)\n */\n getProxy() {\n return this.active ? this.proxy : null;\n }\n\n /**\n * Verificar si el sandbox está activo\n */\n isActive() {\n return this.active;\n }\n\n /**\n * Obtener estadísticas del sandbox\n */\n getStats() {\n return {\n appName: this.appName,\n active: this.active,\n modifiedKeys: Array.from(this.modifiedKeys),\n isolatedPropsCount: Object.keys(this.fakeWindow).length\n };\n }\n\n /**\n * Limpiar propiedades específicas del namespace\n */\n clearProperty(prop) {\n if (prop in this.fakeWindow) {\n delete this.fakeWindow[prop];\n this.modifiedKeys.delete(prop);\n console.log(`[WuProxySandbox] 🗑️ Cleared property: ${String(prop)}`);\n }\n }\n\n /**\n * Obtener todas las propiedades aisladas\n */\n getIsolatedProperties() {\n return { ...this.fakeWindow };\n }\n}\n","/**\n * 🛡️ WU-SNAPSHOT-SANDBOX: JavaScript Isolation con Snapshots\n * Basado en video-code - Fallback para navegadores sin Proxy\n *\n * Este sandbox toma \"fotos\" del estado de window antes de montar\n * y restaura el estado original al desmontar\n */\n\nexport class WuSnapshotSandbox {\n constructor(appName) {\n this.appName = appName;\n this.proxy = window; // En snapshot mode, proxy es window directamente\n this.snapshot = new Map();\n this.modifiedKeys = new Set();\n this.active = false;\n\n console.log(`[WuSnapshotSandbox] 📸 Creating snapshot sandbox for: ${appName}`);\n }\n\n /**\n * Activar sandbox - Captura snapshot del window\n */\n activate() {\n if (this.active) {\n console.warn(`[WuSnapshotSandbox] Sandbox already active for ${this.appName}`);\n return this.proxy;\n }\n\n console.log(`[WuSnapshotSandbox] 📸 Taking window snapshot for ${this.appName}...`);\n\n // 📸 Capturar estado actual de window\n this.snapshot.clear();\n this.modifiedKeys.clear();\n\n // Iterar sobre todas las propiedades de window\n for (const key in window) {\n try {\n // Guardar el valor actual\n this.snapshot.set(key, window[key]);\n } catch (error) {\n // Algunas propiedades pueden ser inaccesibles\n console.warn(`[WuSnapshotSandbox] ⚠️ Could not snapshot property: ${key}`);\n }\n }\n\n this.active = true;\n console.log(`[WuSnapshotSandbox] ✅ Snapshot captured with ${this.snapshot.size} properties`);\n\n return this.proxy;\n }\n\n /**\n * Desactivar sandbox - Restaura el snapshot original\n */\n deactivate() {\n if (!this.active) {\n console.warn(`[WuSnapshotSandbox] Sandbox not active for ${this.appName}`);\n return;\n }\n\n console.log(`[WuSnapshotSandbox] 🔄 Restoring window snapshot for ${this.appName}...`);\n\n let restoredCount = 0;\n let deletedCount = 0;\n\n // 🔄 Detectar y restaurar cambios\n for (const key in window) {\n try {\n const currentValue = window[key];\n const originalValue = this.snapshot.get(key);\n\n // Si la propiedad cambió, restaurarla\n if (currentValue !== originalValue) {\n if (this.snapshot.has(key)) {\n window[key] = originalValue;\n restoredCount++;\n } else {\n // Nueva propiedad agregada por la app, eliminarla\n try {\n delete window[key];\n deletedCount++;\n } catch (error) {\n // Algunas propiedades no se pueden eliminar\n console.warn(`[WuSnapshotSandbox] ⚠️ Could not delete: ${key}`);\n }\n }\n }\n } catch (error) {\n console.warn(`[WuSnapshotSandbox] ⚠️ Could not restore property: ${key}`);\n }\n }\n\n // 🧹 Limpiar estado\n this.snapshot.clear();\n this.modifiedKeys.clear();\n this.active = false;\n\n console.log(`[WuSnapshotSandbox] ✅ Snapshot restored - ${restoredCount} restored, ${deletedCount} deleted`);\n }\n\n /**\n * Obtener el proxy (en este caso, window)\n */\n getProxy() {\n return this.active ? this.proxy : null;\n }\n\n /**\n * Verificar si el sandbox está activo\n */\n isActive() {\n return this.active;\n }\n\n /**\n * Obtener estadísticas del sandbox\n */\n getStats() {\n const modifiedProps = [];\n\n if (this.active) {\n // Detectar qué propiedades han cambiado\n for (const key in window) {\n try {\n const currentValue = window[key];\n const originalValue = this.snapshot.get(key);\n\n if (currentValue !== originalValue) {\n modifiedProps.push(key);\n }\n } catch (error) {\n // Ignorar errores de acceso\n }\n }\n }\n\n return {\n appName: this.appName,\n active: this.active,\n snapshotSize: this.snapshot.size,\n modifiedProperties: modifiedProps,\n modifiedCount: modifiedProps.length\n };\n }\n\n /**\n * Verificar si una propiedad fue modificada\n */\n isPropertyModified(prop) {\n if (!this.active) return false;\n\n try {\n const currentValue = window[prop];\n const originalValue = this.snapshot.get(prop);\n return currentValue !== originalValue;\n } catch {\n return false;\n }\n }\n\n /**\n * Obtener todas las propiedades modificadas\n */\n getModifiedProperties() {\n const modified = {};\n\n if (this.active) {\n for (const key in window) {\n try {\n if (this.isPropertyModified(key)) {\n modified[key] = {\n original: this.snapshot.get(key),\n current: window[key]\n };\n }\n } catch (error) {\n // Ignorar errores de acceso\n }\n }\n }\n\n return modified;\n }\n}\n","/**\n * 📜 WU-SCRIPT-EXECUTOR: Sistema de ejecución segura de scripts\n * Basado en video-code - Ejecuta scripts en contexto sandbox aislado\n */\n\nexport class WuScriptExecutor {\n constructor() {\n console.log('[WuScriptExecutor] 📜 Script execution system initialized');\n }\n\n /**\n * Ejecutar script usando Function constructor (más seguro que eval)\n * @param {string} script - Código JavaScript a ejecutar\n * @param {string} appName - Nombre de la app\n * @param {Proxy} globalProxy - Proxy sandbox como window\n * @returns {*} Resultado de la ejecución\n */\n executeWithFunction(script, appName, globalProxy) {\n console.log(`[WuScriptExecutor] 🚀 Executing script for ${appName} using Function`);\n\n try {\n // 🌟 Almacenar proxy globalmente de forma temporal\n window.__WU_PROXY_TEMP__ = globalProxy;\n\n // 🎯 Crear función que recibe window como parámetro\n const scriptText = `\n return ((window) => {\n ${script}\n return window['${appName}'];\n })(window.__WU_PROXY_TEMP__);\n `;\n\n // 🚀 Ejecutar con Function (más seguro que eval)\n const fn = new Function(scriptText);\n const result = fn();\n\n // 🧹 Limpiar proxy temporal\n delete window.__WU_PROXY_TEMP__;\n\n console.log(`[WuScriptExecutor] ✅ Script executed successfully for ${appName}`);\n return result;\n\n } catch (error) {\n // 🧹 Limpiar en caso de error\n delete window.__WU_PROXY_TEMP__;\n\n console.error(`[WuScriptExecutor] ❌ Script execution failed for ${appName}:`, error);\n throw error;\n }\n }\n\n /**\n * Ejecutar script usando eval (fallback)\n * @param {string} script - Código JavaScript a ejecutar\n * @param {string} appName - Nombre de la app\n * @param {Proxy} globalProxy - Proxy sandbox como window\n * @returns {*} Resultado de la ejecución\n */\n executeWithEval(script, appName, globalProxy) {\n console.log(`[WuScriptExecutor] 🚀 Executing script for ${appName} using eval`);\n\n try {\n // 🌟 Almacenar proxy globalmente de forma temporal\n window.__WU_PROXY_TEMP__ = globalProxy;\n\n // 🎯 IIFE que recibe window como parámetro\n const scriptText = `\n ((window) => {\n ${script}\n return window['${appName}'];\n })(window.__WU_PROXY_TEMP__);\n `;\n\n // ⚠️ Usar eval (menos seguro pero compatible)\n const result = eval(scriptText);\n\n // 🧹 Limpiar proxy temporal\n delete window.__WU_PROXY_TEMP__;\n\n console.log(`[WuScriptExecutor] ✅ Script executed successfully for ${appName}`);\n return result;\n\n } catch (error) {\n // 🧹 Limpiar en caso de error\n delete window.__WU_PROXY_TEMP__;\n\n console.error(`[WuScriptExecutor] ❌ Script execution failed for ${appName}:`, error);\n throw error;\n }\n }\n\n /**\n * Ejecutar script con estrategia automática (intenta Function primero, luego eval)\n * @param {string} script - Código JavaScript a ejecutar\n * @param {string} appName - Nombre de la app\n * @param {Proxy} globalProxy - Proxy sandbox como window\n * @param {string} strategy - 'function' | 'eval' | 'auto'\n * @returns {*} Resultado de la ejecución\n */\n execute(script, appName, globalProxy, strategy = 'function') {\n if (strategy === 'eval') {\n return this.executeWithEval(script, appName, globalProxy);\n }\n\n if (strategy === 'function' || strategy === 'auto') {\n try {\n return this.executeWithFunction(script, appName, globalProxy);\n } catch (error) {\n if (strategy === 'auto') {\n console.warn(`[WuScriptExecutor] ⚠️ Function failed, falling back to eval`);\n return this.executeWithEval(script, appName, globalProxy);\n }\n throw error;\n }\n }\n\n throw new Error(`Unknown execution strategy: ${strategy}`);\n }\n\n /**\n * Ejecutar múltiples scripts en secuencia\n * @param {Array<string>} scripts - Array de scripts\n * @param {string} appName - Nombre de la app\n * @param {Proxy} globalProxy - Proxy sandbox\n * @param {string} strategy - Estrategia de ejecución\n * @returns {Array<*>} Resultados de ejecución\n */\n async executeMultiple(scripts, appName, globalProxy, strategy = 'function') {\n console.log(`[WuScriptExecutor] 📚 Executing ${scripts.length} scripts for ${appName}`);\n\n const results = [];\n\n for (let i = 0; i < scripts.length; i++) {\n const script = scripts[i];\n console.log(`[WuScriptExecutor] 📜 Executing script ${i + 1}/${scripts.length}`);\n\n try {\n const result = this.execute(script, appName, globalProxy, strategy);\n results.push({ success: true, result });\n } catch (error) {\n console.error(`[WuScriptExecutor] ❌ Script ${i + 1} failed:`, error);\n results.push({ success: false, error });\n }\n }\n\n const successCount = results.filter(r => r.success).length;\n console.log(`[WuScriptExecutor] ✅ Executed ${successCount}/${scripts.length} scripts successfully`);\n\n return results;\n }\n\n /**\n * Validar script antes de ejecutar\n * @param {string} script - Código a validar\n * @returns {boolean} True si el script parece válido\n */\n validateScript(script) {\n if (!script || typeof script !== 'string') {\n return false;\n }\n\n if (script.trim().length === 0) {\n return false;\n }\n\n // Detectar código potencialmente peligroso\n const dangerousPatterns = [\n /__proto__/,\n /constructor.*prototype/,\n /document\\.write/,\n /eval\\(/,\n /new\\s+Function\\(/\n ];\n\n for (const pattern of dangerousPatterns) {\n if (pattern.test(script)) {\n console.warn(`[WuScriptExecutor] ⚠️ Potentially dangerous code detected`);\n // No bloquear, solo advertir\n }\n }\n\n return true;\n }\n\n /**\n * Obtener estadísticas del executor\n */\n getStats() {\n return {\n executor: 'WuScriptExecutor',\n capabilities: ['function', 'eval', 'auto'],\n defaultStrategy: 'function',\n validation: true\n };\n }\n}\n\n/**\n * 🎯 EXPORTS DE CONVENIENCIA\n */\n\n/**\n * Ejecutar script de forma segura\n */\nexport function executeScript(script, appName, globalProxy, strategy = 'function') {\n const executor = new WuScriptExecutor();\n return executor.execute(script, appName, globalProxy, strategy);\n}\n\n/**\n * Ejecutar múltiples scripts\n */\nexport async function executeScripts(scripts, appName, globalProxy, strategy = 'function') {\n const executor = new WuScriptExecutor();\n return await executor.executeMultiple(scripts, appName, globalProxy, strategy);\n}\n","/**\n * 📄 WU-HTML-PARSER: Parser inteligente de HTML para micro-apps\n * Basado en video-code - Extrae DOM, scripts y estilos\n */\n\nexport class WuHtmlParser {\n constructor() {\n this.cache = new Map(); // Cache de HTML parseado\n console.log('[WuHtmlParser] 📄 HTML parsing system initialized');\n }\n\n /**\n * Parsear HTML completo de una micro-app\n * @param {string} html - HTML a parsear\n * @param {string} appName - Nombre de la app\n * @param {string} baseUrl - URL base para resolver recursos\n * @returns {Object} { dom, scripts, styles, externalScripts, externalStyles }\n */\n parse(html, appName, baseUrl) {\n console.log(`[WuHtmlParser] 📄 Parsing HTML for ${appName}`);\n\n // Verificar cache\n const cacheKey = `${appName}:${html.length}`;\n if (this.cache.has(cacheKey)) {\n console.log(`[WuHtmlParser] ⚡ Cache hit for ${appName}`);\n return this.cache.get(cacheKey);\n }\n\n try {\n // Crear contenedor temporal para parsear\n const tempDiv = document.createElement('div');\n tempDiv.innerHTML = html;\n\n // Extraer recursos\n const inlineScripts = [];\n const externalScripts = [];\n const inlineStyles = [];\n const externalStyles = [];\n\n // 🔍 Parsear recursivamente el DOM\n this.deepParse(tempDiv, {\n inlineScripts,\n externalScripts,\n inlineStyles,\n externalStyles,\n baseUrl,\n appName\n });\n\n // Obtener DOM limpio\n const cleanedDom = tempDiv.innerHTML;\n\n const result = {\n dom: cleanedDom,\n scripts: {\n inline: inlineScripts,\n external: externalScripts,\n all: [...inlineScripts, ...externalScripts]\n },\n styles: {\n inline: inlineStyles,\n external: externalStyles,\n all: [...inlineStyles, ...externalStyles]\n }\n };\n\n // Cachear resultado\n this.cache.set(cacheKey, result);\n\n console.log(`[WuHtmlParser] ✅ Parsed ${appName}: ${inlineScripts.length} inline scripts, ${externalScripts.length} external scripts`);\n\n return result;\n\n } catch (error) {\n console.error(`[WuHtmlParser] ❌ Failed to parse HTML for ${appName}:`, error);\n throw error;\n }\n }\n\n /**\n * Parsear recursivamente el DOM extrayendo scripts y estilos\n * @param {HTMLElement} element - Elemento a parsear\n * @param {Object} context - Contexto de parsing\n */\n deepParse(element, context) {\n const { inlineScripts, externalScripts, inlineStyles, externalStyles, baseUrl, appName } = context;\n const children = Array.from(element.children);\n\n for (const child of children) {\n const tagName = child.nodeName.toLowerCase();\n\n // 📜 SCRIPT TAGS\n if (tagName === 'script') {\n this.parseScriptTag(child, inlineScripts, externalScripts, baseUrl, appName);\n\n // Reemplazar script con comentario\n const comment = document.createComment(`Wu: script removed from ${appName}`);\n child.parentElement?.replaceChild(comment, child);\n continue;\n }\n\n // 🎨 STYLE TAGS\n if (tagName === 'style') {\n const styleContent = child.textContent || '';\n if (styleContent.trim()) {\n inlineStyles.push(styleContent);\n console.log(`[WuHtmlParser] 🎨 Extracted inline style (${styleContent.length} chars)`);\n }\n\n // Reemplazar style con comentario\n const comment = document.createComment(`Wu: style removed from ${appName}`);\n child.parentElement?.replaceChild(comment, child);\n continue;\n }\n\n // 🔗 LINK TAGS (external styles)\n if (tagName === 'link') {\n const rel = child.getAttribute('rel');\n const href = child.getAttribute('href');\n\n if (rel === 'stylesheet' && href) {\n const absoluteUrl = this.resolveUrl(href, baseUrl);\n externalStyles.push(absoluteUrl);\n console.log(`[WuHtmlParser] 🔗 Extracted external style: ${absoluteUrl}`);\n\n // Reemplazar link con comentario\n const comment = document.createComment(`Wu: link removed from ${appName}`);\n child.parentElement?.replaceChild(comment, child);\n continue;\n }\n }\n\n // Recursión para elementos hijos\n if (child.children.length > 0) {\n this.deepParse(child, context);\n }\n }\n }\n\n /**\n * Parsear tag <script>\n */\n parseScriptTag(scriptElement, inlineScripts, externalScripts, baseUrl, appName) {\n const src = scriptElement.getAttribute('src');\n const type = scriptElement.getAttribute('type') || 'text/javascript';\n\n // Ignorar module scripts (se cargan por import)\n if (type === 'module') {\n console.log(`[WuHtmlParser] ⏭️ Skipping module script for ${appName}`);\n return;\n }\n\n if (src) {\n // Script externo\n const absoluteUrl = this.resolveUrl(src, baseUrl);\n externalScripts.push(absoluteUrl);\n console.log(`[WuHtmlParser] 📜 Extracted external script: ${absoluteUrl}`);\n } else {\n // Script inline\n const scriptContent = scriptElement.textContent || '';\n if (scriptContent.trim()) {\n inlineScripts.push(scriptContent);\n console.log(`[WuHtmlParser] 📜 Extracted inline script (${scriptContent.length} chars)`);\n }\n }\n }\n\n /**\n * Resolver URL relativa a absoluta\n */\n resolveUrl(url, baseUrl) {\n // Ya es absoluta\n if (url.startsWith('http://') || url.startsWith('https://') || url.startsWith('//')) {\n return url.startsWith('//') ? `https:${url}` : url;\n }\n\n // Resolver relativa\n const base = baseUrl.endsWith('/') ? baseUrl : `${baseUrl}/`;\n\n if (url.startsWith('/')) {\n // Relativa a raíz\n const urlObj = new URL(baseUrl);\n return `${urlObj.protocol}//${urlObj.host}${url}`;\n } else {\n // Relativa a base\n return `${base}${url}`;\n }\n }\n\n /**\n * Cargar HTML desde URL\n */\n async fetchHtml(url, appName) {\n console.log(`[WuHtmlParser] 🌐 Fetching HTML for ${appName} from ${url}`);\n\n try {\n const response = await fetch(url, {\n method: 'GET',\n cache: 'no-cache',\n headers: {\n 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8'\n }\n });\n\n if (!response.ok) {\n throw new Error(`HTTP ${response.status}: ${response.statusText}`);\n }\n\n const html = await response.text();\n\n if (!html || html.trim().length === 0) {\n throw new Error('Empty HTML response');\n }\n\n console.log(`[WuHtmlParser] ✅ Fetched HTML (${html.length} chars)`);\n\n return html;\n\n } catch (error) {\n console.error(`[WuHtmlParser] ❌ Failed to fetch HTML from ${url}:`, error);\n throw error;\n }\n }\n\n /**\n * Parsear y cargar HTML desde URL\n */\n async parseFromUrl(url, appName) {\n const html = await this.fetchHtml(url, appName);\n return this.parse(html, appName, url);\n }\n\n /**\n * Limpiar cache\n */\n clearCache(pattern) {\n if (pattern) {\n const regex = new RegExp(pattern);\n for (const [key] of this.cache) {\n if (regex.test(key)) {\n this.cache.delete(key);\n console.log(`[WuHtmlParser] 🗑️ Cleared cache for: ${key}`);\n }\n }\n } else {\n this.cache.clear();\n console.log(`[WuHtmlParser] 🗑️ Cache cleared completely`);\n }\n }\n\n /**\n * Obtener estadísticas\n */\n getStats() {\n return {\n cacheSize: this.cache.size,\n cacheKeys: Array.from(this.cache.keys())\n };\n }\n}\n\n/**\n * 🎯 EXPORTS DE CONVENIENCIA\n */\n\n/**\n * Parsear HTML\n */\nexport function parseHtml(html, appName, baseUrl) {\n const parser = new WuHtmlParser();\n return parser.parse(html, appName, baseUrl);\n}\n\n/**\n * Parsear HTML desde URL\n */\nexport async function parseHtmlFromUrl(url, appName) {\n const parser = new WuHtmlParser();\n return await parser.parseFromUrl(url, appName);\n}\n","/**\n * 🛡️ WU-SANDBOX: ADVANCED ISOLATION SYSTEM\n * Shadow DOM + Proxy Sandbox + Script Execution + HTML Parsing\n * Combina lo mejor de video-code con Shadow DOM nativo\n */\n\nimport { WuStyleBridge } from './wu-style-bridge.js';\nimport { WuProxySandbox } from './wu-proxy-sandbox.js';\nimport { WuSnapshotSandbox } from './wu-snapshot-sandbox.js';\nimport { WuScriptExecutor } from './wu-script-executor.js';\nimport { WuHtmlParser } from './wu-html-parser.js';\n\nexport class WuSandbox {\n constructor() {\n // Registros existentes\n this.sandboxes = new Map();\n this.globalState = new Map();\n this.styleBridge = new WuStyleBridge();\n\n // 🚀 NUEVOS SISTEMAS INTEGRADOS\n this.jsSandboxes = new Map(); // ProxySandbox o SnapshotSandbox por app\n this.scriptExecutor = new WuScriptExecutor();\n this.htmlParser = new WuHtmlParser();\n this.sandboxStrategy = this.detectSandboxStrategy();\n\n console.log(`[WuSandbox] 🛡️ Advanced isolation system initialized (strategy: ${this.sandboxStrategy})`);\n }\n\n /**\n * Detectar estrategia de sandbox óptima\n * @returns {'proxy' | 'snapshot'} Estrategia a usar\n */\n detectSandboxStrategy() {\n // Verificar si Proxy está disponible\n if (typeof Proxy !== 'undefined') {\n try {\n // Test básico de Proxy\n const testProxy = new Proxy({}, {\n get(target, prop) { return target[prop]; }\n });\n testProxy.test = 'value';\n\n console.log('[WuSandbox] ✅ Proxy available - using ProxySandbox strategy');\n return 'proxy';\n } catch (error) {\n console.warn('[WuSandbox] ⚠️ Proxy not working - falling back to SnapshotSandbox');\n return 'snapshot';\n }\n }\n\n console.warn('[WuSandbox] ⚠️ Proxy not available - using SnapshotSandbox strategy');\n return 'snapshot';\n }\n\n /**\n * 🔧 SMART SANDBOX: Advanced Shadow DOM creation with error recovery\n * @param {string} appName - Nombre de la aplicación\n * @param {HTMLElement} hostContainer - Contenedor host\n * @param {Object} options - Opciones adicionales (styleMode, manifest, etc.)\n * @returns {Object} Sandbox con shadow root y container\n */\n create(appName, hostContainer, options = {}) {\n console.log(`[WuSandbox] 🔨 Creating sandbox for: ${appName}`);\n\n try {\n // 🔧 SHADOW DOM VERIFICATION\n if (!hostContainer.attachShadow) {\n throw new Error('Shadow DOM not supported in this browser');\n }\n\n // 🛠️ SMART CLEANUP: Handle existing shadow roots\n let shadowRoot;\n if (hostContainer.shadowRoot) {\n console.log(`[WuSandbox] 🔄 Existing shadow root detected, performing cleanup...`);\n\n // Clear existing shadow root content\n hostContainer.shadowRoot.innerHTML = '';\n shadowRoot = hostContainer.shadowRoot;\n\n console.log(`[WuSandbox] ✨ Existing shadow root cleaned and reused`);\n } else {\n // Create new Shadow DOM\n shadowRoot = hostContainer.attachShadow({\n mode: 'open',\n delegatesFocus: true\n });\n\n console.log(`[WuSandbox] 🌟 New shadow root created`);\n }\n\n // 🎯 Create app container with advanced features\n const appContainer = document.createElement('div');\n appContainer.id = `wu-app-${appName}`;\n appContainer.className = 'wu-app-root';\n appContainer.setAttribute('data-wu-enhanced', 'true');\n appContainer.setAttribute('data-wu-timestamp', Date.now().toString());\n\n // 🎨 Enhanced base styles with advanced properties\n const baseStyles = document.createElement('style');\n baseStyles.textContent = this.generateSandboxStyles(appName);\n\n // 🌟 Assemble enhanced Shadow DOM\n shadowRoot.appendChild(baseStyles);\n shadowRoot.appendChild(appContainer);\n\n // 🚀 Create isolated JavaScript scope (LEGACY - backward compatibility)\n const jsScope = this.createJSScope(appName);\n\n // 🛡️ NUEVO: Crear JS Sandbox avanzado (ProxySandbox o SnapshotSandbox)\n const jsSandbox = this.createAdvancedJSSandbox(appName);\n const jsProxy = jsSandbox.activate(); // Activar sandbox y obtener proxy\n\n // Verificar styleMode del manifest antes de inyectar estilos\n const styleMode = options.styleMode || options.manifest?.styleMode;\n\n const sandbox = {\n appName,\n shadowRoot,\n container: appContainer,\n hostContainer,\n jsScope, // LEGACY: mantener para compatibilidad\n jsSandbox, // NUEVO: ProxySandbox o SnapshotSandbox\n jsProxy, // NUEVO: Proxy para ejecutar scripts\n styles: baseStyles,\n styleMode, // Guardar styleMode para uso futuro\n manifest: options.manifest, // Guardar manifest completo\n created: Date.now(),\n sandbox_state: 'stable',\n recovery_count: 0\n };\n\n // 🎨 INJECT STYLES: Comportamiento según styleMode\n // - \"shared\": Inyecta todos los estilos del documento padre\n // - \"isolated\": NO inyecta estilos externos (encapsulamiento nativo Shadow DOM)\n // - \"fully-isolated\": Inyecta SOLO estilos propios de la app\n\n if (styleMode === 'isolated') {\n // 🔒 MODO ISOLATED: Encapsulamiento nativo del Shadow DOM\n // No se inyectan estilos externos - la app debe manejar sus propios estilos\n console.log(`[WuSandbox] 🔒 Style mode \"isolated\" for ${appName}, using native Shadow DOM encapsulation`);\n sandbox.stylesReady = Promise.resolve(0);\n // No configurar observer de estilos - la app es responsable de sus propios estilos\n\n } else if (styleMode === 'fully-isolated') {\n console.log(`[WuSandbox] 🛡️ Style mode \"fully-isolated\" detected for ${appName}, using enhanced style injection`);\n // Registrar esta app como fully-isolated en el style bridge para filtrar sus estilos\n const appUrl = options.appUrl || (options.manifest?.name ? `/${options.manifest.name}/` : `/${appName}/`);\n this.styleBridge.registerFullyIsolatedApp(appName, appUrl);\n \n // Guardar appUrl en sandbox para uso en reinjectStyles\n sandbox.appUrl = appUrl;\n \n // Para fully-isolated, inyectar SOLO los estilos propios de la app en su Shadow DOM\n // Guardamos referencia a this para usar en el observer\n const self = this;\n \n sandbox.stylesReady = new Promise((resolve) => {\n let resolved = false;\n \n const tryInject = async () => {\n const count = await self.injectOwnStylesToShadow(shadowRoot, appName, appUrl);\n \n if (count > 0) {\n console.log(`[WuSandbox] 🎨 Injected ${count} own styles for ${appName} (fully-isolated)`);\n if (!resolved) {\n resolved = true;\n resolve(count);\n }\n }\n \n return count;\n };\n \n // Usar MutationObserver PERSISTENTE para detectar cuando se inyectan estilos del app\n console.log(`[WuSandbox] 👀 Setting up style observer for ${appName} (fully-isolated)`);\n const observer = new MutationObserver((mutations) => {\n let newStyleCount = 0;\n for (const m of mutations) {\n if (m.type === 'childList') {\n for (const n of m.addedNodes) {\n if (n.nodeName === 'STYLE' || n.nodeName === 'LINK') {\n newStyleCount++;\n const viteId = n.getAttribute ? n.getAttribute('data-vite-dev-id') : null;\n if (viteId && viteId.toLowerCase().includes(appName.toLowerCase())) {\n console.log(`[WuSandbox] 🆕 New ${appName} style detected: ${viteId.split('/').pop()}`);\n }\n }\n }\n }\n }\n if (newStyleCount > 0) {\n console.log(`[WuSandbox] 🔄 ${newStyleCount} new styles detected in head, checking for ${appName}...`);\n tryInject();\n }\n });\n \n // Observar cambios en el head DE FORMA PERSISTENTE\n observer.observe(document.head, {\n childList: true,\n subtree: true\n });\n \n // Guardar referencia al observer para poder desconectarlo cuando se desmonte la app\n sandbox.styleObserver = observer;\n \n // Intento inicial con pequeño delay para que Vite procese los imports\n setTimeout(async () => {\n const count = await tryInject();\n // Si después de 3 segundos no hay estilos, usar fallback\n if (!resolved) {\n setTimeout(() => {\n if (!resolved) {\n console.warn(`[WuSandbox] ⚠️ No own styles found for ${appName} after timeout, using FALLBACK`);\n const fallbackCount = self.injectAllStylesToShadow(shadowRoot, appName);\n console.log(`[WuSandbox] 🎨 FALLBACK: Injected ${fallbackCount} styles for ${appName}`);\n resolved = true;\n resolve(fallbackCount);\n }\n }, 3000);\n }\n }, 50);\n });\n } else {\n // 🌐 MODO SHARED (default): Inyectar todos los estilos compartidos del documento\n console.log(`[WuSandbox] 🌐 Style mode \"shared\" for ${appName}, injecting all shared styles...`);\n sandbox.stylesReady = this.styleBridge.injectStylesIntoShadow(shadowRoot, appName, styleMode).then(count => {\n console.log(`[WuSandbox] 🎨 Shared ${count} styles with ${appName}`);\n\n // 🔄 Observar cambios dinámicos de estilos (HMR de Vite)\n this.styleBridge.observeStyleChanges(() => {\n console.log(`[WuSandbox] 🔄 Reinjecting styles for ${appName} due to changes`);\n this.styleBridge.injectStylesIntoShadow(shadowRoot, appName, styleMode).catch(err => {\n console.warn(`[WuSandbox] ⚠️ Failed to reinject styles:`, err);\n });\n });\n\n return count;\n }).catch(error => {\n console.warn(`[WuSandbox] ⚠️ Failed to inject styles:`, error);\n return 0;\n });\n }\n\n // 📊 Register in sandbox registry\n this.sandboxes.set(appName, sandbox);\n\n console.log(`[WuSandbox] ✅ Enhanced sandbox created for ${appName}`);\n return sandbox;\n\n } catch (error) {\n console.error(`[WuSandbox] ❌ Failed to create sandbox for ${appName}:`, error);\n\n // 🔧 FALLBACK RECOVERY: Create fallback sandbox when Shadow DOM fails\n if (error.message.includes('Shadow root cannot be created')) {\n return this.createFallbackSandbox(appName, hostContainer);\n }\n\n throw error;\n }\n }\n\n /**\n * 🔧 FALLBACK SANDBOX: Create fallback container when Shadow DOM is not available\n */\n createFallbackSandbox(appName, hostContainer) {\n console.log(`[WuSandbox] 🔧 Creating fallback sandbox for ${appName}...`);\n\n try {\n // 🛠️ Complete shadow DOM reset\n if (hostContainer.shadowRoot) {\n hostContainer.shadowRoot.innerHTML = '';\n }\n\n // 🌟 Create minimal container without shadow DOM if necessary\n const fallbackContainer = document.createElement('div');\n fallbackContainer.id = `wu-app-${appName}`;\n fallbackContainer.className = 'wu-app-root wu-fallback';\n fallbackContainer.style.cssText = `\n width: 100%;\n height: 100%;\n isolation: isolate;\n contain: layout style paint;\n `;\n\n // 🧹 Clear host container\n hostContainer.innerHTML = '';\n hostContainer.appendChild(fallbackContainer);\n\n const healedSandbox = {\n appName,\n shadowRoot: null, // No shadow DOM in fallback mode\n container: fallbackContainer,\n hostContainer,\n jsScope: this.createJSScope(appName),\n styles: null,\n created: Date.now(),\n sandbox_state: 'fallback_mode',\n recovery_count: 1,\n fallback_mode: true\n };\n\n this.sandboxes.set(appName, healedSandbox);\n\n console.log(`[WuSandbox] ✨ Fallback sandbox created successfully for ${appName}`);\n return healedSandbox;\n\n } catch (healingError) {\n console.error(`[WuSandbox] 💥 Fallback sandbox creation failed:`, healingError);\n throw healingError;\n }\n }\n\n /**\n * 🎨 SANDBOX STYLES: Generate CSS styles for Shadow DOM isolation\n */\n generateSandboxStyles(appName) {\n return `\n /* Wu Framework - Shadow DOM Isolation Styles */\n :host {\n display: block;\n width: 100%;\n height: 100%;\n box-sizing: border-box;\n contain: layout style paint;\n --wu-sandbox-active: true;\n --wu-isolation-state: stable;\n }\n\n .wu-app-root {\n width: 100%;\n height: 100%;\n box-sizing: border-box;\n isolation: isolate;\n position: relative;\n overflow: hidden;\n }\n\n /* Loading animation for sandbox initialization */\n .wu-app-root[data-wu-loading=\"true\"] {\n background: linear-gradient(45deg,\n rgba(74, 144, 226, 0.1) 0%,\n rgba(80, 227, 194, 0.1) 100%);\n animation: sandboxPulse 2s ease-in-out infinite;\n }\n\n @keyframes sandboxPulse {\n 0%, 100% { opacity: 0.8; }\n 50% { opacity: 1; }\n }\n\n /* CSS reset for shadow DOM stability */\n * {\n box-sizing: border-box;\n }\n\n /* CSS custom properties for sandbox */\n :host {\n --wu-app-name: \"${appName}\";\n --wu-isolation: true;\n --wu-creation-timestamp: ${Date.now()};\n }\n\n /* 🛡️ Debug mode enhancements */\n :host([wu-debug]) {\n border: 2px dashed #4a90e2;\n background: rgba(74, 144, 226, 0.05);\n box-shadow: 0 0 10px rgba(74, 144, 226, 0.3);\n }\n\n :host([wu-debug])::before {\n content: \"Wu Framework: \" attr(wu-app);\n position: absolute;\n top: 0;\n left: 0;\n background: linear-gradient(45deg, #4a90e2, #50e3c2);\n color: white;\n padding: 4px 8px;\n font-size: 11px;\n font-family: 'SF Mono', Monaco, 'Cascadia Code', 'Roboto Mono', Consolas, 'Courier New', monospace;\n z-index: 10000;\n border-radius: 0 0 4px 0;\n font-weight: 600;\n }\n\n /* Sandbox state indicators */\n :host([data-sandbox-state=\"stable\"]) {\n --wu-isolation-state: stable;\n }\n\n :host([data-sandbox-state=\"healing\"]) {\n --wu-dimensional-stability: healing;\n animation: sandboxHealing 1s ease-in-out infinite;\n }\n\n @keyframes sandboxHealing {\n 0%, 100% { filter: hue-rotate(0deg); }\n 50% { filter: hue-rotate(180deg); }\n }\n `;\n }\n\n /**\n * 🛡️ Crear JS Sandbox avanzado (ProxySandbox o SnapshotSandbox)\n * @param {string} appName - Nombre de la app\n * @returns {WuProxySandbox|WuSnapshotSandbox} Sandbox JS\n */\n createAdvancedJSSandbox(appName) {\n let jsSandbox;\n\n if (this.sandboxStrategy === 'proxy') {\n jsSandbox = new WuProxySandbox(appName);\n console.log(`[WuSandbox] 🛡️ Created ProxySandbox for ${appName}`);\n } else {\n jsSandbox = new WuSnapshotSandbox(appName);\n console.log(`[WuSandbox] 📸 Created SnapshotSandbox for ${appName}`);\n }\n\n // Registrar sandbox\n this.jsSandboxes.set(appName, jsSandbox);\n\n return jsSandbox;\n }\n\n /**\n * 📜 Ejecutar script en sandbox aislado\n * @param {string} script - Código JavaScript\n * @param {string} appName - Nombre de la app\n * @param {string} strategy - 'function' | 'eval' | 'auto'\n * @returns {*} Resultado de la ejecución\n */\n executeScript(script, appName, strategy = 'function') {\n const sandbox = this.sandboxes.get(appName);\n if (!sandbox || !sandbox.jsProxy) {\n throw new Error(`Sandbox not found for ${appName}`);\n }\n\n console.log(`[WuSandbox] 📜 Executing script for ${appName}`);\n return this.scriptExecutor.execute(script, appName, sandbox.jsProxy, strategy);\n }\n\n /**\n * 📄 Parsear HTML de micro-app\n * @param {string} html - HTML a parsear\n * @param {string} appName - Nombre de la app\n * @param {string} baseUrl - URL base\n * @returns {Object} Resultado del parsing\n */\n parseHtml(html, appName, baseUrl) {\n console.log(`[WuSandbox] 📄 Parsing HTML for ${appName}`);\n return this.htmlParser.parse(html, appName, baseUrl);\n }\n\n /**\n * 📄 Parsear HTML desde URL\n * @param {string} url - URL de la app\n * @param {string} appName - Nombre de la app\n * @returns {Promise<Object>} Resultado del parsing\n */\n async parseHtmlFromUrl(url, appName) {\n console.log(`[WuSandbox] 🌐 Parsing HTML from URL for ${appName}`);\n return await this.htmlParser.parseFromUrl(url, appName);\n }\n\n /**\n * Obtener estilos base para el sandbox\n * @param {string} appName - Nombre de la aplicación\n * @returns {string} CSS base\n */\n getBaseStyles(appName) {\n return `\n /* Wu Framework - Shadow DOM Base Styles */\n :host {\n display: block;\n width: 100%;\n height: 100%;\n box-sizing: border-box;\n contain: layout style paint;\n }\n\n .wu-app-root {\n width: 100%;\n height: 100%;\n box-sizing: border-box;\n isolation: isolate;\n }\n\n /* Reset básico para evitar conflictos */\n * {\n box-sizing: border-box;\n }\n\n /* Variables CSS aisladas para la app */\n :host {\n --wu-app-name: \"${appName}\";\n --wu-isolation: true;\n }\n\n /* Prevenir scroll del host cuando no es necesario */\n :host([wu-no-scroll]) {\n overflow: hidden;\n }\n\n /* Estilos para debugging en desarrollo */\n :host([wu-debug]) {\n border: 2px dashed #ff6b6b;\n background: rgba(255, 107, 107, 0.1);\n }\n\n :host([wu-debug])::before {\n content: \"Wu App: \" attr(wu-app);\n position: absolute;\n top: 0;\n left: 0;\n background: #ff6b6b;\n color: white;\n padding: 2px 6px;\n font-size: 10px;\n font-family: monospace;\n z-index: 10000;\n }\n `;\n }\n\n /**\n * Crear scope aislado para JavaScript\n * @param {string} appName - Nombre de la aplicación\n * @returns {Proxy} Proxy que aísla el scope global\n */\n createJSScope(appName) {\n // Crear namespace aislado para la app\n const appGlobals = Object.create(null);\n\n // Proxy que intercepta acceso a variables globales\n return new Proxy(window, {\n set(target, prop, value) {\n // Variables específicas de la app van al namespace aislado\n if (this.isAppSpecific(prop)) {\n appGlobals[prop] = value;\n console.log(`[WuSandbox] 📝 App ${appName} set isolated global: ${String(prop)}`);\n return true;\n }\n\n // Variables seguras pueden ir al global real\n if (this.isSafeGlobal(prop)) {\n target[prop] = value;\n return true;\n }\n\n // Por defecto, aislar en el namespace de la app\n appGlobals[prop] = value;\n return true;\n },\n\n get(target, prop) {\n // Primero buscar en namespace aislado\n if (prop in appGlobals) {\n return appGlobals[prop];\n }\n\n // Luego en el global real\n return target[prop];\n },\n\n has(target, prop) {\n return prop in appGlobals || prop in target;\n },\n\n ownKeys(target) {\n return [...Object.keys(appGlobals), ...Object.keys(target)];\n },\n\n // Métodos auxiliares\n isAppSpecific(prop) {\n const appSpecificPatterns = [\n /^app[A-Z]/, // appData, appConfig, etc.\n /^[a-z]+App$/, // myApp, headerApp, etc.\n /^__[a-zA-Z]/, // variables privadas\n /^_[A-Z]/ // variables de librerías\n ];\n\n return appSpecificPatterns.some(pattern => pattern.test(String(prop)));\n },\n\n isSafeGlobal(prop) {\n const safeGlobals = new Set([\n 'console', 'setTimeout', 'setInterval', 'clearTimeout', 'clearInterval',\n 'fetch', 'URL', 'URLSearchParams', 'FormData', 'Blob',\n 'Date', 'Math', 'JSON', 'Promise', 'Array', 'Object', 'String', 'Number'\n ]);\n\n return safeGlobals.has(String(prop));\n }\n });\n }\n\n /**\n * Agregar estilos personalizados al sandbox\n * @param {string} appName - Nombre de la aplicación\n * @param {string} css - CSS a agregar\n */\n addStyles(appName, css) {\n const sandbox = this.sandboxes.get(appName);\n if (!sandbox) {\n console.warn(`[WuSandbox] Sandbox not found for: ${appName}`);\n return;\n }\n\n const styleElement = document.createElement('style');\n styleElement.textContent = css;\n styleElement.setAttribute('wu-custom-styles', '');\n\n sandbox.shadowRoot.appendChild(styleElement);\n console.log(`[WuSandbox] 🎨 Custom styles added to ${appName}`);\n }\n\n /**\n * Cargar estilos externos en el sandbox\n * @param {string} appName - Nombre de la aplicación\n * @param {string} href - URL del CSS\n */\n loadExternalStyles(appName, href) {\n const sandbox = this.sandboxes.get(appName);\n if (!sandbox) {\n console.warn(`[WuSandbox] Sandbox not found for: ${appName}`);\n return;\n }\n\n const linkElement = document.createElement('link');\n linkElement.rel = 'stylesheet';\n linkElement.href = href;\n linkElement.setAttribute('wu-external-styles', '');\n\n sandbox.shadowRoot.appendChild(linkElement);\n console.log(`[WuSandbox] 🔗 External styles loaded in ${appName}: ${href}`);\n }\n\n /**\n * Establecer modo debug para un sandbox\n * @param {string} appName - Nombre de la aplicación\n * @param {boolean} enabled - Activar/desactivar debug\n */\n setDebugMode(appName, enabled = true) {\n const sandbox = this.sandboxes.get(appName);\n if (!sandbox) {\n console.warn(`[WuSandbox] Sandbox not found for: ${appName}`);\n return;\n }\n\n if (enabled) {\n sandbox.hostContainer.setAttribute('wu-debug', '');\n sandbox.hostContainer.setAttribute('wu-app', appName);\n } else {\n sandbox.hostContainer.removeAttribute('wu-debug');\n sandbox.hostContainer.removeAttribute('wu-app');\n }\n\n console.log(`[WuSandbox] 🐛 Debug mode ${enabled ? 'enabled' : 'disabled'} for ${appName}`);\n }\n\n /**\n * Limpiar y destruir sandbox\n * @param {Object} sandbox - Sandbox a limpiar\n */\n cleanup(sandbox) {\n if (!sandbox) return;\n\n const { appName, shadowRoot, hostContainer, jsSandbox } = sandbox;\n\n console.log(`[WuSandbox] 🧹 Cleaning up sandbox for: ${appName}`);\n\n try {\n // 🛡️ NUEVO: Desactivar JS Sandbox\n if (jsSandbox && jsSandbox.isActive()) {\n jsSandbox.deactivate();\n console.log(`[WuSandbox] 🛡️ JS Sandbox deactivated for ${appName}`);\n }\n\n // Limpiar eventos y observers\n this.cleanupEventListeners(sandbox);\n\n // Limpiar contenido del Shadow DOM\n if (shadowRoot) {\n shadowRoot.innerHTML = '';\n }\n\n // Remover atributos del host\n if (hostContainer) {\n hostContainer.removeAttribute('wu-debug');\n hostContainer.removeAttribute('wu-app');\n hostContainer.removeAttribute('wu-no-scroll');\n }\n\n // Remover del registro\n this.sandboxes.delete(appName);\n this.jsSandboxes.delete(appName);\n\n console.log(`[WuSandbox] ✅ Sandbox cleaned up: ${appName}`);\n\n } catch (error) {\n console.error(`[WuSandbox] ❌ Error cleaning up sandbox ${appName}:`, error);\n }\n }\n\n /**\n * Limpiar event listeners del sandbox\n * @param {Object} sandbox - Sandbox a limpiar\n */\n cleanupEventListeners(sandbox) {\n // Remover todos los event listeners del Shadow DOM\n const { shadowRoot } = sandbox;\n if (!shadowRoot) return;\n\n // Clonar nodos para remover todos los event listeners\n const elements = shadowRoot.querySelectorAll('*');\n elements.forEach(element => {\n if (element.cloneNode) {\n const clone = element.cloneNode(true);\n element.parentNode?.replaceChild(clone, element);\n }\n });\n }\n\n /**\n * Obtener información de un sandbox\n * @param {string} appName - Nombre de la aplicación\n * @returns {Object} Información del sandbox\n */\n getSandboxInfo(appName) {\n const sandbox = this.sandboxes.get(appName);\n if (!sandbox) return null;\n\n return {\n appName: sandbox.appName,\n created: sandbox.created,\n hasContainer: !!sandbox.container,\n hasShadowRoot: !!sandbox.shadowRoot,\n elementCount: sandbox.shadowRoot?.children?.length || 0,\n uptime: Date.now() - sandbox.created\n };\n }\n\n /**\n * Obtener estadísticas de todos los sandboxes\n */\n getStats() {\n return {\n strategy: this.sandboxStrategy,\n total: this.sandboxes.size,\n sandboxes: Array.from(this.sandboxes.keys()),\n jsSandboxes: Array.from(this.jsSandboxes.keys()),\n htmlCacheSize: this.htmlParser.getStats().cacheSize,\n scriptExecutor: this.scriptExecutor.getStats(),\n details: Array.from(this.sandboxes.entries()).map(([name, sandbox]) => ({\n name,\n uptime: Date.now() - sandbox.created,\n elements: sandbox.shadowRoot?.children?.length || 0,\n hasJsSandbox: !!sandbox.jsSandbox,\n jsSandboxActive: sandbox.jsSandbox?.isActive() || false\n }))\n };\n }\n\n /**\n * Limpiar todos los sandboxes\n */\n cleanupAll() {\n console.log(`[WuSandbox] 🧹 Cleaning up all ${this.sandboxes.size} sandboxes...`);\n\n for (const [appName, sandbox] of this.sandboxes) {\n this.cleanup(sandbox);\n }\n\n this.globalState.clear();\n\n // Limpiar StyleBridge\n if (this.styleBridge) {\n this.styleBridge.cleanup();\n }\n\n console.log(`[WuSandbox] ✅ All sandboxes cleaned up`);\n }\n\n /**\n * 🎨 CONFIGURAR STYLE BRIDGE: Configura el sistema de compartición de estilos\n * @param {Object} config - Configuración del StyleBridge\n */\n configureStyleSharing(config) {\n if (this.styleBridge) {\n this.styleBridge.configure(config);\n console.log(`[WuSandbox] 🎨 StyleBridge configured`);\n }\n }\n\n /**\n * 📊 OBTENER ESTADÍSTICAS DE ESTILOS: Info sobre estilos compartidos\n * @returns {Object}\n */\n getStyleStats() {\n return this.styleBridge ? this.styleBridge.getStats() : null;\n }\n\n /**\n * 🔄 RE-INYECTAR ESTILOS: Vuelve a inyectar estilos en un sandbox\n * @param {string} appName - Nombre de la aplicación\n */\n async reinjectStyles(appName) {\n const sandbox = this.sandboxes.get(appName);\n if (!sandbox || !sandbox.shadowRoot) {\n console.warn(`[WuSandbox] Cannot reinject styles for ${appName}`);\n return;\n }\n\n const styleMode = sandbox.styleMode;\n\n // 🔒 MODO ISOLATED: No reinyectar estilos - la app maneja sus propios estilos\n if (styleMode === 'isolated') {\n console.log(`[WuSandbox] 🔒 Skipping reinject for ${appName} (isolated mode - app manages own styles)`);\n return;\n }\n\n // 🛡️ MODO FULLY-ISOLATED: Reinyectar SOLO estilos propios\n if (styleMode === 'fully-isolated') {\n console.log(`[WuSandbox] 🔄 Reinjecting OWN styles for ${appName} (fully-isolated)...`);\n const appUrl = sandbox.appUrl || sandbox.manifest?.name ? `/${sandbox.manifest.name}/` : `/${appName}/`;\n const count = await this.injectOwnStylesToShadow(sandbox.shadowRoot, appName, appUrl);\n console.log(`[WuSandbox] ✅ Reinjected ${count} own styles for ${appName}`);\n return;\n }\n\n // 🌐 MODO SHARED: Reinyectar todos los estilos compartidos\n console.log(`[WuSandbox] 🔄 Reinjecting shared styles for ${appName}...`);\n const count = await this.styleBridge.injectStylesIntoShadow(\n sandbox.shadowRoot,\n appName,\n styleMode\n );\n console.log(`[WuSandbox] ✅ Reinjected ${count} shared styles`);\n }\n\n /**\n * 🎨 INYECTAR ESTILOS PROPIOS: Inyecta SOLO los estilos propios de una app en su Shadow DOM\n * Usado para apps en modo fully-isolated\n * @param {ShadowRoot} shadowRoot - Shadow DOM donde inyectar\n * @param {string} appName - Nombre de la app\n * @param {string} appUrl - URL base de la app\n * @returns {Promise<number>} Número de estilos inyectados\n */\n async injectOwnStylesToShadow(shadowRoot, appName, appUrl) {\n if (!shadowRoot) return 0;\n\n let injectedCount = 0;\n \n // Buscar TODOS los estilos en el head\n const allStyles = document.querySelectorAll('style');\n const normalizedAppName = appName.toLowerCase();\n \n // Patrones para detectar estilos de esta app (Windows y Unix paths)\n // IMPORTANTE: Debe coincidir SOLO con packages/appName/ al inicio del path del paquete\n // NO debe coincidir con packages/shell/src/components/learning/ (eso es del shell)\n const appPatterns = [\n // Patrón específico: packages/learning/src o packages\\learning\\src\n // El src/ es clave para asegurar que es el MFE, no un subdirectorio de otro package\n new RegExp(`packages[/\\\\\\\\]${normalizedAppName}[/\\\\\\\\]src[/\\\\\\\\]`, 'i')\n ];\n \n console.log(`[WuSandbox] 🔍 Searching own styles for ${appName}, found ${allStyles.length} style tags in head`);\n \n // Log para debug: mostrar estilos que contienen el nombre de la app\n let matchingCount = 0;\n for (const s of allStyles) {\n const vid = s.getAttribute('data-vite-dev-id') || '';\n if (vid.toLowerCase().includes(normalizedAppName)) {\n matchingCount++;\n }\n }\n if (matchingCount > 0) {\n console.log(`[WuSandbox] 📋 Found ${matchingCount} styles potentially matching ${appName}`);\n }\n \n for (const style of allStyles) {\n // NO saltar basándose en data-wu-injected del head - eso se pone en los clones del shadow DOM\n \n const viteId = style.getAttribute('data-vite-dev-id') || '';\n const normalizedViteId = viteId.replace(/\\\\/g, '/').toLowerCase();\n \n // Verificar si el estilo pertenece a esta app\n let belongsToApp = false;\n \n // 1. Por data-vite-dev-id (la forma más confiable)\n if (viteId) {\n // Revisar si el path contiene packages/appName/\n for (const pattern of appPatterns) {\n if (pattern instanceof RegExp) {\n if (pattern.test(viteId)) {\n belongsToApp = true;\n break;\n }\n } else {\n if (normalizedViteId.includes(pattern.toLowerCase())) {\n belongsToApp = true;\n break;\n }\n }\n }\n }\n \n if (belongsToApp) {\n // Verificar si ya existe en el Shadow DOM\n const existingStyle = shadowRoot.querySelector(`style[data-vite-dev-id=\"${viteId}\"]`);\n \n if (!existingStyle) {\n const clonedStyle = style.cloneNode(true);\n clonedStyle.setAttribute('data-wu-injected', 'true');\n shadowRoot.insertBefore(clonedStyle, shadowRoot.firstChild);\n injectedCount++;\n const styleName = viteId.substring(viteId.lastIndexOf('/') + 1) || viteId.substring(viteId.lastIndexOf('\\\\') + 1);\n console.log(`[WuSandbox] ✅ Injected own style for ${appName}: ${styleName}`);\n }\n }\n }\n \n console.log(`[WuSandbox] 🎨 Total own styles injected for ${appName}: ${injectedCount}`);\n return injectedCount;\n }\n\n /**\n * 🎨 FALLBACK: Inyectar estilos que contengan el nombre de la app\n * Usado como último recurso cuando no se encuentran los estilos con el patrón exacto\n * @param {ShadowRoot} shadowRoot - Shadow DOM donde inyectar\n * @param {string} appName - Nombre de la app (para logging)\n * @returns {number} Número de estilos inyectados\n */\n injectAllStylesToShadow(shadowRoot, appName) {\n if (!shadowRoot) return 0;\n\n let injectedCount = 0;\n const normalizedAppName = appName.toLowerCase();\n \n // Inyectar estilos que contengan el nombre de la app en su vite-id\n const allStyles = document.querySelectorAll('style');\n for (const style of allStyles) {\n const viteId = style.getAttribute('data-vite-dev-id') || '';\n \n // Solo inyectar si contiene el nombre de la app\n if (!viteId.toLowerCase().includes(normalizedAppName)) continue;\n \n // Verificar si ya existe en el shadow DOM\n if (shadowRoot.querySelector(`style[data-vite-dev-id=\"${viteId}\"]`)) continue;\n \n const clonedStyle = style.cloneNode(true);\n clonedStyle.setAttribute('data-wu-fallback', 'true');\n shadowRoot.insertBefore(clonedStyle, shadowRoot.firstChild);\n injectedCount++;\n const styleName = viteId.split('/').pop() || viteId.split('\\\\').pop();\n console.log(`[WuSandbox] 📦 FALLBACK injected: ${styleName}`);\n }\n \n console.log(`[WuSandbox] 🎨 FALLBACK: Total ${injectedCount} styles injected for ${appName}`);\n return injectedCount;\n }\n}","/**\n * 📋 WU-MANIFEST: SECURE MANIFEST SYSTEM\n * Validación estricta de wu.json para seguridad\n */\n\nexport class WuManifest {\n constructor() {\n this.cache = new Map();\n this.schemas = new Map();\n\n // 🔐 Configuración de seguridad\n this.security = {\n maxManifestSize: 100 * 1024, // 100KB máximo\n maxNameLength: 50,\n maxEntryLength: 200,\n maxExports: 100,\n maxImports: 50,\n maxRoutes: 100,\n // Patrones peligrosos en paths\n dangerousPatterns: [\n /\\.\\./, // Path traversal\n /^\\/etc\\//, // System paths\n /^\\/proc\\//,\n /^file:\\/\\//, // File protocol\n /javascript:/i, // JS injection\n /data:/i, // Data URLs\n /<script/i, // Script tags\n /on\\w+\\s*=/i // Event handlers\n ],\n // Dominios bloqueados\n blockedDomains: [\n 'evil.com',\n 'malware.com'\n ]\n };\n\n this.defineSchema();\n }\n\n /**\n * Definir schema de validación para wu.json\n */\n defineSchema() {\n this.schemas.set('wu.json', {\n required: ['name', 'entry'],\n optional: ['wu'],\n wu: {\n optional: ['exports', 'imports', 'routes', 'permissions'],\n exports: 'object',\n imports: 'array',\n routes: 'array',\n permissions: 'array'\n }\n });\n }\n\n /**\n * Cargar manifest desde URL\n * @param {string} appUrl - URL base de la aplicación\n * @returns {Object} Manifest parseado y validado\n */\n async load(appUrl) {\n const manifestUrl = `${appUrl}/wu.json`;\n\n console.log(`[WuManifest] 📥 Loading manifest: ${manifestUrl}`);\n\n try {\n // Verificar cache\n if (this.cache.has(manifestUrl)) {\n console.log(`[WuManifest] ⚡ Cache hit: ${manifestUrl}`);\n return this.cache.get(manifestUrl);\n }\n\n // Cargar manifest\n const response = await fetch(manifestUrl, {\n cache: 'no-cache',\n headers: {\n 'Accept': 'application/json'\n }\n });\n\n if (!response.ok) {\n // Si no hay manifest, crear uno básico\n if (response.status === 404) {\n console.log(`[WuManifest] 📄 No manifest found, creating default for: ${appUrl}`);\n return this.createDefaultManifest(appUrl);\n }\n\n throw new Error(`HTTP ${response.status}: ${response.statusText}`);\n }\n\n const manifestText = await response.text();\n\n // 🔐 Validar tamaño del manifest\n if (manifestText.length > this.security.maxManifestSize) {\n throw new Error(`Manifest too large (${manifestText.length} bytes, max ${this.security.maxManifestSize})`);\n }\n\n // 🔐 Intentar parsear JSON de forma segura\n let manifest;\n try {\n manifest = JSON.parse(manifestText);\n } catch (parseError) {\n throw new Error(`Invalid JSON in manifest: ${parseError.message}`);\n }\n\n // Validar manifest\n const validatedManifest = this.validate(manifest);\n\n // Cachear resultado\n this.cache.set(manifestUrl, validatedManifest);\n\n console.log(`[WuManifest] ✅ Manifest loaded: ${manifest.name}`);\n return validatedManifest;\n\n } catch (error) {\n console.error(`[WuManifest] ❌ Failed to load manifest: ${manifestUrl}`, error);\n\n // En caso de error, intentar crear manifest por defecto\n try {\n return this.createDefaultManifest(appUrl);\n } catch (defaultError) {\n throw new Error(`Failed to load manifest from ${manifestUrl}: ${error.message}`);\n }\n }\n }\n\n /**\n * Crear manifest por defecto cuando no existe wu.json\n * @param {string} appUrl - URL de la aplicación\n * @returns {Object} Manifest por defecto\n */\n createDefaultManifest(appUrl) {\n // Extraer nombre de la app de la URL\n const appName = this.extractAppNameFromUrl(appUrl);\n\n const defaultManifest = {\n name: appName,\n entry: 'index.js',\n wu: {\n exports: {},\n imports: [],\n routes: [],\n permissions: []\n }\n };\n\n console.log(`[WuManifest] 🔧 Created default manifest for: ${appName}`);\n return defaultManifest;\n }\n\n /**\n * Extraer nombre de app desde URL\n * @param {string} url - URL de la aplicación\n * @returns {string} Nombre de la aplicación\n */\n extractAppNameFromUrl(url) {\n try {\n const urlObj = new URL(url);\n const pathSegments = urlObj.pathname.split('/').filter(Boolean);\n\n // Usar el último segmento como nombre de la app\n return pathSegments[pathSegments.length - 1] || 'unknown-app';\n } catch {\n // Si no es una URL válida, usar como está\n return url.replace(/[^a-zA-Z0-9-]/g, '') || 'unknown-app';\n }\n }\n\n /**\n * 🔐 SANITIZE STRING: Limpiar string de caracteres peligrosos\n */\n _sanitizeString(str) {\n if (typeof str !== 'string') return '';\n return str\n .replace(/[<>'\"]/g, '') // Remove HTML chars\n .replace(/[\\x00-\\x1F\\x7F]/g, '') // Remove control chars\n .trim();\n }\n\n /**\n * 🔐 CHECK DANGEROUS PATTERNS: Verificar patrones peligrosos\n */\n _hasDangerousPatterns(str) {\n if (typeof str !== 'string') return false;\n return this.security.dangerousPatterns.some(pattern => pattern.test(str));\n }\n\n /**\n * 🔐 VALIDATE URL: Verificar que URL es segura\n */\n _isUrlSafe(url) {\n if (typeof url !== 'string') return false;\n\n // Verificar patrones peligrosos\n if (this._hasDangerousPatterns(url)) {\n return false;\n }\n\n // Verificar dominios bloqueados\n try {\n const urlObj = new URL(url, 'http://localhost');\n if (this.security.blockedDomains.some(d => urlObj.hostname.includes(d))) {\n return false;\n }\n } catch {\n // Si no es URL válida, verificar como path\n if (this._hasDangerousPatterns(url)) {\n return false;\n }\n }\n\n return true;\n }\n\n /**\n * Validar manifest contra schema con validación de seguridad\n * @param {Object} manifest - Manifest a validar\n * @returns {Object} Manifest validado\n */\n validate(manifest) {\n const schema = this.schemas.get('wu.json');\n\n // 🔐 Verificar que manifest es un objeto\n if (!manifest || typeof manifest !== 'object' || Array.isArray(manifest)) {\n throw new Error('Manifest must be a valid object');\n }\n\n // Verificar campos requeridos\n for (const field of schema.required) {\n if (!manifest[field]) {\n throw new Error(`Required field missing: ${field}`);\n }\n }\n\n // 🔐 Validar nombre\n if (typeof manifest.name !== 'string') {\n throw new Error('name must be a string');\n }\n if (manifest.name.length > this.security.maxNameLength) {\n throw new Error(`name too long (max ${this.security.maxNameLength} chars)`);\n }\n if (this._hasDangerousPatterns(manifest.name)) {\n throw new Error('name contains dangerous patterns');\n }\n\n // 🔐 Validar entry\n if (typeof manifest.entry !== 'string') {\n throw new Error('entry must be a string');\n }\n if (manifest.entry.length > this.security.maxEntryLength) {\n throw new Error(`entry too long (max ${this.security.maxEntryLength} chars)`);\n }\n if (!this._isUrlSafe(manifest.entry)) {\n throw new Error('entry contains dangerous patterns');\n }\n\n // Verificar tipos en sección wu\n if (manifest.wu) {\n const wu = manifest.wu;\n\n if (wu.exports && typeof wu.exports !== 'object') {\n throw new Error('wu.exports must be an object');\n }\n\n // 🔐 Validar límites de exports\n if (wu.exports && Object.keys(wu.exports).length > this.security.maxExports) {\n throw new Error(`Too many exports (max ${this.security.maxExports})`);\n }\n\n // 🔐 Validar cada export path\n if (wu.exports) {\n for (const [key, path] of Object.entries(wu.exports)) {\n if (!this._isUrlSafe(path)) {\n throw new Error(`Dangerous export path: ${key}`);\n }\n }\n }\n\n if (wu.imports && !Array.isArray(wu.imports)) {\n throw new Error('wu.imports must be an array');\n }\n\n // 🔐 Validar límites de imports\n if (wu.imports && wu.imports.length > this.security.maxImports) {\n throw new Error(`Too many imports (max ${this.security.maxImports})`);\n }\n\n if (wu.routes && !Array.isArray(wu.routes)) {\n throw new Error('wu.routes must be an array');\n }\n\n // 🔐 Validar límites de routes\n if (wu.routes && wu.routes.length > this.security.maxRoutes) {\n throw new Error(`Too many routes (max ${this.security.maxRoutes})`);\n }\n\n if (wu.permissions && !Array.isArray(wu.permissions)) {\n throw new Error('wu.permissions must be an array');\n }\n }\n\n // Normalizar y limpiar manifest\n return this.normalize(manifest);\n }\n\n /**\n * Normalizar manifest\n * @param {Object} manifest - Manifest a normalizar\n * @returns {Object} Manifest normalizado\n */\n normalize(manifest) {\n const normalized = {\n name: manifest.name.trim(),\n entry: this.normalizeEntry(manifest.entry),\n wu: {\n exports: manifest.wu?.exports || {},\n imports: manifest.wu?.imports || [],\n routes: manifest.wu?.routes || [],\n permissions: manifest.wu?.permissions || []\n }\n };\n\n // Preservar campos opcionales del manifest (styleMode, version, folder, etc.)\n if (manifest.styleMode) {\n normalized.styleMode = manifest.styleMode;\n }\n if (manifest.version) {\n normalized.version = manifest.version;\n }\n if (manifest.folder) {\n normalized.folder = manifest.folder;\n }\n\n // Normalizar exports\n if (normalized.wu.exports) {\n const normalizedExports = {};\n for (const [key, path] of Object.entries(normalized.wu.exports)) {\n normalizedExports[key] = this.normalizeComponentPath(path);\n }\n normalized.wu.exports = normalizedExports;\n }\n\n // Validar imports\n normalized.wu.imports = normalized.wu.imports.filter(imp => {\n if (typeof imp !== 'string' || !imp.includes('.')) {\n console.warn(`[WuManifest] Invalid import format: ${imp}`);\n return false;\n }\n return true;\n });\n\n return normalized;\n }\n\n /**\n * Normalizar entry path\n * @param {string} entry - Entry path\n * @returns {string} Entry normalizado\n */\n normalizeEntry(entry) {\n if (!entry) return 'index.js';\n\n let normalized = entry.trim();\n\n // Remover ./ inicial si está presente\n if (normalized.startsWith('./')) {\n normalized = normalized.substring(2);\n }\n\n // Agregar extensión si no la tiene\n if (!normalized.includes('.')) {\n normalized += '.js';\n }\n\n return normalized;\n }\n\n /**\n * Normalizar path de componente\n * @param {string} path - Path del componente\n * @returns {string} Path normalizado\n */\n normalizeComponentPath(path) {\n if (!path) return '';\n\n let normalized = path.trim();\n\n // Remover ./ inicial si está presente\n if (normalized.startsWith('./')) {\n normalized = normalized.substring(2);\n }\n\n // Agregar extensión si no la tiene\n if (!normalized.includes('.')) {\n normalized += '.js';\n }\n\n return normalized;\n }\n\n /**\n * Validar dependencias de imports\n * @param {Array} imports - Lista de imports\n * @param {Map} availableApps - Apps disponibles\n * @returns {Object} Resultado de validación\n */\n validateDependencies(imports, availableApps) {\n const result = {\n valid: [],\n invalid: [],\n missing: []\n };\n\n for (const importPath of imports) {\n const [appName, componentName] = importPath.split('.');\n\n if (!appName || !componentName) {\n result.invalid.push({\n import: importPath,\n reason: 'Invalid format. Use \"app.component\"'\n });\n continue;\n }\n\n const app = availableApps.get(appName);\n if (!app) {\n result.missing.push({\n import: importPath,\n app: appName,\n reason: 'App not registered'\n });\n continue;\n }\n\n const manifest = app.manifest;\n const exportExists = manifest?.wu?.exports?.[componentName];\n\n if (!exportExists) {\n result.invalid.push({\n import: importPath,\n reason: `Component ${componentName} not exported by ${appName}`\n });\n continue;\n }\n\n result.valid.push({\n import: importPath,\n app: appName,\n component: componentName,\n path: exportExists\n });\n }\n\n return result;\n }\n\n /**\n * Crear manifest programáticamente\n * @param {string} name - Nombre de la app\n * @param {Object} config - Configuración\n * @returns {Object} Manifest creado\n */\n create(name, config = {}) {\n const manifest = {\n name: name,\n entry: config.entry || 'index.js',\n wu: {\n exports: config.exports || {},\n imports: config.imports || [],\n routes: config.routes || [],\n permissions: config.permissions || []\n }\n };\n\n return this.normalize(manifest);\n }\n\n /**\n * Limpiar cache de manifests\n * @param {string} pattern - Patrón opcional para limpiar URLs específicas\n */\n clearCache(pattern) {\n if (pattern) {\n const regex = new RegExp(pattern);\n for (const [url] of this.cache) {\n if (regex.test(url)) {\n this.cache.delete(url);\n console.log(`[WuManifest] 🗑️ Cleared cache for: ${url}`);\n }\n }\n } else {\n this.cache.clear();\n console.log(`[WuManifest] 🗑️ Manifest cache cleared completely`);\n }\n }\n\n /**\n * Obtener estadísticas del sistema de manifests\n */\n getStats() {\n return {\n cached: this.cache.size,\n schemas: this.schemas.size,\n cacheKeys: Array.from(this.cache.keys())\n };\n }\n}","/**\n * 📝 WU-LOGGER: Sistema de logging inteligente para entornos\n * Controla los logs automáticamente según el entorno\n */\n\nexport class WuLogger {\n constructor() {\n // Detectar entorno automáticamente\n this.isDevelopment = this.detectEnvironment();\n // En desarrollo: warn (menos ruido), en producción: error\n this.logLevel = this.isDevelopment ? 'warn' : 'error';\n\n this.levels = {\n debug: 0,\n info: 1,\n warn: 2,\n error: 3,\n silent: 4\n };\n }\n\n /**\n * Detectar si estamos en desarrollo\n */\n detectEnvironment() {\n // Múltiples formas de detectar desarrollo\n return (\n // Vite development\n window.location.hostname === 'localhost' ||\n window.location.hostname === '127.0.0.1' ||\n window.location.port !== '' ||\n // NODE_ENV si está disponible\n (typeof process !== 'undefined' && process.env?.NODE_ENV === 'development') ||\n // URL params para forzar debug\n new URLSearchParams(window.location.search).has('wu-debug') ||\n // Manual override\n window.WU_DEBUG === true\n );\n }\n\n /**\n * Configurar nivel de logging\n */\n setLevel(level) {\n this.logLevel = level;\n return this;\n }\n\n /**\n * Habilitar/deshabilitar development mode\n */\n setDevelopment(isDev) {\n this.isDevelopment = isDev;\n this.logLevel = isDev ? 'debug' : 'error';\n return this;\n }\n\n /**\n * Verificar si debemos mostrar el log\n */\n shouldLog(level) {\n return this.levels[level] >= this.levels[this.logLevel];\n }\n\n /**\n * Logging methods\n */\n debug(...args) {\n if (this.shouldLog('debug')) {\n console.log(...args);\n }\n }\n\n info(...args) {\n if (this.shouldLog('info')) {\n console.info(...args);\n }\n }\n\n warn(...args) {\n if (this.shouldLog('warn')) {\n console.warn(...args);\n }\n }\n\n error(...args) {\n if (this.shouldLog('error')) {\n console.error(...args);\n }\n }\n\n /**\n * Logging con contexto Wu\n */\n wu(level, ...args) {\n if (this.shouldLog(level)) {\n const method = level === 'debug' ? 'log' : level;\n console[method]('[Wu]', ...args);\n }\n }\n\n /**\n * Helper methods específicos para Wu\n */\n wuDebug(...args) { this.wu('debug', ...args); }\n wuInfo(...args) { this.wu('info', ...args); }\n wuWarn(...args) { this.wu('warn', ...args); }\n wuError(...args) { this.wu('error', ...args); }\n}\n\n// Singleton instance\nexport const logger = new WuLogger();\n\n// Helper para compatibilidad con logs existentes\nexport const wuLog = {\n debug: (...args) => logger.wuDebug(...args),\n info: (...args) => logger.wuInfo(...args),\n warn: (...args) => logger.wuWarn(...args),\n error: (...args) => logger.wuError(...args)\n};\n\n/**\n * 🔇 Silenciar todos los logs de Wu Framework\n * Útil en producción para eliminar todo el ruido\n */\nexport function silenceAllLogs() {\n logger.setLevel('silent');\n}\n\n/**\n * 🔊 Restaurar logs (nivel debug)\n */\nexport function enableAllLogs() {\n logger.setLevel('debug');\n}","/**\r\n * 🚀 WU-STORE: Ultra-High Performance State Management\r\n *\r\n * Basado en patrones de Disruptor y Vert.x\r\n * - Ring Buffer para zero-allocation\r\n * - Lock-free operations\r\n * - Event Bus para pub/sub\r\n * - API minimalista: get(), set(), on()\r\n */\r\n\r\nexport class WuStore {\r\n constructor(bufferSize = 256) {\r\n // Ring Buffer configuration\r\n this.bufferSize = this.nextPowerOfTwo(bufferSize);\r\n this.mask = this.bufferSize - 1;\r\n this.buffer = new Array(this.bufferSize);\r\n this.cursor = 0;\r\n\r\n // State storage\r\n this.state = {};\r\n\r\n // Event listeners map: path -> Set of callbacks\r\n this.listeners = new Map();\r\n\r\n // Pattern listeners for wildcards\r\n this.patternListeners = new Map();\r\n\r\n // Performance metrics\r\n this.metrics = {\r\n reads: 0,\r\n writes: 0,\r\n notifications: 0\r\n };\r\n\r\n // Initialize ring buffer slots\r\n for (let i = 0; i < this.bufferSize; i++) {\r\n this.buffer[i] = { path: null, value: null, timestamp: 0 };\r\n }\r\n\r\n // No global pollution - proper library architecture\r\n }\r\n\r\n /**\r\n * Get value from store\r\n * @param {string} path - Dot notation path (e.g., 'user.name')\r\n * @returns {*} Value at path or entire state if no path\r\n */\r\n get(path) {\r\n this.metrics.reads++;\r\n\r\n if (!path) return this.state;\r\n\r\n // Fast path resolution with reduce\r\n return path.split('.').reduce((obj, key) => obj?.[key], this.state);\r\n }\r\n\r\n /**\r\n * Set value in store with Ring Buffer\r\n * @param {string} path - Dot notation path\r\n * @param {*} value - Value to set\r\n * @returns {number} Sequence number\r\n */\r\n set(path, value) {\r\n this.metrics.writes++;\r\n\r\n // Write to ring buffer (lock-free)\r\n const sequence = this.cursor++;\r\n const index = sequence & this.mask;\r\n\r\n // Reuse buffer slot (zero allocation)\r\n const event = this.buffer[index];\r\n event.path = path;\r\n event.value = value;\r\n event.timestamp = performance.now();\r\n\r\n // Update state synchronously\r\n this.updateState(path, value);\r\n\r\n // Schedule async notifications (non-blocking)\r\n queueMicrotask(() => {\r\n this.notify(path, value);\r\n this.notifyPatterns(path, value);\r\n });\r\n\r\n return sequence;\r\n }\r\n\r\n /**\r\n * Subscribe to state changes\r\n * @param {string} pattern - Path or pattern (supports * wildcard)\r\n * @param {Function} callback - Callback function\r\n * @returns {Function} Unsubscribe function\r\n */\r\n on(pattern, callback) {\r\n // Check if pattern contains wildcards\r\n if (pattern.includes('*')) {\r\n // Pattern subscription\r\n if (!this.patternListeners.has(pattern)) {\r\n this.patternListeners.set(pattern, new Set());\r\n }\r\n this.patternListeners.get(pattern).add(callback);\r\n\r\n // Return unsubscribe function\r\n return () => {\r\n const listeners = this.patternListeners.get(pattern);\r\n if (listeners) {\r\n listeners.delete(callback);\r\n if (listeners.size === 0) {\r\n this.patternListeners.delete(pattern);\r\n }\r\n }\r\n };\r\n } else {\r\n // Direct path subscription\r\n if (!this.listeners.has(pattern)) {\r\n this.listeners.set(pattern, new Set());\r\n }\r\n this.listeners.get(pattern).add(callback);\r\n\r\n // Return unsubscribe function\r\n return () => {\r\n const listeners = this.listeners.get(pattern);\r\n if (listeners) {\r\n listeners.delete(callback);\r\n if (listeners.size === 0) {\r\n this.listeners.delete(pattern);\r\n }\r\n }\r\n };\r\n }\r\n }\r\n\r\n /**\r\n * Batch set multiple values\r\n * @param {Object} updates - Object with path:value pairs\r\n */\r\n batch(updates) {\r\n const sequences = [];\r\n\r\n for (const [path, value] of Object.entries(updates)) {\r\n sequences.push(this.set(path, value));\r\n }\r\n\r\n return sequences;\r\n }\r\n\r\n /**\r\n * Get current metrics\r\n * @returns {Object} Performance metrics\r\n */\r\n getMetrics() {\r\n return {\r\n ...this.metrics,\r\n bufferUtilization: (this.cursor % this.bufferSize) / this.bufferSize,\r\n listenerCount: this.listeners.size + this.patternListeners.size\r\n };\r\n }\r\n\r\n // Private methods\r\n\r\n nextPowerOfTwo(n) {\r\n return Math.pow(2, Math.ceil(Math.log2(n)));\r\n }\r\n\r\n updateState(path, value) {\r\n if (!path) {\r\n this.state = value;\r\n return;\r\n }\r\n\r\n const keys = path.split('.');\r\n const last = keys.pop();\r\n\r\n // Create nested structure if needed\r\n let target = this.state;\r\n for (const key of keys) {\r\n if (!(key in target) || typeof target[key] !== 'object') {\r\n target[key] = {};\r\n }\r\n target = target[key];\r\n }\r\n\r\n target[last] = value;\r\n }\r\n\r\n notify(path, value) {\r\n this.metrics.notifications++;\r\n\r\n // Notify exact path listeners\r\n const exactListeners = this.listeners.get(path);\r\n if (exactListeners) {\r\n exactListeners.forEach(callback => {\r\n try {\r\n callback(value, path);\r\n } catch (error) {\r\n console.error('[WuStore] Listener error:', error);\r\n }\r\n });\r\n }\r\n\r\n // Notify parent path listeners\r\n const parts = path.split('.');\r\n for (let i = parts.length - 1; i > 0; i--) {\r\n const parentPath = parts.slice(0, i).join('.');\r\n const parentListeners = this.listeners.get(parentPath);\r\n if (parentListeners) {\r\n const parentValue = this.get(parentPath);\r\n parentListeners.forEach(callback => {\r\n try {\r\n callback(parentValue, parentPath);\r\n } catch (error) {\r\n console.error('[WuStore] Parent listener error:', error);\r\n }\r\n });\r\n }\r\n }\r\n }\r\n\r\n notifyPatterns(path, value) {\r\n // Check all pattern listeners\r\n for (const [pattern, listeners] of this.patternListeners) {\r\n if (this.matchesPattern(path, pattern)) {\r\n listeners.forEach(callback => {\r\n try {\r\n callback({ path, value });\r\n } catch (error) {\r\n console.error('[WuStore] Pattern listener error:', error);\r\n }\r\n });\r\n }\r\n }\r\n }\r\n\r\n matchesPattern(path, pattern) {\r\n // Convert pattern to regex\r\n // user.* matches user.name, user.email, etc.\r\n // *.name matches user.name, post.name, etc.\r\n // * matches everything\r\n\r\n if (pattern === '*') return true;\r\n\r\n const regexPattern = pattern\r\n .split('.')\r\n .map(part => part === '*' ? '[^.]+' : part.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&'))\r\n .join('\\\\.');\r\n\r\n const regex = new RegExp(`^${regexPattern}$`);\r\n return regex.test(path);\r\n }\r\n\r\n /**\r\n * Clear all state and listeners\r\n */\r\n clear() {\r\n this.state = {};\r\n this.listeners.clear();\r\n this.patternListeners.clear();\r\n this.cursor = 0;\r\n\r\n // Clear buffer\r\n for (let i = 0; i < this.bufferSize; i++) {\r\n this.buffer[i].path = null;\r\n this.buffer[i].value = null;\r\n this.buffer[i].timestamp = 0;\r\n }\r\n }\r\n\r\n /**\r\n * Get recent events from ring buffer\r\n * @param {number} count - Number of recent events\r\n * @returns {Array} Recent events\r\n */\r\n getRecentEvents(count = 10) {\r\n const events = [];\r\n const start = Math.max(0, this.cursor - count);\r\n\r\n for (let i = start; i < this.cursor && events.length < count; i++) {\r\n const index = i & this.mask;\r\n const event = this.buffer[index];\r\n if (event.path) {\r\n events.push({\r\n path: event.path,\r\n value: event.value,\r\n timestamp: event.timestamp\r\n });\r\n }\r\n }\r\n\r\n return events.reverse();\r\n }\r\n}\r\n\r\n// Create singleton instance\r\nconst store = new WuStore();\r\n\r\n// Export both class and instance\r\nexport default store;\r\n","/**\n * 🎯 WU-APP: SIMPLIFIED API WRAPPER\n *\n * Wrapper simple para uso declarativo de microfrontends\n * Mantiene todo el core de wu-framework pero simplifica el uso\n */\n\nexport class WuApp {\n /**\n * @param {string} name - Nombre de la app\n * @param {Object} config - Configuración de la app\n * @param {string} config.url - URL donde está corriendo la app\n * @param {string} [config.container] - Selector del contenedor (opcional)\n * @param {Object} wu - Instancia de WuCore\n */\n constructor(name, config, wu) {\n this.name = name\n this.url = config.url\n this.container = config.container\n this._wu = wu\n this._mounted = false\n this._autoInit = config.autoInit !== false // Default true\n\n // Auto-register app in wu-framework\n if (this._autoInit) {\n this._registerApp()\n }\n }\n\n /**\n * Registrar app en wu-framework\n * @private\n */\n _registerApp() {\n if (!this._wu.apps.has(this.name)) {\n // Usar el método interno de wu-framework para registrar\n this._wu.apps.set(this.name, {\n name: this.name,\n url: this.url,\n status: 'registered'\n })\n console.log(`📦 App registered: ${this.name} at ${this.url}`)\n }\n }\n\n /**\n * Montar la app en el contenedor\n * @param {string} [container] - Selector del contenedor (opcional, usa config.container si no se pasa)\n * @returns {Promise<void>}\n */\n async mount(container) {\n const targetContainer = container || this.container\n\n if (!targetContainer) {\n throw new Error(`Container not specified for app: ${this.name}`)\n }\n\n // Asegurar que wu-framework está inicializado\n if (!this._wu.initialized) {\n await this._wu.init({\n apps: [{ name: this.name, url: this.url }]\n })\n }\n\n // Montar usando wu-framework core\n await this._wu.mount(this.name, targetContainer)\n this._mounted = true\n\n return this\n }\n\n /**\n * Desmontar la app\n * @returns {Promise<void>}\n */\n async unmount() {\n if (!this._mounted) {\n console.warn(`⚠️ App ${this.name} is not mounted`)\n return this\n }\n\n await this._wu.unmount(this.name)\n this._mounted = false\n\n return this\n }\n\n /**\n * Remontar la app (útil para recargas)\n * @param {string} [container] - Selector del contenedor\n * @returns {Promise<void>}\n */\n async remount(container) {\n await this.unmount()\n await this.mount(container)\n return this\n }\n\n /**\n * Verificar si la app está montada\n * @returns {boolean}\n */\n get isMounted() {\n return this._mounted && this._wu.mounted?.has(this.name)\n }\n\n /**\n * Obtener información de la app\n * @returns {Object}\n */\n get info() {\n return {\n name: this.name,\n url: this.url,\n container: this.container,\n mounted: this.isMounted,\n status: this._wu.apps.get(this.name)?.status || 'unknown'\n }\n }\n\n /**\n * Recargar la app (limpiar cache y remontar)\n * @returns {Promise<void>}\n */\n async reload() {\n console.log(`🔄 Reloading app: ${this.name}`)\n\n await this.unmount()\n\n // Limpiar caches\n if (this._wu.loader?.clearCache) {\n this._wu.loader.clearCache(this.name)\n }\n if (this._wu.manifest?.clearCache) {\n this._wu.manifest.clearCache(this.name)\n }\n\n await this.mount()\n console.log(`✅ App reloaded: ${this.name}`)\n\n return this\n }\n\n /**\n * Verificar el estado de la app\n * @returns {Object}\n */\n async verify() {\n const container = document.querySelector(this.container)\n const hasShadowDOM = container?.shadowRoot !== null\n const hasContent = (container?.shadowRoot?.children?.length || 0) > 0\n\n return {\n name: this.name,\n mounted: this.isMounted,\n container: {\n found: !!container,\n selector: this.container,\n hasShadowDOM,\n hasContent\n },\n wu: {\n registered: this._wu.apps.has(this.name),\n mountedInWu: this._wu.mounted?.has(this.name)\n }\n }\n }\n\n /**\n * Shorthand para mount\n */\n async start(container) {\n return await this.mount(container)\n }\n\n /**\n * Shorthand para unmount\n */\n async stop() {\n return await this.unmount()\n }\n\n /**\n * Destruir la app completamente\n */\n async destroy() {\n await this.unmount()\n this._wu.apps.delete(this.name)\n this._mounted = false\n console.log(`🗑️ App destroyed: ${this.name}`)\n }\n}\n","/**\n * 💾 WU-CACHE: SECURE INTERNAL CACHING\n *\n * Sistema de caché INTERNO con rate limiting\n * - Rate limiting para prevenir abuso\n * - Cache persistente y en memoria\n * - TTL y LRU eviction\n *\n * ⚠️ USO INTERNO: No exponer en API pública\n */\n\nexport class WuCache {\n constructor(options = {}) {\n this.config = {\n maxSize: options.maxSize || 50, // MB\n maxItems: options.maxItems || 100,\n defaultTTL: options.defaultTTL || 3600000, // 1 hour\n persistent: options.persistent !== false,\n storage: options.storage || 'memory',\n compression: options.compression || false\n };\n\n // 🔐 Rate limiting configuration\n this.rateLimiting = {\n enabled: options.rateLimiting !== false,\n maxOpsPerSecond: options.maxOpsPerSecond || 100,\n windowMs: 1000, // 1 second window\n cooldownMs: options.cooldownMs || 5000, // 5 second cooldown after limit\n operations: [],\n inCooldown: false,\n cooldownUntil: 0\n };\n\n // Memory cache\n this.memoryCache = new Map();\n\n // LRU tracking\n this.accessOrder = new Map();\n\n // Statistics\n this.stats = {\n hits: 0,\n misses: 0,\n sets: 0,\n evictions: 0,\n size: 0,\n rateLimited: 0 // 🔐 Contador de operaciones rechazadas\n };\n }\n\n /**\n * 🔐 CHECK RATE LIMIT: Verificar si la operación está permitida\n * @returns {boolean} true si la operación está permitida\n */\n _checkRateLimit() {\n if (!this.rateLimiting.enabled) return true;\n\n const now = Date.now();\n\n // Verificar si estamos en cooldown\n if (this.rateLimiting.inCooldown) {\n if (now < this.rateLimiting.cooldownUntil) {\n this.stats.rateLimited++;\n return false;\n }\n // Cooldown terminado\n this.rateLimiting.inCooldown = false;\n this.rateLimiting.operations = [];\n }\n\n // Limpiar operaciones antiguas (fuera de la ventana)\n const windowStart = now - this.rateLimiting.windowMs;\n this.rateLimiting.operations = this.rateLimiting.operations.filter(\n ts => ts > windowStart\n );\n\n // Verificar límite\n if (this.rateLimiting.operations.length >= this.rateLimiting.maxOpsPerSecond) {\n // Activar cooldown\n this.rateLimiting.inCooldown = true;\n this.rateLimiting.cooldownUntil = now + this.rateLimiting.cooldownMs;\n this.stats.rateLimited++;\n console.warn(`[WuCache] 🚫 Rate limit exceeded. Cooldown for ${this.rateLimiting.cooldownMs}ms`);\n return false;\n }\n\n // Registrar operación\n this.rateLimiting.operations.push(now);\n return true;\n }\n\n /**\n * 🔐 GET RATE LIMIT STATUS\n */\n getRateLimitStatus() {\n const now = Date.now();\n return {\n enabled: this.rateLimiting.enabled,\n inCooldown: this.rateLimiting.inCooldown,\n cooldownRemaining: this.rateLimiting.inCooldown\n ? Math.max(0, this.rateLimiting.cooldownUntil - now)\n : 0,\n currentOps: this.rateLimiting.operations.length,\n maxOps: this.rateLimiting.maxOpsPerSecond,\n rateLimited: this.stats.rateLimited\n };\n }\n\n /**\n * 🔍 GET: Obtener valor del cache\n * @param {string} key - Clave\n * @returns {*} Valor cacheado o null\n */\n get(key) {\n // 🔐 Check rate limit\n if (!this._checkRateLimit()) {\n return null; // Silently fail on rate limit\n }\n\n // 1. Buscar en memoria\n if (this.memoryCache.has(key)) {\n const entry = this.memoryCache.get(key);\n\n // Verificar TTL\n if (this.isExpired(entry)) {\n this.delete(key);\n this.stats.misses++;\n return null;\n }\n\n // Actualizar acceso (LRU)\n this.accessOrder.set(key, Date.now());\n this.stats.hits++;\n\n return entry.value;\n }\n\n // 2. Buscar en storage persistente\n if (this.config.persistent) {\n const stored = this.getFromStorage(key);\n if (stored) {\n // Restaurar a memoria\n this.memoryCache.set(key, stored);\n this.accessOrder.set(key, Date.now());\n this.stats.hits++;\n return stored.value;\n }\n }\n\n this.stats.misses++;\n return null;\n }\n\n /**\n * 💾 SET: Guardar valor en cache\n * @param {string} key - Clave\n * @param {*} value - Valor\n * @param {number} ttl - Time to live (ms)\n * @returns {boolean}\n */\n set(key, value, ttl) {\n // 🔐 Check rate limit\n if (!this._checkRateLimit()) {\n return false; // Reject on rate limit\n }\n\n try {\n const entry = {\n key,\n value,\n timestamp: Date.now(),\n ttl: ttl || this.config.defaultTTL,\n size: this.estimateSize(value)\n };\n\n // Verificar si necesitamos hacer espacio\n const hasSpace = this.ensureSpace(entry.size);\n if (hasSpace === false) {\n console.warn(`[WuCache] ⚠️ Cannot cache item: ${key} (too large)`);\n return false;\n }\n\n // Guardar en memoria\n this.memoryCache.set(key, entry);\n this.accessOrder.set(key, Date.now());\n\n // Guardar en storage persistente\n if (this.config.persistent) {\n this.saveToStorage(key, entry);\n }\n\n this.stats.sets++;\n this.stats.size += entry.size;\n\n return true;\n } catch (error) {\n console.warn('[WuCache] ⚠️ Failed to set cache:', error);\n return false;\n }\n }\n\n /**\n * 🗑️ DELETE: Eliminar del cache\n * @param {string} key - Clave\n */\n delete(key) {\n const entry = this.memoryCache.get(key);\n if (entry) {\n this.stats.size -= entry.size;\n }\n\n this.memoryCache.delete(key);\n this.accessOrder.delete(key);\n\n if (this.config.persistent) {\n this.deleteFromStorage(key);\n }\n }\n\n /**\n * 🧹 CLEAR: Limpiar todo el cache\n */\n clear() {\n this.memoryCache.clear();\n this.accessOrder.clear();\n this.stats.size = 0;\n\n if (this.config.persistent) {\n this.clearStorage();\n }\n\n console.log('[WuCache] 🧹 Cache cleared');\n }\n\n /**\n * ⏰ IS EXPIRED: Verificar si entrada expiró\n * @param {Object} entry - Entrada del cache\n * @returns {boolean}\n */\n isExpired(entry) {\n if (!entry.ttl) return false;\n return Date.now() - entry.timestamp > entry.ttl;\n }\n\n /**\n * 📏 ESTIMATE SIZE: Estimar tamaño de un valor\n * @param {*} value - Valor\n * @returns {number} Tamaño en bytes\n */\n estimateSize(value) {\n if (typeof value === 'string') {\n return value.length * 2; // UTF-16\n }\n\n if (typeof value === 'object') {\n try {\n return JSON.stringify(value).length * 2;\n } catch {\n return 1000; // Estimación por defecto\n }\n }\n\n return 100; // Tamaño por defecto para primitivos\n }\n\n /**\n * 🎯 ENSURE SPACE: Asegurar espacio en cache (LRU eviction)\n * @param {number} neededSize - Tamaño necesario\n */\n ensureSpace(neededSize) {\n const maxSizeBytes = this.config.maxSize * 1024 * 1024;\n\n // 🛡️ FIX: Validar que el item no sea más grande que el máximo permitido\n if (neededSize > maxSizeBytes) {\n console.warn(`[WuCache] ⚠️ Item size (${neededSize}) exceeds max cache size (${maxSizeBytes}). Skipping.`);\n return false;\n }\n\n // 🛡️ FIX: Límite de iteraciones para evitar loop infinito\n const maxIterations = this.config.maxItems + 10;\n let iterations = 0;\n\n // Verificar si necesitamos limpiar\n while ((this.stats.size + neededSize > maxSizeBytes ||\n this.memoryCache.size >= this.config.maxItems) &&\n iterations < maxIterations) {\n\n iterations++;\n\n // 🛡️ FIX: Si el cache está vacío pero aún no hay espacio, salir\n if (this.memoryCache.size === 0) {\n console.warn('[WuCache] ⚠️ Cache empty but still no space. Breaking loop.');\n break;\n }\n\n // Encontrar entrada menos recientemente usada (LRU)\n let oldestKey = null;\n let oldestTime = Infinity;\n\n for (const [key, time] of this.accessOrder) {\n if (time < oldestTime) {\n oldestTime = time;\n oldestKey = key;\n }\n }\n\n if (oldestKey) {\n console.log(`[WuCache] 🗑️ Evicting LRU entry: ${oldestKey}`);\n this.delete(oldestKey);\n this.stats.evictions++;\n } else {\n break;\n }\n }\n\n // 🛡️ FIX: Log si alcanzamos el límite de iteraciones\n if (iterations >= maxIterations) {\n console.error(`[WuCache] 🚨 Max eviction iterations reached (${maxIterations}). Possible infinite loop prevented.`);\n }\n\n return true;\n }\n\n /**\n * 💽 GET FROM STORAGE: Obtener del storage persistente\n * @param {string} key - Clave\n * @returns {Object|null}\n */\n getFromStorage(key) {\n try {\n const storage = this.getStorage();\n const stored = storage.getItem(`wu_cache_${key}`);\n\n if (stored) {\n return JSON.parse(stored);\n }\n } catch (error) {\n console.warn('[WuCache] ⚠️ Failed to get from storage:', error);\n }\n return null;\n }\n\n /**\n * 💾 SAVE TO STORAGE: Guardar en storage persistente\n * @param {string} key - Clave\n * @param {Object} entry - Entrada\n */\n saveToStorage(key, entry) {\n try {\n const storage = this.getStorage();\n storage.setItem(`wu_cache_${key}`, JSON.stringify(entry));\n } catch (error) {\n // Storage lleno, limpiar entradas antiguas\n console.warn('[WuCache] ⚠️ Storage full, cleaning old entries');\n this.cleanOldStorageEntries();\n\n try {\n storage.setItem(`wu_cache_${key}`, JSON.stringify(entry));\n } catch {\n console.warn('[WuCache] ⚠️ Failed to save to storage after cleanup');\n }\n }\n }\n\n /**\n * 🗑️ DELETE FROM STORAGE: Eliminar del storage\n * @param {string} key - Clave\n */\n deleteFromStorage(key) {\n try {\n const storage = this.getStorage();\n storage.removeItem(`wu_cache_${key}`);\n } catch (error) {\n console.warn('[WuCache] ⚠️ Failed to delete from storage:', error);\n }\n }\n\n /**\n * 🧹 CLEAR STORAGE: Limpiar storage\n */\n clearStorage() {\n try {\n const storage = this.getStorage();\n const keys = Object.keys(storage);\n\n keys.forEach(key => {\n if (key.startsWith('wu_cache_')) {\n storage.removeItem(key);\n }\n });\n } catch (error) {\n console.warn('[WuCache] ⚠️ Failed to clear storage:', error);\n }\n }\n\n /**\n * 🧹 CLEAN OLD STORAGE ENTRIES: Limpiar entradas antiguas del storage\n */\n cleanOldStorageEntries() {\n try {\n const storage = this.getStorage();\n const keys = Object.keys(storage);\n const entries = [];\n\n // Recopilar todas las entradas con timestamp\n keys.forEach(key => {\n if (key.startsWith('wu_cache_')) {\n try {\n const entry = JSON.parse(storage.getItem(key));\n entries.push({ key, timestamp: entry.timestamp });\n } catch {}\n }\n });\n\n // Ordenar por timestamp (más antiguas primero)\n entries.sort((a, b) => a.timestamp - b.timestamp);\n\n // Eliminar 25% de entradas más antiguas\n const toRemove = Math.ceil(entries.length * 0.25);\n for (let i = 0; i < toRemove; i++) {\n storage.removeItem(entries[i].key);\n }\n\n console.log(`[WuCache] 🧹 Cleaned ${toRemove} old storage entries`);\n } catch (error) {\n console.warn('[WuCache] ⚠️ Failed to clean old storage entries:', error);\n }\n }\n\n /**\n * 💽 GET STORAGE: Obtener instancia de storage\n * @returns {Storage}\n */\n getStorage() {\n if (this.config.storage === 'localStorage') {\n return window.localStorage;\n } else if (this.config.storage === 'sessionStorage') {\n return window.sessionStorage;\n }\n // Fallback a memoria\n return {\n getItem: () => null,\n setItem: () => {},\n removeItem: () => {},\n clear: () => {}\n };\n }\n\n /**\n * 📊 GET STATS: Obtener estadísticas del cache\n * @returns {Object}\n */\n getStats() {\n const hitRate = this.stats.hits + this.stats.misses > 0\n ? (this.stats.hits / (this.stats.hits + this.stats.misses) * 100).toFixed(2)\n : 0;\n\n return {\n ...this.stats,\n hitRate: `${hitRate}%`,\n items: this.memoryCache.size,\n sizeMB: (this.stats.size / 1024 / 1024).toFixed(2)\n };\n }\n\n /**\n * ⚙️ CONFIGURE: Actualizar configuración\n * @param {Object} config - Nueva configuración\n */\n configure(config) {\n this.config = {\n ...this.config,\n ...config\n };\n }\n}\n","/**\n * 📡 WU-EVENT-BUS: SECURE PUB/SUB SYSTEM\n *\n * Sistema de eventos para comunicación entre microfrontends\n * - Pub/Sub pattern con validación de origen\n * - Event namespaces\n * - Wildcards\n * - Event replay\n * - Verificación de apps autorizadas\n */\n\nexport class WuEventBus {\n constructor() {\n this.listeners = new Map();\n this.history = [];\n\n // 🔐 SEGURIDAD: Registro de apps autorizadas con tokens\n this.authorizedApps = new Map(); // appName -> { token, permissions }\n this.trustedEvents = new Set(['wu:*', 'system:*']); // Eventos del sistema\n\n this.config = {\n maxHistory: 100,\n enableReplay: true,\n enableWildcards: true,\n logEvents: false,\n // 🔐 Opciones de seguridad\n strictMode: false, // Si true, rechaza eventos de apps no autorizadas\n validateOrigin: true // Valida que appName sea una app registrada\n };\n\n this.stats = {\n emitted: 0,\n subscriptions: 0,\n rejected: 0 // Eventos rechazados por seguridad\n };\n }\n\n /**\n * 🔐 REGISTER APP: Registrar app autorizada para emitir eventos\n * @param {string} appName - Nombre de la app\n * @param {Object} options - { permissions: ['event:*'], token }\n * @returns {string} Token de autorización\n */\n registerApp(appName, options = {}) {\n const token = options.token || this._generateToken();\n\n this.authorizedApps.set(appName, {\n token,\n permissions: options.permissions || ['*'], // Por defecto puede emitir todo\n registeredAt: Date.now()\n });\n\n return token;\n }\n\n /**\n * 🔓 UNREGISTER APP: Desregistrar app\n * @param {string} appName\n */\n unregisterApp(appName) {\n this.authorizedApps.delete(appName);\n }\n\n /**\n * 🔐 VALIDATE ORIGIN: Verificar que el emisor está autorizado\n * @param {string} eventName\n * @param {string} appName\n * @param {string} token\n * @returns {boolean}\n */\n _validateOrigin(eventName, appName, token) {\n // Eventos del sistema siempre permitidos\n if (this._isSystemEvent(eventName)) {\n return true;\n }\n\n // Si no está en modo estricto, permitir todo\n if (!this.config.strictMode) {\n return true;\n }\n\n // Verificar que la app esté registrada\n const appInfo = this.authorizedApps.get(appName);\n if (!appInfo) {\n return false;\n }\n\n // Verificar token si se proporciona\n if (token && appInfo.token !== token) {\n return false;\n }\n\n // Verificar permisos\n return this._hasPermission(appInfo.permissions, eventName);\n }\n\n /**\n * 🔐 HAS PERMISSION: Verificar si la app tiene permiso para el evento\n */\n _hasPermission(permissions, eventName) {\n if (permissions.includes('*')) return true;\n\n return permissions.some(pattern => {\n if (pattern === eventName) return true;\n if (pattern.includes('*')) {\n return this.matchesWildcard(eventName, pattern);\n }\n return false;\n });\n }\n\n /**\n * 🔐 IS SYSTEM EVENT: Verificar si es un evento del sistema\n */\n _isSystemEvent(eventName) {\n return eventName.startsWith('wu:') ||\n eventName.startsWith('system:') ||\n eventName.startsWith('app:');\n }\n\n /**\n * 🔐 GENERATE TOKEN: Generar token único\n */\n _generateToken() {\n return `wu_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;\n }\n\n /**\n * 📢 EMIT: Emitir evento con validación de origen\n * @param {string} eventName - Nombre del evento\n * @param {*} data - Datos del evento\n * @param {Object} options - { appName, timestamp, meta, token }\n */\n emit(eventName, data, options = {}) {\n const appName = options.appName || 'unknown';\n\n // 🔐 Validar origen si está habilitado\n if (this.config.validateOrigin && this.config.strictMode) {\n if (!this._validateOrigin(eventName, appName, options.token)) {\n this.stats.rejected++;\n console.warn(`[WuEventBus] 🚫 Event rejected: ${eventName} from ${appName} (unauthorized)`);\n return false;\n }\n }\n\n const event = {\n name: eventName,\n data,\n timestamp: options.timestamp || Date.now(),\n appName,\n meta: options.meta || {},\n // 🔐 Marcar si el origen fue verificado\n verified: this.authorizedApps.has(appName)\n };\n\n // Agregar a historial\n if (this.config.enableReplay) {\n this.addToHistory(event);\n }\n\n // Log si está habilitado\n if (this.config.logEvents) {\n console.log(`[WuEventBus] 📢 ${eventName}`, data);\n }\n\n // Notificar listeners exactos\n const exactListeners = this.listeners.get(eventName);\n if (exactListeners) {\n exactListeners.forEach(callback => {\n try {\n callback(event);\n } catch (error) {\n console.error(`[WuEventBus] ❌ Error in listener for ${eventName}:`, error);\n }\n });\n }\n\n // Notificar listeners con wildcards\n if (this.config.enableWildcards) {\n this.notifyWildcardListeners(eventName, event);\n }\n\n this.stats.emitted++;\n return true;\n }\n\n /**\n * 👂 ON: Suscribirse a evento\n */\n on(eventName, callback) {\n if (!this.listeners.has(eventName)) {\n this.listeners.set(eventName, new Set());\n }\n\n this.listeners.get(eventName).add(callback);\n this.stats.subscriptions++;\n\n return () => this.off(eventName, callback);\n }\n\n /**\n * 🔇 OFF: Desuscribirse de evento\n */\n off(eventName, callback) {\n const listeners = this.listeners.get(eventName);\n if (listeners) {\n listeners.delete(callback);\n if (listeners.size === 0) {\n this.listeners.delete(eventName);\n }\n this.stats.subscriptions--;\n }\n }\n\n /**\n * 🎯 ONCE: Suscribirse una sola vez\n */\n once(eventName, callback) {\n const wrappedCallback = (event) => {\n callback(event);\n this.off(eventName, wrappedCallback);\n };\n return this.on(eventName, wrappedCallback);\n }\n\n /**\n * 🌟 WILDCARD LISTENERS\n */\n notifyWildcardListeners(eventName, event) {\n for (const [pattern, listeners] of this.listeners) {\n if (this.matchesWildcard(eventName, pattern)) {\n listeners.forEach(callback => {\n try {\n callback(event);\n } catch (error) {\n console.error(`[WuEventBus] ❌ Error in wildcard listener for ${pattern}:`, error);\n }\n });\n }\n }\n }\n\n /**\n * 🎯 MATCHES WILDCARD\n */\n matchesWildcard(eventName, pattern) {\n if (!pattern.includes('*')) return false;\n const regexPattern = pattern\n .replace(/\\./g, '\\\\.')\n .replace(/\\*/g, '.*');\n const regex = new RegExp(`^${regexPattern}$`);\n return regex.test(eventName);\n }\n\n /**\n * 📝 ADD TO HISTORY\n */\n addToHistory(event) {\n this.history.push(event);\n if (this.history.length > this.config.maxHistory) {\n this.history.shift();\n }\n }\n\n /**\n * 🔄 REPLAY\n */\n replay(eventNameOrPattern, callback) {\n const events = this.history.filter(event => {\n if (eventNameOrPattern.includes('*')) {\n return this.matchesWildcard(event.name, eventNameOrPattern);\n }\n return event.name === eventNameOrPattern;\n });\n\n events.forEach(event => {\n try {\n callback(event);\n } catch (error) {\n console.error(`[WuEventBus] ❌ Error replaying event:`, error);\n }\n });\n }\n\n /**\n * 🧹 CLEAR HISTORY\n */\n clearHistory(eventNameOrPattern) {\n if (!eventNameOrPattern) {\n this.history = [];\n return;\n }\n\n this.history = this.history.filter(event => {\n if (eventNameOrPattern.includes('*')) {\n return !this.matchesWildcard(event.name, eventNameOrPattern);\n }\n return event.name !== eventNameOrPattern;\n });\n }\n\n /**\n * 📊 GET STATS\n */\n getStats() {\n return {\n ...this.stats,\n activeListeners: this.listeners.size,\n historySize: this.history.length,\n authorizedApps: this.authorizedApps.size,\n listenersByEvent: Array.from(this.listeners.entries()).map(([event, listeners]) => ({\n event,\n listeners: listeners.size\n }))\n };\n }\n\n /**\n * ⚙️ CONFIGURE\n */\n configure(config) {\n this.config = { ...this.config, ...config };\n }\n\n /**\n * 🔐 ENABLE STRICT MODE: Activar modo estricto de seguridad\n */\n enableStrictMode() {\n this.config.strictMode = true;\n }\n\n /**\n * 🔓 DISABLE STRICT MODE\n */\n disableStrictMode() {\n this.config.strictMode = false;\n }\n\n /**\n * 🗑️ REMOVE ALL\n */\n removeAll() {\n this.listeners.clear();\n this.stats.subscriptions = 0;\n }\n}\n","/**\n * ⚡ WU-PERFORMANCE: MICROFRONTEND LIFECYCLE MONITORING\n *\n * Monitoreo de performance específico para operaciones del framework:\n * - Tiempos de mount/unmount\n * - Tiempos de carga de módulos\n * - Estadísticas por app\n */\n\nexport class WuPerformance {\n constructor() {\n this.metrics = new Map(); // appName -> metrics\n this.measurements = [];\n this.marks = new Map();\n\n this.config = {\n enabled: true,\n maxMeasurements: 1000\n };\n\n this.thresholds = {\n mount: 3000, // ms\n unmount: 1000, // ms\n load: 5000 // ms\n };\n\n console.log('[WuPerformance] ⚡ Framework performance monitoring initialized');\n }\n\n /**\n * 📊 START MEASURE: Iniciar medición\n * @param {string} name - Nombre de la medición\n * @param {string} appName - Nombre de la app (opcional)\n */\n startMeasure(name, appName = 'global') {\n const markName = `${appName}:${name}:start`;\n this.marks.set(markName, performance.now());\n\n console.log(`[WuPerformance] 📊 Measure started: ${markName}`);\n }\n\n /**\n * ⏹️ END MEASURE: Finalizar medición\n * @param {string} name - Nombre de la medición\n * @param {string} appName - Nombre de la app (opcional)\n * @returns {number} Duración en ms\n */\n endMeasure(name, appName = 'global') {\n const markName = `${appName}:${name}:start`;\n const startTime = this.marks.get(markName);\n\n if (!startTime) {\n console.warn(`[WuPerformance] ⚠️ No start mark found for: ${markName}`);\n return 0;\n }\n\n const duration = performance.now() - startTime;\n this.marks.delete(markName);\n\n // Registrar medición\n this.recordMeasurement({\n name,\n appName,\n duration,\n timestamp: Date.now(),\n type: 'duration'\n });\n\n // Verificar threshold\n if (this.checkThreshold(name, duration)) {\n console.warn(`[WuPerformance] ⚠️ Threshold exceeded for ${name}: ${duration.toFixed(2)}ms`);\n }\n\n console.log(`[WuPerformance] ⏹️ Measure ended: ${markName} (${duration.toFixed(2)}ms)`);\n return duration;\n }\n\n /**\n * 📝 RECORD MEASUREMENT: Registrar medición\n * @param {Object} measurement - Medición\n */\n recordMeasurement(measurement) {\n this.measurements.push(measurement);\n\n // Mantener tamaño máximo\n if (this.measurements.length > this.config.maxMeasurements) {\n this.measurements.shift();\n }\n\n // Actualizar métricas de la app\n if (!this.metrics.has(measurement.appName)) {\n this.metrics.set(measurement.appName, {\n appName: measurement.appName,\n measurements: [],\n stats: {}\n });\n }\n\n const appMetrics = this.metrics.get(measurement.appName);\n appMetrics.measurements.push(measurement);\n\n // Calcular estadísticas\n this.calculateStats(measurement.appName);\n }\n\n /**\n * 📊 CALCULATE STATS: Calcular estadísticas\n * @param {string} appName - Nombre de la app\n */\n calculateStats(appName) {\n const appMetrics = this.metrics.get(appName);\n if (!appMetrics) return;\n\n const measurements = appMetrics.measurements;\n if (measurements.length === 0) return;\n\n // Agrupar por tipo de medición\n const byType = {};\n measurements.forEach(m => {\n if (!byType[m.name]) byType[m.name] = [];\n byType[m.name].push(m.duration);\n });\n\n // Calcular estadísticas para cada tipo\n appMetrics.stats = {};\n Object.entries(byType).forEach(([name, durations]) => {\n appMetrics.stats[name] = {\n count: durations.length,\n avg: durations.reduce((a, b) => a + b, 0) / durations.length,\n min: Math.min(...durations),\n max: Math.max(...durations),\n last: durations[durations.length - 1]\n };\n });\n }\n\n /**\n * 🎯 CHECK THRESHOLD: Verificar si se excedió threshold\n * @param {string} name - Nombre de la medición\n * @param {number} value - Valor\n * @returns {boolean}\n */\n checkThreshold(name, value) {\n const threshold = this.thresholds[name];\n return threshold && value > threshold;\n }\n\n /**\n * 📊 GENERATE REPORT: Generar reporte de performance del framework\n * @returns {Object}\n */\n generateReport() {\n const report = {\n timestamp: Date.now(),\n totalMeasurements: this.measurements.length,\n apps: {}\n };\n\n // Agregar métricas por app\n for (const [appName, metrics] of this.metrics) {\n report.apps[appName] = {\n measurementCount: metrics.measurements.length,\n stats: metrics.stats\n };\n }\n\n return report;\n }\n\n /**\n * 📋 GET METRICS: Obtener métricas de una app\n * @param {string} appName - Nombre de la app\n * @returns {Object}\n */\n getMetrics(appName) {\n return this.metrics.get(appName) || null;\n }\n\n /**\n * 📊 GET ALL METRICS: Obtener todas las métricas\n * @returns {Object}\n */\n getAllMetrics() {\n const allMetrics = {};\n\n for (const [appName, metrics] of this.metrics) {\n allMetrics[appName] = metrics;\n }\n\n return allMetrics;\n }\n\n /**\n * 🧹 CLEAR METRICS: Limpiar métricas\n * @param {string} appName - Nombre de la app (opcional)\n */\n clearMetrics(appName) {\n if (appName) {\n this.metrics.delete(appName);\n this.measurements = this.measurements.filter(m => m.appName !== appName);\n } else {\n this.metrics.clear();\n this.measurements = [];\n }\n\n console.log(`[WuPerformance] 🧹 Metrics cleared${appName ? ` for ${appName}` : ''}`);\n }\n\n /**\n * ⚙️ CONFIGURE: Configurar performance monitor\n * @param {Object} config - Nueva configuración\n */\n configure(config) {\n this.config = {\n ...this.config,\n ...config\n };\n\n if (config.thresholds) {\n this.thresholds = {\n ...this.thresholds,\n ...config.thresholds\n };\n }\n }\n}\n","/**\n * 🔌 WU-PLUGIN: SECURE PLUGIN SYSTEM\n *\n * Sistema de plugins con sandboxing de seguridad\n * - Plugin lifecycle (install, beforeMount, afterMount, etc.)\n * - Sandboxed API (plugins no tienen acceso completo al core)\n * - Permission system\n * - Timeout protection\n */\n\nexport class WuPluginSystem {\n constructor(core) {\n this._core = core; // Privado - no expuesto a plugins\n this.plugins = new Map();\n this.hooks = new Map();\n\n // Hooks disponibles\n this.availableHooks = [\n 'beforeInit', 'afterInit',\n 'beforeMount', 'afterMount',\n 'beforeUnmount', 'afterUnmount',\n 'onError', 'onDestroy'\n ];\n\n // 🔐 Permisos disponibles\n this.availablePermissions = [\n 'mount', // Puede montar/desmontar apps\n 'events', // Puede emitir/escuchar eventos\n 'store', // Puede leer/escribir store\n 'apps', // Puede ver lista de apps\n 'config', // Puede modificar configuración\n 'unsafe' // Acceso completo (peligroso)\n ];\n\n // 🔐 Timeout para hooks (evita que plugins bloqueen)\n this.hookTimeout = 5000; // 5 segundos\n\n this.availableHooks.forEach(hook => {\n this.hooks.set(hook, []);\n });\n }\n\n /**\n * 🔐 CREATE SANDBOXED API: Crea API limitada para el plugin\n * @param {Array} permissions - Permisos del plugin\n * @returns {Object} API sandboxeada\n */\n _createSandboxedApi(permissions) {\n const api = {\n // Info básica siempre disponible\n version: this._core.version,\n info: this._core.info,\n\n // 📊 Métodos de solo lectura\n getAppInfo: (appName) => {\n const mounted = this._core.mounted.get(appName);\n if (!mounted) return null;\n return {\n name: appName,\n state: mounted.state,\n timestamp: mounted.timestamp\n };\n },\n\n getMountedApps: () => {\n return Array.from(this._core.mounted.keys());\n },\n\n getStats: () => this._core.getStats()\n };\n\n // 🔐 Agregar métodos según permisos\n if (permissions.includes('events') || permissions.includes('unsafe')) {\n api.emit = (event, data) => this._core.eventBus.emit(event, data, { appName: 'plugin' });\n api.on = (event, cb) => this._core.eventBus.on(event, cb);\n api.off = (event, cb) => this._core.eventBus.off(event, cb);\n }\n\n if (permissions.includes('store') || permissions.includes('unsafe')) {\n api.getState = (path) => this._core.store.get(path);\n api.setState = (path, value) => this._core.store.set(path, value);\n }\n\n if (permissions.includes('mount') || permissions.includes('unsafe')) {\n api.mount = (appName, container) => this._core.mount(appName, container);\n api.unmount = (appName) => this._core.unmount(appName);\n }\n\n if (permissions.includes('config') || permissions.includes('unsafe')) {\n api.configure = (config) => {\n // Solo permitir configuración segura\n const safeKeys = ['debug', 'logLevel'];\n const safeConfig = {};\n for (const key of safeKeys) {\n if (key in config) safeConfig[key] = config[key];\n }\n Object.assign(this._core, safeConfig);\n };\n }\n\n // 🚨 Acceso completo solo con permiso 'unsafe'\n if (permissions.includes('unsafe')) {\n api._unsafeCore = this._core;\n console.warn('[WuPlugin] ⚠️ Plugin has unsafe access to core!');\n }\n\n // Congelar API para evitar modificaciones\n return Object.freeze(api);\n }\n\n /**\n * 🔐 VALIDATE PLUGIN: Validar estructura del plugin\n * @param {Object} plugin\n * @returns {boolean}\n */\n _validatePlugin(plugin) {\n if (!plugin || typeof plugin !== 'object') {\n throw new Error('[WuPlugin] Invalid plugin: must be an object');\n }\n\n if (!plugin.name || typeof plugin.name !== 'string') {\n throw new Error('[WuPlugin] Invalid plugin: must have a name (string)');\n }\n\n if (plugin.name.length > 50) {\n throw new Error('[WuPlugin] Invalid plugin: name too long (max 50 chars)');\n }\n\n // Validar que los hooks sean funciones\n for (const hookName of this.availableHooks) {\n if (plugin[hookName] && typeof plugin[hookName] !== 'function') {\n throw new Error(`[WuPlugin] Invalid plugin: ${hookName} must be a function`);\n }\n }\n\n // Validar permisos\n if (plugin.permissions) {\n if (!Array.isArray(plugin.permissions)) {\n throw new Error('[WuPlugin] Invalid plugin: permissions must be an array');\n }\n\n for (const perm of plugin.permissions) {\n if (!this.availablePermissions.includes(perm)) {\n throw new Error(`[WuPlugin] Invalid permission: ${perm}`);\n }\n }\n }\n\n return true;\n }\n\n /**\n * 📦 USE: Instalar plugin con sandboxing\n * @param {Object|Function} plugin - Plugin o factory function\n * @param {Object} options - Opciones del plugin\n */\n use(plugin, options = {}) {\n // Si es una función, ejecutarla para obtener el plugin\n // Nota: factory functions NO reciben acceso al core\n if (typeof plugin === 'function') {\n plugin = plugin(options);\n }\n\n // Validar plugin\n this._validatePlugin(plugin);\n\n // Verificar si ya está instalado\n if (this.plugins.has(plugin.name)) {\n console.warn(`[WuPlugin] Plugin \"${plugin.name}\" already installed`);\n return;\n }\n\n // Determinar permisos (por defecto: solo eventos)\n const permissions = plugin.permissions || ['events'];\n\n // 🔐 Crear API sandboxeada\n const sandboxedApi = this._createSandboxedApi(permissions);\n\n // Ejecutar install del plugin con API sandboxeada\n if (plugin.install) {\n try {\n plugin.install(sandboxedApi, options);\n } catch (error) {\n console.error(`[WuPlugin] Error installing \"${plugin.name}\":`, error);\n throw error;\n }\n }\n\n // Registrar hooks del plugin con protección\n this.availableHooks.forEach(hookName => {\n if (typeof plugin[hookName] === 'function') {\n // Wrap el hook con timeout y try-catch\n const wrappedHook = this._wrapHook(plugin[hookName].bind(plugin), plugin.name, hookName);\n this.registerHook(hookName, wrappedHook);\n }\n });\n\n // Guardar plugin\n this.plugins.set(plugin.name, {\n plugin,\n options,\n permissions,\n sandboxedApi,\n installedAt: Date.now()\n });\n\n console.log(`[WuPlugin] ✅ Plugin \"${plugin.name}\" installed (permissions: ${permissions.join(', ')})`);\n }\n\n /**\n * 🔐 WRAP HOOK: Envolver hook con timeout y error handling\n */\n _wrapHook(hookFn, pluginName, hookName) {\n return async (context) => {\n const timeoutPromise = new Promise((_, reject) => {\n setTimeout(() => {\n reject(new Error(`Plugin \"${pluginName}\" hook \"${hookName}\" timed out after ${this.hookTimeout}ms`));\n }, this.hookTimeout);\n });\n\n try {\n // Race entre el hook y el timeout\n return await Promise.race([\n hookFn(context),\n timeoutPromise\n ]);\n } catch (error) {\n console.error(`[WuPlugin] Error in ${pluginName}.${hookName}:`, error);\n // No propagar error para no romper otros plugins\n return undefined;\n }\n };\n }\n\n /**\n * 🪝 REGISTER HOOK\n */\n registerHook(hookName, callback) {\n if (!this.hooks.has(hookName)) {\n console.warn(`[WuPlugin] Unknown hook: ${hookName}`);\n return;\n }\n this.hooks.get(hookName).push(callback);\n }\n\n /**\n * 🎯 CALL HOOK\n */\n async callHook(hookName, context) {\n const callbacks = this.hooks.get(hookName) || [];\n\n for (const callback of callbacks) {\n try {\n const result = await callback(context);\n if (result === false) {\n return false;\n }\n } catch (error) {\n console.error(`[WuPlugin] Error in hook ${hookName}:`, error);\n }\n }\n\n return true;\n }\n\n /**\n * 🗑️ UNINSTALL\n */\n uninstall(pluginName) {\n const pluginData = this.plugins.get(pluginName);\n if (!pluginData) {\n console.warn(`[WuPlugin] Plugin \"${pluginName}\" not found`);\n return;\n }\n\n const { plugin, sandboxedApi } = pluginData;\n\n if (plugin.uninstall) {\n try {\n plugin.uninstall(sandboxedApi);\n } catch (error) {\n console.error(`[WuPlugin] Error uninstalling \"${pluginName}\":`, error);\n }\n }\n\n this.plugins.delete(pluginName);\n console.log(`[WuPlugin] ✅ Plugin \"${pluginName}\" uninstalled`);\n }\n\n /**\n * 📋 GET PLUGIN\n */\n getPlugin(pluginName) {\n return this.plugins.get(pluginName)?.plugin;\n }\n\n /**\n * 📊 GET STATS\n */\n getStats() {\n return {\n totalPlugins: this.plugins.size,\n plugins: Array.from(this.plugins.entries()).map(([name, data]) => ({\n name,\n permissions: data.permissions,\n installedAt: data.installedAt\n })),\n hooks: Array.from(this.hooks.entries()).map(([name, callbacks]) => ({\n name,\n callbacks: callbacks.length\n }))\n };\n }\n\n /**\n * 🧹 CLEANUP\n */\n cleanup() {\n for (const [name] of this.plugins) {\n this.uninstall(name);\n }\n }\n}\n\n/**\n * 📦 PLUGIN HELPER: Helper para crear plugins\n * @param {Object} config - Configuración del plugin\n * @param {string} config.name - Nombre del plugin\n * @param {Array} config.permissions - Permisos requeridos\n */\nexport const createPlugin = (config) => {\n return {\n name: config.name,\n permissions: config.permissions || ['events'],\n install: config.install,\n uninstall: config.uninstall,\n beforeMount: config.beforeMount,\n afterMount: config.afterMount,\n beforeUnmount: config.beforeUnmount,\n afterUnmount: config.afterUnmount,\n onError: config.onError\n };\n};\n","/**\n * 🎯 WU-STRATEGIES: LOADING STRATEGIES\n *\n * Estrategias de carga para optimizar performance:\n * - Lazy: Carga solo cuando se monta\n * - Eager: Precarga en init\n * - Preload: Usa <link rel=\"prefetch\">\n * - Idle: Carga cuando el navegador está idle\n */\n\nexport class WuLoadingStrategy {\n constructor(core) {\n this.core = core;\n this.strategies = new Map();\n this.loadingQueue = [];\n this.isIdle = false;\n\n this.registerDefaultStrategies();\n this.setupIdleCallback();\n\n console.log('[WuStrategies] 🎯 Loading strategies initialized');\n }\n\n /**\n * 📋 REGISTER DEFAULT STRATEGIES\n */\n registerDefaultStrategies() {\n // Lazy: Solo carga cuando se necesita (no precarga)\n this.register('lazy', {\n shouldPreload: false,\n load: async (appName, config) => {\n console.log(`[Strategy:Lazy] Loading ${appName} on demand (no preload)`);\n // No hace nada, la app se carga cuando se monta\n return;\n }\n });\n\n // Eager: Carga inmediatamente en init\n this.register('eager', {\n shouldPreload: true,\n priority: 'high',\n load: async (appName, config) => {\n console.log(`[Strategy:Eager] Preloading ${appName} immediately`);\n\n // Cargar el módulo de la app\n const app = this.core.apps.get(appName);\n if (app) {\n const moduleUrl = await this.core.resolveModulePath(app);\n await import(/* @vite-ignore */ moduleUrl);\n console.log(`[Strategy:Eager] ✅ ${appName} preloaded`);\n }\n }\n });\n\n // Preload: Usa resource hints del navegador\n this.register('preload', {\n shouldPreload: true,\n priority: 'medium',\n load: async (appName, config) => {\n console.log(`[Strategy:Preload] Using resource hints for ${appName}`);\n\n // Crear <link rel=\"prefetch\">\n const app = this.core.apps.get(appName);\n if (app) {\n const moduleUrl = await this.core.resolveModulePath(app);\n\n const link = document.createElement('link');\n link.rel = 'prefetch';\n link.href = moduleUrl;\n link.as = 'script';\n document.head.appendChild(link);\n\n console.log(`[Strategy:Preload] ✅ Resource hint added for ${appName}`);\n }\n }\n });\n\n // Idle: Carga cuando el navegador está idle\n this.register('idle', {\n shouldPreload: false,\n load: async (appName, config) => {\n console.log(`[Strategy:Idle] Queueing ${appName} for idle loading`);\n\n return new Promise((resolve) => {\n this.loadingQueue.push({\n appName,\n config,\n resolve\n });\n\n // Si ya estamos idle, procesar inmediatamente\n if (this.isIdle) {\n this.processIdleQueue();\n }\n });\n }\n });\n }\n\n /**\n * 📦 REGISTER: Registrar estrategia personalizada\n * @param {string} name - Nombre de la estrategia\n * @param {Object} strategy - Configuración de la estrategia\n */\n register(name, strategy) {\n if (!strategy.load || typeof strategy.load !== 'function') {\n throw new Error('[WuStrategies] Strategy must have a load function');\n }\n\n this.strategies.set(name, {\n name,\n shouldPreload: strategy.shouldPreload || false,\n priority: strategy.priority || 'low',\n load: strategy.load\n });\n\n console.log(`[WuStrategies] Strategy \"${name}\" registered`);\n }\n\n /**\n * 🚀 LOAD: Cargar app con estrategia\n * @param {string} appName - Nombre de la app\n * @param {Object} config - Configuración con strategy\n * @returns {Promise}\n */\n async load(appName, config) {\n const strategyName = config.strategy || 'lazy';\n const strategy = this.strategies.get(strategyName);\n\n if (!strategy) {\n console.warn(`[WuStrategies] Strategy \"${strategyName}\" not found, using lazy`);\n return await this.strategies.get('lazy').load(appName, config);\n }\n\n return await strategy.load(appName, config);\n }\n\n /**\n * 🎯 PRELOAD: Precargar apps según estrategia\n * @param {Array} apps - Apps a evaluar para precarga\n */\n async preload(apps) {\n const toPreload = apps.filter(app => {\n const strategy = this.strategies.get(app.strategy || 'lazy');\n return strategy.shouldPreload;\n });\n\n // Ordenar por prioridad\n toPreload.sort((a, b) => {\n const priorityOrder = { high: 0, medium: 1, low: 2 };\n const aPriority = this.strategies.get(a.strategy)?.priority || 'low';\n const bPriority = this.strategies.get(b.strategy)?.priority || 'low';\n return priorityOrder[aPriority] - priorityOrder[bPriority];\n });\n\n console.log(`[WuStrategies] Preloading ${toPreload.length} apps`);\n\n // Precargar en orden\n for (const app of toPreload) {\n try {\n await this.load(app.name, app);\n } catch (error) {\n console.error(`[WuStrategies] Failed to preload ${app.name}:`, error);\n }\n }\n }\n\n /**\n * ⏰ SETUP IDLE CALLBACK: Configurar idle loading\n */\n setupIdleCallback() {\n if ('requestIdleCallback' in window) {\n const idleCallback = (deadline) => {\n this.isIdle = true;\n this.processIdleQueue(deadline);\n\n // Re-schedule\n requestIdleCallback(idleCallback);\n };\n\n requestIdleCallback(idleCallback);\n } else {\n // Fallback: usar setTimeout\n setTimeout(() => {\n this.isIdle = true;\n this.processIdleQueue();\n }, 2000);\n }\n }\n\n /**\n * 📋 PROCESS IDLE QUEUE: Procesar cola de carga idle\n * @param {Object} deadline - IdleDeadline object\n */\n async processIdleQueue(deadline) {\n while (this.loadingQueue.length > 0) {\n // Si tenemos deadline y se acabó el tiempo, salir\n if (deadline && deadline.timeRemaining() <= 0) {\n break;\n }\n\n const item = this.loadingQueue.shift();\n\n try {\n const app = this.core.apps.get(item.appName);\n if (app) {\n const moduleUrl = await this.core.resolveModulePath(app);\n await import(/* @vite-ignore */ moduleUrl);\n console.log(`[Strategy:Idle] ✅ ${item.appName} loaded during idle time`);\n item.resolve(true);\n } else {\n item.resolve(null);\n }\n } catch (error) {\n console.error(`[Strategy:Idle] Failed to load ${item.appName}:`, error);\n item.resolve(null);\n }\n }\n }\n\n /**\n * 📊 GET STATS: Estadísticas de estrategias\n * @returns {Object}\n */\n getStats() {\n return {\n totalStrategies: this.strategies.size,\n strategies: Array.from(this.strategies.keys()),\n idleQueueSize: this.loadingQueue.length,\n isIdle: this.isIdle\n };\n }\n\n /**\n * 🧹 CLEANUP: Limpiar estrategias\n */\n cleanup() {\n this.loadingQueue = [];\n console.log('[WuStrategies] 🧹 Strategies cleaned up');\n }\n}\n","/**\n * 🛡️ WU-ERROR-BOUNDARY: ADVANCED ERROR HANDLING\n *\n * Sistema de error boundaries con:\n * - Chain of Responsibility pattern\n * - Recovery strategies\n * - Error classification\n * - Fallback rendering\n */\n\nexport class WuErrorBoundary {\n constructor(core) {\n this.core = core;\n this.handlers = [];\n this.errorLog = [];\n this.maxErrorLog = 100;\n\n this.config = {\n maxRetries: 3,\n retryDelay: 1000,\n showErrorUI: true\n };\n\n this.registerDefaultHandlers();\n\n console.log('[WuErrorBoundary] 🛡️ Error boundary initialized');\n }\n\n /**\n * 📋 REGISTER DEFAULT HANDLERS: Chain of responsibility\n */\n registerDefaultHandlers() {\n // 1. Network Error Handler\n this.register({\n name: 'network',\n canHandle: (error) => {\n return error.name === 'TypeError' &&\n (error.message.includes('fetch') || error.message.includes('network'));\n },\n handle: async (error, context) => {\n console.log('[ErrorHandler:Network] Handling network error');\n\n // Retry con backoff\n if (context.retryCount < this.config.maxRetries) {\n const delay = this.config.retryDelay * Math.pow(2, context.retryCount);\n console.log(`[ErrorHandler:Network] Retrying in ${delay}ms...`);\n\n await new Promise(resolve => setTimeout(resolve, delay));\n\n return {\n recovered: true,\n action: 'retry',\n retryCount: context.retryCount + 1\n };\n }\n\n return {\n recovered: false,\n action: 'fallback',\n message: 'Network error: Please check your connection'\n };\n }\n });\n\n // 2. Script Load Error Handler\n this.register({\n name: 'script-load',\n canHandle: (error) => {\n return error.name === 'Error' &&\n (error.message.includes('Loading') ||\n error.message.includes('Failed to fetch'));\n },\n handle: async (error, context) => {\n console.log('[ErrorHandler:ScriptLoad] Handling script load error');\n\n // Intentar URL alternativa si existe\n if (context.fallbackUrl) {\n console.log('[ErrorHandler:ScriptLoad] Trying fallback URL');\n return {\n recovered: true,\n action: 'use-fallback-url',\n url: context.fallbackUrl\n };\n }\n\n return {\n recovered: false,\n action: 'fallback',\n message: 'Failed to load microfrontend'\n };\n }\n });\n\n // 3. Mount Error Handler\n this.register({\n name: 'mount',\n canHandle: (error) => {\n return error.message && error.message.includes('mount');\n },\n handle: async (error, context) => {\n console.log('[ErrorHandler:Mount] Handling mount error');\n\n // Limpiar y reintentar\n if (context.retryCount < 2) {\n console.log('[ErrorHandler:Mount] Cleaning up and retrying...');\n\n // Cleanup\n try {\n await this.core.unmount(context.appName);\n } catch (cleanupError) {\n console.warn('[ErrorHandler:Mount] Cleanup failed:', cleanupError);\n }\n\n await new Promise(resolve => setTimeout(resolve, 500));\n\n return {\n recovered: true,\n action: 'retry',\n retryCount: context.retryCount + 1\n };\n }\n\n return {\n recovered: false,\n action: 'fallback',\n message: 'Failed to mount application'\n };\n }\n });\n\n // 4. Timeout Error Handler\n this.register({\n name: 'timeout',\n canHandle: (error) => {\n return error.name === 'TimeoutError' ||\n error.message.includes('timeout');\n },\n handle: async (error, context) => {\n console.log('[ErrorHandler:Timeout] Handling timeout error');\n\n // Aumentar timeout y reintentar\n if (context.retryCount < 2) {\n return {\n recovered: true,\n action: 'retry-with-longer-timeout',\n timeout: (context.timeout || 5000) * 2,\n retryCount: context.retryCount + 1\n };\n }\n\n return {\n recovered: false,\n action: 'fallback',\n message: 'Operation timed out'\n };\n }\n });\n\n // 5. Generic Error Handler (fallback)\n this.register({\n name: 'generic',\n canHandle: () => true, // Maneja todo\n handle: async (error, context) => {\n console.log('[ErrorHandler:Generic] Handling generic error');\n\n return {\n recovered: false,\n action: 'fallback',\n message: error.message || 'An unexpected error occurred'\n };\n }\n });\n }\n\n /**\n * 📦 REGISTER: Registrar error handler\n * @param {Object} handler - Error handler { name, canHandle, handle }\n */\n register(handler) {\n if (!handler.name || !handler.canHandle || !handler.handle) {\n throw new Error('[WuErrorBoundary] Handler must have name, canHandle, and handle');\n }\n\n this.handlers.push(handler);\n console.log(`[WuErrorBoundary] Handler \"${handler.name}\" registered`);\n }\n\n /**\n * 🎯 HANDLE: Manejar error con chain of responsibility\n * @param {Error} error - Error a manejar\n * @param {Object} context - Contexto del error\n * @returns {Promise<Object>} Recovery result\n */\n async handle(error, context = {}) {\n // Agregar valores por defecto\n context = {\n retryCount: 0,\n timestamp: Date.now(),\n ...context\n };\n\n // Log error\n this.logError(error, context);\n\n // Buscar handler que pueda manejar este error\n for (const handler of this.handlers) {\n try {\n if (handler.canHandle(error, context)) {\n console.log(`[WuErrorBoundary] Using handler: ${handler.name}`);\n\n const result = await handler.handle(error, context);\n\n if (result.recovered) {\n console.log(`[WuErrorBoundary] ✅ Error recovered by ${handler.name}`);\n return result;\n }\n\n // Si no se recuperó, renderizar fallback\n if (result.action === 'fallback' && this.config.showErrorUI) {\n this.renderFallback(context, result);\n }\n\n return result;\n }\n } catch (handlerError) {\n console.error(`[WuErrorBoundary] Handler \"${handler.name}\" failed:`, handlerError);\n }\n }\n\n // No handler pudo manejar el error\n console.error('[WuErrorBoundary] ❌ No handler could handle the error');\n\n return {\n recovered: false,\n action: 'unhandled',\n message: 'Unhandled error'\n };\n }\n\n /**\n * 🎨 RENDER FALLBACK: Renderizar UI de error\n * @param {Object} context - Contexto del error\n * @param {Object} result - Resultado del handler\n */\n renderFallback(context, result) {\n if (!context.container) {\n console.warn('[WuErrorBoundary] No container to render fallback');\n return;\n }\n\n const container = typeof context.container === 'string'\n ? document.querySelector(context.container)\n : context.container;\n\n if (!container) return;\n\n // Limpiar container\n container.innerHTML = '';\n\n // Crear UI de error\n const errorUI = document.createElement('div');\n errorUI.className = 'wu-error-boundary';\n\n Object.assign(errorUI.style, {\n padding: '2rem',\n borderRadius: '8px',\n background: '#fff3cd',\n border: '1px solid #ffc107',\n color: '#856404',\n fontFamily: 'system-ui, -apple-system, sans-serif',\n textAlign: 'center'\n });\n\n const icon = document.createElement('div');\n icon.textContent = '⚠️';\n icon.style.fontSize = '3rem';\n icon.style.marginBottom = '1rem';\n\n const title = document.createElement('h3');\n title.textContent = 'Application Error';\n title.style.margin = '0 0 0.5rem 0';\n\n const message = document.createElement('p');\n message.textContent = result.message || 'An error occurred';\n message.style.margin = '0 0 1rem 0';\n\n const button = document.createElement('button');\n button.textContent = '🔄 Reload';\n Object.assign(button.style, {\n padding: '0.5rem 1rem',\n background: '#ffc107',\n border: 'none',\n borderRadius: '4px',\n cursor: 'pointer',\n fontWeight: 'bold',\n color: '#000'\n });\n\n button.addEventListener('click', () => window.location.reload());\n\n errorUI.appendChild(icon);\n errorUI.appendChild(title);\n errorUI.appendChild(message);\n errorUI.appendChild(button);\n\n container.appendChild(errorUI);\n }\n\n /**\n * 📝 LOG ERROR: Registrar error\n * @param {Error} error - Error\n * @param {Object} context - Contexto\n */\n logError(error, context) {\n const errorEntry = {\n error: {\n name: error.name,\n message: error.message,\n stack: error.stack\n },\n context,\n timestamp: Date.now()\n };\n\n this.errorLog.push(errorEntry);\n\n // Mantener límite de log\n if (this.errorLog.length > this.maxErrorLog) {\n this.errorLog.shift();\n }\n }\n\n /**\n * 📋 GET ERROR LOG: Obtener log de errores\n * @param {number} limit - Límite de errores a retornar\n * @returns {Array}\n */\n getErrorLog(limit = 10) {\n return this.errorLog.slice(-limit);\n }\n\n /**\n * 📊 GET STATS: Estadísticas de errores\n * @returns {Object}\n */\n getStats() {\n const errorsByType = {};\n\n this.errorLog.forEach(entry => {\n const type = entry.error.name || 'Unknown';\n errorsByType[type] = (errorsByType[type] || 0) + 1;\n });\n\n return {\n totalErrors: this.errorLog.length,\n handlers: this.handlers.length,\n errorsByType,\n recentErrors: this.getErrorLog(5)\n };\n }\n\n /**\n * ⚙️ CONFIGURE: Configurar error boundary\n * @param {Object} config - Nueva configuración\n */\n configure(config) {\n this.config = {\n ...this.config,\n ...config\n };\n }\n\n /**\n * 🧹 CLEANUP: Limpiar error boundary\n */\n cleanup() {\n this.errorLog = [];\n console.log('[WuErrorBoundary] 🧹 Error boundary cleaned up');\n }\n}\n","/**\n * 🪝 WU-HOOKS: LIFECYCLE MIDDLEWARE SYSTEM\n *\n * Sistema de hooks basado en middleware pattern para control fino:\n * - Middleware chain con next()\n * - Puede cancelar operaciones (no llamar next)\n * - Puede modificar contexto\n * - Prioridad de hooks\n * - Async/await support\n */\n\nexport class WuLifecycleHooks {\n constructor(core) {\n this.core = core;\n this.hooks = new Map();\n this.executionLog = [];\n this.maxLogSize = 100;\n\n // Lifecycle phases disponibles\n this.lifecyclePhases = [\n 'beforeInit', // Antes de inicializar framework\n 'afterInit', // Después de inicializar\n 'beforeLoad', // Antes de cargar una app\n 'afterLoad', // Después de cargar\n 'beforeMount', // Antes de montar\n 'afterMount', // Después de montar\n 'beforeUnmount', // Antes de desmontar\n 'afterUnmount', // Después de desmontar\n 'beforeDestroy', // Antes de destruir framework\n 'afterDestroy' // Después de destruir\n ];\n\n // Inicializar hooks\n this.lifecyclePhases.forEach(phase => {\n this.hooks.set(phase, []);\n });\n\n console.log('[WuHooks] 🪝 Lifecycle hooks initialized');\n }\n\n /**\n * 📦 USE: Registrar middleware hook\n * @param {string} phase - Fase del lifecycle\n * @param {Function} middleware - Función middleware (context, next)\n * @param {Object} options - { priority, name }\n */\n use(phase, middleware, options = {}) {\n if (!this.hooks.has(phase)) {\n throw new Error(`[WuHooks] Unknown lifecycle phase: ${phase}`);\n }\n\n if (typeof middleware !== 'function') {\n throw new Error('[WuHooks] Middleware must be a function');\n }\n\n const hook = {\n middleware,\n name: options.name || `hook_${Date.now()}`,\n priority: options.priority || 0,\n registeredAt: Date.now()\n };\n\n const hooks = this.hooks.get(phase);\n hooks.push(hook);\n\n // Ordenar por prioridad (mayor primero)\n hooks.sort((a, b) => b.priority - a.priority);\n\n console.log(`[WuHooks] Hook \"${hook.name}\" registered for ${phase} (priority: ${hook.priority})`);\n\n // Retornar función para desregistrar\n return () => this.remove(phase, hook.name);\n }\n\n /**\n * 🗑️ REMOVE: Remover hook\n * @param {string} phase - Fase del lifecycle\n * @param {string} name - Nombre del hook\n */\n remove(phase, name) {\n if (!this.hooks.has(phase)) return;\n\n const hooks = this.hooks.get(phase);\n const index = hooks.findIndex(h => h.name === name);\n\n if (index > -1) {\n hooks.splice(index, 1);\n console.log(`[WuHooks] Hook \"${name}\" removed from ${phase}`);\n }\n }\n\n /**\n * 🎯 EXECUTE: Ejecutar middleware chain\n * @param {string} phase - Fase del lifecycle\n * @param {Object} context - Contexto a pasar\n * @returns {Promise<Object>} Contexto modificado o { cancelled: true }\n */\n async execute(phase, context = {}) {\n const hooks = this.hooks.get(phase);\n\n if (!hooks || hooks.length === 0) {\n return context;\n }\n\n console.log(`[WuHooks] Executing ${hooks.length} hooks for ${phase}`);\n\n // Log para debugging\n const executionEntry = {\n phase,\n timestamp: Date.now(),\n hooksCount: hooks.length,\n hookNames: hooks.map(h => h.name)\n };\n\n let currentContext = { ...context };\n let cancelled = false;\n\n // Crear cadena de middleware\n const executeChain = async (index) => {\n // Si llegamos al final de la cadena, retornar contexto\n if (index >= hooks.length) {\n return currentContext;\n }\n\n const hook = hooks[index];\n const startTime = Date.now();\n\n try {\n let nextCalled = false;\n\n // Función next\n const next = async (modifiedContext) => {\n nextCalled = true;\n\n // Si se pasa un contexto modificado, usarlo\n if (modifiedContext !== undefined) {\n currentContext = { ...currentContext, ...modifiedContext };\n }\n\n // Continuar con siguiente hook\n return await executeChain(index + 1);\n };\n\n // Ejecutar middleware\n await hook.middleware(currentContext, next);\n\n // Si no se llamó next(), la operación fue cancelada\n if (!nextCalled) {\n console.log(`[WuHooks] Hook \"${hook.name}\" cancelled execution`);\n cancelled = true;\n return { cancelled: true };\n }\n\n const duration = Date.now() - startTime;\n console.log(`[WuHooks] Hook \"${hook.name}\" executed in ${duration}ms`);\n\n } catch (error) {\n console.error(`[WuHooks] Error in hook \"${hook.name}\":`, error);\n\n // Si hay error, pasar al siguiente hook\n return await executeChain(index + 1);\n }\n\n return currentContext;\n };\n\n // Ejecutar cadena\n const result = await executeChain(0);\n\n // Completar log\n executionEntry.duration = Date.now() - executionEntry.timestamp;\n executionEntry.cancelled = cancelled;\n executionEntry.success = !cancelled;\n\n this.executionLog.push(executionEntry);\n\n // Mantener límite de log\n if (this.executionLog.length > this.maxLogSize) {\n this.executionLog.shift();\n }\n\n return result;\n }\n\n /**\n * 🚀 HELPER: Registrar hook para múltiples fases\n * @param {Array<string>} phases - Fases del lifecycle\n * @param {Function} middleware - Función middleware\n * @param {Object} options - Opciones\n * @returns {Function} Función para desregistrar de todas las fases\n */\n useMultiple(phases, middleware, options = {}) {\n const unregisterFns = phases.map(phase =>\n this.use(phase, middleware, { ...options, name: `${options.name}_${phase}` })\n );\n\n // Retornar función que desregistra de todas las fases\n return () => unregisterFns.forEach(fn => fn());\n }\n\n /**\n * 📋 GET HOOKS: Obtener hooks registrados\n * @param {string} phase - Fase del lifecycle (opcional)\n * @returns {Object|Array}\n */\n getHooks(phase) {\n if (phase) {\n return this.hooks.get(phase) || [];\n }\n\n // Retornar todos los hooks\n const allHooks = {};\n this.hooks.forEach((hooks, phase) => {\n allHooks[phase] = hooks.map(h => ({\n name: h.name,\n priority: h.priority,\n registeredAt: h.registeredAt\n }));\n });\n\n return allHooks;\n }\n\n /**\n * 📊 GET STATS: Estadísticas de hooks\n * @returns {Object}\n */\n getStats() {\n const totalHooks = Array.from(this.hooks.values())\n .reduce((sum, hooks) => sum + hooks.length, 0);\n\n const executionsByPhase = {};\n this.executionLog.forEach(entry => {\n executionsByPhase[entry.phase] = (executionsByPhase[entry.phase] || 0) + 1;\n });\n\n const avgDuration = this.executionLog.length > 0\n ? this.executionLog.reduce((sum, entry) => sum + entry.duration, 0) / this.executionLog.length\n : 0;\n\n const cancelledCount = this.executionLog.filter(entry => entry.cancelled).length;\n\n return {\n totalHooks,\n totalExecutions: this.executionLog.length,\n executionsByPhase,\n avgDuration: Math.round(avgDuration),\n cancelledCount,\n recentExecutions: this.executionLog.slice(-10)\n };\n }\n\n /**\n * 🧹 CLEANUP: Limpiar todos los hooks\n * @param {string} phase - Fase específica (opcional)\n */\n cleanup(phase) {\n if (phase) {\n this.hooks.set(phase, []);\n console.log(`[WuHooks] Hooks cleaned for ${phase}`);\n } else {\n this.lifecyclePhases.forEach(p => {\n this.hooks.set(p, []);\n });\n this.executionLog = [];\n console.log('[WuHooks] 🧹 All hooks cleaned');\n }\n }\n}\n\n/**\n * 🔧 HELPER: Crear middleware hooks fácilmente\n */\n\n/**\n * Crear hook simple que siempre llama next\n * @param {Function} fn - Función a ejecutar\n * @returns {Function} Middleware function\n */\nexport const createSimpleHook = (fn) => {\n return async (context, next) => {\n await fn(context);\n await next();\n };\n};\n\n/**\n * Crear hook condicional\n * @param {Function} condition - Función de condición (context) => boolean\n * @param {Function} fn - Función a ejecutar si condición es true\n * @returns {Function} Middleware function\n */\nexport const createConditionalHook = (condition, fn) => {\n return async (context, next) => {\n if (await condition(context)) {\n await fn(context);\n }\n await next();\n };\n};\n\n/**\n * Crear hook que puede cancelar operación\n * @param {Function} shouldContinue - Función que retorna true para continuar\n * @returns {Function} Middleware function\n */\nexport const createGuardHook = (shouldContinue) => {\n return async (context, next) => {\n if (await shouldContinue(context)) {\n await next();\n }\n // Si no retorna true, no llama next() y cancela\n };\n};\n\n/**\n * Crear hook que modifica contexto\n * @param {Function} transformer - Función que transforma el contexto\n * @returns {Function} Middleware function\n */\nexport const createTransformHook = (transformer) => {\n return async (context, next) => {\n const modified = await transformer(context);\n await next(modified);\n };\n};\n\n/**\n * Crear hook con timeout\n * @param {Function} fn - Función a ejecutar\n * @param {number} timeout - Timeout en ms\n * @returns {Function} Middleware function\n */\nexport const createTimedHook = (fn, timeout = 5000) => {\n return async (context, next) => {\n const timeoutPromise = new Promise((_, reject) =>\n setTimeout(() => reject(new Error('Hook timeout')), timeout)\n );\n\n try {\n await Promise.race([fn(context), timeoutPromise]);\n await next();\n } catch (error) {\n console.error('[WuHooks] Timed hook failed:', error);\n await next(); // Continuar a pesar del error\n }\n };\n};\n","/**\n * 🏊 WU-SANDBOX-POOL: VIRTUAL SANDBOX POOL\n *\n * Object Pool pattern para reutilizar sandboxes:\n * - Reduce memory usage\n * - Reduce GC pressure\n * - Mejora performance de mount/unmount\n * - Auto-cleanup de sandboxes inactivos\n */\n\nexport class WuSandboxPool {\n constructor(core) {\n this.core = core;\n\n // Pool configuration\n this.config = {\n minSize: 2, // Mínimo de sandboxes en pool\n maxSize: 10, // Máximo de sandboxes en pool\n idleTimeout: 30000, // Tiempo antes de limpiar sandbox (30s)\n warmupOnInit: true // Crear sandboxes al inicializar\n };\n\n // Pool state\n this.available = []; // Sandboxes disponibles\n this.inUse = new Map(); // Sandboxes en uso: appName -> sandbox\n this.totalCreated = 0;\n this.totalReused = 0;\n\n // Cleanup timer\n this.cleanupTimer = null;\n\n console.log('[WuSandboxPool] 🏊 Sandbox pool initialized');\n }\n\n /**\n * 🚀 INIT: Inicializar pool\n */\n async init() {\n if (this.config.warmupOnInit) {\n await this.warmup();\n }\n\n // Iniciar cleanup periódico\n this.startCleanupTimer();\n\n console.log('[WuSandboxPool] Pool ready');\n }\n\n /**\n * 🔥 WARMUP: Pre-crear sandboxes\n */\n async warmup() {\n console.log(`[WuSandboxPool] Warming up pool with ${this.config.minSize} sandboxes`);\n\n for (let i = 0; i < this.config.minSize; i++) {\n const sandbox = this.createSandbox();\n this.available.push(sandbox);\n }\n\n console.log(`[WuSandboxPool] ✅ Pool warmed up with ${this.available.length} sandboxes`);\n }\n\n /**\n * 🎯 CREATE SANDBOX: Crear nuevo sandbox\n * @returns {Object} Sandbox instance\n */\n createSandbox() {\n // Crear container temporal\n const container = document.createElement('div');\n container.className = 'wu-sandbox-container';\n container.style.display = 'none';\n\n // Crear shadow root\n const shadowRoot = container.attachShadow({ mode: 'open' });\n\n // Crear mount point dentro del shadow\n const mountPoint = document.createElement('div');\n mountPoint.className = 'wu-mount-point';\n shadowRoot.appendChild(mountPoint);\n\n const sandbox = {\n id: `sandbox_${this.totalCreated++}`,\n container,\n shadowRoot,\n mountPoint,\n createdAt: Date.now(),\n lastUsed: Date.now(),\n timesUsed: 0,\n currentApp: null\n };\n\n console.log(`[WuSandboxPool] Created sandbox: ${sandbox.id}`);\n\n return sandbox;\n }\n\n /**\n * 🔓 ACQUIRE: Obtener sandbox del pool\n * @param {string} appName - Nombre de la app\n * @returns {Object} Sandbox instance\n */\n acquire(appName) {\n // Verificar si ya tiene un sandbox\n if (this.inUse.has(appName)) {\n console.warn(`[WuSandboxPool] App \"${appName}\" already has a sandbox`);\n return this.inUse.get(appName);\n }\n\n let sandbox;\n\n // Intentar reutilizar sandbox disponible\n if (this.available.length > 0) {\n sandbox = this.available.pop();\n this.totalReused++;\n\n console.log(`[WuSandboxPool] ♻️ Reusing sandbox ${sandbox.id} for ${appName}`);\n }\n // Si no hay disponibles y no excedemos máximo, crear nuevo\n else if (this.inUse.size < this.config.maxSize) {\n sandbox = this.createSandbox();\n\n console.log(`[WuSandboxPool] 🆕 Creating new sandbox ${sandbox.id} for ${appName}`);\n }\n // Si excedemos máximo, crear temporal (no pooleable)\n else {\n sandbox = this.createSandbox();\n sandbox.temporary = true;\n\n console.warn(`[WuSandboxPool] ⚠️ Pool exhausted, creating temporary sandbox for ${appName}`);\n }\n\n // Preparar sandbox para uso\n this.prepareSandbox(sandbox, appName);\n\n // Marcar como en uso\n sandbox.currentApp = appName;\n sandbox.lastUsed = Date.now();\n sandbox.timesUsed++;\n\n this.inUse.set(appName, sandbox);\n\n return sandbox;\n }\n\n /**\n * 🔒 RELEASE: Liberar sandbox al pool\n * @param {string} appName - Nombre de la app\n */\n release(appName) {\n const sandbox = this.inUse.get(appName);\n\n if (!sandbox) {\n console.warn(`[WuSandboxPool] App \"${appName}\" has no sandbox to release`);\n return;\n }\n\n // Limpiar sandbox\n this.cleanSandbox(sandbox);\n\n // Remover de uso\n this.inUse.delete(appName);\n sandbox.currentApp = null;\n sandbox.lastUsed = Date.now();\n\n // Si es temporal, destruir\n if (sandbox.temporary) {\n this.destroySandbox(sandbox);\n console.log(`[WuSandboxPool] 🗑️ Destroyed temporary sandbox ${sandbox.id}`);\n return;\n }\n\n // Si pool no está lleno, devolver al pool\n if (this.available.length < this.config.maxSize) {\n this.available.push(sandbox);\n console.log(`[WuSandboxPool] ✅ Released sandbox ${sandbox.id} back to pool`);\n }\n // Si pool está lleno, destruir\n else {\n this.destroySandbox(sandbox);\n console.log(`[WuSandboxPool] 🗑️ Pool full, destroyed sandbox ${sandbox.id}`);\n }\n }\n\n /**\n * 🔧 PREPARE SANDBOX: Preparar sandbox para uso\n * @param {Object} sandbox - Sandbox instance\n * @param {string} appName - Nombre de la app\n */\n prepareSandbox(sandbox, appName) {\n // Mostrar container\n sandbox.container.style.display = 'block';\n\n // Agregar identificador de app\n sandbox.container.setAttribute('data-wu-app', appName);\n\n console.log(`[WuSandboxPool] Prepared sandbox ${sandbox.id} for ${appName}`);\n }\n\n /**\n * 🧹 CLEAN SANDBOX: Limpiar sandbox para reutilización\n * @param {Object} sandbox - Sandbox instance\n */\n cleanSandbox(sandbox) {\n // Limpiar contenido del mount point\n if (sandbox.mountPoint) {\n sandbox.mountPoint.innerHTML = '';\n }\n\n // Limpiar estilos del shadow root\n if (sandbox.shadowRoot) {\n const styles = sandbox.shadowRoot.querySelectorAll('style');\n styles.forEach(style => style.remove());\n }\n\n // Ocultar container\n sandbox.container.style.display = 'none';\n\n // Remover identificador de app\n sandbox.container.removeAttribute('data-wu-app');\n\n console.log(`[WuSandboxPool] Cleaned sandbox ${sandbox.id}`);\n }\n\n /**\n * 💥 DESTROY SANDBOX: Destruir sandbox completamente\n * @param {Object} sandbox - Sandbox instance\n */\n destroySandbox(sandbox) {\n // Limpiar contenido\n this.cleanSandbox(sandbox);\n\n // Remover del DOM si está adjuntado\n if (sandbox.container.parentNode) {\n sandbox.container.parentNode.removeChild(sandbox.container);\n }\n\n // Limpiar referencias\n sandbox.shadowRoot = null;\n sandbox.mountPoint = null;\n sandbox.container = null;\n\n console.log(`[WuSandboxPool] Destroyed sandbox ${sandbox.id}`);\n }\n\n /**\n * ⏰ START CLEANUP TIMER: Iniciar limpieza periódica\n */\n startCleanupTimer() {\n // Limpiar timer anterior si existe\n if (this.cleanupTimer) {\n clearInterval(this.cleanupTimer);\n }\n\n // Limpiar cada minuto\n this.cleanupTimer = setInterval(() => {\n this.cleanupIdleSandboxes();\n }, 60000);\n }\n\n /**\n * 🧹 CLEANUP IDLE SANDBOXES: Limpiar sandboxes inactivos\n */\n cleanupIdleSandboxes() {\n const now = Date.now();\n const threshold = now - this.config.idleTimeout;\n\n // Filtrar sandboxes que no han sido usados recientemente\n const toKeep = [];\n const toDestroy = [];\n\n this.available.forEach(sandbox => {\n if (sandbox.lastUsed < threshold && this.available.length > this.config.minSize) {\n toDestroy.push(sandbox);\n } else {\n toKeep.push(sandbox);\n }\n });\n\n // Destruir sandboxes idle\n toDestroy.forEach(sandbox => {\n this.destroySandbox(sandbox);\n });\n\n this.available = toKeep;\n\n if (toDestroy.length > 0) {\n console.log(`[WuSandboxPool] 🧹 Cleaned up ${toDestroy.length} idle sandboxes`);\n }\n\n // Si quedamos por debajo del mínimo, crear nuevos\n if (this.available.length < this.config.minSize) {\n const needed = this.config.minSize - this.available.length;\n console.log(`[WuSandboxPool] Creating ${needed} sandboxes to maintain minimum`);\n\n for (let i = 0; i < needed; i++) {\n this.available.push(this.createSandbox());\n }\n }\n }\n\n /**\n * ⚙️ CONFIGURE: Configurar pool\n * @param {Object} config - Nueva configuración\n */\n configure(config) {\n const oldMinSize = this.config.minSize;\n\n this.config = {\n ...this.config,\n ...config\n };\n\n // Si aumentó el minSize, crear más sandboxes\n if (this.config.minSize > oldMinSize) {\n const needed = this.config.minSize - this.available.length;\n if (needed > 0) {\n console.log(`[WuSandboxPool] Creating ${needed} sandboxes for new minSize`);\n for (let i = 0; i < needed; i++) {\n this.available.push(this.createSandbox());\n }\n }\n }\n\n // Si disminuyó el minSize o maxSize, limpiar exceso\n if (this.available.length > this.config.maxSize) {\n const excess = this.available.length - this.config.maxSize;\n const toDestroy = this.available.splice(this.config.maxSize, excess);\n toDestroy.forEach(sandbox => this.destroySandbox(sandbox));\n\n console.log(`[WuSandboxPool] Destroyed ${excess} excess sandboxes`);\n }\n\n console.log('[WuSandboxPool] Configuration updated:', this.config);\n }\n\n /**\n * 📊 GET STATS: Estadísticas del pool\n * @returns {Object}\n */\n getStats() {\n const totalSandboxes = this.available.length + this.inUse.size;\n const utilization = totalSandboxes > 0\n ? ((this.inUse.size / totalSandboxes) * 100).toFixed(1)\n : 0;\n\n const avgTimesUsed = totalSandboxes > 0\n ? [...this.available, ...this.inUse.values()]\n .reduce((sum, s) => sum + s.timesUsed, 0) / totalSandboxes\n : 0;\n\n return {\n available: this.available.length,\n inUse: this.inUse.size,\n totalSandboxes,\n utilization: `${utilization}%`,\n totalCreated: this.totalCreated,\n totalReused: this.totalReused,\n reuseRate: this.totalCreated > 0\n ? `${((this.totalReused / this.totalCreated) * 100).toFixed(1)}%`\n : '0%',\n avgTimesUsed: avgTimesUsed.toFixed(1),\n config: this.config,\n appsInUse: Array.from(this.inUse.keys())\n };\n }\n\n /**\n * 🧹 CLEANUP: Limpiar todo el pool\n */\n cleanup() {\n // Detener cleanup timer\n if (this.cleanupTimer) {\n clearInterval(this.cleanupTimer);\n this.cleanupTimer = null;\n }\n\n // Destruir todos los sandboxes disponibles\n this.available.forEach(sandbox => this.destroySandbox(sandbox));\n this.available = [];\n\n // Destruir sandboxes en uso (forzado)\n this.inUse.forEach((sandbox, appName) => {\n console.warn(`[WuSandboxPool] Force destroying sandbox for active app: ${appName}`);\n this.destroySandbox(sandbox);\n });\n this.inUse.clear();\n\n console.log('[WuSandboxPool] 🧹 Pool cleaned up');\n }\n}\n","/**\n * 🔔 WU-REGISTRY: APP REGISTRATION TRACKER\n * Simplificado - solo trackea apps registradas\n */\n\nexport class WuRegistry {\n constructor() {\n this.registeredApps = new Set();\n this._setupNotifyReady();\n }\n\n /**\n * 🔔 Setup notifyReady API en window.wu\n */\n _setupNotifyReady() {\n const setupFn = () => {\n if (window.wu && !window.wu.notifyReady) {\n window.wu.notifyReady = (appName) => {\n const event = new CustomEvent('wu:app:ready', {\n detail: { appName, timestamp: Date.now() }\n });\n window.dispatchEvent(event);\n };\n }\n };\n\n setupFn();\n if (!window.wu) {\n queueMicrotask(setupFn);\n }\n }\n\n /**\n * ✅ MARK AS REGISTERED\n */\n markAsRegistered(appName) {\n this.registeredApps.add(appName);\n }\n\n /**\n * ❓ IS REGISTERED\n */\n isRegistered(appName) {\n return this.registeredApps.has(appName);\n }\n\n /**\n * ❌ UNREGISTER APP\n */\n unregister(appName) {\n this.registeredApps.delete(appName);\n }\n\n /**\n * 🧹 CLEANUP\n */\n cleanup() {\n this.registeredApps.clear();\n }\n}\n","/**\n * 🚀 WU-FRAMEWORK: UNIVERSAL MICROFRONTENDS\n * Motor principal agnóstico - Funciona con cualquier framework\n */\n\nimport { WuLoader } from './wu-loader.js';\nimport { WuSandbox } from './wu-sandbox.js';\nimport { WuManifest } from './wu-manifest.js';\nimport { logger } from './wu-logger.js';\nimport { default as store } from './wu-store.js';\nimport { WuApp } from './wu-app.js';\nimport { WuCache } from './wu-cache.js';\nimport { WuEventBus } from './wu-event-bus.js';\nimport { WuPerformance } from './wu-performance.js';\nimport { WuPluginSystem } from './wu-plugin.js';\nimport { WuLoadingStrategy } from './wu-strategies.js';\nimport { WuErrorBoundary } from './wu-error-boundary.js';\nimport { WuLifecycleHooks } from './wu-hooks.js';\nimport { WuSandboxPool } from './wu-sandbox-pool.js';\nimport { WuRegistry } from './wu-registry.js';\n\nexport class WuCore {\n constructor(options = {}) {\n // Registros principales\n this.apps = new Map(); // Apps registradas\n this.definitions = new Map(); // Definiciones de lifecycle\n this.manifests = new Map(); // Manifiestos cargados\n this.mounted = new Map(); // Apps montadas\n\n // Componentes core\n this.loader = new WuLoader();\n this.sandbox = new WuSandbox();\n this.manifest = new WuManifest();\n this.store = store;\n\n // 🚀 SISTEMAS ESENCIALES\n this.cache = new WuCache({ storage: 'localStorage', maxSize: 100 }); // 100MB cache\n this.eventBus = new WuEventBus();\n this.performance = new WuPerformance();\n\n // 🎯 ADVANCED SYSTEMS\n this.pluginSystem = new WuPluginSystem(this);\n this.strategies = new WuLoadingStrategy(this);\n this.errorBoundary = new WuErrorBoundary(this);\n this.hooks = new WuLifecycleHooks(this);\n this.sandboxPool = new WuSandboxPool(this);\n this.registry = new WuRegistry();\n\n // 🔄 HEALTH MONITORING CONFIG\n this.healthConfig = {\n enabled: options.healthMonitoring !== false, // Default: enabled\n autoHeal: options.autoHeal !== false, // Default: enabled\n agingThreshold: options.agingThreshold || Infinity, // Default: never refresh\n checkInterval: options.healthCheckInterval || 60000 // Default: 60s\n };\n\n // 🔄 HEALTH MONITORING STATE\n this.healthState = {\n monitor: null,\n healingInProgress: new Set(),\n systemStable: true,\n lastHealthCheck: Date.now(),\n mutationObserver: null,\n mutationCheckTimeout: null\n };\n\n // Estado\n this.isInitialized = false;\n\n // 🚀 Initialize self-healing system (ONLY if enabled)\n if (this.healthConfig.enabled) {\n this.initializeHealthMonitoring();\n logger.wuInfo('🚀 Wu Framework initialized - Universal Microfrontends with Self-Healing');\n } else {\n logger.wuInfo('🚀 Wu Framework initialized - Universal Microfrontends (Health Monitoring Disabled)');\n }\n }\n\n /**\n * 🔄 HEALTH MONITORING INITIALIZATION\n */\n initializeHealthMonitoring() {\n // 💫 Optimized health monitor with MutationObserver + reduced polling\n this.healthState.monitor = setInterval(() => {\n this.performHealthCheck();\n }, this.healthConfig.checkInterval);\n\n // 🔍 Smart MutationObserver for real-time DOM changes\n this.initializeMutationObserver();\n\n // 🛡️ Global error recovery (ONLY if autoHeal enabled)\n if (this.healthConfig.autoHeal) {\n window.addEventListener('error', (event) => {\n this.handleErrorEvent(event);\n });\n\n // 🌟 Unhandled promise rejection recovery\n window.addEventListener('unhandledrejection', (event) => {\n this.handleRejection(event);\n });\n }\n\n logger.wuInfo(`🔄 Health monitoring initialized - Interval: ${this.healthConfig.checkInterval}ms, AutoHeal: ${this.healthConfig.autoHeal}`);\n }\n\n /**\n * 🔍 SMART MUTATION OBSERVER: Observa SOLO los contenedores de apps montadas\n * FIX: Ya no observa todo document.body (memory leak)\n */\n initializeMutationObserver() {\n if (!window.MutationObserver) return;\n\n // Map para trackear observers por contenedor (evita memory leak)\n this.healthState.containerObservers = new Map();\n\n // Callback compartido para todos los observers\n this.healthState.mutationCallback = (mutations, observer) => {\n let affectedAppName = null;\n\n for (const mutation of mutations) {\n if (mutation.type === 'childList' && mutation.removedNodes.length > 0) {\n // Encontrar qué app fue afectada\n for (const [appName, mounted] of this.mounted) {\n const container = mounted.hostContainer || mounted.container;\n if (mutation.target === container ||\n mutation.target.contains?.(container)) {\n affectedAppName = appName;\n break;\n }\n }\n }\n if (affectedAppName) break;\n }\n\n if (affectedAppName) {\n clearTimeout(this.healthState.mutationCheckTimeout);\n this.healthState.mutationCheckTimeout = setTimeout(() => {\n this.performHealthCheck();\n }, 1000);\n }\n };\n\n logger.wuDebug('🔍 MutationObserver system initialized (lazy per-container)');\n }\n\n /**\n * 🔗 Observar contenedor específico cuando se monta una app\n */\n observeContainer(appName, container) {\n if (!this.healthState.containerObservers || !container) return;\n\n // No observar si ya existe\n if (this.healthState.containerObservers.has(appName)) return;\n\n const observer = new MutationObserver(this.healthState.mutationCallback);\n\n // Observar solo el contenedor padre directo (no subtree profundo)\n const parentToObserve = container.parentElement || container;\n observer.observe(parentToObserve, {\n childList: true,\n subtree: false // ✅ Solo hijos directos, no todo el árbol\n });\n\n this.healthState.containerObservers.set(appName, observer);\n logger.wuDebug(`🔍 Observing container for ${appName}`);\n }\n\n /**\n * 🔓 Dejar de observar contenedor cuando se desmonta\n */\n unobserveContainer(appName) {\n if (!this.healthState.containerObservers) return;\n\n const observer = this.healthState.containerObservers.get(appName);\n if (observer) {\n observer.disconnect();\n this.healthState.containerObservers.delete(appName);\n logger.wuDebug(`🔓 Stopped observing container for ${appName}`);\n }\n }\n\n /**\n * 💊 HEALTH CHECK: Continuous app monitoring\n */\n async performHealthCheck() {\n try {\n const now = Date.now();\n const healthIssues = [];\n\n // Check mounted apps vitality\n for (const [appName, mountedApp] of this.mounted) {\n const age = now - mountedApp.timestamp;\n const container = mountedApp.container;\n\n // 🛡️ ENHANCED CHECK: Verify container exists and is properly connected\n // IMPORTANT: Check multiple conditions to avoid false positives\n let isOrphaned = false;\n\n try {\n // Check 1: Direct DOM connection\n const containerInDOM = document.contains(container);\n\n // Check 2: Parent element connection (for shadow DOM)\n const parentInDOM = container.parentElement && document.contains(container.parentElement);\n\n // Check 3: Shadow root connection\n const shadowHost = mountedApp.sandbox?.shadowRoot?.host;\n const shadowHostInDOM = shadowHost && document.contains(shadowHost);\n\n // Check 4: Container still has valid properties (not detached)\n const hasValidParent = container.parentElement !== null || container.parentNode !== null;\n\n // Only mark as orphaned if ALL checks fail\n if (!containerInDOM && !parentInDOM && !shadowHostInDOM && !hasValidParent) {\n isOrphaned = true;\n }\n } catch (error) {\n // If checking fails, assume NOT orphaned (conservative approach)\n console.warn(`[Wu] ⚠️ Container check failed for ${appName}:`, error);\n isOrphaned = false;\n }\n\n if (isOrphaned) {\n healthIssues.push({\n type: 'orphaned_container',\n appName,\n severity: 'high'\n });\n }\n\n // Check app state - ONLY if it's truly unstable, not 'refreshed'\n // 'refreshed' is a normal state after aging refresh\n if (mountedApp.state && mountedApp.state !== 'stable' && mountedApp.state !== 'refreshed') {\n healthIssues.push({\n type: 'unstable_state',\n appName,\n severity: 'medium'\n });\n }\n\n // 🕰️ Check for long-running apps that might need refresh\n // ONLY if agingThreshold is configured (default: Infinity = never)\n if (age > this.healthConfig.agingThreshold) {\n healthIssues.push({\n type: 'aging_app',\n appName,\n severity: 'low',\n age: age\n });\n console.log(`[Wu] ⏰ App ${appName} has been running for ${(age / 1000 / 60).toFixed(1)} minutes`);\n }\n }\n\n // Process health issues\n if (healthIssues.length > 0) {\n await this.processHealthIssues(healthIssues);\n }\n\n this.healthState.lastHealthCheck = now;\n\n } catch (error) {\n console.warn('[Wu] ⚠️ Health check failed:', error);\n }\n }\n\n /**\n * 🛠️ HEALTH ISSUE PROCESSOR\n */\n async processHealthIssues(issues) {\n for (const issue of issues) {\n if (this.healthState.healingInProgress.has(issue.appName)) {\n continue; // Already healing\n }\n\n console.log(`[Wu] 🩺 Health issue detected:`, issue);\n\n switch (issue.type) {\n case 'orphaned_container':\n await this.healOrphanedContainer(issue.appName);\n break;\n case 'unstable_state':\n await this.stabilizeAppState(issue.appName);\n break;\n case 'aging_app':\n await this.refreshAgingApp(issue.appName);\n break;\n }\n }\n }\n\n /**\n * 🔄 ORPHANED CONTAINER HEALING\n */\n async healOrphanedContainer(appName) {\n this.healthState.healingInProgress.add(appName);\n\n try {\n console.log(`[Wu] 🔄 Healing orphaned container for ${appName}`);\n\n // Clean up orphaned state\n await this.unmount(appName);\n\n // 🔍 Find a suitable container to remount\n const suitableContainers = [\n document.querySelector(`[data-wu-app=\"${appName}\"]`),\n document.querySelector(`#${appName}-container`),\n document.querySelector(`.${appName}-container`),\n document.querySelector(`[id*=\"${appName}\"]`)\n ].filter(Boolean);\n\n if (suitableContainers.length > 0) {\n const container = suitableContainers[0];\n const containerSelector = container.id ? `#${container.id}` : `.${container.className.split(' ')[0]}`;\n\n // 🎯 Only attempt re-mount if selector is valid\n if (containerSelector && containerSelector !== '#' && containerSelector !== '.') {\n await this.mount(appName, containerSelector);\n console.log(`[Wu] ✨ Successfully healed orphaned ${appName} in ${containerSelector}`);\n } else {\n console.warn(`[Wu] ⚠️ Could not determine valid selector for ${appName}`);\n }\n } else {\n console.warn(`[Wu] ⚠️ No suitable container found for healing ${appName}`);\n }\n\n } catch (error) {\n console.warn(`[Wu] ⚠️ Failed to heal orphaned ${appName}:`, error);\n } finally {\n this.healthState.healingInProgress.delete(appName);\n }\n }\n\n /**\n * ⚖️ APP STATE STABILIZATION\n */\n async stabilizeAppState(appName) {\n this.healthState.healingInProgress.add(appName);\n\n try {\n console.log(`[Wu] ⚖️ Stabilizing app state for ${appName}`);\n\n const mounted = this.mounted.get(appName);\n if (mounted) {\n mounted.state = 'stable';\n // ⚠️ DO NOT RESET TIMESTAMP - preserves app age for aging checks\n console.log(`[Wu] ✨ App state stabilized for ${appName}`);\n }\n\n } catch (error) {\n console.warn(`[Wu] ⚠️ Failed to stabilize ${appName}:`, error);\n } finally {\n this.healthState.healingInProgress.delete(appName);\n }\n }\n\n /**\n * 🕰️ AGING APP REFRESH\n * NOTE: This should ONLY trigger if agingThreshold is explicitly configured\n */\n async refreshAgingApp(appName) {\n // Safety check: Don't refresh if aging is disabled (Infinity)\n if (this.healthConfig.agingThreshold === Infinity) {\n console.warn(`[Wu] ⚠️ refreshAgingApp called but agingThreshold is Infinity - skipping`);\n return;\n }\n\n this.healthState.healingInProgress.add(appName);\n\n try {\n console.log(`[Wu] 🕰️ Refreshing aging app for ${appName}`);\n\n const mounted = this.mounted.get(appName);\n if (mounted) {\n // Gentle refresh without full remount\n // Reset timestamp ONLY when explicitly configured aging refresh\n mounted.timestamp = Date.now();\n mounted.state = 'refreshed';\n\n // Trigger a soft refresh of the app if it supports it\n if (mounted.lifecycle.refresh) {\n await mounted.lifecycle.refresh(mounted.container);\n }\n\n console.log(`[Wu] ✨ App refreshed for ${appName}`);\n }\n\n } catch (error) {\n console.warn(`[Wu] ⚠️ Failed to refresh ${appName}:`, error);\n } finally {\n this.healthState.healingInProgress.delete(appName);\n }\n }\n\n /**\n * 💥 ERROR EVENT HANDLER\n */\n handleErrorEvent(event) {\n console.log('[Wu] 💥 Error event detected:', event.error);\n\n // Check if error is related to any mounted apps\n for (const [appName, mounted] of this.mounted) {\n if (event.filename && event.filename.includes(mounted.app.url)) {\n console.log(`[Wu] 🎯 Error traced to ${appName}, initiating recovery...`);\n\n // Schedule healing\n setTimeout(() => {\n this.healOrphanedContainer(appName);\n }, 1000);\n\n break;\n }\n }\n }\n\n /**\n * 🚫 REJECTION HANDLER\n */\n handleRejection(event) {\n console.log('[Wu] 🚫 Promise rejection detected:', event.reason);\n\n // Prevent default unhandled rejection\n event.preventDefault();\n\n // Mark system as unstable temporarily\n this.healthState.systemStable = false;\n\n // Schedule stability restoration\n setTimeout(() => {\n this.healthState.systemStable = true;\n console.log('[Wu] ✨ System stability restored');\n }, 5000);\n }\n\n /**\n * Inicializar wu-framework con configuración de apps\n * @param {Object} config - Configuración { apps: [{name, url}, ...] }\n */\n async init(config) {\n if (this.isInitialized) {\n console.warn('[Wu] Framework already initialized');\n return;\n }\n\n logger.wuDebug('🔧 Initializing with apps:', config.apps?.map(app => app.name));\n\n try {\n // 🪝 Execute beforeInit hooks\n const beforeInitResult = await this.hooks.execute('beforeInit', { config });\n if (beforeInitResult.cancelled) {\n console.warn('[Wu] Initialization cancelled by beforeInit hook');\n return;\n }\n\n // 🔌 Call plugin beforeInit hooks\n await this.pluginSystem.callHook('beforeInit', { config });\n\n // 🏊 Initialize sandbox pool\n await this.sandboxPool.init();\n\n // Registrar todas las apps\n for (const appConfig of config.apps || []) {\n await this.registerApp(appConfig);\n }\n\n // 🎯 Preload apps with eager/preload strategies\n await this.strategies.preload(config.apps || []);\n\n this.isInitialized = true;\n\n // 🪝 Execute afterInit hooks\n await this.hooks.execute('afterInit', { config });\n\n // 🔌 Call plugin afterInit hooks\n await this.pluginSystem.callHook('afterInit', { config });\n\n logger.wuInfo('✅ Framework initialized successfully');\n } catch (error) {\n console.error('[Wu] ❌ Initialization failed:', error);\n\n // 🔌 Call plugin error hooks\n await this.pluginSystem.callHook('onError', { phase: 'init', error });\n\n throw error;\n }\n }\n\n /**\n * Registrar una aplicación\n * @param {Object} appConfig - { name, url }\n */\n async registerApp(appConfig) {\n const { name, url } = appConfig;\n\n try {\n logger.wuDebug(`📦 Registering app: ${name} from ${url}`);\n\n // Cargar manifest\n const manifestData = await this.manifest.load(url);\n this.manifests.set(name, manifestData);\n\n // Registrar la app\n this.apps.set(name, {\n name,\n url,\n manifest: manifestData,\n status: 'registered'\n });\n\n logger.wuDebug(`✅ App ${name} registered successfully`);\n } catch (error) {\n console.error(`[Wu] ❌ Failed to register app ${name}:`, error);\n throw error;\n }\n }\n\n /**\n * Definir lifecycle de una micro-app\n * @param {string} appName - Nombre de la app\n * @param {Object} lifecycle - { mount, unmount }\n */\n define(appName, lifecycle) {\n if (!lifecycle.mount) {\n throw new Error(`[Wu] Mount function required for app: ${appName}`);\n }\n\n this.definitions.set(appName, lifecycle);\n\n // 🔔 Notify registry that app is ready\n this.registry.markAsRegistered(appName);\n\n // 📡 Dispatch custom event for external listeners\n const event = new CustomEvent('wu:app:ready', {\n detail: { appName, timestamp: Date.now() }\n });\n window.dispatchEvent(event);\n\n logger.wuDebug(`📋 Lifecycle defined for: ${appName}`);\n }\n\n /**\n * 🚀 MOUNT APP: Multi-retry app mounting with self-healing\n * @param {string} appName - Nombre de la app\n * @param {string} containerSelector - Selector del contenedor\n */\n async mount(appName, containerSelector) {\n return await this.mountWithRecovery(appName, containerSelector, 0);\n }\n\n /**\n * 🔄 MOUNT WITH RECOVERY: Self-healing app mounting\n */\n async mountWithRecovery(appName, containerSelector, attempt = 0) {\n const maxAttempts = 3;\n\n try {\n // ⚡ Start performance measurement\n this.performance.startMeasure('mount', appName);\n\n logger.wuDebug(`🔗 Mounting ${appName} in ${containerSelector} (attempt ${attempt + 1})`);\n\n // 🪝 Execute beforeLoad hooks\n const beforeLoadResult = await this.hooks.execute('beforeLoad', { appName, containerSelector, attempt });\n if (beforeLoadResult.cancelled) {\n console.warn('[Wu] Mount cancelled by beforeLoad hook');\n return;\n }\n\n // 🔌 Call plugin beforeMount hooks\n const pluginBeforeMount = await this.pluginSystem.callHook('beforeMount', { appName, containerSelector });\n if (pluginBeforeMount === false) {\n console.warn('[Wu] Mount cancelled by plugin beforeMount hook');\n return;\n }\n\n // 🔮 Quantum state verification\n const app = this.apps.get(appName);\n if (!app) {\n throw new Error(`App ${appName} not registered. Call wu.init() first.`);\n }\n\n // 🌟 Container reality check\n const container = document.querySelector(containerSelector);\n if (!container) {\n throw new Error(`Container not found: ${containerSelector}`);\n }\n\n // 🏊 Acquire sandbox from pool (if configured)\n const poolSandbox = this.sandboxPool.acquire(appName);\n\n // 🛡️ Quantum sandbox creation - pasar manifest con styleMode y URL de la app\n const sandbox = this.sandbox.create(appName, container, {\n manifest: app.manifest,\n styleMode: app.manifest?.styleMode,\n appUrl: app.url // Pasar URL de la app para filtrar estilos de apps fully-isolated\n });\n\n // 🪝 Execute afterLoad hooks\n await this.hooks.execute('afterLoad', { appName, containerSelector, sandbox });\n\n // 🚀 Transcendent lifecycle resolution\n let lifecycle = this.definitions.get(appName);\n if (!lifecycle) {\n // Load remote app\n await this.loadAndMountRemoteApp(app, sandbox);\n lifecycle = this.definitions.get(appName);\n\n if (!lifecycle) {\n throw new Error(`App ${appName} did not register with wu.define()`);\n }\n }\n\n // 🪝 Execute beforeMount hooks\n const beforeMountResult = await this.hooks.execute('beforeMount', { appName, containerSelector, sandbox, lifecycle });\n if (beforeMountResult.cancelled) {\n console.warn('[Wu] Mount cancelled by beforeMount hook');\n return;\n }\n\n // 🎨 Wait for styles to be ready before mounting\n if (sandbox.stylesReady) {\n console.log(`[Wu] ⏳ Waiting for styles to be ready for ${appName}...`);\n await sandbox.stylesReady;\n console.log(`[Wu] ✅ Styles ready for ${appName}`);\n }\n\n // ⚡ Quantum mounting execution\n await lifecycle.mount(sandbox.container);\n\n // 🌌 Registration in mounted dimension\n this.mounted.set(appName, {\n app,\n sandbox,\n poolSandbox,\n lifecycle,\n container: sandbox.container,\n hostContainer: container,\n timestamp: Date.now(),\n state: 'stable'\n });\n\n // 🔍 Observar contenedor para health monitoring (sin memory leak)\n this.observeContainer(appName, container);\n\n // ⚡ End performance measurement\n const mountTime = this.performance.endMeasure('mount', appName);\n\n // 🪝 Execute afterMount hooks\n await this.hooks.execute('afterMount', { appName, containerSelector, sandbox, mountTime });\n\n // 🔌 Call plugin afterMount hooks\n await this.pluginSystem.callHook('afterMount', { appName, containerSelector, mountTime });\n\n // 📢 Emit mount event\n this.eventBus.emit('app:mounted', { appName, mountTime, attempt }, { appName });\n\n logger.wuInfo(`✅ ${appName} mounted successfully in ${mountTime.toFixed(2)}ms`);\n\n } catch (error) {\n console.error(`[Wu] ❌ Mount attempt ${attempt + 1} failed for ${appName}:`, error);\n\n // 🛡️ Use error boundary for intelligent error handling\n const errorResult = await this.errorBoundary.handle(error, {\n appName,\n containerSelector,\n retryCount: attempt,\n container: containerSelector\n });\n\n // Si el error boundary recuperó el error, no necesitamos reintentar\n if (errorResult.recovered) {\n console.log(`[Wu] ✨ Error recovered by error boundary`);\n return;\n }\n\n // 🔄 RECOVERY PROTOCOL\n if (attempt < maxAttempts - 1 && errorResult.action === 'retry') {\n console.log(`[Wu] 🌟 Initiating recovery protocol...`);\n\n // 🛠️ Clean app state\n await this.appStateCleanup(appName, containerSelector);\n\n // ⏱️ Temporal stabilization\n await new Promise(resolve => setTimeout(resolve, 1000 * (attempt + 1)));\n\n // 🚀 Recursive mounting with recovery\n return await this.mountWithRecovery(appName, containerSelector, attempt + 1);\n }\n\n // 🔌 Call plugin error hooks\n await this.pluginSystem.callHook('onError', { phase: 'mount', error, appName });\n\n // 💥 Final mount failure - error boundary already handled fallback UI\n throw error;\n }\n }\n\n /**\n * 🛠️ APP STATE CLEANUP: Enhanced container cleanup with framework protection\n */\n async appStateCleanup(appName, containerSelector) {\n try {\n console.log(`[Wu] 🧹 Starting app state cleanup for ${appName}...`);\n\n // 🚀 Clear any existing mounted state safely\n if (this.mounted.has(appName)) {\n try {\n await this.unmount(appName);\n } catch (unmountError) {\n console.warn(`[Wu] ⚠️ Unmount failed during cleanup:`, unmountError);\n }\n }\n\n // 🌌 Enhanced container cleanup with Vue safety measures\n const container = document.querySelector(containerSelector);\n if (container) {\n // 🛡️ Protect Vue's reactivity system\n if (container.shadowRoot) {\n try {\n // Clear shadow root content safely\n const shadowChildren = Array.from(container.shadowRoot.children);\n shadowChildren.forEach(child => {\n try {\n child.remove();\n } catch (removeError) {\n console.warn(`[Wu] ⚠️ Failed to remove shadow child:`, removeError);\n }\n });\n } catch (shadowError) {\n console.warn(`[Wu] ⚠️ Shadow root cleanup failed:`, shadowError);\n }\n }\n\n // 🔮 Clear any direct children if no shadow root\n if (!container.shadowRoot && container.children.length > 0) {\n try {\n container.innerHTML = '';\n } catch (htmlError) {\n console.warn(`[Wu] ⚠️ Container innerHTML cleanup failed:`, htmlError);\n }\n }\n\n // 🌟 Reset container attributes\n container.removeAttribute('data-wu-app');\n container.removeAttribute('data-quantum-state');\n container.removeAttribute('wu-debug');\n }\n\n // 🎯 Reset definition state\n this.definitions.delete(appName);\n\n // 🚀 Clear sandbox registry\n if (this.sandbox && this.sandbox.sandboxes) {\n this.sandbox.sandboxes.delete(appName);\n }\n\n console.log(`[Wu] ✅ App state cleaned successfully for ${appName}`);\n\n } catch (cleanupError) {\n console.warn(`[Wu] ⚠️ App cleanup partial failure for ${appName}:`, cleanupError);\n\n // 🌌 Emergency cleanup - force clear everything\n try {\n const container = document.querySelector(containerSelector);\n if (container) {\n container.style.display = 'none';\n setTimeout(() => {\n if (container) {\n container.style.display = '';\n }\n }, 100);\n }\n } catch (emergencyError) {\n console.error(`[Wu] 💥 Emergency cleanup failed:`, emergencyError);\n }\n }\n }\n\n /**\n * 💥 ERROR STATE RENDERER: Visual error manifestation\n */\n async renderErrorState(containerSelector, appName, error) {\n try {\n const container = document.querySelector(containerSelector);\n if (!container) return;\n\n // 🛡️ Clear container safely\n container.innerHTML = '';\n\n // 🌌 Create quantum error visualization with safe DOM manipulation\n const errorContainer = document.createElement('div');\n errorContainer.className = 'quantum-error-state';\n\n // Apply styles programmatically\n Object.assign(errorContainer.style, {\n padding: '2rem',\n borderRadius: '12px',\n background: 'linear-gradient(135deg, #1a1a2e, #16213e)',\n border: '2px solid #ff6b6b',\n color: '#fff',\n fontFamily: '\"Courier New\", monospace',\n textAlign: 'center',\n boxShadow: '0 0 20px rgba(255, 107, 107, 0.3)'\n });\n\n // Create elements safely\n const icon = document.createElement('div');\n icon.textContent = '🌌';\n Object.assign(icon.style, {\n fontSize: '3rem',\n marginBottom: '1rem'\n });\n\n const title = document.createElement('h3');\n title.textContent = 'MOUNT ERROR DETECTED';\n Object.assign(title.style, {\n color: '#ff6b6b',\n margin: '0 0 1rem 0'\n });\n\n const description = document.createElement('p');\n description.textContent = `App \"${appName}\" failed to mount in the container`;\n Object.assign(description.style, {\n margin: '0 0 1rem 0',\n opacity: '0.8'\n });\n\n const details = document.createElement('details');\n Object.assign(details.style, {\n margin: '1rem 0',\n textAlign: 'left'\n });\n\n const summary = document.createElement('summary');\n summary.textContent = '🔍 Debug Info';\n Object.assign(summary.style, {\n cursor: 'pointer',\n color: '#4ecdc4'\n });\n\n const pre = document.createElement('pre');\n pre.textContent = error.message; // Safe text content, no HTML injection\n Object.assign(pre.style, {\n background: 'rgba(0,0,0,0.3)',\n padding: '1rem',\n borderRadius: '6px',\n marginTop: '0.5rem',\n overflow: 'auto',\n fontSize: '0.8rem'\n });\n\n const button = document.createElement('button');\n button.textContent = '🔄 Reload Page';\n Object.assign(button.style, {\n background: 'linear-gradient(45deg, #4ecdc4, #44a08d)',\n border: 'none',\n padding: '0.8rem 1.5rem',\n borderRadius: '6px',\n color: 'white',\n cursor: 'pointer',\n fontWeight: 'bold',\n transition: 'transform 0.2s'\n });\n\n // Add safe event listeners\n button.addEventListener('click', () => window.location.reload());\n button.addEventListener('mouseenter', () => button.style.transform = 'scale(1.05)');\n button.addEventListener('mouseleave', () => button.style.transform = 'scale(1)');\n\n // Assemble DOM structure\n details.appendChild(summary);\n details.appendChild(pre);\n\n errorContainer.appendChild(icon);\n errorContainer.appendChild(title);\n errorContainer.appendChild(description);\n errorContainer.appendChild(details);\n errorContainer.appendChild(button);\n\n container.appendChild(errorContainer);\n\n } catch (renderError) {\n console.error(`[Wu] 💥 Failed to render error state:`, renderError);\n }\n }\n\n /**\n * 📦 REMOTE APP LOADER: Intelligent remote app loading with path resolution\n * @param {Object} app - Información de la app\n * @param {Object} sandbox - Sandbox creado\n */\n async loadAndMountRemoteApp(app, sandbox) {\n // 🔍 SMART PATH RESOLUTION: Multi-path URL construction with validation\n const moduleUrl = await this.resolveModulePath(app);\n\n console.log(`[Wu] 📦 Loading ES module: ${moduleUrl}`);\n\n try {\n // 🌟 MODULE LOADING: Multi-path module resolution\n await this.moduleLoader(moduleUrl, app.name);\n\n console.log(`[Wu] ✅ ES module loaded: ${app.name}`);\n\n } catch (error) {\n console.error(`[Wu] ❌ Failed to load ES module ${moduleUrl}:`, error);\n throw error;\n }\n }\n\n /**\n * 🔍 MODULE PATH RESOLVER: Intelligent URL construction with fallback\n * Intelligently resolves module paths with real-time validation\n */\n async resolveModulePath(app) {\n let entryFile = app.manifest?.entry || 'main.js';\n const baseUrl = app.url.replace(/\\/$/, ''); // Remove trailing slash\n\n // 🔧 NORMALIZE PATH: Remove duplicated directories\n // If entry already starts with 'src/', 'dist/', etc., use it as-is\n const hasFolderPrefix = /^(src|dist|public|build|assets|lib|es)\\//.test(entryFile);\n\n if (hasFolderPrefix) {\n console.log(`[Wu] 🔧 Entry already has folder prefix: ${entryFile}`);\n // Entry already has folder, just use baseUrl + entryFile\n const directPath = `${baseUrl}/${entryFile}`;\n console.log(`[Wu] 🎯 Using direct path: ${directPath}`);\n return directPath;\n }\n\n // 🔍 Multi-path candidates (in order of preference)\n const pathCandidates = [\n `${baseUrl}/src/${entryFile}`, // Standard structure\n `${baseUrl}/${entryFile}`, // Root level\n `${baseUrl}/dist/${entryFile}`, // Built version\n `${baseUrl}/public/${entryFile}`, // Public folder\n `${baseUrl}/build/${entryFile}`, // Build folder\n `${baseUrl}/assets/${entryFile}`, // Assets folder\n `${baseUrl}/lib/${entryFile}`, // Library folder\n `${baseUrl}/es/${entryFile}` // ES modules folder\n ];\n\n console.log(`[Wu] 🔍 Attempting path resolution for ${app.name}...`);\n\n // 🚀 SMART PATH DISCOVERY: Try each candidate with validation\n for (let i = 0; i < pathCandidates.length; i++) {\n const candidate = pathCandidates[i];\n\n try {\n console.log(`[Wu] 🎯 Testing path candidate ${i + 1}/${pathCandidates.length}: ${candidate}`);\n\n // 🌟 Path validation with enhanced verification\n const isValid = await this.validatePath(candidate);\n\n if (isValid) {\n console.log(`[Wu] ✅ Path resolved successfully: ${candidate}`);\n return candidate;\n } else {\n console.log(`[Wu] ❌ Path candidate ${i + 1} failed validation: ${candidate}`);\n }\n\n } catch (error) {\n console.log(`[Wu] ⚠️ Path candidate ${i + 1} threw error: ${candidate} - ${error.message}`);\n continue;\n }\n }\n\n // 🌌 FALLBACK: If all candidates fail, use the first one and let the error bubble up\n const fallbackPath = pathCandidates[0];\n console.warn(`[Wu] 🚨 All path candidates failed, using fallback: ${fallbackPath}`);\n return fallbackPath;\n }\n\n /**\n * 🔧 PATH VALIDATOR: Smart existence verification with module testing\n * Validates if a path exists and can be loaded as an ES module\n */\n async validatePath(url) {\n try {\n // 🌟 ENHANCED VALIDATION: Try actual module import for reliable verification\n console.log(`[Wu] 🔍 Testing path: ${url}`);\n\n // 🚀 First, try a GET request to check if file exists and is accessible\n const response = await fetch(url, {\n method: 'GET',\n cache: 'no-cache',\n signal: AbortSignal.timeout(2000) // 2 second timeout\n });\n\n if (!response.ok) {\n console.log(`[Wu] ❌ Path validation failed - HTTP ${response.status}: ${url}`);\n return false;\n }\n\n // 🎯 Check content type and file extension\n const contentType = response.headers.get('content-type') || '';\n const isJavaScript =\n contentType.includes('javascript') ||\n contentType.includes('module') ||\n contentType.includes('text/plain') || // Some servers serve JS as plain text\n url.endsWith('.js') ||\n url.endsWith('.mjs');\n\n if (!isJavaScript) {\n console.log(`[Wu] ❌ Path validation failed - Invalid content type '${contentType}': ${url}`);\n return false;\n }\n\n // 🌌 FINAL VERIFICATION: Check if content looks like a valid module\n const content = await response.text();\n\n // 🚫 DETECT HTML FALLBACK: Check if server returned HTML instead of JS\n // Only check if content STARTS with HTML markers (trimmed), not if it contains them anywhere\n // This avoids false positives for Angular/React bundles that contain template strings\n const trimmedContent = content.trim().toLowerCase();\n const isHtmlFallback =\n trimmedContent.startsWith('<!doctype') ||\n trimmedContent.startsWith('<html') ||\n trimmedContent.startsWith('<head') ||\n trimmedContent.startsWith('<body') ||\n trimmedContent.startsWith('<!-');\n\n if (isHtmlFallback) {\n console.log(`[Wu] ❌ Path validation failed - Server returned HTML fallback page: ${url}`);\n return false;\n }\n\n // 🎯 Check for valid JavaScript module content\n const hasModuleContent =\n content.includes('export') ||\n content.includes('import') ||\n content.includes('wu.define') ||\n content.includes('module.exports') ||\n content.includes('console.log') ||\n (content.includes('function') && content.length > 10);\n\n if (!hasModuleContent) {\n console.log(`[Wu] ❌ Path validation failed - No valid module content: ${url}`);\n console.log(`[Wu] 🔍 Content preview: ${content.substring(0, 100)}...`);\n return false;\n }\n\n console.log(`[Wu] ✅ Path validation successful: ${url} (${content.length} chars)`);\n return true;\n\n } catch (error) {\n // 🚫 Network, timeout, or parsing error means path is invalid\n console.log(`[Wu] ❌ Path validation failed for ${url}: ${error.message}`);\n return false;\n }\n }\n\n /**\n * 📦 MODULE LOADER: Advanced registration patterns\n * Handles asynchronous registration with timing synchronization\n * FIX: Verifica que definitions tenga el lifecycle después de cargar\n */\n async moduleLoader(moduleUrl, appName) {\n // ✅ Check if already registered\n if (this.definitions.has(appName)) {\n console.log(`[Wu] ⚡ App ${appName} already registered`);\n return;\n }\n\n console.log(`[Wu] 📡 Using event-based registration for ${appName}`);\n\n // 🚀 Load module first\n try {\n await import(/* @vite-ignore */ moduleUrl);\n } catch (loadError) {\n console.error(`[Wu] ❌ Failed to import module ${moduleUrl}:`, loadError);\n throw loadError;\n }\n\n // 🛡️ FIX: Esperar a que wu.define() se ejecute con verificación real\n const maxWaitTime = 10000; // 10 segundos\n const checkInterval = 50; // Verificar cada 50ms\n const startTime = Date.now();\n\n while (!this.definitions.has(appName)) {\n const elapsed = Date.now() - startTime;\n\n if (elapsed >= maxWaitTime) {\n throw new Error(\n `App '${appName}' module loaded but wu.define() was not called within ${maxWaitTime}ms.\\n\\n` +\n `Make sure your module calls:\\n` +\n ` wu.define('${appName}', { mount, unmount })\\n\\n` +\n `Or using window.wu:\\n` +\n ` window.wu.define('${appName}', { mount, unmount })`\n );\n }\n\n // Esperar un poco antes de verificar de nuevo\n await new Promise(resolve => setTimeout(resolve, checkInterval));\n }\n\n console.log(`[Wu] ✅ App ${appName} loaded and registered (verified in definitions)`);\n }\n\n /**\n * Desmontar una aplicación\n * @param {string} appName - Nombre de la app\n */\n async unmount(appName) {\n try {\n console.log(`[Wu] 🗑️ Unmounting ${appName}`);\n\n const mounted = this.mounted.get(appName);\n if (!mounted) {\n console.warn(`[Wu] App ${appName} not mounted`);\n return;\n }\n\n // 🪝 Execute beforeUnmount hooks\n const beforeUnmountResult = await this.hooks.execute('beforeUnmount', { appName, mounted });\n if (beforeUnmountResult.cancelled) {\n console.warn('[Wu] Unmount cancelled by beforeUnmount hook');\n return;\n }\n\n // 🔌 Call plugin beforeUnmount hooks\n const pluginBeforeUnmount = await this.pluginSystem.callHook('beforeUnmount', { appName });\n if (pluginBeforeUnmount === false) {\n console.warn('[Wu] Unmount cancelled by plugin beforeUnmount hook');\n return;\n }\n\n // Ejecutar unmount del lifecycle si existe\n if (mounted.lifecycle?.unmount) {\n await mounted.lifecycle.unmount(mounted.container);\n }\n\n // Limpiar sandbox\n this.sandbox.cleanup(mounted.sandbox);\n\n // 🏊 Release sandbox to pool\n if (mounted.poolSandbox) {\n this.sandboxPool.release(appName);\n }\n\n // 🔓 Dejar de observar contenedor (evita memory leak)\n this.unobserveContainer(appName);\n\n // Remover del registro de montadas\n this.mounted.delete(appName);\n\n // 🪝 Execute afterUnmount hooks\n await this.hooks.execute('afterUnmount', { appName });\n\n // 🔌 Call plugin afterUnmount hooks\n await this.pluginSystem.callHook('afterUnmount', { appName });\n\n // 📢 Emit unmount event\n this.eventBus.emit('app:unmounted', { appName }, { appName });\n\n console.log(`[Wu] ✅ ${appName} unmounted successfully`);\n } catch (error) {\n console.error(`[Wu] ❌ Failed to unmount ${appName}:`, error);\n\n // 🔌 Call plugin error hooks\n await this.pluginSystem.callHook('onError', { phase: 'unmount', error, appName });\n\n // 📢 Emit error event\n this.eventBus.emit('app:error', { appName, error: error.message }, { appName });\n throw error;\n }\n }\n\n /**\n * Cargar componente compartido (para imports/exports)\n * @param {string} componentPath - Ruta del componente (ej: \"shared.Button\")\n */\n async use(componentPath) {\n const [appName, componentName] = componentPath.split('.');\n\n if (!appName || !componentName) {\n throw new Error(`Invalid component path: ${componentPath}. Use format \"app.component\"`);\n }\n\n const app = this.apps.get(appName);\n if (!app) {\n throw new Error(`App ${appName} not registered`);\n }\n\n const manifest = this.manifests.get(appName);\n const exportPath = manifest?.wu?.exports?.[componentName];\n\n if (!exportPath) {\n throw new Error(`Component ${componentName} not exported by ${appName}`);\n }\n\n // Cargar componente\n return await this.loader.loadComponent(app.url, exportPath);\n }\n\n /**\n * Obtener información de una app\n * @param {string} appName - Nombre de la app\n */\n getAppInfo(appName) {\n return {\n registered: this.apps.get(appName),\n manifest: this.manifests.get(appName),\n mounted: this.mounted.get(appName),\n definition: this.definitions.get(appName)\n };\n }\n\n /**\n * Obtener estadísticas del framework\n */\n getStats() {\n return {\n registered: this.apps.size,\n defined: this.definitions.size,\n mounted: this.mounted.size,\n apps: Array.from(this.apps.keys())\n };\n }\n\n /**\n * 🏪 STORE METHODS: Convenience methods for state management\n */\n\n /**\n * Get value from global store\n * @param {string} path - Dot notation path\n * @returns {*} Value at path\n */\n getState(path) {\n return this.store.get(path);\n }\n\n /**\n * Set value in global store\n * @param {string} path - Dot notation path\n * @param {*} value - Value to set\n * @returns {number} Sequence number\n */\n setState(path, value) {\n return this.store.set(path, value);\n }\n\n /**\n * Subscribe to state changes\n * @param {string} pattern - Path or pattern\n * @param {Function} callback - Callback function\n * @returns {Function} Unsubscribe function\n */\n onStateChange(pattern, callback) {\n return this.store.on(pattern, callback);\n }\n\n /**\n * Batch set multiple state values\n * @param {Object} updates - Object with path:value pairs\n * @returns {Array} Sequence numbers\n */\n batchState(updates) {\n return this.store.batch(updates);\n }\n\n /**\n * Get store metrics\n * @returns {Object} Performance metrics\n */\n getStoreMetrics() {\n return this.store.getMetrics();\n }\n\n /**\n * Clear all state\n */\n clearState() {\n this.store.clear();\n }\n\n /**\n * 🎯 SIMPLIFIED API: Create WuApp instance for declarative usage\n * @param {string} name - App name\n * @param {Object} config - Configuration { url, container, autoInit }\n * @returns {WuApp} WuApp instance\n */\n app(name, config) {\n return new WuApp(name, config, this);\n }\n\n /**\n * Limpiar todo el framework\n */\n async destroy() {\n console.log('[Wu] 🧹 Destroying framework...');\n\n try {\n // 🪝 Execute beforeDestroy hooks\n await this.hooks.execute('beforeDestroy', {});\n\n // 🔌 Call plugin onDestroy hooks\n await this.pluginSystem.callHook('onDestroy', {});\n\n // Limpiar health monitor\n if (this.healthState.monitor) {\n clearInterval(this.healthState.monitor);\n this.healthState.monitor = null;\n }\n\n // Limpiar todos los MutationObservers por contenedor\n if (this.healthState.containerObservers) {\n for (const [appName, observer] of this.healthState.containerObservers) {\n observer.disconnect();\n }\n this.healthState.containerObservers.clear();\n }\n\n // Limpiar timeouts pendientes\n if (this.healthState.mutationCheckTimeout) {\n clearTimeout(this.healthState.mutationCheckTimeout);\n }\n\n // Desmontar todas las apps\n for (const appName of this.mounted.keys()) {\n await this.unmount(appName);\n }\n\n // 🧹 Limpiar sistemas esenciales\n this.cache.clear();\n this.eventBus.removeAll();\n this.eventBus.clearHistory();\n this.performance.clearMetrics();\n\n // 🧹 Limpiar advanced systems\n this.pluginSystem.cleanup();\n this.strategies.cleanup();\n this.errorBoundary.cleanup();\n this.hooks.cleanup();\n this.sandboxPool.cleanup();\n this.registry.cleanup();\n\n // Limpiar registros\n this.apps.clear();\n this.definitions.clear();\n this.manifests.clear();\n this.mounted.clear();\n\n // Limpiar store\n this.store.clear();\n\n this.isInitialized = false;\n\n // 🪝 Execute afterDestroy hooks\n await this.hooks.execute('afterDestroy', {});\n\n console.log('[Wu] ✅ Framework destroyed');\n } catch (error) {\n console.error('[Wu] ❌ Error during destroy:', error);\n throw error;\n }\n }\n}","/**\n * 🚀 WU-FRAMEWORK: UNIVERSAL MICROFRONTENDS\n *\n * Framework puro para microfrontends con sistemas esenciales\n * - Framework Agnostic: React, Vue, Angular, Svelte, Vanilla JS\n * - Zero Config: npm install wu-framework y funciona\n * - Shadow DOM: Aislamiento real sin hacks CSS\n * - Runtime Loading: Apps dinámicas sin rebuild\n * - Style Sharing: Comparte estilos de node_modules automáticamente\n * - Internal Cache: Cacheo inteligente de manifests y módulos (interno)\n * - Event Bus: Comunicación pub/sub entre microfrontends\n * - Performance Monitor: Monitoreo de lifecycle del framework (mount/unmount)\n * - Health Monitoring: Sistema de auto-healing para microfrontends\n *\n * @example\n * ```js\n * import { wu, emit, on } from 'wu-framework';\n *\n * // ✨ API SIMPLIFICADA\n * const canvas = wu.app('canvas', {\n * url: 'http://localhost:5178',\n * container: '#canvas-container'\n * });\n *\n * await canvas.mount(); // Monta la app\n * canvas.isMounted; // Verifica estado\n * await canvas.unmount(); // Desmonta\n *\n * // 📡 EVENT BUS (Comunicación entre microfrontends)\n * import { emit, on, once } from 'wu-framework';\n *\n * // Emitir evento\n * emit('user:login', { userId: 123, name: 'John' });\n *\n * // Escuchar eventos (soporta wildcards)\n * on('user:*', (event) => {\n * console.log('User event:', event.data);\n * });\n *\n * // Escuchar una sola vez\n * once('app:ready', () => console.log('App is ready!'));\n *\n * // ⚡ PERFORMANCE MONITORING (Framework lifecycle)\n * import { startMeasure, endMeasure, generatePerformanceReport } from 'wu-framework';\n *\n * // Medir tiempos de mount/unmount\n * startMeasure('custom-operation', 'canvas');\n * await doSomething();\n * const duration = endMeasure('custom-operation', 'canvas');\n * console.log(`Operation took ${duration}ms`);\n *\n * // Generar reporte\n * const report = generatePerformanceReport();\n * console.log('Framework performance:', report);\n *\n * // 🔄 API CLÁSICA (también disponible)\n * wu.init({\n * apps: [{ name: 'header', url: 'http://localhost:3001' }]\n * });\n * await wu.mount('header', '#header-container');\n *\n * // Micro app (cualquier framework)\n * wu.define('header', {\n * mount: (container) => {\n * // React: ReactDOM.render(<HeaderApp />, container);\n * // Vue: createApp(HeaderApp).mount(container);\n * // Vanilla: container.innerHTML = '<h1>Header</h1>';\n * },\n * unmount: (container) => {\n * // Cleanup logic aquí\n * }\n * });\n * ```\n */\n\nimport { WuCore } from './core/wu-core.js';\n\n// 🔑 SINGLETON PATTERN: Reusar instancia global si existe\n// Esto permite que los microfrontends importen wu-framework y usen la misma instancia del host\nlet wu;\n\nif (typeof window !== 'undefined' && window.wu && window.wu._isWuFramework) {\n // Ya existe una instancia del host - reutilizarla\n wu = window.wu;\n console.log('🔗 Wu Framework - Reusing existing instance from host');\n} else {\n // Primera carga - crear nueva instancia\n wu = new WuCore({\n healthMonitoring: true,\n autoHeal: true,\n agingThreshold: Infinity,\n healthCheckInterval: 60000\n });\n\n // Marcar como instancia de wu-framework\n wu._isWuFramework = true;\n}\n\n// Hacer wu disponible globalmente\nif (typeof window !== 'undefined') {\n // SIEMPRE configurar window.wu con la instancia real (puede haber un objeto vacío)\n window.wu = wu;\n\n // Configurar propiedades si no existen\n if (!wu.version) {\n wu.version = '1.0.6';\n console.log('🚀 Wu Framework loaded - Universal Microfrontends ready');\n wu.info = {\n name: 'Wu Framework',\n description: 'Universal Microfrontends',\n features: [\n 'Framework Agnostic',\n 'Zero Config',\n 'Shadow DOM Isolation',\n 'Runtime Loading',\n 'Component Sharing'\n ]\n };\n }\n\n // 📡 Exponer Event Bus API globalmente para microfrontends\n // Esto permite: window.wu.emit() Y import { emit } from 'wu-framework'\n if (!wu.emit) {\n wu.emit = (eventName, data, options) => wu.eventBus.emit(eventName, data, options);\n wu.on = (eventName, callback) => wu.eventBus.on(eventName, callback);\n wu.once = (eventName, callback) => wu.eventBus.once(eventName, callback);\n wu.off = (eventName, callback) => wu.eventBus.off(eventName, callback);\n }\n\n // 🔇 Exponer funciones de control de logs\n // window.wu.silence() para silenciar, window.wu.verbose() para debug\n if (!wu.silence) {\n wu.silence = async () => {\n const { silenceAllLogs } = await import('./core/wu-logger.js');\n silenceAllLogs();\n };\n wu.verbose = async () => {\n const { enableAllLogs } = await import('./core/wu-logger.js');\n enableAllLogs();\n };\n }\n}\n\n// Exportar API principal\nexport { wu };\nexport default wu;\n\n// Exportar clases individuales para uso avanzado\nexport { WuCore } from './core/wu-core.js';\nexport { WuLoader } from './core/wu-loader.js';\nexport { WuSandbox } from './core/wu-sandbox.js';\nexport { WuManifest } from './core/wu-manifest.js';\nexport { WuStore } from './core/wu-store.js';\nexport { WuApp } from './core/wu-app.js';\nexport { WuStyleBridge } from './core/wu-style-bridge.js';\nexport { default as store } from './core/wu-store.js';\n\n// 🚀 NUEVOS SISTEMAS DE AISLAMIENTO (basados en video-code)\nexport { WuProxySandbox } from './core/wu-proxy-sandbox.js';\nexport { WuSnapshotSandbox } from './core/wu-snapshot-sandbox.js';\nexport { WuScriptExecutor, executeScript, executeScripts } from './core/wu-script-executor.js';\nexport { WuHtmlParser, parseHtml, parseHtmlFromUrl } from './core/wu-html-parser.js';\n\n// 🚀 Exportar sistemas esenciales\nexport { WuCache } from './core/wu-cache.js';\nexport { WuEventBus } from './core/wu-event-bus.js';\nexport { WuPerformance } from './core/wu-performance.js';\n\n// 🎯 Exportar advanced systems\nexport { WuPluginSystem, createPlugin } from './core/wu-plugin.js';\nexport { WuLoadingStrategy } from './core/wu-strategies.js';\nexport { WuErrorBoundary } from './core/wu-error-boundary.js';\nexport {\n WuLifecycleHooks,\n createSimpleHook,\n createConditionalHook,\n createGuardHook,\n createTransformHook,\n createTimedHook\n} from './core/wu-hooks.js';\nexport { WuSandboxPool } from './core/wu-sandbox-pool.js';\nexport { WuRegistry } from './core/wu-registry.js';\nexport { silenceAllLogs, enableAllLogs } from './core/wu-logger.js';\n\n/**\n * Utilidades de conveniencia para uso común\n */\n\n/**\n * Inicializar wu-framework con configuración simple\n * @param {Array} apps - Lista de apps: [{ name, url }, ...]\n * @returns {Promise} Promesa de inicialización\n */\nexport const init = async (apps) => {\n return await wu.init({ apps });\n};\n\n/**\n * Montar app en contenedor\n * @param {string} appName - Nombre de la app\n * @param {string} containerSelector - Selector del contenedor\n * @returns {Promise} Promesa de montaje\n */\nexport const mount = async (appName, containerSelector) => {\n return await wu.mount(appName, containerSelector);\n};\n\n/**\n * Definir lifecycle de micro-app\n * @param {string} appName - Nombre de la app\n * @param {Object} lifecycle - { mount, unmount }\n */\nexport const define = (appName, lifecycle) => {\n return wu.define(appName, lifecycle);\n};\n\n/**\n * Desmontar app\n * @param {string} appName - Nombre de la app\n * @returns {Promise} Promesa de desmontaje\n */\nexport const unmount = async (appName) => {\n return await wu.unmount(appName);\n};\n\n/**\n * Crear instancia de WuApp (API simplificada)\n * @param {string} name - Nombre de la app\n * @param {Object} config - Configuración { url, container, autoInit }\n * @returns {WuApp} Instancia de WuApp\n */\nexport const app = (name, config) => {\n return wu.app(name, config);\n};\n\n/**\n * Usar componente compartido\n * @param {string} componentPath - Ruta del componente (ej: \"shared.Button\")\n * @returns {Promise} Componente cargado\n */\nexport const use = async (componentPath) => {\n return await wu.use(componentPath);\n};\n\n\n/**\n * Obtener información de una app\n * @param {string} appName - Nombre de la app\n * @returns {Object} Información de la app\n */\nexport const getAppInfo = (appName) => {\n return wu.getAppInfo(appName);\n};\n\n/**\n * Obtener estadísticas del framework\n * @returns {Object} Estadísticas\n */\nexport const getStats = () => {\n return wu.getStats();\n};\n\n/**\n * 🏪 STORE CONVENIENCE METHODS\n */\n\n/**\n * Get value from global store\n * @param {string} path - Dot notation path\n * @returns {*} Value at path\n */\nexport const getState = (path) => {\n return wu.getState(path);\n};\n\n/**\n * Set value in global store\n * @param {string} path - Dot notation path\n * @param {*} value - Value to set\n * @returns {number} Sequence number\n */\nexport const setState = (path, value) => {\n return wu.setState(path, value);\n};\n\n/**\n * Subscribe to state changes\n * @param {string} pattern - Path or pattern\n * @param {Function} callback - Callback function\n * @returns {Function} Unsubscribe function\n */\nexport const onStateChange = (pattern, callback) => {\n return wu.onStateChange(pattern, callback);\n};\n\n/**\n * Batch set multiple state values\n * @param {Object} updates - Object with path:value pairs\n * @returns {Array} Sequence numbers\n */\nexport const batchState = (updates) => {\n return wu.batchState(updates);\n};\n\n/**\n * Get store metrics\n * @returns {Object} Performance metrics\n */\nexport const getStoreMetrics = () => {\n return wu.getStoreMetrics();\n};\n\n/**\n * Clear all state\n */\nexport const clearState = () => {\n wu.clearState();\n};\n\n/**\n * Limpiar y destruir framework\n * @returns {Promise} Promesa de destrucción\n */\nexport const destroy = async () => {\n return await wu.destroy();\n};\n\n/**\n * 🎨 STYLE SHARING: Configurar compartición de estilos en Shadow DOM\n * @param {Object} config - Configuración del StyleBridge\n */\nexport const configureStyleSharing = (config) => {\n return wu.sandbox.configureStyleSharing(config);\n};\n\n/**\n * 🔄 RE-INYECTAR ESTILOS: Vuelve a inyectar estilos en una app\n * @param {string} appName - Nombre de la app\n * @returns {Promise}\n */\nexport const reinjectStyles = async (appName) => {\n return await wu.sandbox.reinjectStyles(appName);\n};\n\n/**\n * 📊 ESTADÍSTICAS DE ESTILOS: Información sobre estilos compartidos\n * @returns {Object}\n */\nexport const getStyleStats = () => {\n return wu.sandbox.getStyleStats();\n};\n\n/**\n * 📡 EVENT BUS: Sistema de eventos avanzado\n */\n\n/**\n * Emitir evento\n * @param {string} eventName - Nombre del evento\n * @param {*} data - Datos del evento\n * @param {Object} options - Opciones { appName, timestamp, meta }\n */\nexport const emit = (eventName, data, options) => {\n wu.eventBus.emit(eventName, data, options);\n};\n\n/**\n * Suscribirse a evento\n * @param {string} eventName - Nombre del evento (soporta wildcards: 'app.*')\n * @param {Function} callback - Función callback\n * @returns {Function} Función para desuscribirse\n */\nexport const on = (eventName, callback) => {\n return wu.eventBus.on(eventName, callback);\n};\n\n/**\n * Suscribirse a evento una sola vez\n * @param {string} eventName - Nombre del evento\n * @param {Function} callback - Función callback\n * @returns {Function} Función para desuscribirse\n */\nexport const once = (eventName, callback) => {\n return wu.eventBus.once(eventName, callback);\n};\n\n/**\n * Desuscribirse de evento\n * @param {string} eventName - Nombre del evento\n * @param {Function} callback - Función callback\n */\nexport const off = (eventName, callback) => {\n wu.eventBus.off(eventName, callback);\n};\n\n/**\n * Reproducir eventos del historial\n * @param {string} eventNameOrPattern - Nombre o patrón de eventos\n * @param {Function} callback - Callback para cada evento\n */\nexport const replayEvents = (eventNameOrPattern, callback) => {\n wu.eventBus.replay(eventNameOrPattern, callback);\n};\n\n/**\n * Obtener estadísticas del event bus\n * @returns {Object}\n */\nexport const getEventBusStats = () => {\n return wu.eventBus.getStats();\n};\n\n/**\n * ⚡ PERFORMANCE: Monitoreo de lifecycle del framework\n */\n\n/**\n * Iniciar medición de performance\n * @param {string} name - Nombre de la medición\n * @param {string} appName - Nombre de la app (opcional)\n */\nexport const startMeasure = (name, appName) => {\n wu.performance.startMeasure(name, appName);\n};\n\n/**\n * Finalizar medición de performance\n * @param {string} name - Nombre de la medición\n * @param {string} appName - Nombre de la app (opcional)\n * @returns {number} Duración en ms\n */\nexport const endMeasure = (name, appName) => {\n return wu.performance.endMeasure(name, appName);\n};\n\n/**\n * Obtener métricas de performance de una app\n * @param {string} appName - Nombre de la app\n * @returns {Object}\n */\nexport const getPerformanceMetrics = (appName) => {\n return wu.performance.getMetrics(appName);\n};\n\n/**\n * Obtener todas las métricas de performance\n * @returns {Object}\n */\nexport const getAllPerformanceMetrics = () => {\n return wu.performance.getAllMetrics();\n};\n\n/**\n * Generar reporte de performance del framework\n * @returns {Object}\n */\nexport const generatePerformanceReport = () => {\n return wu.performance.generateReport();\n};\n\n/**\n * Limpiar métricas de performance\n * @param {string} appName - Nombre de la app (opcional, si no se pasa limpia todas)\n */\nexport const clearPerformanceMetrics = (appName) => {\n wu.performance.clearMetrics(appName);\n};\n\n/**\n * 🔌 PLUGINS: Sistema de plugins extensible\n */\n\n/**\n * Instalar plugin en el framework\n * @param {Object|Function} plugin - Plugin o factory function\n * @param {Object} options - Opciones del plugin\n */\nexport const usePlugin = (plugin, options) => {\n wu.pluginSystem.use(plugin, options);\n};\n\n/**\n * Desinstalar plugin\n * @param {string} pluginName - Nombre del plugin\n */\nexport const uninstallPlugin = (pluginName) => {\n wu.pluginSystem.uninstall(pluginName);\n};\n\n/**\n * Obtener estadísticas de plugins\n * @returns {Object}\n */\nexport const getPluginStats = () => {\n return wu.pluginSystem.getStats();\n};\n\n/**\n * 🪝 HOOKS: Sistema de lifecycle hooks\n */\n\n/**\n * Registrar lifecycle hook\n * @param {string} phase - Fase del lifecycle\n * @param {Function} middleware - Función middleware\n * @param {Object} options - Opciones { priority, name }\n * @returns {Function} Función para desregistrar\n */\nexport const useHook = (phase, middleware, options) => {\n return wu.hooks.use(phase, middleware, options);\n};\n\n/**\n * Remover lifecycle hook\n * @param {string} phase - Fase del lifecycle\n * @param {string} name - Nombre del hook\n */\nexport const removeHook = (phase, name) => {\n wu.hooks.remove(phase, name);\n};\n\n/**\n * Obtener estadísticas de hooks\n * @returns {Object}\n */\nexport const getHookStats = () => {\n return wu.hooks.getStats();\n};\n\n/**\n * 🎯 STRATEGIES: Sistema de loading strategies\n */\n\n/**\n * Registrar loading strategy personalizada\n * @param {string} name - Nombre de la estrategia\n * @param {Object} strategy - Configuración de la estrategia\n */\nexport const registerStrategy = (name, strategy) => {\n wu.strategies.register(name, strategy);\n};\n\n/**\n * Obtener estadísticas de strategies\n * @returns {Object}\n */\nexport const getStrategyStats = () => {\n return wu.strategies.getStats();\n};\n\n/**\n * 🛡️ ERROR BOUNDARY: Sistema de error handling\n */\n\n/**\n * Registrar error handler personalizado\n * @param {Object} handler - Error handler { name, canHandle, handle }\n */\nexport const registerErrorHandler = (handler) => {\n wu.errorBoundary.register(handler);\n};\n\n/**\n * Configurar error boundary\n * @param {Object} config - Nueva configuración\n */\nexport const configureErrorBoundary = (config) => {\n wu.errorBoundary.configure(config);\n};\n\n/**\n * Obtener log de errores\n * @param {number} limit - Límite de errores a retornar\n * @returns {Array}\n */\nexport const getErrorLog = (limit) => {\n return wu.errorBoundary.getErrorLog(limit);\n};\n\n/**\n * Obtener estadísticas de error boundary\n * @returns {Object}\n */\nexport const getErrorBoundaryStats = () => {\n return wu.errorBoundary.getStats();\n};\n\n/**\n * 🏊 SANDBOX POOL: Sistema de sandbox pooling\n */\n\n/**\n * Configurar sandbox pool\n * @param {Object} config - Nueva configuración\n */\nexport const configureSandboxPool = (config) => {\n wu.sandboxPool.configure(config);\n};\n\n/**\n * Obtener estadísticas de sandbox pool\n * @returns {Object}\n */\nexport const getSandboxPoolStats = () => {\n return wu.sandboxPool.getStats();\n};\n\n/**\n * Presets comunes para configuración rápida\n */\nexport const presets = {\n /**\n * Configuración para desarrollo local\n * @param {Array} apps - Apps con puertos locales\n */\n development: (apps) => {\n const devApps = apps.map(app => ({\n ...app,\n url: app.url || `http://localhost:${app.port || 3001}`\n }));\n\n return {\n apps: devApps,\n debug: true,\n hotReload: true\n };\n },\n\n /**\n * Configuración para producción\n * @param {Array} apps - Apps con URLs de producción\n */\n production: (apps) => {\n return {\n apps,\n debug: false,\n cache: true,\n preload: true\n };\n },\n\n /**\n * Configuración para single page application\n * @param {Object} config - Configuración SPA\n */\n spa: (config) => {\n return {\n apps: [\n {\n name: 'main',\n url: config.url || window.location.origin,\n container: config.container || '#app'\n }\n ]\n };\n }\n};\n\n/**\n * Helpers para desarrollo\n */\nexport const dev = {\n /**\n * Activar modo debug\n */\n enableDebug: () => {\n wu.debug = true;\n console.log('🐛 Wu Framework debug mode enabled');\n },\n\n /**\n * Desactivar modo debug\n */\n disableDebug: () => {\n wu.debug = false;\n console.log('🐛 Wu Framework debug mode disabled');\n },\n\n /**\n * Inspeccionar estado del framework\n */\n inspect: () => {\n return {\n version: wu.version,\n stats: wu.getStats(),\n apps: Array.from(wu.apps.keys()).map(name => wu.getAppInfo(name))\n };\n },\n\n /**\n * Recargar app específica (útil para desarrollo)\n * @param {string} appName - Nombre de la app\n */\n reload: async (appName) => {\n console.log(`🔄 Reloading app: ${appName}`);\n await wu.unmount(appName);\n\n // Limpiar caches\n wu.loader.clearCache(appName);\n wu.manifest.clearCache(appName);\n\n await wu.mount(appName);\n console.log(`✅ App reloaded: ${appName}`);\n }\n};\n\n/**\n * Eventos del framework\n */\nexport const events = {\n // Event listeners para el ciclo de vida de las apps\n onAppMounted: (callback) => {\n document.addEventListener('wu:app:mounted', callback);\n },\n\n onAppUnmounted: (callback) => {\n document.addEventListener('wu:app:unmounted', callback);\n },\n\n onAppError: (callback) => {\n document.addEventListener('wu:app:error', callback);\n },\n\n onFrameworkReady: (callback) => {\n document.addEventListener('wu:framework:ready', callback);\n }\n};"],"names":[],"mappings":"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"}