# Referência de carregamento, cache e diagnóstico

Carregamento dinâmico, prioridades, substituições, cache, estilos e observação do runtime.

<span id="elegir-el-nivel-de-carga"></span>

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

## Escolher o nível de carregamento

Use `wu.mount` para o ciclo de vida completo. `wu.prefetch` antecipa recursos de aplicações registradas e `wu.use` carrega componentes publicados por exportações. `WuLoader` é um carregador independente: não substitui o catálogo, o sandbox nem as concessões do core.

As substituições e as ferramentas de inspeção pertencem ao host. Uma métrica mede um trecho observado; não garante que o navegador terminou de desenhar. Consulte [carregamento de aplicações](/pt/docs/framework/loading/) e [diagnóstico](/pt/docs/framework/troubleshooting/) para o fluxo completo.

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

## wu.use

Carrega uma exportação de componente declarada por outra aplicação.

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

- **Parâmetros:** Nome exato app.component; o manifesto do provedor deve declarar wu.exports.
- **Retorno:** default export quando existe, ou namespace do módulo.
- **Erros:** App/export ausentes, traversal, URL inválida ou import malsucedido causam rejeição.
- **Permissões:** Host; um componente carregado executa código no realm do consumidor.
- **Limpeza:** A instância do renderizador que usa o componente administra sua limpeza.

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

Método presente no runtime, mas ausente da declaração WuCore. Não converte componentes entre frameworks.

Referência: `src/core/wu-core.js`.

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

## wu.prefetchAll

Solicita o pré-carregamento de todas as aplicações registradas.

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

- **Parâmetros:** Mesmas opções de disparador de prefetch.
- **Retorno:** Promise imediata ou limpeza dos disparadores adiados.
- **Erros:** O pré-carregamento é uma solicitação ao navegador; não confirma que um renderizador possa montar.
- **Permissões:** API do host; não é exposta pela fachada com escopo.
- **Limpeza:** Mantenha a limpeza se escolher um disparador adiado.

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

Referência: `src/core/wu-prefetch.js`.

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

## new WuLoader

Cria um loader de código e componentes com cache e deduplicação de operações em andamento.

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

- **Parâmetros:** maxCacheSize limita o número de entradas (50 por padrão); cacheTTL expressa milissegundos (1800000 por padrão).
- **Retorno:** Instância com loadApp, loadComponent, preload, isAvailable e clearCache.
- **Erros:** A construção não registra apps nem executa o ciclo de vida.
- **Permissões:** API do host; não é exposta pela fachada com escopo.
- **Limpeza:** loader.clearCache() libera suas entradas em cache.

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

Referência: `src/core/wu-loader.js`.

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

## WuLoader.loadApp

Baixa o texto de código de uma entrada para o pipeline de carregamento.

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

- **Parâmetros:** URL base e manifesto com entry opcional.
- **Retorno:** String com código; não executa mount nem registra a app.
- **Erros:** Fetch malsucedido, resposta inválida ou falha na resolução de entry causam rejeição.
- **Permissões:** Host; sujeito ao acesso de rede do ambiente.
- **Limpeza:** clearCache(base) descarta futuras leituras em cache.

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

Referência: `src/core/wu-loader.js`.

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

## WuLoader.loadComponent

Importa um componente restrito à base de uma app.

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

- **Parâmetros:** Base e caminho relativo do componente; não aceita URLs absolutas nem traversal.
- **Retorno:** default export ou namespace importado.
- **Erros:** Caminho fora da base ou import malsucedido causa rejeição.
- **Permissões:** O módulo executa código no mesmo contexto; não é RPC com escopo.
- **Limpeza:** O import nativo mantém seu cache de módulos.

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

Referência: `src/core/wu-loader.js`.

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

## WuLoader.preload

Antecipa o download de código para uma lista de aplicações.

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

