# Referencia de carga, caché y diagnóstico

Carga dinámica, prioridades, overrides, caché, estilos y observación del runtime.

<span class="section-anchor" id="section-1"></span>

## Elegir el nivel de carga

Usa `wu.mount` para el ciclo de vida completo. `wu.prefetch` anticipa recursos de aplicaciones registradas y `wu.use` carga componentes publicados mediante exports. `WuLoader` es un cargador independiente: no sustituye el catálogo, el sandbox ni los grants del core.

Los overrides y las herramientas de inspección pertenecen al host. Una métrica mide un tramo observado; no garantiza que el navegador haya terminado de pintar. Consulta [carga de aplicaciones](/es/docs/framework/loading/) y [diagnóstico](/es/docs/framework/troubleshooting/) para el flujo completo.

<span class="section-anchor" id="section-2"></span>

## wu.use

Carga una exportación de componente declarada por otra aplicación.

`wu.use("app.component"): Promise<unknown>`

- **Parámetros:** Nombre exacto app.component; el manifest proveedor debe declarar wu.exports.
- **Retorno:** default export cuando existe, o namespace del módulo.
- **Errores:** App/export ausentes, traversal, URL inválida o import fallido rechazan.
- **Permisos:** Host; un componente cargado ejecuta código en el realm del consumidor.
- **Limpieza:** La instancia del renderer que use el componente administra su cleanup.

```js
const ProductCard = await wu.use('catalog.ProductCard');
```

Método presente en runtime pero ausente de la declaración WuCore. No convierte componentes entre frameworks.

Referencia: `src/core/wu-core.js`.

<span class="section-anchor" id="section-3"></span>

## wu.prefetchAll

Solicita precarga para todas las aplicaciones registradas.

`wu.prefetchAll(options?): Promise<void> | (() => void)`

- **Parámetros:** Mismas opciones de disparador que prefetch.
- **Retorno:** Promesa inmediata o cleanup de disparadores diferidos.
- **Errores:** La precarga es una solicitud al navegador; no confirma que un renderer pueda montar.
- **Permisos:** API de host; no está expuesta por la facade scoped.
- **Limpieza:** Conserva el cleanup si eliges un disparador diferido.

```js
await wu.prefetchAll({ on: 'immediate' });
```

Referencia: `src/core/wu-prefetch.js`.

<span class="section-anchor" id="section-4"></span>

## new WuLoader

Crea un loader de código y componentes con caché y deduplicación en vuelo.

`new WuLoader({ maxCacheSize?, cacheTTL? }?): WuLoader`

- **Parámetros:** maxCacheSize limita el número de entradas (50 por defecto); cacheTTL expresa milisegundos (1800000 por defecto).
- **Retorno:** Instancia con loadApp, loadComponent, preload, isAvailable y clearCache.
- **Errores:** No registra apps ni ejecuta el lifecycle por construirlo.
- **Permisos:** API de host; no está expuesta por la facade scoped.
- **Limpieza:** loader.clearCache() libera sus entradas cacheadas.

```js
import { WuLoader } from 'wu-framework';
const loader = new WuLoader({ maxCacheSize: 20, cacheTTL: 60000 });
```

Referencia: `src/core/wu-loader.js`.

<span class="section-anchor" id="section-5"></span>

## WuLoader.loadApp

Descarga texto de código de un entry para el pipeline de carga.

`loader.loadApp(appUrl, manifest?): Promise<string>`

- **Parámetros:** Base URL y manifest con entry opcional.
- **Retorno:** String con código; no ejecuta mount ni registra la app.
- **Errores:** Fetch fallido, respuesta no válida o resolución de entry fallida rechazan.
- **Permisos:** Host; sujeto a acceso de red del entorno.
- **Limpieza:** clearCache(base) descarta lecturas futuras cacheadas.

```js
const code = await loader.loadApp('/apps/catalog', { entry: 'entry.js' });
```

Referencia: `src/core/wu-loader.js`.

<span class="section-anchor" id="section-6"></span>

## WuLoader.loadComponent

Importa un componente confinado a la base de una app.

`loader.loadComponent(appUrl, componentPath): Promise<unknown>`

- **Parámetros:** Base y ruta relativa de componente; no URLs absolutas ni traversal.
- **Retorno:** default export o namespace importado.
- **Errores:** Ruta fuera de base o import fallido rechaza.
- **Permisos:** El módulo ejecuta código del mismo contexto; no es RPC scoped.
- **Limpieza:** El import nativo conserva su caché de módulos.

