You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
98 lines
4.0 KiB
98 lines
4.0 KiB
type ArgumentsType<T> = T extends (...args: infer A) => any ? A : never; |
|
type ReturnType<T> = T extends (...args: any) => infer R ? R : never; |
|
type PromisifyFn<T> = ReturnType<T> extends Promise<any> ? T : (...args: ArgumentsType<T>) => Promise<Awaited<ReturnType<T>>>; |
|
type BirpcResolver = (name: string, resolved: (...args: unknown[]) => unknown) => ((...args: unknown[]) => unknown) | undefined; |
|
interface ChannelOptions { |
|
/** |
|
* Function to post raw message |
|
*/ |
|
post: (data: any, ...extras: any[]) => any | Promise<any>; |
|
/** |
|
* Listener to receive raw message |
|
*/ |
|
on: (fn: (data: any, ...extras: any[]) => void) => any | Promise<any>; |
|
/** |
|
* Clear the listener when `$close` is called |
|
*/ |
|
off?: (fn: (data: any, ...extras: any[]) => void) => any | Promise<any>; |
|
/** |
|
* Custom function to serialize data |
|
* |
|
* by default it passes the data as-is |
|
*/ |
|
serialize?: (data: any) => any; |
|
/** |
|
* Custom function to deserialize data |
|
* |
|
* by default it passes the data as-is |
|
*/ |
|
deserialize?: (data: any) => any; |
|
/** |
|
* Call the methods with the RPC context or the original functions object |
|
*/ |
|
bind?: 'rpc' | 'functions'; |
|
} |
|
interface EventOptions<Remote> { |
|
/** |
|
* Names of remote functions that do not need response. |
|
*/ |
|
eventNames?: (keyof Remote)[]; |
|
/** |
|
* Maximum timeout for waiting for response, in milliseconds. |
|
* |
|
* @default 60_000 |
|
*/ |
|
timeout?: number; |
|
/** |
|
* Custom resolver to resolve function to be called |
|
* |
|
* For advanced use cases only |
|
*/ |
|
resolver?: BirpcResolver; |
|
/** |
|
* Custom error handler |
|
*/ |
|
onError?: (error: Error, functionName: string, args: any[]) => boolean | void; |
|
/** |
|
* Custom error handler for timeouts |
|
*/ |
|
onTimeoutError?: (functionName: string, args: any[]) => boolean | void; |
|
} |
|
type BirpcOptions<Remote> = EventOptions<Remote> & ChannelOptions; |
|
type BirpcFn<T> = PromisifyFn<T> & { |
|
/** |
|
* Send event without asking for response |
|
*/ |
|
asEvent: (...args: ArgumentsType<T>) => void; |
|
}; |
|
interface BirpcGroupFn<T> { |
|
/** |
|
* Call the remote function and wait for the result. |
|
*/ |
|
(...args: ArgumentsType<T>): Promise<Awaited<ReturnType<T>>[]>; |
|
/** |
|
* Send event without asking for response |
|
*/ |
|
asEvent: (...args: ArgumentsType<T>) => void; |
|
} |
|
type BirpcReturn<RemoteFunctions, LocalFunctions = Record<string, never>> = { |
|
[K in keyof RemoteFunctions]: BirpcFn<RemoteFunctions[K]>; |
|
} & { |
|
$functions: LocalFunctions; |
|
$close: () => void; |
|
}; |
|
type BirpcGroupReturn<RemoteFunctions> = { |
|
[K in keyof RemoteFunctions]: BirpcGroupFn<RemoteFunctions[K]>; |
|
}; |
|
interface BirpcGroup<RemoteFunctions, LocalFunctions = Record<string, never>> { |
|
readonly clients: BirpcReturn<RemoteFunctions, LocalFunctions>[]; |
|
readonly functions: LocalFunctions; |
|
readonly broadcast: BirpcGroupReturn<RemoteFunctions>; |
|
updateChannels: (fn?: ((channels: ChannelOptions[]) => void)) => BirpcReturn<RemoteFunctions, LocalFunctions>[]; |
|
} |
|
declare const DEFAULT_TIMEOUT = 60000; |
|
declare function createBirpc<RemoteFunctions = Record<string, never>, LocalFunctions extends object = Record<string, never>>(functions: LocalFunctions, options: BirpcOptions<RemoteFunctions>): BirpcReturn<RemoteFunctions, LocalFunctions>; |
|
declare function cachedMap<T, R>(items: T[], fn: ((i: T) => R)): R[]; |
|
declare function createBirpcGroup<RemoteFunctions = Record<string, never>, LocalFunctions extends object = Record<string, never>>(functions: LocalFunctions, channels: ChannelOptions[] | (() => ChannelOptions[]), options?: EventOptions<RemoteFunctions>): BirpcGroup<RemoteFunctions, LocalFunctions>; |
|
|
|
export { type ArgumentsType, type BirpcFn, type BirpcGroup, type BirpcGroupFn, type BirpcGroupReturn, type BirpcOptions, type BirpcResolver, type BirpcReturn, type ChannelOptions, DEFAULT_TIMEOUT, type EventOptions, type PromisifyFn, type ReturnType, cachedMap, createBirpc, createBirpcGroup };
|
|
|