- **Parâmetros:** Array de configurações com name e url.
- **Retorno:** Promise de conclusão do percurso de pré-carregamento.
- **Erros:** O pré-carregamento captura falhas por app; inspecione a disponibilidade antes da montagem.
- **Permissões:** API do host; não é exposta pela fachada com escopo.
- **Limpeza:** Não monta renderizadores; clearCache libera o texto em cache.

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

Referência: `src/core/wu-loader.js`.

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

## WuLoader.isAvailable

Consulta se uma URL responde corretamente a HEAD.

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

- **Parâmetros:** URL a verificar.
- **Retorno:** Booleano; erros de rede são convertidos em false.
- **Erros:** Um servidor que rejeita HEAD pode retornar false mesmo que GET funcione.
- **Permissões:** Acesso de rede do host.
- **Limpeza:** Não cria inscrições nem processos persistentes.

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

Referência: `src/core/wu-loader.js`.

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

## WuLoader.clearCache

Descarta o texto e os registros em cache do loader.

`loader.clearCache(pattern?): void`

- **Parâmetros:** Padrão opcional; sem padrão, esvazia o cache do loader.
- **Retorno:** void.
- **Erros:** Não invalida o cache ESM do navegador.
- **Permissões:** API do host; não é exposta pela fachada com escopo.
- **Limpeza:** Não cria inscrições nem processos persistentes.

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

Referência: `src/core/wu-loader.js`.

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

## WuLoader.getStats

Consulta o cache e os imports em andamento do loader.

`loader.getStats(): object`

- **Parâmetros:** Sem argumentos.
- **Retorno:** Objeto de métricas.
- **Erros:** Não representa o estado de montagem das apps.
- **Permissões:** API do host; não é exposta pela fachada com escopo.
- **Limpeza:** Não cria inscrições nem processos persistentes.

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

Referência: `src/core/wu-loader.js`.

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

## wu.override

Configura uma substituição de URL para desenvolvimento.

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

- **Parâmetros:** name e URL autorizada; options.maxAge/path configuram a persistência da substituição.
- **Retorno:** void
- **Erros:** O sistema valida domínios e configuração; a substituição não remonta automaticamente.
- **Permissões:** API do host; não é exposta pela fachada com escopo.
- **Limpeza:** Remova as substituições de desenvolvimento antes de compartilhar uma sessão.

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

Referência: `src/core/wu-overrides.js`.

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

## wu.removeOverride

Remove uma substituição de URL.

`wu.removeOverride(name): void`

- **Parâmetros:** Nome exato da app.
- **Retorno:** void
- **Erros:** O sistema valida domínios e configuração; a substituição não remonta automaticamente.
- **Permissões:** API do host; não é exposta pela fachada com escopo.
- **Limpeza:** Remova as substituições de desenvolvimento antes de compartilhar uma sessão.

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

Referência: `src/core/wu-overrides.js`.

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

## wu.getOverrides

Consulta as substituições de URL ativas.

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

- **Parâmetros:** Sem argumentos.
- **Retorno:** Record<string,string>
- **Erros:** O sistema valida domínios e configuração; a substituição não remonta automaticamente.
- **Permissões:** API do host; não é exposta pela fachada com escopo.
- **Limpeza:** Remova as substituições de desenvolvimento antes de compartilhar uma sessão.

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

Referência: `src/core/wu-overrides.js`.

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

## wu.clearOverrides

Remove todas as substituições ativas.

`wu.clearOverrides(): void`

- **Parâmetros:** Sem argumentos.
- **Retorno:** void
- **Erros:** O sistema valida domínios e configuração; a substituição não remonta automaticamente.
- **Permissões:** API do host; não é exposta pela fachada com escopo.
- **Limpeza:** Remova as substituições de desenvolvimento antes de compartilhar uma sessão.

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

Referência: `src/core/wu-overrides.js`.

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

## normalizeStyleMode

Normaliza os aliases de configuração de estilos.

`normalizeStyleMode(mode): string | undefined`

