WU / DOCSUNIVERSAL MICROFRONTENDS
ES

Referencia de adapters y bindings

Registro de trece tecnologías, adapters personalizados, slots, hooks, stores reactivos y helpers de IA.

Consulta las versiones, cambios y requisitos en Framework 4.0 y CLI 1.2.

Un contrato común con capacidades por framework

Cada subpath wu-framework/adapters/<framework> exporta register y utilidades propias. Importa el adapter que realmente utilizas. wu-framework/adapters reúne aliases como registerReact, registerVue y createVueUseWuAI; los objetos wuReact, wuVue y equivalentes agrupan las mismas funciones, y sus exports default son esa misma familia de utilidades.

Un registro true informa que se definió el lifecycle o terminó el montaje standalone. register() espera ese montaje y rechaza si falla. En un shell, registra desde el entry de la microapp y espera wu.mount; los lifecycles de adapters son asíncronos.

Las factories de hooks se construyen fuera del render y se utilizan dentro del componente correspondiente. Los imports de Card, Root y otros componentes de ejemplo representan módulos de tu aplicación, ya compilados por su framework. Cada entrada especifica su limpieza y contrato en 4.0.0.

Los hooks de eventos y store resuelven la facade de la app montada. Solo fuera de un montaje WU usan el runtime global. getWuInstance() sigue devolviendo el host y los helpers de IA siguen usando su wu.ai. Consulta integraciones y permisos de composición.

loadAdapter

Carga y memoriza el módulo de un adapter por nombre.

loadAdapter(name): Promise<AdapterModule>

  • Parámetros: Uno de ADAPTER_NAMES; nombres minúsculos.
  • Retorno: Objeto del adapter (wuReact, wuVue o equivalente); comparte la promesa de una carga en curso.
  • Errores: Nombre desconocido o import fallido rechazan. La carga fallida libera su promesa para permitir reintento.
  • Permisos: Los hooks de eventos/store usan la facade de su app; registro y slots usan el host. Solicita los recursos en el manifest y concédelos en el shell.
  • Limpieza: El módulo importado permanece en la caché del proceso.
import { loadAdapter } from 'wu-framework/adapters';
const { register } = await loadAdapter('react');

Referencia: src/adapters/index.js.

ADAPTER_NAMES

Enumera los adapters cargables desde el barrel.

ADAPTER_NAMES: readonly string[]

  • Parámetros: Constante congelada.
  • Retorno: Lista de nombres.
  • Errores: Lectura sin efectos.
  • Permisos: Los hooks de eventos/store usan la facade de su app; registro y slots usan el host. Solicita los recursos en el manifest y concédelos en el shell.
  • Limpieza: No requiere limpieza.
import { ADAPTER_NAMES } from 'wu-framework/adapters';
console.log(ADAPTER_NAMES);

Referencia: src/adapters/index.js.

getWuInstance

Busca WU en la ventana actual, parent y top accesibles.

getWuInstance(): WuCore | null

  • Parámetros: Exportado por shared y los adapters.
  • Retorno: Instancia encontrada o null.
  • Errores: Captura accesos cross-origin a parent/top; no lanza por ellos.
  • Permisos: Los hooks de eventos/store usan la facade de su app; registro y slots usan el host. Solicita los recursos en el manifest y concédelos en el shell.
  • Limpieza: No crea suscripciones.
import { getWuInstance } from 'wu-framework/adapters/shared';
const wu = getWuInstance();

Referencia: src/adapters/shared.js.

waitForWu

Espera una instancia global con eventos ready y sondeo.

waitForWu(timeout?): Promise<WuCore | null>

  • Parámetros: Tiempo en ms, 5000 por defecto.
  • Retorno: Instancia encontrada; un evento ready externo sin instancia puede resolver null.
  • Errores: Rechaza al agotar el timeout; necesita window.
  • Permisos: Los hooks de eventos/store usan la facade de su app; registro y slots usan el host. Solicita los recursos en el manifest y concédelos en el shell.
  • Limpieza: El helper retira listeners y temporizador al resolver o rechazar.
import { waitForWu } from 'wu-framework/adapters/shared';
const wu = await waitForWu(3000);
if (!wu) throw new Error('No hay runtime disponible');

Referencia: src/adapters/shared.js.

createWuAdapter

Construye un adapter personalizado con estado de montaje y props por aplicación.

createWuAdapter(config): register

  • Parámetros: mount y unmount obligatorios; name, ensure, update, hydrate, defineTimeout opcionales. La función resultante recibe appName, Component, options.
  • Retorno: Función asíncrona de registro que devuelve boolean.
  • Errores: Lanza si faltan mount/unmount; ensure:false produce false.
  • Permisos: Los hooks de eventos/store usan la facade de su app; registro y slots usan el host. Solicita los recursos en el manifest y concédelos en el shell.
  • Limpieza: Desmonta mediante wu.unmount(appName) para ejecutar el cleanup del framework; conserva y cancela suscripciones propias.
import { createWuAdapter } from 'wu-framework/adapters/shared';
const register = createWuAdapter({
  mount(container, { Component, props }) { return Component(container, props); },
  unmount(_container, { instance }) { instance?.dispose?.(); },
});
await register('plain', (container) => {
  container.textContent = 'Hola';
  return { dispose() { container.replaceChildren(); } };
}, { standalone: false });

No incluye una política propia de permisos. El container y el ciclo de vida proceden de WU.

Referencia: src/adapters/shared.js.

react.register

Registra una aplicación react mediante los callbacks que entiende WU.

register(appName, Component, options?): Promise<boolean>

  • Parámetros: strictMode true, props, onMount/onUnmount, standalone true, standaloneContainer #root, runtime:{React,ReactDOM} opcional.
  • Retorno: true si define el lifecycle o logra el fallback standalone; false cuando no puede completar el registro.
  • Errores: Un registro puede devolver false si WU o el framework no están disponibles; captura también errores del renderer durante mount.
  • Permisos: Los hooks de eventos/store usan la facade de su app; registro y slots usan el host. Solicita los recursos en el manifest y concédelos en el shell.
  • Limpieza: Desmonta mediante wu.unmount(appName) para ejecutar el cleanup del framework; conserva y cancela suscripciones propias.
import { register } from 'wu-framework/adapters/react';
import React from 'react';
import * as ReactDOM from 'react-dom/client';
await register('card', Card, { runtime: { React, ReactDOM }, props: { count: 1 }, standalone: false });

React debe usar createRoot; para hidratación necesita hydrateRoot en la misma instancia.

Referencia: src/adapters/react/index.js.

vue.register

Registra una aplicación vue mediante los callbacks que entiende WU.

register(appName, RootComponent, options?): Promise<boolean>

  • Parámetros: props, setup(app), onMount/onUnmount, standalone true, standaloneContainer #app.
  • Retorno: true si define el lifecycle o logra el fallback standalone; false cuando no puede completar el registro.
  • Errores: Un registro puede devolver false si WU o el framework no están disponibles; captura también errores del renderer durante mount.
  • Permisos: Los hooks de eventos/store usan la facade de su app; registro y slots usan el host. Solicita los recursos en el manifest y concédelos en el shell.
  • Limpieza: Desmonta mediante wu.unmount(appName) para ejecutar el cleanup del framework; conserva y cancela suscripciones propias.
import { register } from 'wu-framework/adapters/vue';
await register('card', Card, { props: { count: 1 }, standalone: false });

Vue actualiza las props de la instancia hija montada o hidratada mediante un wrapper reactivo, conservando keep-alive.

Referencia: src/adapters/vue/index.js.

angular.register

Registra una aplicación angular mediante los callbacks que entiende WU.

register(appName, AppModule, options?): Promise<boolean>

  • Parámetros: platformFactory, providers, rootSelector app-root, standalone y callbacks.
  • Retorno: true si define el lifecycle o logra el fallback standalone; false cuando no puede completar el registro.
  • Errores: Un registro puede devolver false si WU o el framework no están disponibles; captura también errores del renderer durante mount.
  • Permisos: Los hooks de eventos/store usan la facade de su app; registro y slots usan el host. Solicita los recursos en el manifest y concédelos en el shell.
  • Limpieza: Desmonta mediante wu.unmount(appName) para ejecutar el cleanup del framework; conserva y cancela suscripciones propias.