```js
const card = await loader.loadComponent('/apps/catalog', 'components/card.js');
```

Referencia: `src/core/wu-loader.js`.

<span class="section-anchor" id="section-7"></span>

## WuLoader.preload

Anticipa la descarga de código para una lista de aplicaciones.

`loader.preload(appConfigs: WuAppConfig[]): Promise<void>`

- **Parámetros:** Array de configuraciones con name y url.
- **Retorno:** Promesa de finalización del recorrido de precarga.
- **Errores:** La precarga captura fallos por app; inspecciona la disponibilidad antes del montaje.
- **Permisos:** API de host; no está expuesta por la facade scoped.
- **Limpieza:** No monta renderers; clearCache libera texto cacheado.

```js
await loader.preload([{ name: 'catalog', url: '/apps/catalog' }]);
```

Referencia: `src/core/wu-loader.js`.

<span class="section-anchor" id="section-8"></span>

## WuLoader.isAvailable

Consulta si una URL responde correctamente a HEAD.

`loader.isAvailable(url): Promise<boolean>`

- **Parámetros:** URL a comprobar.
- **Retorno:** Booleano; errores de red se convierten en false.
- **Errores:** Un servidor que rechaza HEAD puede devolver false aunque GET funcione.
- **Permisos:** Acceso de red del host.
- **Limpieza:** No crea suscripciones ni procesos persistentes.

```js
const available = await loader.isAvailable('/apps/catalog/entry.js');
```

Referencia: `src/core/wu-loader.js`.

<span class="section-anchor" id="section-9"></span>

## WuLoader.clearCache

Descarta el texto y registros cacheados del loader.

`loader.clearCache(pattern?): void`

- **Parámetros:** Patrón opcional; sin patrón vacía la caché del loader.
- **Retorno:** void.
- **Errores:** No invalida el caché ESM del navegador.
- **Permisos:** API de host; no está expuesta por la facade scoped.
- **Limpieza:** No crea suscripciones ni procesos persistentes.

```js
loader.clearCache('catalog');
```

Referencia: `src/core/wu-loader.js`.

<span class="section-anchor" id="section-10"></span>

## WuLoader.getStats

Consulta caché e imports en vuelo del loader.

`loader.getStats(): object`

- **Parámetros:** Sin argumentos.
- **Retorno:** Objeto de métricas.
- **Errores:** No representa el estado montado de apps.
- **Permisos:** API de host; no está expuesta por la facade scoped.
- **Limpieza:** No crea suscripciones ni procesos persistentes.

```js
console.log(loader.getStats());
```

Referencia: `src/core/wu-loader.js`.

<span class="section-anchor" id="section-11"></span>

## wu.override

Configura una sustitución de URL para desarrollo.

`wu.override(name, url, options?): void`

- **Parámetros:** name y URL autorizada; options.maxAge/path configuran persistencia del override.
- **Retorno:** void
- **Errores:** El sistema valida dominios y configuración; el override no es un remount automático.
- **Permisos:** API de host; no está expuesta por la facade scoped.
- **Limpieza:** Retira overrides de desarrollo antes de compartir una sesión.

```js
wu.override('catalog', 'http://localhost:4101');
```

Referencia: `src/core/wu-overrides.js`.

<span class="section-anchor" id="section-12"></span>

## wu.removeOverride

Retira una sustitución de URL.

`wu.removeOverride(name): void`

- **Parámetros:** Nombre exacto de app.
- **Retorno:** void
- **Errores:** El sistema valida dominios y configuración; el override no es un remount automático.
- **Permisos:** API de host; no está expuesta por la facade scoped.
- **Limpieza:** Retira overrides de desarrollo antes de compartir una sesión.

```js
wu.removeOverride('catalog');
```

Referencia: `src/core/wu-overrides.js`.

<span class="section-anchor" id="section-13"></span>

## wu.getOverrides

Consulta las sustituciones de URL activas.

`wu.getOverrides(): Record<string,string>`

- **Parámetros:** Sin argumentos.
- **Retorno:** Record<string,string>
- **Errores:** El sistema valida dominios y configuración; el override no es un remount automático.
- **Permisos:** API de host; no está expuesta por la facade scoped.
- **Limpieza:** Retira overrides de desarrollo antes de compartir una sesión.