- **Parâmetros:** String de modo ou undefined.
- **Retorno:** none→isolated; own-only→fully-isolated; outros valores passam sem validação.
- **Erros:** Não valida por si só se o modo é aceito pelo manifesto.
- **Permissões:** Função pura; não concede permissões.
- **Limpeza:** Não cria inscrições nem processos persistentes.

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

Referência: `src/core/wu-sandbox.js`.

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

## resolveDomOwnership

Resolve a propriedade explícita e os aliases nativeShadow/framework.

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

- **Parâmetros:** domOwnership tem precedência; depois nativeShadow; Lit seleciona app por padrão.
- **Retorno:** Propriedade efetiva.
- **Erros:** Não cria Shadow DOM nem valida se um renderizador implementa seu limite.
- **Permissões:** Função de configuração; não é controle de segurança.
- **Limpeza:** Não cria inscrições nem processos persistentes.

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

Referência: `src/core/wu-sandbox.js`.

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

## wu.tagStyleAsApp

Atribui uma folha style/link a uma aplicação para a ponte CSS.

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

- **Parâmetros:** Elemento style/link e nome da app.
- **Retorno:** void.
- **Erros:** A atribuição não substitui styleMode do manifesto.
- **Permissões:** API do host; não é exposta pela fachada com escopo.
- **Limpeza:** Remova a folha quando seu proprietário terminar.

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

Referência: `src/core/wu-core.js`.

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

## new WuCache

Cria um cache LRU com TTL e armazenamento opcional.

`new WuCache(options?): WuCache`

- **Parâmetros:** maxSize em MB; maxItems; TTL em ms; persistent e storage memory/localStorage/sessionStorage.
- **Retorno:** Instância de cache.
- **Erros:** Uma entrada grande demais ou um limite de operações pode impedir o armazenamento.
- **Permissões:** Host; não use armazenamento persistente como autorização.
- **Limpeza:** cache.clear() libera as entradas e seu namespace persistente.

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

Referência: `src/core/wu-cache.js`.

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

## WuCache.get

Lê uma entrada não expirada e atualiza sua ordem LRU.

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

- **Parâmetros:** Chave da entrada.
- **Retorno:** Valor salvo ou null por ausência, expiração ou limite de requisições.
- **Erros:** null não distingue ausência, expiração e cooldown; consulte as métricas.
- **Permissões:** Acesso ao cache proprietário; não aplica concessões de store.
- **Limpeza:** Não cria inscrições nem processos persistentes.

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

A leitura em memória retorna a referência salva; não é um snapshot separado como WuStore.

Referência: `src/core/wu-cache.js`.

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

## WuCache.set

Salva um valor e aplica limites de espaço e expiração.

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

- **Parâmetros:** Chave, valor e TTL em ms; ttl=0 usa defaultTTL pela seleção com ||.
- **Retorno:** true se for armazenado; false por tamanho, erro ou limite de requisições.
- **Erros:** Captura falhas e retorna false; a cota de storage pode limitar a persistência.
- **Permissões:** Host; valide quais dados você salva de forma persistente.
- **Limpeza:** delete(key) remove uma entrada; clear() remove todas.

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

Referência: `src/core/wu-cache.js`.

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

## WuCache.delete

Remove uma entrada da memória e do armazenamento de apoio configurado.

`cache.delete(key): void`

- **Parâmetros:** Chave exata.
- **Retorno:** void
- **Erros:** A persistência depende da disponibilidade e da cota do storage.
- **Permissões:** Autoridade do proprietário do cache.
- **Limpeza:** Não cria inscrições nem processos persistentes.

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

Referência: `src/core/wu-cache.js`.

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

## WuCache.clear

Esvazia o cache desta instância e seu armazenamento configurado.

`cache.clear(): void`

- **Parâmetros:** Sem argumentos.
- **Retorno:** void
- **Erros:** A persistência depende da disponibilidade e da cota do storage.
- **Permissões:** Autoridade do proprietário do cache.
- **Limpeza:** Não cria inscrições nem processos persistentes.

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