import { register } from 'wu-framework/adapters/angular';
await register('card', AppModule, { rootSelector: 'card-root', standalone: false });

Para componentes standalone usa registerStandalone. Este registro crea y destruye plataforma y módulo Angular.

Referencia: src/adapters/angular/index.js.

svelte.register

Registra una aplicación svelte mediante los callbacks que entiende WU.

register(appName, Component, options?): Promise<boolean>

  • Parámetros: props, context Map, intro false, standalone true, standaloneContainer #app y callbacks.
  • Retorno: true si define el lifecycle o logra el fallback standalone; false cuando no puede completar el registro.
  • Errores: Un registro puede devolver false si WU o el framework no están disponibles; captura también errores del renderer durante mount.
  • Permisos: Los hooks de eventos/store usan la facade de su app; registro y slots usan el host. Solicita los recursos en el manifest y concédelos en el shell.
  • Limpieza: Desmonta mediante wu.unmount(appName) para ejecutar el cleanup del framework; conserva y cancela suscripciones propias.
import { register } from 'wu-framework/adapters/svelte';
await register('card', Card, { props: { count: 1 }, standalone: false });

Este registro usa constructor, $set y $destroy del modelo Svelte 4. Usa registerSvelte5 para el API moderno.

Referencia: src/adapters/svelte/index.js.

preact.register

Registra una aplicación preact mediante los callbacks que entiende WU.

register(appName, Component, options?): Promise<boolean>

  • Parámetros: props, callbacks, standalone true y standaloneContainer #app.
  • Retorno: true si define el lifecycle o logra el fallback standalone; false cuando no puede completar el registro.
  • Errores: Un registro puede devolver false si WU o el framework no están disponibles; captura también errores del renderer durante mount.
  • Permisos: Los hooks de eventos/store usan la facade de su app; registro y slots usan el host. Solicita los recursos en el manifest y concédelos en el shell.
  • Limpieza: Desmonta mediante wu.unmount(appName) para ejecutar el cleanup del framework; conserva y cancela suscripciones propias.
import { register } from 'wu-framework/adapters/preact';
await register('card', Card, { props: { count: 1 }, standalone: false });

Añade wuAppName y wuInstance a props; update vuelve a renderizar con props fusionadas.

Referencia: src/adapters/preact/index.js.

solid.register

Registra una aplicación solid mediante los callbacks que entiende WU.

register(appName, Component, options?): Promise<boolean>

  • Parámetros: props, callbacks, standalone true y standaloneContainer #root.
  • Retorno: true si define el lifecycle o logra el fallback standalone; false cuando no puede completar el registro.
  • Errores: Un registro puede devolver false si WU o el framework no están disponibles; captura también errores del renderer durante mount.
  • Permisos: Los hooks de eventos/store usan la facade de su app; registro y slots usan el host. Solicita los recursos en el manifest y concédelos en el shell.
  • Limpieza: Desmonta mediante wu.unmount(appName) para ejecutar el cleanup del framework; conserva y cancela suscripciones propias.
import { register } from 'wu-framework/adapters/solid';
await register('card', Card, { props: { count: 1 }, standalone: false });

El registro requiere solid-js/web. No presupone el mismo contrato update/hydrate de React.

Referencia: src/adapters/solid/index.js.

lit.register

Registra una aplicación lit mediante los callbacks que entiende WU.

register(appName, ElementClass, options?): Promise<boolean>

  • Parámetros: tagName, properties, callbacks, standalone true y standaloneContainer #root.
  • Retorno: true si define el lifecycle o logra el fallback standalone; false cuando no puede completar el registro.
  • Errores: Un registro puede devolver false si WU o el framework no están disponibles; captura también errores del renderer durante mount.
  • Permisos: Los hooks de eventos/store usan la facade de su app; registro y slots usan el host. Solicita los recursos en el manifest y concédelos en el shell.
  • Limpieza: Desmonta mediante wu.unmount(appName) para ejecutar el cleanup del framework; conserva y cancela suscripciones propias.
import { register } from 'wu-framework/adapters/lit';
await register('card', CardElement, { tagName: 'demo-card', properties: { count: 1 }, standalone: false });

El custom element permanece en customElements tras desmontar: el registro global no se puede deshacer.

Referencia: src/adapters/lit/index.js.

vanilla.register

Registra una aplicación vanilla mediante los callbacks que entiende WU.

register(appName, config, options?): Promise<boolean>

  • Parámetros: config.render obligatorio, init/destroy/state opcionales; options del adapter compartido.
  • Retorno: true si define el lifecycle o logra el fallback standalone; false cuando no puede completar el registro.
  • Errores: Un registro puede devolver false si WU o el framework no están disponibles; captura también errores del renderer durante mount.
  • Permisos: Los hooks de eventos/store usan la facade de su app; registro y slots usan el host. Solicita los recursos en el manifest y concédelos en el shell.
  • Limpieza: Desmonta mediante wu.unmount(appName) para ejecutar el cleanup del framework; conserva y cancela suscripciones propias.
import { register } from 'wu-framework/adapters/vanilla';
await register('card', {
  state: { count: 1 },
  render(container, state) { container.textContent = String(state.count); },
}, { standalone: false });

Tu render controla el contenido del contenedor y tu destroy libera recursos externos.

Referencia: src/adapters/vanilla/index.js.

alpine.register

Registra una aplicación alpine mediante los callbacks que entiende WU.

register(appName, appConfig, options?): Promise<boolean>

  • Parámetros: template y data(); runtime Alpine y dataName pueden ir en config u options; standalone/callbacks.
  • Retorno: true si define el lifecycle o logra el fallback standalone; false cuando no puede completar el registro.
  • Errores: Un registro puede devolver false si WU o el framework no están disponibles; captura también errores del renderer durante mount.
  • Permisos: Los hooks de eventos/store usan la facade de su app; registro y slots usan el host. Solicita los recursos en el manifest y concédelos en el shell.
  • Limpieza: Desmonta mediante wu.unmount(appName) para ejecutar el cleanup del framework; conserva y cancela suscripciones propias.
import { register } from 'wu-framework/adapters/alpine';
await register('card', {
  template: '<section x-data="__WU_ALPINE_DATA__"><b x-text="count"></b></section>',
  data: () => ({ count: 1 }),
}, { runtime: Alpine, standalone: false });

Sin runtime Alpine inserta HTML y advierte; un registro true no certifica que los atributos Alpine funcionen.

Referencia: src/adapters/alpine/index.js.

qwik.register

Registra una aplicación qwik mediante los callbacks que entiende WU.

register(appName, Component, options?): Promise<boolean>

  • Parámetros: props y runtime; el runtime puede ser Qwik 1 o Qwik 2. No admite base, createProps, loadQwikLoader ni opciones standalone.
  • Retorno: true si define el lifecycle o logra el fallback standalone; false cuando no puede completar el registro.
  • Errores: Un registro puede devolver false si WU o el framework no están disponibles; captura también errores del renderer durante mount.
  • Permisos: Los hooks de eventos/store usan la facade de su app; registro y slots usan el host. Solicita los recursos en el manifest y concédelos en el shell.
  • Limpieza: Desmonta mediante wu.unmount(appName) para ejecutar el cleanup del framework; conserva y cancela suscripciones propias.
import { register } from 'wu-framework/adapters/qwik';
await register('card', Card, { props: { count: 1 } });

El adapter prefiere @qwik.dev/core y luego @builder.io/qwik; carga el qwikloader correspondiente a la versión del runtime. La prop wu usa noSerialize y contiene la facade de la app.

Referencia: src/adapters/qwik/index.js.

stencil.register

Registra una aplicación stencil mediante los callbacks que entiende WU.

register(appName, tagName, options?): Promise<boolean>

  • Parámetros: props para valores JavaScript, attributes para strings, callbacks y standalone.
  • Retorno: true si define el lifecycle o logra el fallback standalone; false cuando no puede completar el registro.
  • Errores: Un registro puede devolver false si WU o el framework no están disponibles; captura también errores del renderer durante mount.
  • Permisos: Los hooks de eventos/store usan la facade de su app; registro y slots usan el host. Solicita los recursos en el manifest y concédelos en el shell.
  • Limpieza: Desmonta mediante wu.unmount(appName) para ejecutar el cleanup del framework; conserva y cancela suscripciones propias.