```js
console.log(wu.getOverrides());
```

Referencia: `src/core/wu-overrides.js`.

<span class="section-anchor" id="section-14"></span>

## wu.clearOverrides

Retira todas las sustituciones activas.

`wu.clearOverrides(): void`

- **Parámetros:** Sin argumentos.
- **Retorno:** void
- **Errores:** El sistema valida dominios y configuración; el override no es un remount automático.
- **Permisos:** API de host; no está expuesta por la facade scoped.
- **Limpieza:** Retira overrides de desarrollo antes de compartir una sesión.

```js
wu.clearOverrides();
```

Referencia: `src/core/wu-overrides.js`.

<span class="section-anchor" id="section-15"></span>

## normalizeStyleMode

Normaliza los alias de configuración de estilos.

`normalizeStyleMode(mode): string | undefined`

- **Parámetros:** String de modo o undefined.
- **Retorno:** none→isolated; own-only→fully-isolated; otros valores pasan sin validar.
- **Errores:** No valida por sí solo que el modo sea admitido por el manifest.
- **Permisos:** Función pura; no concede permisos.
- **Limpieza:** No crea suscripciones ni procesos persistentes.

```js
import { normalizeStyleMode } from 'wu-framework';
console.log(normalizeStyleMode('own-only'));
```

Referencia: `src/core/wu-sandbox.js`.

<span class="section-anchor" id="section-16"></span>

## resolveDomOwnership

Resuelve ownership explícito y aliases nativeShadow/framework.

`resolveDomOwnership(options?): "wu" | "app" | "light"`

- **Parámetros:** domOwnership gana; luego nativeShadow; Lit selecciona app por defecto.
- **Retorno:** Ownership efectivo.
- **Errores:** No crea Shadow DOM ni valida que un renderer implemente su límite.
- **Permisos:** Función de configuración; no es control de seguridad.
- **Limpieza:** No crea suscripciones ni procesos persistentes.

```js
import { resolveDomOwnership } from 'wu-framework';
console.log(resolveDomOwnership({ framework: 'lit' }));
```

Referencia: `src/core/wu-sandbox.js`.

<span class="section-anchor" id="section-17"></span>

## wu.tagStyleAsApp

Atribuye una hoja style/link a una aplicación para el bridge CSS.

`wu.tagStyleAsApp(element, appName): void`

- **Parámetros:** Elemento style/link y nombre de app.
- **Retorno:** void.
- **Errores:** La atribución no sustituye styleMode del manifest.
- **Permisos:** API de host; no está expuesta por la facade scoped.
- **Limpieza:** Retira la hoja cuando termine su propietario.

```js
const style = document.createElement('style');
style.textContent = ':host { color: var(--accent); }';
wu.tagStyleAsApp(style, 'catalog');
document.head.append(style);
```

Referencia: `src/core/wu-core.js`.

<span class="section-anchor" id="section-18"></span>

## new WuCache

Crea una caché LRU con TTL y almacenamiento opcional.

`new WuCache(options?): WuCache`

- **Parámetros:** maxSize en MB; maxItems; TTL en ms; persistent y storage memory/localStorage/sessionStorage.
- **Retorno:** Instancia de caché.
- **Errores:** Una entrada demasiado grande o un límite de operaciones puede impedir almacenamiento.
- **Permisos:** Host; no uses almacenamiento persistente como autorización.
- **Limpieza:** cache.clear() libera entradas y su namespace persistente.

```js
import { WuCache } from 'wu-framework';
const cache = new WuCache({ maxSize: 2, maxItems: 20, defaultTTL: 60000, storage: 'memory' });
```

Referencia: `src/core/wu-cache.js`.

<span class="section-anchor" id="section-19"></span>

## WuCache.get

Lee una entrada no expirada y actualiza su orden LRU.

`cache.get(key): unknown | null`

- **Parámetros:** Clave de la entrada.
- **Retorno:** Valor guardado o null por ausencia, expiración o rate limit.
- **Errores:** null no distingue miss, expiración y cooldown; consulta métricas.
- **Permisos:** Acceso a la caché propietaria; no aplica grants de store.
- **Limpieza:** No crea suscripciones ni procesos persistentes.

```js
const result = cache.get('catalog-result');
```

La lectura en memoria devuelve la referencia guardada; no es un snapshot separado como WuStore.

Referencia: `src/core/wu-cache.js`.