Referência: `src/core/wu-cache.js`.

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

## WuCache.getStats

Consulta acertos, ausências, expulsões, tamanhos e limitação de requisições.

`cache.getStats(): object`

- **Parâmetros:** Sem argumentos.
- **Retorno:** object
- **Erros:** A persistência depende da disponibilidade e da cota do storage.
- **Permissões:** Autoridade do proprietário do cache.
- **Limpeza:** Não cria inscrições nem processos persistentes.

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

Referência: `src/core/wu-cache.js`.

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

## WuCache.getRateLimitStatus

Consulta se as operações estão em cooldown e sua cota.

`cache.getRateLimitStatus(): object`

- **Parâmetros:** Sem argumentos.
- **Retorno:** object
- **Erros:** A persistência depende da disponibilidade e da cota do storage.
- **Permissões:** Autoridade do proprietário do cache.
- **Limpeza:** Não cria inscrições nem processos persistentes.

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

Referência: `src/core/wu-cache.js`.

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

## wu.getStats

Resume o estado e as métricas dos subsistemas do core.

`wu.getStats(): object`

- **Parâmetros:** Sem argumentos.
- **Retorno:** Objeto de diagnóstico.
- **Erros:** Não substitui um teste de montagem nem uma verificação HTTP.
- **Permissões:** API do host; não é exposta pela fachada com escopo.
- **Limpeza:** Não cria inscrições nem processos persistentes.

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

Referência: `src/core/wu-core.js`.

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

## wu.getManifestDiagnostics

Lê erros de dependências declarativas entre apps.

`wu.getManifestDiagnostics(): WuManifestImportDiagnostic[]`

- **Parâmetros:** Sem argumentos; depende da verificação prévia de imports.
- **Retorno:** Lista de diagnósticos por consumidor/import/provedor.
- **Erros:** Não verifica automaticamente todos os imports transitivos de um bundle.
- **Permissões:** API do host; não é exposta pela fachada com escopo.
- **Limpeza:** Não cria inscrições nem processos persistentes.

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

Referência: `src/core/wu-core.js`.

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

## wu.showInspector

Abre o inspetor visual carregado sob demanda.

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

- **Parâmetros:** Sem argumentos.
- **Retorno:** Handle close ou null quando não abre.
- **Erros:** O carregamento do chunk ou o ambiente DOM podem impedir a abertura.
- **Permissões:** API do host; não é exposta pela fachada com escopo.
- **Limpeza:** close() ou wu.hideInspector() remove a sobreposição.

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

Referência: `src/core/wu-core.js`.

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

## wu.hideInspector

Fecha a sobreposição de inspeção, se existir.

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

- **Parâmetros:** Sem argumentos.
- **Retorno:** Promise de fechamento.
- **Erros:** Não remove apps nem dados do store.
- **Permissões:** API do host; não é exposta pela fachada com escopo.
- **Limpeza:** Remove a interface de diagnóstico.

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

Referência: `src/core/wu-core.js`.

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

## wu.performance.startMeasure

Marca o início de uma duração associada à app ou global.

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

- **Parâmetros:** Nome da medição; appName global por padrão.
- **Retorno:** void.
- **Erros:** Uma configuração disabled omite o registro.
- **Permissões:** API do host; não é exposta pela fachada com escopo.
- **Limpeza:** Termine com endMeasure usando o mesmo par nome/app.

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

Referência: `src/core/wu-performance.js`.

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

## wu.performance.endMeasure

Encerra uma duração e a publica nas métricas/User Timing quando habilitado.

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

- **Parâmetros:** Mesmo nome/app de startMeasure.
- **Retorno:** Milissegundos; 0 se não houver marca inicial.
- **Erros:** A ausência de marca retorna 0 e não inventa uma duração.
- **Permissões:** API do host; não é exposta pela fachada com escopo.
- **Limpeza:** Remove a marca inicial desta medição.

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

Referência: `src/core/wu-performance.js`.

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

