Referencia de store y sincronización
Operaciones de estado, snapshots, notificaciones, historial y sesiones de sincronización con limpieza explícita.
El store opera con paths de datos y snapshots separados. Su facade de aplicación expone get, getSnapshot, set, update, on y batch; las operaciones de administración, historial y sincronización pertenecen al host.
Elegir la operación
Usa set para sustituir un dato, update para calcularlo de forma síncrona y batch para validar varias escrituras antes de realizar la primera. on entrega notificaciones en microtasks; tap observa cada commit de forma síncrona. hydrate reemplaza la raíz sin crear entradas en el ring buffer ni pasar por taps.
Los valores aceptan datos planos, arrays densos y escalares del codec. Objetos de renderer, funciones, Date, Map, ciclos y promesas no son valores de estado compartido. Un bigint escalar admitido en el store no implica que sea serializable por sync.
Una sesión con dueño
import { wu } from 'wu-framework';
const sync = wu.store.sync({ transport: 'broadcast', room: 'catalog' });
await sync.ready();
wu.store.set('catalog.selectedId', 'p-42');
console.log(sync.status());
// Al terminar la sesión:
sync.stop();
Solo las escrituras posteriores a la activación quedan registradas por sync. El orden Last Writer Wins se aplica por path; las escrituras concurrentes sobre padre e hijo no ofrecen la misma convergencia que escrituras al mismo path. Mantén una granularidad consistente y autentica el transporte cuando corresponda.
new WuStore
Crea un store independiente con historial circular.
new WuStore(bufferSize?: number): WuStore
- Parámetros: bufferSize por defecto 256; elige capacidad del historial, no un límite de bytes del estado.
- Retorno: Instancia; tamaño de buffer redondeado a potencia de dos.
- Errores: Valores escritos después se validan con el codec del store.
- Permisos: Host; no está disponible en la facade de aplicación.
- Limpieza: state.dispose() retira sync, listeners y taps.
import { WuStore } from 'wu-framework';
const state = new WuStore(512);
Referencia: src/core/wu-store.js.
wu.store.tap
Observa cada commit síncronamente, antes de las notificaciones on.
wu.store.tap(callback): () => void
- Parámetros: callback(sequence,path,value); sirve para journal o transporte.
- Retorno: Cleanup; un argumento no función produce un cleanup vacío.
- Errores: No realiza filtros por path ni entrega snapshot inicial.
- Permisos: Host; no está disponible en la facade de aplicación.
- Limpieza: stop() retira el tap.
const stop = wu.store.tap((sequence, path, value) => {
console.log(sequence, path, value);
});
Referencia: src/core/wu-store.js.
wu.store.hydrate
Sustituye el estado completo y notifica paths seleccionados.
wu.store.hydrate(state, { notifyPaths? }?): void
- Parámetros: state: objeto plano; notifyPaths por defecto claves superiores del nuevo estado.
- Retorno: void; no añade entradas al ring buffer ni dispara taps.
- Errores: WU_STORE_INVALID_VALUE o WU_STORE_INVALID_PATH antes de sustituir el estado.
- Permisos: Host; no está disponible en la facade de aplicación.
- Limpieza: No crea recursos que deban liberarse.
wu.store.hydrate({ cart: { count: 2 } }, { notifyPaths: ['cart.count'] });
Referencia: src/core/wu-store.js.
wu.store.getMetrics
Lee conteos de lecturas, escrituras, notificaciones, historial y listeners.
wu.store.getMetrics(): object
- Parámetros: Sin argumentos.
- Retorno: Snapshot de métricas.
- Errores: No mide red ni renderizado.
- Permisos: Host; no está disponible en la facade de aplicación.
- Limpieza: No crea recursos que deban liberarse.
console.log(wu.store.getMetrics().listenerCount);
Referencia: src/core/wu-store.js.
wu.store.getRecentEvents
Consulta escrituras recientes con secuencia, path, valor y timestamp.
wu.store.getRecentEvents(count?: number): object[]
- Parámetros: count finito positivo, por defecto 10 y limitado por el buffer.
- Retorno: Lista reciente primero; valores separados del estado interno.
- Errores: Valores no positivos o no finitos devuelven [].
- Permisos: Host; no está disponible en la facade de aplicación.
- Limpieza: No crea recursos que deban liberarse.
console.table(wu.store.getRecentEvents(10));
Método runtime no enumerado en la declaración WuStore.
Referencia: src/core/wu-store.js.
wu.store.reset
Vacía estado e historial y conserva suscripciones y taps.
wu.store.reset(): void
- Parámetros: Sin argumentos.
- Retorno: void.
- Errores: No constituye borrado persistente fuera de esta instancia.
- Permisos: Host; no está disponible en la facade de aplicación.
- Limpieza: No notifica automáticamente un valor inicial vacío; sync sigue activo.
wu.store.reset();
Referencia: src/core/wu-store.js.
wu.store.dispose
Detiene sync y retira estado, listeners y taps.
wu.store.dispose(): void
- Parámetros: Sin argumentos.
- Retorno: void.
- Errores: No constituye borrado persistente fuera de esta instancia.
- Permisos: Host; no está disponible en la facade de aplicación.
- Limpieza: Úsalo al retirar un store que administras; no sobre el store compartido por otro consumidor.
wu.store.dispose();
Referencia: src/core/wu-store.js.
wu.store.clear
Ejecuta la misma liberación completa que dispose.
wu.store.clear(): void
- Parámetros: Sin argumentos.
- Retorno: void.
- Errores: No constituye borrado persistente fuera de esta instancia.
- Permisos: Host; no está disponible en la facade de aplicación.
- Limpieza: También elimina suscripciones; no es solo una operación sobre valores.
wu.store.clear();
Referencia: src/core/wu-store.js.
WuSyncHandle.ready
Espera la carga del módulo y el inicio del transporte.
sync.ready(): Promise<unknown>
- Parámetros: Handle devuelto por wu.store.sync(options).
- Retorno: Promise
- Errores: ready puede rechazar; status.error expone carga/autorización/transporte.
- Permisos: Sesión de host; el relay debe autenticar pares si se usa WebSocket.
- Limpieza: stop() cancela la sesión cuando termine su propietario.
await sync.ready();
Referencia: src/core/wu-store.js.
WuSyncHandle.status
Consulta conexión, relojes, pares y contadores de sincronización.
sync.status(): WuSyncStatus
- Parámetros: Handle devuelto por wu.store.sync(options).
- Retorno: WuSyncStatus
- Errores: ready puede rechazar; status.error expone carga/autorización/transporte.
- Permisos: Sesión de host; el relay debe autenticar pares si se usa WebSocket.
- Limpieza: Lectura sin recursos adicionales.
console.log(sync.status());
Referencia: src/core/wu-store.js.
WuSyncHandle.stop
Detiene intercambio de mensajes y observación de escrituras.
sync.stop(): void
- Parámetros: Handle devuelto por wu.store.sync(options).
- Retorno: void
- Errores: ready puede rechazar; status.error expone carga/autorización/transporte.
- Permisos: Sesión de host; el relay debe autenticar pares si se usa WebSocket.
- Limpieza: Retira tap y cierra el transporte de esta sesión.
sync.stop();
Referencia: src/core/wu-store.js.
WuSyncHandle.connected
Consulta si el transporte de la sesión está conectado.
sync.connected: boolean
- Parámetros: Handle devuelto por wu.store.sync(options).
- Retorno: boolean
- Errores: ready puede rechazar; status.error expone carga/autorización/transporte.
- Permisos: Sesión de host; el relay debe autenticar pares si se usa WebSocket.
- Limpieza: Lectura de estado; la sesión se libera con stop.
console.log(sync.connected);
Referencia: src/core/wu-store.js.