<span class="section-anchor" id="section-20"></span>

## WuCache.set

Guarda un valor y aplica límites de espacio y expiración.

`cache.set(key, value, ttl?): boolean`

- **Parámetros:** Clave, valor y TTL en ms; ttl=0 usa defaultTTL por la selección con ||.
- **Retorno:** true si se almacena; false por tamaño, error o rate limit.
- **Errores:** Captura fallos y devuelve false; la cuota de storage puede limitar persistencia.
- **Permisos:** Host; valida qué datos guardas de forma persistente.
- **Limpieza:** delete(key) retira una entrada; clear() retira todas.

```js
const cached = cache.set('catalog-result', { count: 12 }, 30000);
```

Referencia: `src/core/wu-cache.js`.

<span class="section-anchor" id="section-21"></span>

## WuCache.delete

Elimina una entrada de memoria y del backing configurado.

`cache.delete(key): void`

- **Parámetros:** Clave exacta.
- **Retorno:** void
- **Errores:** La persistencia depende de disponibilidad y cuota del storage.
- **Permisos:** Autoridad del propietario de la caché.
- **Limpieza:** No crea suscripciones ni procesos persistentes.

```js
cache.delete('catalog-result');
```

Referencia: `src/core/wu-cache.js`.

<span class="section-anchor" id="section-22"></span>

## WuCache.clear

Vacía la caché de esta instancia y su almacenamiento configurado.

`cache.clear(): void`

- **Parámetros:** Sin argumentos.
- **Retorno:** void
- **Errores:** La persistencia depende de disponibilidad y cuota del storage.
- **Permisos:** Autoridad del propietario de la caché.
- **Limpieza:** No crea suscripciones ni procesos persistentes.

```js
cache.clear();
```

Referencia: `src/core/wu-cache.js`.

<span class="section-anchor" id="section-23"></span>

## WuCache.getStats

Consulta hits, misses, expulsiones, tamaños y rate limiting.

`cache.getStats(): object`

- **Parámetros:** Sin argumentos.
- **Retorno:** object
- **Errores:** La persistencia depende de disponibilidad y cuota del storage.
- **Permisos:** Autoridad del propietario de la caché.
- **Limpieza:** No crea suscripciones ni procesos persistentes.

```js
console.log(cache.getStats());
```

Referencia: `src/core/wu-cache.js`.

<span class="section-anchor" id="section-24"></span>

## WuCache.getRateLimitStatus

Consulta si las operaciones están en cooldown y su cuota.

`cache.getRateLimitStatus(): object`

- **Parámetros:** Sin argumentos.
- **Retorno:** object
- **Errores:** La persistencia depende de disponibilidad y cuota del storage.
- **Permisos:** Autoridad del propietario de la caché.
- **Limpieza:** No crea suscripciones ni procesos persistentes.

```js
console.log(cache.getRateLimitStatus());
```

Referencia: `src/core/wu-cache.js`.

<span class="section-anchor" id="section-25"></span>

## wu.getStats

Resume estado y métricas de los subsistemas del core.

`wu.getStats(): object`

- **Parámetros:** Sin argumentos.
- **Retorno:** Objeto de diagnóstico.
- **Errores:** No sustituye una prueba de montaje ni una comprobación HTTP.
- **Permisos:** API de host; no está expuesta por la facade scoped.
- **Limpieza:** No crea suscripciones ni procesos persistentes.

```js
console.log(wu.getStats());
```

Referencia: `src/core/wu-core.js`.

<span class="section-anchor" id="section-26"></span>

## wu.getManifestDiagnostics

Lee errores de dependencias declarativas entre apps.

`wu.getManifestDiagnostics(): WuManifestImportDiagnostic[]`

- **Parámetros:** Sin argumentos; depende del preflight de imports.
- **Retorno:** Lista de diagnósticos por consumidor/import/proveedor.
- **Errores:** No comprueba automáticamente todos los imports transitivos de un bundle.
- **Permisos:** API de host; no está expuesta por la facade scoped.
- **Limpieza:** No crea suscripciones ni procesos persistentes.

```js
console.table(wu.getManifestDiagnostics());
```

Referencia: `src/core/wu-core.js`.

<span class="section-anchor" id="section-27"></span>

## wu.showInspector

Abre el inspector visual cargado bajo demanda.

`wu.showInspector(): Promise<{ close(): void } | null>`