## wu.performance.generateReport

Agrupa estatísticas de desempenho da instância.

`wu.performance.generateReport(): object`

- **Parâmetros:** Sem argumentos.
- **Retorno:** object
- **Erros:** A disponibilidade de User Timing depende do ambiente.
- **Permissões:** API do host; não é exposta pela fachada com escopo.
- **Limpeza:** Não cria inscrições nem processos persistentes.

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

Referência: `src/core/wu-performance.js`.

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

## wu.performance.getMetrics

Lê as métricas de uma app específica.

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

- **Parâmetros:** Nome exato; null se não houver medições.
- **Retorno:** object | null
- **Erros:** A disponibilidade de User Timing depende do ambiente.
- **Permissões:** API do host; não é exposta pela fachada com escopo.
- **Limpeza:** Não cria inscrições nem processos persistentes.

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

Referência: `src/core/wu-performance.js`.

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

## wu.performance.getAllMetrics

Lê as métricas de todas as apps registradas no medidor.

`wu.performance.getAllMetrics(): object`

- **Parâmetros:** Sem argumentos.
- **Retorno:** object
- **Erros:** A disponibilidade de User Timing depende do ambiente.
- **Permissões:** API do host; não é exposta pela fachada com escopo.
- **Limpeza:** Não cria inscrições nem processos persistentes.

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

Referência: `src/core/wu-performance.js`.

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

## wu.performance.clearMetrics

Limpa as medições de uma app ou de todas.

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

- **Parâmetros:** Nome opcional.
- **Retorno:** void
- **Erros:** A disponibilidade de User Timing depende do ambiente.
- **Permissões:** API do host; não é exposta pela fachada com escopo.
- **Limpeza:** Não cria inscrições nem processos persistentes.

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

Referência: `src/core/wu-performance.js`.

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

## wu.performance.getDevToolsEntries

Lê as entradas User Timing emitidas pelo WU.

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

- **Parâmetros:** type: mark, measure ou all; appName opcional.
- **Retorno:** PerformanceEntry[]
- **Erros:** A disponibilidade de User Timing depende do ambiente.
- **Permissões:** API do host; não é exposta pela fachada com escopo.
- **Limpeza:** Não cria inscrições nem processos persistentes.

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

Referência: `src/core/wu-performance.js`.

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

## wu.performance.observe

Escuta novas entradas User Timing do WU por PerformanceObserver.

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

- **Parâmetros:** Callback de PerformanceEntry; type measure por padrão.
- **Retorno:** Limpeza; se o observer não estiver disponível, retorna uma vazia.
- **Erros:** A falta de PerformanceObserver não lança erro; falhas do callback são registradas.
- **Permissões:** API do host; não é exposta pela fachada com escopo.
- **Limpeza:** stop() desconecta o observer.

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

Referência: `src/core/wu-performance.js`.

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

## wu.performance.configure

Configura medição, limite de histórico, User Timing e limiares.

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

- **Parâmetros:** enabled, maxMeasurements, devtoolsTimeline e thresholds por nome.
- **Retorno:** void.
- **Erros:** Um limiar excedido gera aviso; não cancela uma operação.
- **Permissões:** API do host; não é exposta pela fachada com escopo.
- **Limpeza:** Não cria inscrições nem processos persistentes.

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

Referência: `src/core/wu-performance.js`.

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

## wu.errorBoundary.register

Adiciona um handler de classificação e recuperação de falhas.

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

- **Parâmetros:** name, canHandle(error) e handle(error,context).
- **Retorno:** void.
- **Erros:** Lança erro se faltar um desses membros; os handlers são percorridos em ordem.
- **Permissões:** API do host; não é exposta pela fachada com escopo.
- **Limpeza:** Não retorna unsubscribe; administre essas extensões durante o ciclo de vida do host.

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

O fallback genérico padrão pode vir antes de handlers adicionados depois. Verifique a ordem antes de depender desse registro.