import { register } from 'wu-framework/adapters/stencil';
await register('card', 'demo-card', { props: { count: 1 }, attributes: { label: 'Resumen' }, standalone: false });

Registra previamente los custom elements del bundle Stencil; este helper crea el tag pero no carga su definición.

Referencia: src/adapters/stencil/index.js.

htmx.register

Registra una aplicación htmx mediante los callbacks que entiende WU.

register(appName, config, options?): Promise<boolean>

  • Parámetros: template obligatorio; baseUrl, setup(container,htmx); runtime y opciones standalone/callbacks.
  • Retorno: true si define el lifecycle o logra el fallback standalone; false cuando no puede completar el registro.
  • Errores: Un registro puede devolver false si WU o el framework no están disponibles; captura también errores del renderer durante mount.
  • Permisos: Los hooks de eventos/store usan la facade de su app; registro y slots usan el host. Solicita los recursos en el manifest y concédelos en el shell.
  • Limpieza: Desmonta mediante wu.unmount(appName) para ejecutar el cleanup del framework; conserva y cancela suscripciones propias.
import { register } from 'wu-framework/adapters/htmx';
await register('card', {
  template: '<button hx-get="/fragment">Actualizar</button>',
  baseUrl: '/api',
}, { runtime: htmx, standalone: false });

Reescribe rutas hx-* que empiezan por / concatenando baseUrl. Sin htmx inserta HTML sin activar peticiones. setup puede devolver cleanup.

Referencia: src/adapters/htmx/index.js.

stimulus.register

Registra una aplicación stimulus mediante los callbacks que entiende WU.

register(appName, config, options?): Promise<boolean>

  • Parámetros: template y mapa controllers no vacío; callbacks y standalone.
  • Retorno: true si define el lifecycle o logra el fallback standalone; false cuando no puede completar el registro.
  • Errores: Un registro puede devolver false si WU o el framework no están disponibles; captura también errores del renderer durante mount.
  • Permisos: Los hooks de eventos/store usan la facade de su app; registro y slots usan el host. Solicita los recursos en el manifest y concédelos en el shell.
  • Limpieza: Desmonta mediante wu.unmount(appName) para ejecutar el cleanup del framework; conserva y cancela suscripciones propias.
import { register } from 'wu-framework/adapters/stimulus';
await register('card', {
  template: '<section data-controller="counter"></section>',
  controllers: { counter: CounterController },
}, { standalone: false });

Crea una Application de Stimulus para el subtree y la detiene al desmontar.

Referencia: src/adapters/stimulus/index.js.

angular.registerStandalone

Monta un componente standalone de Angular con un host dentro del contenedor de WU.

registerStandalone(appName, RootComponent, options?): Promise<boolean>

  • Parámetros: appConfig, createApplication, createComponent, provideZoneChangeDetection, callbacks y standalone.
  • Retorno: Boolean de registro.
  • Errores: Un registro puede devolver false si WU o el framework no están disponibles; captura también errores del renderer durante mount.
  • Permisos: Los hooks de eventos/store usan la facade de su app; registro y slots usan el host. Solicita los recursos en el manifest y concédelos en el shell.
  • Limpieza: Desmonta mediante wu.unmount(appName) para ejecutar el cleanup del framework; conserva y cancela suscripciones propias.
import { registerStandalone } from 'wu-framework/adapters/angular';
import { createApplication } from '@angular/platform-browser';
import { createComponent } from '@angular/core';
await registerStandalone('card', Card, { createApplication, createComponent, standalone: false });

Las props iniciales y wu.update() se aplican a inputs de la instancia Angular.

Referencia: src/adapters/angular/index.js.

angular.registerElement

Expone un componente Angular mediante Angular Elements.

registerElement(appName, Component, options?): Promise<boolean>

  • Parámetros: elementTag, appConfig, callbacks, standalone y standaloneContainer.
  • Retorno: Boolean de registro.
  • Errores: Un registro puede devolver false si WU o el framework no están disponibles; captura también errores del renderer durante mount.
  • Permisos: Los hooks de eventos/store usan la facade de su app; registro y slots usan el host. Solicita los recursos en el manifest y concédelos en el shell.
  • Limpieza: Desmonta mediante wu.unmount(appName) para ejecutar el cleanup del framework; conserva y cancela suscripciones propias.
import { registerElement } from 'wu-framework/adapters/angular';
await registerElement('card', Card, { elementTag: 'angular-card', standalone: false });

Requiere @angular/elements. Retirar el elemento no desregistra su constructor global.

Referencia: src/adapters/angular/index.js.

svelte.registerSvelte5

Utiliza mount/unmount de Svelte 5, con fallback a la API de componentes anterior.

registerSvelte5(appName, Component, options?): Promise<boolean>

  • Parámetros: props, onMount, onUnmount y opciones standalone. No admite createProps.
  • Retorno: Boolean de registro.
  • Errores: Un registro puede devolver false si WU o el framework no están disponibles; captura también errores del renderer durante mount.
  • Permisos: Los hooks de eventos/store usan la facade de su app; registro y slots usan el host. Solicita los recursos en el manifest y concédelos en el shell.
  • Limpieza: Desmonta mediante wu.unmount(appName) para ejecutar el cleanup del framework; conserva y cancela suscripciones propias.
import { registerSvelte5 } from 'wu-framework/adapters/svelte';
await registerSvelte5('card', Card, { props: { count: 1 }, standalone: false });

registerSvelte5 registra mount/unmount y no ofrece un slot update. Para datos vivos usa un store compartido; no esperes que wu.update() cambie las props del componente registrado por esta función.

Referencia: src/adapters/svelte/index.js.

preact.registerCompat

Renderiza con preact/compat y recurre al adapter Preact cuando no puede importarlo.

registerCompat(appName, Component, options?): Promise<boolean>

  • Parámetros: props, callbacks y standalone.
  • Retorno: Boolean de registro.
  • Errores: Un registro puede devolver false si WU o el framework no están disponibles; captura también errores del renderer durante mount.
  • Permisos: Los hooks de eventos/store usan la facade de su app; registro y slots usan el host. Solicita los recursos en el manifest y concédelos en el shell.
  • Limpieza: Desmonta mediante wu.unmount(appName) para ejecutar el cleanup del framework; conserva y cancela suscripciones propias.
import { registerCompat } from 'wu-framework/adapters/preact';
await registerCompat('card', Card, { standalone: false });

La ruta compat registra mount/unmount; no equivale al canal update de register normal.

Referencia: src/adapters/preact/index.js.

lit.registerWebComponent

Reutiliza el registro Lit para una clase HTMLElement sin dependencia de Lit.

registerWebComponent(appName, ElementClass, options?): Promise<boolean>

  • Parámetros: Clase custom element y las mismas options de register Lit.
  • Retorno: Boolean de registro.
  • Errores: Un registro puede devolver false si WU o el framework no están disponibles; captura también errores del renderer durante mount.
  • Permisos: Los hooks de eventos/store usan la facade de su app; registro y slots usan el host. Solicita los recursos en el manifest y concédelos en el shell.
  • Limpieza: Desmonta mediante wu.unmount(appName) para ejecutar el cleanup del framework; conserva y cancela suscripciones propias.
import { registerWebComponent } from 'wu-framework/adapters/lit';
class Card extends HTMLElement { connectedCallback() { this.textContent = 'Hola'; } }
await registerWebComponent('card', Card, { tagName: 'plain-card', standalone: false });

Referencia: src/adapters/lit/index.js.

react.createUseWuEvents

Crea un hook de eventos ligado al ciclo de vida del componente.

createUseWuEvents(React): () => EventsHelper

  • Parámetros: Namespace React con los hooks requeridos. El helper devuelve emit, on y once.
  • Retorno: Hook que devuelve funciones de publicación y suscripción.
  • Errores: Necesita el runtime del framework y una instancia WU accesible; controla disponibilidad antes de ejecutar operaciones.
  • Permisos: Los hooks de eventos/store usan la facade de su app; registro y slots usan el host. Solicita los recursos en el manifest y concédelos en el shell.
  • Limpieza: Las suscripciones creadas con on se retiran al desmontar; conserva también el disposer de once si puede quedar pendiente.
