Saltar al contenido principal

Depuración e inspección

Depuración con agentes​

Para muchas tareas de depuración, el camino más rápido es usar un agente que ya conozca el flujo de depuración de @data-client/vue.

Instala la skill data-client-vue en tu agente de programación y luego pídele que inspeccione la página o el estado actual de la aplicación.

Cómo funciona la depuración con agentes​

En modo de desarrollo, DevToolsManager expone instancias activas de Controller para que un agente pueda inspeccionar el estado del caché, los metadatos de los endpoints y las acciones despachadas directamente desde la aplicación en ejecución.

Técnicamente, esos controllers se almacenan en globalThis.__DC_CONTROLLERS__, que es un Map global del navegador. Puedes pensar en él como un registro temporal del modo de desarrollo que permite a las herramientas y a los agentes localizar los stores activos de DataClientPlugin de la página actual.

A grandes rasgos, el agente puede:

  • descubrir los controllers activos de DataClientPlugin
  • leer el estado del caché normalizado o desnormalizado
  • inspeccionar fetches, respuestas, errores e invalidaciones recientes
  • correlacionar los cambios del store con la actividad de red del navegador
  • ejecutar operaciones seguras del controller, como la invalidación o la expiración, con fines de investigación

Esto es útil cuando quieres una respuesta rápida a preguntas como "¿por qué no se volvió a obtener esto?", "¿qué hay en el caché ahora mismo?" o "¿qué acción actualizó esta entity?" sin tener que recorrer manualmente cada panel del inspector.

La skill hace todo esto mediante Chrome DevTools MCP.

Depuración manual​

Si prefieres inspeccionarlo todo tú mismo, el flujo de trabajo con las herramientas de desarrollo del navegador que se describe a continuación sigue siendo la vía manual estándar.

Instalación​

Agrega la extensión del navegador para Chrome o Firefox

Abrir las herramientas de desarrollo​

botón del navegador de redux-devtools

Después de instalarla y cargar tu sitio en modo de desarrollo, haz clic en el logotipo de redux-devtool en la barra de direcciones.

Al hacerlo se abrirá el inspector, que te permite observar las acciones despachadas, su efecto en el estado del store, así como el estado actual del store.

browser-devtools

El Controller despacha acciones, lo que hace que esa página sea útil para entender qué acciones estás viendo. Aquí observamos las acciones comunes de fetch y setResponse.

nota

De forma predeterminada, la integración con devtool filtra las acciones fetch duplicadas. Esto se puede cambiar con la opción skipLogging.

Flujo de control​

Data Client usa el patrón de store flux, lo que hace que la depuración sea sencilla, ya que cada cambio es rastreable y descriptivo.

FLUXFLUX

Más información sobre el flujo de control

Inspección del estado​

Cuando se usan schemas, las respuestas se normalizan en las tablas entities y endpoints. Esto aporta ventajas de rendimiento automáticas frente a cachés de fetch clave-valor más simples, especialmente beneficiosas con datos dinámicos (que cambian). Además, elimina los errores por inconsistencia de datos.

Inspector de estado de las herramientas de desarrollo

Haz clic en la pestaña 'state' de devtools para ver el estado completo del store. Esto puede ser útil para determinar exactamente dónde están los datos. También hay una sección 'meta' del caché con información como el momento en que se realizó la solicitud (útil para el TTL).

Diferencias de estado​

Para monitorear la respuesta de un fetch en particular, puede ser más útil ver cómo se actualiza el store. Haz clic en la pestaña 'Diff' para ver qué cambió.

Inspector de diferencias de las herramientas de desarrollo

Aquí alternamos el estado 'completed' de una tarea pendiente mediante una actualización optimista.

Rastreo de acciones​

El rastreo no está habilitado de forma predeterminada, ya que es muy costoso computacionalmente. Sin embargo, puede ser muy útil para encontrar desde dónde se despachan las acciones. Personaliza DevToolsManager estableciendo la opción trace en true con getDefaultManagers:

main.ts
import { createApp } from 'vue';
import { DataClientPlugin, getDefaultManagers } from '@data-client/vue';
import App from './App.vue';

const managers = getDefaultManagers({
devToolsManager: { trace: true },
});

const app = createApp(App);
app.use(DataClientPlugin, { managers });
app.mount('#app');