Referência: `src/core/wu-error-boundary.js`.

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

## wu.errorBoundary.handle

Classifica uma falha e obtém uma decisão de recuperação.

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

- **Parâmetros:** Erro e contexto; o core interpreta algumas ações durante mount.
- **Retorno:** Resultado com recovered e action, além de informações do handler.
- **Erros:** O nome de uma ação não altera por si só URL, timeout ou permissões.
- **Permissões:** API do host; não é exposta pela fachada com escopo.
- **Limpeza:** Uma recuperação deve liberar a tentativa que falhou antes de tentar novamente.

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

Referência: `src/core/wu-error-boundary.js`.

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

## wu.errorBoundary.getErrorLog

Lê os erros recentes mantidos pelo boundary.

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

- **Parâmetros:** limit 10 por padrão.
- **Retorno:** Array com as últimas entradas.
- **Erros:** É memória de diagnóstico, não um registro durável.
- **Permissões:** API do host; não é exposta pela fachada com escopo.
- **Limpeza:** Não cria inscrições nem processos persistentes.

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

Referência: `src/core/wu-error-boundary.js`.

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

## wu.errorBoundary.getStats

Resume quantidade, handlers e tipos de erros.

`wu.errorBoundary.getStats(): object`

- **Parâmetros:** Sem argumentos.
- **Retorno:** Objeto com totalErrors, handlers, errorsByType e recentErrors.
- **Erros:** Não inclui falhas que nunca passaram por esse boundary.
- **Permissões:** API do host; não é exposta pela fachada com escopo.
- **Limpeza:** Não cria inscrições nem processos persistentes.

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

Referência: `src/core/wu-error-boundary.js`.

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

## WuLoadingStrategy

Cria estratégias de carregamento e inicia o processamento ocioso.

`new WuLoadingStrategy(core)`

- **Parâmetros:** Instância do core.
- **Retorno:** Coordenador com estratégias padrão.
- **Erros:** Propaga erros de configuração inválida; revise o resultado das operações assíncronas.
- **Permissões:** API de administração do host; não está incluída na fachada com escopo de uma microapp.
- **Limpeza:** cleanup cancela callbacks ociosos e resolve a fila pendente com null.

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

Referência: `src/core/wu-strategies.js`.

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

## strategies.register

Registra ou substitui uma estratégia de carregamento.

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

- **Parâmetros:** strategy.load(appName,config) obrigatório; shouldPreload e priority opcionais.
- **Retorno:** void.
- **Erros:** Lança erro se strategy.load não for função.
- **Permissões:** API de administração do host; não está incluída na fachada com escopo de uma microapp.
- **Limpeza:** O proprietário do runtime administra os recursos e suas funções de limpeza.

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

Referência: `src/core/wu-strategies.js`.

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

## strategies.load

Executa a estratégia selecionada por config.strategy.

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

- **Parâmetros:** Nome e config; lazy por padrão.
- **Retorno:** Resultado da função load registrada.
- **Erros:** Uma estratégia desconhecida registra aviso e recorre a lazy; erros de load são propagados.
- **Permissões:** API de administração do host; não está incluída na fachada com escopo de uma microapp.
- **Limpeza:** O proprietário do runtime administra os recursos e suas funções de limpeza.

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

Referência: `src/core/wu-strategies.js`.

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

## strategies.preload

Pré-carrega sequencialmente aplicações cujas estratégias solicitam isso.

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

- **Parâmetros:** Lista de configurações com name e strategy.
- **Retorno:** Promise do percurso; captura falhas individuais.
- **Erros:** Uma falha individual é registrada e permite continuar com a próxima app.
- **Permissões:** API de administração do host; não está incluída na fachada com escopo de uma microapp.
- **Limpeza:** O proprietário do runtime administra os recursos e suas funções de limpeza.

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

Referência: `src/core/wu-strategies.js`.

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

## strategies.getStats

Consulta estratégias registradas e o tamanho da fila ociosa.

`strategies.getStats(): object`