import React from 'react';
import { createUseWuEvents } from 'wu-framework/adapters/react';
const useWuEvents = createUseWuEvents(React);
function View() {
  const events = useWuEvents();
  return null;
}

Referencia: src/adapters/react/index.js.

react.createUseWuStore

Crea un hook que refleja una ruta del store en estado del componente.

createUseWuStore(React): (namespace?) => StoreHelper

  • Parámetros: Namespace de hooks; el hook acepta un prefijo de estado, vacío para raíz.
  • Retorno: Objeto {state,setState,getState}.
  • Errores: Necesita el runtime del framework y una instancia WU accesible; controla disponibilidad antes de ejecutar operaciones.
  • Permisos: Los hooks de eventos/store usan la facade de su app; registro y slots usan el host. Solicita los recursos en el manifest y concédelos en el shell.
  • Limpieza: Libera las suscripciones al desmontar el componente propietario.
import React from 'react';
import { createUseWuStore } from 'wu-framework/adapters/react';
const useWuStore = createUseWuStore(React);
function View() {
  const { state, setState } = useWuStore('cart');
  return null;
}

Referencia: src/adapters/react/index.js.

react.createWuSlot

Crea un componente que hospeda una app WU por nombre y URL.

createWuSlot(React): WuSlotComponent

  • Parámetros: Nombre del framework y hooks; props name, url, appName, fallback y callbacks.
  • Retorno: Componente para renderizar un slot.
  • Errores: Necesita el runtime del framework y una instancia WU accesible; controla disponibilidad antes de ejecutar operaciones.
  • Permisos: Los hooks de eventos/store usan la facade de su app; registro y slots usan el host. Solicita los recursos en el manifest y concédelos en el shell.
  • Limpieza: Libera las suscripciones al desmontar el componente propietario.
import React from 'react';
import { createWuSlot } from 'wu-framework/adapters/react';
const WuSlot = createWuSlot(React);
const element = React.createElement(WuSlot, { name: 'card', url: '/apps/card' });

Referencia: src/adapters/react/index.js.

preact.createUseWuEvents

Crea un hook de eventos ligado al ciclo de vida del componente.

createUseWuEvents(hooks): () => EventsHelper

  • Parámetros: Namespace hooks con los hooks requeridos. El helper devuelve emit, on y once.
  • Retorno: Hook que devuelve funciones de publicación y suscripción.
  • Errores: Necesita el runtime del framework y una instancia WU accesible; controla disponibilidad antes de ejecutar operaciones.
  • Permisos: Los hooks de eventos/store usan la facade de su app; registro y slots usan el host. Solicita los recursos en el manifest y concédelos en el shell.
  • Limpieza: Las suscripciones creadas con on se retiran al desmontar; conserva también el disposer de once si puede quedar pendiente.
import * as hooks from 'preact/hooks';
import { createUseWuEvents } from 'wu-framework/adapters/preact';
const useWuEvents = createUseWuEvents(hooks);
function View() {
  const events = useWuEvents();
  return null;
}

Referencia: src/adapters/preact/index.js.

preact.createUseWuStore

Crea un hook que refleja una ruta del store en estado del componente.

createUseWuStore(hooks): (namespace?) => StoreHelper

  • Parámetros: Namespace de hooks; el hook acepta un prefijo de estado, vacío para raíz.
  • Retorno: Objeto {state,setState,getState}.
  • Errores: Necesita el runtime del framework y una instancia WU accesible; controla disponibilidad antes de ejecutar operaciones.
  • Permisos: Los hooks de eventos/store usan la facade de su app; registro y slots usan el host. Solicita los recursos en el manifest y concédelos en el shell.
  • Limpieza: Libera las suscripciones al desmontar el componente propietario.
import * as hooks from 'preact/hooks';
import { createUseWuStore } from 'wu-framework/adapters/preact';
const useWuStore = createUseWuStore(hooks);
function View() {
  const { state, setState } = useWuStore('cart');
  return null;
}

Referencia: src/adapters/preact/index.js.

preact.createWuSlot

Crea un componente que hospeda una app WU por nombre y URL.

createWuSlot(h, hooks?): WuSlotComponent

  • Parámetros: Función h de Preact y objeto de hooks useState/useEffect/useRef. Sin hooks devuelve una versión básica con menos comportamiento.
  • Retorno: Componente para renderizar un slot.
  • Errores: Necesita el runtime del framework y una instancia WU accesible; controla disponibilidad antes de ejecutar operaciones.
  • Permisos: Los hooks de eventos/store usan la facade de su app; registro y slots usan el host. Solicita los recursos en el manifest y concédelos en el shell.
  • Limpieza: Libera las suscripciones al desmontar el componente propietario.
import { h } from 'preact';
import * as hooks from 'preact/hooks';
import { createWuSlot } from 'wu-framework/adapters/preact';
const WuSlot = createWuSlot(h, hooks);

Referencia: src/adapters/preact/index.js.

vue.useWuEvents

Entrega utilidades de eventos y una limpieza explícita.

useWuEvents(): EventsHelper

  • Parámetros: Sin argumentos.
  • Retorno: {emit,on,once,off,cleanup}.
  • Errores: Necesita el runtime del framework y una instancia WU accesible; controla disponibilidad antes de ejecutar operaciones.
  • Permisos: Los hooks de eventos/store usan la facade de su app; registro y slots usan el host. Solicita los recursos en el manifest y concédelos en el shell.
  • Limpieza: Llama cleanup desde onUnmounted y conserva canceladores de once cuando sea necesario.
import { useWuEvents } from 'wu-framework/adapters/vue';
import { onUnmounted } from 'vue';
const events = useWuEvents();
events.on('cart:changed', console.log);
onUnmounted(events.cleanup);

Referencia: src/adapters/vue/index.js.

vue.useWuStore

Refleja una ruta del store en un ref de Vue cuando el adapter tiene el runtime disponible.

useWuStore(namespace?): StoreHelper

  • Parámetros: Namespace opcional.
  • Retorno: {state,setState,getState,cleanup}.
  • Errores: Necesita el runtime del framework y una instancia WU accesible; controla disponibilidad antes de ejecutar operaciones.
  • Permisos: Los hooks de eventos/store usan la facade de su app; registro y slots usan el host. Solicita los recursos en el manifest y concédelos en el shell.
  • Limpieza: Llama cleanup al desmontar.
import * as Vue from 'vue';
import { useWuStore, wuVuePlugin } from 'wu-framework/adapters/vue';
app.use(wuVuePlugin, { Vue });
const cart = useWuStore('cart');
Vue.onUnmounted(cart.cleanup);

El runtime Vue debe estar configurado; no interpreta patrones namespace.* como observación de descendientes arbitrarios.

Referencia: src/adapters/vue/index.js.

vue.wuVuePlugin

Instala WuSlot, utilidades globales y la instancia de Vue que usa el adapter.

app.use(wuVuePlugin, options?): app

  • Parámetros: options.Vue permite pasar el namespace Vue del host.
  • Retorno: El resultado de app.use de Vue.
  • Errores: Necesita el runtime del framework y una instancia WU accesible; controla disponibilidad antes de ejecutar operaciones.
  • Permisos: Los hooks de eventos/store usan la facade de su app; registro y slots usan el host. Solicita los recursos en el manifest y concédelos en el shell.
  • Limpieza: El host desmonta la aplicación Vue; limpia listeners propios de sus componentes.
import * as Vue from 'vue';
import { wuVuePlugin } from 'wu-framework/adapters/vue';
const app = Vue.createApp(Root);
app.use(wuVuePlugin, { Vue });

Referencia: src/adapters/vue/index.js.

vue.WuSlot

Expone el componente Vue que monta una aplicación WU.

WuSlot: Vue component options

  • Parámetros: Props name, url, appName y fallbackText; runtime Vue disponible.
  • Retorno: Objeto de definición de componente.
  • Errores: Necesita el runtime del framework y una instancia WU accesible; controla disponibilidad antes de ejecutar operaciones.
  • Permisos: Los hooks de eventos/store usan la facade de su app; registro y slots usan el host. Solicita los recursos en el manifest y concédelos en el shell.
  • Limpieza: Libera las suscripciones al desmontar el componente propietario.
import { WuSlot } from 'wu-framework/adapters/vue';
const components = { WuSlot };

WuSlot opera en el ciclo de vida Vue; no representa el WuApp del subpath Next.