- **Parámetros:** Sin argumentos.
- **Retorno:** Handle close o null cuando no se abre.
- **Errores:** La carga del chunk o el entorno DOM pueden impedir la apertura.
- **Permisos:** API de host; no está expuesta por la facade scoped.
- **Limpieza:** close() o wu.hideInspector() retira el overlay.

```js
const inspector = await wu.showInspector();
// Al cerrar tu herramienta:
inspector?.close();
```

Referencia: `src/core/wu-core.js`.

<span class="section-anchor" id="section-28"></span>

## wu.hideInspector

Cierra el overlay de inspección si existe.

`wu.hideInspector(): Promise<void>`

- **Parámetros:** Sin argumentos.
- **Retorno:** Promesa de cierre.
- **Errores:** No elimina apps ni datos del store.
- **Permisos:** API de host; no está expuesta por la facade scoped.
- **Limpieza:** Retira la interfaz de diagnóstico.

```js
await wu.hideInspector();
```

Referencia: `src/core/wu-core.js`.

<span class="section-anchor" id="section-29"></span>

## wu.performance.startMeasure

Marca el inicio de una duración asociada a app o global.

`wu.performance.startMeasure(name, appName?): void`

- **Parámetros:** Nombre de medida; appName por defecto global.
- **Retorno:** void.
- **Errores:** Una configuración disabled omite el registro.
- **Permisos:** API de host; no está expuesta por la facade scoped.
- **Limpieza:** Termina con endMeasure usando el mismo par nombre/app.

```js
wu.performance.startMeasure('load-catalog', 'catalog');
```

Referencia: `src/core/wu-performance.js`.

<span class="section-anchor" id="section-30"></span>

## wu.performance.endMeasure

Cierra una duración y la publica en métricas/User Timing cuando está habilitado.

`wu.performance.endMeasure(name, appName?): number`

- **Parámetros:** Mismo nombre/app que startMeasure.
- **Retorno:** Milisegundos; 0 si no hay marca inicial.
- **Errores:** Ausencia de marca devuelve 0 y no inventa una duración.
- **Permisos:** API de host; no está expuesta por la facade scoped.
- **Limpieza:** Retira la marca inicial de esta medición.

```js
const ms = wu.performance.endMeasure('load-catalog', 'catalog');
```

Referencia: `src/core/wu-performance.js`.

<span class="section-anchor" id="section-31"></span>

## wu.performance.generateReport

Agrupa estadísticas de rendimiento de la instancia.

`wu.performance.generateReport(): object`

- **Parámetros:** Sin argumentos.
- **Retorno:** object
- **Errores:** La disponibilidad de User Timing depende del entorno.
- **Permisos:** API de host; no está expuesta por la facade scoped.
- **Limpieza:** No crea suscripciones ni procesos persistentes.

```js
console.log(wu.performance.generateReport());
```

Referencia: `src/core/wu-performance.js`.

<span class="section-anchor" id="section-32"></span>

## wu.performance.getMetrics

Lee métricas de una app concreta.

`wu.performance.getMetrics(appName): object | null`

- **Parámetros:** Nombre exacto; null si no hay mediciones.
- **Retorno:** object | null
- **Errores:** La disponibilidad de User Timing depende del entorno.
- **Permisos:** API de host; no está expuesta por la facade scoped.
- **Limpieza:** No crea suscripciones ni procesos persistentes.

```js
console.log(wu.performance.getMetrics('catalog'));
```

Referencia: `src/core/wu-performance.js`.

<span class="section-anchor" id="section-33"></span>

## wu.performance.getAllMetrics

Lee métricas de todas las apps registradas en el medidor.

`wu.performance.getAllMetrics(): object`

- **Parámetros:** Sin argumentos.
- **Retorno:** object
- **Errores:** La disponibilidad de User Timing depende del entorno.
- **Permisos:** API de host; no está expuesta por la facade scoped.
- **Limpieza:** No crea suscripciones ni procesos persistentes.

```js
console.log(wu.performance.getAllMetrics());
```

Referencia: `src/core/wu-performance.js`.

<span class="section-anchor" id="section-34"></span>

## wu.performance.clearMetrics

Limpia mediciones de una app o todas.

`wu.performance.clearMetrics(appName?): void`

- **Parámetros:** Nombre opcional.
- **Retorno:** void
- **Errores:** La disponibilidad de User Timing depende del entorno.
- **Permisos:** API de host; no está expuesta por la facade scoped.
- **Limpieza:** No crea suscripciones ni procesos persistentes.

