Snapshot
Los snapshots se pasan a las funciones definidas por el usuario que se usan para calcular actualizaciones de estado. Estos permiten un acceso seguro y eficiente a los datos desnormalizados según el estado actual.
interface Snapshot {
get(schema, ...args) => DenormalizeNullable<typeof schema> | undefined;
getResponse(endpoint, ...args) => { data, expiryStatus, expiresAt };
getError(endpoint, ...args) => ErrorTypes | undefined;
fetchedAt: number;
abort: Error;
}
Usa Controller.snapshot() para construir un snapshot
Uso
import { resource } from '@data-client/rest'; import { Post } from './Post'; export { Post }; export const PostResource = resource({ path: '/posts/:id', searchParams: {} as { userId?: string | number } | undefined, schema: Post, }).extend('vote', { path: '/posts/:id/vote', method: 'POST', body: undefined, schema: Post, getOptimisticResponse(snapshot, { id }) { const post = snapshot.get(Post, { id }); if (!post) throw snapshot.abort; return { id, votes: post.votes + 1, }; }, });
Miembros
get(schema, ...args)
Busca cualquier Schema Queryable.
getResponse(endpoint, ...args)
{
data: DenormalizeNullable<E['schema']>;
expiryStatus: ExpiryStatus;
expiresAt: number;
}
Obtiene la respuesta (globalmente estable por referencia) para un par endpoint/args dado a partir del estado indicado.
data
Los datos de la respuesta desnormalizados. Garantiza estabilidad referencial global para todos sus miembros.
expiryStatus
export enum ExpiryStatus {
Invalid = 1,
InvalidIfStale,
Valid,
}
Valid
- Nunca se suspenderá.
- Podría hacer fetch si los datos están obsoletos
InvalidIfStale
- Se suspenderá si los datos están obsoletos.
- Podría hacer fetch si los datos están obsoletos
Invalid
- Siempre se suspenderá
- Siempre hará fetch
expiresAt
Un número que representa el momento en que expira. Compáralo con Date.now().
getError(endpoint, ...args)
Obtiene el error, si lo hay, de un endpoint dado. Devuelve undefined si no hay errores.
fetchedAt
Momento en que se llamó al fetch que dio lugar a este snapshot.
abort
Este es un Error que se lanza en Endpoint.getOptimisticResponse() para cancelar una actualización optimista.