Referencia: src/adapters/vue/index.js.

svelte.createWuStore

Crea un store compatible con subscribe de Svelte conectado a WU.

createWuStore(namespace?): SvelteStore

  • Parámetros: Prefijo de ruta; vacío observa la raíz.
  • Retorno: {subscribe,set,get,update}.
  • Errores: Necesita el runtime del framework y una instancia WU accesible; controla disponibilidad antes de ejecutar operaciones.
  • Permisos: Los hooks de eventos/store usan la facade de su app; registro y slots usan el host. Solicita los recursos en el manifest y concédelos en el shell.
  • Limpieza: Al cancelar el último subscriber se retira la suscripción WU; una nueva suscripción vuelve a conectarla.
import { createWuStore } from 'wu-framework/adapters/svelte';
const cart = createWuStore('cart');
const stop = cart.subscribe(value => console.log(value));
stop();

Referencia: src/adapters/svelte/index.js.

svelte.createWuEventStore

Expone el último evento como store suscribible.

createWuEventStore(eventPattern): EventStore

  • Parámetros: Patrón reconocido por el event bus.
  • Retorno: {subscribe,emit}.
  • Errores: Necesita el runtime del framework y una instancia WU accesible; controla disponibilidad antes de ejecutar operaciones.
  • Permisos: Los hooks de eventos/store usan la facade de su app; registro y slots usan el host. Solicita los recursos en el manifest y concédelos en el shell.
  • Limpieza: Cancelar el último subscriber desconecta el listener WU.
import { createWuEventStore } from 'wu-framework/adapters/svelte';
const changes = createWuEventStore('cart:changed');
const stop = changes.subscribe(console.log);
stop();

Referencia: src/adapters/svelte/index.js.

svelte.useWuEvents

Entrega emit/on/once/off con limpieza manual para componentes Svelte.

useWuEvents(): EventsHelper

  • Parámetros: Sin argumentos.
  • Retorno: {emit,on,once,off,cleanup}.
  • Errores: Necesita el runtime del framework y una instancia WU accesible; controla disponibilidad antes de ejecutar operaciones.
  • Permisos: Los hooks de eventos/store usan la facade de su app; registro y slots usan el host. Solicita los recursos en el manifest y concédelos en el shell.
  • Limpieza: Invoca cleanup desde onDestroy; la función no registra ese lifecycle por ti.
import { onDestroy } from 'svelte';
import { useWuEvents } from 'wu-framework/adapters/svelte';
const events = useWuEvents();
onDestroy(events.cleanup);

Referencia: src/adapters/svelte/index.js.

svelte.createWuSlotConfig

Devuelve una plantilla y configuración para construir un slot Svelte.

createWuSlotConfig(): SlotConfig

  • Parámetros: Sin argumentos.
  • Retorno: {props,template,createInstance}.
  • Errores: Necesita el runtime del framework y una instancia WU accesible; controla disponibilidad antes de ejecutar operaciones.
  • Permisos: Los hooks de eventos/store usan la facade de su app; registro y slots usan el host. Solicita los recursos en el manifest y concédelos en el shell.
  • Limpieza: Libera las suscripciones al desmontar el componente propietario.
import { createWuSlotConfig } from 'wu-framework/adapters/svelte';
const config = createWuSlotConfig();
console.log(config.props, config.template);

Es una configuración con texto fuente de componente; no es un componente compilado ni una función que renderice por sí sola.

Referencia: src/adapters/svelte/index.js.

solid.createWuStore

Conecta una ruta de WU con un signal de Solid.

createWuStore(namespace?): [accessor, setter]

  • Parámetros: Namespace; debe ejecutarse en un owner de Solid con runtime disponible.
  • Retorno: Tupla de accessor de estado y función setWuState(path,value).
  • Errores: Necesita el runtime del framework y una instancia WU accesible; controla disponibilidad antes de ejecutar operaciones.
  • Permisos: Los hooks de eventos/store usan la facade de su app; registro y slots usan el host. Solicita los recursos en el manifest y concédelos en el shell.
  • Limpieza: Registra el unsubscribe en onCleanup del owner Solid.
import { createWuStore } from 'wu-framework/adapters/solid';
function View() {
  const [cart, setCart] = createWuStore('cart');
  setCart('count', 1);
  return null;
}

Referencia: src/adapters/solid/index.js.

solid.createWuEvent

Refleja el último evento en un signal.

createWuEvent(pattern): accessor

  • Parámetros: Patrón del bus.
  • Retorno: Accessor que devuelve el evento o null inicial.
  • Errores: Necesita el runtime del framework y una instancia WU accesible; controla disponibilidad antes de ejecutar operaciones.
  • Permisos: Los hooks de eventos/store usan la facade de su app; registro y slots usan el host. Solicita los recursos en el manifest y concédelos en el shell.
  • Limpieza: Registra unsubscribe mediante onCleanup.
import { createWuEvent } from 'wu-framework/adapters/solid';
function View() {
  const latest = createWuEvent('cart:changed');
  return null;
}

Referencia: src/adapters/solid/index.js.

solid.useWuEvents

Proporciona utilidades de eventos dentro de un owner Solid.

useWuEvents(): EventsHelper

  • Parámetros: Sin argumentos.
  • Retorno: {emit,on,once,off}.
  • Errores: Necesita el runtime del framework y una instancia WU accesible; controla disponibilidad antes de ejecutar operaciones.
  • Permisos: Los hooks de eventos/store usan la facade de su app; registro y slots usan el host. Solicita los recursos en el manifest y concédelos en el shell.
  • Limpieza: Libera las suscripciones al desmontar el componente propietario.
import { useWuEvents } from 'wu-framework/adapters/solid';
function View() { const events = useWuEvents(); return null; }

Referencia: src/adapters/solid/index.js.

solid.createWuContext

Crea un contexto de Solid para compartir la instancia WU.

createWuContext(): { WuProvider, useWu, WuContext }

  • Parámetros: Sin argumentos; necesita runtime Solid disponible.
  • Retorno: Provider, hook y contexto.
  • Errores: Necesita el runtime del framework y una instancia WU accesible; controla disponibilidad antes de ejecutar operaciones.
  • Permisos: Los hooks de eventos/store usan la facade de su app; registro y slots usan el host. Solicita los recursos en el manifest y concédelos en el shell.
  • Limpieza: El contexto no abre transporte ni recursos persistentes.
import { createWuContext } from 'wu-framework/adapters/solid';
const { WuProvider, useWu } = createWuContext();

Referencia: src/adapters/solid/index.js.

solid.createWuSlot

Crea el componente de slot de Solid.

createWuSlot(): WuSlotComponent

  • Parámetros: Sin argumentos; el componente recibe name, url, appName, fallback y callbacks.
  • Retorno: Función de componente.
  • Errores: Necesita el runtime del framework y una instancia WU accesible; controla disponibilidad antes de ejecutar operaciones.
  • Permisos: Los hooks de eventos/store usan la facade de su app; registro y slots usan el host. Solicita los recursos en el manifest y concédelos en el shell.
  • Limpieza: Libera las suscripciones al desmontar el componente propietario.
import { createWuSlot } from 'wu-framework/adapters/solid';
const WuSlot = createWuSlot();

Referencia: src/adapters/solid/index.js.

angular.createWuService

Entrega funciones de eventos y estado para un servicio Angular.

createWuService(): WuService

  • Parámetros: Sin argumentos.
  • Retorno: emit,on,once,off,getState,setState,onStateChange,destroy y getter wu.
  • Errores: Necesita el runtime del framework y una instancia WU accesible; controla disponibilidad antes de ejecutar operaciones.
  • Permisos: Los hooks de eventos/store usan la facade de su app; registro y slots usan el host. Solicita los recursos en el manifest y concédelos en el shell.
  • Limpieza: Llama destroy desde ngOnDestroy; las suscripciones de once deben cancelarse si continúan pendientes.
import { createWuService } from 'wu-framework/adapters/angular';
const service = createWuService();
service.on('cart:changed', console.log);
service.destroy();

getState convierte valores falsy en null. Para conservar false, 0 o una cadena vacía dentro de la app, usa inject(WuAppScope).wu.store.get(path) en un contexto DI. service.wu devuelve el host y no debe usarse para eludir los grants.

Referencia: src/adapters/angular/index.js.

