UNPKG

@data-client/core

Version:

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

169 lines (152 loc) 3.69 kB
import type { Denormalize, EndpointInterface, EntityPath, Queryable, ResolveType, UnknownError, } from '@data-client/normalizr'; import type { SET, RESET, FETCH, SUBSCRIBE, UNSUBSCRIBE, INVALIDATE, GC, OPTIMISTIC, INVALIDATEALL, EXPIREALL, SET_RESPONSE, } from './actionTypes.js'; import type { 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>) => {}); } /* setResponse */ 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>; /* FETCH */ 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; } /* OPTIMISTIC */ /** 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; } /* SUBSCRIBE */ /** 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; } /* EXPIRY */ export interface ExpireAllAction { type: typeof EXPIREALL; testKey: (key: string) => boolean; } /* INVALIDATE */ export interface InvalidateAllAction { type: typeof INVALIDATEALL; testKey: (key: string) => boolean; } export interface InvalidateAction { type: typeof INVALIDATE; key: string; } /* RESET */ export interface ResetAction { type: typeof RESET; date: number; } /* GC */ 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;