UNPKG

movex-core-util

Version:

Movex Core Util is the library of utilities for Movex

67 lines (66 loc) 3 kB
import type { ActionOrActionTupleFromAction, AnyAction, CheckedReconciliatoryActions, ToCheckedAction } from '../action'; import type { CheckedState, Checksum, MovexClientResourceShape, IOPayloadResult, MovexClient, ResourceIdentifier, SanitizedMovexClient } from '../core-types'; import { MovexMasterContext } from '../masterContext'; export type IOEvents<TState = unknown, A extends AnyAction = AnyAction, TResourceType extends string = string> = { /** * The following events are directed from Client to Master * */ createResource: (p: { resourceType: TResourceType; resourceState: TState; resourceId?: string; }) => IOPayloadResult<MovexClientResourceShape<TResourceType, TState>, unknown>; addResourceSubscriber: (p: { rid: ResourceIdentifier<TResourceType>; clientInfo?: MovexClient['info']; }) => IOPayloadResult<MovexClientResourceShape<TResourceType, TState>, unknown>; getResourceState: (p: { rid: ResourceIdentifier<TResourceType>; }) => IOPayloadResult<CheckedState<TState>, unknown>; getResourceSubscribers: (p: { rid: ResourceIdentifier<TResourceType>; }) => IOPayloadResult<MovexClientResourceShape<TResourceType, TState>['subscribers'], unknown>; getResource: (p: { rid: ResourceIdentifier<TResourceType>; }) => IOPayloadResult<MovexClientResourceShape<TResourceType, TState>, unknown>; emitActionDispatch: (payload: { rid: ResourceIdentifier<TResourceType>; action: ActionOrActionTupleFromAction<A>; }) => IOPayloadResult<({ type: 'ack'; nextChecksum: Checksum; } | { type: 'masterActionAck'; nextCheckedAction: ToCheckedAction<A>; } | ({ type: 'reconciliation'; } & CheckedReconciliatoryActions<A>)) & { masterContext: MovexMasterContext; }, 'MasterResourceInexistent' | string>; /** * The following events are directed from Master to Client * */ onReady: (p: SanitizedMovexClient) => void; onFwdAction: (payload: { rid: ResourceIdentifier<TResourceType>; masterContext: MovexMasterContext; } & ToCheckedAction<A>) => IOPayloadResult<void, unknown>; onReconciliateActions: (payload: { rid: ResourceIdentifier<TResourceType>; masterContext: MovexMasterContext; } & CheckedReconciliatoryActions<A>) => IOPayloadResult<void, unknown>; onResourceSubscriberAdded: (p: { rid: ResourceIdentifier<TResourceType>; client: SanitizedMovexClient; masterContext: MovexMasterContext; }) => IOPayloadResult<void, unknown>; onResourceSubscriberRemoved: (p: { rid: ResourceIdentifier<TResourceType>; clientId: MovexClient['id']; }) => IOPayloadResult<void, unknown>; /** * The following events are by-directional (from Client to Master and vice-versa) * */ ping: () => IOPayloadResult<void, unknown>; pong: () => IOPayloadResult<void, unknown>; };