```js
wu.performance.clearMetrics('catalog');
```

Referencia: `src/core/wu-performance.js`.

<span class="section-anchor" id="section-35"></span>

## wu.performance.getDevToolsEntries

Lee entradas User Timing emitidas por WU.

`wu.performance.getDevToolsEntries(options?): PerformanceEntry[]`

- **Parámetros:** type: mark, measure o all; appName opcional.
- **Retorno:** PerformanceEntry[]
- **Errores:** La disponibilidad de User Timing depende del entorno.
- **Permisos:** API de host; no está expuesta por la facade scoped.
- **Limpieza:** No crea suscripciones ni procesos persistentes.

```js
console.table(wu.performance.getDevToolsEntries({ type: 'measure', appName: 'catalog' }));
```

Referencia: `src/core/wu-performance.js`.

<span class="section-anchor" id="section-36"></span>

## wu.performance.observe

Escucha nuevas entradas User Timing de WU mediante PerformanceObserver.

`wu.performance.observe(callback, { type? }?): () => void`

- **Parámetros:** Callback de PerformanceEntry; type por defecto measure.
- **Retorno:** Cleanup; si el observer no está disponible devuelve uno vacío.
- **Errores:** La falta de PerformanceObserver no lanza; los fallos de callback se registran.
- **Permisos:** API de host; no está expuesta por la facade scoped.
- **Limpieza:** stop() desconecta el observer.

```js
const stop = wu.performance.observe(entry => console.log(entry.duration), { type: 'measure' });
```

Referencia: `src/core/wu-performance.js`.

<span class="section-anchor" id="section-37"></span>

## wu.performance.configure

Configura medición, límite de historial, User Timing y umbrales.

`wu.performance.configure(options): void`

- **Parámetros:** enabled, maxMeasurements, devtoolsTimeline y thresholds por nombre.
- **Retorno:** void.
- **Errores:** Un umbral superado genera advertencia; no cancela una operación.
- **Permisos:** API de host; no está expuesta por la facade scoped.
- **Limpieza:** No crea suscripciones ni procesos persistentes.

```js
wu.performance.configure({ enabled: true, maxMeasurements: 100, devtoolsTimeline: true });
```

Referencia: `src/core/wu-performance.js`.

<span class="section-anchor" id="section-38"></span>

## wu.errorBoundary.register

Añade un handler de clasificación y recuperación de fallos.

`wu.errorBoundary.register(handler): void`

- **Parámetros:** name, canHandle(error) y handle(error,context).
- **Retorno:** void.
- **Errores:** Lanza si falta uno de esos miembros; los handlers se recorren por orden.
- **Permisos:** API de host; no está expuesta por la facade scoped.
- **Limpieza:** No devuelve unsubscribe; administra estas extensiones durante el lifecycle del host.

```js
wu.errorBoundary.register({ name: 'catalog-error', canHandle: error => error.name === 'CatalogError', async handle(error) { return { recovered: false, action: 'none', message: error.message }; } });
```

El fallback genérico por defecto puede preceder a handlers agregados después. Comprueba el orden antes de depender de este registro.

Referencia: `src/core/wu-error-boundary.js`.

<span class="section-anchor" id="section-39"></span>

## wu.errorBoundary.handle

Clasifica un fallo y obtiene una decisión de recuperación.

`wu.errorBoundary.handle(error, context?): Promise<object>`

- **Parámetros:** Error y contexto; el core interpreta algunas acciones durante mount.
- **Retorno:** Resultado con recovered y action, más información del handler.
- **Errores:** El nombre de una acción no cambia por sí mismo URL, timeout ni permisos.
- **Permisos:** API de host; no está expuesta por la facade scoped.
- **Limpieza:** Una recuperación debe liberar el intento fallido antes de reintentar.

```js
const recovery = await wu.errorBoundary.handle(new Error('Entry no disponible'), { appName: 'catalog', phase: 'mount' });
```

Referencia: `src/core/wu-error-boundary.js`.

<span class="section-anchor" id="section-40"></span>

## wu.errorBoundary.getErrorLog

Lee los errores recientes conservados por el boundary.

`wu.errorBoundary.getErrorLog(limit?: number): object[]`