angular.createWuSlotComponent

Devuelve metadatos y métodos base para implementar un slot Angular.

createWuSlotComponent(): ComponentConfig

  • Parámetros: Sin argumentos.
  • Retorno: Objeto selector, template, styles y methods.
  • Errores: Necesita el runtime del framework y una instancia WU accesible; controla disponibilidad antes de ejecutar operaciones.
  • Permisos: Los hooks de eventos/store usan la facade de su app; registro y slots usan el host. Solicita los recursos en el manifest y concédelos en el shell.
  • Limpieza: Libera las suscripciones al desmontar el componente propietario.
import { createWuSlotComponent } from 'wu-framework/adapters/angular';
const config = createWuSlotComponent();
console.log(config.selector, config.methods);

No devuelve una clase ya decorada por @Component. Debes integrar metadatos, ViewChild y métodos en una clase Angular.

Referencia: src/adapters/angular/index.js.

angular.getWuSlotModuleConfig

Describe los nombres del módulo que hospeda un slot Angular.

getWuSlotModuleConfig(): object

  • Parámetros: Sin argumentos.
  • Retorno: {imports,declarations,exports} con nombres string.
  • Errores: Necesita el runtime del framework y una instancia WU accesible; controla disponibilidad antes de ejecutar operaciones.
  • Permisos: Los hooks de eventos/store usan la facade de su app; registro y slots usan el host. Solicita los recursos en el manifest y concédelos en el shell.
  • Limpieza: Libera las suscripciones al desmontar el componente propietario.
import { getWuSlotModuleConfig } from 'wu-framework/adapters/angular';
console.log(getWuSlotModuleConfig());

Son nombres descriptivos; no son referencias de clases para pasarlas directamente a @NgModule.

Referencia: src/adapters/angular/index.js.

lit.createWuSlotElement

Crea una clase Lit que hospeda un slot WU.

createWuSlotElement(LitElement, html, css?): ElementClass

  • Parámetros: Primitivas de la misma instancia Lit del host.
  • Retorno: Clase de custom element para registrar.
  • Errores: Necesita el runtime del framework y una instancia WU accesible; controla disponibilidad antes de ejecutar operaciones.
  • Permisos: Los hooks de eventos/store usan la facade de su app; registro y slots usan el host. Solicita los recursos en el manifest y concédelos en el shell.
  • Limpieza: Libera las suscripciones al desmontar el componente propietario.
import { LitElement, html, css } from 'lit';
import { createWuSlotElement } from 'wu-framework/adapters/lit';
customElements.define('demo-wu-slot', createWuSlotElement(LitElement, html, css));

El core monta por selector de documento; verifica la estrategia de DOM del slot y la versión antes de alojarlo dentro de otro shadow root.

Referencia: src/adapters/lit/index.js.

lit.WuMixin

Añade wuEmit/wuOn/wuOnce y acceso al store a una clase de elemento.

WuMixin(Base): subclass

  • Parámetros: Clase base HTMLElement o LitElement.
  • Retorno: Subclase con métodos WU y cleanup en disconnectedCallback.
  • Errores: Necesita el runtime del framework y una instancia WU accesible; controla disponibilidad antes de ejecutar operaciones.
  • Permisos: Los hooks de eventos/store usan la facade de su app; registro y slots usan el host. Solicita los recursos en el manifest y concédelos en el shell.
  • Limpieza: Llama super.disconnectedCallback cuando lo sobrescribas para ejecutar la limpieza del mixin.
import { LitElement } from 'lit';
import { WuMixin } from 'wu-framework/adapters/lit';
class Card extends WuMixin(LitElement) {
  connectedCallback() { super.connectedCallback(); this.wuOn('cart:changed', console.log); }
}

Referencia: src/adapters/lit/index.js.

lit.wuProperty

Conecta una propiedad del elemento con una ruta del store.

wuProperty(storePath): legacy property decorator

  • Parámetros: Ruta string; decorador legacy aplicado a prototype y nombre de propiedad.
  • Retorno: Función decoradora que instala getter/setter y hooks de conexión.
  • Errores: Necesita el runtime del framework y una instancia WU accesible; controla disponibilidad antes de ejecutar operaciones.
  • Permisos: Los hooks de eventos/store usan la facade de su app; registro y slots usan el host. Solicita los recursos en el manifest y concédelos en el shell.
  • Limpieza: Libera las suscripciones al desmontar el componente propietario.
import { wuProperty } from 'wu-framework/adapters/lit';
wuProperty('cart.count')(Card.prototype, 'count');

No es un decorador Stage 3 genérico. El setter escribe en WU y la suscripción sincroniza el valor local.

Referencia: src/adapters/lit/index.js.

lit.createSimpleElement

Construye un custom element con template, estilos y callbacks.

createSimpleElement(config): ElementClass

  • Parámetros: name opcional, template string o función, styles y shadow true por defecto.
  • Retorno: Clase HTMLElement; name puede registrar el custom element.
  • Errores: Necesita el runtime del framework y una instancia WU accesible; controla disponibilidad antes de ejecutar operaciones.
  • Permisos: Los hooks de eventos/store usan la facade de su app; registro y slots usan el host. Solicita los recursos en el manifest y concédelos en el shell.
  • Limpieza: Libera las suscripciones al desmontar el componente propietario.
import { createSimpleElement } from 'wu-framework/adapters/lit';
const Card = createSimpleElement({ template: () => '<p>Hola</p>', styles: ':host{display:block}' });
customElements.define('simple-card', Card);

Template se inserta como HTML sin saneamiento; controla su contenido.

Referencia: src/adapters/lit/index.js.

vanilla.registerClass

Monta una clase de aplicación con un contenedor propio.

registerClass(appName, AppClass, options?): Promise<boolean>

  • Parámetros: constructorArgs, callbacks y standalone.
  • Retorno: Boolean de registro.
  • Errores: Necesita el runtime del framework y una instancia WU accesible; controla disponibilidad antes de ejecutar operaciones.
  • Permisos: Los hooks de eventos/store usan la facade de su app; registro y slots usan el host. Solicita los recursos en el manifest y concédelos en el shell.
  • Limpieza: Libera las suscripciones al desmontar el componente propietario.
import { registerClass } from 'wu-framework/adapters/vanilla';
class Card { constructor(container) { this.container = container; } render() { this.container.textContent = 'Hola'; } destroy() {} }
await registerClass('card', Card, { standalone: false });

Referencia: src/adapters/vanilla/index.js.

vanilla.registerTemplate

Registra una plantilla HTML con datos, estilos y scripts opcionales.

registerTemplate(appName, template, options?): Promise<boolean>

  • Parámetros: template string; data, scripts, styles, callbacks y standalone.
  • Retorno: Boolean de registro.
  • Errores: Necesita el runtime del framework y una instancia WU accesible; controla disponibilidad antes de ejecutar operaciones.
  • Permisos: Los hooks de eventos/store usan la facade de su app; registro y slots usan el host. Solicita los recursos en el manifest y concédelos en el shell.
  • Limpieza: Libera las suscripciones al desmontar el componente propietario.
import { registerTemplate } from 'wu-framework/adapters/vanilla';
await registerTemplate('card', '<h2>Resumen</h2>', { styles: ['h2{margin:0}'], standalone: false });

Los scripts son código del host y HTML no se sanea. No uses contenido no confiable como plantilla.

Referencia: src/adapters/vanilla/index.js.

vanilla.createComponent

Crea un componente con estado local y renderizado por plantilla.

createComponent(config): VanillaComponent

  • Parámetros: state, template(state), actions, onInit y onDestroy.
  • Retorno: {state,init,render,destroy,setState,getState}.
  • Errores: Necesita el runtime del framework y una instancia WU accesible; controla disponibilidad antes de ejecutar operaciones.
  • Permisos: Los hooks de eventos/store usan la facade de su app; registro y slots usan el host. Solicita los recursos en el manifest y concédelos en el shell.
  • Limpieza: Libera las suscripciones al desmontar el componente propietario.
import { createComponent, register } from 'wu-framework/adapters/vanilla';
const component = createComponent({ state: { count: 1 }, template: state => `<b>${Number(state.count)}</b>` });
await register('card', component, { standalone: false });

setState fusiona estado local y vuelve a renderizar HTML; no sustituye wu.store.