- **Parâmetros:** Sem argumentos.
- **Retorno:** {totalStrategies,strategies,idleQueueSize,isIdle}.
- **Erros:** Leitura local sem efeitos.
- **Permissões:** API de administração do host; não está incluída na fachada com escopo de uma microapp.
- **Limpeza:** O proprietário do runtime administra os recursos e suas funções de limpeza.

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

Referência: `src/core/wu-strategies.js`.

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

## strategies.cleanup

Interrompe a fila ociosa e libera esperas pendentes.

`strategies.cleanup(): void`

- **Parâmetros:** Sem argumentos.
- **Retorno:** void.
- **Erros:** A limpeza tenta concluir cada espera mesmo que uma resolução falhe.
- **Permissões:** API de administração do host; não está incluída na fachada com escopo de uma microapp.
- **Limpeza:** Cancela idle/timer e esvazia a fila; as pendências são resolvidas com null.

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

Referência: `src/core/wu-strategies.js`.

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

## wu.sandbox.addStyles

Insere CSS em um sandbox existente.

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

- **Parâmetros:** Nome e CSS string.
- **Retorno:** void.
- **Erros:** Se não existir sandbox, registra aviso e retorna.
- **Permissões:** API de administração do host; não está incluída na fachada com escopo de uma microapp.
- **Limpeza:** O proprietário do runtime administra os recursos e suas funções de limpeza.

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

A propriedade sandbox é administrada pelo core. Não chame cleanupAll enquanto houver aplicações montadas: use wu.unmount para coordenar o ciclo de vida.

Referência: `src/core/wu-sandbox.js`.

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

## wu.sandbox.loadExternalStyles

Insere um link de stylesheet no sandbox.

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

- **Parâmetros:** Nome e URL do CSS.
- **Retorno:** void; não aguarda o load da folha.
- **Erros:** Um sandbox ausente gera aviso. O erro de rede da folha não é retornado como promise.
- **Permissões:** API de administração do host; não está incluída na fachada com escopo de uma microapp.
- **Limpeza:** O proprietário do runtime administra os recursos e suas funções de limpeza.

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

A propriedade sandbox é administrada pelo core. Não chame cleanupAll enquanto houver aplicações montadas: use wu.unmount para coordenar o ciclo de vida.

Referência: `src/core/wu-sandbox.js`.

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

## wu.sandbox.getStyleStats

Consulta estatísticas da ponte de estilos.

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

- **Parâmetros:** Sem argumentos.
- **Retorno:** Objeto de estatísticas ou null.
- **Erros:** Leitura sem operações de rede.
- **Permissões:** API de administração do host; não está incluída na fachada com escopo de uma microapp.
- **Limpeza:** O proprietário do runtime administra os recursos e suas funções de limpeza.

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

A propriedade sandbox é administrada pelo core. Não chame cleanupAll enquanto houver aplicações montadas: use wu.unmount para coordenar o ciclo de vida.

Referência: `src/core/wu-sandbox.js`.

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

## wu.sandbox.reinjectStyles

Injeta os estilos novamente conforme o modo de isolamento da aplicação.

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

- **Parâmetros:** Nome do sandbox registrado.
- **Retorno:** Promise<void>.
- **Erros:** Não atua para um sandbox ausente ou no modo isolated; os demais modos aplicam sua seleção de estilos.
- **Permissões:** API de administração do host; não está incluída na fachada com escopo de uma microapp.
- **Limpeza:** O proprietário do runtime administra os recursos e suas funções de limpeza.

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

A propriedade sandbox é administrada pelo core. Não chame cleanupAll enquanto houver aplicações montadas: use wu.unmount para coordenar o ciclo de vida.

Referência: `src/core/wu-sandbox.js`.

No 4.0, um override sem `allowedDomains` só aceita hosts loopback ou o hostname da página. Configure uma allowlist explícita para outro host. Essa restrição se aplica a overrides programáticos e aos restaurados de cookies.