- **Parámetros:** limit por defecto 10.
- **Retorno:** Array con las últimas entradas.
- **Errores:** Es memoria de diagnóstico, no un registro durable.
- **Permisos:** API de host; no está expuesta por la facade scoped.
- **Limpieza:** No crea suscripciones ni procesos persistentes.

```js
console.table(wu.errorBoundary.getErrorLog(5));
```

Referencia: `src/core/wu-error-boundary.js`.

<span class="section-anchor" id="section-41"></span>

## wu.errorBoundary.getStats

Resume cantidad, handlers y tipos de errores.

`wu.errorBoundary.getStats(): object`

- **Parámetros:** Sin argumentos.
- **Retorno:** Objeto con totalErrors, handlers, errorsByType y recentErrors.
- **Errores:** No incluye fallos que nunca pasaron por este boundary.
- **Permisos:** API de host; no está expuesta por la facade scoped.
- **Limpieza:** No crea suscripciones ni procesos persistentes.

```js
console.log(wu.errorBoundary.getStats());
```

Referencia: `src/core/wu-error-boundary.js`.

<span class="section-anchor" id="section-42"></span>

## WuLoadingStrategy

Crea estrategias de carga y arranca el procesamiento idle.

`new WuLoadingStrategy(core)`

- **Parámetros:** Instancia del core.
- **Retorno:** Coordinador con estrategias predeterminadas.
- **Errores:** Propaga errores de configuración inválida; revisa el resultado de las operaciones asíncronas.
- **Permisos:** API de administración del host; no está incluida en la facade scoped de una microapp.
- **Limpieza:** cleanup cancela callbacks idle y resuelve la cola pendiente con null.

```js
import { WuLoadingStrategy } from 'wu-framework';
const strategies = new WuLoadingStrategy(wu);
strategies.cleanup();
```

Referencia: `src/core/wu-strategies.js`.

<span class="section-anchor" id="section-43"></span>

## strategies.register

Registra o reemplaza una estrategia de carga.

`strategies.register(name, strategy): void`

- **Parámetros:** strategy.load(appName,config) obligatorio; shouldPreload y priority opcionales.
- **Retorno:** void.
- **Errores:** Lanza si strategy.load no es función.
- **Permisos:** API de administración del host; no está incluida en la facade scoped de una microapp.
- **Limpieza:** El propietario del runtime administra los recursos y sus funciones de cleanup.

```js
strategies.register('custom', {
  shouldPreload: false,
  priority: 'low',
  load: async (name, config) => { console.log(name, config); return null; },
});
```

Referencia: `src/core/wu-strategies.js`.

<span class="section-anchor" id="section-44"></span>

## strategies.load

Ejecuta la estrategia seleccionada por config.strategy.

`strategies.load(appName, config): Promise<unknown>`

- **Parámetros:** Nombre y config; lazy por defecto.
- **Retorno:** Resultado de la función load registrada.
- **Errores:** Estrategia desconocida registra advertencia y recurre a lazy; errores de load se propagan.
- **Permisos:** API de administración del host; no está incluida en la facade scoped de una microapp.
- **Limpieza:** El propietario del runtime administra los recursos y sus funciones de cleanup.

```js
await strategies.load('card', { strategy: 'custom' });
```

Referencia: `src/core/wu-strategies.js`.

<span class="section-anchor" id="section-45"></span>

## strategies.preload

Precarga secuencialmente aplicaciones cuyas estrategias lo solicitan.

`strategies.preload(apps): Promise<void>`

- **Parámetros:** Lista de configuraciones con name y strategy.
- **Retorno:** Promesa de recorrido; captura fallos individuales.
- **Errores:** Un fallo individual se registra y permite continuar con la siguiente app.
- **Permisos:** API de administración del host; no está incluida en la facade scoped de una microapp.
- **Limpieza:** El propietario del runtime administra los recursos y sus funciones de cleanup.

```js
await strategies.preload([{ name: 'card', strategy: 'custom' }]);
```

Referencia: `src/core/wu-strategies.js`.

<span class="section-anchor" id="section-46"></span>

## strategies.getStats

Consulta estrategias registradas y tamaño de la cola idle.

`strategies.getStats(): object`

- **Parámetros:** Sin argumentos.
- **Retorno:** {totalStrategies,strategies,idleQueueSize,isIdle}.
- **Errores:** Lectura local sin efectos.
- **Permisos:** API de administración del host; no está incluida en la facade scoped de una microapp.
- **Limpieza:** El propietario del runtime administra los recursos y sus funciones de cleanup.