Referencia: src/adapters/vanilla/index.js.

vanilla.useWuEvents

Agrupa publicación y suscripciones sin depender de un framework UI.

useWuEvents(scope?): EventsHelper

  • Parámetros: Sin argumentos.
  • Retorno: {emit,on,once,off,cleanup}.
  • Errores: Necesita el runtime del framework y una instancia WU accesible; controla disponibilidad antes de ejecutar operaciones.
  • Permisos: Los hooks de eventos/store usan la facade de su app; registro y slots usan el host. Solicita los recursos en el manifest y concédelos en el shell.
  • Limpieza: Llama cleanup al desmontar y conserva el cancelador de once si queda pendiente.
import { useWuEvents } from 'wu-framework/adapters/vanilla';
const events = useWuEvents();
events.on('cart:changed', console.log);
events.cleanup();

Referencia: src/adapters/vanilla/index.js.

vanilla.useWuStore

Prefija rutas de lectura, escritura y escucha del store.

useWuStore(namespace?, scope?): StoreHelper

  • Parámetros: Namespace opcional.
  • Retorno: {get,set,onChange}.
  • Errores: Necesita el runtime del framework y una instancia WU accesible; controla disponibilidad antes de ejecutar operaciones.
  • Permisos: Los hooks de eventos/store usan la facade de su app; registro y slots usan el host. Solicita los recursos en el manifest y concédelos en el shell.
  • Limpieza: Cada onChange devuelve su propio unsubscribe; el helper no los acumula.
import { useWuStore } from 'wu-framework/adapters/vanilla';
const cart = useWuStore('cart');
cart.set('count', 1);
const stop = cart.onChange('count', console.log);
stop();

Referencia: src/adapters/vanilla/index.js.

vanilla.createWuSlot

Inserta un contenedor y solicita montar una app WU en él.

createWuSlot(target, props): SlotHandle

  • Parámetros: target elemento; props name,url,fallbackText,onLoad,onError.
  • Retorno: {container,destroy}.
  • Errores: Necesita el runtime del framework y una instancia WU accesible; controla disponibilidad antes de ejecutar operaciones.
  • Permisos: Los hooks de eventos/store usan la facade de su app; registro y slots usan el host. Solicita los recursos en el manifest y concédelos en el shell.
  • Limpieza: Llama destroy al retirar el host.
import { createWuSlot } from 'wu-framework/adapters/vanilla';
const slot = createWuSlot(document.querySelector('#host'), { name: 'card', url: '/apps/card' });
slot.destroy();

El montaje es asíncrono internamente; el handle no es una promesa de app montada.

Referencia: src/adapters/vanilla/index.js.

react.createUseWuAI

Conecta la interfaz react con una conversación de IA.

createUseWuAI(React): helper

  • Parámetros: Runtime solicitado por la factory; el helper acepta namespace opcional con default por defecto.
  • Retorno: Hook useWuAI(options) con messages,isStreaming,error,send,sendSync,abort,clear.
  • Errores: Comprueba la disponibilidad de WU AI; el helper mantiene un campo de error o devuelve null si no está disponible.
  • Permisos: Usa ai.send del runtime global; las acciones que solicite el proveedor conservan la política IA configurada por el host.
  • Limpieza: No destruye el coordinador IA global. Aborta explícitamente el namespace del componente cuando deba cancelar peticiones pendientes.
import { createUseWuAI } from 'wu-framework/adapters/react';
import React from 'react';
const useWuAI = createUseWuAI(React);

Crea el hook una sola vez fuera del componente; úsalo dentro del render. send utiliza streaming y sendSync solicita una respuesta completa.

Referencia: src/adapters/react/index.js.

preact.createUseWuAI

Conecta la interfaz preact con una conversación de IA.

createUseWuAI(hooks): helper

  • Parámetros: Runtime solicitado por la factory; el helper acepta namespace opcional con default por defecto.
  • Retorno: Hook useWuAI(options) con estado de mensajes y funciones send/clear.
  • Errores: Comprueba la disponibilidad de WU AI; el helper mantiene un campo de error o devuelve null si no está disponible.
  • Permisos: Usa ai.send del runtime global; las acciones que solicite el proveedor conservan la política IA configurada por el host.
  • Limpieza: No destruye el coordinador IA global. Aborta explícitamente el namespace del componente cuando deba cancelar peticiones pendientes.
import { createUseWuAI } from 'wu-framework/adapters/preact';
import * as hooks from 'preact/hooks';
const useWuAI = createUseWuAI(hooks);

Usa hooks de la misma instancia Preact que renderiza el componente.

Referencia: src/adapters/preact/ai.js.

vue.createUseWuAI

Conecta la interfaz vue con una conversación de IA.

createUseWuAI(Vue): helper

  • Parámetros: Runtime solicitado por la factory; el helper acepta namespace opcional con default por defecto.
  • Retorno: Composable con refs messages,isStreaming,error y send/clear.
  • Errores: Comprueba la disponibilidad de WU AI; el helper mantiene un campo de error o devuelve null si no está disponible.
  • Permisos: Usa ai.send del runtime global; las acciones que solicite el proveedor conservan la política IA configurada por el host.
  • Limpieza: No destruye el coordinador IA global. Aborta explícitamente el namespace del componente cuando deba cancelar peticiones pendientes.
import { createUseWuAI } from 'wu-framework/adapters/vue';
import * as Vue from 'vue';
const useWuAI = createUseWuAI(Vue);
const chat = useWuAI({ namespace: 'help' });

Esta variante utiliza refs Vue.

Referencia: src/adapters/vue/ai.js.

vue.useWuAI

Conecta la interfaz vue con una conversación de IA.

useWuAI(options?): helper

  • Parámetros: Runtime solicitado por la factory; el helper acepta namespace opcional con default por defecto.
  • Retorno: Helper simple con messages,isStreaming,error,send,clear.
  • Errores: Comprueba la disponibilidad de WU AI; el helper mantiene un campo de error o devuelve null si no está disponible.
  • Permisos: Usa ai.send del runtime global; las acciones que solicite el proveedor conservan la política IA configurada por el host.
  • Limpieza: No destruye el coordinador IA global. Aborta explícitamente el namespace del componente cuando deba cancelar peticiones pendientes.
import { useWuAI } from 'wu-framework/adapters/vue';
const chat = useWuAI({ namespace: 'help' });

Esta variante no crea refs. Las propiedades copiadas inicialmente no constituyen una vista reactiva completa del estado interno; prefiere createUseWuAI(Vue) en componentes.

Referencia: src/adapters/vue/ai.js.

svelte.createWuAIStore

Conecta la interfaz svelte con una conversación de IA.

createWuAIStore(options?): helper

  • Parámetros: Runtime solicitado por la factory; el helper acepta namespace opcional con default por defecto.
  • Retorno: Store {subscribe,send,clear} cuyo valor contiene messages,isStreaming,error.
  • Errores: Comprueba la disponibilidad de WU AI; el helper mantiene un campo de error o devuelve null si no está disponible.
  • Permisos: Usa ai.send del runtime global; las acciones que solicite el proveedor conservan la política IA configurada por el host.
  • Limpieza: No destruye el coordinador IA global. Aborta explícitamente el namespace del componente cuando deba cancelar peticiones pendientes.
import { createWuAIStore } from 'wu-framework/adapters/svelte';
const chat = createWuAIStore({ namespace: 'help' });
const stop = chat.subscribe(console.log);
stop();

Cancelar subscribe retira ese observador local; no aborta automáticamente la conversación del proveedor.

Referencia: src/adapters/svelte/ai.js.

angular.createWuAIService

Conecta la interfaz angular con una conversación de IA.

createWuAIService(options?): helper

  • Parámetros: Runtime solicitado por la factory; el helper acepta namespace opcional con default por defecto.
  • Retorno: Servicio con getters messages,isStreaming,error y métodos send/clear.
  • Errores: Comprueba la disponibilidad de WU AI; el helper mantiene un campo de error o devuelve null si no está disponible.
  • Permisos: Usa ai.send del runtime global; las acciones que solicite el proveedor conservan la política IA configurada por el host.
  • Limpieza: No destruye el coordinador IA global. Aborta explícitamente el namespace del componente cuando deba cancelar peticiones pendientes.
