data-transport
Version:
A simple and responsive transport
129 lines • 3.78 kB
TypeScript
import { transportKey, transportType } from './constant';
export interface BaseInteraction {
listen?: Record<string, (...args: any) => any>;
emit?: Record<string, (...args: any) => any>;
}
export type Reverse<T extends BaseInteraction> = {
emit: T['listen'];
listen: T['emit'];
};
export type MergeInteraction<T extends BaseInteraction, U extends BaseInteraction> = (T['listen'] extends undefined ? U['listen'] extends undefined ? never : {
listen: U['listen'];
} : U['listen'] extends undefined ? {
listen: T['listen'];
} : {
listen: T['listen'] & U['listen'];
}) & (T['emit'] extends undefined ? U['emit'] extends undefined ? never : {
emit: U['emit'];
} : U['emit'] extends undefined ? {
emit: T['emit'];
} : {
emit: T['emit'] & U['emit'];
});
export type Request<T> = T extends (...args: infer P) => any ? P : never;
export type Response<T> = T extends (...args: any) => Promise<infer P> ? P : never;
export interface EmitParameter<T> {
/**
* Emit with the event name.
*/
name: T;
/**
* Whether a response is required, true by default.
*/
respond?: boolean;
/**
* Timeout for the emitting event, 60s by default.
*/
timeout?: number;
/**
* Extra data for the emitting event.
*/
_extra?: Record<string, any>;
/**
* silent for timeout error, false by default.
*/
silent?: boolean;
/**
* skip before emit, false by default.
*/
skipBeforeEmit?: boolean;
}
export type EmitOptions<T> = T | EmitParameter<T>;
type TransportType = typeof transportType;
interface Options {
action: string;
type: TransportType[keyof TransportType];
[transportKey]: string;
hasRespond: boolean;
_extra?: Record<string, any>;
}
export type SendOptions<T = {}> = T & Options & {
request?: string | Response<any>;
response?: string | Response<any>;
};
export type IRequest<T = {}> = T & Options & {
requestId: string;
request: Request<any>;
};
export type IResponse<T = {}> = T & Options & {
requestId: string;
responseId: string;
response: Response<any>;
};
export type ListenerOptions<T = {}> = IRequest<T> | IResponse<T>;
export type ListenCallback<T = {}> = (options: ListenerOptions<T>) => void;
export interface TransportOptions<T = {}> {
/**
* Send method defines an sender to the specified transport.
*/
sender: (options: SendOptions<T>) => void;
/**
* Listen method attaches an event handler to the specified transport, and optionally returns a 'dispose' function to remove the listener.
*/
listener: (callback: (options: ListenerOptions<T>) => void) => (() => void) | void;
/**
* Timeout milliseconds for sending a request.
*/
timeout?: number;
/**
* Display verbose receive data log.
*/
verbose?: boolean;
/**
* Specify a prefix for event types.
*/
prefix?: string;
/**
* Specify the method name list of the class to listen.
*/
listenKeys?: string[];
/**
* Check the unexpected listen.
*/
checkListen?: boolean;
/**
* serializer
*/
serializer?: {
stringify?: (data: any) => string;
parse?: (data: string) => any;
};
/**
* logger
*/
logger?: (listenOptions: ListenerOptions<any>) => void;
}
export type ListensMap = Map<string, (request: Request<any>, options: {
hasRespond: Options['hasRespond'];
transportId: Options[typeof transportKey];
requestId: string;
[key: string]: any;
}) => any>;
export interface TransferableWorker {
/**
* Specify data by transferring ownership (transferable objects)
*/
transfer?: Transferable[];
}
export {};
//# sourceMappingURL=interface.d.ts.map