```js
console.log(strategies.getStats());
```

Referencia: `src/core/wu-strategies.js`.

<span class="section-anchor" id="section-47"></span>

## strategies.cleanup

Detiene la cola idle y libera esperas pendientes.

`strategies.cleanup(): void`

- **Parámetros:** Sin argumentos.
- **Retorno:** void.
- **Errores:** La limpieza intenta completar cada espera aunque una resolución falle.
- **Permisos:** API de administración del host; no está incluida en la facade scoped de una microapp.
- **Limpieza:** Cancela idle/timer y vacía la cola; sus pendientes resuelven null.

```js
strategies.cleanup();
```

Referencia: `src/core/wu-strategies.js`.

<span class="section-anchor" id="section-48"></span>

## wu.sandbox.addStyles

Inserta CSS en un sandbox existente.

`wu.sandbox.addStyles(appName, css): void`

- **Parámetros:** Nombre y CSS string.
- **Retorno:** void.
- **Errores:** Si no existe sandbox registra advertencia y retorna.
- **Permisos:** API de administración del host; no está incluida en la facade scoped de una microapp.
- **Limpieza:** El propietario del runtime administra los recursos y sus funciones de cleanup.

```js
wu.sandbox.addStyles('card', ':host{display:block}');
```

La propiedad sandbox es administrada por el core. No llames cleanupAll mientras haya aplicaciones montadas: utiliza wu.unmount para coordinar el lifecycle.

Referencia: `src/core/wu-sandbox.js`.

<span class="section-anchor" id="section-49"></span>

## wu.sandbox.loadExternalStyles

Inserta un link de stylesheet en el sandbox.

`wu.sandbox.loadExternalStyles(appName, href): void`

- **Parámetros:** Nombre y URL de CSS.
- **Retorno:** void; no espera load de la hoja.
- **Errores:** Un sandbox ausente produce advertencia. El error de red de la hoja no se retorna como promesa.
- **Permisos:** API de administración del host; no está incluida en la facade scoped de una microapp.
- **Limpieza:** El propietario del runtime administra los recursos y sus funciones de cleanup.

```js
wu.sandbox.loadExternalStyles('card', '/styles/card.css');
```

La propiedad sandbox es administrada por el core. No llames cleanupAll mientras haya aplicaciones montadas: utiliza wu.unmount para coordinar el lifecycle.

Referencia: `src/core/wu-sandbox.js`.

<span class="section-anchor" id="section-50"></span>

## wu.sandbox.getStyleStats

Consulta estadísticas del style bridge.

`wu.sandbox.getStyleStats(): object | null`

- **Parámetros:** Sin argumentos.
- **Retorno:** Objeto de estadísticas o null.
- **Errores:** Lectura sin operaciones de red.
- **Permisos:** API de administración del host; no está incluida en la facade scoped de una microapp.
- **Limpieza:** El propietario del runtime administra los recursos y sus funciones de cleanup.

```js
console.log(wu.sandbox.getStyleStats());
```

La propiedad sandbox es administrada por el core. No llames cleanupAll mientras haya aplicaciones montadas: utiliza wu.unmount para coordinar el lifecycle.

Referencia: `src/core/wu-sandbox.js`.

<span class="section-anchor" id="section-51"></span>

## wu.sandbox.reinjectStyles

Vuelve a inyectar estilos según el modo de aislamiento de la aplicación.

`wu.sandbox.reinjectStyles(appName): Promise<void>`

- **Parámetros:** Nombre de sandbox registrado.
- **Retorno:** Promise<void>.
- **Errores:** No actúa para un sandbox ausente o modo isolated; los demás modos aplican su selección de estilos.
- **Permisos:** API de administración del host; no está incluida en la facade scoped de una microapp.
- **Limpieza:** El propietario del runtime administra los recursos y sus funciones de cleanup.

```js
await wu.sandbox.reinjectStyles('card');
```

La propiedad sandbox es administrada por el core. No llames cleanupAll mientras haya aplicaciones montadas: utiliza wu.unmount para coordinar el lifecycle.

Referencia: `src/core/wu-sandbox.js`.

En 4.0, un override sin `allowedDomains` solo acepta hosts loopback o el hostname de la página. Para otro host configura una allowlist explícita. Esta restricción se aplica tanto a overrides programáticos como a los recuperados de cookies.