import { createWuAIService } from 'wu-framework/adapters/angular';
const chat = createWuAIService({ namespace: 'help' });

No es una clase decorada Injectable ni un Observable RxJS. Integra sus cambios con el mecanismo de detección del host.

Referencia: src/adapters/angular/ai.js.

solid.createUseWuAI

Conecta la interfaz solid con una conversación de IA.

createUseWuAI(): helper

  • Parámetros: Runtime solicitado por la factory; el helper acepta namespace opcional con default por defecto.
  • Retorno: Factory de helper con accessors messages,isStreaming,error y send/clear.
  • Errores: Comprueba la disponibilidad de WU AI; el helper mantiene un campo de error o devuelve null si no está disponible.
  • Permisos: Usa ai.send del runtime global; las acciones que solicite el proveedor conservan la política IA configurada por el host.
  • Limpieza: No destruye el coordinador IA global. Aborta explícitamente el namespace del componente cuando deba cancelar peticiones pendientes.
import { createUseWuAI } from 'wu-framework/adapters/solid';
const useWuAI = createUseWuAI();
const chat = useWuAI({ namespace: 'help' });

Los accessors leen un objeto ordinario: la implementación no crea signals Solid. No presupongas invalidación reactiva automática.

Referencia: src/adapters/solid/ai.js.

vanilla.useWuAI

Conecta la interfaz vanilla con una conversación de IA.

useWuAI(options?): helper

  • Parámetros: Runtime solicitado por la factory; el helper acepta namespace opcional con default por defecto.
  • Retorno: {send,clear,getMessages,getError,isStreaming}.
  • Errores: Comprueba la disponibilidad de WU AI; el helper mantiene un campo de error o devuelve null si no está disponible.
  • Permisos: Usa ai.send del runtime global; las acciones que solicite el proveedor conservan la política IA configurada por el host.
  • Limpieza: No destruye el coordinador IA global. Aborta explícitamente el namespace del componente cuando deba cancelar peticiones pendientes.
import { useWuAI } from 'wu-framework/adapters/vanilla';
const chat = useWuAI({ namespace: 'help' });
console.log(chat.getMessages());

clear vacía su historial local y la conversación asociada; actualiza tu UI después de await send.

Referencia: src/adapters/vanilla/ai.js.

lit.WuAIMixin

Conecta la interfaz lit con una conversación de IA.

WuAIMixin(Base): helper

  • Parámetros: Clase base de elemento.
  • Retorno: Subclase con wuAI,wuAISend(text,options),wuAISetNamespace(ns).
  • Errores: Comprueba la disponibilidad de WU AI; el helper mantiene un campo de error o devuelve null si no está disponible.
  • Permisos: Usa ai.send del runtime global; las acciones que solicite el proveedor conservan la política IA configurada por el host.
  • Limpieza: No destruye el coordinador IA global. Aborta explícitamente el namespace del componente cuando deba cancelar peticiones pendientes.
import { WuAIMixin } from 'wu-framework/adapters/lit';
class Card extends WuAIMixin(HTMLElement) {
  connectedCallback() { this.wuAISetNamespace('card'); }
}

No mantiene mensajes reactivos ni agrega un AbortController automáticamente.

Referencia: src/adapters/lit/ai.js.

qwik.adoptQwikStyles

Copia estilos Qwik a adoptedStyleSheets del root correspondiente.

adoptQwikStyles(container): () => void

  • Parámetros: Container con estilos; necesita CSSStyleSheet.replaceSync y adoptedStyleSheets.
  • Retorno: Función de limpieza de hojas y observador.
  • Errores: Sin soporte para constructable stylesheets devuelve cleanup vacío.
  • Permisos: Opera sobre estilos del contenedor proporcionado.
  • Limpieza: Llama la función retornada antes de destruir el contenedor.
import { adoptQwikStyles } from 'wu-framework/adapters/qwik';
const release = adoptQwikStyles(container);
release();

Referencia: src/adapters/qwik/index.js.

qwik.ensureQwikLoader

Carga y deduplica la inicialización del loader Qwik del documento.

ensureQwikLoader(load?): Promise<boolean>

  • Parámetros: función load opcional; por defecto importa @builder.io/qwik/qwikloader.js. El registro Qwik pasa el loader correspondiente a su runtime.
  • Retorno: true para la primera carga, false si ya estaba inicializado.
  • Errores: Rechaza si el módulo loader no puede importarse. La recuperación de una promesa fallida depende de la versión.
  • Permisos: El loader es código global del host.
  • Limpieza: No ofrece un API público para deshacer la ejecución del loader.
import { ensureQwikLoader } from 'wu-framework/adapters/qwik';
await ensureQwikLoader();

Referencia: src/adapters/qwik/index.js.

shared.snapshot

Crea una copia superficial para ayudar a los bindings reactivos a detectar cambios.

snapshot(value): unknown

  • Parámetros: Array, objeto o primitivo.
  • Retorno: Array nuevo, objeto superficial o el primitivo original.
  • Errores: Propaga getters o errores de propiedades al copiar un objeto.
  • Permisos: No accede al store por sí mismo.
  • Limpieza: Sin recursos persistentes.
import { snapshot } from 'wu-framework/adapters/shared';
const next = snapshot(wu.store.get('cart'));

No es un clonado profundo ni una validación de datos.

Referencia: src/adapters/shared.js.

Migrar hooks y stores a 4.0

Una emisión sin grant devuelve false. Suscribirse sin permiso lanza WU_EVENT_SUBSCRIBE_DENIED; leer, observar o escribir store sin permiso lanza WU_CAPABILITY_DENIED. El unmount libera listeners de la facade. Después, los helpers de eventos avisan y no operan; las llamadas de store lanzan WU_APP_SCOPE_REVOKED.

// App manifest: wu.permissions. Shell registration: grants.
const permissions = ['store.read:cart.count', 'store.write:cart.count', 'events.emit:cart:changed'];
await wu.init({ apps: [{
  name: 'cart', url: '/apps/cart/',
  manifest: { entry: 'assets/cart.js', wu: { permissions } },
  grants: permissions,
}] });

Los setters de React/Preact/Vue y Solid escriben el path observado con un valor o updater: setState(value) y setState(prev => next). La forma setState(path, value) escribe un subpath. Sin namespace, usa dos argumentos. En Svelte, set(value) reemplaza el valor observado y update(fn) aplica el updater según el contrato del store.

const useWuStore = createUseWuStore(React);
function Counter() {
  const { state, setState } = useWuStore('cart.count');
  return <button onClick={() => setState(value => (value ?? 0) + 1)}>{state ?? 0}</button>;
}

Para helpers fuera del contexto de un componente, conserva la facade: Vanilla acepta useWuEvents(scope) y useWuStore(namespace, scope). resolveWu(element) encuentra la facade por DOM en Lit, Alpine, htmx, Stimulus, Stencil y Qwik; un nodo retirado conserva su scope revocado. Angular ofrece WuAppScope por DI. Los props e injections de compatibilidad llamados wuInstance, y los helpers IA, siguen exponiendo el host.

Los slots pasan el elemento contenedor a WU: funcionan dentro de Shadow DOM y con nombres como cart.v2. Angular soporta montaje zoneless; solo instala detección por Zone.js si Zone.js está cargado. htmx 2 y 4 comparten htmx.process(), pero el código de setup debe usar los eventos de su versión. baseUrl cubre hx-action, hx-query y variantes data-hx-, y conserva URLs //.

Qwik no ofrece montaje standalone: register devuelve false si WU no aparece en 3 segundos o si no puede importar Qwik. No registra un slot update. La adaptación de listeners del documento para Shadow DOM permanece activa después del desmontaje.

shared.resolveWu

resolveWu(target?): WuAppFacade | WuCore | null

Acepta un nodo DOM, un contexto { wu } o una facade. Resuelve el scope del target o del lifecycle síncrono activo; solo fuera de ambos vuelve al host global. Consérvalo antes de un await si luego trabajarás fuera del contexto de render. Se exporta desde wu-framework/adapters/shared y desde los adapters Lit, Vanilla, Alpine, htmx, Stimulus, Stencil y Qwik.

WU SE CONSTRUYE CONTIGO

¿Encontraste un bug? ¿Tienes una idea?

Tu experiencia mejora WU. Cuéntanos qué falla o ayuda a sostener su desarrollo.