UNPKG

@data-client/core

Version:

Async State Management without the Management. REST, GraphQL, SSE, Websockets, Fetch

105 lines (104 loc) 3.72 kB
import { Denormalize, EndpointInterface, EntityPath, Queryable, ResolveType, UnknownError } from '@data-client/normalizr'; import { SET, RESET, FETCH, SUBSCRIBE, UNSUBSCRIBE, INVALIDATE, GC, OPTIMISTIC, INVALIDATEALL, EXPIREALL, SET_RESPONSE } from './actionTypes.js'; import { EndpointUpdateFunction } from './controller/types.js'; type EndpointAndUpdate<E extends EndpointInterface> = EndpointInterface & { update?: EndpointUpdateFunction<E>; }; type EndpointDefault = EndpointInterface & { update?: EndpointUpdateFunction<EndpointInterface>; }; /** General meta-data for operators */ export interface ActionMeta { readonly fetchedAt: number; readonly date: number; readonly expiresAt: number; } /** Action for Controller.set() */ export interface SetAction<S extends Queryable = any> { type: typeof SET; schema: S; args: readonly any[]; meta: ActionMeta; value: {} | ((previousValue: Denormalize<S>) => {}); } export interface SetResponseActionBase<E extends EndpointAndUpdate<E> = EndpointDefault> { type: typeof SET_RESPONSE; endpoint: E; args: readonly any[]; key: string; meta: ActionMeta; } export interface SetResponseActionSuccess<E extends EndpointAndUpdate<E> = EndpointDefault> extends SetResponseActionBase<E> { response: ResolveType<E>; error?: false; } export interface SetResponseActionError<E extends EndpointAndUpdate<E> = EndpointDefault> extends SetResponseActionBase<E> { response: UnknownError; error: true; } /** Action for Controller.setResponse() */ export type SetResponseAction<E extends EndpointAndUpdate<E> = EndpointDefault> = SetResponseActionSuccess<E> | SetResponseActionError<E>; export interface FetchMeta { fetchedAt: number; resolve: (value?: any | PromiseLike<any>) => void; reject: (reason?: any) => void; promise: PromiseLike<any>; } /** Action for Controller.fetch() */ export interface FetchAction<E extends EndpointAndUpdate<E> = EndpointDefault> { type: typeof FETCH; endpoint: E; args: readonly [ ...Parameters<E> ]; key: string; meta: FetchMeta; } /** Action for Endpoint.getOptimisticResponse() */ export interface OptimisticAction<E extends EndpointAndUpdate<E> = EndpointDefault> { type: typeof OPTIMISTIC; endpoint: E; args: readonly any[]; key: string; meta: ActionMeta; error?: false; } /** Action for Controller.subscribe() */ export interface SubscribeAction<E extends EndpointAndUpdate<E> = EndpointDefault> { type: typeof SUBSCRIBE; endpoint: E; args: readonly any[]; key: string; } /** Action for Controller.unsubscribe() */ export interface UnsubscribeAction<E extends EndpointAndUpdate<E> = EndpointDefault> { type: typeof UNSUBSCRIBE; endpoint: E; args: readonly any[]; key: string; } export interface ExpireAllAction { type: typeof EXPIREALL; testKey: (key: string) => boolean; } export interface InvalidateAllAction { type: typeof INVALIDATEALL; testKey: (key: string) => boolean; } export interface InvalidateAction { type: typeof INVALIDATE; key: string; } export interface ResetAction { type: typeof RESET; date: number; } export interface GCAction { type: typeof GC; entities: EntityPath[]; endpoints: string[]; } /** @see https://dataclient.io/docs/api/Actions */ export type ActionTypes = FetchAction | OptimisticAction | SetAction | SetResponseAction | SubscribeAction | UnsubscribeAction | InvalidateAction | InvalidateAllAction | ExpireAllAction | ResetAction | GCAction; export {}; //# sourceMappingURL=actions.d.ts.map